ZGlmZiAtLWdpdCBhLy5naXRtb2R1bGVzIGIvLmdpdG1vZHVsZXMKaW5kZXggZGNiNzc2Zi4uYThkYmJhOSAxMDA2NDQKLS0tIGEvLmdpdG1vZHVsZXMKKysrIGIvLmdpdG1vZHVsZXMKQEAgLTQsMyArNCw2IEBACiBbc3VibW9kdWxlICJ2ZXJpbG9nL3J0bC9xc3BpbSJdCiAJcGF0aCA9IHZlcmlsb2cvcnRsL3FzcGltCiAJdXJsID0gaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEvcXNwaW0uZ2l0Citbc3VibW9kdWxlICJ2ZXJpbG9nL3J0bC95aWZpdmUveWNyMSJdCisJcGF0aCA9IHZlcmlsb2cvcnRsL3lpZml2ZS95Y3IxCisJdXJsID0gaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEveWNyMS5naXQKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggYWEyM2MwZS4uYmE0MGY1NiAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTM2LDkgKzM2LDkgQEAKIFNVQk1PRFVMRT89MQogCiAjUklTQ1YgQ09NUExJQU5DRSB0ZXN0IEVudmlyb25tZW50Ci1DT1JFTUFSS19ESVIgICA9IHZlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL2RlcGVuZGVuY2llcy9jb3JlbWFyawotUklTQ1ZfQ09NUF9ESVIgPSB2ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9kZXBlbmRlbmNpZXMvcmlzY3YtY29tcGxpYW5jZQotUklTQ1ZfVEVTVF9ESVIgPSB2ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9kZXBlbmRlbmNpZXMvcmlzY3YtdGVzdHMKK0NPUkVNQVJLX0RJUiAgID0gdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL2RlcGVuZGVuY2llcy9jb3JlbWFyaworUklTQ1ZfQ09NUF9ESVIgPSB2ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvZGVwZW5kZW5jaWVzL3Jpc2N2LWNvbXBsaWFuY2UKK1JJU0NWX1RFU1RfRElSID0gdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL2RlcGVuZGVuY2llcy9yaXNjdi10ZXN0cwogCiBDT1JFTUFSS19SRVBPICAgPSAgaHR0cHM6Ly9naXRodWIuY29tL2VlbWJjL2NvcmVtYXJrCiBSSVNDVl9DT01QX1JFUE8gPSAgaHR0cHM6Ly9naXRodWIuY29tL3Jpc2N2L3Jpc2N2LWNvbXBsaWFuY2UKZGlmZiAtLWdpdCBhL29wZW5sYW5lL21iaXN0L2Jhc2Uuc2RjIGIvb3BlbmxhbmUvbWJpc3QvYmFzZS5zZGMKaW5kZXggMWYwNTBhMS4uZWI4NDVhMCAxMDA2NDQKLS0tIGEvb3BlbmxhbmUvbWJpc3QvYmFzZS5zZGMKKysrIGIvb3BlbmxhbmUvbWJpc3QvYmFzZS5zZGMKQEAgLTE1LDcgKzE1LDYgQEAKIAogc2V0X2Nsb2NrX3RyYW5zaXRpb24gMC4xNTAwIFthbGxfY2xvY2tzXQogc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1zZXR1cCAwLjI1MDAgW2FsbF9jbG9ja3NdCi0KIHNldF9jbG9ja191bmNlcnRhaW50eSAtaG9sZCAwLjI1MDAgW2FsbF9jbG9ja3NdCiAKIHNldCA6OmVudihTWU5USF9USU1JTkdfREVSQVRFKSAwLjA1CmRpZmYgLS1naXQgYS9vcGVubGFuZS9waW5tdXgvYmFzZS5zZGMgYi9vcGVubGFuZS9waW5tdXgvYmFzZS5zZGMKaW5kZXggY2JiZmJhNS4uYmVhMzFiNiAxMDA2NDQKLS0tIGEvb3BlbmxhbmUvcGlubXV4L2Jhc2Uuc2RjCisrKyBiL29wZW5sYW5lL3Bpbm11eC9iYXNlLnNkYwpAQCAtOCwxNSArOCwxMCBAQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogY3JlYXRlX2Nsb2NrIC1uYW1lIG1jbGsgLXBlcmlvZCAxMC4wMDAwIFtnZXRfcG9ydHMge21jbGt9XQogc2V0X3Byb3BhZ2F0ZWRfY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XQotc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1yaXNlX2Zyb20gW2dldF9jbG9ja3Mge21jbGt9XSAtcmlzZV90byBbZ2V0X2Nsb2NrcyB7bWNsa31dICAtc2V0dXAgMC4yNTAwCi1zZXRfY2xvY2tfdW5jZXJ0YWludHkgLXJpc2VfZnJvbSBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1mYWxsX3RvIFtnZXRfY2xvY2tzIHttY2xrfV0gIC1zZXR1cCAwLjI1MDAKLXNldF9jbG9ja191bmNlcnRhaW50eSAtZmFsbF9mcm9tIFtnZXRfY2xvY2tzIHttY2xrfV0gLXJpc2VfdG8gW2dldF9jbG9ja3Mge21jbGt9XSAgLXNldHVwIDAuMjUwMAotc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1mYWxsX2Zyb20gW2dldF9jbG9ja3Mge21jbGt9XSAtZmFsbF90byBbZ2V0X2Nsb2NrcyB7bWNsa31dICAtc2V0dXAgMC4yNTAwCiAKLXNldF9jbG9ja191bmNlcnRhaW50eSAtcmlzZV9mcm9tIFtnZXRfY2xvY2tzIHttY2xrfV0gLXJpc2VfdG8gW2dldF9jbG9ja3Mge21jbGt9XSAgLWhvbGQgIDAuMjUwMAotc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1yaXNlX2Zyb20gW2dldF9jbG9ja3Mge21jbGt9XSAtZmFsbF90byBbZ2V0X2Nsb2NrcyB7bWNsa31dICAtaG9sZCAgMC4yNTAwCi1zZXRfY2xvY2tfdW5jZXJ0YWludHkgLWZhbGxfZnJvbSBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1yaXNlX3RvIFtnZXRfY2xvY2tzIHttY2xrfV0gIC1ob2xkICAwLjI1MDAKLXNldF9jbG9ja191bmNlcnRhaW50eSAtZmFsbF9mcm9tIFtnZXRfY2xvY2tzIHttY2xrfV0gLWZhbGxfdG8gW2dldF9jbG9ja3Mge21jbGt9XSAgLWhvbGQgIDAuMjUwMAorc2V0X2Nsb2NrX3RyYW5zaXRpb24gMC4xNTAwIFthbGxfY2xvY2tzXQorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1zZXR1cCAwLjI1MDAgW2FsbF9jbG9ja3NdCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLWhvbGQgMC4yNTAwIFthbGxfY2xvY2tzXQogCiBzZXQgOjplbnYoU1lOVEhfVElNSU5HX0RFUkFURSkgMC4wNQogcHV0cyAiXFtJTkZPXF06IFNldHRpbmcgdGltaW5nIGRlcmF0ZSB0bzogW2V4cHIgeyQ6OmVudihTWU5USF9USU1JTkdfREVSQVRFKSAqIDEwfV0gJSIKZGlmZiAtLWdpdCBhL29wZW5sYW5lL3FzcGltL2Jhc2Uuc2RjIGIvb3BlbmxhbmUvcXNwaW0vYmFzZS5zZGMKaW5kZXggYTllMmFhZi4uNDE2NmQzNiAxMDA2NDQKLS0tIGEvb3BlbmxhbmUvcXNwaW0vYmFzZS5zZGMKKysrIGIvb3BlbmxhbmUvcXNwaW0vYmFzZS5zZGMKQEAgLTIyLDIyICsyMiwxMCBAQAogc2V0X2Nhc2VfYW5hbHlzaXMgMCBbZ2V0X3BvcnRzIHtjZmdfY3NrYV9zcF9jb1swXX1dCiAKIHNldF9wcm9wYWdhdGVkX2Nsb2NrIFtnZXRfY2xvY2tzIHtzcGljbGt9XQotc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1yaXNlX2Zyb20gW2dldF9jbG9ja3Mge21jbGt9XSAtcmlzZV90byBbZ2V0X2Nsb2NrcyB7bWNsa31dICAgICAgLWhvbGQgIDAuMjUwMAotc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1yaXNlX2Zyb20gW2dldF9jbG9ja3Mge21jbGt9XSAtcmlzZV90byBbZ2V0X2Nsb2NrcyB7bWNsa31dICAgICAgLXNldHVwIDAuMjUwMAotc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1yaXNlX2Zyb20gW2dldF9jbG9ja3Mge21jbGt9XSAtZmFsbF90byBbZ2V0X2Nsb2NrcyB7bWNsa31dICAgICAgLWhvbGQgIDAuMjUwMAotc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1yaXNlX2Zyb20gW2dldF9jbG9ja3Mge21jbGt9XSAtZmFsbF90byBbZ2V0X2Nsb2NrcyB7bWNsa31dICAgICAgLXNldHVwIDAuMjUwMAotc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1mYWxsX2Zyb20gW2dldF9jbG9ja3Mge21jbGt9XSAtcmlzZV90byBbZ2V0X2Nsb2NrcyB7bWNsa31dICAgICAgLWhvbGQgIDAuMjUwMAotc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1mYWxsX2Zyb20gW2dldF9jbG9ja3Mge21jbGt9XSAtcmlzZV90byBbZ2V0X2Nsb2NrcyB7bWNsa31dICAgICAgLXNldHVwIDAuMjUwMAotc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1mYWxsX2Zyb20gW2dldF9jbG9ja3Mge21jbGt9XSAtZmFsbF90byBbZ2V0X2Nsb2NrcyB7bWNsa31dICAgICAgLWhvbGQgIDAuMjUwMAotc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1mYWxsX2Zyb20gW2dldF9jbG9ja3Mge21jbGt9XSAtZmFsbF90byBbZ2V0X2Nsb2NrcyB7bWNsa31dICAgICAgLXNldHVwIDAuMjUwMAotc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1yaXNlX2Zyb20gW2dldF9jbG9ja3Mge3NwaWNsa31dIC1yaXNlX3RvIFtnZXRfY2xvY2tzIHtzcGljbGt9XSAgLWhvbGQgIDAuMjUwMAotc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1yaXNlX2Zyb20gW2dldF9jbG9ja3Mge3NwaWNsa31dIC1yaXNlX3RvIFtnZXRfY2xvY2tzIHtzcGljbGt9XSAgLXNldHVwIDAuMjUwMAotc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1yaXNlX2Zyb20gW2dldF9jbG9ja3Mge3NwaWNsa31dIC1mYWxsX3RvIFtnZXRfY2xvY2tzIHtzcGljbGt9XSAgLWhvbGQgIDAuMjUwMAotc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1yaXNlX2Zyb20gW2dldF9jbG9ja3Mge3NwaWNsa31dIC1mYWxsX3RvIFtnZXRfY2xvY2tzIHtzcGljbGt9XSAgLXNldHVwIDAuMjUwMAotc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1mYWxsX2Zyb20gW2dldF9jbG9ja3Mge3NwaWNsa31dIC1yaXNlX3RvIFtnZXRfY2xvY2tzIHtzcGljbGt9XSAgLWhvbGQgIDAuMjUwMAotc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1mYWxsX2Zyb20gW2dldF9jbG9ja3Mge3NwaWNsa31dIC1yaXNlX3RvIFtnZXRfY2xvY2tzIHtzcGljbGt9XSAgLXNldHVwIDAuMjUwMAotc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1mYWxsX2Zyb20gW2dldF9jbG9ja3Mge3NwaWNsa31dIC1mYWxsX3RvIFtnZXRfY2xvY2tzIHtzcGljbGt9XSAgLWhvbGQgIDAuMjUwMAotc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1mYWxsX2Zyb20gW2dldF9jbG9ja3Mge3NwaWNsa31dIC1mYWxsX3RvIFtnZXRfY2xvY2tzIHtzcGljbGt9XSAgLXNldHVwIDAuMjUwMAorCitzZXRfY2xvY2tfdHJhbnNpdGlvbiAwLjE1MDAgW2FsbF9jbG9ja3NdCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLXNldHVwIDAuMjUwMCBbYWxsX2Nsb2Nrc10KK3NldF9jbG9ja191bmNlcnRhaW50eSAtaG9sZCAwLjI1MDAgW2FsbF9jbG9ja3NdCiAKIHNldCA6OmVudihTWU5USF9USU1JTkdfREVSQVRFKSAwLjA1CiBwdXRzICJcW0lORk9cXTogU2V0dGluZyB0aW1pbmcgZGVyYXRlIHRvOiBbZXhwciB7JDo6ZW52KFNZTlRIX1RJTUlOR19ERVJBVEUpICogMTB9XSAlIgpkaWZmIC0tZ2l0IGEvb3BlbmxhbmUvcXNwaW0vY29uZmlnLnRjbCBiL29wZW5sYW5lL3FzcGltL2NvbmZpZy50Y2wKaW5kZXggYTI5ODM5YS4uMzRiMDEwMSAxMDA3NTUKLS0tIGEvb3BlbmxhbmUvcXNwaW0vY29uZmlnLnRjbAorKysgYi9vcGVubGFuZS9xc3BpbS9jb25maWcudGNsCkBAIC00MSw3ICs0MSw3IEBACiAKICMgTG9jYWwgc291cmNlcyArIG5vMnVzYiBzb3VyY2VzCiBzZXQgOjplbnYoVkVSSUxPR19GSUxFUykgIlwKLSAgICAgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvY2xrX3NrZXdfYWRqdXN0L3NyYy9jbGtfc2tld19hZGp1c3QuZ3YgXAorICAgICAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9saWIvY2xrX3NrZXdfYWRqdXN0Lmd2IFwKICAgICAgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvbGliL3Jlc2V0X3N5bmMuc3YgICAgICBcCiAgICAgICAgICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3FzcGltL3NyYy9xc3BpbV90b3Auc3YgXAogICAgICAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9xc3BpbS9zcmMvcXNwaW1faWYuc3YgXApkaWZmIC0tZ2l0IGEvb3BlbmxhbmUvc3ludGFjb3JlL2NvbmZpZy50Y2wgYi9vcGVubGFuZS9zeW50YWNvcmUvY29uZmlnLnRjbApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNTdhNjc0YS4uMDAwMDAwMAotLS0gYS9vcGVubGFuZS9zeW50YWNvcmUvY29uZmlnLnRjbAorKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi0jIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6ICAyMDIxICwgRGluZXNoIEFubmF5eWEKLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0jIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBNb2RpZmllZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgotCi0jIEdsb2JhbAotIyAtLS0tLS0KLQotc2V0IHNjcmlwdF9kaXIgW2ZpbGUgZGlybmFtZSBbZmlsZSBub3JtYWxpemUgW2luZm8gc2NyaXB0XV1dCi0jIE5hbWUKLXNldCA6OmVudihERVNJR05fTkFNRSkgc2NyMV90b3Bfd2IKLQotc2V0IDo6ZW52KERFU0lHTl9JU19DT1JFKSAiMCIKLXNldCA6OmVudihGUF9QRE5fQ09SRV9SSU5HKSAiMCIKLQotIyBUaW1pbmcgY29uZmlndXJhdGlvbgotc2V0IDo6ZW52KENMT0NLX1BFUklPRCkgIjEwIgotc2V0IDo6ZW52KENMT0NLX1BPUlQpICJ3Yl9jbGsgY29yZV9jbGsiCi0KLXNldCA6OmVudihTWU5USF9NQVhfRkFOT1VUKSA0Ci0KLSMjIENUUyBCVUZGRVIKLXNldCA6OmVudihDVFNfQ0xLX0JVRkZFUl9MSVNUKSAic2t5MTMwX2ZkX3NjX2hkX19jbGtidWZfNCBza3kxMzBfZmRfc2NfaGRfX2Nsa2J1Zl84Igotc2V0IDo6ZW52KENUU19TSU5LX0NMVVNURVJJTkdfU0laRSkgIjE2Igotc2V0IDo6ZW52KENMT0NLX0JVRkZFUl9GQU5PVVQpICI4IgotCi0jIFNvdXJjZXMKLSMgLS0tLS0tLQotCi0jIExvY2FsIHNvdXJjZXMgKyBubzJ1c2Igc291cmNlcwotc2V0IDo6ZW52KFZFUklMT0dfRklMRVMpICJcCi0gICAgICAgICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL2Nsa19za2V3X2FkanVzdC9zcmMvY2xrX3NrZXdfYWRqdXN0Lmd2IFwKLQkkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfdG9wLnN2ICBcCi0JJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvc2NyMV9jb3JlX3RvcC5zdiAgXAotCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3NjcjFfZG0uc3YgIFwKLQkkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9zY3IxX3RhcGNfc3luY2hyb25pemVyLnN2ICBcCi0JJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvc2NyMV9jbGtfY3RybC5zdiAgXAotCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3NjcjFfc2N1LnN2ICBcCi0JJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvc2NyMV90YXBjLnN2ICBcCi0JJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvc2NyMV90YXBjX3NoaWZ0X3JlZy5zdiAgXAotCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3NjcjFfZG1pLnN2ICBcCi0JJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvcHJpbWl0aXZlcy9zY3IxX3Jlc2V0X2NlbGxzLnN2ICBcCi0JJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2lmdS5zdiAgXAotCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9pZHUuc3YgIFwKLQkkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfZXh1LnN2ICBcCi0JJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX21wcmYuc3YgIFwKLQkkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfY3NyLnN2ICBcCi0JJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2lhbHUuc3YgIFwKLQkkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfbXVsLnN2ICBcCi0JJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2Rpdi5zdiAgXAotCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9sc3Uuc3YgIFwKLQkkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfaGR1LnN2ICBcCi0JJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX3RkdS5zdiAgXAotCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfaXBpYy5zdiAgIFwKLQkkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvdG9wL3NjcjFfZG1lbV9yb3V0ZXIuc3YgICBcCi0JJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL3RvcC9zY3IxX2ltZW1fcm91dGVyLnN2ICAgXAotCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy90b3Avc2NyMV90Y20uc3YgICBcCi0JJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL3RvcC9zY3IxX3RpbWVyLnN2ICAgXAotCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy90b3Avc2NyMV90b3Bfd2Iuc3YgICBcCi0JJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL3RvcC9zY3IxX2RtZW1fd2Iuc3YgICBcCi0JJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL3RvcC9zY3IxX2ltZW1fd2Iuc3YgICBcCi0JJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL3RvcC9zY3IxX2ludGYuc3YgICBcCi0JJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvbGliL2FzeW5jX2ZpZm8uc3YgIgotCi1zZXQgOjplbnYoVkVSSUxPR19JTkNMVURFX0RJUlMpIFtnbG9iICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9pbmNsdWRlcyBdCi1zZXQgOjplbnYoU1lOVEhfUkVBRF9CTEFDS0JPWF9MSUIpIDEKLXNldCA6OmVudihTWU5USF9ERUZJTkVTKSBbbGlzdCBTWU5USEVTSVMgXQotCi1zZXQgOjplbnYoU0RDX0ZJTEUpICIkc2NyaXB0X2Rpci9iYXNlLnNkYyIKLXNldCA6OmVudihCQVNFX1NEQ19GSUxFKSAiJHNjcmlwdF9kaXIvYmFzZS5zZGMiCi0jc2V0IDo6ZW52KFNZTlRIX0RFRklORVMpIFtsaXN0IFNDUjFfREJHX0VOIF0KLQotc2V0IDo6ZW52KExFQ19FTkFCTEUpIDAKLQotc2V0IDo6ZW52KFZERF9QSU4pIFtsaXN0IHt2Y2NkMX1dCi1zZXQgOjplbnYoR05EX1BJTikgW2xpc3Qge3Zzc2QxfV0KLQotCi0jIC0tLS0tLS0tCi0jIEZsb29ycGxhbm5pbmcKLSMgLS0tLS0tLS0tLS0tLQotCi1zZXQgOjplbnYoRlBfUElOX09SREVSX0NGRykgJDo6ZW52KERFU0lHTl9ESVIpL3Bpbl9vcmRlci5jZmcKLQotc2V0IDo6ZW52KEZQX1NJWklORykgYWJzb2x1dGUKLXNldCA6OmVudihESUVfQVJFQSkgW2xpc3QgMC4wIDAuMCAxNTIwLjAgNTIwLjBdCi0KLQotIyBJZiB5b3UncmUgZ29pbmcgdG8gdXNlIG11bHRpcGxlIHBvd2VyIGRvbWFpbnMsIHRoZW4ga2VlcCB0aGlzIGRpc2FibGVkLgotc2V0IDo6ZW52KFJVTl9DVkMpIDAKLQotI3NldCA6OmVudihQRE5fQ0ZHKSAkc2NyaXB0X2Rpci9wZG4udGNsCi0KLQotc2V0IDo6ZW52KFBMX1RJTUVfRFJJVkVOKSAxCi1zZXQgOjplbnYoUExfVEFSR0VUX0RFTlNJVFkpICIwLjMyIgotCi0jIGhlbHBzIGluIGFudGVlbmEgZml4Ci1zZXQgOjplbnYoVVNFX0FSQ19BTlRFTk5BX0NIRUNLKSAiMCIKLQotc2V0IDo6ZW52KEZQX0lPX1ZFWFRFTkQpIDQKLXNldCA6OmVudihGUF9JT19IRVhURU5EKSA0Ci0KLXNldCA6OmVudihGUF9QRE5fVlBJVENIKSAxMDAKLXNldCA6OmVudihGUF9QRE5fSFBJVENIKSAxMDAKLXNldCA6OmVudihGUF9QRE5fVldJRFRIKSAzCi1zZXQgOjplbnYoRlBfUEROX0hXSURUSCkgMwotCi1zZXQgOjplbnYoR0xCX1JUX01BWExBWUVSKSA1Ci1zZXQgOjplbnYoR0xCX1JUX01BWF9ESU9ERV9JTlNfSVRFUlMpIDEwCi1zZXQgOjplbnYoRElPREVfSU5TRVJUSU9OX1NUUkFURUdZKSA0Ci0KLQotc2V0IDo6ZW52KFFVSVRfT05fVElNSU5HX1ZJT0xBVElPTlMpICIwIgotc2V0IDo6ZW52KFFVSVRfT05fTUFHSUNfRFJDKSAiMSIKLXNldCA6OmVudihRVUlUX09OX0xWU19FUlJPUikgIjAiCi1zZXQgOjplbnYoUVVJVF9PTl9TTEVXX1ZJT0xBVElPTlMpICIwIgotCi0jTmVlZCB0byBjcm9zcy1jaGVjayB3aHkgZ2xvYmFsIHRpbWluZyBvcGltaXphdGlvbiBjcmVhdGluZyBzZXR1cCB2aW8gd2l0aCBodWdoIGhvbGQgZml4Ci1zZXQgOjplbnYoR0xCX1JFU0laRVJfVElNSU5HX09QVElNSVpBVElPTlMpICIwIgotCmRpZmYgLS1naXQgYS9vcGVubGFuZS91c2VyX3Byb2plY3Rfd3JhcHBlci9jb25maWcudGNsIGIvb3BlbmxhbmUvdXNlcl9wcm9qZWN0X3dyYXBwZXIvY29uZmlnLnRjbAppbmRleCA5N2U4MTUzLi4wZjVhMWM4IDEwMDY0NAotLS0gYS9vcGVubGFuZS91c2VyX3Byb2plY3Rfd3JhcHBlci9jb25maWcudGNsCisrKyBiL29wZW5sYW5lL3VzZXJfcHJvamVjdF93cmFwcGVyL2NvbmZpZy50Y2wKQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgJHByb2pfZGlyLy4uLy4uL3Zlcmlsb2cvZ2wvbWJpc3QudiAgICAgXAogICAgICAgICAkcHJval9kaXIvLi4vLi4vdmVyaWxvZy9nbC91YXJ0X2kyY21fdXNiX3NwaS52ICAgICBcCiAJJHByb2pfZGlyLy4uLy4uL3Zlcmlsb2cvZ2wvd2JfaG9zdC52IFwKLQkkcHJval9kaXIvLi4vLi4vdmVyaWxvZy9nbC9zeW50YWNvcmUudiBcCisJJHByb2pfZGlyLy4uLy4uL3Zlcmlsb2cvZ2wveWlmaXZlLnYgXAogCSRwcm9qX2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9zcmFtX21hY3Jvcy9za3kxMzBfc3JhbV8ya2J5dGVfMXJ3MXJfMzJ4NTEyXzgudiBcCiAJIgogCkBAIC03OSw3ICs3OSw3IEBACiAJJGxlZl9yb290L3VhcnRfaTJjbV91c2Jfc3BpLmxlZiBcCiAJJGxlZl9yb290L3diX2hvc3QubGVmIFwKIAkkbGVmX3Jvb3QvbWJpc3QubGVmIFwKLQkkbGVmX3Jvb3Qvc3ludGFjb3JlLmxlZiBcCisJJGxlZl9yb290L3lpZml2ZS5sZWYgXAogCSRsZWZfcm9vdC9za3kxMzBfc3JhbV8ya2J5dGVfMXJ3MXJfMzJ4NTEyXzgubGVmIFwKIAkiCiAKQEAgLTkwLDEzICs5MCwxMyBAQAogCSRnZHNfcm9vdC91YXJ0X2kyY21fdXNiX3NwaS5nZHMgXAogCSRnZHNfcm9vdC93Yl9ob3N0LmdkcyBcCiAJJGdkc19yb290L21iaXN0LmdkcyBcCi0JJGdkc19yb290L3N5bnRhY29yZS5nZHMgXAorCSRnZHNfcm9vdC95aWZpdmUuZ2RzIFwKIAkkZ2RzX3Jvb3Qvc2t5MTMwX3NyYW1fMmtieXRlXzFydzFyXzMyeDUxMl84LmdkcyBcCiAJIgogCiBzZXQgOjplbnYoU1lOVEhfREVGSU5FUykgW2xpc3QgU1lOVEhFU0lTIF0KIAotc2V0IDo6ZW52KFZFUklMT0dfSU5DTFVERV9ESVJTKSBbZ2xvYiAkcHJval9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2luY2x1ZGVzIF0KK3NldCA6OmVudihWRVJJTE9HX0lOQ0xVREVfRElSUykgW2dsb2IgJHByb2pfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3lpZml2ZS95Y3IxL3NyYy9pbmNsdWRlcyBdCiAKIHNldCA6OmVudihHTEJfUlRfTUFYTEFZRVIpIDUKIApkaWZmIC0tZ2l0IGEvb3BlbmxhbmUvc3ludGFjb3JlL2Jhc2Uuc2RjIGIvb3BlbmxhbmUveWlmaXZlL2Jhc2Uuc2RjCnNpbWlsYXJpdHkgaW5kZXggODIlCnJlbmFtZSBmcm9tIG9wZW5sYW5lL3N5bnRhY29yZS9iYXNlLnNkYwpyZW5hbWUgdG8gb3BlbmxhbmUveWlmaXZlL2Jhc2Uuc2RjCmluZGV4IGE4MTFmNGEuLjc3N2VjMmQgMTAwNjQ0Ci0tLSBhL29wZW5sYW5lL3N5bnRhY29yZS9iYXNlLnNkYworKysgYi9vcGVubGFuZS95aWZpdmUvYmFzZS5zZGMKQEAgLTksMzAgKzksMTAgQEAKIGNyZWF0ZV9jbG9jayAtbmFtZSBjb3JlX2NsayAtcGVyaW9kIDIwLjAwMDAgW2dldF9wb3J0cyB7Y29yZV9jbGt9XQogY3JlYXRlX2Nsb2NrIC1uYW1lIHJ0Y19jbGsgLXBlcmlvZCA0MC4wMDAwIFtnZXRfcG9ydHMge3J0Y19jbGt9XQogY3JlYXRlX2Nsb2NrIC1uYW1lIHdiX2NsayAtcGVyaW9kIDEwLjAwMDAgW2dldF9wb3J0cyB7d2JfY2xrfV0KLXNldF9jbG9ja191bmNlcnRhaW50eSAtcmlzZV9mcm9tIFtnZXRfY2xvY2tzIHtjb3JlX2Nsa31dIC1yaXNlX3RvIFtnZXRfY2xvY2tzIHtjb3JlX2Nsa31dICAtaG9sZCAgMC4yNTAwCi1zZXRfY2xvY2tfdW5jZXJ0YWludHkgLXJpc2VfZnJvbSBbZ2V0X2Nsb2NrcyB7Y29yZV9jbGt9XSAtcmlzZV90byBbZ2V0X2Nsb2NrcyB7Y29yZV9jbGt9XSAgLXNldHVwIDAuMjUwMAotc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1yaXNlX2Zyb20gW2dldF9jbG9ja3Mge2NvcmVfY2xrfV0gLWZhbGxfdG8gW2dldF9jbG9ja3Mge2NvcmVfY2xrfV0gIC1ob2xkICAwLjI1MDAKLXNldF9jbG9ja191bmNlcnRhaW50eSAtcmlzZV9mcm9tIFtnZXRfY2xvY2tzIHtjb3JlX2Nsa31dIC1mYWxsX3RvIFtnZXRfY2xvY2tzIHtjb3JlX2Nsa31dICAtc2V0dXAgMC4yNTAwCi1zZXRfY2xvY2tfdW5jZXJ0YWludHkgLWZhbGxfZnJvbSBbZ2V0X2Nsb2NrcyB7Y29yZV9jbGt9XSAtcmlzZV90byBbZ2V0X2Nsb2NrcyB7Y29yZV9jbGt9XSAgLWhvbGQgIDAuMjUwMAotc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1mYWxsX2Zyb20gW2dldF9jbG9ja3Mge2NvcmVfY2xrfV0gLXJpc2VfdG8gW2dldF9jbG9ja3Mge2NvcmVfY2xrfV0gIC1zZXR1cCAwLjI1MDAKLXNldF9jbG9ja191bmNlcnRhaW50eSAtZmFsbF9mcm9tIFtnZXRfY2xvY2tzIHtjb3JlX2Nsa31dIC1mYWxsX3RvIFtnZXRfY2xvY2tzIHtjb3JlX2Nsa31dICAtaG9sZCAgMC4yNTAwCi1zZXRfY2xvY2tfdW5jZXJ0YWludHkgLWZhbGxfZnJvbSBbZ2V0X2Nsb2NrcyB7Y29yZV9jbGt9XSAtZmFsbF90byBbZ2V0X2Nsb2NrcyB7Y29yZV9jbGt9XSAgLXNldHVwIDAuMjUwMAotc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1yaXNlX2Zyb20gW2dldF9jbG9ja3Mge3J0Y19jbGt9XSAtcmlzZV90byBbZ2V0X2Nsb2NrcyB7cnRjX2Nsa31dICAgIC1ob2xkICAwLjI1MDAKLXNldF9jbG9ja191bmNlcnRhaW50eSAtcmlzZV9mcm9tIFtnZXRfY2xvY2tzIHtydGNfY2xrfV0gLXJpc2VfdG8gW2dldF9jbG9ja3Mge3J0Y19jbGt9XSAgICAtc2V0dXAgMC4yNTAwCi1zZXRfY2xvY2tfdW5jZXJ0YWludHkgLXJpc2VfZnJvbSBbZ2V0X2Nsb2NrcyB7cnRjX2Nsa31dIC1mYWxsX3RvIFtnZXRfY2xvY2tzIHtydGNfY2xrfV0gICAgLWhvbGQgIDAuMjUwMAotc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1yaXNlX2Zyb20gW2dldF9jbG9ja3Mge3J0Y19jbGt9XSAtZmFsbF90byBbZ2V0X2Nsb2NrcyB7cnRjX2Nsa31dICAgIC1zZXR1cCAwLjI1MDAKLXNldF9jbG9ja191bmNlcnRhaW50eSAtZmFsbF9mcm9tIFtnZXRfY2xvY2tzIHtydGNfY2xrfV0gLXJpc2VfdG8gW2dldF9jbG9ja3Mge3J0Y19jbGt9XSAgICAtaG9sZCAgMC4yNTAwCi1zZXRfY2xvY2tfdW5jZXJ0YWludHkgLWZhbGxfZnJvbSBbZ2V0X2Nsb2NrcyB7cnRjX2Nsa31dIC1yaXNlX3RvIFtnZXRfY2xvY2tzIHtydGNfY2xrfV0gICAgLXNldHVwIDAuMjUwMAotc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1mYWxsX2Zyb20gW2dldF9jbG9ja3Mge3J0Y19jbGt9XSAtZmFsbF90byBbZ2V0X2Nsb2NrcyB7cnRjX2Nsa31dICAgIC1ob2xkICAwLjI1MDAKLXNldF9jbG9ja191bmNlcnRhaW50eSAtZmFsbF9mcm9tIFtnZXRfY2xvY2tzIHtydGNfY2xrfV0gLWZhbGxfdG8gW2dldF9jbG9ja3Mge3J0Y19jbGt9XSAgICAtc2V0dXAgMC4yNTAwCi1zZXRfY2xvY2tfdW5jZXJ0YWludHkgLXJpc2VfZnJvbSBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLXJpc2VfdG8gW2dldF9jbG9ja3Mge3diX2Nsa31dICAgICAgLWhvbGQgIDAuMjUwMAotc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1yaXNlX2Zyb20gW2dldF9jbG9ja3Mge3diX2Nsa31dIC1yaXNlX3RvIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAgICAgIC1zZXR1cCAwLjI1MDAKLXNldF9jbG9ja191bmNlcnRhaW50eSAtcmlzZV9mcm9tIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtZmFsbF90byBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gICAgICAtaG9sZCAgMC4yNTAwCi1zZXRfY2xvY2tfdW5jZXJ0YWludHkgLXJpc2VfZnJvbSBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWZhbGxfdG8gW2dldF9jbG9ja3Mge3diX2Nsa31dICAgICAgLXNldHVwIDAuMjUwMAotc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1mYWxsX2Zyb20gW2dldF9jbG9ja3Mge3diX2Nsa31dIC1yaXNlX3RvIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAgICAgIC1ob2xkICAwLjI1MDAKLXNldF9jbG9ja191bmNlcnRhaW50eSAtZmFsbF9mcm9tIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtcmlzZV90byBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gICAgICAtc2V0dXAgMC4yNTAwCi1zZXRfY2xvY2tfdW5jZXJ0YWludHkgLWZhbGxfZnJvbSBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWZhbGxfdG8gW2dldF9jbG9ja3Mge3diX2Nsa31dICAgICAgLWhvbGQgIDAuMjUwMAotc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1mYWxsX2Zyb20gW2dldF9jbG9ja3Mge3diX2Nsa31dIC1mYWxsX3RvIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAgICAgIC1zZXR1cCAwLjI1MDAKKworc2V0X2Nsb2NrX3RyYW5zaXRpb24gMC4xNTAwIFthbGxfY2xvY2tzXQorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1zZXR1cCAwLjI1MDAgW2FsbF9jbG9ja3NdCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLWhvbGQgMC4yNTAwIFthbGxfY2xvY2tzXQogCiAKIHNldCA6OmVudihTWU5USF9USU1JTkdfREVSQVRFKSAwLjA1CmRpZmYgLS1naXQgYS9vcGVubGFuZS95aWZpdmUvY29uZmlnLnRjbCBiL29wZW5sYW5lL3lpZml2ZS9jb25maWcudGNsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVhNGU2YzkKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVubGFuZS95aWZpdmUvY29uZmlnLnRjbApAQCAtMCwwICsxLDEzMiBAQAorIyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAgMjAyMSAsIERpbmVzaCBBbm5heXlhCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorIyBTUERYLUZpbGVDb250cmlidXRvcjogTW9kaWZpZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKworIyBHbG9iYWwKKyMgLS0tLS0tCisKK3NldCBzY3JpcHRfZGlyIFtmaWxlIGRpcm5hbWUgW2ZpbGUgbm9ybWFsaXplIFtpbmZvIHNjcmlwdF1dXQorIyBOYW1lCitzZXQgOjplbnYoREVTSUdOX05BTUUpIHljcjFfdG9wX3diCisKK3NldCA6OmVudihERVNJR05fSVNfQ09SRSkgIjAiCitzZXQgOjplbnYoRlBfUEROX0NPUkVfUklORykgIjAiCisKKyMgVGltaW5nIGNvbmZpZ3VyYXRpb24KK3NldCA6OmVudihDTE9DS19QRVJJT0QpICIxMCIKK3NldCA6OmVudihDTE9DS19QT1JUKSAid2JfY2xrIGNvcmVfY2xrIgorCitzZXQgOjplbnYoU1lOVEhfTUFYX0ZBTk9VVCkgNAorCisjIyBDVFMgQlVGRkVSCitzZXQgOjplbnYoQ1RTX0NMS19CVUZGRVJfTElTVCkgInNreTEzMF9mZF9zY19oZF9fY2xrYnVmXzQgc2t5MTMwX2ZkX3NjX2hkX19jbGtidWZfOCIKK3NldCA6OmVudihDVFNfU0lOS19DTFVTVEVSSU5HX1NJWkUpICIxNiIKK3NldCA6OmVudihDTE9DS19CVUZGRVJfRkFOT1VUKSAiOCIKKworIyBTb3VyY2VzCisjIC0tLS0tLS0KKworIyBMb2NhbCBzb3VyY2VzICsgbm8ydXNiIHNvdXJjZXMKK3NldCA6OmVudihWRVJJTE9HX0ZJTEVTKSAiXAorICAgICAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9jbGtfc2tld19hZGp1c3Qvc3JjL2Nsa19za2V3X2FkanVzdC5ndiBcCisJJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwveWlmaXZlL3ljcjEvc3JjL2NvcmUvcGlwZWxpbmUveWNyMV9waXBlX3RvcC5zdiAgXAorCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3lpZml2ZS95Y3IxL3NyYy9jb3JlL3ljcjFfY29yZV90b3Auc3YgIFwKKwkkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC95aWZpdmUveWNyMS9zcmMvY29yZS95Y3IxX2RtLnN2ICBcCisJJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwveWlmaXZlL3ljcjEvc3JjL2NvcmUveWNyMV90YXBjX3N5bmNocm9uaXplci5zdiAgXAorCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3lpZml2ZS95Y3IxL3NyYy9jb3JlL3ljcjFfY2xrX2N0cmwuc3YgIFwKKwkkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC95aWZpdmUveWNyMS9zcmMvY29yZS95Y3IxX3NjdS5zdiAgXAorCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3lpZml2ZS95Y3IxL3NyYy9jb3JlL3ljcjFfdGFwYy5zdiAgXAorCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3lpZml2ZS95Y3IxL3NyYy9jb3JlL3ljcjFfdGFwY19zaGlmdF9yZWcuc3YgIFwKKwkkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC95aWZpdmUveWNyMS9zcmMvY29yZS95Y3IxX2RtaS5zdiAgXAorCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3lpZml2ZS95Y3IxL3NyYy9jb3JlL3ByaW1pdGl2ZXMveWNyMV9yZXNldF9jZWxscy5zdiAgXAorCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3lpZml2ZS95Y3IxL3NyYy9jb3JlL3BpcGVsaW5lL3ljcjFfcGlwZV9pZnUuc3YgIFwKKwkkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC95aWZpdmUveWNyMS9zcmMvY29yZS9waXBlbGluZS95Y3IxX3BpcGVfaWR1LnN2ICBcCisJJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwveWlmaXZlL3ljcjEvc3JjL2NvcmUvcGlwZWxpbmUveWNyMV9waXBlX2V4dS5zdiAgXAorCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3lpZml2ZS95Y3IxL3NyYy9jb3JlL3BpcGVsaW5lL3ljcjFfcGlwZV9tcHJmLnN2ICBcCisJJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwveWlmaXZlL3ljcjEvc3JjL2NvcmUvcGlwZWxpbmUveWNyMV9waXBlX2Nzci5zdiAgXAorCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3lpZml2ZS95Y3IxL3NyYy9jb3JlL3BpcGVsaW5lL3ljcjFfcGlwZV9pYWx1LnN2ICBcCisJJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwveWlmaXZlL3ljcjEvc3JjL2NvcmUvcGlwZWxpbmUveWNyMV9waXBlX211bC5zdiAgXAorCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3lpZml2ZS95Y3IxL3NyYy9jb3JlL3BpcGVsaW5lL3ljcjFfcGlwZV9kaXYuc3YgIFwKKwkkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC95aWZpdmUveWNyMS9zcmMvY29yZS9waXBlbGluZS95Y3IxX3BpcGVfbHN1LnN2ICBcCisJJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwveWlmaXZlL3ljcjEvc3JjL2NvcmUvcGlwZWxpbmUveWNyMV9waXBlX2hkdS5zdiAgXAorCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3lpZml2ZS95Y3IxL3NyYy9jb3JlL3BpcGVsaW5lL3ljcjFfcGlwZV90ZHUuc3YgIFwKKwkkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC95aWZpdmUveWNyMS9zcmMvY29yZS9waXBlbGluZS95Y3IxX2lwaWMuc3YgICBcCisJJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwveWlmaXZlL3ljcjEvc3JjL3RvcC95Y3IxX2RtZW1fcm91dGVyLnN2ICAgXAorCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3lpZml2ZS95Y3IxL3NyYy90b3AveWNyMV9pbWVtX3JvdXRlci5zdiAgIFwKKwkkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC95aWZpdmUveWNyMS9zcmMvdG9wL3ljcjFfdGNtLnN2ICAgXAorCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3lpZml2ZS95Y3IxL3NyYy90b3AveWNyMV90aW1lci5zdiAgIFwKKwkkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC95aWZpdmUveWNyMS9zcmMvdG9wL3ljcjFfdG9wX3diLnN2ICAgXAorCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3lpZml2ZS95Y3IxL3NyYy90b3AveWNyMV9kbWVtX3diLnN2ICAgXAorCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3lpZml2ZS95Y3IxL3NyYy90b3AveWNyMV9pbWVtX3diLnN2ICAgXAorCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3lpZml2ZS95Y3IxL3NyYy90b3AveWNyMV9pbnRmLnN2ICAgXAorCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL2xpYi9hc3luY19maWZvLnN2ICIKKworc2V0IDo6ZW52KFZFUklMT0dfSU5DTFVERV9ESVJTKSBbZ2xvYiAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC95aWZpdmUveWNyMS9zcmMvaW5jbHVkZXMgXQorc2V0IDo6ZW52KFNZTlRIX1JFQURfQkxBQ0tCT1hfTElCKSAxCitzZXQgOjplbnYoU1lOVEhfREVGSU5FUykgW2xpc3QgU1lOVEhFU0lTIF0KKworc2V0IDo6ZW52KFNEQ19GSUxFKSAiJHNjcmlwdF9kaXIvYmFzZS5zZGMiCitzZXQgOjplbnYoQkFTRV9TRENfRklMRSkgIiRzY3JpcHRfZGlyL2Jhc2Uuc2RjIgorI3NldCA6OmVudihTWU5USF9ERUZJTkVTKSBbbGlzdCBTQ1IxX0RCR19FTiBdCisKK3NldCA6OmVudihMRUNfRU5BQkxFKSAwCisKK3NldCA6OmVudihWRERfUElOKSBbbGlzdCB7dmNjZDF9XQorc2V0IDo6ZW52KEdORF9QSU4pIFtsaXN0IHt2c3NkMX1dCisKKworIyAtLS0tLS0tLQorIyBGbG9vcnBsYW5uaW5nCisjIC0tLS0tLS0tLS0tLS0KKworc2V0IDo6ZW52KEZQX1BJTl9PUkRFUl9DRkcpICQ6OmVudihERVNJR05fRElSKS9waW5fb3JkZXIuY2ZnCisKK3NldCA6OmVudihGUF9TSVpJTkcpIGFic29sdXRlCitzZXQgOjplbnYoRElFX0FSRUEpIFtsaXN0IDAuMCAwLjAgMTUyMC4wIDUyMC4wXQorCisKKyMgSWYgeW91J3JlIGdvaW5nIHRvIHVzZSBtdWx0aXBsZSBwb3dlciBkb21haW5zLCB0aGVuIGtlZXAgdGhpcyBkaXNhYmxlZC4KK3NldCA6OmVudihSVU5fQ1ZDKSAwCisKKyNzZXQgOjplbnYoUEROX0NGRykgJHNjcmlwdF9kaXIvcGRuLnRjbAorCisKK3NldCA6OmVudihQTF9USU1FX0RSSVZFTikgMQorc2V0IDo6ZW52KFBMX1RBUkdFVF9ERU5TSVRZKSAiMC4zMiIKKworIyBoZWxwcyBpbiBhbnRlZW5hIGZpeAorc2V0IDo6ZW52KFVTRV9BUkNfQU5URU5OQV9DSEVDSykgIjAiCisKK3NldCA6OmVudihGUF9JT19WRVhURU5EKSA0CitzZXQgOjplbnYoRlBfSU9fSEVYVEVORCkgNAorCitzZXQgOjplbnYoRlBfUEROX1ZQSVRDSCkgMTAwCitzZXQgOjplbnYoRlBfUEROX0hQSVRDSCkgMTAwCitzZXQgOjplbnYoRlBfUEROX1ZXSURUSCkgMworc2V0IDo6ZW52KEZQX1BETl9IV0lEVEgpIDMKKworc2V0IDo6ZW52KEdMQl9SVF9NQVhMQVlFUikgNQorc2V0IDo6ZW52KEdMQl9SVF9NQVhfRElPREVfSU5TX0lURVJTKSAxMAorc2V0IDo6ZW52KERJT0RFX0lOU0VSVElPTl9TVFJBVEVHWSkgNAorCisKK3NldCA6OmVudihRVUlUX09OX1RJTUlOR19WSU9MQVRJT05TKSAiMCIKK3NldCA6OmVudihRVUlUX09OX01BR0lDX0RSQykgIjEiCitzZXQgOjplbnYoUVVJVF9PTl9MVlNfRVJST1IpICIwIgorc2V0IDo6ZW52KFFVSVRfT05fU0xFV19WSU9MQVRJT05TKSAiMCIKKworI05lZWQgdG8gY3Jvc3MtY2hlY2sgd2h5IGdsb2JhbCB0aW1pbmcgb3BpbWl6YXRpb24gY3JlYXRpbmcgc2V0dXAgdmlvIHdpdGggaHVnaCBob2xkIGZpeAorc2V0IDo6ZW52KEdMQl9SRVNJWkVSX1RJTUlOR19PUFRJTUlaQVRJT05TKSAiMCIKKwpkaWZmIC0tZ2l0IGEvb3BlbmxhbmUvc3ludGFjb3JlL2ludGVyYWN0aXZlLnRjbCBiL29wZW5sYW5lL3lpZml2ZS9pbnRlcmFjdGl2ZS50Y2wKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG9wZW5sYW5lL3N5bnRhY29yZS9pbnRlcmFjdGl2ZS50Y2wKcmVuYW1lIHRvIG9wZW5sYW5lL3lpZml2ZS9pbnRlcmFjdGl2ZS50Y2wKZGlmZiAtLWdpdCBhL29wZW5sYW5lL3N5bnRhY29yZS9wZG4udGNsIGIvb3BlbmxhbmUveWlmaXZlL3Bkbi50Y2wKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG9wZW5sYW5lL3N5bnRhY29yZS9wZG4udGNsCnJlbmFtZSB0byBvcGVubGFuZS95aWZpdmUvcGRuLnRjbApkaWZmIC0tZ2l0IGEvb3BlbmxhbmUvc3ludGFjb3JlL3Bpbl9vcmRlci5jZmcgYi9vcGVubGFuZS95aWZpdmUvcGluX29yZGVyLmNmZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gb3BlbmxhbmUvc3ludGFjb3JlL3Bpbl9vcmRlci5jZmcKcmVuYW1lIHRvIG9wZW5sYW5lL3lpZml2ZS9waW5fb3JkZXIuY2ZnCmRpZmYgLS1naXQgYS9vcGVubGFuZS9zeW50YWNvcmUvc3RhLnRjbCBiL29wZW5sYW5lL3lpZml2ZS9zdGEudGNsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBvcGVubGFuZS9zeW50YWNvcmUvc3RhLnRjbApyZW5hbWUgdG8gb3BlbmxhbmUveWlmaXZlL3N0YS50Y2wKZGlmZiAtLWdpdCBhL3NpZ25vZmYvcGlubXV4L2ZpbmFsX3N1bW1hcnlfcmVwb3J0LmNzdiBiL3NpZ25vZmYvcGlubXV4L2ZpbmFsX3N1bW1hcnlfcmVwb3J0LmNzdgppbmRleCBkMzFlYmUzLi5iNzlhMmJhIDEwMDY0NAotLS0gYS9zaWdub2ZmL3Bpbm11eC9maW5hbF9zdW1tYXJ5X3JlcG9ydC5jc3YKKysrIGIvc2lnbm9mZi9waW5tdXgvZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2CkBAIC0xLDIgKzEsMiBAQAogLGRlc2lnbixkZXNpZ25fbmFtZSxjb25maWcsZmxvd19zdGF0dXMsdG90YWxfcnVudGltZSxyb3V0ZWRfcnVudGltZSwoQ2VsbC9tbV4yKS9Db3JlX1V0aWwsRElFQVJFQV9tbV4yLENlbGxQZXJfbW1eMixPcGVuRFBfVXRpbCxQZWFrX01lbW9yeV9Vc2FnZV9NQixjZWxsX2NvdW50LHRyaXRvblJvdXRlX3Zpb2xhdGlvbnMsU2hvcnRfdmlvbGF0aW9ucyxNZXRTcGNfdmlvbGF0aW9ucyxPZmZHcmlkX3Zpb2xhdGlvbnMsTWluSG9sZV92aW9sYXRpb25zLE90aGVyX3Zpb2xhdGlvbnMsTWFnaWNfdmlvbGF0aW9ucyxhbnRlbm5hX3Zpb2xhdGlvbnMsbHZzX3RvdGFsX2Vycm9ycyxjdmNfdG90YWxfZXJyb3JzLGtsYXlvdXRfdmlvbGF0aW9ucyx3aXJlX2xlbmd0aCx2aWFzLHducyxwbF93bnMsb3B0aW1pemVkX3ducyxmYXN0cm91dGVfd25zLHNwZWZfd25zLHRucyxwbF90bnMsb3B0aW1pemVkX3RucyxmYXN0cm91dGVfdG5zLHNwZWZfdG5zLEhQV0wscm91dGluZ19sYXllcjFfcGN0LHJvdXRpbmdfbGF5ZXIyX3BjdCxyb3V0aW5nX2xheWVyM19wY3Qscm91dGluZ19sYXllcjRfcGN0LHJvdXRpbmdfbGF5ZXI1X3BjdCxyb3V0aW5nX2xheWVyNl9wY3Qsd2lyZXNfY291bnQsd2lyZV9iaXRzLHB1YmxpY193aXJlc19jb3VudCxwdWJsaWNfd2lyZV9iaXRzLG1lbW9yaWVzX2NvdW50LG1lbW9yeV9iaXRzLHByb2Nlc3Nlc19jb3VudCxjZWxsc19wcmVfYWJjLEFORCxERkYsTkFORCxOT1IsT1IsWE9SLFhOT1IsTVVYLGlucHV0cyxvdXRwdXRzLGxldmVsLEVuZENhcHMsVGFwQ2VsbHMsRGlvZGVzLFRvdGFsX1BoeXNpY2FsX0NlbGxzLHN1Z2dlc3RlZF9jbG9ja19mcmVxdWVuY3ksc3VnZ2VzdGVkX2Nsb2NrX3BlcmlvZCxDTE9DS19QRVJJT0QsU1lOVEhfU1RSQVRFR1ksU1lOVEhfTUFYX0ZBTk9VVCxGUF9DT1JFX1VUSUwsRlBfQVNQRUNUX1JBVElPLEZQX1BETl9WUElUQ0gsRlBfUEROX0hQSVRDSCxQTF9UQVJHRVRfREVOU0lUWSxHTEJfUlRfQURKVVNUTUVOVCxTVERfQ0VMTF9MSUJSQVJZLENFTExfUEFELERJT0RFX0lOU0VSVElPTl9TVFJBVEVHWQotMCwvcHJvamVjdC9vcGVubGFuZS9waW5tdXgscGlubXV4LHBpbm11eCxmbG93X2NvbXBsZXRlZCwwaDEzbTQ3cywtMSw0NjEwOS4wOTA5MDkwOTA5MSwwLjI0NzUsMjMwNTQuNTQ1NDU0NTQ1NDU2LDI3LjA2LDcwMi42Myw1NzA2LDAsMCwwLDAsMCwwLC0xLDEsMCwtMSwtMSw0Mjg2NjcsNjE2MzQsMC4wLDAuMCwtMSwwLjAsLTEsMC4wLDAuMCwtMSwwLjAsLTEsMzE3Njk3ODg1LjAsNi44Niw0My43NCwzMy40OCwxMC44OCwwLjMxLC0xLDM1NzQsODU2MSw1NDMsNTUyOSwwLDAsMCw0MjAyLDAsMCwwLDAsMCwwLDAsNCwxMzQzLDEzMzksMTYsMzE0LDMyNTksMCwzNTczLDkwLjkwOTA5MDkwOTA5MDksMTEsMTAsQVJFQSAwLDQsNTAsMSwxMDAsMTAwLDAuMywwLjAsc2t5MTMwX2ZkX3NjX2hkLDQsNAorMCwvcHJvamVjdC9vcGVubGFuZS9waW5tdXgscGlubXV4LHBpbm11eCxmbG93X2NvbXBsZXRlZCwwaDEybTE0cywtMSw0NjEwOS4wOTA5MDkwOTA5MSwwLjI0NzUsMjMwNTQuNTQ1NDU0NTQ1NDU2LDI3LjA2LDcwNS41MSw1NzA2LDAsMCwwLDAsMCwwLC0xLDEsMCwtMSwtMSw0Mjg4NDksNjE0MTksMC4wLDAuMCwtMSwwLjAsLTEsMC4wLDAuMCwtMSwwLjAsLTEsMzE3NjUxMzkxLjAsNy4yLDQzLjE3LDMzLjU4LDExLjMzLDAuMzcsLTEsMzU3NCw4NTYxLDU0Myw1NTI5LDAsMCwwLDQyMDIsMCwwLDAsMCwwLDAsMCw0LDEzNDMsMTMzOSwxNiwzMTQsMzI1OSwwLDM1NzMsOTAuOTA5MDkwOTA5MDkwOSwxMSwxMCxBUkVBIDAsNCw1MCwxLDEwMCwxMDAsMC4zLDAuMCxza3kxMzBfZmRfc2NfaGQsNCw0CmRpZmYgLS1naXQgYS9zaWdub2ZmL3FzcGltL2ZpbmFsX3N1bW1hcnlfcmVwb3J0LmNzdiBiL3NpZ25vZmYvcXNwaW0vZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2CmluZGV4IGI3NWExNDQuLmQ5ZjVhZTYgMTAwNjQ0Ci0tLSBhL3NpZ25vZmYvcXNwaW0vZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2CisrKyBiL3NpZ25vZmYvcXNwaW0vZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2CkBAIC0xLDIgKzEsMiBAQAogLGRlc2lnbixkZXNpZ25fbmFtZSxjb25maWcsZmxvd19zdGF0dXMsdG90YWxfcnVudGltZSxyb3V0ZWRfcnVudGltZSwoQ2VsbC9tbV4yKS9Db3JlX1V0aWwsRElFQVJFQV9tbV4yLENlbGxQZXJfbW1eMixPcGVuRFBfVXRpbCxQZWFrX01lbW9yeV9Vc2FnZV9NQixjZWxsX2NvdW50LHRyaXRvblJvdXRlX3Zpb2xhdGlvbnMsU2hvcnRfdmlvbGF0aW9ucyxNZXRTcGNfdmlvbGF0aW9ucyxPZmZHcmlkX3Zpb2xhdGlvbnMsTWluSG9sZV92aW9sYXRpb25zLE90aGVyX3Zpb2xhdGlvbnMsTWFnaWNfdmlvbGF0aW9ucyxhbnRlbm5hX3Zpb2xhdGlvbnMsbHZzX3RvdGFsX2Vycm9ycyxjdmNfdG90YWxfZXJyb3JzLGtsYXlvdXRfdmlvbGF0aW9ucyx3aXJlX2xlbmd0aCx2aWFzLHducyxwbF93bnMsb3B0aW1pemVkX3ducyxmYXN0cm91dGVfd25zLHNwZWZfd25zLHRucyxwbF90bnMsb3B0aW1pemVkX3RucyxmYXN0cm91dGVfdG5zLHNwZWZfdG5zLEhQV0wscm91dGluZ19sYXllcjFfcGN0LHJvdXRpbmdfbGF5ZXIyX3BjdCxyb3V0aW5nX2xheWVyM19wY3Qscm91dGluZ19sYXllcjRfcGN0LHJvdXRpbmdfbGF5ZXI1X3BjdCxyb3V0aW5nX2xheWVyNl9wY3Qsd2lyZXNfY291bnQsd2lyZV9iaXRzLHB1YmxpY193aXJlc19jb3VudCxwdWJsaWNfd2lyZV9iaXRzLG1lbW9yaWVzX2NvdW50LG1lbW9yeV9iaXRzLHByb2Nlc3Nlc19jb3VudCxjZWxsc19wcmVfYWJjLEFORCxERkYsTkFORCxOT1IsT1IsWE9SLFhOT1IsTVVYLGlucHV0cyxvdXRwdXRzLGxldmVsLEVuZENhcHMsVGFwQ2VsbHMsRGlvZGVzLFRvdGFsX1BoeXNpY2FsX0NlbGxzLHN1Z2dlc3RlZF9jbG9ja19mcmVxdWVuY3ksc3VnZ2VzdGVkX2Nsb2NrX3BlcmlvZCxDTE9DS19QRVJJT0QsU1lOVEhfU1RSQVRFR1ksU1lOVEhfTUFYX0ZBTk9VVCxGUF9DT1JFX1VUSUwsRlBfQVNQRUNUX1JBVElPLEZQX1BETl9WUElUQ0gsRlBfUEROX0hQSVRDSCxQTF9UQVJHRVRfREVOU0lUWSxHTEJfUlRfQURKVVNUTUVOVCxTVERfQ0VMTF9MSUJSQVJZLENFTExfUEFELERJT0RFX0lOU0VSVElPTl9TVFJBVEVHWQotMCwvcHJvamVjdC9vcGVubGFuZS9xc3BpbSxxc3BpbV90b3AscXNwaW0sZmxvd19jb21wbGV0ZWQsMGg4bTUycywtMSw2NDcyNy4yNzI3MjcyNzI3MywwLjIyLDMyMzYzLjYzNjM2MzYzNjM2NCwzNy42MSw2OTUuMDcsNzEyMCwwLDAsMCwwLDAsMCwtMSwxLDAsLTEsLTEsMjk5MTAyLDYyMzk4LDAuMCwtNC4zMSwtMSwwLjAsLTEsMC4wLC0xNTk5LjUyLC0xLDAuMCwtMSwyMDUxODQ0NDAuMCw2LjYyLDMzLjk2LDMyLjA3LDAuNTQsMS4zNCwtMSw1ODYwLDg4MTIsNTE5LDM0NzAsMCwwLDAsNjg4NiwwLDAsMCwwLDAsMCwwLDQsMTc2NCwyMTgyLDIwLDM4OCwyOTQwLDAsMzMyOCw5MC45MDkwOTA5MDkwOTA5LDExLDEwLEFSRUEgMCw0LDUwLDEsMTAwLDEwMCwwLjQsMC4wLHNreTEzMF9mZF9zY19oZCw0LDQKKzAsL3Byb2plY3Qvb3BlbmxhbmUvcXNwaW0scXNwaW1fdG9wLHFzcGltLGZsb3dfY29tcGxldGVkLDBoN201OHMsLTEsNjQ3MTguMTgxODE4MTgxODE2LDAuMjIsMzIzNTkuMDkwOTA5MDkwOTA4LDM3LjYsNjk3LjIsNzExOSwwLDAsMCwwLDAsMCwtMSwxLDAsLTEsLTEsMzAyMzQ0LDYyOTM2LDAuMCwtNC4zMSwtMSwwLjAsLTEsMC4wLC0xNjk2LjIsLTEsMC4wLC0xLDIwNTA4MzM4MS4wLDYuOTYsMzQuMDYsMzIuODQsMC41LDEuMjMsLTEsNjA0MCw4OTkyLDY5OSwzNjUwLDAsMCwwLDY4ODYsMCwwLDAsMCwwLDAsMCw0LDE3NjQsMjE4MiwyMCwzODgsMjk0MCwwLDMzMjgsOTAuOTA5MDkwOTA5MDkwOSwxMSwxMCxBUkVBIDAsNCw1MCwxLDEwMCwxMDAsMC40LDAuMCxza3kxMzBfZmRfc2NfaGQsNCw0CmRpZmYgLS1naXQgYS9zaWdub2ZmL3VzZXJfcHJvamVjdF93cmFwcGVyL2ZpbmFsX3N1bW1hcnlfcmVwb3J0LmNzdiBiL3NpZ25vZmYvdXNlcl9wcm9qZWN0X3dyYXBwZXIvZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2CmluZGV4IDRmMjUzMjAuLjYzMDE5YmQgMTAwNjQ0Ci0tLSBhL3NpZ25vZmYvdXNlcl9wcm9qZWN0X3dyYXBwZXIvZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2CisrKyBiL3NpZ25vZmYvdXNlcl9wcm9qZWN0X3dyYXBwZXIvZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2CkBAIC0xLDIgKzEsMiBAQAogLGRlc2lnbixkZXNpZ25fbmFtZSxjb25maWcsZmxvd19zdGF0dXMsdG90YWxfcnVudGltZSxyb3V0ZWRfcnVudGltZSwoQ2VsbC9tbV4yKS9Db3JlX1V0aWwsRElFQVJFQV9tbV4yLENlbGxQZXJfbW1eMixPcGVuRFBfVXRpbCxQZWFrX01lbW9yeV9Vc2FnZV9NQixjZWxsX2NvdW50LHRyaXRvblJvdXRlX3Zpb2xhdGlvbnMsU2hvcnRfdmlvbGF0aW9ucyxNZXRTcGNfdmlvbGF0aW9ucyxPZmZHcmlkX3Zpb2xhdGlvbnMsTWluSG9sZV92aW9sYXRpb25zLE90aGVyX3Zpb2xhdGlvbnMsTWFnaWNfdmlvbGF0aW9ucyxhbnRlbm5hX3Zpb2xhdGlvbnMsbHZzX3RvdGFsX2Vycm9ycyxjdmNfdG90YWxfZXJyb3JzLGtsYXlvdXRfdmlvbGF0aW9ucyx3aXJlX2xlbmd0aCx2aWFzLHducyxwbF93bnMsb3B0aW1pemVkX3ducyxmYXN0cm91dGVfd25zLHNwZWZfd25zLHRucyxwbF90bnMsb3B0aW1pemVkX3RucyxmYXN0cm91dGVfdG5zLHNwZWZfdG5zLEhQV0wscm91dGluZ19sYXllcjFfcGN0LHJvdXRpbmdfbGF5ZXIyX3BjdCxyb3V0aW5nX2xheWVyM19wY3Qscm91dGluZ19sYXllcjRfcGN0LHJvdXRpbmdfbGF5ZXI1X3BjdCxyb3V0aW5nX2xheWVyNl9wY3Qsd2lyZXNfY291bnQsd2lyZV9iaXRzLHB1YmxpY193aXJlc19jb3VudCxwdWJsaWNfd2lyZV9iaXRzLG1lbW9yaWVzX2NvdW50LG1lbW9yeV9iaXRzLHByb2Nlc3Nlc19jb3VudCxjZWxsc19wcmVfYWJjLEFORCxERkYsTkFORCxOT1IsT1IsWE9SLFhOT1IsTVVYLGlucHV0cyxvdXRwdXRzLGxldmVsLEVuZENhcHMsVGFwQ2VsbHMsRGlvZGVzLFRvdGFsX1BoeXNpY2FsX0NlbGxzLHN1Z2dlc3RlZF9jbG9ja19mcmVxdWVuY3ksc3VnZ2VzdGVkX2Nsb2NrX3BlcmlvZCxDTE9DS19QRVJJT0QsU1lOVEhfU1RSQVRFR1ksU1lOVEhfTUFYX0ZBTk9VVCxGUF9DT1JFX1VUSUwsRlBfQVNQRUNUX1JBVElPLEZQX1BETl9WUElUQ0gsRlBfUEROX0hQSVRDSCxQTF9UQVJHRVRfREVOU0lUWSxHTEJfUlRfQURKVVNUTUVOVCxTVERfQ0VMTF9MSUJSQVJZLENFTExfUEFELERJT0RFX0lOU0VSVElPTl9TVFJBVEVHWQotMCwvcHJvamVjdC9vcGVubGFuZS91c2VyX3Byb2plY3Rfd3JhcHBlcix1c2VyX3Byb2plY3Rfd3JhcHBlcix1c2VyX3Byb2plY3Rfd3JhcHBlcixmbG93X2NvbXBsZXRlZCwwaDQwbTdzLC0xLDIuNTI5NTc2NTg3Nzk1NzY2LDEwLjI3ODQsMS4yNjQ3ODgyOTM4OTc4ODMsLTEsNTMwLjA1LDEzLDAsMCwwLDAsMCwwLC0xLDAsMCwtMSwtMSwxMTc2MDk2LDgxNjQsMC4wLC0xLC0xLDAuMCwtMSwwLjAsLTEsLTEsMC4wLC0xLC0xLDQwMTQ0LjM2LDMuMTYsMy42NSwwLjQxLDAuNjQsLTEsMjcxLDI1MzIsMjcxLDI1MzIsMCwwLDAsMTMsMCwwLDAsMCwwLDAsMCwwLC0xLC0xLC0xLDAsMCwwLDAsOTAuOTA5MDkwOTA5MDkwOSwxMSwxMCxBUkVBIDAsNSw1MCwxLDE4MCw5MCwwLjU1LDAuMCxza3kxMzBfZmRfc2NfaGQsNCwwCiswLC9wcm9qZWN0L29wZW5sYW5lL3VzZXJfcHJvamVjdF93cmFwcGVyLHVzZXJfcHJvamVjdF93cmFwcGVyLHVzZXJfcHJvamVjdF93cmFwcGVyLGZsb3dfY29tcGxldGVkLDBoMzltMzlzLC0xLDIuNTI5NTc2NTg3Nzk1NzY2LDEwLjI3ODQsMS4yNjQ3ODgyOTM4OTc4ODMsLTEsNTMwLjAzLDEzLDAsMCwwLDAsMCwwLC0xLDAsMCwtMSwtMSwxMTc2MDg3LDgxMTgsMC4wLC0xLC0xLDAuMCwtMSwwLjAsLTEsLTEsMC4wLC0xLC0xLDQwMTQ0LjM2LDMuMTYsMy42NCwwLjQxLDAuNjMsLTEsMjcxLDI1MzIsMjcxLDI1MzIsMCwwLDAsMTMsMCwwLDAsMCwwLDAsMCwwLC0xLC0xLC0xLDAsMCwwLDAsOTAuOTA5MDkwOTA5MDkwOSwxMSwxMCxBUkVBIDAsNSw1MCwxLDE4MCw5MCwwLjU1LDAuMCxza3kxMzBfZmRfc2NfaGQsNCwwCmRpZmYgLS1naXQgYS9zaWdub2ZmL3lpZml2ZS9PUEVOTEFORV9WRVJTSU9OIGIvc2lnbm9mZi95aWZpdmUvT1BFTkxBTkVfVkVSU0lPTgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGM3NjY0Ci0tLSAvZGV2L251bGwKKysrIGIvc2lnbm9mZi95aWZpdmUvT1BFTkxBTkVfVkVSU0lPTgpAQCAtMCwwICsxIEBACitvcGVubGFuZSBOL0EKZGlmZiAtLWdpdCBhL3NpZ25vZmYveWlmaXZlL1BES19TT1VSQ0VTIGIvc2lnbm9mZi95aWZpdmUvUERLX1NPVVJDRVMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EzNjg0YQotLS0gL2Rldi9udWxsCisrKyBiL3NpZ25vZmYveWlmaXZlL1BES19TT1VSQ0VTCkBAIC0wLDAgKzEsNiBAQAorLW5lIG9wZW5sYW5lIAorOGQ2ODZjMDgxYzJjOWFlZmExNmRiYmQ4Y2NmNWJjOGY0ZGNhYmM0YgorLW5lIHNreXdhdGVyLXBkayAKK2MwOTRiNmU4M2E0ZjkyOThlNDdmNjk2ZWM1YTdmZDUzNTM1ZWM1ZWIKKy1uZSBvcGVuX3Bka3MgCisxNGRiMzJhYThiYTMzMGU4ODYzMmZmM2FkMmZmNTJmNGY0ZGFlMWFkCmRpZmYgLS1naXQgYS9zaWdub2ZmL3lpZml2ZS9maW5hbF9zdW1tYXJ5X3JlcG9ydC5jc3YgYi9zaWdub2ZmL3lpZml2ZS9maW5hbF9zdW1tYXJ5X3JlcG9ydC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMzYTJiZQotLS0gL2Rldi9udWxsCisrKyBiL3NpZ25vZmYveWlmaXZlL2ZpbmFsX3N1bW1hcnlfcmVwb3J0LmNzdgpAQCAtMCwwICsxLDIgQEAKKyxkZXNpZ24sZGVzaWduX25hbWUsY29uZmlnLGZsb3dfc3RhdHVzLHRvdGFsX3J1bnRpbWUscm91dGVkX3J1bnRpbWUsKENlbGwvbW1eMikvQ29yZV9VdGlsLERJRUFSRUFfbW1eMixDZWxsUGVyX21tXjIsT3BlbkRQX1V0aWwsUGVha19NZW1vcnlfVXNhZ2VfTUIsY2VsbF9jb3VudCx0cml0b25Sb3V0ZV92aW9sYXRpb25zLFNob3J0X3Zpb2xhdGlvbnMsTWV0U3BjX3Zpb2xhdGlvbnMsT2ZmR3JpZF92aW9sYXRpb25zLE1pbkhvbGVfdmlvbGF0aW9ucyxPdGhlcl92aW9sYXRpb25zLE1hZ2ljX3Zpb2xhdGlvbnMsYW50ZW5uYV92aW9sYXRpb25zLGx2c190b3RhbF9lcnJvcnMsY3ZjX3RvdGFsX2Vycm9ycyxrbGF5b3V0X3Zpb2xhdGlvbnMsd2lyZV9sZW5ndGgsdmlhcyx3bnMscGxfd25zLG9wdGltaXplZF93bnMsZmFzdHJvdXRlX3ducyxzcGVmX3ducyx0bnMscGxfdG5zLG9wdGltaXplZF90bnMsZmFzdHJvdXRlX3RucyxzcGVmX3RucyxIUFdMLHJvdXRpbmdfbGF5ZXIxX3BjdCxyb3V0aW5nX2xheWVyMl9wY3Qscm91dGluZ19sYXllcjNfcGN0LHJvdXRpbmdfbGF5ZXI0X3BjdCxyb3V0aW5nX2xheWVyNV9wY3Qscm91dGluZ19sYXllcjZfcGN0LHdpcmVzX2NvdW50LHdpcmVfYml0cyxwdWJsaWNfd2lyZXNfY291bnQscHVibGljX3dpcmVfYml0cyxtZW1vcmllc19jb3VudCxtZW1vcnlfYml0cyxwcm9jZXNzZXNfY291bnQsY2VsbHNfcHJlX2FiYyxBTkQsREZGLE5BTkQsTk9SLE9SLFhPUixYTk9SLE1VWCxpbnB1dHMsb3V0cHV0cyxsZXZlbCxFbmRDYXBzLFRhcENlbGxzLERpb2RlcyxUb3RhbF9QaHlzaWNhbF9DZWxscyxzdWdnZXN0ZWRfY2xvY2tfZnJlcXVlbmN5LHN1Z2dlc3RlZF9jbG9ja19wZXJpb2QsQ0xPQ0tfUEVSSU9ELFNZTlRIX1NUUkFURUdZLFNZTlRIX01BWF9GQU5PVVQsRlBfQ09SRV9VVElMLEZQX0FTUEVDVF9SQVRJTyxGUF9QRE5fVlBJVENILEZQX1BETl9IUElUQ0gsUExfVEFSR0VUX0RFTlNJVFksR0xCX1JUX0FESlVTVE1FTlQsU1REX0NFTExfTElCUkFSWSxDRUxMX1BBRCxESU9ERV9JTlNFUlRJT05fU1RSQVRFR1kKKzAsL3Byb2plY3Qvb3BlbmxhbmUveWlmaXZlLHljcjFfdG9wX3diLHlpZml2ZSxmbG93X2NvbXBsZXRlZCwwaDM4bTM1cywtMSw1MzY0Ni4yNTUwNjA3Mjg3NCwwLjc5MDQsMjY4MjMuMTI3NTMwMzY0MzcsMzAuOTYsMTE4OC4xNSwyMTIwMSwwLC0xLC0xLC0xLC0xLDAsLTEsMSwwLC0xLC0xLDE2MjY3MzYsMjM3NDc5LC0xLjc3LC0xNy4zOCwtMSwwLjAsLTEsLTIxNDUuNzQsLTIxMTIwLjAsLTEsMC4wLC0xLDEyOTMzNzc2NzIuMCwwLjAsNjIuNTcsMjQuMDUsMjIuNiwwLjAsLTEsMTg1ODksMzAwNTksMTA2OCwxMjQzMSwwLDAsMCwyMTk3MSwwLDAsMCwwLDAsMCwwLDQsNTI0MCw1OTI0LDQ5LDM2NiwxMDgyMiwwLDExMTg4LDkwLjkwOTA5MDkwOTA5MDksMTEsMTAsQVJFQSAwLDQsNTAsMSwxMDAsMTAwLDAuMzIsMC4wLHNreTEzMF9mZF9zY19oZCw0LDQKZGlmZiAtLWdpdCBhL3N0YS9zY3JpcHRzL2NhcmF2ZWxfdGltaW5nLnRjbCBiL3N0YS9zY3JpcHRzL2NhcmF2ZWxfdGltaW5nLnRjbAppbmRleCA5MmIzYjA4Li5kODcyZTBiIDEwMDY0NAotLS0gYS9zdGEvc2NyaXB0cy9jYXJhdmVsX3RpbWluZy50Y2wKKysrIGIvc3RhL3NjcmlwdHMvY2FyYXZlbF90aW1pbmcudGNsCkBAIC00NCw3ICs0NCw3IEBACiAKIAkjIFVzZXIgcHJvamVjdCBuZXRsaXN0CiAgICAgICAgIHJlYWRfdmVyaWxvZyAkOjplbnYoVVNFUl9ST09UKS92ZXJpbG9nL2dsL3FzcGltLnYKLSAgICAgICAgcmVhZF92ZXJpbG9nICQ6OmVudihVU0VSX1JPT1QpL3Zlcmlsb2cvZ2wvc3ludGFjb3JlLnYgIAorICAgICAgICByZWFkX3Zlcmlsb2cgJDo6ZW52KFVTRVJfUk9PVCkvdmVyaWxvZy9nbC95aWZpdmUudiAgCiAgICAgICAgIHJlYWRfdmVyaWxvZyAkOjplbnYoVVNFUl9ST09UKS92ZXJpbG9nL2dsL3VhcnRfaTJjbV91c2Jfc3BpLnYKICAgICAgICAgcmVhZF92ZXJpbG9nICQ6OmVudihVU0VSX1JPT1QpL3Zlcmlsb2cvZ2wvd2JfaG9zdC52ICAKICAgICAgICAgcmVhZF92ZXJpbG9nICQ6OmVudihVU0VSX1JPT1QpL3Zlcmlsb2cvZ2wvd2JfaW50ZXJjb25uZWN0LnYKQEAgLTE0Niw3ICsxNDYsNyBAQAogCSMjIFVzZXIgUHJvamVjdCBTcGVmCiAgICAgICAgIHJlYWRfc3BlZiAtcGF0aCBtcHJqL3VfbWJpc3QgICAgICAgICAgICAgICAgICAgICAgICQ6OmVudihVU0VSX1JPT1QpL3NwZWYvbWJpc3RfdG9wLnNwZWYgIAogCi0gICAgICAgIHJlYWRfc3BlZiAtcGF0aCBtcHJqL3VfcmlzY3ZfdG9wICAgICAgICAgJDo6ZW52KFVTRVJfUk9PVCkvc3BlZi9zY3IxX3RvcF93Yi5zcGVmCisgICAgICAgIHJlYWRfc3BlZiAtcGF0aCBtcHJqL3VfcmlzY3ZfdG9wICAgICAgICAgJDo6ZW52KFVTRVJfUk9PVCkvc3BlZi95Y3IxX3RvcF93Yi5zcGVmCiAgICAgICAgIHJlYWRfc3BlZiAtcGF0aCBtcHJqL3VfcGlubXV4ICAgICAgICAgICAgJDo6ZW52KFVTRVJfUk9PVCkvc3BlZi9waW5tdXguc3BlZgogICAgICAgICByZWFkX3NwZWYgLXBhdGggbXByai91X3FzcGlfbWFzdGVyICAgICAgICQ6OmVudihVU0VSX1JPT1QpL3NwZWYvcXNwaW1fdG9wLnNwZWYKICAgICAgICAgcmVhZF9zcGVmIC1wYXRoIG1wcmovdV91YXJ0X2kyY191c2Jfc3BpICAkOjplbnYoVVNFUl9ST09UKS9zcGVmL3VhcnRfaTJjX3VzYl9zcGlfdG9wLnNwZWYKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvZmlybXdhcmUvTElDRU5TRSBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvTElDRU5TRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGZlNTIyCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9MSUNFTlNFCkBAIC0wLDAgKzEsMjQgQEAKK0NvcHlyaWdodCAoYykgMjAxMi0yMDE1LCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhIChSZWdlbnRzKS4KK0FsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBSZWdlbnRzIG5vciB0aGUKKyAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworSU4gTk8gRVZFTlQgU0hBTEwgUkVHRU5UUyBCRSBMSUFCTEUgVE8gQU5ZIFBBUlRZIEZPUiBESVJFQ1QsIElORElSRUNULAorU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBJTkNMVURJTkcgTE9TVCBQUk9GSVRTLCBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTiwgRVZFTiBJRiBSRUdFTlRTIEhBUworQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworUkVHRU5UUyBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFOWSBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1RIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UuIFRIRSBTT0ZUV0FSRSBBTkQgQUNDT01QQU5ZSU5HIERPQ1VNRU5UQVRJT04sIElGIEFOWSwgUFJPVklERUQKK0hFUkVVTkRFUiBJUyBQUk9WSURFRCAiQVMgSVMiLiBSRUdFTlRTIEhBUyBOTyBPQkxJR0FUSU9OIFRPIFBST1ZJREUKK01BSU5URU5BTkNFLCBTVVBQT1JULCBVUERBVEVTLCBFTkhBTkNFTUVOVFMsIE9SIE1PRElGSUNBVElPTlMuCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2Zpcm13YXJlL2NvbW1vbi5tayBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvY29tbW9uLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNzVmNzMKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2Zpcm13YXJlL2NvbW1vbi5tawpAQCAtMCwwICsxLDY2IEBACisjIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworIyAvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQorIyAvLyAKKyMgLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIC8vCisjIC8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIC8vCisjIC8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisjIC8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorIyAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitBRERfQVNNX01BQ1JPID89IC1EX19BU1NFTUJMWV9fPTEKKworRkxBR1MgPSAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICQoQUREX0ZMQUdTKQorRkxBR1NfU1RSID0gIiQoRkxBR1MpIgorCitDRkxBR1NfQ09NTU9OID0gLXN0YXRpYyAtc3RkPWdudTk5IC1mbm8tY29tbW9uIC1mbm8tYnVpbHRpbi1wcmludGYgLURUQ009JChUQ00pCitDRkxBR1NfQVJDSCA9IC1XYSwtbWFyY2g9cnYzMiQoQVJDSCkgLW1hcmNoPXJ2MzIkKEFSQ0gpIC1tYWJpPSQoQUJJKQorCitDRkxBR1MgOj0gJChGTEFHUykgJChFWFRfQ0ZMQUdTKSBcCiskKENGTEFHU19DT01NT04pIFwKKyQoQ0ZMQUdTX0FSQ0gpIFwKKy1ERkxBR1NfU1RSPVwiJChGTEFHU19TVFIpXCIgXAorJChBRERfQ0ZMQUdTKQorCitMREZMQUdTICAgPz0gLW5vc3RhcnRmaWxlcyAtbm9zdGRsaWIgLWxjIC1sZ2NjIC1tYXJjaD1ydjMyJChBUkNIKSAtbWFiaT0kKEFCSSkKKworaWZlcSAoLCQoZmluZHN0cmluZyAwLCQoVENNKSkpCitsZF9zY3JpcHQgPz0gJChpbmNfZGlyKS9saW5rX3RjbS5sZAorYXNtX3NyYyAgID89IGNydF90Y20uUworZWxzZQorbGRfc2NyaXB0ID89ICQoaW5jX2RpcikvbGluay5sZAorYXNtX3NyYyAgID89IGNydC5TCitlbmRpZgorCitWUEFUSCArPSAkKHNyY19kaXIpICQoaW5jX2RpcikgJChBRERfVlBBVEgpCitpbmNzICArPSAtSSQoc3JjX2RpcikgLUkkKGluY19kaXIpICQoQUREX2luY3MpCisKK2Nfb2JqcyAgIDo9ICQoYWRkcHJlZml4ICQoYmxkX2RpcikvLCQocGF0c3Vic3QgJS5jLCAlLm8sICQoY19zcmMpKSkKK2FzbV9vYmpzIDo9ICQoYWRkcHJlZml4ICQoYmxkX2RpcikvLCQocGF0c3Vic3QgJS5TLCAlLm8sICQoYXNtX3NyYykpKQorCiskKGJsZF9kaXIpLyUubzogJS5TCisJJChSSVNDVl9HQ0MpICQoQ0ZMQUdTKSAkKEFERF9BU01fTUFDUk8pIC1jICQoaW5jcykgJDwgLW8gJEAKKworJChibGRfZGlyKS8lLm86ICUuYworCSQoUklTQ1ZfR0NDKSAkKENGTEFHUykgLWMgJChpbmNzKSAkPCAtbyAkQAorCiskKGJsZF9kaXIpLyUuZWxmOiAkKGxkX3NjcmlwdCkgJChjX29ianMpICQoYXNtX29ianMpCisJJChSSVNDVl9HQ0MpIC1vICRAIC1UICReICQoTERGTEFHUykKKworJChibGRfZGlyKS8lLmhleDogJChibGRfZGlyKS8lLmVsZgorCSQoUklTQ1ZfUk9NX09CSkNPUFkpICReICRACisJJChSSVNDVl9SQU1fT0JKQ09QWSkgJF4gJEAucmFtCisJI2Fzc2lnbiAweDAwNDhfMHh4eCAgdG8gMHgwMDAwXzB4eHggdG8gbWFwIHRvIFRDTSBNZW1vcnkKKwlzZWQgLWkgJ3MvQDAwNDgwL0AwMDAwMC9nJyAkQC5yYW0KKworCiskKGJsZF9kaXIpLyUuZHVtcDogJChibGRfZGlyKS8lLmVsZgorCSQoUklTQ1ZfT0JKRFVNUCkgJF4gPiAkQApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9maXJtd2FyZS9jcnQuUyBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvY3J0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUwY2I2YgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvY3J0LlMKQEAgLTAsMCArMSwxNjAgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAgICAgICAgLy8vLworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAgICAgICAvLy8vCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgICAgLy8vLworLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgICAgICAvLy8vCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4vLy8KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgICAgLy8vLworLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPiAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyNpbmNsdWRlICJyaXNjdl9jc3JfZW5jb2RpbmcuaCIKKyNpbmNsdWRlICJzY190ZXN0LmgiCisKKyMgZGVmaW5lIExSRUcgbHcKKyMgZGVmaW5lIFNSRUcgc3cKKyMgZGVmaW5lIFJFR0JZVEVTIDQKKworICAgIC5nbG9ibCBfc3RhcnQKKyAgICAuZ2xvYmwgbWFpbgorICAgIC5nbG9ibCB0cmFwX2VudHJ5CisgICAgLmdsb2JsIGhhbmRsZV90cmFwCisgICAgLmdsb2JsIHNjX2V4aXQKKyAgICAud2VhayB0cmFwX2VudHJ5LCBoYW5kbGVfdHJhcAorCisgICAgLnRleHQKKyAgICAub3JnICg2NCozKQorICAgIC5iYWxpZ24gNjQKK21hY2hpbmVfdHJhcF9lbnRyeToKKyAgICBqIHRyYXBfZW50cnkKKworICAgIC5iYWxpZ24gNjQKKworX3N0YXJ0OgorI2lmbmRlZiBfX1JWRV9FWFQKKyAgICB6ZXJvX2ludF9yZWdzIDEsIDMxCisjZWxzZQorICAgIHplcm9faW50X3JlZ3MgMSwgMTUKKyNlbmRpZgorICAgICMgR2xvYmFsIHBvaW50ZXIgaW5pdAorICAgIC5vcHRpb24gcHVzaAorICAgIC5vcHRpb24gbm9yZWxheAorICAgIGxhICAgIGdwLCBfX2dsb2JhbF9wb2ludGVyJAorICAgIC5vcHRpb24gcG9wCisgICAgIyBjbGVhciBic3MKKyAgICBsYSAgICAgIGExLCBfX0JTU19TVEFSVF9fCisgICAgbGEgICAgICBhMiwgX19CU1NfRU5EX18KKyAgICBqICAgICAgIDRmCiszOiAgc3cgICAgICB6ZXJvLCAwKGExKQorICAgIGFkZCAgICAgYTEsIGExLCA0Cis0OiAgYm5lICAgICBhMSwgYTIsIDNiCisgICAgbGEgICAgICBzcCwgX19DX1NUQUNLX1RPUF9fCisKKyAgICAvLyBUaW1lciBpbml0CisgICAgbGkgICAgICB0MCwgbXRpbWVfY3RybAorICAgIGxpICAgICAgdDEsICgxIDw8IFlDUjFfTVRJTUVfQ1RSTF9FTikgICAvLyBlbmFibGUsIHVzZSBpbnRlcm5hbCBjbG9jaworICAgIHN3ICAgICAgdDEsICh0MCkKKyAgICBsaSAgICAgIHQwLCBtdGltZV9kaXYKKyAgICBsaSAgICAgIHQxLCAoMTAwLTEpICAgICAgICAgICAgICAgICAgICAgLy8gZGl2aWRlIGJ5IDEwMAorICAgIHN3ICAgICAgdDEsICh0MCkKKyAgICBsaSAgICAgIHQwLCBtdGltZWNtcAorICAgIGxpICAgICAgdDEsIC0xCisgICAgc3cgICAgICB0MSwgKHQwKSAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1heCB2YWx1ZSBmb3IgbXRpbWVjbXAKKyAgICBzdyAgICAgIHQxLCA0KHQwKQorCisgICAgbGkgICAgICBhMCwgMAorICAgIGxpICAgICAgYTEsIDAKKyAgICBqYWwgICAgIG1haW4KKyAgICBqICAgICAgIHNjX2V4aXQKKwordHJhcF9lbnRyeToKKyAgICBhZGRpIHNwLCBzcCwgLTI3MgorCisgICAgU1JFRyB4MSwgMSpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgyLCAyKlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDMsIDMqUkVHQllURVMoc3ApCisgICAgU1JFRyB4NCwgNCpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHg1LCA1KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDYsIDYqUkVHQllURVMoc3ApCisgICAgU1JFRyB4NywgNypSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHg4LCA4KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDksIDkqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MTAsIDEwKlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDExLCAxMSpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgxMiwgMTIqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MTMsIDEzKlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDE0LCAxNCpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgxNSwgMTUqUkVHQllURVMoc3ApCisjaWZuZGVmIF9fUlZFX0VYVAorICAgIFNSRUcgeDE2LCAxNipSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgxNywgMTcqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MTgsIDE4KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDE5LCAxOSpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgyMCwgMjAqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MjEsIDIxKlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDIyLCAyMipSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgyMywgMjMqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MjQsIDI0KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDI1LCAyNSpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgyNiwgMjYqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MjcsIDI3KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDI4LCAyOCpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgyOSwgMjkqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MzAsIDMwKlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDMxLCAzMSpSRUdCWVRFUyhzcCkKKyNlbmRpZiAvLyBfX1JWRV9FWFQKKworICAgIGNzcnIgYTAsIG1jYXVzZQorICAgIGNzcnIgYTEsIG1lcGMKKyAgICBtdiBhMiwgc3AKKyAgICBqYWwgaGFuZGxlX3RyYXAKKworICAgIExSRUcgeDEsIDEqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MiwgMipSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgzLCAzKlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDQsIDQqUkVHQllURVMoc3ApCisgICAgTFJFRyB4NSwgNSpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHg2LCA2KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDcsIDcqUkVHQllURVMoc3ApCisgICAgTFJFRyB4OCwgOCpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHg5LCA5KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDEwLCAxMCpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgxMSwgMTEqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MTIsIDEyKlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDEzLCAxMypSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgxNCwgMTQqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MTUsIDE1KlJFR0JZVEVTKHNwKQorI2lmbmRlZiBfX1JWRV9FWFQKKyAgICBMUkVHIHgxNiwgMTYqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MTcsIDE3KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDE4LCAxOCpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgxOSwgMTkqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MjAsIDIwKlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDIxLCAyMSpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgyMiwgMjIqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MjMsIDIzKlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDI0LCAyNCpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgyNSwgMjUqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MjYsIDI2KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDI3LCAyNypSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgyOCwgMjgqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MjksIDI5KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDMwLCAzMCpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgzMSwgMzEqUkVHQllURVMoc3ApCisjZW5kaWYgLy8gX19SVkVfRVhUCisKKyAgICBhZGRpIHNwLCBzcCwgMjcyCisgICAgbXJldAorCitoYW5kbGVfdHJhcDoKKyAgICBqIFNJTV9FWElUCisKKy8vIGVuZCBvZiBjcnQuUwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9maXJtd2FyZS9jcnRfdGNtLlMgYi92ZXJpbG9nL2R2L2Zpcm13YXJlL2NydF90Y20uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWJjYjY1Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9jcnRfdGNtLlMKQEAgLTAsMCArMSwxNzEgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAgICAgICAgLy8vLworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAgICAgICAvLy8vCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgICAgLy8vLworLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgICAgICAvLy8vCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4vLy8KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgICAgLy8vLworLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPiAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyNpbmNsdWRlICJyaXNjdl9jc3JfZW5jb2RpbmcuaCIKKyNpbmNsdWRlICJyZWxvYy5oIgorI2luY2x1ZGUgInNjX3Rlc3QuaCIKKworIyBkZWZpbmUgTFJFRyBsdworIyBkZWZpbmUgU1JFRyBzdworIyBkZWZpbmUgUkVHQllURVMgNAorCisgICAgLmdsb2JsIF9zdGFydAorICAgIC5nbG9ibCBtYWluCisgICAgLmdsb2JsIHRyYXBfZW50cnkKKyAgICAuZ2xvYmwgaGFuZGxlX3RyYXAKKyAgICAuZ2xvYmwgc2NfZXhpdAorICAgIC53ZWFrIHRyYXBfZW50cnksIGhhbmRsZV90cmFwCisKKyAgICAuc2VjdGlvbiAudGV4dC5pbml0CisgICAgLm9yZyAoNjQqMykKKyAgICAuYWxpZ24gNjsKK21hY2hpbmVfdHJhcF9lbnRyeToKKyAgICBqIHRyYXBfZW50cnkKKworICAgIC5hbGlnbiA2Citfc3RhcnQ6CisjaWZuZGVmIF9fUlZFX0VYVAorICAgIHplcm9faW50X3JlZ3MgMSwgMzEKKyNlbHNlCisgICAgemVyb19pbnRfcmVncyAxLCAxNQorI2VuZGlmCisgICAgIyBHbG9iYWwgcG9pbnRlciBpbml0CisgICAgLm9wdGlvbiBwdXNoCisgICAgLm9wdGlvbiBub3JlbGF4CisgICAgbGEgICAgZ3AsIF9fZ2xvYmFsX3BvaW50ZXIkCisgICAgLm9wdGlvbiBwb3AKKworICAgIFJFTE9DX1BST0M7CisKKyAgICAvLyBpbml0IHRkYXRhCisgICAgbXYgICAgYTEsIHRwCisgICAgbGEgICAgYTIsIF90ZGF0YV9lbmQKKyAgICBqICAgICA2ZgorNTogIGx3ICAgIGEzLCAwKGEwKQorICAgIHN3ICAgIGEzLCAwKGExKQorICAgIGFkZCAgIGEwLCBhMCwgNAorICAgIGFkZCAgIGExLCBhMSwgNAorNjogIGJuZSAgIGEwLCBhMiwgNWIKKyAgICAvLyBjbGVhciB0YnNzCisgICAgaiAgICAgOGYKKzc6ICBzdyAgICB6ZXJvLCAwKGExKQorICAgIGFkZCAgIGExLCBhMSwgNAorODogIGJuZSAgIGExLCBhNCwgN2IKKworICAgIC8vIFRpbWVyIGluaXQKKyAgICBsaSAgICB0MCwgbXRpbWVfY3RybAorICAgIGxpICAgIHQxLCAoMSA8PCBZQ1IxX01USU1FX0NUUkxfRU4pICAgLy8gZW5hYmxlLCB1c2UgaW50ZXJuYWwgY2xvY2sKKyAgICBzdyAgICB0MSwgKHQwKQorICAgIGxpICAgIHQwLCBtdGltZV9kaXYKKyAgICBsaSAgICB0MSwgKDEwMC0xKSAgICAgICAgICAgICAgICAgICAgIC8vIGRpdmlkZSBieSAxMDAKKyAgICBzdyAgICB0MSwgKHQwKQorICAgIGxpICAgIHQwLCBtdGltZWNtcAorICAgIGxpICAgIHQxLCAtMQorICAgIHN3ICAgIHQxLCAodDApICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF4IHZhbHVlIGZvciBtdGltZWNtcAorICAgIHN3ICAgIHQxLCA0KHQwKQorCisgICAgbGkgICAgYTAsIDAKKyAgICBsaSAgICBhMSwgMAorOTogIGF1aXBjIHQwLCAlcGNyZWxfaGkobWFpbikKKyAgICBqYWxyICB0MCwgJXBjcmVsX2xvKDliKQorICAgIGxhICAgIHQwLCBzY19leGl0CisgICAgLy9qICAgICBzY19leGl0CisKK3RyYXBfZW50cnk6CisgICAgYWRkaSBzcCwgc3AsIC0yNzIKKworICAgIFNSRUcgeDEsIDEqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MiwgMipSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgzLCAzKlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDQsIDQqUkVHQllURVMoc3ApCisgICAgU1JFRyB4NSwgNSpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHg2LCA2KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDcsIDcqUkVHQllURVMoc3ApCisgICAgU1JFRyB4OCwgOCpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHg5LCA5KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDEwLCAxMCpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgxMSwgMTEqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MTIsIDEyKlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDEzLCAxMypSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgxNCwgMTQqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MTUsIDE1KlJFR0JZVEVTKHNwKQorI2lmbmRlZiBfX1JWRV9FWFQKKyAgICBTUkVHIHgxNiwgMTYqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MTcsIDE3KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDE4LCAxOCpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgxOSwgMTkqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MjAsIDIwKlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDIxLCAyMSpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgyMiwgMjIqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MjMsIDIzKlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDI0LCAyNCpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgyNSwgMjUqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MjYsIDI2KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDI3LCAyNypSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgyOCwgMjgqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MjksIDI5KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDMwLCAzMCpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgzMSwgMzEqUkVHQllURVMoc3ApCisjZW5kaWYgLy8gX19SVkVfRVhUCisKKyAgICBjc3JyIGEwLCBtY2F1c2UKKyAgICBjc3JyIGExLCBtZXBjCisgICAgbXYgYTIsIHNwCisgICAgamFsIGhhbmRsZV90cmFwCisKKyAgICBMUkVHIHgxLCAxKlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDIsIDIqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MywgMypSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHg0LCA0KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDUsIDUqUkVHQllURVMoc3ApCisgICAgTFJFRyB4NiwgNipSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHg3LCA3KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDgsIDgqUkVHQllURVMoc3ApCisgICAgTFJFRyB4OSwgOSpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgxMCwgMTAqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MTEsIDExKlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDEyLCAxMipSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgxMywgMTMqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MTQsIDE0KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDE1LCAxNSpSRUdCWVRFUyhzcCkKKyNpZm5kZWYgX19SVkVfRVhUCisgICAgTFJFRyB4MTYsIDE2KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDE3LCAxNypSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgxOCwgMTgqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MTksIDE5KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDIwLCAyMCpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgyMSwgMjEqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MjIsIDIyKlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDIzLCAyMypSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgyNCwgMjQqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MjUsIDI1KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDI2LCAyNipSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgyNywgMjcqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MjgsIDI4KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDI5LCAyOSpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgzMCwgMzAqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MzEsIDMxKlJFR0JZVEVTKHNwKQorI2VuZGlmIC8vIF9fUlZFX0VYVAorCisgICAgYWRkaSBzcCwgc3AsIDI3MgorICAgIG1yZXQKKworaGFuZGxlX3RyYXA6CisgICAgaiBTSU1fRVhJVAorCisvLyBlbmQgb2YgY3J0LlMKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvZmlybXdhcmUvY3NyLmggYi92ZXJpbG9nL2R2L2Zpcm13YXJlL2Nzci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NmYxZmMKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2Zpcm13YXJlL2Nzci5oCkBAIC0wLDAgKzEsMTI4IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgICAgICAgIC8vLy8KKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gICAgICAgLy8vLworLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlICAgIC8vLy8KKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsICAgICAgLy8vLworLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuLy8vCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kICAgIC8vLy8KKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4gICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vIEFyY2hpdGVjdHVyZSBzcGVjaWZpYyBDU1IncyBkZWZzIGFuZCBpbmxpbmVzCisKKyNpZm5kZWYgWUNSX0NTUl9ICisjZGVmaW5lIFlDUl9DU1JfSAorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorCisjZGVmaW5lIF9feHN0cmluZ2lmeShzKSBfX3N0cmluZ2lmeShzKQorI2RlZmluZSBfX3N0cmluZ2lmeShzKSAjcworCisjaWZkZWYgcmVhZF9jc3IKKyN1bmRlZiByZWFkX2NzcgorI2VuZGlmCisKKyNpZmRlZiB3cml0ZV9jc3IKKyN1bmRlZiB3cml0ZV9jc3IKKyNlbmRpZgorCisjaWZkZWYgc3dhcF9jc3IKKyN1bmRlZiBzd2FwX2NzcgorI2VuZGlmCisKKyNpZmRlZiBzZXRfY3NyCisjdW5kZWYgc2V0X2NzcgorI2VuZGlmCisKKyNpZmRlZiBjbGVhcl9jc3IKKyN1bmRlZiBjbGVhcl9jc3IKKyNlbmRpZgorCisjaWZkZWYgcmR0aW1lCisjdW5kZWYgcmR0aW1lCisjZW5kaWYKKworI2lmZGVmIHJkY3ljbGUKKyN1bmRlZiByZGN5Y2xlCisjZW5kaWYKKworI2lmZGVmIHJkaW5zdHJldAorI3VuZGVmIHJkaW5zdHJldAorI2VuZGlmCisKKyNkZWZpbmUgcmVhZF9jc3IocmVnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHVuc2lnbmVkIGxvbmcgX190bXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYXNtIHZvbGF0aWxlICgiY3NyciAlMCwgIiBfX3hzdHJpbmdpZnkocmVnKSA6ICI9ciIoX190bXApKTsgXAorICAgICAgICBfX3RtcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSkKKworI2RlZmluZSB3cml0ZV9jc3IocmVnLCB2YWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoX19idWlsdGluX2NvbnN0YW50X3AodmFsKSAmJiAodmFsKSA9PSAwKSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgiY3NydyAiIF9feHN0cmluZ2lmeShyZWcpICIsIHplcm8iIDo6KTsgICAgICAgXAorICAgICAgICBlbHNlIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCh2YWwpICYmICh1bnNpZ25lZCBsb25nKSh2YWwpIDwgMzIpIFwKKyAgICAgICAgICAgIGFzbSB2b2xhdGlsZSAoImNzcncgIiBfX3hzdHJpbmdpZnkocmVnKSAiLCAlMCIgOjogImkiKHZhbCkpOyBcCisgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBhc20gdm9sYXRpbGUgKCJjc3J3ICIgX194c3RyaW5naWZ5KHJlZykgIiwgJTAiIDo6ICJyIih2YWwpKTsgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgc3dhcF9jc3IocmVnLCB2YWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdW5zaWduZWQgbG9uZyBfX3RtcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHZhbCkgJiYgKHZhbCkgPT0gMCkgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGFzbSB2b2xhdGlsZSAoImNzcnJ3ICUwLCAiIF9feHN0cmluZ2lmeShyZWcpICIsIHplcm8iIDogICI9ciIoX190bXApIDopOyBcCisgICAgICAgIGVsc2UgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHZhbCkgJiYgKHVuc2lnbmVkIGxvbmcpKHZhbCkgPCAzMikgXAorICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgiY3NycncgJTAsICIgX194c3RyaW5naWZ5KHJlZykgIiwgJTEiIDogIj1yIihfX3RtcCkgOiAiaSIodmFsKSk7IFwKKyAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGFzbSB2b2xhdGlsZSAoImNzcnJ3ICUwLCAiIF9feHN0cmluZ2lmeShyZWcpICIsICUxIiA6ICI9ciIoX190bXApIDogInIiKHZhbCkpOyBcCisgICAgICAgIF9fdG1wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSkKKworI2RlZmluZSBzZXRfY3NyKHJlZywgYml0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB1bnNpZ25lZCBsb25nIF9fdG1wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoX19idWlsdGluX2NvbnN0YW50X3AoYml0KSAmJiAoYml0KSA8IDMyKSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgiY3NycnMgJTAsICIgX194c3RyaW5naWZ5KHJlZykgIiwgJTEiIDogIj1yIihfX3RtcCkgOiAiaSIoYml0KSk7IFwKKyAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGFzbSB2b2xhdGlsZSAoImNzcnJzICUwLCAiIF9feHN0cmluZ2lmeShyZWcpICIsICUxIiA6ICI9ciIoX190bXApIDogInIiKGJpdCkpOyBcCisgICAgICAgIF9fdG1wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSkKKworI2RlZmluZSBjbGVhcl9jc3IocmVnLCBiaXQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB1bnNpZ25lZCBsb25nIF9fdG1wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoX19idWlsdGluX2NvbnN0YW50X3AoYml0KSAmJiAoYml0KSA8IDMyKSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgiY3NycmMgJTAsICIgX194c3RyaW5naWZ5KHJlZykgIiwgJTEiIDogIj1yIihfX3RtcCkgOiAiaSIoYml0KSk7IFwKKyAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGFzbSB2b2xhdGlsZSAoImNzcnJjICUwLCAiIF9feHN0cmluZ2lmeShyZWcpICIsICUxIiA6ICI9ciIoX190bXApIDogInIiKGJpdCkpOyBcCisgICAgICAgIF9fdG1wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSkKKworI2RlZmluZSByZHRpbWUoKSByZWFkX2Nzcih0aW1lKQorI2RlZmluZSByZGN5Y2xlKCkgcmVhZF9jc3IoY3ljbGUpCisjZGVmaW5lIHJkaW5zdHJldCgpIHJlYWRfY3NyKGluc3RyZXQpCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX2F0dHJpYnV0ZV9fKChjb25zdCkpIGNwdWlkKCkKK3sKKyAgdW5zaWduZWQgbG9uZyByZXM7CisgIGFzbSAoImNzcnIgJTAsIG1jcHVpZCIgOiAiPXIiKHJlcykpOworICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19hdHRyaWJ1dGVfXygoY29uc3QpKSBpbXBpZCgpCit7CisgIHVuc2lnbmVkIGxvbmcgcmVzOworICBhc20gKCJjc3JyICUwLCBtaW1waWQiIDogIj1yIihyZXMpKTsKKyAgcmV0dXJuIHJlczsKK30KKworI2VuZGlmIC8vIFlDUl9DU1JfSApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9maXJtd2FyZS9saW5rLmxkIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9saW5rLmxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNzVlMzYKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2Zpcm13YXJlL2xpbmsubGQKQEAgLTAsMCArMSwxMTggQEAKKy8qCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgICAgICAgIC8vLy8KKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gICAgICAgLy8vLworLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlICAgIC8vLy8KKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsICAgICAgLy8vLworLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuLy8vCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kICAgIC8vLy8KKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4gICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKiovCisvKgorKiBAYnJpZWYgICAgICBiYXJlIG1ldGFsIHRlc3RzJyBsaW5rZXIgc2NyaXB0CisqLworCitPVVRQVVRfQVJDSCggInJpc2N2IiApCitFTlRSWShfc3RhcnQpCisKK01FTU9SWSB7CisgIFJPTSAocnh4KSA6IE9SSUdJTiA9IDB4MCwgTEVOR1RIID0gNjRLCisgIFRDTSAocnd4KSA6IE9SSUdJTiA9IDB4MDA0ODAwMDAsIExFTkdUSCA9IDRLCisgIFJBTSAocnd4KSA6IE9SSUdJTiA9IDB4MTAwMzAwMDAsIExFTkdUSCA9IDhLCit9CisKK1NUQUNLX1NJWkUgPSAxMDI0OworCitDTF9TSVpFID0gMzI7CisKK1NFQ1RJT05TIHsKKworICAvKiBjb2RlIHNlZ21lbnQgKi8KKyAgLnRleHQuaW5pdCAwIDogeyAKKyAgICBGSUxMKDApOworICAgIC4gPSAweDEwMCAtIDEyOworICAgIFNJTV9FWElUID0gLjsKKyAgICBMT05HKDB4MTMpOworICAgIFNJTV9TVE9QID0gLjsKKyAgICBMT05HKDB4NkYpOworICAgIExPTkcoLTEpOworICAgIC4gPSAweDEwMDsKKyAgICBQUk9WSURFKF9fVEVYVF9TVEFSVF9fID0gLik7CisgICAgKigudGV4dC5pbml0KSAKKyAgfSA+Uk9NCisKKyAgLnRleHQgIDogeworICAgICpjcnQubygudGV4dCAudGV4dC4qKQorICAgICooLnRleHQgLnRleHQuKikKKyAgICAqKHNjX3Rlc3Rfc2VjdGlvbikKKyAgICAuID0gQUxJR04oQ0xfU0laRSk7CisgICAgIFBST1ZJREUoX19URVhUX0VORF9fID0gLik7CisgIH0gPlJPTSAKKworICAvKiBkYXRhIHNlZ21lbnQgKi8KKyAgLmRhdGEgOiB7CisgICAgKiguZGF0YSAuZGF0YS4qKQorICAgIC4gPSBBTElHTihDTF9TSVpFKTsKKyAgfSA+VENNCisKKyAgLnNkYXRhIDogeworICAgIF9fZ2xvYmFsX3BvaW50ZXIkID0gLiArIDB4ODAwOworICAgICooLnNyb2RhdGEuY3N0MTYpICooLnNyb2RhdGEuY3N0OCkgKiguc3JvZGF0YS5jc3Q0KSAqKC5zcm9kYXRhLmNzdDIpICooLnNyb2RhdGEqKQorICAgICooLnNkYXRhIC5zZGF0YS4qIC5nbnUubGlua29uY2Uucy4qKQorICAgIC4gPSBBTElHTihDTF9TSVpFKTsKKyAgfSA+VENNCisKKyAgLyogdGhyZWFkLWxvY2FsIGRhdGEgc2VnbWVudCAqLworICAudGRhdGEgOiB7CisgICAgUFJPVklERShfdGxzX2RhdGEgPSAuKTsKKyAgICBQUk9WSURFKF90ZGF0YV9iZWdpbiA9IC4pOworICAgICooLnRkYXRhIC50ZGF0YS4qKQorICAgIFBST1ZJREUoX3RkYXRhX2VuZCA9IC4pOworICAgIC4gPSBBTElHTihDTF9TSVpFKTsKKyAgfSA+VENNCisKKyAgLnRic3MgOiB7CisgICAgUFJPVklERShfX0JTU19TVEFSVF9fID0gLik7CisgICAgKigudGJzcyAudGJzcy4qKQorICAgIC4gPSBBTElHTihDTF9TSVpFKTsKKyAgICBQUk9WSURFKF90YnNzX2VuZCA9IC4pOworICB9ID5UQ00KKworICAvKiBic3Mgc2VnbWVudCAqLworICAuc2JzcyA6IHsKKyAgICAqKC5zYnNzIC5zYnNzLiogLmdudS5saW5rb25jZS5zYi4qKQorICAgICooLnNjb21tb24pCisgIH0gPlJBTQorCisgIC5ic3MgOiB7CisgICAgKiguYnNzIC5ic3MuKikKKyAgICAuID0gQUxJR04oQ0xfU0laRSk7CisgICAgUFJPVklERShfX0JTU19FTkRfXyA9IC4pOworICB9ID5SQU0KKworICBfZW5kID0gLjsKKyAgUFJPVklERShfX2VuZCA9IC4pOworCisgIC8qIEVuZCBvZiB1bmluaXRhbGl6ZWQgZGF0YSBzZWdlbWVudCAqLworCisgIC5zdGFjayBPUklHSU4oVENNKSArIExFTkdUSChUQ00pIC0gU1RBQ0tfU0laRSA6IHsKKyAgICBGSUxMKDApOworICAgIFBST1ZJREUoX19TVEFDS19TVEFSVF9fID0gLik7CisgICAgLiArPSBTVEFDS19TSVpFOworICAgIFBST1ZJREUoX19DX1NUQUNLX1RPUF9fID0gLik7CisgICAgUFJPVklERShfX1NUQUNLX0VORF9fID0gLik7CisgIH0gPlRDTQorCisgIC9ESVNDQVJELyA6IHsKKyAgICAqKC5laF9mcmFtZSAuZWhfZnJhbWUuKikKKyAgfQorfQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9maXJtd2FyZS9saW5rX3RjbS5sZCBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvbGlua190Y20ubGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIwOTg4MQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvbGlua190Y20ubGQKQEAgLTAsMCArMSwxMzEgQEAKKy8qKgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7ICAgICAgICAvLy8vCisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuICAgICAgIC8vLy8KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAgICAvLy8vCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAgICAgIC8vLy8KKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLi8vLworLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAgICAvLy8vCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+ICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyovCisvKgorKiBAYnJpZWYgICAgICBiYXJlIG1ldGFsIHRlc3RzJyBsaW5rZXIgc2NyaXB0CisqLworCitPVVRQVVRfQVJDSCggInJpc2N2IiApCitFTlRSWShfc3RhcnQpCisKK01FTU9SWSB7CisgIFJPTSAocnh4KSA6IE9SSUdJTiA9IDB4MCwgTEVOR1RIID0gNjRLCisgIFRDTSAocnd4KSA6IE9SSUdJTiA9IDB4MDA0ODAwMDAsIExFTkdUSCA9IDRLCit9CisKK1NUQUNLX1NJWkUgPSAyNTY7CisKK0NMX1NJWkUgPSAzMjsKKworU0VDVElPTlMgeworCisgIC8qIGNvZGUgc2VnbWVudCAqLworICAudGV4dC5pbml0IE9SSUdJTihST00pIDogeyAKKyAgICBGSUxMKDApOworICAgIC4gPSAweDEwMCAtIDEyOworICAgIFNJTV9FWElUID0gLjsKKyAgICBMT05HKDB4MTMpOworICAgIFNJTV9TVE9QID0gLjsKKyAgICBMT05HKDB4NkYpOworICAgIExPTkcoLTEpOworICAgIC4gPSAweDEwMDsKKyAgICAqY3J0X3RjbS5vKC50ZXh0IC50ZXh0LiopCisgICAgKigudGV4dC5pbml0KQorICAgIC4gPSBBTElHTihDTF9TSVpFKTsKKyAgfSA+Uk9NCisKKyAgX19yZWxvY19zdGFydCA9IC47CisKKyAgLnRleHQgOiB7CisgICAgUFJPVklERShfX1RFWFRfU1RBUlRfXyA9IC4pOworICAgICooLnRleHQgLnRleHQuKikKKyAgICAqKHNjX3Rlc3Rfc2VjdGlvbikKKyAgICAuID0gQUxJR04oQ0xfU0laRSk7CisgICAgIFBST1ZJREUoX19URVhUX0VORF9fID0gLik7CisgIH0gPlRDTSBBVD5ST00KKworCisgIC5yb2RhdGEgQUxJR04oQ0xfU0laRSkgOiB7CisgICAgX19nbG9iYWxfcG9pbnRlciQgPSAuICsgMHg4MDA7CisgICAgKigucm9kYXRhKSAqKC5yb2RhdGEuKikgKiguZ251LmxpbmtvbmNlLnIuKikKKyAgICAuID0gQUxJR04oQ0xfU0laRSk7CisgICAgTE9ORygweDEzKTsKKyAgICAuID0gQUxJR04oQ0xfU0laRSk7CisgIH0gPlRDTSBBVD5ST00KKworCisgIC8qIGRhdGEgc2VnbWVudCAqLworICAuZGF0YSBBTElHTihDTF9TSVpFKSA6IHsKKyAgICBQUk9WSURFKF9fREFUQV9TVEFSVF9fID0gLik7CisgICAgKiguZGF0YSAuZGF0YS4qKQorICAgIC4gPSBBTElHTihDTF9TSVpFKTsKKyAgfSA+VENNIAorICAKKyAgLnNkYXRhIEFMSUdOKENMX1NJWkUpIDogeworICAgICooLnNkYXRhIC5zZGF0YS4qIC5nbnUubGlua29uY2Uucy4qKQorICAgIC4gPSBBTElHTihDTF9TSVpFKTsKKyAgICBQUk9WSURFKF9fREFUQV9FTkRfXyA9IC4pOworICB9ID5UQ00KKworICAvKiB0aHJlYWQtbG9jYWwgZGF0YSBzZWdtZW50ICovCisgIC50ZGF0YSBBTElHTihDTF9TSVpFKSA6IHsKKyAgICBQUk9WSURFKF90bHNfZGF0YSA9IC4pOworICAgIFBST1ZJREUoX3RkYXRhX2JlZ2luID0gLik7CisgICAgKigudGRhdGEgLnRkYXRhLiopCisgICAgUFJPVklERShfdGRhdGFfZW5kID0gLik7CisgICAgLiA9IEFMSUdOKENMX1NJWkUpOworICB9ID5UQ00KKworICAudGJzcyBBTElHTihDTF9TSVpFKSA6IHsKKyAgICBQUk9WSURFKF90YnNzX2JlZ2luID0gLik7CisgICAgKigudGJzcyAudGJzcy4qKQorICAgIC4gPSBBTElHTihDTF9TSVpFKTsKKyAgICBQUk9WSURFKF90YnNzX2VuZCA9IC4pOworICB9ID5UQ00KKworICAvKiBic3Mgc2VnbWVudCAqLworICAuc2JzcyBBTElHTihDTF9TSVpFKSA6IHsKKyAgICBQUk9WSURFKF9fQlNTX1NUQVJUX18gPSAuKTsKKyAgICAqKC5zYnNzIC5zYnNzLiogLmdudS5saW5rb25jZS5zYi4qKQorICAgICooLnNjb21tb24pCisgICAgLiA9IEFMSUdOKENMX1NJWkUpOworICB9ID5UQ00KKworICAuYnNzIEFMSUdOKENMX1NJWkUpIDogeworICAgICooLmR5bmJzcykgKiguYnNzIC5ic3MuKiAuZ251LmxpbmtvbmNlLmIuKikgKihDT01NT04pCisgICAgLiA9IEFMSUdOKENMX1NJWkUpOworICAgIFBST1ZJREUoX19CU1NfRU5EX18gPSAuKTsKKyAgfSA+VENNCisKKyAgX2VuZCA9IC47CisgIFBST1ZJREUoX19lbmQgPSAuKTsKKworICAvKiBFbmQgb2YgdW5pbml0YWxpemVkIGRhdGEgc2VnZW1lbnQgKi8KKworICAuc3RhY2sgT1JJR0lOKFRDTSkgKyBMRU5HVEgoVENNKSAtIFNUQUNLX1NJWkUgOiB7CisgICAgUFJPVklERShfX1NUQUNLX1NUQVJUX18gPSAuKTsKKyAgICAuICs9IFNUQUNLX1NJWkU7CisgICAgUFJPVklERShfX0NfU1RBQ0tfVE9QX18gPSAuKTsKKyAgICBQUk9WSURFKF9fU1RBQ0tfRU5EX18gPSAuKTsKKyAgfSA+VENNCisKKyAgL0RJU0NBUkQvIDogeworICAgICooLmVoX2ZyYW1lIC5laF9mcmFtZS4qKQorICB9Cit9CmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2Zpcm13YXJlL3JlbG9jLmggYi92ZXJpbG9nL2R2L2Zpcm13YXJlL3JlbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc4MTY3ZQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvcmVsb2MuaApAQCAtMCwwICsxLDU2IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgICAgICAgIC8vLy8KKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gICAgICAgLy8vLworLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlICAgIC8vLy8KKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsICAgICAgLy8vLworLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuLy8vCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kICAgIC8vLy8KKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4gICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisKKyNpZm5kZWYgUkVMT0NfSAorI2RlZmluZSBSRUxPQ19ICisKKyNpZiAoVENNID09IDEpCisjZGVmaW5lIFJFTE9DX1BST0MgICAgICAgICAgICAgIFwKKyAgICBsYSAgICBhMCwgX19yZWxvY19zdGFydDsgICAgXAorICAgIGxhICAgIGExLCBfX1RFWFRfU1RBUlRfXzsgICBcCisgICAgbGEgICAgYTIsIF9fREFUQV9FTkRfXzsgICAgIFwKKyAgICBiZXEgICBhMCwgYTEsIDIxZjsgICAgICAgICAgXAorICAgIGogICAgIDJmOyAgICAgICAgICAgICAgICAgICBcCisxOiAgbHcgICAgYTMsIDAoYTApOyAgICAgICAgICAgIFwKKyAgICBzdyAgICBhMywgMChhMSk7ICAgICAgICAgICAgXAorICAgIGFkZCAgIGEwLCBhMCwgNDsgICAgICAgICAgICBcCisgICAgYWRkICAgYTEsIGExLCA0OyAgICAgICAgICAgIFwKKzI6ICBibmUgICBhMSwgYTIsIDFiOyAgICAgICAgICAgXAorICAgIC8qIGNsZWFyIGJzcyAqLyAgICAgICAgICAgICBcCisgICAgbGEgICAgYTIsIF9fQlNTX1NUQVJUX187ICAgIFwKKzIxOiBsYSAgICBhMSwgX19CU1NfRU5EX187ICAgICAgXAorICAgIGogICAgIDRmOyAgICAgICAgICAgICAgICAgICBcCiszOiAgc3cgICAgemVybywgMChhMik7ICAgICAgICAgIFwKKyAgICBhZGQgICBhMiwgYTIsIDQ7ICAgICAgICAgICAgXAorNDogIGJuZSAgIGExLCBhMiwgM2I7ICAgICAgICAgICBcCisgICAgLyogaW5pdCBzdGFjayAqLyAgICAgICAgICAgIFwKKyAgICBsYSAgICBzcCwgX19DX1NUQUNLX1RPUF9fOyAgXAorICAgIC8qIGluaXQgaGFydDAgVExTICovICAgICAgICBcCisgICAgbGEgICAgYTAsIF90ZGF0YV9iZWdpbjsgICAgIFwKKyAgICBsYSAgICBhMiwgX3Ric3NfZW5kOyAgICAgICAgXAorICAgIHN1YiAgIGExLCBhMiwgYTA7ICAgICAgICAgICBcCisgICAgbGEgICAgYTQsIF9fU1RBQ0tfU1RBUlRfXzsgIFwKKyAgICBzdWIgICB0cCwgYTQsIGExOyAgIAorI2Vsc2UgIC8vICNpZiBUQ00KKworI2RlZmluZSBSRUxPQ19QUk9DCisKKyNlbmRpZiAgLy8gI2Vsc2UgI2lmIFRDTQorCisjZW5kaWYgIC8vIApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9maXJtd2FyZS9yaXNjdl9jc3JfZW5jb2RpbmcuaCBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvcmlzY3ZfY3NyX2VuY29kaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlmNWFiYgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvcmlzY3ZfY3NyX2VuY29kaW5nLmgKQEAgLTAsMCArMSwxNDg5IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgICAgICAgIC8vLy8KKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gICAgICAgLy8vLworLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlICAgIC8vLy8KKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsICAgICAgLy8vLworLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuLy8vCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kICAgIC8vLy8KKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4gICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjaWZuZGVmIFJJU0NWX0NTUl9FTkNPRElOR19ICisjZGVmaW5lIFJJU0NWX0NTUl9FTkNPRElOR19ICisKKyNkZWZpbmUgTVNUQVRVU19VSUUgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIE1TVEFUVVNfU0lFICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBNU1RBVFVTX0hJRSAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgTVNUQVRVU19NSUUgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIE1TVEFUVVNfVVBJRSAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBNU1RBVFVTX1NQSUUgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgTVNUQVRVU19IUElFICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIE1TVEFUVVNfTVBJRSAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBNU1RBVFVTX1NQUCAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgTVNUQVRVU19IUFAgICAgICAgICAweDAwMDAwNjAwCisjZGVmaW5lIE1TVEFUVVNfTVBQICAgICAgICAgMHgwMDAwMTgwMAorI2RlZmluZSBNU1RBVFVTX0ZTICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgTVNUQVRVU19YUyAgICAgICAgICAweDAwMDE4MDAwCisjZGVmaW5lIE1TVEFUVVNfTVBSViAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBNU1RBVFVTX1NVTSAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgTVNUQVRVU19NWFIgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIE1TVEFUVVNfVFZNICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBNU1RBVFVTX1RXICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgTVNUQVRVU19UU1IgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIE1TVEFUVVMzMl9TRCAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBNU1RBVFVTX1VYTCAgICAgICAgIDB4MDAwMDAwMDMwMDAwMDAwMAorI2RlZmluZSBNU1RBVFVTX1NYTCAgICAgICAgIDB4MDAwMDAwMEMwMDAwMDAwMAorI2RlZmluZSBNU1RBVFVTNjRfU0QgICAgICAgIDB4ODAwMDAwMDAwMDAwMDAwMAorCisjZGVmaW5lIFNTVEFUVVNfVUlFICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTU1RBVFVTX1NJRSAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgU1NUQVRVU19VUElFICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFNTVEFUVVNfU1BJRSAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBTU1RBVFVTX1NQUCAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgU1NUQVRVU19GUyAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIFNTVEFUVVNfWFMgICAgICAgICAgMHgwMDAxODAwMAorI2RlZmluZSBTU1RBVFVTX1NVTSAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgU1NUQVRVU19NWFIgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIFNTVEFUVVMzMl9TRCAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBTU1RBVFVTX1VYTCAgICAgICAgIDB4MDAwMDAwMDMwMDAwMDAwMAorI2RlZmluZSBTU1RBVFVTNjRfU0QgICAgICAgIDB4ODAwMDAwMDAwMDAwMDAwMAorCisjZGVmaW5lIERDU1JfWERFQlVHVkVSICAgICAgKDNVPDwzMCkKKyNkZWZpbmUgRENTUl9ORFJFU0VUICAgICAgICAoMTw8MjkpCisjZGVmaW5lIERDU1JfRlVMTFJFU0VUICAgICAgKDE8PDI4KQorI2RlZmluZSBEQ1NSX0VCUkVBS00gICAgICAgICgxPDwxNSkKKyNkZWZpbmUgRENTUl9FQlJFQUtIICAgICAgICAoMTw8MTQpCisjZGVmaW5lIERDU1JfRUJSRUFLUyAgICAgICAgKDE8PDEzKQorI2RlZmluZSBEQ1NSX0VCUkVBS1UgICAgICAgICgxPDwxMikKKyNkZWZpbmUgRENTUl9TVE9QQ1lDTEUgICAgICAoMTw8MTApCisjZGVmaW5lIERDU1JfU1RPUFRJTUUgICAgICAgKDE8PDkpCisjZGVmaW5lIERDU1JfQ0FVU0UgICAgICAgICAgKDc8PDYpCisjZGVmaW5lIERDU1JfREVCVUdJTlQgICAgICAgKDE8PDUpCisjZGVmaW5lIERDU1JfSEFMVCAgICAgICAgICAgKDE8PDMpCisjZGVmaW5lIERDU1JfU1RFUCAgICAgICAgICAgKDE8PDIpCisjZGVmaW5lIERDU1JfUFJWICAgICAgICAgICAgKDM8PDApCisKKyNkZWZpbmUgRENTUl9DQVVTRV9OT05FICAgICAwCisjZGVmaW5lIERDU1JfQ0FVU0VfU1dCUCAgICAgMQorI2RlZmluZSBEQ1NSX0NBVVNFX0hXQlAgICAgIDIKKyNkZWZpbmUgRENTUl9DQVVTRV9ERUJVR0lOVCAzCisjZGVmaW5lIERDU1JfQ0FVU0VfU1RFUCAgICAgNAorI2RlZmluZSBEQ1NSX0NBVVNFX0hBTFQgICAgIDUKKworI2RlZmluZSBNQ09OVFJPTF9UWVBFKHhsZW4pICAgICgweGZVTEw8PCgoeGxlbiktNCkpCisjZGVmaW5lIE1DT05UUk9MX0RNT0RFKHhsZW4pICAgKDFVTEw8PCgoeGxlbiktNSkpCisjZGVmaW5lIE1DT05UUk9MX01BU0tNQVgoeGxlbikgKDB4M2ZVTEw8PCgoeGxlbiktMTEpKQorCisjZGVmaW5lIE1DT05UUk9MX1NFTEVDVCAgICAgKDE8PDE5KQorI2RlZmluZSBNQ09OVFJPTF9USU1JTkcgICAgICgxPDwxOCkKKyNkZWZpbmUgTUNPTlRST0xfQUNUSU9OICAgICAoMHgzZjw8MTIpCisjZGVmaW5lIE1DT05UUk9MX0NIQUlOICAgICAgKDE8PDExKQorI2RlZmluZSBNQ09OVFJPTF9NQVRDSCAgICAgICgweGY8PDcpCisjZGVmaW5lIE1DT05UUk9MX00gICAgICAgICAgKDE8PDYpCisjZGVmaW5lIE1DT05UUk9MX0ggICAgICAgICAgKDE8PDUpCisjZGVmaW5lIE1DT05UUk9MX1MgICAgICAgICAgKDE8PDQpCisjZGVmaW5lIE1DT05UUk9MX1UgICAgICAgICAgKDE8PDMpCisjZGVmaW5lIE1DT05UUk9MX0VYRUNVVEUgICAgKDE8PDIpCisjZGVmaW5lIE1DT05UUk9MX1NUT1JFICAgICAgKDE8PDEpCisjZGVmaW5lIE1DT05UUk9MX0xPQUQgICAgICAgKDE8PDApCisKKyNkZWZpbmUgTUNPTlRST0xfVFlQRV9OT05FICAgICAgMAorI2RlZmluZSBNQ09OVFJPTF9UWVBFX01BVENIICAgICAyCisKKyNkZWZpbmUgTUNPTlRST0xfQUNUSU9OX0RFQlVHX0VYQ0VQVElPTiAgIDAKKyNkZWZpbmUgTUNPTlRST0xfQUNUSU9OX0RFQlVHX01PREUgICAgICAgIDEKKyNkZWZpbmUgTUNPTlRST0xfQUNUSU9OX1RSQUNFX1NUQVJUICAgICAgIDIKKyNkZWZpbmUgTUNPTlRST0xfQUNUSU9OX1RSQUNFX1NUT1AgICAgICAgIDMKKyNkZWZpbmUgTUNPTlRST0xfQUNUSU9OX1RSQUNFX0VNSVQgICAgICAgIDQKKworI2RlZmluZSBNQ09OVFJPTF9NQVRDSF9FUVVBTCAgICAgMAorI2RlZmluZSBNQ09OVFJPTF9NQVRDSF9OQVBPVCAgICAgMQorI2RlZmluZSBNQ09OVFJPTF9NQVRDSF9HRSAgICAgICAgMgorI2RlZmluZSBNQ09OVFJPTF9NQVRDSF9MVCAgICAgICAgMworI2RlZmluZSBNQ09OVFJPTF9NQVRDSF9NQVNLX0xPVyAgNAorI2RlZmluZSBNQ09OVFJPTF9NQVRDSF9NQVNLX0hJR0ggNQorCisjZGVmaW5lIE1JUF9TU0lQICAgICAgICAgICAgKDEgPDwgSVJRX1NfU09GVCkKKyNkZWZpbmUgTUlQX0hTSVAgICAgICAgICAgICAoMSA8PCBJUlFfSF9TT0ZUKQorI2RlZmluZSBNSVBfTVNJUCAgICAgICAgICAgICgxIDw8IElSUV9NX1NPRlQpCisjZGVmaW5lIE1JUF9TVElQICAgICAgICAgICAgKDEgPDwgSVJRX1NfVElNRVIpCisjZGVmaW5lIE1JUF9IVElQICAgICAgICAgICAgKDEgPDwgSVJRX0hfVElNRVIpCisjZGVmaW5lIE1JUF9NVElQICAgICAgICAgICAgKDEgPDwgSVJRX01fVElNRVIpCisjZGVmaW5lIE1JUF9TRUlQICAgICAgICAgICAgKDEgPDwgSVJRX1NfRVhUKQorI2RlZmluZSBNSVBfSEVJUCAgICAgICAgICAgICgxIDw8IElSUV9IX0VYVCkKKyNkZWZpbmUgTUlQX01FSVAgICAgICAgICAgICAoMSA8PCBJUlFfTV9FWFQpCisKKyNkZWZpbmUgU0lQX1NTSVAgTUlQX1NTSVAKKyNkZWZpbmUgU0lQX1NUSVAgTUlQX1NUSVAKKworI2RlZmluZSBQUlZfVSAwCisjZGVmaW5lIFBSVl9TIDEKKyNkZWZpbmUgUFJWX0ggMgorI2RlZmluZSBQUlZfTSAzCisKKyNkZWZpbmUgU1BUQlIzMl9NT0RFIDB4ODAwMDAwMDAKKyNkZWZpbmUgU1BUQlIzMl9BU0lEIDB4N0ZDMDAwMDAKKyNkZWZpbmUgU1BUQlIzMl9QUE4gIDB4MDAzRkZGRkYKKyNkZWZpbmUgU1BUQlI2NF9NT0RFIDB4RjAwMDAwMDAwMDAwMDAwMAorI2RlZmluZSBTUFRCUjY0X0FTSUQgMHgwRkZGRjAwMDAwMDAwMDAwCisjZGVmaW5lIFNQVEJSNjRfUFBOICAweDAwMDAwRkZGRkZGRkZGRkYKKworI2RlZmluZSBTUFRCUl9NT0RFX09GRiAgMAorI2RlZmluZSBTUFRCUl9NT0RFX1NWMzIgMQorI2RlZmluZSBTUFRCUl9NT0RFX1NWMzkgOAorI2RlZmluZSBTUFRCUl9NT0RFX1NWNDggOQorI2RlZmluZSBTUFRCUl9NT0RFX1NWNTcgMTAKKyNkZWZpbmUgU1BUQlJfTU9ERV9TVjY0IDExCisKKyNkZWZpbmUgUE1QX1IgICAgIDB4MDEKKyNkZWZpbmUgUE1QX1cgICAgIDB4MDIKKyNkZWZpbmUgUE1QX1ggICAgIDB4MDQKKyNkZWZpbmUgUE1QX0EgICAgIDB4MTgKKyNkZWZpbmUgUE1QX0wgICAgIDB4ODAKKyNkZWZpbmUgUE1QX1NISUZUIDIKKworI2RlZmluZSBQTVBfVE9SICAgMHgwOAorI2RlZmluZSBQTVBfTkE0ICAgMHgxMAorI2RlZmluZSBQTVBfTkFQT1QgMHgxOAorCisjZGVmaW5lIElSUV9TX1NPRlQgICAxCisjZGVmaW5lIElSUV9IX1NPRlQgICAyCisjZGVmaW5lIElSUV9NX1NPRlQgICAzCisjZGVmaW5lIElSUV9TX1RJTUVSICA1CisjZGVmaW5lIElSUV9IX1RJTUVSICA2CisjZGVmaW5lIElSUV9NX1RJTUVSICA3CisjZGVmaW5lIElSUV9TX0VYVCAgICA5CisjZGVmaW5lIElSUV9IX0VYVCAgICAxMAorI2RlZmluZSBJUlFfTV9FWFQgICAgMTEKKyNkZWZpbmUgSVJRX0NPUCAgICAgIDEyCisjZGVmaW5lIElSUV9IT1NUICAgICAxMworCisjZGVmaW5lIERFRkFVTFRfUlNUVkVDICAgICAweDAwMDAxMDAwCisjZGVmaW5lIENMSU5UX0JBU0UgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIENMSU5UX1NJWkUgICAgICAgICAweDAwMGMwMDAwCisjZGVmaW5lIEVYVF9JT19CQVNFICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIERSQU1fQkFTRSAgICAgICAgICAweDgwMDAwMDAwCisKKy8vIHBhZ2UgdGFibGUgZW50cnkgKFBURSkgZmllbGRzCisjZGVmaW5lIFBURV9WICAgICAweDAwMSAvLyBWYWxpZAorI2RlZmluZSBQVEVfUiAgICAgMHgwMDIgLy8gUmVhZAorI2RlZmluZSBQVEVfVyAgICAgMHgwMDQgLy8gV3JpdGUKKyNkZWZpbmUgUFRFX1ggICAgIDB4MDA4IC8vIEV4ZWN1dGUKKyNkZWZpbmUgUFRFX1UgICAgIDB4MDEwIC8vIFVzZXIKKyNkZWZpbmUgUFRFX0cgICAgIDB4MDIwIC8vIEdsb2JhbAorI2RlZmluZSBQVEVfQSAgICAgMHgwNDAgLy8gQWNjZXNzZWQKKyNkZWZpbmUgUFRFX0QgICAgIDB4MDgwIC8vIERpcnR5CisjZGVmaW5lIFBURV9TT0ZUICAweDMwMCAvLyBSZXNlcnZlZCBmb3IgU29mdHdhcmUKKworI2RlZmluZSBQVEVfUFBOX1NISUZUIDEwCisKKyNkZWZpbmUgUFRFX1RBQkxFKFBURSkgKCgoUFRFKSAmIChQVEVfViB8IFBURV9SIHwgUFRFX1cgfCBQVEVfWCkpID09IFBURV9WKQorCisjaWZkZWYgX19yaXNjdgorCisjaWYgX19yaXNjdl94bGVuID09IDY0CisjIGRlZmluZSBNU1RBVFVTX1NEIE1TVEFUVVM2NF9TRAorIyBkZWZpbmUgU1NUQVRVU19TRCBTU1RBVFVTNjRfU0QKKyMgZGVmaW5lIFJJU0NWX1BHTEVWRUxfQklUUyA5CisjIGRlZmluZSBTUFRCUl9NT0RFIFNQVEJSNjRfTU9ERQorI2Vsc2UKKyMgZGVmaW5lIE1TVEFUVVNfU0QgTVNUQVRVUzMyX1NECisjIGRlZmluZSBTU1RBVFVTX1NEIFNTVEFUVVMzMl9TRAorIyBkZWZpbmUgUklTQ1ZfUEdMRVZFTF9CSVRTIDEwCisjIGRlZmluZSBTUFRCUl9NT0RFIFNQVEJSMzJfTU9ERQorI2VuZGlmCisjZGVmaW5lIFJJU0NWX1BHU0hJRlQgMTIKKyNkZWZpbmUgUklTQ1ZfUEdTSVpFICgxIDw8IFJJU0NWX1BHU0hJRlQpCisKKyNpZm5kZWYgX19BU1NFTUJMRVJfXworCisjaWZkZWYgX19HTlVDX18KKworI2RlZmluZSByZWFkX2NzcihyZWcpICh7IHVuc2lnbmVkIGxvbmcgX190bXA7IFwKKyAgYXNtIHZvbGF0aWxlICgiY3NyciAlMCwgIiAjcmVnIDogIj1yIihfX3RtcCkpOyBcCisgIF9fdG1wOyB9KQorCisjZGVmaW5lIHdyaXRlX2NzcihyZWcsIHZhbCkgKHsgXAorICBhc20gdm9sYXRpbGUgKCJjc3J3ICIgI3JlZyAiLCAlMCIgOjogInJLIih2YWwpKTsgfSkKKworI2RlZmluZSBzd2FwX2NzcihyZWcsIHZhbCkgKHsgdW5zaWduZWQgbG9uZyBfX3RtcDsgXAorICBhc20gdm9sYXRpbGUgKCJjc3JydyAlMCwgIiAjcmVnICIsICUxIiA6ICI9ciIoX190bXApIDogInJLIih2YWwpKTsgXAorICBfX3RtcDsgfSkKKworI2RlZmluZSBzZXRfY3NyKHJlZywgYml0KSAoeyB1bnNpZ25lZCBsb25nIF9fdG1wOyBcCisgIGFzbSB2b2xhdGlsZSAoImNzcnJzICUwLCAiICNyZWcgIiwgJTEiIDogIj1yIihfX3RtcCkgOiAicksiKGJpdCkpOyBcCisgIF9fdG1wOyB9KQorCisjZGVmaW5lIGNsZWFyX2NzcihyZWcsIGJpdCkgKHsgdW5zaWduZWQgbG9uZyBfX3RtcDsgXAorICBhc20gdm9sYXRpbGUgKCJjc3JyYyAlMCwgIiAjcmVnICIsICUxIiA6ICI9ciIoX190bXApIDogInJLIihiaXQpKTsgXAorICBfX3RtcDsgfSkKKworI2RlZmluZSByZHRpbWUoKSByZWFkX2Nzcih0aW1lKQorI2RlZmluZSByZGN5Y2xlKCkgcmVhZF9jc3IoY3ljbGUpCisjZGVmaW5lIHJkaW5zdHJldCgpIHJlYWRfY3NyKGluc3RyZXQpCisKKyNlbmRpZgorCisjZW5kaWYKKworI2VuZGlmCisKKyNlbmRpZgorLyogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgcGFyc2Utb3Bjb2Rlcy4gICovCisjaWZuZGVmIFJJU0NWX0VOQ09ESU5HX0gKKyNkZWZpbmUgUklTQ1ZfRU5DT0RJTkdfSAorI2RlZmluZSBNQVRDSF9CRVEgMHg2MworI2RlZmluZSBNQVNLX0JFUSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0JORSAweDEwNjMKKyNkZWZpbmUgTUFTS19CTkUgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9CTFQgMHg0MDYzCisjZGVmaW5lIE1BU0tfQkxUICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQkdFIDB4NTA2MworI2RlZmluZSBNQVNLX0JHRSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0JMVFUgMHg2MDYzCisjZGVmaW5lIE1BU0tfQkxUVSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0JHRVUgMHg3MDYzCisjZGVmaW5lIE1BU0tfQkdFVSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0pBTFIgMHg2NworI2RlZmluZSBNQVNLX0pBTFIgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9KQUwgMHg2ZgorI2RlZmluZSBNQVNLX0pBTCAgMHg3ZgorI2RlZmluZSBNQVRDSF9MVUkgMHgzNworI2RlZmluZSBNQVNLX0xVSSAgMHg3ZgorI2RlZmluZSBNQVRDSF9BVUlQQyAweDE3CisjZGVmaW5lIE1BU0tfQVVJUEMgIDB4N2YKKyNkZWZpbmUgTUFUQ0hfQURESSAweDEzCisjZGVmaW5lIE1BU0tfQURESSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX1NMTEkgMHgxMDEzCisjZGVmaW5lIE1BU0tfU0xMSSAgMHhmYzAwNzA3ZgorI2RlZmluZSBNQVRDSF9TTFRJIDB4MjAxMworI2RlZmluZSBNQVNLX1NMVEkgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9TTFRJVSAweDMwMTMKKyNkZWZpbmUgTUFTS19TTFRJVSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX1hPUkkgMHg0MDEzCisjZGVmaW5lIE1BU0tfWE9SSSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX1NSTEkgMHg1MDEzCisjZGVmaW5lIE1BU0tfU1JMSSAgMHhmYzAwNzA3ZgorI2RlZmluZSBNQVRDSF9TUkFJIDB4NDAwMDUwMTMKKyNkZWZpbmUgTUFTS19TUkFJICAweGZjMDA3MDdmCisjZGVmaW5lIE1BVENIX09SSSAweDYwMTMKKyNkZWZpbmUgTUFTS19PUkkgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9BTkRJIDB4NzAxMworI2RlZmluZSBNQVNLX0FOREkgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9BREQgMHgzMworI2RlZmluZSBNQVNLX0FERCAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9TVUIgMHg0MDAwMDAzMworI2RlZmluZSBNQVNLX1NVQiAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9TTEwgMHgxMDMzCisjZGVmaW5lIE1BU0tfU0xMICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX1NMVCAweDIwMzMKKyNkZWZpbmUgTUFTS19TTFQgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfU0xUVSAweDMwMzMKKyNkZWZpbmUgTUFTS19TTFRVICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX1hPUiAweDQwMzMKKyNkZWZpbmUgTUFTS19YT1IgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfU1JMIDB4NTAzMworI2RlZmluZSBNQVNLX1NSTCAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9TUkEgMHg0MDAwNTAzMworI2RlZmluZSBNQVNLX1NSQSAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9PUiAweDYwMzMKKyNkZWZpbmUgTUFTS19PUiAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9BTkQgMHg3MDMzCisjZGVmaW5lIE1BU0tfQU5EICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0FERElXIDB4MWIKKyNkZWZpbmUgTUFTS19BRERJVyAgMHg3MDdmCisjZGVmaW5lIE1BVENIX1NMTElXIDB4MTAxYgorI2RlZmluZSBNQVNLX1NMTElXICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX1NSTElXIDB4NTAxYgorI2RlZmluZSBNQVNLX1NSTElXICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX1NSQUlXIDB4NDAwMDUwMWIKKyNkZWZpbmUgTUFTS19TUkFJVyAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9BRERXIDB4M2IKKyNkZWZpbmUgTUFTS19BRERXICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX1NVQlcgMHg0MDAwMDAzYgorI2RlZmluZSBNQVNLX1NVQlcgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfU0xMVyAweDEwM2IKKyNkZWZpbmUgTUFTS19TTExXICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX1NSTFcgMHg1MDNiCisjZGVmaW5lIE1BU0tfU1JMVyAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9TUkFXIDB4NDAwMDUwM2IKKyNkZWZpbmUgTUFTS19TUkFXICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0xCIDB4MworI2RlZmluZSBNQVNLX0xCICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfTEggMHgxMDAzCisjZGVmaW5lIE1BU0tfTEggIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9MVyAweDIwMDMKKyNkZWZpbmUgTUFTS19MVyAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0xEIDB4MzAwMworI2RlZmluZSBNQVNLX0xEICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfTEJVIDB4NDAwMworI2RlZmluZSBNQVNLX0xCVSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0xIVSAweDUwMDMKKyNkZWZpbmUgTUFTS19MSFUgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9MV1UgMHg2MDAzCisjZGVmaW5lIE1BU0tfTFdVICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfU0IgMHgyMworI2RlZmluZSBNQVNLX1NCICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfU0ggMHgxMDIzCisjZGVmaW5lIE1BU0tfU0ggIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9TVyAweDIwMjMKKyNkZWZpbmUgTUFTS19TVyAgMHg3MDdmCisjZGVmaW5lIE1BVENIX1NEIDB4MzAyMworI2RlZmluZSBNQVNLX1NEICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfRkVOQ0UgMHhmCisjZGVmaW5lIE1BU0tfRkVOQ0UgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9GRU5DRV9JIDB4MTAwZgorI2RlZmluZSBNQVNLX0ZFTkNFX0kgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9NVUwgMHgyMDAwMDMzCisjZGVmaW5lIE1BU0tfTVVMICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX01VTEggMHgyMDAxMDMzCisjZGVmaW5lIE1BU0tfTVVMSCAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9NVUxIU1UgMHgyMDAyMDMzCisjZGVmaW5lIE1BU0tfTVVMSFNVICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX01VTEhVIDB4MjAwMzAzMworI2RlZmluZSBNQVNLX01VTEhVICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0RJViAweDIwMDQwMzMKKyNkZWZpbmUgTUFTS19ESVYgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRElWVSAweDIwMDUwMzMKKyNkZWZpbmUgTUFTS19ESVZVICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX1JFTSAweDIwMDYwMzMKKyNkZWZpbmUgTUFTS19SRU0gIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfUkVNVSAweDIwMDcwMzMKKyNkZWZpbmUgTUFTS19SRU1VICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX01VTFcgMHgyMDAwMDNiCisjZGVmaW5lIE1BU0tfTVVMVyAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9ESVZXIDB4MjAwNDAzYgorI2RlZmluZSBNQVNLX0RJVlcgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRElWVVcgMHgyMDA1MDNiCisjZGVmaW5lIE1BU0tfRElWVVcgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfUkVNVyAweDIwMDYwM2IKKyNkZWZpbmUgTUFTS19SRU1XICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX1JFTVVXIDB4MjAwNzAzYgorI2RlZmluZSBNQVNLX1JFTVVXICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0FNT0FERF9XIDB4MjAyZgorI2RlZmluZSBNQVNLX0FNT0FERF9XICAweGY4MDA3MDdmCisjZGVmaW5lIE1BVENIX0FNT1hPUl9XIDB4MjAwMDIwMmYKKyNkZWZpbmUgTUFTS19BTU9YT1JfVyAgMHhmODAwNzA3ZgorI2RlZmluZSBNQVRDSF9BTU9PUl9XIDB4NDAwMDIwMmYKKyNkZWZpbmUgTUFTS19BTU9PUl9XICAweGY4MDA3MDdmCisjZGVmaW5lIE1BVENIX0FNT0FORF9XIDB4NjAwMDIwMmYKKyNkZWZpbmUgTUFTS19BTU9BTkRfVyAgMHhmODAwNzA3ZgorI2RlZmluZSBNQVRDSF9BTU9NSU5fVyAweDgwMDAyMDJmCisjZGVmaW5lIE1BU0tfQU1PTUlOX1cgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PTUFYX1cgMHhhMDAwMjAyZgorI2RlZmluZSBNQVNLX0FNT01BWF9XICAweGY4MDA3MDdmCisjZGVmaW5lIE1BVENIX0FNT01JTlVfVyAweGMwMDAyMDJmCisjZGVmaW5lIE1BU0tfQU1PTUlOVV9XICAweGY4MDA3MDdmCisjZGVmaW5lIE1BVENIX0FNT01BWFVfVyAweGUwMDAyMDJmCisjZGVmaW5lIE1BU0tfQU1PTUFYVV9XICAweGY4MDA3MDdmCisjZGVmaW5lIE1BVENIX0FNT1NXQVBfVyAweDgwMDIwMmYKKyNkZWZpbmUgTUFTS19BTU9TV0FQX1cgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfTFJfVyAweDEwMDAyMDJmCisjZGVmaW5lIE1BU0tfTFJfVyAgMHhmOWYwNzA3ZgorI2RlZmluZSBNQVRDSF9TQ19XIDB4MTgwMDIwMmYKKyNkZWZpbmUgTUFTS19TQ19XICAweGY4MDA3MDdmCisjZGVmaW5lIE1BVENIX0FNT0FERF9EIDB4MzAyZgorI2RlZmluZSBNQVNLX0FNT0FERF9EICAweGY4MDA3MDdmCisjZGVmaW5lIE1BVENIX0FNT1hPUl9EIDB4MjAwMDMwMmYKKyNkZWZpbmUgTUFTS19BTU9YT1JfRCAgMHhmODAwNzA3ZgorI2RlZmluZSBNQVRDSF9BTU9PUl9EIDB4NDAwMDMwMmYKKyNkZWZpbmUgTUFTS19BTU9PUl9EICAweGY4MDA3MDdmCisjZGVmaW5lIE1BVENIX0FNT0FORF9EIDB4NjAwMDMwMmYKKyNkZWZpbmUgTUFTS19BTU9BTkRfRCAgMHhmODAwNzA3ZgorI2RlZmluZSBNQVRDSF9BTU9NSU5fRCAweDgwMDAzMDJmCisjZGVmaW5lIE1BU0tfQU1PTUlOX0QgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PTUFYX0QgMHhhMDAwMzAyZgorI2RlZmluZSBNQVNLX0FNT01BWF9EICAweGY4MDA3MDdmCisjZGVmaW5lIE1BVENIX0FNT01JTlVfRCAweGMwMDAzMDJmCisjZGVmaW5lIE1BU0tfQU1PTUlOVV9EICAweGY4MDA3MDdmCisjZGVmaW5lIE1BVENIX0FNT01BWFVfRCAweGUwMDAzMDJmCisjZGVmaW5lIE1BU0tfQU1PTUFYVV9EICAweGY4MDA3MDdmCisjZGVmaW5lIE1BVENIX0FNT1NXQVBfRCAweDgwMDMwMmYKKyNkZWZpbmUgTUFTS19BTU9TV0FQX0QgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfTFJfRCAweDEwMDAzMDJmCisjZGVmaW5lIE1BU0tfTFJfRCAgMHhmOWYwNzA3ZgorI2RlZmluZSBNQVRDSF9TQ19EIDB4MTgwMDMwMmYKKyNkZWZpbmUgTUFTS19TQ19EICAweGY4MDA3MDdmCisjZGVmaW5lIE1BVENIX0VDQUxMIDB4NzMKKyNkZWZpbmUgTUFTS19FQ0FMTCAgMHhmZmZmZmZmZgorI2RlZmluZSBNQVRDSF9FQlJFQUsgMHgxMDAwNzMKKyNkZWZpbmUgTUFTS19FQlJFQUsgIDB4ZmZmZmZmZmYKKyNkZWZpbmUgTUFUQ0hfVVJFVCAweDIwMDA3MworI2RlZmluZSBNQVNLX1VSRVQgIDB4ZmZmZmZmZmYKKyNkZWZpbmUgTUFUQ0hfU1JFVCAweDEwMjAwMDczCisjZGVmaW5lIE1BU0tfU1JFVCAgMHhmZmZmZmZmZgorI2RlZmluZSBNQVRDSF9NUkVUIDB4MzAyMDAwNzMKKyNkZWZpbmUgTUFTS19NUkVUICAweGZmZmZmZmZmCisjZGVmaW5lIE1BVENIX0RSRVQgMHg3YjIwMDA3MworI2RlZmluZSBNQVNLX0RSRVQgIDB4ZmZmZmZmZmYKKyNkZWZpbmUgTUFUQ0hfU0ZFTkNFX1ZNQSAweDEyMDAwMDczCisjZGVmaW5lIE1BU0tfU0ZFTkNFX1ZNQSAgMHhmZTAwN2ZmZgorI2RlZmluZSBNQVRDSF9XRkkgMHgxMDUwMDA3MworI2RlZmluZSBNQVNLX1dGSSAgMHhmZmZmZmZmZgorI2RlZmluZSBNQVRDSF9DU1JSVyAweDEwNzMKKyNkZWZpbmUgTUFTS19DU1JSVyAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0NTUlJTIDB4MjA3MworI2RlZmluZSBNQVNLX0NTUlJTICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1NSUkMgMHgzMDczCisjZGVmaW5lIE1BU0tfQ1NSUkMgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DU1JSV0kgMHg1MDczCisjZGVmaW5lIE1BU0tfQ1NSUldJICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1NSUlNJIDB4NjA3MworI2RlZmluZSBNQVNLX0NTUlJTSSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0NTUlJDSSAweDcwNzMKKyNkZWZpbmUgTUFTS19DU1JSQ0kgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9GQUREX1MgMHg1MworI2RlZmluZSBNQVNLX0ZBRERfUyAgMHhmZTAwMDA3ZgorI2RlZmluZSBNQVRDSF9GU1VCX1MgMHg4MDAwMDUzCisjZGVmaW5lIE1BU0tfRlNVQl9TICAweGZlMDAwMDdmCisjZGVmaW5lIE1BVENIX0ZNVUxfUyAweDEwMDAwMDUzCisjZGVmaW5lIE1BU0tfRk1VTF9TICAweGZlMDAwMDdmCisjZGVmaW5lIE1BVENIX0ZESVZfUyAweDE4MDAwMDUzCisjZGVmaW5lIE1BU0tfRkRJVl9TICAweGZlMDAwMDdmCisjZGVmaW5lIE1BVENIX0ZTR05KX1MgMHgyMDAwMDA1MworI2RlZmluZSBNQVNLX0ZTR05KX1MgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRlNHTkpOX1MgMHgyMDAwMTA1MworI2RlZmluZSBNQVNLX0ZTR05KTl9TICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0ZTR05KWF9TIDB4MjAwMDIwNTMKKyNkZWZpbmUgTUFTS19GU0dOSlhfUyAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GTUlOX1MgMHgyODAwMDA1MworI2RlZmluZSBNQVNLX0ZNSU5fUyAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GTUFYX1MgMHgyODAwMTA1MworI2RlZmluZSBNQVNLX0ZNQVhfUyAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GU1FSVF9TIDB4NTgwMDAwNTMKKyNkZWZpbmUgTUFTS19GU1FSVF9TICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZBRERfRCAweDIwMDAwNTMKKyNkZWZpbmUgTUFTS19GQUREX0QgIDB4ZmUwMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRlNVQl9EIDB4YTAwMDA1MworI2RlZmluZSBNQVNLX0ZTVUJfRCAgMHhmZTAwMDA3ZgorI2RlZmluZSBNQVRDSF9GTVVMX0QgMHgxMjAwMDA1MworI2RlZmluZSBNQVNLX0ZNVUxfRCAgMHhmZTAwMDA3ZgorI2RlZmluZSBNQVRDSF9GRElWX0QgMHgxYTAwMDA1MworI2RlZmluZSBNQVNLX0ZESVZfRCAgMHhmZTAwMDA3ZgorI2RlZmluZSBNQVRDSF9GU0dOSl9EIDB4MjIwMDAwNTMKKyNkZWZpbmUgTUFTS19GU0dOSl9EICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0ZTR05KTl9EIDB4MjIwMDEwNTMKKyNkZWZpbmUgTUFTS19GU0dOSk5fRCAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GU0dOSlhfRCAweDIyMDAyMDUzCisjZGVmaW5lIE1BU0tfRlNHTkpYX0QgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRk1JTl9EIDB4MmEwMDAwNTMKKyNkZWZpbmUgTUFTS19GTUlOX0QgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRk1BWF9EIDB4MmEwMDEwNTMKKyNkZWZpbmUgTUFTS19GTUFYX0QgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9TX0QgMHg0MDEwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfU19EICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfRF9TIDB4NDIwMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX0RfUyAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GU1FSVF9EIDB4NWEwMDAwNTMKKyNkZWZpbmUgTUFTS19GU1FSVF9EICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZBRERfUSAweDYwMDAwNTMKKyNkZWZpbmUgTUFTS19GQUREX1EgIDB4ZmUwMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRlNVQl9RIDB4ZTAwMDA1MworI2RlZmluZSBNQVNLX0ZTVUJfUSAgMHhmZTAwMDA3ZgorI2RlZmluZSBNQVRDSF9GTVVMX1EgMHgxNjAwMDA1MworI2RlZmluZSBNQVNLX0ZNVUxfUSAgMHhmZTAwMDA3ZgorI2RlZmluZSBNQVRDSF9GRElWX1EgMHgxZTAwMDA1MworI2RlZmluZSBNQVNLX0ZESVZfUSAgMHhmZTAwMDA3ZgorI2RlZmluZSBNQVRDSF9GU0dOSl9RIDB4MjYwMDAwNTMKKyNkZWZpbmUgTUFTS19GU0dOSl9RICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0ZTR05KTl9RIDB4MjYwMDEwNTMKKyNkZWZpbmUgTUFTS19GU0dOSk5fUSAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GU0dOSlhfUSAweDI2MDAyMDUzCisjZGVmaW5lIE1BU0tfRlNHTkpYX1EgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRk1JTl9RIDB4MmUwMDAwNTMKKyNkZWZpbmUgTUFTS19GTUlOX1EgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRk1BWF9RIDB4MmUwMDEwNTMKKyNkZWZpbmUgTUFTS19GTUFYX1EgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9TX1EgMHg0MDMwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfU19RICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfUV9TIDB4NDYwMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX1FfUyAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX0RfUSAweDQyMzAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9EX1EgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9RX0QgMHg0NjEwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfUV9EICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZTUVJUX1EgMHg1ZTAwMDA1MworI2RlZmluZSBNQVNLX0ZTUVJUX1EgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkxFX1MgMHhhMDAwMDA1MworI2RlZmluZSBNQVNLX0ZMRV9TICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0ZMVF9TIDB4YTAwMDEwNTMKKyNkZWZpbmUgTUFTS19GTFRfUyAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GRVFfUyAweGEwMDAyMDUzCisjZGVmaW5lIE1BU0tfRkVRX1MgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRkxFX0QgMHhhMjAwMDA1MworI2RlZmluZSBNQVNLX0ZMRV9EICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0ZMVF9EIDB4YTIwMDEwNTMKKyNkZWZpbmUgTUFTS19GTFRfRCAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GRVFfRCAweGEyMDAyMDUzCisjZGVmaW5lIE1BU0tfRkVRX0QgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRkxFX1EgMHhhNjAwMDA1MworI2RlZmluZSBNQVNLX0ZMRV9RICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0ZMVF9RIDB4YTYwMDEwNTMKKyNkZWZpbmUgTUFTS19GTFRfUSAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GRVFfUSAweGE2MDAyMDUzCisjZGVmaW5lIE1BU0tfRkVRX1EgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9XX1MgMHhjMDAwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfV19TICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfV1VfUyAweGMwMTAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9XVV9TICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfTF9TIDB4YzAyMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX0xfUyAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX0xVX1MgMHhjMDMwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfTFVfUyAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GTVZfWF9XIDB4ZTAwMDAwNTMKKyNkZWZpbmUgTUFTS19GTVZfWF9XICAweGZmZjA3MDdmCisjZGVmaW5lIE1BVENIX0ZDTEFTU19TIDB4ZTAwMDEwNTMKKyNkZWZpbmUgTUFTS19GQ0xBU1NfUyAgMHhmZmYwNzA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX1dfRCAweGMyMDAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9XX0QgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9XVV9EIDB4YzIxMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX1dVX0QgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9MX0QgMHhjMjIwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfTF9EICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfTFVfRCAweGMyMzAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9MVV9EICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZNVl9YX0QgMHhlMjAwMDA1MworI2RlZmluZSBNQVNLX0ZNVl9YX0QgIDB4ZmZmMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRkNMQVNTX0QgMHhlMjAwMTA1MworI2RlZmluZSBNQVNLX0ZDTEFTU19EICAweGZmZjA3MDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfV19RIDB4YzYwMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX1dfUSAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX1dVX1EgMHhjNjEwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfV1VfUSAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX0xfUSAweGM2MjAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9MX1EgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9MVV9RIDB4YzYzMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX0xVX1EgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRk1WX1hfUSAweGU2MDAwMDUzCisjZGVmaW5lIE1BU0tfRk1WX1hfUSAgMHhmZmYwNzA3ZgorI2RlZmluZSBNQVRDSF9GQ0xBU1NfUSAweGU2MDAxMDUzCisjZGVmaW5lIE1BU0tfRkNMQVNTX1EgIDB4ZmZmMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9TX1cgMHhkMDAwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfU19XICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfU19XVSAweGQwMTAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9TX1dVICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfU19MIDB4ZDAyMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX1NfTCAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX1NfTFUgMHhkMDMwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfU19MVSAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GTVZfV19YIDB4ZjAwMDAwNTMKKyNkZWZpbmUgTUFTS19GTVZfV19YICAweGZmZjA3MDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfRF9XIDB4ZDIwMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX0RfVyAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX0RfV1UgMHhkMjEwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfRF9XVSAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX0RfTCAweGQyMjAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9EX0wgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9EX0xVIDB4ZDIzMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX0RfTFUgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRk1WX0RfWCAweGYyMDAwMDUzCisjZGVmaW5lIE1BU0tfRk1WX0RfWCAgMHhmZmYwNzA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX1FfVyAweGQ2MDAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9RX1cgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9RX1dVIDB4ZDYxMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX1FfV1UgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9RX0wgMHhkNjIwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfUV9MICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfUV9MVSAweGQ2MzAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9RX0xVICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZNVl9RX1ggMHhmNjAwMDA1MworI2RlZmluZSBNQVNLX0ZNVl9RX1ggIDB4ZmZmMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRkxXIDB4MjAwNworI2RlZmluZSBNQVNLX0ZMVyAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0ZMRCAweDMwMDcKKyNkZWZpbmUgTUFTS19GTEQgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9GTFEgMHg0MDA3CisjZGVmaW5lIE1BU0tfRkxRICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfRlNXIDB4MjAyNworI2RlZmluZSBNQVNLX0ZTVyAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0ZTRCAweDMwMjcKKyNkZWZpbmUgTUFTS19GU0QgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9GU1EgMHg0MDI3CisjZGVmaW5lIE1BU0tfRlNRICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfRk1BRERfUyAweDQzCisjZGVmaW5lIE1BU0tfRk1BRERfUyAgMHg2MDAwMDdmCisjZGVmaW5lIE1BVENIX0ZNU1VCX1MgMHg0NworI2RlZmluZSBNQVNLX0ZNU1VCX1MgIDB4NjAwMDA3ZgorI2RlZmluZSBNQVRDSF9GTk1TVUJfUyAweDRiCisjZGVmaW5lIE1BU0tfRk5NU1VCX1MgIDB4NjAwMDA3ZgorI2RlZmluZSBNQVRDSF9GTk1BRERfUyAweDRmCisjZGVmaW5lIE1BU0tfRk5NQUREX1MgIDB4NjAwMDA3ZgorI2RlZmluZSBNQVRDSF9GTUFERF9EIDB4MjAwMDA0MworI2RlZmluZSBNQVNLX0ZNQUREX0QgIDB4NjAwMDA3ZgorI2RlZmluZSBNQVRDSF9GTVNVQl9EIDB4MjAwMDA0NworI2RlZmluZSBNQVNLX0ZNU1VCX0QgIDB4NjAwMDA3ZgorI2RlZmluZSBNQVRDSF9GTk1TVUJfRCAweDIwMDAwNGIKKyNkZWZpbmUgTUFTS19GTk1TVUJfRCAgMHg2MDAwMDdmCisjZGVmaW5lIE1BVENIX0ZOTUFERF9EIDB4MjAwMDA0ZgorI2RlZmluZSBNQVNLX0ZOTUFERF9EICAweDYwMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRk1BRERfUSAweDYwMDAwNDMKKyNkZWZpbmUgTUFTS19GTUFERF9RICAweDYwMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRk1TVUJfUSAweDYwMDAwNDcKKyNkZWZpbmUgTUFTS19GTVNVQl9RICAweDYwMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRk5NU1VCX1EgMHg2MDAwMDRiCisjZGVmaW5lIE1BU0tfRk5NU1VCX1EgIDB4NjAwMDA3ZgorI2RlZmluZSBNQVRDSF9GTk1BRERfUSAweDYwMDAwNGYKKyNkZWZpbmUgTUFTS19GTk1BRERfUSAgMHg2MDAwMDdmCisjZGVmaW5lIE1BVENIX0NfTk9QIDB4MQorI2RlZmluZSBNQVNLX0NfTk9QICAweGZmZmYKKyNkZWZpbmUgTUFUQ0hfQ19BRERJMTZTUCAweDYxMDEKKyNkZWZpbmUgTUFTS19DX0FEREkxNlNQICAweGVmODMKKyNkZWZpbmUgTUFUQ0hfQ19KUiAweDgwMDIKKyNkZWZpbmUgTUFTS19DX0pSICAweGYwN2YKKyNkZWZpbmUgTUFUQ0hfQ19KQUxSIDB4OTAwMgorI2RlZmluZSBNQVNLX0NfSkFMUiAgMHhmMDdmCisjZGVmaW5lIE1BVENIX0NfRUJSRUFLIDB4OTAwMgorI2RlZmluZSBNQVNLX0NfRUJSRUFLICAweGZmZmYKKyNkZWZpbmUgTUFUQ0hfQ19MRCAweDYwMDAKKyNkZWZpbmUgTUFTS19DX0xEICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19TRCAweGUwMDAKKyNkZWZpbmUgTUFTS19DX1NEICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19BRERJVyAweDIwMDEKKyNkZWZpbmUgTUFTS19DX0FERElXICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19MRFNQIDB4NjAwMgorI2RlZmluZSBNQVNLX0NfTERTUCAgMHhlMDAzCisjZGVmaW5lIE1BVENIX0NfU0RTUCAweGUwMDIKKyNkZWZpbmUgTUFTS19DX1NEU1AgIDB4ZTAwMworI2RlZmluZSBNQVRDSF9DX0FEREk0U1BOIDB4MAorI2RlZmluZSBNQVNLX0NfQURESTRTUE4gIDB4ZTAwMworI2RlZmluZSBNQVRDSF9DX0ZMRCAweDIwMDAKKyNkZWZpbmUgTUFTS19DX0ZMRCAgMHhlMDAzCisjZGVmaW5lIE1BVENIX0NfTFcgMHg0MDAwCisjZGVmaW5lIE1BU0tfQ19MVyAgMHhlMDAzCisjZGVmaW5lIE1BVENIX0NfRkxXIDB4NjAwMAorI2RlZmluZSBNQVNLX0NfRkxXICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19GU0QgMHhhMDAwCisjZGVmaW5lIE1BU0tfQ19GU0QgIDB4ZTAwMworI2RlZmluZSBNQVRDSF9DX1NXIDB4YzAwMAorI2RlZmluZSBNQVNLX0NfU1cgIDB4ZTAwMworI2RlZmluZSBNQVRDSF9DX0ZTVyAweGUwMDAKKyNkZWZpbmUgTUFTS19DX0ZTVyAgMHhlMDAzCisjZGVmaW5lIE1BVENIX0NfQURESSAweDEKKyNkZWZpbmUgTUFTS19DX0FEREkgIDB4ZTAwMworI2RlZmluZSBNQVRDSF9DX0pBTCAweDIwMDEKKyNkZWZpbmUgTUFTS19DX0pBTCAgMHhlMDAzCisjZGVmaW5lIE1BVENIX0NfTEkgMHg0MDAxCisjZGVmaW5lIE1BU0tfQ19MSSAgMHhlMDAzCisjZGVmaW5lIE1BVENIX0NfTFVJIDB4NjAwMQorI2RlZmluZSBNQVNLX0NfTFVJICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19TUkxJIDB4ODAwMQorI2RlZmluZSBNQVNLX0NfU1JMSSAgMHhlYzAzCisjZGVmaW5lIE1BVENIX0NfU1JBSSAweDg0MDEKKyNkZWZpbmUgTUFTS19DX1NSQUkgIDB4ZWMwMworI2RlZmluZSBNQVRDSF9DX0FOREkgMHg4ODAxCisjZGVmaW5lIE1BU0tfQ19BTkRJICAweGVjMDMKKyNkZWZpbmUgTUFUQ0hfQ19TVUIgMHg4YzAxCisjZGVmaW5lIE1BU0tfQ19TVUIgIDB4ZmM2MworI2RlZmluZSBNQVRDSF9DX1hPUiAweDhjMjEKKyNkZWZpbmUgTUFTS19DX1hPUiAgMHhmYzYzCisjZGVmaW5lIE1BVENIX0NfT1IgMHg4YzQxCisjZGVmaW5lIE1BU0tfQ19PUiAgMHhmYzYzCisjZGVmaW5lIE1BVENIX0NfQU5EIDB4OGM2MQorI2RlZmluZSBNQVNLX0NfQU5EICAweGZjNjMKKyNkZWZpbmUgTUFUQ0hfQ19TVUJXIDB4OWMwMQorI2RlZmluZSBNQVNLX0NfU1VCVyAgMHhmYzYzCisjZGVmaW5lIE1BVENIX0NfQUREVyAweDljMjEKKyNkZWZpbmUgTUFTS19DX0FERFcgIDB4ZmM2MworI2RlZmluZSBNQVRDSF9DX0ogMHhhMDAxCisjZGVmaW5lIE1BU0tfQ19KICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19CRVFaIDB4YzAwMQorI2RlZmluZSBNQVNLX0NfQkVRWiAgMHhlMDAzCisjZGVmaW5lIE1BVENIX0NfQk5FWiAweGUwMDEKKyNkZWZpbmUgTUFTS19DX0JORVogIDB4ZTAwMworI2RlZmluZSBNQVRDSF9DX1NMTEkgMHgyCisjZGVmaW5lIE1BU0tfQ19TTExJICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19GTERTUCAweDIwMDIKKyNkZWZpbmUgTUFTS19DX0ZMRFNQICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19MV1NQIDB4NDAwMgorI2RlZmluZSBNQVNLX0NfTFdTUCAgMHhlMDAzCisjZGVmaW5lIE1BVENIX0NfRkxXU1AgMHg2MDAyCisjZGVmaW5lIE1BU0tfQ19GTFdTUCAgMHhlMDAzCisjZGVmaW5lIE1BVENIX0NfTVYgMHg4MDAyCisjZGVmaW5lIE1BU0tfQ19NViAgMHhmMDAzCisjZGVmaW5lIE1BVENIX0NfQUREIDB4OTAwMgorI2RlZmluZSBNQVNLX0NfQUREICAweGYwMDMKKyNkZWZpbmUgTUFUQ0hfQ19GU0RTUCAweGEwMDIKKyNkZWZpbmUgTUFTS19DX0ZTRFNQICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19TV1NQIDB4YzAwMgorI2RlZmluZSBNQVNLX0NfU1dTUCAgMHhlMDAzCisjZGVmaW5lIE1BVENIX0NfRlNXU1AgMHhlMDAyCisjZGVmaW5lIE1BU0tfQ19GU1dTUCAgMHhlMDAzCisjZGVmaW5lIE1BVENIX0NVU1RPTTAgMHhiCisjZGVmaW5lIE1BU0tfQ1VTVE9NMCAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0NVU1RPTTBfUlMxIDB4MjAwYgorI2RlZmluZSBNQVNLX0NVU1RPTTBfUlMxICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NMF9SUzFfUlMyIDB4MzAwYgorI2RlZmluZSBNQVNLX0NVU1RPTTBfUlMxX1JTMiAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0NVU1RPTTBfUkQgMHg0MDBiCisjZGVmaW5lIE1BU0tfQ1VTVE9NMF9SRCAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0NVU1RPTTBfUkRfUlMxIDB4NjAwYgorI2RlZmluZSBNQVNLX0NVU1RPTTBfUkRfUlMxICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NMF9SRF9SUzFfUlMyIDB4NzAwYgorI2RlZmluZSBNQVNLX0NVU1RPTTBfUkRfUlMxX1JTMiAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0NVU1RPTTEgMHgyYgorI2RlZmluZSBNQVNLX0NVU1RPTTEgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DVVNUT00xX1JTMSAweDIwMmIKKyNkZWZpbmUgTUFTS19DVVNUT00xX1JTMSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0NVU1RPTTFfUlMxX1JTMiAweDMwMmIKKyNkZWZpbmUgTUFTS19DVVNUT00xX1JTMV9SUzIgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DVVNUT00xX1JEIDB4NDAyYgorI2RlZmluZSBNQVNLX0NVU1RPTTFfUkQgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DVVNUT00xX1JEX1JTMSAweDYwMmIKKyNkZWZpbmUgTUFTS19DVVNUT00xX1JEX1JTMSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0NVU1RPTTFfUkRfUlMxX1JTMiAweDcwMmIKKyNkZWZpbmUgTUFTS19DVVNUT00xX1JEX1JTMV9SUzIgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DVVNUT00yIDB4NWIKKyNkZWZpbmUgTUFTS19DVVNUT00yICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NMl9SUzEgMHgyMDViCisjZGVmaW5lIE1BU0tfQ1VTVE9NMl9SUzEgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DVVNUT00yX1JTMV9SUzIgMHgzMDViCisjZGVmaW5lIE1BU0tfQ1VTVE9NMl9SUzFfUlMyICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NMl9SRCAweDQwNWIKKyNkZWZpbmUgTUFTS19DVVNUT00yX1JEICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NMl9SRF9SUzEgMHg2MDViCisjZGVmaW5lIE1BU0tfQ1VTVE9NMl9SRF9SUzEgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DVVNUT00yX1JEX1JTMV9SUzIgMHg3MDViCisjZGVmaW5lIE1BU0tfQ1VTVE9NMl9SRF9SUzFfUlMyICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NMyAweDdiCisjZGVmaW5lIE1BU0tfQ1VTVE9NMyAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0NVU1RPTTNfUlMxIDB4MjA3YgorI2RlZmluZSBNQVNLX0NVU1RPTTNfUlMxICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NM19SUzFfUlMyIDB4MzA3YgorI2RlZmluZSBNQVNLX0NVU1RPTTNfUlMxX1JTMiAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0NVU1RPTTNfUkQgMHg0MDdiCisjZGVmaW5lIE1BU0tfQ1VTVE9NM19SRCAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0NVU1RPTTNfUkRfUlMxIDB4NjA3YgorI2RlZmluZSBNQVNLX0NVU1RPTTNfUkRfUlMxICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NM19SRF9SUzFfUlMyIDB4NzA3YgorI2RlZmluZSBNQVNLX0NVU1RPTTNfUkRfUlMxX1JTMiAgMHg3MDdmCisjZGVmaW5lIENTUl9GRkxBR1MgMHgxCisjZGVmaW5lIENTUl9GUk0gMHgyCisjZGVmaW5lIENTUl9GQ1NSIDB4MworI2RlZmluZSBDU1JfQ1lDTEUgMHhjMDAKKyNkZWZpbmUgQ1NSX1RJTUUgMHhjMDEKKyNkZWZpbmUgQ1NSX0lOU1RSRVQgMHhjMDIKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIzIDB4YzAzCisjZGVmaW5lIENTUl9IUE1DT1VOVEVSNCAweGMwNAorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjUgMHhjMDUKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVI2IDB4YzA2CisjZGVmaW5lIENTUl9IUE1DT1VOVEVSNyAweGMwNworI2RlZmluZSBDU1JfSFBNQ09VTlRFUjggMHhjMDgKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVI5IDB4YzA5CisjZGVmaW5lIENTUl9IUE1DT1VOVEVSMTAgMHhjMGEKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxMSAweGMwYgorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjEyIDB4YzBjCisjZGVmaW5lIENTUl9IUE1DT1VOVEVSMTMgMHhjMGQKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxNCAweGMwZQorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjE1IDB4YzBmCisjZGVmaW5lIENTUl9IUE1DT1VOVEVSMTYgMHhjMTAKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxNyAweGMxMQorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjE4IDB4YzEyCisjZGVmaW5lIENTUl9IUE1DT1VOVEVSMTkgMHhjMTMKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyMCAweGMxNAorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjIxIDB4YzE1CisjZGVmaW5lIENTUl9IUE1DT1VOVEVSMjIgMHhjMTYKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyMyAweGMxNworI2RlZmluZSBDU1JfSFBNQ09VTlRFUjI0IDB4YzE4CisjZGVmaW5lIENTUl9IUE1DT1VOVEVSMjUgMHhjMTkKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyNiAweGMxYQorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjI3IDB4YzFiCisjZGVmaW5lIENTUl9IUE1DT1VOVEVSMjggMHhjMWMKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyOSAweGMxZAorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjMwIDB4YzFlCisjZGVmaW5lIENTUl9IUE1DT1VOVEVSMzEgMHhjMWYKKyNkZWZpbmUgQ1NSX1NTVEFUVVMgMHgxMDAKKyNkZWZpbmUgQ1NSX1NJRSAweDEwNAorI2RlZmluZSBDU1JfU1RWRUMgMHgxMDUKKyNkZWZpbmUgQ1NSX1NDT1VOVEVSRU4gMHgxMDYKKyNkZWZpbmUgQ1NSX1NTQ1JBVENIIDB4MTQwCisjZGVmaW5lIENTUl9TRVBDIDB4MTQxCisjZGVmaW5lIENTUl9TQ0FVU0UgMHgxNDIKKyNkZWZpbmUgQ1NSX1NCQURBRERSIDB4MTQzCisjZGVmaW5lIENTUl9TSVAgMHgxNDQKKyNkZWZpbmUgQ1NSX1NQVEJSIDB4MTgwCisjZGVmaW5lIENTUl9NU1RBVFVTIDB4MzAwCisjZGVmaW5lIENTUl9NSVNBIDB4MzAxCisjZGVmaW5lIENTUl9NRURFTEVHIDB4MzAyCisjZGVmaW5lIENTUl9NSURFTEVHIDB4MzAzCisjZGVmaW5lIENTUl9NSUUgMHgzMDQKKyNkZWZpbmUgQ1NSX01UVkVDIDB4MzA1CisjZGVmaW5lIENTUl9NQ09VTlRFUkVOIDB4MzA2CisjZGVmaW5lIENTUl9NU0NSQVRDSCAweDM0MAorI2RlZmluZSBDU1JfTUVQQyAweDM0MQorI2RlZmluZSBDU1JfTUNBVVNFIDB4MzQyCisjZGVmaW5lIENTUl9NQkFEQUREUiAweDM0MworI2RlZmluZSBDU1JfTUlQIDB4MzQ0CisjZGVmaW5lIENTUl9QTVBDRkcwIDB4M2EwCisjZGVmaW5lIENTUl9QTVBDRkcxIDB4M2ExCisjZGVmaW5lIENTUl9QTVBDRkcyIDB4M2EyCisjZGVmaW5lIENTUl9QTVBDRkczIDB4M2EzCisjZGVmaW5lIENTUl9QTVBBRERSMCAweDNiMAorI2RlZmluZSBDU1JfUE1QQUREUjEgMHgzYjEKKyNkZWZpbmUgQ1NSX1BNUEFERFIyIDB4M2IyCisjZGVmaW5lIENTUl9QTVBBRERSMyAweDNiMworI2RlZmluZSBDU1JfUE1QQUREUjQgMHgzYjQKKyNkZWZpbmUgQ1NSX1BNUEFERFI1IDB4M2I1CisjZGVmaW5lIENTUl9QTVBBRERSNiAweDNiNgorI2RlZmluZSBDU1JfUE1QQUREUjcgMHgzYjcKKyNkZWZpbmUgQ1NSX1BNUEFERFI4IDB4M2I4CisjZGVmaW5lIENTUl9QTVBBRERSOSAweDNiOQorI2RlZmluZSBDU1JfUE1QQUREUjEwIDB4M2JhCisjZGVmaW5lIENTUl9QTVBBRERSMTEgMHgzYmIKKyNkZWZpbmUgQ1NSX1BNUEFERFIxMiAweDNiYworI2RlZmluZSBDU1JfUE1QQUREUjEzIDB4M2JkCisjZGVmaW5lIENTUl9QTVBBRERSMTQgMHgzYmUKKyNkZWZpbmUgQ1NSX1BNUEFERFIxNSAweDNiZgorI2RlZmluZSBDU1JfVFNFTEVDVCAweDdhMAorI2RlZmluZSBDU1JfVERBVEExIDB4N2ExCisjZGVmaW5lIENTUl9UREFUQTIgMHg3YTIKKyNkZWZpbmUgQ1NSX1REQVRBMyAweDdhMworI2RlZmluZSBDU1JfRENTUiAweDdiMAorI2RlZmluZSBDU1JfRFBDIDB4N2IxCisjZGVmaW5lIENTUl9EU0NSQVRDSCAweDdiMgorI2RlZmluZSBDU1JfTUNZQ0xFIDB4YjAwCisjZGVmaW5lIENTUl9NSU5TVFJFVCAweGIwMgorI2RlZmluZSBDU1JfTUhQTUNPVU5URVIzIDB4YjAzCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjQgMHhiMDQKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSNSAweGIwNQorI2RlZmluZSBDU1JfTUhQTUNPVU5URVI2IDB4YjA2CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjcgMHhiMDcKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSOCAweGIwOAorI2RlZmluZSBDU1JfTUhQTUNPVU5URVI5IDB4YjA5CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjEwIDB4YjBhCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjExIDB4YjBiCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjEyIDB4YjBjCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjEzIDB4YjBkCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjE0IDB4YjBlCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjE1IDB4YjBmCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjE2IDB4YjEwCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjE3IDB4YjExCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjE4IDB4YjEyCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjE5IDB4YjEzCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjIwIDB4YjE0CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjIxIDB4YjE1CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjIyIDB4YjE2CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjIzIDB4YjE3CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjI0IDB4YjE4CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjI1IDB4YjE5CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjI2IDB4YjFhCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjI3IDB4YjFiCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjI4IDB4YjFjCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjI5IDB4YjFkCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjMwIDB4YjFlCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjMxIDB4YjFmCisjZGVmaW5lIENTUl9NSFBNRVZFTlQzIDB4MzIzCisjZGVmaW5lIENTUl9NSFBNRVZFTlQ0IDB4MzI0CisjZGVmaW5lIENTUl9NSFBNRVZFTlQ1IDB4MzI1CisjZGVmaW5lIENTUl9NSFBNRVZFTlQ2IDB4MzI2CisjZGVmaW5lIENTUl9NSFBNRVZFTlQ3IDB4MzI3CisjZGVmaW5lIENTUl9NSFBNRVZFTlQ4IDB4MzI4CisjZGVmaW5lIENTUl9NSFBNRVZFTlQ5IDB4MzI5CisjZGVmaW5lIENTUl9NSFBNRVZFTlQxMCAweDMyYQorI2RlZmluZSBDU1JfTUhQTUVWRU5UMTEgMHgzMmIKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDEyIDB4MzJjCisjZGVmaW5lIENTUl9NSFBNRVZFTlQxMyAweDMyZAorI2RlZmluZSBDU1JfTUhQTUVWRU5UMTQgMHgzMmUKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDE1IDB4MzJmCisjZGVmaW5lIENTUl9NSFBNRVZFTlQxNiAweDMzMAorI2RlZmluZSBDU1JfTUhQTUVWRU5UMTcgMHgzMzEKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDE4IDB4MzMyCisjZGVmaW5lIENTUl9NSFBNRVZFTlQxOSAweDMzMworI2RlZmluZSBDU1JfTUhQTUVWRU5UMjAgMHgzMzQKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDIxIDB4MzM1CisjZGVmaW5lIENTUl9NSFBNRVZFTlQyMiAweDMzNgorI2RlZmluZSBDU1JfTUhQTUVWRU5UMjMgMHgzMzcKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDI0IDB4MzM4CisjZGVmaW5lIENTUl9NSFBNRVZFTlQyNSAweDMzOQorI2RlZmluZSBDU1JfTUhQTUVWRU5UMjYgMHgzM2EKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDI3IDB4MzNiCisjZGVmaW5lIENTUl9NSFBNRVZFTlQyOCAweDMzYworI2RlZmluZSBDU1JfTUhQTUVWRU5UMjkgMHgzM2QKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDMwIDB4MzNlCisjZGVmaW5lIENTUl9NSFBNRVZFTlQzMSAweDMzZgorI2RlZmluZSBDU1JfTVZFTkRPUklEIDB4ZjExCisjZGVmaW5lIENTUl9NQVJDSElEIDB4ZjEyCisjZGVmaW5lIENTUl9NSU1QSUQgMHhmMTMKKyNkZWZpbmUgQ1NSX01IQVJUSUQgMHhmMTQKKyNkZWZpbmUgQ1NSX0NZQ0xFSCAweGM4MAorI2RlZmluZSBDU1JfVElNRUggMHhjODEKKyNkZWZpbmUgQ1NSX0lOU1RSRVRIIDB4YzgyCisjZGVmaW5lIENTUl9IUE1DT1VOVEVSM0ggMHhjODMKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVI0SCAweGM4NAorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjVIIDB4Yzg1CisjZGVmaW5lIENTUl9IUE1DT1VOVEVSNkggMHhjODYKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVI3SCAweGM4NworI2RlZmluZSBDU1JfSFBNQ09VTlRFUjhIIDB4Yzg4CisjZGVmaW5lIENTUl9IUE1DT1VOVEVSOUggMHhjODkKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxMEggMHhjOGEKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxMUggMHhjOGIKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxMkggMHhjOGMKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxM0ggMHhjOGQKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxNEggMHhjOGUKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxNUggMHhjOGYKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxNkggMHhjOTAKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxN0ggMHhjOTEKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxOEggMHhjOTIKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxOUggMHhjOTMKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyMEggMHhjOTQKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyMUggMHhjOTUKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyMkggMHhjOTYKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyM0ggMHhjOTcKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyNEggMHhjOTgKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyNUggMHhjOTkKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyNkggMHhjOWEKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyN0ggMHhjOWIKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyOEggMHhjOWMKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyOUggMHhjOWQKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIzMEggMHhjOWUKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIzMUggMHhjOWYKKyNkZWZpbmUgQ1NSX01DWUNMRUggMHhiODAKKyNkZWZpbmUgQ1NSX01JTlNUUkVUSCAweGI4MgorI2RlZmluZSBDU1JfTUhQTUNPVU5URVIzSCAweGI4MworI2RlZmluZSBDU1JfTUhQTUNPVU5URVI0SCAweGI4NAorI2RlZmluZSBDU1JfTUhQTUNPVU5URVI1SCAweGI4NQorI2RlZmluZSBDU1JfTUhQTUNPVU5URVI2SCAweGI4NgorI2RlZmluZSBDU1JfTUhQTUNPVU5URVI3SCAweGI4NworI2RlZmluZSBDU1JfTUhQTUNPVU5URVI4SCAweGI4OAorI2RlZmluZSBDU1JfTUhQTUNPVU5URVI5SCAweGI4OQorI2RlZmluZSBDU1JfTUhQTUNPVU5URVIxMEggMHhiOGEKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTFIIDB4YjhiCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjEySCAweGI4YworI2RlZmluZSBDU1JfTUhQTUNPVU5URVIxM0ggMHhiOGQKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTRIIDB4YjhlCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjE1SCAweGI4ZgorI2RlZmluZSBDU1JfTUhQTUNPVU5URVIxNkggMHhiOTAKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTdIIDB4YjkxCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjE4SCAweGI5MgorI2RlZmluZSBDU1JfTUhQTUNPVU5URVIxOUggMHhiOTMKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjBIIDB4Yjk0CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjIxSCAweGI5NQorI2RlZmluZSBDU1JfTUhQTUNPVU5URVIyMkggMHhiOTYKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjNIIDB4Yjk3CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjI0SCAweGI5OAorI2RlZmluZSBDU1JfTUhQTUNPVU5URVIyNUggMHhiOTkKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjZIIDB4YjlhCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjI3SCAweGI5YgorI2RlZmluZSBDU1JfTUhQTUNPVU5URVIyOEggMHhiOWMKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjlIIDB4YjlkCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjMwSCAweGI5ZQorI2RlZmluZSBDU1JfTUhQTUNPVU5URVIzMUggMHhiOWYKKyNkZWZpbmUgQ0FVU0VfTUlTQUxJR05FRF9GRVRDSCAweDAKKyNkZWZpbmUgQ0FVU0VfRkVUQ0hfQUNDRVNTIDB4MQorI2RlZmluZSBDQVVTRV9JTExFR0FMX0lOU1RSVUNUSU9OIDB4MgorI2RlZmluZSBDQVVTRV9CUkVBS1BPSU5UIDB4MworI2RlZmluZSBDQVVTRV9NSVNBTElHTkVEX0xPQUQgMHg0CisjZGVmaW5lIENBVVNFX0xPQURfQUNDRVNTIDB4NQorI2RlZmluZSBDQVVTRV9NSVNBTElHTkVEX1NUT1JFIDB4NgorI2RlZmluZSBDQVVTRV9TVE9SRV9BQ0NFU1MgMHg3CisjZGVmaW5lIENBVVNFX1VTRVJfRUNBTEwgMHg4CisjZGVmaW5lIENBVVNFX1NVUEVSVklTT1JfRUNBTEwgMHg5CisjZGVmaW5lIENBVVNFX0hZUEVSVklTT1JfRUNBTEwgMHhhCisjZGVmaW5lIENBVVNFX01BQ0hJTkVfRUNBTEwgMHhiCisjZGVmaW5lIENBVVNFX0ZFVENIX1BBR0VfRkFVTFQgMHhjCisjZGVmaW5lIENBVVNFX0xPQURfUEFHRV9GQVVMVCAweGQKKyNkZWZpbmUgQ0FVU0VfU1RPUkVfUEFHRV9GQVVMVCAweGYKKyNlbmRpZgorI2lmZGVmIERFQ0xBUkVfSU5TTgorREVDTEFSRV9JTlNOKGJlcSwgTUFUQ0hfQkVRLCBNQVNLX0JFUSkKK0RFQ0xBUkVfSU5TTihibmUsIE1BVENIX0JORSwgTUFTS19CTkUpCitERUNMQVJFX0lOU04oYmx0LCBNQVRDSF9CTFQsIE1BU0tfQkxUKQorREVDTEFSRV9JTlNOKGJnZSwgTUFUQ0hfQkdFLCBNQVNLX0JHRSkKK0RFQ0xBUkVfSU5TTihibHR1LCBNQVRDSF9CTFRVLCBNQVNLX0JMVFUpCitERUNMQVJFX0lOU04oYmdldSwgTUFUQ0hfQkdFVSwgTUFTS19CR0VVKQorREVDTEFSRV9JTlNOKGphbHIsIE1BVENIX0pBTFIsIE1BU0tfSkFMUikKK0RFQ0xBUkVfSU5TTihqYWwsIE1BVENIX0pBTCwgTUFTS19KQUwpCitERUNMQVJFX0lOU04obHVpLCBNQVRDSF9MVUksIE1BU0tfTFVJKQorREVDTEFSRV9JTlNOKGF1aXBjLCBNQVRDSF9BVUlQQywgTUFTS19BVUlQQykKK0RFQ0xBUkVfSU5TTihhZGRpLCBNQVRDSF9BRERJLCBNQVNLX0FEREkpCitERUNMQVJFX0lOU04oc2xsaSwgTUFUQ0hfU0xMSSwgTUFTS19TTExJKQorREVDTEFSRV9JTlNOKHNsdGksIE1BVENIX1NMVEksIE1BU0tfU0xUSSkKK0RFQ0xBUkVfSU5TTihzbHRpdSwgTUFUQ0hfU0xUSVUsIE1BU0tfU0xUSVUpCitERUNMQVJFX0lOU04oeG9yaSwgTUFUQ0hfWE9SSSwgTUFTS19YT1JJKQorREVDTEFSRV9JTlNOKHNybGksIE1BVENIX1NSTEksIE1BU0tfU1JMSSkKK0RFQ0xBUkVfSU5TTihzcmFpLCBNQVRDSF9TUkFJLCBNQVNLX1NSQUkpCitERUNMQVJFX0lOU04ob3JpLCBNQVRDSF9PUkksIE1BU0tfT1JJKQorREVDTEFSRV9JTlNOKGFuZGksIE1BVENIX0FOREksIE1BU0tfQU5ESSkKK0RFQ0xBUkVfSU5TTihhZGQsIE1BVENIX0FERCwgTUFTS19BREQpCitERUNMQVJFX0lOU04oc3ViLCBNQVRDSF9TVUIsIE1BU0tfU1VCKQorREVDTEFSRV9JTlNOKHNsbCwgTUFUQ0hfU0xMLCBNQVNLX1NMTCkKK0RFQ0xBUkVfSU5TTihzbHQsIE1BVENIX1NMVCwgTUFTS19TTFQpCitERUNMQVJFX0lOU04oc2x0dSwgTUFUQ0hfU0xUVSwgTUFTS19TTFRVKQorREVDTEFSRV9JTlNOKHhvciwgTUFUQ0hfWE9SLCBNQVNLX1hPUikKK0RFQ0xBUkVfSU5TTihzcmwsIE1BVENIX1NSTCwgTUFTS19TUkwpCitERUNMQVJFX0lOU04oc3JhLCBNQVRDSF9TUkEsIE1BU0tfU1JBKQorREVDTEFSRV9JTlNOKG9yLCBNQVRDSF9PUiwgTUFTS19PUikKK0RFQ0xBUkVfSU5TTihhbmQsIE1BVENIX0FORCwgTUFTS19BTkQpCitERUNMQVJFX0lOU04oYWRkaXcsIE1BVENIX0FERElXLCBNQVNLX0FERElXKQorREVDTEFSRV9JTlNOKHNsbGl3LCBNQVRDSF9TTExJVywgTUFTS19TTExJVykKK0RFQ0xBUkVfSU5TTihzcmxpdywgTUFUQ0hfU1JMSVcsIE1BU0tfU1JMSVcpCitERUNMQVJFX0lOU04oc3JhaXcsIE1BVENIX1NSQUlXLCBNQVNLX1NSQUlXKQorREVDTEFSRV9JTlNOKGFkZHcsIE1BVENIX0FERFcsIE1BU0tfQUREVykKK0RFQ0xBUkVfSU5TTihzdWJ3LCBNQVRDSF9TVUJXLCBNQVNLX1NVQlcpCitERUNMQVJFX0lOU04oc2xsdywgTUFUQ0hfU0xMVywgTUFTS19TTExXKQorREVDTEFSRV9JTlNOKHNybHcsIE1BVENIX1NSTFcsIE1BU0tfU1JMVykKK0RFQ0xBUkVfSU5TTihzcmF3LCBNQVRDSF9TUkFXLCBNQVNLX1NSQVcpCitERUNMQVJFX0lOU04obGIsIE1BVENIX0xCLCBNQVNLX0xCKQorREVDTEFSRV9JTlNOKGxoLCBNQVRDSF9MSCwgTUFTS19MSCkKK0RFQ0xBUkVfSU5TTihsdywgTUFUQ0hfTFcsIE1BU0tfTFcpCitERUNMQVJFX0lOU04obGQsIE1BVENIX0xELCBNQVNLX0xEKQorREVDTEFSRV9JTlNOKGxidSwgTUFUQ0hfTEJVLCBNQVNLX0xCVSkKK0RFQ0xBUkVfSU5TTihsaHUsIE1BVENIX0xIVSwgTUFTS19MSFUpCitERUNMQVJFX0lOU04obHd1LCBNQVRDSF9MV1UsIE1BU0tfTFdVKQorREVDTEFSRV9JTlNOKHNiLCBNQVRDSF9TQiwgTUFTS19TQikKK0RFQ0xBUkVfSU5TTihzaCwgTUFUQ0hfU0gsIE1BU0tfU0gpCitERUNMQVJFX0lOU04oc3csIE1BVENIX1NXLCBNQVNLX1NXKQorREVDTEFSRV9JTlNOKHNkLCBNQVRDSF9TRCwgTUFTS19TRCkKK0RFQ0xBUkVfSU5TTihmZW5jZSwgTUFUQ0hfRkVOQ0UsIE1BU0tfRkVOQ0UpCitERUNMQVJFX0lOU04oZmVuY2VfaSwgTUFUQ0hfRkVOQ0VfSSwgTUFTS19GRU5DRV9JKQorREVDTEFSRV9JTlNOKG11bCwgTUFUQ0hfTVVMLCBNQVNLX01VTCkKK0RFQ0xBUkVfSU5TTihtdWxoLCBNQVRDSF9NVUxILCBNQVNLX01VTEgpCitERUNMQVJFX0lOU04obXVsaHN1LCBNQVRDSF9NVUxIU1UsIE1BU0tfTVVMSFNVKQorREVDTEFSRV9JTlNOKG11bGh1LCBNQVRDSF9NVUxIVSwgTUFTS19NVUxIVSkKK0RFQ0xBUkVfSU5TTihkaXYsIE1BVENIX0RJViwgTUFTS19ESVYpCitERUNMQVJFX0lOU04oZGl2dSwgTUFUQ0hfRElWVSwgTUFTS19ESVZVKQorREVDTEFSRV9JTlNOKHJlbSwgTUFUQ0hfUkVNLCBNQVNLX1JFTSkKK0RFQ0xBUkVfSU5TTihyZW11LCBNQVRDSF9SRU1VLCBNQVNLX1JFTVUpCitERUNMQVJFX0lOU04obXVsdywgTUFUQ0hfTVVMVywgTUFTS19NVUxXKQorREVDTEFSRV9JTlNOKGRpdncsIE1BVENIX0RJVlcsIE1BU0tfRElWVykKK0RFQ0xBUkVfSU5TTihkaXZ1dywgTUFUQ0hfRElWVVcsIE1BU0tfRElWVVcpCitERUNMQVJFX0lOU04ocmVtdywgTUFUQ0hfUkVNVywgTUFTS19SRU1XKQorREVDTEFSRV9JTlNOKHJlbXV3LCBNQVRDSF9SRU1VVywgTUFTS19SRU1VVykKK0RFQ0xBUkVfSU5TTihhbW9hZGRfdywgTUFUQ0hfQU1PQUREX1csIE1BU0tfQU1PQUREX1cpCitERUNMQVJFX0lOU04oYW1veG9yX3csIE1BVENIX0FNT1hPUl9XLCBNQVNLX0FNT1hPUl9XKQorREVDTEFSRV9JTlNOKGFtb29yX3csIE1BVENIX0FNT09SX1csIE1BU0tfQU1PT1JfVykKK0RFQ0xBUkVfSU5TTihhbW9hbmRfdywgTUFUQ0hfQU1PQU5EX1csIE1BU0tfQU1PQU5EX1cpCitERUNMQVJFX0lOU04oYW1vbWluX3csIE1BVENIX0FNT01JTl9XLCBNQVNLX0FNT01JTl9XKQorREVDTEFSRV9JTlNOKGFtb21heF93LCBNQVRDSF9BTU9NQVhfVywgTUFTS19BTU9NQVhfVykKK0RFQ0xBUkVfSU5TTihhbW9taW51X3csIE1BVENIX0FNT01JTlVfVywgTUFTS19BTU9NSU5VX1cpCitERUNMQVJFX0lOU04oYW1vbWF4dV93LCBNQVRDSF9BTU9NQVhVX1csIE1BU0tfQU1PTUFYVV9XKQorREVDTEFSRV9JTlNOKGFtb3N3YXBfdywgTUFUQ0hfQU1PU1dBUF9XLCBNQVNLX0FNT1NXQVBfVykKK0RFQ0xBUkVfSU5TTihscl93LCBNQVRDSF9MUl9XLCBNQVNLX0xSX1cpCitERUNMQVJFX0lOU04oc2NfdywgTUFUQ0hfU0NfVywgTUFTS19TQ19XKQorREVDTEFSRV9JTlNOKGFtb2FkZF9kLCBNQVRDSF9BTU9BRERfRCwgTUFTS19BTU9BRERfRCkKK0RFQ0xBUkVfSU5TTihhbW94b3JfZCwgTUFUQ0hfQU1PWE9SX0QsIE1BU0tfQU1PWE9SX0QpCitERUNMQVJFX0lOU04oYW1vb3JfZCwgTUFUQ0hfQU1PT1JfRCwgTUFTS19BTU9PUl9EKQorREVDTEFSRV9JTlNOKGFtb2FuZF9kLCBNQVRDSF9BTU9BTkRfRCwgTUFTS19BTU9BTkRfRCkKK0RFQ0xBUkVfSU5TTihhbW9taW5fZCwgTUFUQ0hfQU1PTUlOX0QsIE1BU0tfQU1PTUlOX0QpCitERUNMQVJFX0lOU04oYW1vbWF4X2QsIE1BVENIX0FNT01BWF9ELCBNQVNLX0FNT01BWF9EKQorREVDTEFSRV9JTlNOKGFtb21pbnVfZCwgTUFUQ0hfQU1PTUlOVV9ELCBNQVNLX0FNT01JTlVfRCkKK0RFQ0xBUkVfSU5TTihhbW9tYXh1X2QsIE1BVENIX0FNT01BWFVfRCwgTUFTS19BTU9NQVhVX0QpCitERUNMQVJFX0lOU04oYW1vc3dhcF9kLCBNQVRDSF9BTU9TV0FQX0QsIE1BU0tfQU1PU1dBUF9EKQorREVDTEFSRV9JTlNOKGxyX2QsIE1BVENIX0xSX0QsIE1BU0tfTFJfRCkKK0RFQ0xBUkVfSU5TTihzY19kLCBNQVRDSF9TQ19ELCBNQVNLX1NDX0QpCitERUNMQVJFX0lOU04oZWNhbGwsIE1BVENIX0VDQUxMLCBNQVNLX0VDQUxMKQorREVDTEFSRV9JTlNOKGVicmVhaywgTUFUQ0hfRUJSRUFLLCBNQVNLX0VCUkVBSykKK0RFQ0xBUkVfSU5TTih1cmV0LCBNQVRDSF9VUkVULCBNQVNLX1VSRVQpCitERUNMQVJFX0lOU04oc3JldCwgTUFUQ0hfU1JFVCwgTUFTS19TUkVUKQorREVDTEFSRV9JTlNOKG1yZXQsIE1BVENIX01SRVQsIE1BU0tfTVJFVCkKK0RFQ0xBUkVfSU5TTihkcmV0LCBNQVRDSF9EUkVULCBNQVNLX0RSRVQpCitERUNMQVJFX0lOU04oc2ZlbmNlX3ZtYSwgTUFUQ0hfU0ZFTkNFX1ZNQSwgTUFTS19TRkVOQ0VfVk1BKQorREVDTEFSRV9JTlNOKHdmaSwgTUFUQ0hfV0ZJLCBNQVNLX1dGSSkKK0RFQ0xBUkVfSU5TTihjc3JydywgTUFUQ0hfQ1NSUlcsIE1BU0tfQ1NSUlcpCitERUNMQVJFX0lOU04oY3NycnMsIE1BVENIX0NTUlJTLCBNQVNLX0NTUlJTKQorREVDTEFSRV9JTlNOKGNzcnJjLCBNQVRDSF9DU1JSQywgTUFTS19DU1JSQykKK0RFQ0xBUkVfSU5TTihjc3Jyd2ksIE1BVENIX0NTUlJXSSwgTUFTS19DU1JSV0kpCitERUNMQVJFX0lOU04oY3NycnNpLCBNQVRDSF9DU1JSU0ksIE1BU0tfQ1NSUlNJKQorREVDTEFSRV9JTlNOKGNzcnJjaSwgTUFUQ0hfQ1NSUkNJLCBNQVNLX0NTUlJDSSkKK0RFQ0xBUkVfSU5TTihmYWRkX3MsIE1BVENIX0ZBRERfUywgTUFTS19GQUREX1MpCitERUNMQVJFX0lOU04oZnN1Yl9zLCBNQVRDSF9GU1VCX1MsIE1BU0tfRlNVQl9TKQorREVDTEFSRV9JTlNOKGZtdWxfcywgTUFUQ0hfRk1VTF9TLCBNQVNLX0ZNVUxfUykKK0RFQ0xBUkVfSU5TTihmZGl2X3MsIE1BVENIX0ZESVZfUywgTUFTS19GRElWX1MpCitERUNMQVJFX0lOU04oZnNnbmpfcywgTUFUQ0hfRlNHTkpfUywgTUFTS19GU0dOSl9TKQorREVDTEFSRV9JTlNOKGZzZ25qbl9zLCBNQVRDSF9GU0dOSk5fUywgTUFTS19GU0dOSk5fUykKK0RFQ0xBUkVfSU5TTihmc2duanhfcywgTUFUQ0hfRlNHTkpYX1MsIE1BU0tfRlNHTkpYX1MpCitERUNMQVJFX0lOU04oZm1pbl9zLCBNQVRDSF9GTUlOX1MsIE1BU0tfRk1JTl9TKQorREVDTEFSRV9JTlNOKGZtYXhfcywgTUFUQ0hfRk1BWF9TLCBNQVNLX0ZNQVhfUykKK0RFQ0xBUkVfSU5TTihmc3FydF9zLCBNQVRDSF9GU1FSVF9TLCBNQVNLX0ZTUVJUX1MpCitERUNMQVJFX0lOU04oZmFkZF9kLCBNQVRDSF9GQUREX0QsIE1BU0tfRkFERF9EKQorREVDTEFSRV9JTlNOKGZzdWJfZCwgTUFUQ0hfRlNVQl9ELCBNQVNLX0ZTVUJfRCkKK0RFQ0xBUkVfSU5TTihmbXVsX2QsIE1BVENIX0ZNVUxfRCwgTUFTS19GTVVMX0QpCitERUNMQVJFX0lOU04oZmRpdl9kLCBNQVRDSF9GRElWX0QsIE1BU0tfRkRJVl9EKQorREVDTEFSRV9JTlNOKGZzZ25qX2QsIE1BVENIX0ZTR05KX0QsIE1BU0tfRlNHTkpfRCkKK0RFQ0xBUkVfSU5TTihmc2duam5fZCwgTUFUQ0hfRlNHTkpOX0QsIE1BU0tfRlNHTkpOX0QpCitERUNMQVJFX0lOU04oZnNnbmp4X2QsIE1BVENIX0ZTR05KWF9ELCBNQVNLX0ZTR05KWF9EKQorREVDTEFSRV9JTlNOKGZtaW5fZCwgTUFUQ0hfRk1JTl9ELCBNQVNLX0ZNSU5fRCkKK0RFQ0xBUkVfSU5TTihmbWF4X2QsIE1BVENIX0ZNQVhfRCwgTUFTS19GTUFYX0QpCitERUNMQVJFX0lOU04oZmN2dF9zX2QsIE1BVENIX0ZDVlRfU19ELCBNQVNLX0ZDVlRfU19EKQorREVDTEFSRV9JTlNOKGZjdnRfZF9zLCBNQVRDSF9GQ1ZUX0RfUywgTUFTS19GQ1ZUX0RfUykKK0RFQ0xBUkVfSU5TTihmc3FydF9kLCBNQVRDSF9GU1FSVF9ELCBNQVNLX0ZTUVJUX0QpCitERUNMQVJFX0lOU04oZmFkZF9xLCBNQVRDSF9GQUREX1EsIE1BU0tfRkFERF9RKQorREVDTEFSRV9JTlNOKGZzdWJfcSwgTUFUQ0hfRlNVQl9RLCBNQVNLX0ZTVUJfUSkKK0RFQ0xBUkVfSU5TTihmbXVsX3EsIE1BVENIX0ZNVUxfUSwgTUFTS19GTVVMX1EpCitERUNMQVJFX0lOU04oZmRpdl9xLCBNQVRDSF9GRElWX1EsIE1BU0tfRkRJVl9RKQorREVDTEFSRV9JTlNOKGZzZ25qX3EsIE1BVENIX0ZTR05KX1EsIE1BU0tfRlNHTkpfUSkKK0RFQ0xBUkVfSU5TTihmc2duam5fcSwgTUFUQ0hfRlNHTkpOX1EsIE1BU0tfRlNHTkpOX1EpCitERUNMQVJFX0lOU04oZnNnbmp4X3EsIE1BVENIX0ZTR05KWF9RLCBNQVNLX0ZTR05KWF9RKQorREVDTEFSRV9JTlNOKGZtaW5fcSwgTUFUQ0hfRk1JTl9RLCBNQVNLX0ZNSU5fUSkKK0RFQ0xBUkVfSU5TTihmbWF4X3EsIE1BVENIX0ZNQVhfUSwgTUFTS19GTUFYX1EpCitERUNMQVJFX0lOU04oZmN2dF9zX3EsIE1BVENIX0ZDVlRfU19RLCBNQVNLX0ZDVlRfU19RKQorREVDTEFSRV9JTlNOKGZjdnRfcV9zLCBNQVRDSF9GQ1ZUX1FfUywgTUFTS19GQ1ZUX1FfUykKK0RFQ0xBUkVfSU5TTihmY3Z0X2RfcSwgTUFUQ0hfRkNWVF9EX1EsIE1BU0tfRkNWVF9EX1EpCitERUNMQVJFX0lOU04oZmN2dF9xX2QsIE1BVENIX0ZDVlRfUV9ELCBNQVNLX0ZDVlRfUV9EKQorREVDTEFSRV9JTlNOKGZzcXJ0X3EsIE1BVENIX0ZTUVJUX1EsIE1BU0tfRlNRUlRfUSkKK0RFQ0xBUkVfSU5TTihmbGVfcywgTUFUQ0hfRkxFX1MsIE1BU0tfRkxFX1MpCitERUNMQVJFX0lOU04oZmx0X3MsIE1BVENIX0ZMVF9TLCBNQVNLX0ZMVF9TKQorREVDTEFSRV9JTlNOKGZlcV9zLCBNQVRDSF9GRVFfUywgTUFTS19GRVFfUykKK0RFQ0xBUkVfSU5TTihmbGVfZCwgTUFUQ0hfRkxFX0QsIE1BU0tfRkxFX0QpCitERUNMQVJFX0lOU04oZmx0X2QsIE1BVENIX0ZMVF9ELCBNQVNLX0ZMVF9EKQorREVDTEFSRV9JTlNOKGZlcV9kLCBNQVRDSF9GRVFfRCwgTUFTS19GRVFfRCkKK0RFQ0xBUkVfSU5TTihmbGVfcSwgTUFUQ0hfRkxFX1EsIE1BU0tfRkxFX1EpCitERUNMQVJFX0lOU04oZmx0X3EsIE1BVENIX0ZMVF9RLCBNQVNLX0ZMVF9RKQorREVDTEFSRV9JTlNOKGZlcV9xLCBNQVRDSF9GRVFfUSwgTUFTS19GRVFfUSkKK0RFQ0xBUkVfSU5TTihmY3Z0X3dfcywgTUFUQ0hfRkNWVF9XX1MsIE1BU0tfRkNWVF9XX1MpCitERUNMQVJFX0lOU04oZmN2dF93dV9zLCBNQVRDSF9GQ1ZUX1dVX1MsIE1BU0tfRkNWVF9XVV9TKQorREVDTEFSRV9JTlNOKGZjdnRfbF9zLCBNQVRDSF9GQ1ZUX0xfUywgTUFTS19GQ1ZUX0xfUykKK0RFQ0xBUkVfSU5TTihmY3Z0X2x1X3MsIE1BVENIX0ZDVlRfTFVfUywgTUFTS19GQ1ZUX0xVX1MpCitERUNMQVJFX0lOU04oZm12X3hfdywgTUFUQ0hfRk1WX1hfVywgTUFTS19GTVZfWF9XKQorREVDTEFSRV9JTlNOKGZjbGFzc19zLCBNQVRDSF9GQ0xBU1NfUywgTUFTS19GQ0xBU1NfUykKK0RFQ0xBUkVfSU5TTihmY3Z0X3dfZCwgTUFUQ0hfRkNWVF9XX0QsIE1BU0tfRkNWVF9XX0QpCitERUNMQVJFX0lOU04oZmN2dF93dV9kLCBNQVRDSF9GQ1ZUX1dVX0QsIE1BU0tfRkNWVF9XVV9EKQorREVDTEFSRV9JTlNOKGZjdnRfbF9kLCBNQVRDSF9GQ1ZUX0xfRCwgTUFTS19GQ1ZUX0xfRCkKK0RFQ0xBUkVfSU5TTihmY3Z0X2x1X2QsIE1BVENIX0ZDVlRfTFVfRCwgTUFTS19GQ1ZUX0xVX0QpCitERUNMQVJFX0lOU04oZm12X3hfZCwgTUFUQ0hfRk1WX1hfRCwgTUFTS19GTVZfWF9EKQorREVDTEFSRV9JTlNOKGZjbGFzc19kLCBNQVRDSF9GQ0xBU1NfRCwgTUFTS19GQ0xBU1NfRCkKK0RFQ0xBUkVfSU5TTihmY3Z0X3dfcSwgTUFUQ0hfRkNWVF9XX1EsIE1BU0tfRkNWVF9XX1EpCitERUNMQVJFX0lOU04oZmN2dF93dV9xLCBNQVRDSF9GQ1ZUX1dVX1EsIE1BU0tfRkNWVF9XVV9RKQorREVDTEFSRV9JTlNOKGZjdnRfbF9xLCBNQVRDSF9GQ1ZUX0xfUSwgTUFTS19GQ1ZUX0xfUSkKK0RFQ0xBUkVfSU5TTihmY3Z0X2x1X3EsIE1BVENIX0ZDVlRfTFVfUSwgTUFTS19GQ1ZUX0xVX1EpCitERUNMQVJFX0lOU04oZm12X3hfcSwgTUFUQ0hfRk1WX1hfUSwgTUFTS19GTVZfWF9RKQorREVDTEFSRV9JTlNOKGZjbGFzc19xLCBNQVRDSF9GQ0xBU1NfUSwgTUFTS19GQ0xBU1NfUSkKK0RFQ0xBUkVfSU5TTihmY3Z0X3NfdywgTUFUQ0hfRkNWVF9TX1csIE1BU0tfRkNWVF9TX1cpCitERUNMQVJFX0lOU04oZmN2dF9zX3d1LCBNQVRDSF9GQ1ZUX1NfV1UsIE1BU0tfRkNWVF9TX1dVKQorREVDTEFSRV9JTlNOKGZjdnRfc19sLCBNQVRDSF9GQ1ZUX1NfTCwgTUFTS19GQ1ZUX1NfTCkKK0RFQ0xBUkVfSU5TTihmY3Z0X3NfbHUsIE1BVENIX0ZDVlRfU19MVSwgTUFTS19GQ1ZUX1NfTFUpCitERUNMQVJFX0lOU04oZm12X3dfeCwgTUFUQ0hfRk1WX1dfWCwgTUFTS19GTVZfV19YKQorREVDTEFSRV9JTlNOKGZjdnRfZF93LCBNQVRDSF9GQ1ZUX0RfVywgTUFTS19GQ1ZUX0RfVykKK0RFQ0xBUkVfSU5TTihmY3Z0X2Rfd3UsIE1BVENIX0ZDVlRfRF9XVSwgTUFTS19GQ1ZUX0RfV1UpCitERUNMQVJFX0lOU04oZmN2dF9kX2wsIE1BVENIX0ZDVlRfRF9MLCBNQVNLX0ZDVlRfRF9MKQorREVDTEFSRV9JTlNOKGZjdnRfZF9sdSwgTUFUQ0hfRkNWVF9EX0xVLCBNQVNLX0ZDVlRfRF9MVSkKK0RFQ0xBUkVfSU5TTihmbXZfZF94LCBNQVRDSF9GTVZfRF9YLCBNQVNLX0ZNVl9EX1gpCitERUNMQVJFX0lOU04oZmN2dF9xX3csIE1BVENIX0ZDVlRfUV9XLCBNQVNLX0ZDVlRfUV9XKQorREVDTEFSRV9JTlNOKGZjdnRfcV93dSwgTUFUQ0hfRkNWVF9RX1dVLCBNQVNLX0ZDVlRfUV9XVSkKK0RFQ0xBUkVfSU5TTihmY3Z0X3FfbCwgTUFUQ0hfRkNWVF9RX0wsIE1BU0tfRkNWVF9RX0wpCitERUNMQVJFX0lOU04oZmN2dF9xX2x1LCBNQVRDSF9GQ1ZUX1FfTFUsIE1BU0tfRkNWVF9RX0xVKQorREVDTEFSRV9JTlNOKGZtdl9xX3gsIE1BVENIX0ZNVl9RX1gsIE1BU0tfRk1WX1FfWCkKK0RFQ0xBUkVfSU5TTihmbHcsIE1BVENIX0ZMVywgTUFTS19GTFcpCitERUNMQVJFX0lOU04oZmxkLCBNQVRDSF9GTEQsIE1BU0tfRkxEKQorREVDTEFSRV9JTlNOKGZscSwgTUFUQ0hfRkxRLCBNQVNLX0ZMUSkKK0RFQ0xBUkVfSU5TTihmc3csIE1BVENIX0ZTVywgTUFTS19GU1cpCitERUNMQVJFX0lOU04oZnNkLCBNQVRDSF9GU0QsIE1BU0tfRlNEKQorREVDTEFSRV9JTlNOKGZzcSwgTUFUQ0hfRlNRLCBNQVNLX0ZTUSkKK0RFQ0xBUkVfSU5TTihmbWFkZF9zLCBNQVRDSF9GTUFERF9TLCBNQVNLX0ZNQUREX1MpCitERUNMQVJFX0lOU04oZm1zdWJfcywgTUFUQ0hfRk1TVUJfUywgTUFTS19GTVNVQl9TKQorREVDTEFSRV9JTlNOKGZubXN1Yl9zLCBNQVRDSF9GTk1TVUJfUywgTUFTS19GTk1TVUJfUykKK0RFQ0xBUkVfSU5TTihmbm1hZGRfcywgTUFUQ0hfRk5NQUREX1MsIE1BU0tfRk5NQUREX1MpCitERUNMQVJFX0lOU04oZm1hZGRfZCwgTUFUQ0hfRk1BRERfRCwgTUFTS19GTUFERF9EKQorREVDTEFSRV9JTlNOKGZtc3ViX2QsIE1BVENIX0ZNU1VCX0QsIE1BU0tfRk1TVUJfRCkKK0RFQ0xBUkVfSU5TTihmbm1zdWJfZCwgTUFUQ0hfRk5NU1VCX0QsIE1BU0tfRk5NU1VCX0QpCitERUNMQVJFX0lOU04oZm5tYWRkX2QsIE1BVENIX0ZOTUFERF9ELCBNQVNLX0ZOTUFERF9EKQorREVDTEFSRV9JTlNOKGZtYWRkX3EsIE1BVENIX0ZNQUREX1EsIE1BU0tfRk1BRERfUSkKK0RFQ0xBUkVfSU5TTihmbXN1Yl9xLCBNQVRDSF9GTVNVQl9RLCBNQVNLX0ZNU1VCX1EpCitERUNMQVJFX0lOU04oZm5tc3ViX3EsIE1BVENIX0ZOTVNVQl9RLCBNQVNLX0ZOTVNVQl9RKQorREVDTEFSRV9JTlNOKGZubWFkZF9xLCBNQVRDSF9GTk1BRERfUSwgTUFTS19GTk1BRERfUSkKK0RFQ0xBUkVfSU5TTihjX25vcCwgTUFUQ0hfQ19OT1AsIE1BU0tfQ19OT1ApCitERUNMQVJFX0lOU04oY19hZGRpMTZzcCwgTUFUQ0hfQ19BRERJMTZTUCwgTUFTS19DX0FEREkxNlNQKQorREVDTEFSRV9JTlNOKGNfanIsIE1BVENIX0NfSlIsIE1BU0tfQ19KUikKK0RFQ0xBUkVfSU5TTihjX2phbHIsIE1BVENIX0NfSkFMUiwgTUFTS19DX0pBTFIpCitERUNMQVJFX0lOU04oY19lYnJlYWssIE1BVENIX0NfRUJSRUFLLCBNQVNLX0NfRUJSRUFLKQorREVDTEFSRV9JTlNOKGNfbGQsIE1BVENIX0NfTEQsIE1BU0tfQ19MRCkKK0RFQ0xBUkVfSU5TTihjX3NkLCBNQVRDSF9DX1NELCBNQVNLX0NfU0QpCitERUNMQVJFX0lOU04oY19hZGRpdywgTUFUQ0hfQ19BRERJVywgTUFTS19DX0FERElXKQorREVDTEFSRV9JTlNOKGNfbGRzcCwgTUFUQ0hfQ19MRFNQLCBNQVNLX0NfTERTUCkKK0RFQ0xBUkVfSU5TTihjX3Nkc3AsIE1BVENIX0NfU0RTUCwgTUFTS19DX1NEU1ApCitERUNMQVJFX0lOU04oY19hZGRpNHNwbiwgTUFUQ0hfQ19BRERJNFNQTiwgTUFTS19DX0FEREk0U1BOKQorREVDTEFSRV9JTlNOKGNfZmxkLCBNQVRDSF9DX0ZMRCwgTUFTS19DX0ZMRCkKK0RFQ0xBUkVfSU5TTihjX2x3LCBNQVRDSF9DX0xXLCBNQVNLX0NfTFcpCitERUNMQVJFX0lOU04oY19mbHcsIE1BVENIX0NfRkxXLCBNQVNLX0NfRkxXKQorREVDTEFSRV9JTlNOKGNfZnNkLCBNQVRDSF9DX0ZTRCwgTUFTS19DX0ZTRCkKK0RFQ0xBUkVfSU5TTihjX3N3LCBNQVRDSF9DX1NXLCBNQVNLX0NfU1cpCitERUNMQVJFX0lOU04oY19mc3csIE1BVENIX0NfRlNXLCBNQVNLX0NfRlNXKQorREVDTEFSRV9JTlNOKGNfYWRkaSwgTUFUQ0hfQ19BRERJLCBNQVNLX0NfQURESSkKK0RFQ0xBUkVfSU5TTihjX2phbCwgTUFUQ0hfQ19KQUwsIE1BU0tfQ19KQUwpCitERUNMQVJFX0lOU04oY19saSwgTUFUQ0hfQ19MSSwgTUFTS19DX0xJKQorREVDTEFSRV9JTlNOKGNfbHVpLCBNQVRDSF9DX0xVSSwgTUFTS19DX0xVSSkKK0RFQ0xBUkVfSU5TTihjX3NybGksIE1BVENIX0NfU1JMSSwgTUFTS19DX1NSTEkpCitERUNMQVJFX0lOU04oY19zcmFpLCBNQVRDSF9DX1NSQUksIE1BU0tfQ19TUkFJKQorREVDTEFSRV9JTlNOKGNfYW5kaSwgTUFUQ0hfQ19BTkRJLCBNQVNLX0NfQU5ESSkKK0RFQ0xBUkVfSU5TTihjX3N1YiwgTUFUQ0hfQ19TVUIsIE1BU0tfQ19TVUIpCitERUNMQVJFX0lOU04oY194b3IsIE1BVENIX0NfWE9SLCBNQVNLX0NfWE9SKQorREVDTEFSRV9JTlNOKGNfb3IsIE1BVENIX0NfT1IsIE1BU0tfQ19PUikKK0RFQ0xBUkVfSU5TTihjX2FuZCwgTUFUQ0hfQ19BTkQsIE1BU0tfQ19BTkQpCitERUNMQVJFX0lOU04oY19zdWJ3LCBNQVRDSF9DX1NVQlcsIE1BU0tfQ19TVUJXKQorREVDTEFSRV9JTlNOKGNfYWRkdywgTUFUQ0hfQ19BRERXLCBNQVNLX0NfQUREVykKK0RFQ0xBUkVfSU5TTihjX2osIE1BVENIX0NfSiwgTUFTS19DX0opCitERUNMQVJFX0lOU04oY19iZXF6LCBNQVRDSF9DX0JFUVosIE1BU0tfQ19CRVFaKQorREVDTEFSRV9JTlNOKGNfYm5leiwgTUFUQ0hfQ19CTkVaLCBNQVNLX0NfQk5FWikKK0RFQ0xBUkVfSU5TTihjX3NsbGksIE1BVENIX0NfU0xMSSwgTUFTS19DX1NMTEkpCitERUNMQVJFX0lOU04oY19mbGRzcCwgTUFUQ0hfQ19GTERTUCwgTUFTS19DX0ZMRFNQKQorREVDTEFSRV9JTlNOKGNfbHdzcCwgTUFUQ0hfQ19MV1NQLCBNQVNLX0NfTFdTUCkKK0RFQ0xBUkVfSU5TTihjX2Zsd3NwLCBNQVRDSF9DX0ZMV1NQLCBNQVNLX0NfRkxXU1ApCitERUNMQVJFX0lOU04oY19tdiwgTUFUQ0hfQ19NViwgTUFTS19DX01WKQorREVDTEFSRV9JTlNOKGNfYWRkLCBNQVRDSF9DX0FERCwgTUFTS19DX0FERCkKK0RFQ0xBUkVfSU5TTihjX2ZzZHNwLCBNQVRDSF9DX0ZTRFNQLCBNQVNLX0NfRlNEU1ApCitERUNMQVJFX0lOU04oY19zd3NwLCBNQVRDSF9DX1NXU1AsIE1BU0tfQ19TV1NQKQorREVDTEFSRV9JTlNOKGNfZnN3c3AsIE1BVENIX0NfRlNXU1AsIE1BU0tfQ19GU1dTUCkKK0RFQ0xBUkVfSU5TTihjdXN0b20wLCBNQVRDSF9DVVNUT00wLCBNQVNLX0NVU1RPTTApCitERUNMQVJFX0lOU04oY3VzdG9tMF9yczEsIE1BVENIX0NVU1RPTTBfUlMxLCBNQVNLX0NVU1RPTTBfUlMxKQorREVDTEFSRV9JTlNOKGN1c3RvbTBfcnMxX3JzMiwgTUFUQ0hfQ1VTVE9NMF9SUzFfUlMyLCBNQVNLX0NVU1RPTTBfUlMxX1JTMikKK0RFQ0xBUkVfSU5TTihjdXN0b20wX3JkLCBNQVRDSF9DVVNUT00wX1JELCBNQVNLX0NVU1RPTTBfUkQpCitERUNMQVJFX0lOU04oY3VzdG9tMF9yZF9yczEsIE1BVENIX0NVU1RPTTBfUkRfUlMxLCBNQVNLX0NVU1RPTTBfUkRfUlMxKQorREVDTEFSRV9JTlNOKGN1c3RvbTBfcmRfcnMxX3JzMiwgTUFUQ0hfQ1VTVE9NMF9SRF9SUzFfUlMyLCBNQVNLX0NVU1RPTTBfUkRfUlMxX1JTMikKK0RFQ0xBUkVfSU5TTihjdXN0b20xLCBNQVRDSF9DVVNUT00xLCBNQVNLX0NVU1RPTTEpCitERUNMQVJFX0lOU04oY3VzdG9tMV9yczEsIE1BVENIX0NVU1RPTTFfUlMxLCBNQVNLX0NVU1RPTTFfUlMxKQorREVDTEFSRV9JTlNOKGN1c3RvbTFfcnMxX3JzMiwgTUFUQ0hfQ1VTVE9NMV9SUzFfUlMyLCBNQVNLX0NVU1RPTTFfUlMxX1JTMikKK0RFQ0xBUkVfSU5TTihjdXN0b20xX3JkLCBNQVRDSF9DVVNUT00xX1JELCBNQVNLX0NVU1RPTTFfUkQpCitERUNMQVJFX0lOU04oY3VzdG9tMV9yZF9yczEsIE1BVENIX0NVU1RPTTFfUkRfUlMxLCBNQVNLX0NVU1RPTTFfUkRfUlMxKQorREVDTEFSRV9JTlNOKGN1c3RvbTFfcmRfcnMxX3JzMiwgTUFUQ0hfQ1VTVE9NMV9SRF9SUzFfUlMyLCBNQVNLX0NVU1RPTTFfUkRfUlMxX1JTMikKK0RFQ0xBUkVfSU5TTihjdXN0b20yLCBNQVRDSF9DVVNUT00yLCBNQVNLX0NVU1RPTTIpCitERUNMQVJFX0lOU04oY3VzdG9tMl9yczEsIE1BVENIX0NVU1RPTTJfUlMxLCBNQVNLX0NVU1RPTTJfUlMxKQorREVDTEFSRV9JTlNOKGN1c3RvbTJfcnMxX3JzMiwgTUFUQ0hfQ1VTVE9NMl9SUzFfUlMyLCBNQVNLX0NVU1RPTTJfUlMxX1JTMikKK0RFQ0xBUkVfSU5TTihjdXN0b20yX3JkLCBNQVRDSF9DVVNUT00yX1JELCBNQVNLX0NVU1RPTTJfUkQpCitERUNMQVJFX0lOU04oY3VzdG9tMl9yZF9yczEsIE1BVENIX0NVU1RPTTJfUkRfUlMxLCBNQVNLX0NVU1RPTTJfUkRfUlMxKQorREVDTEFSRV9JTlNOKGN1c3RvbTJfcmRfcnMxX3JzMiwgTUFUQ0hfQ1VTVE9NMl9SRF9SUzFfUlMyLCBNQVNLX0NVU1RPTTJfUkRfUlMxX1JTMikKK0RFQ0xBUkVfSU5TTihjdXN0b20zLCBNQVRDSF9DVVNUT00zLCBNQVNLX0NVU1RPTTMpCitERUNMQVJFX0lOU04oY3VzdG9tM19yczEsIE1BVENIX0NVU1RPTTNfUlMxLCBNQVNLX0NVU1RPTTNfUlMxKQorREVDTEFSRV9JTlNOKGN1c3RvbTNfcnMxX3JzMiwgTUFUQ0hfQ1VTVE9NM19SUzFfUlMyLCBNQVNLX0NVU1RPTTNfUlMxX1JTMikKK0RFQ0xBUkVfSU5TTihjdXN0b20zX3JkLCBNQVRDSF9DVVNUT00zX1JELCBNQVNLX0NVU1RPTTNfUkQpCitERUNMQVJFX0lOU04oY3VzdG9tM19yZF9yczEsIE1BVENIX0NVU1RPTTNfUkRfUlMxLCBNQVNLX0NVU1RPTTNfUkRfUlMxKQorREVDTEFSRV9JTlNOKGN1c3RvbTNfcmRfcnMxX3JzMiwgTUFUQ0hfQ1VTVE9NM19SRF9SUzFfUlMyLCBNQVNLX0NVU1RPTTNfUkRfUlMxX1JTMikKKyNlbmRpZgorI2lmZGVmIERFQ0xBUkVfQ1NSCitERUNMQVJFX0NTUihmZmxhZ3MsIENTUl9GRkxBR1MpCitERUNMQVJFX0NTUihmcm0sIENTUl9GUk0pCitERUNMQVJFX0NTUihmY3NyLCBDU1JfRkNTUikKK0RFQ0xBUkVfQ1NSKGN5Y2xlLCBDU1JfQ1lDTEUpCitERUNMQVJFX0NTUih0aW1lLCBDU1JfVElNRSkKK0RFQ0xBUkVfQ1NSKGluc3RyZXQsIENTUl9JTlNUUkVUKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjMsIENTUl9IUE1DT1VOVEVSMykKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXI0LCBDU1JfSFBNQ09VTlRFUjQpCitERUNMQVJFX0NTUihocG1jb3VudGVyNSwgQ1NSX0hQTUNPVU5URVI1KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjYsIENTUl9IUE1DT1VOVEVSNikKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXI3LCBDU1JfSFBNQ09VTlRFUjcpCitERUNMQVJFX0NTUihocG1jb3VudGVyOCwgQ1NSX0hQTUNPVU5URVI4KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjksIENTUl9IUE1DT1VOVEVSOSkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxMCwgQ1NSX0hQTUNPVU5URVIxMCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxMSwgQ1NSX0hQTUNPVU5URVIxMSkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxMiwgQ1NSX0hQTUNPVU5URVIxMikKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxMywgQ1NSX0hQTUNPVU5URVIxMykKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxNCwgQ1NSX0hQTUNPVU5URVIxNCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxNSwgQ1NSX0hQTUNPVU5URVIxNSkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxNiwgQ1NSX0hQTUNPVU5URVIxNikKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxNywgQ1NSX0hQTUNPVU5URVIxNykKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxOCwgQ1NSX0hQTUNPVU5URVIxOCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxOSwgQ1NSX0hQTUNPVU5URVIxOSkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIyMCwgQ1NSX0hQTUNPVU5URVIyMCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIyMSwgQ1NSX0hQTUNPVU5URVIyMSkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIyMiwgQ1NSX0hQTUNPVU5URVIyMikKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIyMywgQ1NSX0hQTUNPVU5URVIyMykKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIyNCwgQ1NSX0hQTUNPVU5URVIyNCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIyNSwgQ1NSX0hQTUNPVU5URVIyNSkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIyNiwgQ1NSX0hQTUNPVU5URVIyNikKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIyNywgQ1NSX0hQTUNPVU5URVIyNykKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIyOCwgQ1NSX0hQTUNPVU5URVIyOCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIyOSwgQ1NSX0hQTUNPVU5URVIyOSkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIzMCwgQ1NSX0hQTUNPVU5URVIzMCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIzMSwgQ1NSX0hQTUNPVU5URVIzMSkKK0RFQ0xBUkVfQ1NSKHNzdGF0dXMsIENTUl9TU1RBVFVTKQorREVDTEFSRV9DU1Ioc2llLCBDU1JfU0lFKQorREVDTEFSRV9DU1Ioc3R2ZWMsIENTUl9TVFZFQykKK0RFQ0xBUkVfQ1NSKHNjb3VudGVyZW4sIENTUl9TQ09VTlRFUkVOKQorREVDTEFSRV9DU1Ioc3NjcmF0Y2gsIENTUl9TU0NSQVRDSCkKK0RFQ0xBUkVfQ1NSKHNlcGMsIENTUl9TRVBDKQorREVDTEFSRV9DU1Ioc2NhdXNlLCBDU1JfU0NBVVNFKQorREVDTEFSRV9DU1Ioc2JhZGFkZHIsIENTUl9TQkFEQUREUikKK0RFQ0xBUkVfQ1NSKHNpcCwgQ1NSX1NJUCkKK0RFQ0xBUkVfQ1NSKHNwdGJyLCBDU1JfU1BUQlIpCitERUNMQVJFX0NTUihtc3RhdHVzLCBDU1JfTVNUQVRVUykKK0RFQ0xBUkVfQ1NSKG1pc2EsIENTUl9NSVNBKQorREVDTEFSRV9DU1IobWVkZWxlZywgQ1NSX01FREVMRUcpCitERUNMQVJFX0NTUihtaWRlbGVnLCBDU1JfTUlERUxFRykKK0RFQ0xBUkVfQ1NSKG1pZSwgQ1NSX01JRSkKK0RFQ0xBUkVfQ1NSKG10dmVjLCBDU1JfTVRWRUMpCitERUNMQVJFX0NTUihtY291bnRlcmVuLCBDU1JfTUNPVU5URVJFTikKK0RFQ0xBUkVfQ1NSKG1zY3JhdGNoLCBDU1JfTVNDUkFUQ0gpCitERUNMQVJFX0NTUihtZXBjLCBDU1JfTUVQQykKK0RFQ0xBUkVfQ1NSKG1jYXVzZSwgQ1NSX01DQVVTRSkKK0RFQ0xBUkVfQ1NSKG1iYWRhZGRyLCBDU1JfTUJBREFERFIpCitERUNMQVJFX0NTUihtaXAsIENTUl9NSVApCitERUNMQVJFX0NTUihwbXBjZmcwLCBDU1JfUE1QQ0ZHMCkKK0RFQ0xBUkVfQ1NSKHBtcGNmZzEsIENTUl9QTVBDRkcxKQorREVDTEFSRV9DU1IocG1wY2ZnMiwgQ1NSX1BNUENGRzIpCitERUNMQVJFX0NTUihwbXBjZmczLCBDU1JfUE1QQ0ZHMykKK0RFQ0xBUkVfQ1NSKHBtcGFkZHIwLCBDU1JfUE1QQUREUjApCitERUNMQVJFX0NTUihwbXBhZGRyMSwgQ1NSX1BNUEFERFIxKQorREVDTEFSRV9DU1IocG1wYWRkcjIsIENTUl9QTVBBRERSMikKK0RFQ0xBUkVfQ1NSKHBtcGFkZHIzLCBDU1JfUE1QQUREUjMpCitERUNMQVJFX0NTUihwbXBhZGRyNCwgQ1NSX1BNUEFERFI0KQorREVDTEFSRV9DU1IocG1wYWRkcjUsIENTUl9QTVBBRERSNSkKK0RFQ0xBUkVfQ1NSKHBtcGFkZHI2LCBDU1JfUE1QQUREUjYpCitERUNMQVJFX0NTUihwbXBhZGRyNywgQ1NSX1BNUEFERFI3KQorREVDTEFSRV9DU1IocG1wYWRkcjgsIENTUl9QTVBBRERSOCkKK0RFQ0xBUkVfQ1NSKHBtcGFkZHI5LCBDU1JfUE1QQUREUjkpCitERUNMQVJFX0NTUihwbXBhZGRyMTAsIENTUl9QTVBBRERSMTApCitERUNMQVJFX0NTUihwbXBhZGRyMTEsIENTUl9QTVBBRERSMTEpCitERUNMQVJFX0NTUihwbXBhZGRyMTIsIENTUl9QTVBBRERSMTIpCitERUNMQVJFX0NTUihwbXBhZGRyMTMsIENTUl9QTVBBRERSMTMpCitERUNMQVJFX0NTUihwbXBhZGRyMTQsIENTUl9QTVBBRERSMTQpCitERUNMQVJFX0NTUihwbXBhZGRyMTUsIENTUl9QTVBBRERSMTUpCitERUNMQVJFX0NTUih0c2VsZWN0LCBDU1JfVFNFTEVDVCkKK0RFQ0xBUkVfQ1NSKHRkYXRhMSwgQ1NSX1REQVRBMSkKK0RFQ0xBUkVfQ1NSKHRkYXRhMiwgQ1NSX1REQVRBMikKK0RFQ0xBUkVfQ1NSKHRkYXRhMywgQ1NSX1REQVRBMykKK0RFQ0xBUkVfQ1NSKGRjc3IsIENTUl9EQ1NSKQorREVDTEFSRV9DU1IoZHBjLCBDU1JfRFBDKQorREVDTEFSRV9DU1IoZHNjcmF0Y2gsIENTUl9EU0NSQVRDSCkKK0RFQ0xBUkVfQ1NSKG1jeWNsZSwgQ1NSX01DWUNMRSkKK0RFQ0xBUkVfQ1NSKG1pbnN0cmV0LCBDU1JfTUlOU1RSRVQpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjMsIENTUl9NSFBNQ09VTlRFUjMpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjQsIENTUl9NSFBNQ09VTlRFUjQpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjUsIENTUl9NSFBNQ09VTlRFUjUpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjYsIENTUl9NSFBNQ09VTlRFUjYpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjcsIENTUl9NSFBNQ09VTlRFUjcpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjgsIENTUl9NSFBNQ09VTlRFUjgpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjksIENTUl9NSFBNQ09VTlRFUjkpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjEwLCBDU1JfTUhQTUNPVU5URVIxMCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMTEsIENTUl9NSFBNQ09VTlRFUjExKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIxMiwgQ1NSX01IUE1DT1VOVEVSMTIpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjEzLCBDU1JfTUhQTUNPVU5URVIxMykKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMTQsIENTUl9NSFBNQ09VTlRFUjE0KQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIxNSwgQ1NSX01IUE1DT1VOVEVSMTUpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjE2LCBDU1JfTUhQTUNPVU5URVIxNikKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMTcsIENTUl9NSFBNQ09VTlRFUjE3KQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIxOCwgQ1NSX01IUE1DT1VOVEVSMTgpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjE5LCBDU1JfTUhQTUNPVU5URVIxOSkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMjAsIENTUl9NSFBNQ09VTlRFUjIwKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIyMSwgQ1NSX01IUE1DT1VOVEVSMjEpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjIyLCBDU1JfTUhQTUNPVU5URVIyMikKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMjMsIENTUl9NSFBNQ09VTlRFUjIzKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIyNCwgQ1NSX01IUE1DT1VOVEVSMjQpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjI1LCBDU1JfTUhQTUNPVU5URVIyNSkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMjYsIENTUl9NSFBNQ09VTlRFUjI2KQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIyNywgQ1NSX01IUE1DT1VOVEVSMjcpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjI4LCBDU1JfTUhQTUNPVU5URVIyOCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMjksIENTUl9NSFBNQ09VTlRFUjI5KQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIzMCwgQ1NSX01IUE1DT1VOVEVSMzApCitERUNMQVJFX0NTUihtaHBtY291bnRlcjMxLCBDU1JfTUhQTUNPVU5URVIzMSkKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDMsIENTUl9NSFBNRVZFTlQzKQorREVDTEFSRV9DU1IobWhwbWV2ZW50NCwgQ1NSX01IUE1FVkVOVDQpCitERUNMQVJFX0NTUihtaHBtZXZlbnQ1LCBDU1JfTUhQTUVWRU5UNSkKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDYsIENTUl9NSFBNRVZFTlQ2KQorREVDTEFSRV9DU1IobWhwbWV2ZW50NywgQ1NSX01IUE1FVkVOVDcpCitERUNMQVJFX0NTUihtaHBtZXZlbnQ4LCBDU1JfTUhQTUVWRU5UOCkKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDksIENTUl9NSFBNRVZFTlQ5KQorREVDTEFSRV9DU1IobWhwbWV2ZW50MTAsIENTUl9NSFBNRVZFTlQxMCkKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDExLCBDU1JfTUhQTUVWRU5UMTEpCitERUNMQVJFX0NTUihtaHBtZXZlbnQxMiwgQ1NSX01IUE1FVkVOVDEyKQorREVDTEFSRV9DU1IobWhwbWV2ZW50MTMsIENTUl9NSFBNRVZFTlQxMykKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDE0LCBDU1JfTUhQTUVWRU5UMTQpCitERUNMQVJFX0NTUihtaHBtZXZlbnQxNSwgQ1NSX01IUE1FVkVOVDE1KQorREVDTEFSRV9DU1IobWhwbWV2ZW50MTYsIENTUl9NSFBNRVZFTlQxNikKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDE3LCBDU1JfTUhQTUVWRU5UMTcpCitERUNMQVJFX0NTUihtaHBtZXZlbnQxOCwgQ1NSX01IUE1FVkVOVDE4KQorREVDTEFSRV9DU1IobWhwbWV2ZW50MTksIENTUl9NSFBNRVZFTlQxOSkKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDIwLCBDU1JfTUhQTUVWRU5UMjApCitERUNMQVJFX0NTUihtaHBtZXZlbnQyMSwgQ1NSX01IUE1FVkVOVDIxKQorREVDTEFSRV9DU1IobWhwbWV2ZW50MjIsIENTUl9NSFBNRVZFTlQyMikKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDIzLCBDU1JfTUhQTUVWRU5UMjMpCitERUNMQVJFX0NTUihtaHBtZXZlbnQyNCwgQ1NSX01IUE1FVkVOVDI0KQorREVDTEFSRV9DU1IobWhwbWV2ZW50MjUsIENTUl9NSFBNRVZFTlQyNSkKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDI2LCBDU1JfTUhQTUVWRU5UMjYpCitERUNMQVJFX0NTUihtaHBtZXZlbnQyNywgQ1NSX01IUE1FVkVOVDI3KQorREVDTEFSRV9DU1IobWhwbWV2ZW50MjgsIENTUl9NSFBNRVZFTlQyOCkKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDI5LCBDU1JfTUhQTUVWRU5UMjkpCitERUNMQVJFX0NTUihtaHBtZXZlbnQzMCwgQ1NSX01IUE1FVkVOVDMwKQorREVDTEFSRV9DU1IobWhwbWV2ZW50MzEsIENTUl9NSFBNRVZFTlQzMSkKK0RFQ0xBUkVfQ1NSKG12ZW5kb3JpZCwgQ1NSX01WRU5ET1JJRCkKK0RFQ0xBUkVfQ1NSKG1hcmNoaWQsIENTUl9NQVJDSElEKQorREVDTEFSRV9DU1IobWltcGlkLCBDU1JfTUlNUElEKQorREVDTEFSRV9DU1IobWhhcnRpZCwgQ1NSX01IQVJUSUQpCitERUNMQVJFX0NTUihjeWNsZWgsIENTUl9DWUNMRUgpCitERUNMQVJFX0NTUih0aW1laCwgQ1NSX1RJTUVIKQorREVDTEFSRV9DU1IoaW5zdHJldGgsIENTUl9JTlNUUkVUSCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIzaCwgQ1NSX0hQTUNPVU5URVIzSCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXI0aCwgQ1NSX0hQTUNPVU5URVI0SCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXI1aCwgQ1NSX0hQTUNPVU5URVI1SCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXI2aCwgQ1NSX0hQTUNPVU5URVI2SCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXI3aCwgQ1NSX0hQTUNPVU5URVI3SCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXI4aCwgQ1NSX0hQTUNPVU5URVI4SCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXI5aCwgQ1NSX0hQTUNPVU5URVI5SCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxMGgsIENTUl9IUE1DT1VOVEVSMTBIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjExaCwgQ1NSX0hQTUNPVU5URVIxMUgpCitERUNMQVJFX0NTUihocG1jb3VudGVyMTJoLCBDU1JfSFBNQ09VTlRFUjEySCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxM2gsIENTUl9IUE1DT1VOVEVSMTNIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjE0aCwgQ1NSX0hQTUNPVU5URVIxNEgpCitERUNMQVJFX0NTUihocG1jb3VudGVyMTVoLCBDU1JfSFBNQ09VTlRFUjE1SCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxNmgsIENTUl9IUE1DT1VOVEVSMTZIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjE3aCwgQ1NSX0hQTUNPVU5URVIxN0gpCitERUNMQVJFX0NTUihocG1jb3VudGVyMThoLCBDU1JfSFBNQ09VTlRFUjE4SCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxOWgsIENTUl9IUE1DT1VOVEVSMTlIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjIwaCwgQ1NSX0hQTUNPVU5URVIyMEgpCitERUNMQVJFX0NTUihocG1jb3VudGVyMjFoLCBDU1JfSFBNQ09VTlRFUjIxSCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIyMmgsIENTUl9IUE1DT1VOVEVSMjJIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjIzaCwgQ1NSX0hQTUNPVU5URVIyM0gpCitERUNMQVJFX0NTUihocG1jb3VudGVyMjRoLCBDU1JfSFBNQ09VTlRFUjI0SCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIyNWgsIENTUl9IUE1DT1VOVEVSMjVIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjI2aCwgQ1NSX0hQTUNPVU5URVIyNkgpCitERUNMQVJFX0NTUihocG1jb3VudGVyMjdoLCBDU1JfSFBNQ09VTlRFUjI3SCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIyOGgsIENTUl9IUE1DT1VOVEVSMjhIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjI5aCwgQ1NSX0hQTUNPVU5URVIyOUgpCitERUNMQVJFX0NTUihocG1jb3VudGVyMzBoLCBDU1JfSFBNQ09VTlRFUjMwSCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIzMWgsIENTUl9IUE1DT1VOVEVSMzFIKQorREVDTEFSRV9DU1IobWN5Y2xlaCwgQ1NSX01DWUNMRUgpCitERUNMQVJFX0NTUihtaW5zdHJldGgsIENTUl9NSU5TVFJFVEgpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjNoLCBDU1JfTUhQTUNPVU5URVIzSCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyNGgsIENTUl9NSFBNQ09VTlRFUjRIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXI1aCwgQ1NSX01IUE1DT1VOVEVSNUgpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjZoLCBDU1JfTUhQTUNPVU5URVI2SCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyN2gsIENTUl9NSFBNQ09VTlRFUjdIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXI4aCwgQ1NSX01IUE1DT1VOVEVSOEgpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjloLCBDU1JfTUhQTUNPVU5URVI5SCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMTBoLCBDU1JfTUhQTUNPVU5URVIxMEgpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjExaCwgQ1NSX01IUE1DT1VOVEVSMTFIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIxMmgsIENTUl9NSFBNQ09VTlRFUjEySCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMTNoLCBDU1JfTUhQTUNPVU5URVIxM0gpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjE0aCwgQ1NSX01IUE1DT1VOVEVSMTRIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIxNWgsIENTUl9NSFBNQ09VTlRFUjE1SCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMTZoLCBDU1JfTUhQTUNPVU5URVIxNkgpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjE3aCwgQ1NSX01IUE1DT1VOVEVSMTdIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIxOGgsIENTUl9NSFBNQ09VTlRFUjE4SCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMTloLCBDU1JfTUhQTUNPVU5URVIxOUgpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjIwaCwgQ1NSX01IUE1DT1VOVEVSMjBIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIyMWgsIENTUl9NSFBNQ09VTlRFUjIxSCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMjJoLCBDU1JfTUhQTUNPVU5URVIyMkgpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjIzaCwgQ1NSX01IUE1DT1VOVEVSMjNIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIyNGgsIENTUl9NSFBNQ09VTlRFUjI0SCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMjVoLCBDU1JfTUhQTUNPVU5URVIyNUgpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjI2aCwgQ1NSX01IUE1DT1VOVEVSMjZIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIyN2gsIENTUl9NSFBNQ09VTlRFUjI3SCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMjhoLCBDU1JfTUhQTUNPVU5URVIyOEgpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjI5aCwgQ1NSX01IUE1DT1VOVEVSMjlIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIzMGgsIENTUl9NSFBNQ09VTlRFUjMwSCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMzFoLCBDU1JfTUhQTUNPVU5URVIzMUgpCisjZW5kaWYKKyNpZmRlZiBERUNMQVJFX0NBVVNFCitERUNMQVJFX0NBVVNFKCJtaXNhbGlnbmVkIGZldGNoIiwgQ0FVU0VfTUlTQUxJR05FRF9GRVRDSCkKK0RFQ0xBUkVfQ0FVU0UoImZldGNoIGFjY2VzcyIsIENBVVNFX0ZFVENIX0FDQ0VTUykKK0RFQ0xBUkVfQ0FVU0UoImlsbGVnYWwgaW5zdHJ1Y3Rpb24iLCBDQVVTRV9JTExFR0FMX0lOU1RSVUNUSU9OKQorREVDTEFSRV9DQVVTRSgiYnJlYWtwb2ludCIsIENBVVNFX0JSRUFLUE9JTlQpCitERUNMQVJFX0NBVVNFKCJtaXNhbGlnbmVkIGxvYWQiLCBDQVVTRV9NSVNBTElHTkVEX0xPQUQpCitERUNMQVJFX0NBVVNFKCJsb2FkIGFjY2VzcyIsIENBVVNFX0xPQURfQUNDRVNTKQorREVDTEFSRV9DQVVTRSgibWlzYWxpZ25lZCBzdG9yZSIsIENBVVNFX01JU0FMSUdORURfU1RPUkUpCitERUNMQVJFX0NBVVNFKCJzdG9yZSBhY2Nlc3MiLCBDQVVTRV9TVE9SRV9BQ0NFU1MpCitERUNMQVJFX0NBVVNFKCJ1c2VyX2VjYWxsIiwgQ0FVU0VfVVNFUl9FQ0FMTCkKK0RFQ0xBUkVfQ0FVU0UoInN1cGVydmlzb3JfZWNhbGwiLCBDQVVTRV9TVVBFUlZJU09SX0VDQUxMKQorREVDTEFSRV9DQVVTRSgiaHlwZXJ2aXNvcl9lY2FsbCIsIENBVVNFX0hZUEVSVklTT1JfRUNBTEwpCitERUNMQVJFX0NBVVNFKCJtYWNoaW5lX2VjYWxsIiwgQ0FVU0VfTUFDSElORV9FQ0FMTCkKK0RFQ0xBUkVfQ0FVU0UoImZldGNoIHBhZ2UgZmF1bHQiLCBDQVVTRV9GRVRDSF9QQUdFX0ZBVUxUKQorREVDTEFSRV9DQVVTRSgibG9hZCBwYWdlIGZhdWx0IiwgQ0FVU0VfTE9BRF9QQUdFX0ZBVUxUKQorREVDTEFSRV9DQVVTRSgic3RvcmUgcGFnZSBmYXVsdCIsIENBVVNFX1NUT1JFX1BBR0VfRkFVTFQpCisjZW5kaWYKKworI2luY2x1ZGUgInljcjFfc3BlY2lmaWMuaCIKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvZmlybXdhcmUvcmlzY3ZfbWFjcm9zLmggYi92ZXJpbG9nL2R2L2Zpcm13YXJlL3Jpc2N2X21hY3Jvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZmM4Y2IKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2Zpcm13YXJlL3Jpc2N2X21hY3Jvcy5oCkBAIC0wLDAgKzEsODM1IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgICAgICAgIC8vLy8KKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gICAgICAgLy8vLworLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlICAgIC8vLy8KKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsICAgICAgLy8vLworLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuLy8vCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kICAgIC8vLy8KKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4gICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjaWZuZGVmIF9fUklTQ1ZfTUFDUk9TX0gKKyNkZWZpbmUgX19SSVNDVl9NQUNST1NfSAorCisjaW5jbHVkZSAicmlzY3ZfY3NyX2VuY29kaW5nLmgiCisjaW5jbHVkZSAic2NfdGVzdC5oIgorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBCZWdpbiBNYWNybworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjZGVmaW5lIFJWVEVTVF9SVjY0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIC5tYWNybyBpbml0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIC5lbmRtCisKKyNkZWZpbmUgUlZURVNUX1JWNjRVRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgLm1hY3JvIGluaXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgUlZURVNUX0ZQX0VOQUJMRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgLmVuZG0KKworI2RlZmluZSBSVlRFU1RfUlYzMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAubWFjcm8gaW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAuZW5kbQorCisjZGVmaW5lIFJWVEVTVF9SVjMyVUYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIC5tYWNybyBpbml0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIFJWVEVTVF9GUF9FTkFCTEU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIC5lbmRtCisKKyNkZWZpbmUgUlZURVNUX1JWNjRNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgLm1hY3JvIGluaXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgUlZURVNUX0VOQUJMRV9NQUNISU5FOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgLmVuZG0KKworI2RlZmluZSBSVlRFU1RfUlY2NFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAubWFjcm8gaW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBSVlRFU1RfRU5BQkxFX1NVUEVSVklTT1I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAuZW5kbQorCisjZGVmaW5lIFJWVEVTVF9SVjMyTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIC5tYWNybyBpbml0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIFJWVEVTVF9FTkFCTEVfTUFDSElORTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIC5lbmRtCisKKyNkZWZpbmUgUlZURVNUX1JWMzJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgLm1hY3JvIGluaXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgUlZURVNUX0VOQUJMRV9TVVBFUlZJU09SOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgLmVuZG0KKworI2lmIF9fcmlzY3ZfeGxlbiA9PSA2NAorIyBkZWZpbmUgQ0hFQ0tfWExFTiBsaSBhMCwgMTsgc2xsaSBhMCwgYTAsIDMxOyBiZ2V6IGEwLCAxZjsgUlZURVNUX1BBU1M7IDE6CisjZWxzZQorIyBkZWZpbmUgQ0hFQ0tfWExFTiBsaSBhMCwgMTsgc2xsaSBhMCwgYTAsIDMxOyBibHR6IGEwLCAxZjsgUlZURVNUX1BBU1M7IDE6CisjZW5kaWYKKworI2RlZmluZSBJTklUX1BNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBsYSB0MCwgMWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBjc3J3IG10dmVjLCB0MDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBsaSB0MCwgLTE7ICAgICAgICAvKiBTZXQgdXAgYSBQTVAgdG8gcGVybWl0IGFsbCBhY2Nlc3NlcyAqLyAgICAgICAgICAgXAorICBjc3J3IHBtcGFkZHIwLCB0MDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBsaSB0MCwgUE1QX05BUE9UIHwgUE1QX1IgfCBQTVBfVyB8IFBNUF9YOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBjc3J3IHBtcGNmZzAsIHQwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAuYmFsaWduIDQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKzE6CisKKyNkZWZpbmUgSU5JVF9TUFRCUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgbGEgdDAsIDFmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgY3NydyBtdHZlYywgdDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgY3Nyd2kgc3B0YnIsIDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgLmJhbGlnbiA0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisxOgorCisjZGVmaW5lIERFTEVHQVRFX05PX1RSQVBTCisKKyNkZWZpbmUgUlZURVNUX0VOQUJMRV9TVVBFUlZJU09SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgbGkgYTAsIE1TVEFUVVNfTVBQICYgKE1TVEFUVVNfTVBQID4+IDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgY3NycyBtc3RhdHVzLCBhMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgbGkgYTAsIFNJUF9TU0lQIHwgU0lQX1NUSVA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgY3NycyBtaWRlbGVnLCBhMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKworI2RlZmluZSBSVlRFU1RfRU5BQkxFX01BQ0hJTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBsaSBhMCwgTVNUQVRVU19NUFA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBjc3JzIG1zdGF0dXMsIGEwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCisjZGVmaW5lIFJWVEVTVF9GUF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGxpIGEwLCBNU1RBVFVTX0ZTICYgKE1TVEFUVVNfRlMgPj4gMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGNzcnMgbXN0YXR1cywgYTA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGNzcndpIGZjc3IsIDAKKworI2RlZmluZSBSSVNDVl9NVUxUSUNPUkVfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBjc3JyIGEwLCBtaGFydGlkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAxOiBibmV6IGEwLCAxYgorCisjZGVmaW5lIEVYVFJBX1RWRUNfVVNFUgorI2RlZmluZSBFWFRSQV9UVkVDX1NVUEVSVklTT1IKKyNkZWZpbmUgRVhUUkFfVFZFQ19IWVBFUlZJU09SCisjZGVmaW5lIEVYVFJBX1RWRUNfTUFDSElORQorI2RlZmluZSBFWFRSQV9JTklUCisjZGVmaW5lIEVYVFJBX0lOSVRfVElNRVIKKworI2RlZmluZSBJTlRFUlJVUFRfSEFORExFUiBqIG90aGVyX2V4Y2VwdGlvbiAvKiBObyBpbnRlcnJ1cHRzIHNob3VsZCBvY2N1ciAqLworCisjZGVmaW5lIFJWVEVTVF9DT0RFX0JFR0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC5zZWN0aW9uIC50ZXh0LmluaXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC5vcmcgMHhDMCwgMHgwMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC5iYWxpZ24gIDY0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC53ZWFrIHN0dmVjX2hhbmRsZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC53ZWFrIG10dmVjX2hhbmRsZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit0cmFwX3ZlY3RvcjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC8qIHRlc3Qgd2hldGhlciB0aGUgdGVzdCBjYW1lIGZyb20gcGFzcy9mYWlsICovICAgICAgICAgICAgICAgICBcCisgICAgICAgIGNzcnIgYTQsIG1jYXVzZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGxpIGE1LCBDQVVTRV9VU0VSX0VDQUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGJlcSBhNCwgYTUsIF9yZXBvcnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGxpIGE1LCBDQVVTRV9TVVBFUlZJU09SX0VDQUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGJlcSBhNCwgYTUsIF9yZXBvcnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGxpIGE1LCBDQVVTRV9NQUNISU5FX0VDQUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGJlcSBhNCwgYTUsIF9yZXBvcnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC8qIGlmIGFuIG10dmVjX2hhbmRsZXIgaXMgZGVmaW5lZCwganVtcCB0byBpdCAqLyAgICAgICAgICAgICAgICBcCisgICAgICAgIGxhIGE0LCBtdHZlY19oYW5kbGVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGJlcXogYTQsIDFmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGpyIGE0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC8qIHdhcyBpdCBhbiBpbnRlcnJ1cHQgb3IgYW4gZXhjZXB0aW9uPyAqLyAgICAgICAgICAgICAgICAgICAgICBcCisxOiAgICAgIGNzcnIgYTQsIG1jYXVzZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGJnZXogYTQsIGhhbmRsZV9leGNlcHRpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIElOVEVSUlVQVF9IQU5ETEVSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitoYW5kbGVfZXhjZXB0aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC8qIHdlIGRvbid0IGtub3cgaG93IHRvIGhhbmRsZSB3aGF0ZXZlciB0aGUgZXhjZXB0aW9uIHdhcyAqLyAgICBcCitvdGhlcl9leGNlcHRpb246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC8qIHNvbWUgdW5oYW5kbGFibGUgZXhjZXB0aW9uIG9jY3VycmVkICovICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGxpICAgYTAsIDB4MTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitfcmVwb3J0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGogc2NfZXhpdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC5iYWxpZ24gIDY0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC5nbG9ibCBfc3RhcnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitfc3RhcnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFJJU0NWX01VTFRJQ09SRV9ESVNBQkxFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC8qSU5JVF9TUFRCUjsqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC8qSU5JVF9QTVA7Ki8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIERFTEVHQVRFX05PX1RSQVBTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGxpIFRFU1ROVU0sIDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGxhIHQwLCB0cmFwX3ZlY3RvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGNzcncgbXR2ZWMsIHQwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIENIRUNLX1hMRU47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC8qIGlmIGFuIHN0dmVjX2hhbmRsZXIgaXMgZGVmaW5lZCwgZGVsZWdhdGUgZXhjZXB0aW9ucyB0byBpdCAqLyBcCisgICAgICAgIGxhIHQwLCBzdHZlY19oYW5kbGVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGJlcXogdDAsIDFmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGNzcncgc3R2ZWMsIHQwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGxpIHQwLCAoMSA8PCBDQVVTRV9MT0FEX1BBR0VfRkFVTFQpIHwgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAoMSA8PCBDQVVTRV9TVE9SRV9QQUdFX0ZBVUxUKSB8ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAoMSA8PCBDQVVTRV9GRVRDSF9QQUdFX0ZBVUxUKSB8ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAoMSA8PCBDQVVTRV9NSVNBTElHTkVEX0ZFVENIKSB8ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAoMSA8PCBDQVVTRV9VU0VSX0VDQUxMKSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAoMSA8PCBDQVVTRV9CUkVBS1BPSU5UKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGNzcncgbWVkZWxlZywgdDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGNzcnIgdDEsIG1lZGVsZWc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGJuZSB0MCwgdDEsIG90aGVyX2V4Y2VwdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisxOiAgICAgIGNzcndpIG1zdGF0dXMsIDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGluaXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIEVYVFJBX0lOSVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIEVYVFJBX0lOSVRfVElNRVI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGxhIHQwLCBfcnVuX3Rlc3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGNzcncgbWVwYywgdDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGNzcnIgYTAsIG1oYXJ0aWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG1yZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC5zZWN0aW9uIC50ZXh0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitfcnVuX3Rlc3Q6CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEVuZCBNYWNybworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjZGVmaW5lIFJWVEVTVF9DT0RFX0VORCBlY2FsbDogZWNhbGwKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUGFzcy9GYWlsIE1hY3JvCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgUlZURVNUX1BBU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZmVuY2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbXYgYTEsIFRFU1ROVU07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbGkgIGEwLCAweDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZWNhbGwKKworI2RlZmluZSBURVNUTlVNIHgyOAorI2RlZmluZSBSVlRFU1RfRkFJTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBmZW5jZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBtdiBhMSwgVEVTVE5VTTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBsaSAgYTAsIDB4MTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBlY2FsbAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBEYXRhIFNlY3Rpb24gTWFjcm8KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBFWFRSQV9EQVRBCisKKyNkZWZpbmUgUlZURVNUX0RBVEFfQkVHSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBFWFRSQV9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC5wdXNoc2VjdGlvbiAudG9ob3N0LCJhdyIsQHByb2diaXRzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLmJhbGlnbiA2NDsgLmdsb2JhbCB0b2hvc3Q7IHRvaG9zdDogLmR3b3JkIDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAuYmFsaWduIDY0OyAuZ2xvYmFsIGZyb21ob3N0OyBmcm9taG9zdDogLmR3b3JkIDA7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC5wb3BzZWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLmJhbGlnbiAxNjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAuZ2xvYmFsIGJlZ2luX3JlZ3N0YXRlOyAgYmVnaW5fcmVnc3RhdGU6IC5kd29yZCAwOyAuZHdvcmQgMDsgLmR3b3JkIDA7ICBcCisgICAgICAgIC5iYWxpZ24gMTY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLmdsb2JhbCBiZWdpbl9zaWduYXR1cmU7IGJlZ2luX3NpZ25hdHVyZToKKworI2RlZmluZSBSVlRFU1RfREFUQV9FTkQgLmJhbGlnbiAxNjsgLmdsb2JhbCBlbmRfc2lnbmF0dXJlOyBlbmRfc2lnbmF0dXJlOgorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSGVscGVyIG1hY3JvcworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgTUFTS19YTEVOKHgpICgoeCkgJiAoKDEgPDwgKF9fcmlzY3ZfeGxlbiAtIDEpIDw8IDEpIC0gMSkpCisKKyNkZWZpbmUgVEVTVF9DQVNFKCB0ZXN0bnVtLCB0ZXN0cmVnLCBjb3JyZWN0dmFsLCBjb2RlLi4uICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICAgIGNvZGU7IFwKKyAgICBsaSAgeDI5LCBNQVNLX1hMRU4oY29ycmVjdHZhbCk7IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICAgIGJuZSB0ZXN0cmVnLCB4MjksIGZhaWw7CisKKyMgV2UgdXNlIGEgbWFjcm8gaGFjayB0byBzaW1waWZ5IGNvZGUgZ2VuZXJhdGlvbiBmb3IgdmFyaW91cyBudW1iZXJzCisjIG9mIGJ1YmJsZSBjeWNsZXMuCisKKyNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU18wCisjZGVmaW5lIFRFU1RfSU5TRVJUX05PUFNfMSAgbm9wOyBURVNUX0lOU0VSVF9OT1BTXzAKKyNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU18yICBub3A7IFRFU1RfSU5TRVJUX05PUFNfMQorI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzMgIG5vcDsgVEVTVF9JTlNFUlRfTk9QU18yCisjZGVmaW5lIFRFU1RfSU5TRVJUX05PUFNfNCAgbm9wOyBURVNUX0lOU0VSVF9OT1BTXzMKKyNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU181ICBub3A7IFRFU1RfSU5TRVJUX05PUFNfNAorI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzYgIG5vcDsgVEVTVF9JTlNFUlRfTk9QU181CisjZGVmaW5lIFRFU1RfSU5TRVJUX05PUFNfNyAgbm9wOyBURVNUX0lOU0VSVF9OT1BTXzYKKyNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU184ICBub3A7IFRFU1RfSU5TRVJUX05PUFNfNworI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzkgIG5vcDsgVEVTVF9JTlNFUlRfTk9QU184CisjZGVmaW5lIFRFU1RfSU5TRVJUX05PUFNfMTAgbm9wOyBURVNUX0lOU0VSVF9OT1BTXzkKKworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUlY2NFVJIE1BQ1JPUworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyBmb3IgaW5zdHJ1Y3Rpb25zIHdpdGggaW1tZWRpYXRlIG9wZXJhbmQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjZGVmaW5lIFNFWFRfSU1NKHgpICgoeCkgfCAoLSgoKHgpID4+IDExKSAmIDEpIDw8IDExKSkKKworI2RlZmluZSBURVNUX0lNTV9PUCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxLCBpbW0gKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MywgcmVzdWx0LCBcCisgICAgICBsaSAgeDEsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgaW5zdCB4MywgeDEsIFNFWFRfSU1NKGltbSk7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9JTU1fT1BfUlZDKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbDEsIGltbSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgxLCByZXN1bHQsIFwKKyAgICAgIGxpICB4MSwgdmFsMTsgXAorICAgICAgaW5zdCB4MSwgaW1tOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfSU1NX1NSQzFfRVFfREVTVCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxLCBpbW0gKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MSwgcmVzdWx0LCBcCisgICAgICBsaSAgeDEsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgaW5zdCB4MSwgeDEsIFNFWFRfSU1NKGltbSk7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9JTU1fREVTVF9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QsIHJlc3VsdCwgdmFsMSwgaW1tICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDYsIHJlc3VsdCwgXAorICAgICAgbGkgIHg0LCAwOyBcCisxOiAgICBsaSAgeDEsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgaW5zdCB4MywgeDEsIFNFWFRfSU1NKGltbSk7IFwKKyAgICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIG5vcF9jeWNsZXMgXAorICAgICAgYWRkaSAgeDYsIHgzLCAwOyBcCisgICAgICBhZGRpICB4NCwgeDQsIDE7IFwKKyAgICAgIGxpICB4NSwgMjsgXAorICAgICAgYm5lIHg0LCB4NSwgMWIgXAorICAgICkKKworI2RlZmluZSBURVNUX0lNTV9TUkMxX0JZUEFTUyggdGVzdG51bSwgbm9wX2N5Y2xlcywgaW5zdCwgcmVzdWx0LCB2YWwxLCBpbW0gKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MywgcmVzdWx0LCBcCisgICAgICBsaSAgeDQsIDA7IFwKKzE6ICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBub3BfY3ljbGVzIFwKKyAgICAgIGluc3QgeDMsIHgxLCBTRVhUX0lNTShpbW0pOyBcCisgICAgICBhZGRpICB4NCwgeDQsIDE7IFwKKyAgICAgIGxpICB4NSwgMjsgXAorICAgICAgYm5lIHg0LCB4NSwgMWIgXAorICAgICkKKworI2RlZmluZSBURVNUX0lNTV9aRVJPU1JDMSggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCBpbW0gKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MSwgcmVzdWx0LCBcCisgICAgICBpbnN0IHgxLCB4MCwgU0VYVF9JTU0oaW1tKTsgXAorICAgICkKKworI2RlZmluZSBURVNUX0lNTV9aRVJPREVTVCggdGVzdG51bSwgaW5zdCwgdmFsMSwgaW1tICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDAsIDAsIFwKKyAgICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBpbnN0IHgwLCB4MSwgU0VYVF9JTU0oaW1tKTsgXAorICAgICkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIGZvciB2ZWN0b3IgY29uZmlnIGluc3RydWN0aW9ucworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgVEVTVF9WU0VUQ0ZHSVZMKCB0ZXN0bnVtLCBueHByLCBuZnByLCBiYW5rLCB2bCwgcmVzdWx0ICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAorICAgICAgbGkgeDEsIChiYW5rIDw8IDEyKTsgXAorICAgICAgdnNldGNmZyB4MSxueHByLG5mcHI7IFwKKyAgICAgIGxpIHgxLCB2bDsgXAorICAgICAgdnNldHZsIHgxLHgxOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfVlZDRkcoIHRlc3RudW0sIG54cHIsIG5mcHIsIGJhbmssIHZsLCByZXN1bHQgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MSwgcmVzdWx0LCBcCisgICAgICBsaSB4MSwgKGJhbmsgPDwgMTIpIHwgKG5mcHIgPDwgNikgfCBueHByOyBcCisgICAgICB2c2V0Y2ZnIHgxOyBcCisgICAgICBsaSB4MSwgdmw7IFwKKyAgICAgIHZzZXR2bCB4MSx4MTsgXAorICAgICkKKworI2RlZmluZSBURVNUX1ZTRVRWTCggdGVzdG51bSwgbnhwciwgbmZwciwgYmFuaywgdmwsIHJlc3VsdCApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgxLCByZXN1bHQsIFwKKyAgICAgIGxpIHgxLCAoYmFuayA8PCAxMik7IFwKKyAgICAgIHZzZXRjZmcgeDEsbnhwcixuZnByOyBcCisgICAgICBsaSB4MSwgdmw7IFwKKyAgICAgIHZzZXR2bCB4MSwgeDE7IFwKKyAgICApCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyBmb3IgYW4gaW5zdHJ1Y3Rpb24gd2l0aCByZWdpc3RlciBvcGVyYW5kcworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgVEVTVF9SX09QKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbDEgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MywgcmVzdWx0LCBcCisgICAgICBsaSAgeDEsIHZhbDE7IFwKKyAgICAgIGluc3QgeDMsIHgxOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUl9TUkMxX0VRX0RFU1QoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsMSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgxLCByZXN1bHQsIFwKKyAgICAgIGxpICB4MSwgdmFsMTsgXAorICAgICAgaW5zdCB4MSwgeDE7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SX0RFU1RfQllQQVNTKCB0ZXN0bnVtLCBub3BfY3ljbGVzLCBpbnN0LCByZXN1bHQsIHZhbDEgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4NiwgcmVzdWx0LCBcCisgICAgICBsaSAgeDQsIDA7IFwKKzE6ICAgIGxpICB4MSwgdmFsMTsgXAorICAgICAgaW5zdCB4MywgeDE7IFwKKyAgICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIG5vcF9jeWNsZXMgXAorICAgICAgYWRkaSAgeDYsIHgzLCAwOyBcCisgICAgICBhZGRpICB4NCwgeDQsIDE7IFwKKyAgICAgIGxpICB4NSwgMjsgXAorICAgICAgYm5lIHg0LCB4NSwgMWIgXAorICAgICkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIGZvciBhbiBpbnN0cnVjdGlvbiB3aXRoIHJlZ2lzdGVyLXJlZ2lzdGVyIG9wZXJhbmRzCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBURVNUX1JSX09QKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbDEsIHZhbDIgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MywgcmVzdWx0LCBcCisgICAgICBsaSAgeDEsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgbGkgIHgyLCBNQVNLX1hMRU4odmFsMik7IFwKKyAgICAgIGluc3QgeDMsIHgxLCB4MjsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1NSQzFfRVFfREVTVCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAorICAgICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpICB4MiwgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBpbnN0IHgxLCB4MSwgeDI7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SUl9TUkMyX0VRX0RFU1QoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgyLCByZXN1bHQsIFwKKyAgICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBsaSAgeDIsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgaW5zdCB4MiwgeDEsIHgyOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfU1JDMTJfRVFfREVTVCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAorICAgICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGluc3QgeDEsIHgxLCB4MTsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX0RFU1RfQllQQVNTKCB0ZXN0bnVtLCBub3BfY3ljbGVzLCBpbnN0LCByZXN1bHQsIHZhbDEsIHZhbDIgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4NiwgcmVzdWx0LCBcCisgICAgICBsaSAgeDQsIDA7IFwKKzE6ICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBsaSAgeDIsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgaW5zdCB4MywgeDEsIHgyOyBcCisgICAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBub3BfY3ljbGVzIFwKKyAgICAgIGFkZGkgIHg2LCB4MywgMDsgXAorICAgICAgYWRkaSAgeDQsIHg0LCAxOyBcCisgICAgICBsaSAgeDUsIDI7IFwKKyAgICAgIGJuZSB4NCwgeDUsIDFiIFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SUl9TUkMxMl9CWVBBU1MoIHRlc3RudW0sIHNyYzFfbm9wcywgc3JjMl9ub3BzLCBpbnN0LCByZXN1bHQsIHZhbDEsIHZhbDIgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MywgcmVzdWx0LCBcCisgICAgICBsaSAgeDQsIDA7IFwKKzE6ICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBzcmMxX25vcHMgXAorICAgICAgbGkgIHgyLCBNQVNLX1hMRU4odmFsMik7IFwKKyAgICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzJfbm9wcyBcCisgICAgICBpbnN0IHgzLCB4MSwgeDI7IFwKKyAgICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgICAgbGkgIHg1LCAyOyBcCisgICAgICBibmUgeDQsIHg1LCAxYiBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfU1JDMjFfQllQQVNTKCB0ZXN0bnVtLCBzcmMxX25vcHMsIHNyYzJfbm9wcywgaW5zdCwgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDMsIHJlc3VsdCwgXAorICAgICAgbGkgIHg0LCAwOyBcCisxOiAgICBsaSAgeDIsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgc3JjMV9ub3BzIFwKKyAgICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBzcmMyX25vcHMgXAorICAgICAgaW5zdCB4MywgeDEsIHgyOyBcCisgICAgICBhZGRpICB4NCwgeDQsIDE7IFwKKyAgICAgIGxpICB4NSwgMjsgXAorICAgICAgYm5lIHg0LCB4NSwgMWIgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1pFUk9TUkMxKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbCApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgyLCByZXN1bHQsIFwKKyAgICAgIGxpIHgxLCBNQVNLX1hMRU4odmFsKTsgXAorICAgICAgaW5zdCB4MiwgeDAsIHgxOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfWkVST1NSQzIoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDIsIHJlc3VsdCwgXAorICAgICAgbGkgeDEsIE1BU0tfWExFTih2YWwpOyBcCisgICAgICBpbnN0IHgyLCB4MSwgeDA7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SUl9aRVJPU1JDMTIoIHRlc3RudW0sIGluc3QsIHJlc3VsdCApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgxLCByZXN1bHQsIFwKKyAgICAgIGluc3QgeDEsIHgwLCB4MDsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1pFUk9ERVNUKCB0ZXN0bnVtLCBpbnN0LCB2YWwxLCB2YWwyICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDAsIDAsIFwKKyAgICAgIGxpIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpIHgyLCBNQVNLX1hMRU4odmFsMik7IFwKKyAgICAgIGluc3QgeDAsIHgxLCB4MjsgXAorICAgICkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3QgbWVtb3J5IGluc3RydWN0aW9ucworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgVEVTVF9MRF9PUCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCBvZmZzZXQsIGJhc2UgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MywgcmVzdWx0LCBcCisgICAgICBsYSAgeDEsIGJhc2U7IFwKKyAgICAgIGluc3QgeDMsIG9mZnNldCh4MSk7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9TVF9PUCggdGVzdG51bSwgbG9hZF9pbnN0LCBzdG9yZV9pbnN0LCByZXN1bHQsIG9mZnNldCwgYmFzZSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzLCByZXN1bHQsIFwKKyAgICAgIGxhICB4MSwgYmFzZTsgXAorICAgICAgbGkgIHgyLCByZXN1bHQ7IFwKKyAgICAgIHN0b3JlX2luc3QgeDIsIG9mZnNldCh4MSk7IFwKKyAgICAgIGxvYWRfaW5zdCB4Mywgb2Zmc2V0KHgxKTsgXAorICAgICkKKworI2RlZmluZSBURVNUX0xEX0RFU1RfQllQQVNTKCB0ZXN0bnVtLCBub3BfY3ljbGVzLCBpbnN0LCByZXN1bHQsIG9mZnNldCwgYmFzZSApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICAgIGxpICB4NCwgMDsgXAorMTogIGxhICB4MSwgYmFzZTsgXAorICAgIGluc3QgeDMsIG9mZnNldCh4MSk7IFwKKyAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBub3BfY3ljbGVzIFwKKyAgICBhZGRpICB4NiwgeDMsIDA7IFwKKyAgICBsaSAgeDI5LCByZXN1bHQ7IFwKKyAgICBibmUgeDYsIHgyOSwgZmFpbDsgXAorICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgIGxpICB4NSwgMjsgXAorICAgIGJuZSB4NCwgeDUsIDFiOyBcCisKKyNkZWZpbmUgVEVTVF9MRF9TUkMxX0JZUEFTUyggdGVzdG51bSwgbm9wX2N5Y2xlcywgaW5zdCwgcmVzdWx0LCBvZmZzZXQsIGJhc2UgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsYSAgeDEsIGJhc2U7IFwKKyAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBub3BfY3ljbGVzIFwKKyAgICBpbnN0IHgzLCBvZmZzZXQoeDEpOyBcCisgICAgbGkgIHgyOSwgcmVzdWx0OyBcCisgICAgYm5lIHgzLCB4MjksIGZhaWw7IFwKKyAgICBhZGRpICB4NCwgeDQsIDE7IFwKKyAgICBsaSAgeDUsIDI7IFwKKyAgICBibmUgeDQsIHg1LCAxYiBcCisKKyNkZWZpbmUgVEVTVF9TVF9TUkMxMl9CWVBBU1MoIHRlc3RudW0sIHNyYzFfbm9wcywgc3JjMl9ub3BzLCBsb2FkX2luc3QsIHN0b3JlX2luc3QsIHJlc3VsdCwgb2Zmc2V0LCBiYXNlICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICAgIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCisgICAgbGkgIHg0LCAwOyBcCisxOiAgbGkgIHgxLCByZXN1bHQ7IFwKKyAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBzcmMxX25vcHMgXAorICAgIGxhICB4MiwgYmFzZTsgXAorICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzJfbm9wcyBcCisgICAgc3RvcmVfaW5zdCB4MSwgb2Zmc2V0KHgyKTsgXAorICAgIGxvYWRfaW5zdCB4Mywgb2Zmc2V0KHgyKTsgXAorICAgIGxpICB4MjksIHJlc3VsdDsgXAorICAgIGJuZSB4MywgeDI5LCBmYWlsOyBcCisgICAgYWRkaSAgeDQsIHg0LCAxOyBcCisgICAgbGkgIHg1LCAyOyBcCisgICAgYm5lIHg0LCB4NSwgMWIgXAorCisjZGVmaW5lIFRFU1RfU1RfU1JDMjFfQllQQVNTKCB0ZXN0bnVtLCBzcmMxX25vcHMsIHNyYzJfbm9wcywgbG9hZF9pbnN0LCBzdG9yZV9pbnN0LCByZXN1bHQsIG9mZnNldCwgYmFzZSApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICAgIGxpICB4NCwgMDsgXAorMTogIGxhICB4MiwgYmFzZTsgXAorICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzFfbm9wcyBcCisgICAgbGkgIHgxLCByZXN1bHQ7IFwKKyAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBzcmMyX25vcHMgXAorICAgIHN0b3JlX2luc3QgeDEsIG9mZnNldCh4Mik7IFwKKyAgICBsb2FkX2luc3QgeDMsIG9mZnNldCh4Mik7IFwKKyAgICBsaSAgeDI5LCByZXN1bHQ7IFwKKyAgICBibmUgeDMsIHgyOSwgZmFpbDsgXAorICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgIGxpICB4NSwgMjsgXAorICAgIGJuZSB4NCwgeDUsIDFiIFwKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3QgYnJhbmNoIGluc3RydWN0aW9ucworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgVEVTVF9CUjFfT1BfVEFLRU4oIHRlc3RudW0sIGluc3QsIHZhbDEgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgICBsaSAgeDEsIHZhbDE7IFwKKyAgICBpbnN0IHgxLCAyZjsgXAorICAgIGJuZSB4MCwgVEVTVE5VTSwgZmFpbDsgXAorMTogIGJuZSB4MCwgVEVTVE5VTSwgM2Y7IFwKKzI6ICBpbnN0IHgxLCAxYjsgXAorICAgIGJuZSB4MCwgVEVTVE5VTSwgZmFpbDsgXAorMzoKKworI2RlZmluZSBURVNUX0JSMV9PUF9OT1RUQUtFTiggdGVzdG51bSwgaW5zdCwgdmFsMSApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICAgIGxpICB4MSwgdmFsMTsgXAorICAgIGluc3QgeDEsIDFmOyBcCisgICAgYm5lIHgwLCBURVNUTlVNLCAyZjsgXAorMTogIGJuZSB4MCwgVEVTVE5VTSwgZmFpbDsgXAorMjogIGluc3QgeDEsIDFiOyBcCiszOgorCisjZGVmaW5lIFRFU1RfQlIxX1NSQzFfQllQQVNTKCB0ZXN0bnVtLCBub3BfY3ljbGVzLCBpbnN0LCB2YWwxICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICAgIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCisgICAgbGkgIHg0LCAwOyBcCisxOiAgbGkgIHgxLCB2YWwxOyBcCisgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgbm9wX2N5Y2xlcyBcCisgICAgaW5zdCB4MSwgZmFpbDsgXAorICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgIGxpICB4NSwgMjsgXAorICAgIGJuZSB4NCwgeDUsIDFiIFwKKworI2RlZmluZSBURVNUX0JSMl9PUF9UQUtFTiggdGVzdG51bSwgaW5zdCwgdmFsMSwgdmFsMiApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICAgIGxpICB4MSwgdmFsMTsgXAorICAgIGxpICB4MiwgdmFsMjsgXAorICAgIGluc3QgeDEsIHgyLCAyZjsgXAorICAgIGJuZSB4MCwgVEVTVE5VTSwgZmFpbDsgXAorMTogIGJuZSB4MCwgVEVTVE5VTSwgM2Y7IFwKKzI6ICBpbnN0IHgxLCB4MiwgMWI7IFwKKyAgICBibmUgeDAsIFRFU1ROVU0sIGZhaWw7IFwKKzM6CisKKyNkZWZpbmUgVEVTVF9CUjJfT1BfTk9UVEFLRU4oIHRlc3RudW0sIGluc3QsIHZhbDEsIHZhbDIgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgICBsaSAgeDEsIHZhbDE7IFwKKyAgICBsaSAgeDIsIHZhbDI7IFwKKyAgICBpbnN0IHgxLCB4MiwgMWY7IFwKKyAgICBibmUgeDAsIFRFU1ROVU0sIDJmOyBcCisxOiAgYm5lIHgwLCBURVNUTlVNLCBmYWlsOyBcCisyOiAgaW5zdCB4MSwgeDIsIDFiOyBcCiszOgorCisjZGVmaW5lIFRFU1RfQlIyX1NSQzEyX0JZUEFTUyggdGVzdG51bSwgc3JjMV9ub3BzLCBzcmMyX25vcHMsIGluc3QsIHZhbDEsIHZhbDIgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsaSAgeDEsIHZhbDE7IFwKKyAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBzcmMxX25vcHMgXAorICAgIGxpICB4MiwgdmFsMjsgXAorICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzJfbm9wcyBcCisgICAgaW5zdCB4MSwgeDIsIGZhaWw7IFwKKyAgICBhZGRpICB4NCwgeDQsIDE7IFwKKyAgICBsaSAgeDUsIDI7IFwKKyAgICBibmUgeDQsIHg1LCAxYiBcCisKKyNkZWZpbmUgVEVTVF9CUjJfU1JDMjFfQllQQVNTKCB0ZXN0bnVtLCBzcmMxX25vcHMsIHNyYzJfbm9wcywgaW5zdCwgdmFsMSwgdmFsMiApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICAgIGxpICB4NCwgMDsgXAorMTogIGxpICB4MiwgdmFsMjsgXAorICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzFfbm9wcyBcCisgICAgbGkgIHgxLCB2YWwxOyBcCisgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgc3JjMl9ub3BzIFwKKyAgICBpbnN0IHgxLCB4MiwgZmFpbDsgXAorICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgIGxpICB4NSwgMjsgXAorICAgIGJuZSB4NCwgeDUsIDFiIFwKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3QganVtcCBpbnN0cnVjdGlvbnMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjZGVmaW5lIFRFU1RfSlJfU1JDMV9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsYSAgeDYsIDJmOyBcCisgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgbm9wX2N5Y2xlcyBcCisgICAgaW5zdCB4NjsgXAorICAgIGJuZSB4MCwgVEVTVE5VTSwgZmFpbDsgXAorMjogIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgIGxpICB4NSwgMjsgXAorICAgIGJuZSB4NCwgeDUsIDFiIFwKKworI2RlZmluZSBURVNUX0pBTFJfU1JDMV9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsYSAgeDYsIDJmOyBcCisgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgbm9wX2N5Y2xlcyBcCisgICAgaW5zdCB4MTksIHg2LCAwOyBcCisgICAgYm5lIHgwLCBURVNUTlVNLCBmYWlsOyBcCisyOiAgYWRkaSAgeDQsIHg0LCAxOyBcCisgICAgbGkgIHg1LCAyOyBcCisgICAgYm5lIHg0LCB4NSwgMWIgXAorCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSVjY0VUYgTUFDUk9TCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIGZsb2F0aW5nLXBvaW50IGluc3RydWN0aW9ucworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgcU5hTmYgMGY6N2ZjMDAwMDAKKyNkZWZpbmUgc05hTmYgMGY6N2Y4MDAwMDEKKyNkZWZpbmUgcU5hTiAwZDo3ZmY4MDAwMDAwMDAwMDAwCisjZGVmaW5lIHNOYU4gMGQ6N2ZmMDAwMDAwMDAwMDAwMQorCisjZGVmaW5lIFRFU1RfRlBfT1BfU19JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiwgdmFsMywgY29kZS4uLiApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhIDtcCisgIGZsdyBmMCwgMChhMCk7IFwKKyAgZmx3IGYxLCA0KGEwKTsgXAorICBmbHcgZjIsIDgoYTApOyBcCisgIGx3ICBhMywgMTIoYTApOyBcCisgIGNvZGU7IFwKKyAgZnNmbGFncyBhMSwgeDA7IFwKKyAgbGkgYTIsIGZsYWdzOyBcCisgIGJuZSBhMCwgYTMsIGZhaWw7IFwKKyAgYm5lIGExLCBhMiwgZmFpbDsgXAorICBqIDJmOyBcCisgIC5iYWxpZ24gNDsgXAorICAuZGF0YTsgXAorICB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhOiBcCisgIC5mbG9hdCB2YWwxOyBcCisgIC5mbG9hdCB2YWwyOyBcCisgIC5mbG9hdCB2YWwzOyBcCisgIC5yZXN1bHQ7IFwKKyAgLnRleHQ7IFwKKzI6CisKKyNkZWZpbmUgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyLCB2YWwzLCBjb2RlLi4uICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICBsYSAgYTAsIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGEgO1wKKyAgZmxkIGYwLCAwKGEwKTsgXAorICBmbGQgZjEsIDgoYTApOyBcCisgIGZsZCBmMiwgMTYoYTApOyBcCisgIGxkICBhMywgMjQoYTApOyBcCisgIGNvZGU7IFwKKyAgZnNmbGFncyBhMSwgeDA7IFwKKyAgbGkgYTIsIGZsYWdzOyBcCisgIGJuZSBhMCwgYTMsIGZhaWw7IFwKKyAgYm5lIGExLCBhMiwgZmFpbDsgXAorICBqIDJmOyBcCisgIC5kYXRhOyBcCisgIC5iYWxpZ24gODsgXAorICB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhOiBcCisgIC5kb3VibGUgdmFsMTsgXAorICAuZG91YmxlIHZhbDI7IFwKKyAgLmRvdWJsZSB2YWwzOyBcCisgIC5yZXN1bHQ7IFwKKyAgLnRleHQ7IFwKKzI6CisKKyNkZWZpbmUgVEVTVF9GQ1ZUX1NfRCggdGVzdG51bSwgcmVzdWx0LCB2YWwxICkgXAorICBURVNUX0ZQX09QX0RfSU5URVJOQUwoIHRlc3RudW0sIDAsIGRvdWJsZSByZXN1bHQsIHZhbDEsIDAuMCwgMC4wLCBcCisgICAgICAgICAgICAgICAgICAgIGZjdnQucy5kIGYzLCBmMDsgZmN2dC5kLnMgZjMsIGYzOyBmbXYueC5kIGEwLCBmMykKKworI2RlZmluZSBURVNUX0ZDVlRfRF9TKCB0ZXN0bnVtLCByZXN1bHQsIHZhbDEgKSBcCisgIFRFU1RfRlBfT1BfU19JTlRFUk5BTCggdGVzdG51bSwgMCwgZmxvYXQgcmVzdWx0LCB2YWwxLCAwLjAsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBmY3Z0LmQucyBmMywgZjA7IGZjdnQucy5kIGYzLCBmMzsgZm12LngucyBhMCwgZjMpCisKKyNkZWZpbmUgVEVTVF9GUF9PUDFfUyggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSApIFwKKyAgVEVTVF9GUF9PUF9TX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZmxvYXQgcmVzdWx0LCB2YWwxLCAwLjAsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMDsgZm12LngucyBhMCwgZjMpCisKKyNkZWZpbmUgVEVTVF9GUF9PUDFfRCggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSApIFwKKyAgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZG91YmxlIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjA7IGZtdi54LmQgYTAsIGYzKQorCisjZGVmaW5lIFRFU1RfRlBfT1AxX1NfRFdPUkRfUkVTVUxUKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxICkgXAorICBURVNUX0ZQX09QX1NfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkd29yZCByZXN1bHQsIHZhbDEsIDAuMCwgMC4wLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgZjMsIGYwOyBmbXYueC5zIGEwLCBmMykKKworI2RlZmluZSBURVNUX0ZQX09QMV9EX0RXT1JEX1JFU1VMVCggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSApIFwKKyAgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZHdvcmQgcmVzdWx0LCB2YWwxLCAwLjAsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMDsgZm12LnguZCBhMCwgZjMpCisKKyNkZWZpbmUgVEVTVF9GUF9PUDJfUyggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgVEVTVF9GUF9PUF9TX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZmxvYXQgcmVzdWx0LCB2YWwxLCB2YWwyLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjAsIGYxOyBmbXYueC5zIGEwLCBmMykKKworI2RlZmluZSBURVNUX0ZQX09QMl9EKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAorICBURVNUX0ZQX09QX0RfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkb3VibGUgcmVzdWx0LCB2YWwxLCB2YWwyLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjAsIGYxOyBmbXYueC5kIGEwLCBmMykKKworI2RlZmluZSBURVNUX0ZQX09QM19TKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyLCB2YWwzICkgXAorICBURVNUX0ZQX09QX1NfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBmbG9hdCByZXN1bHQsIHZhbDEsIHZhbDIsIHZhbDMsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjAsIGYxLCBmMjsgZm12LngucyBhMCwgZjMpCisKKyNkZWZpbmUgVEVTVF9GUF9PUDNfRCggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiwgdmFsMyApIFwKKyAgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZG91YmxlIHJlc3VsdCwgdmFsMSwgdmFsMiwgdmFsMywgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMCwgZjEsIGYyOyBmbXYueC5kIGEwLCBmMykKKworI2RlZmluZSBURVNUX0ZQX0lOVF9PUF9TKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCBybSApIFwKKyAgVEVTVF9GUF9PUF9TX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgd29yZCByZXN1bHQsIHZhbDEsIDAuMCwgMC4wLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgYTAsIGYwLCBybSkKKworI2RlZmluZSBURVNUX0ZQX0lOVF9PUF9EKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCBybSApIFwKKyAgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZHdvcmQgcmVzdWx0LCB2YWwxLCAwLjAsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGEwLCBmMCwgcm0pCisKKyNkZWZpbmUgVEVTVF9GUF9DTVBfT1BfUyggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgVEVTVF9GUF9PUF9TX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgd29yZCByZXN1bHQsIHZhbDEsIHZhbDIsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGEwLCBmMCwgZjEpCisKKyNkZWZpbmUgVEVTVF9GUF9DTVBfT1BfRCggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZHdvcmQgcmVzdWx0LCB2YWwxLCB2YWwyLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBhMCwgZjAsIGYxKQorCisjZGVmaW5lIFRFU1RfRkNMQVNTX1ModGVzdG51bSwgY29ycmVjdCwgaW5wdXQpIFwKKyAgVEVTVF9DQVNFKHRlc3RudW0sIGEwLCBjb3JyZWN0LCBsaSBhMCwgaW5wdXQ7IGZtdi5zLnggZmEwLCBhMDsgXAorICAgICAgICAgICAgICAgICAgICBmY2xhc3MucyBhMCwgZmEwKQorCisjZGVmaW5lIFRFU1RfRkNMQVNTX0QodGVzdG51bSwgY29ycmVjdCwgaW5wdXQpIFwKKyAgVEVTVF9DQVNFKHRlc3RudW0sIGEwLCBjb3JyZWN0LCBsaSBhMCwgaW5wdXQ7IGZtdi5kLnggZmEwLCBhMDsgXAorICAgICAgICAgICAgICAgICAgICBmY2xhc3MuZCBhMCwgZmEwKQorCisjZGVmaW5lIFRFU1RfSU5UX0ZQX09QX1MoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsMSApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhIDtcCisgIGx3ICBhMywgMChhMCk7IFwKKyAgbGkgIGEwLCB2YWwxOyBcCisgIGluc3QgZjAsIGEwOyBcCisgIGZzZmxhZ3MgeDA7IFwKKyAgZm12LngucyBhMCwgZjA7IFwKKyAgYm5lIGEwLCBhMywgZmFpbDsgXAorICBqIDFmOyBcCisgIC5iYWxpZ24gNDsgXAorICB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhOiBcCisgIC5mbG9hdCByZXN1bHQ7IFwKKzE6CisKKyNkZWZpbmUgVEVTVF9JTlRfRlBfT1BfRCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICBsYSAgYTAsIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGEgO1wKKyAgbGQgIGEzLCAwKGEwKTsgXAorICBsaSAgYTAsIHZhbDE7IFwKKyAgaW5zdCBmMCwgYTA7IFwKKyAgZnNmbGFncyB4MDsgXAorICBmbXYueC5kIGEwLCBmMDsgXAorICBibmUgYTAsIGEzLCBmYWlsOyBcCisgIGogMWY7IFwKKyAgLmJhbGlnbiA4OyBcCisgIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGE6IFwKKyAgLmRvdWJsZSByZXN1bHQ7IFwKKzE6CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQYXNzIGFuZCBmYWlsIGNvZGUgKGFzc3VtZXMgdGVzdCBudW0gaXMgaW4gVEVTVE5VTSkKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjZGVmaW5lIFRFU1RfUEFTU0ZBSUwgXAorICAgICAgICBibmUgeDAsIFRFU1ROVU0sIHBhc3M7IFwKK2ZhaWw6IFwKKyAgICAgICAgUlZURVNUX0ZBSUw7IFwKK3Bhc3M6IFwKKyAgICAgICAgUlZURVNUX1BBU1MgXAorCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0IGRhdGEgc2VjdGlvbgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgVEVTVF9EQVRBCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2Zpcm13YXJlL3NjX3ByaW50LmMgYi92ZXJpbG9nL2R2L2Zpcm13YXJlL3NjX3ByaW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjczNmQ0MgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvc2NfcHJpbnQuYwpAQCAtMCwwICsxLDI5NiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7ICAgICAgICAvLy8vCisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuICAgICAgIC8vLy8KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAgICAvLy8vCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAgICAgIC8vLy8KKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLi8vLworLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAgICAvLy8vCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+ICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgInNjX3ByaW50LmgiCisKKyNkZWZpbmUgU0NfU0lNX09VVFBPUlQgKDB4ZjAwMDAwMDApCisjZGVmaW5lIENIQVJfQklUICg4KQorCitzdGF0aWMgdm9pZAorc2NfcHV0cyhsb25nIHN0ciwgbG9uZyBzdHJsZW4pIHsKKwl2b2xhdGlsZSBjaGFyICpvdXRfcHRyID0gKHZvbGF0aWxlIGNoYXIqKVNDX1NJTV9PVVRQT1JUOworCWNvbnN0IGNoYXIgKmluX3B0ciA9IChjb25zdCBjaGFyKilzdHI7CisJZm9yIChsb25nIGxlbiA9IHN0cmxlbjsgbGVuID4gMDsgLS1sZW4pCisJICAqb3V0X3B0ciA9ICppbl9wdHIrKzsKK30KKworI3VuZGVmIHB1dGNoYXIKK2ludAorcHV0Y2hhcihpbnQgY2gpIHsKKwlzdGF0aWMgX190aHJlYWQgY2hhciBidWZbNjRdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoNjQpKSk7CisgICAgc3RhdGljIF9fdGhyZWFkIGludCBidWZsZW4gPSAwOworCisgICAgYnVmW2J1ZmxlbisrXSA9IGNoOworCisJaWYgKCBjaCA9PSAnXG4nIHx8IGJ1ZmxlbiA9PSBzaXplb2YoYnVmKSApIHsKKyAgICAgICAgc2NfcHV0cygobG9uZylidWYsIGJ1Zmxlbik7CisgICAgICAgIGJ1ZmxlbiA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitwcmludGZfcHV0Y2goaW50IGNoLCB2b2lkKiogZGF0YSkKK3sKKyAgICBwdXRjaGFyKGNoKTsKK30KKworc3RhdGljIHZvaWQKK3ByaW50KGNvbnN0IGNoYXIgKnN0cikKK3sKKyAgc2NfcHV0cygobG9uZylzdHIsIHN0cmxlbihzdHIpKTsKK30KKworCitzdGF0aWMgbG9uZyBsb25nCitnZXRpbnQodmFfbGlzdCAqYXAsIGludCBsZmxhZykKK3sKKyAgICBpZiAoIGxmbGFnID49IDIgKQorICAgICAgICByZXR1cm4gdmFfYXJnKCphcCwgbG9uZyBsb25nKTsKKyAgICBlbHNlIGlmICggbGZsYWcgKQorICAgICAgICByZXR1cm4gdmFfYXJnKCphcCwgbG9uZyk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gdmFfYXJnKCphcCwgaW50KTsKK30KKworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nCitnZXR1aW50KHZhX2xpc3QgKmFwLCBpbnQgbGZsYWcpCit7CisgICAgaWYgKCBsZmxhZyA+PSAyICkKKyAgICAgICAgcmV0dXJuIHZhX2FyZygqYXAsIHVuc2lnbmVkIGxvbmcgbG9uZyk7CisgICAgZWxzZSBpZiAoIGxmbGFnICkKKyAgICAgICAgcmV0dXJuIHZhX2FyZygqYXAsIHVuc2lnbmVkIGxvbmcpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHZhX2FyZygqYXAsIHVuc2lnbmVkIGludCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcHJpbnRudW0odm9pZCgqcHV0Y2gpKGludCwgdm9pZCoqKSwKK3ZvaWQgKipwdXRkYXQsCit1bnNpZ25lZCBsb25nIGxvbmcgbnVtLAordW5zaWduZWQgYmFzZSwKK2ludCB3aWR0aCwKK2ludCBwYWRjLAoraW50IGhleF9BKQoreworICAgIHVuc2lnbmVkIGRpZ3Nbc2l6ZW9mKG51bSkgKiBDSEFSX0JJVF07CisgICAgaW50IHBvcyA9IDA7CisKKyAgICBmb3IgKCA7OyApIHsKKyAgICAgICAgZGlnc1twb3MrK10gPSBudW0gJSBiYXNlOworICAgICAgICBpZiAoIG51bSA8IGJhc2UgKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIG51bSAvPSBiYXNlOworICAgIH0KKworICAgIHdoaWxlICggd2lkdGgtLSA+IHBvcyApCisgICAgICAgIHB1dGNoKHBhZGMsIHB1dGRhdCk7CisKKyAgICB3aGlsZSAoIHBvcy0tID4gMCApCisgICAgICAgIHB1dGNoKGRpZ3NbcG9zXSArIChkaWdzW3Bvc10gPj0gMTAgPyBoZXhfQSAtIDEwIDogJzAnKSwgcHV0ZGF0KTsKK30KKworc3RhdGljIHZvaWQKK3ZwcmludGZtdCh2b2lkKCpwdXRjaCkoaW50LCB2b2lkKiopLCB2b2lkICoqcHV0ZGF0LCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApCit7CisgICAgcmVnaXN0ZXIgY29uc3QgY2hhciogcDsKKyAgICBjb25zdCBjaGFyKiBsYXN0X2ZtdDsKKyAgICByZWdpc3RlciBpbnQgY2g7CisgICAgaW50IGVycjsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgbnVtOworICAgIGludCBiYXNlOworICAgIGludCBsZmxhZzsKKyAgICBpbnQgd2lkdGg7CisgICAgaW50IHByZWNpc2lvbjsKKyAgICBpbnQgYWx0ZmxhZzsKKyAgICBjaGFyIHBhZGM7CisgICAgaW50IGhleF9BID0gJ2EnOworICAgIGZvciAoIDs7ICkgeworICAgICAgICB3aGlsZSAoIChjaCA9ICoodW5zaWduZWQgY2hhciAqKWZtdCkgIT0gJyUnICkgeworICAgICAgICAgICAgaWYgKCBjaCA9PSAnXDAnICkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICArK2ZtdDsKKyAgICAgICAgICAgIHB1dGNoKGNoLCBwdXRkYXQpOworICAgICAgICB9CisgICAgICAgICsrZm10OworCisgICAgICAgIC8vIFByb2Nlc3MgYSAlLWVzY2FwZSBzZXF1ZW5jZQorICAgICAgICBsYXN0X2ZtdCA9IGZtdDsKKyAgICAgICAgcGFkYyA9ICcgJzsKKyAgICAgICAgd2lkdGggPSAtMTsKKyAgICAgICAgcHJlY2lzaW9uID0gLTE7CisgICAgICAgIGxmbGFnID0gMDsKKyAgICAgICAgYWx0ZmxhZyA9IDA7CisKK3Jlc3dpdGNoOgorICAgICAgICBzd2l0Y2ggKCBjaCA9ICoodW5zaWduZWQgY2hhciAqKWZtdCsrICkgeworICAgICAgICAgICAgLy8gZmxhZyB0byBwYWQgb24gdGhlIHJpZ2h0CisgICAgICAgICAgICBjYXNlICctJzoKKyAgICAgICAgICAgICAgICBwYWRjID0gJy0nOworICAgICAgICAgICAgICAgIGdvdG8gcmVzd2l0Y2g7CisKKyAgICAgICAgICAgICAgICAvLyBmbGFnIHRvIHBhZCB3aXRoIDAncyBpbnN0ZWFkIG9mIHNwYWNlcworICAgICAgICAgICAgY2FzZSAnMCc6CisgICAgICAgICAgICAgICAgcGFkYyA9ICcwJzsKKyAgICAgICAgICAgICAgICBnb3RvIHJlc3dpdGNoOworCisgICAgICAgICAgICAgICAgLy8gd2lkdGggZmllbGQKKyAgICAgICAgICAgIGNhc2UgJzEnOgorICAgICAgICAgICAgY2FzZSAnMic6CisgICAgICAgICAgICBjYXNlICczJzoKKyAgICAgICAgICAgIGNhc2UgJzQnOgorICAgICAgICAgICAgY2FzZSAnNSc6CisgICAgICAgICAgICBjYXNlICc2JzoKKyAgICAgICAgICAgIGNhc2UgJzcnOgorICAgICAgICAgICAgY2FzZSAnOCc6CisgICAgICAgICAgICBjYXNlICc5JzoKKyAgICAgICAgICAgICAgICBmb3IgKCBwcmVjaXNpb24gPSAwOzsgKytmbXQgKSB7CisgICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbiA9IHByZWNpc2lvbiAqIDEwICsgY2ggLSAnMCc7CisgICAgICAgICAgICAgICAgICAgIGNoID0gKmZtdDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBjaCA8ICcwJyB8fCBjaCA+ICc5JyApCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZ290byBwcm9jZXNzX3ByZWNpc2lvbjsKKworICAgICAgICAgICAgY2FzZSAnKic6CisgICAgICAgICAgICAgICAgcHJlY2lzaW9uID0gdmFfYXJnKGFwLCBpbnQpOworICAgICAgICAgICAgICAgIGdvdG8gcHJvY2Vzc19wcmVjaXNpb247CisKKyAgICAgICAgICAgIGNhc2UgJy4nOgorICAgICAgICAgICAgICAgIGlmICggd2lkdGggPCAwICkKKyAgICAgICAgICAgICAgICAgICAgd2lkdGggPSAwOworICAgICAgICAgICAgICAgIGdvdG8gcmVzd2l0Y2g7CisKKyAgICAgICAgICAgIGNhc2UgJyMnOgorICAgICAgICAgICAgICAgIGFsdGZsYWcgPSAxOworICAgICAgICAgICAgICAgIGdvdG8gcmVzd2l0Y2g7CisKK3Byb2Nlc3NfcHJlY2lzaW9uOgorICAgICAgICAgICAgICAgIGlmICggd2lkdGggPCAwICkgeworICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IHByZWNpc2lvbjsKKyAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uID0gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGdvdG8gcmVzd2l0Y2g7CisKKyAgICAgICAgICAgICAgICAvLyBsb25nIGZsYWcgKGRvdWJsZWQgZm9yIGxvbmcgbG9uZykKKyAgICAgICAgICAgIGNhc2UgJ2wnOgorICAgICAgICAgICAgICAgIGxmbGFnKys7CisgICAgICAgICAgICAgICAgZ290byByZXN3aXRjaDsKKworICAgICAgICAgICAgICAgIC8vIGNoYXJhY3RlcgorICAgICAgICAgICAgY2FzZSAnYyc6CisgICAgICAgICAgICAgICAgcHV0Y2godmFfYXJnKGFwLCBpbnQpLCBwdXRkYXQpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgLy8gc3RyaW5nCisgICAgICAgICAgICBjYXNlICdzJzoKKyAgICAgICAgICAgICAgICBpZiAoIChwID0gdmFfYXJnKGFwLCBjaGFyICopKSA9PSBOVUxMICkKKyAgICAgICAgICAgICAgICAgICAgcCA9ICIobnVsbCkiOworICAgICAgICAgICAgICAgIGlmICggd2lkdGggPiAwICYmIHBhZGMgIT0gJy0nICkKKyAgICAgICAgICAgICAgICAgICAgZm9yICggd2lkdGggLT0gc3RybmxlbihwLCBwcmVjaXNpb24pOyB3aWR0aCA+IDA7IHdpZHRoLS0gKQorICAgICAgICAgICAgICAgICAgICAgICAgcHV0Y2gocGFkYywgcHV0ZGF0KTsKKyAgICAgICAgICAgICAgICBmb3IgKCA7IChjaCA9ICpwKSAhPSAnXDAnICYmIChwcmVjaXNpb24gPCAwIHx8IC0tcHJlY2lzaW9uID49IDApOyB3aWR0aC0tICkgeworICAgICAgICAgICAgICAgICAgICBwdXRjaChjaCwgcHV0ZGF0KTsKKyAgICAgICAgICAgICAgICAgICAgcCsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKCA7IHdpZHRoID4gMDsgd2lkdGgtLSApCisgICAgICAgICAgICAgICAgICAgIHB1dGNoKCcgJywgcHV0ZGF0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIC8vIChzaWduZWQpIGRlY2ltYWwKKyAgICAgICAgICAgIGNhc2UgJ2QnOgorICAgICAgICAgICAgICAgIG51bSA9IGdldGludCgmYXAsIGxmbGFnKTsKKyAgICAgICAgICAgICAgICBpZiAoIChsb25nIGxvbmcpbnVtIDwgMCApIHsKKyAgICAgICAgICAgICAgICAgICAgcHV0Y2goJy0nLCBwdXRkYXQpOworICAgICAgICAgICAgICAgICAgICBudW0gPSAtKGxvbmcgbG9uZyludW07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJhc2UgPSAxMDsKKyAgICAgICAgICAgICAgICBnb3RvIHNpZ25lZF9udW1iZXI7CisKKyAgICAgICAgICAgIGNhc2UgJ2YnOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gI2lmbmRlZiBub3BmbG9hdAorICAgICAgICAgICAgICAgICAgICAvLyBkb3VibGUgbnVtID0gZ2V0ZG91YmxlKCZhcCwgbGZsYWcpOworICAgICAgICAgICAgICAgICAgICAvLyBwcmludGRvdWJsZUYocHV0Y2gsIHB1dGRhdCwgbnVtLCB3aWR0aCwgcHJlY2lzaW9uLCBwYWRjKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gI2VuZGlmCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgLy8gdW5zaWduZWQgZGVjaW1hbAorICAgICAgICAgICAgY2FzZSAndSc6CisgICAgICAgICAgICAgICAgYmFzZSA9IDEwOworICAgICAgICAgICAgICAgIGdvdG8gdW5zaWduZWRfbnVtYmVyOworCisgICAgICAgICAgICAgICAgLy8gKHVuc2lnbmVkKSBvY3RhbAorICAgICAgICAgICAgY2FzZSAnbyc6CisgICAgICAgICAgICAgICAgLy8gc2hvdWxkIGRvIHNvbWV0aGluZyB3aXRoIHBhZGRpbmcgc28gaXQncyBhbHdheXMgMyBvY3RpdHMKKyAgICAgICAgICAgICAgICBiYXNlID0gODsKKyAgICAgICAgICAgICAgICBnb3RvIHVuc2lnbmVkX251bWJlcjsKKworICAgICAgICAgICAgICAgIC8vIHBvaW50ZXIKKyAgICAgICAgICAgIGNhc2UgJ3AnOgorICAgICAgICAgICAgICAgIC8vIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGxvbmcpID09IHNpemVvZih2b2lkKikpOworICAgICAgICAgICAgICAgIGxmbGFnID0gMTsKKyAgICAgICAgICAgICAgICBwdXRjaCgnMCcsIHB1dGRhdCk7CisgICAgICAgICAgICAgICAgcHV0Y2goJ3gnLCBwdXRkYXQpOworICAgICAgICAgICAgICAgIC8qIGZhbGwgdGhyb3VnaCB0byAneCcgKi8KKworICAgICAgICAgICAgICAgIC8vICh1bnNpZ25lZCkgaGV4YWRlY2ltYWwKKyAgICAgICAgICAgIGNhc2UgJ3gnOgorICAgICAgICAgICAgICAgIGhleF9BID0gJ2EnOworICAgICAgICAgICAgICAgIGJhc2UgPSAxNjsKKyAgICAgICAgICAgICAgICBnb3RvIHVuc2lnbmVkX251bWJlcjsKKworICAgICAgICAgICAgY2FzZSAnWCc6CisgICAgICAgICAgICAgICAgaGV4X0EgPSAnQSc7CisgICAgICAgICAgICAgICAgYmFzZSA9IDE2OwordW5zaWduZWRfbnVtYmVyOgorICAgICAgICAgICAgICAgIG51bSA9IGdldHVpbnQoJmFwLCBsZmxhZyk7CitzaWduZWRfbnVtYmVyOgorICAgICAgICAgICAgICAgIHByaW50bnVtKHB1dGNoLCBwdXRkYXQsIG51bSwgYmFzZSwgd2lkdGgsIHBhZGMsIGhleF9BKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIC8vIGVzY2FwZWQgJyUnIGNoYXJhY3RlcgorICAgICAgICAgICAgY2FzZSAnJSc6CisgICAgICAgICAgICAgICAgcHV0Y2goY2gsIHB1dGRhdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAvLyB1bnJlY29nbml6ZWQgZXNjYXBlIHNlcXVlbmNlIC0ganVzdCBwcmludCBpdCBsaXRlcmFsbHkKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcHV0Y2goJyUnLCBwdXRkYXQpOworICAgICAgICAgICAgICAgIGZtdCA9IGxhc3RfZm10OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCitpbnQKK3NjX3ByaW50Zihjb25zdCBjaGFyKiBmbXQsIC4uLikKK3sKKyAgICB2YV9saXN0IGFwOworICAgIHZhX3N0YXJ0KGFwLCBmbXQpOworCisgICAgdnByaW50Zm10KHByaW50Zl9wdXRjaCwgTlVMTCwgZm10LCBhcCk7CisKKyAgICB2YV9lbmQoYXApOworICAgIHJldHVybiAwOyAvLyBpbmNvcnJlY3QgcmV0dXJuIHZhbHVlLCBidXQgd2hvIGNhcmVzLCBhbnl3YXk/Cit9CmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2Zpcm13YXJlL3NjX3ByaW50LmggYi92ZXJpbG9nL2R2L2Zpcm13YXJlL3NjX3ByaW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFkNmI2MQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvc2NfcHJpbnQuaApAQCAtMCwwICsxLDI0IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgICAgICAgIC8vLy8KKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gICAgICAgLy8vLworLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlICAgIC8vLy8KKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsICAgICAgLy8vLworLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuLy8vCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kICAgIC8vLy8KKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4gICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjaWZuZGVmIFNDX1BSSU5UX0gKKyNkZWZpbmUgU0NfUFJJTlRfSAorCitleHRlcm4gaW50IHNjX3ByaW50Zihjb25zdCBjaGFyKiBmbXQsIC4uLik7CisKKyNlbmRpZiAvLyBTQ19QUklOVF9ICmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2Zpcm13YXJlL3NjX3Rlc3QuaCBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvc2NfdGVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNjQ0OGEKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2Zpcm13YXJlL3NjX3Rlc3QuaApAQCAtMCwwICsxLDYyIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgICAgICAgIC8vLy8KKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gICAgICAgLy8vLworLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlICAgIC8vLy8KKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsICAgICAgLy8vLworLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuLy8vCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kICAgIC8vLy8KKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4gICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjaWZuZGVmIFNDX1RFU1RfSAorI2RlZmluZSBTQ19URVNUX0gKKworI2lmIGRlZmluZWQoX19BU1NFTUJMRVJfXykKKy5hbHRtYWNybworCisubWFjcm8gemVyb19pbnRfcmVnIHJlZ24KK212ICAgeFxyZWduLCB6ZXJvCisuZW5kbQorCisubWFjcm8gemVyb19pbnRfcmVncyByZWdfZmlyc3QsIHJlZ19sYXN0Cisuc2V0IHJlZ24sIFxyZWdfZmlyc3QKKy5yZXB0IFxyZWdfbGFzdCAtIFxyZWdfZmlyc3QgKyAxCit6ZXJvX2ludF9yZWcgJShyZWduKQorLnNldCByZWduLCByZWduKzEKKy5lbmRyCisuZW5kbQorCisjZGVmaW5lIHJlcG9ydF9yZXN1bHRzKHJlc3VsdCkgXAorbGkgIGEwLCByZXN1bHQ7ICBcCitsYSB0MCwgc2NfZXhpdDsgIFwKK2pyCSB0MDsKKworLnB1c2hzZWN0aW9uIHNjX3Rlc3Rfc2VjdGlvbiwgImF4Igorc2NfZXhpdDogbGEgdDAsIFNJTV9FWElUOyBqciB0MDsKKy5iYWxpZ24gMzIKKy5wb3BzZWN0aW9uCisjZGVmaW5lIHNjX3Bhc3MgcmVwb3J0X3Jlc3VsdHMoMHgwKQorI2RlZmluZSBzY19mYWlsIHJlcG9ydF9yZXN1bHRzKDB4MSkKKworI2Vsc2UKKworZXh0ZXJuIHZvaWQgc2NfZXhpdCh1bnNpZ25lZCByZXN1bHQsIHVuc2lnbmVkIHJlczAsIHVuc2lnbmVkIHJlczEsIHVuc2lnbmVkIHJlczIsIHVuc2lnbmVkIHJlczMpCisgICAgX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lLCBub3JldHVybikpOworCitzdGF0aWMgaW5saW5lIHZvaWQgIF9fYXR0cmlidXRlX18gKChub3JldHVybikpCityZXBvcnRfcmVzdWx0cyh1bnNpZ25lZCByZXN1bHQsIHVuc2lnbmVkIHJlczAsIHVuc2lnbmVkIHJlczEsIHVuc2lnbmVkIHJlczIsIHVuc2lnbmVkIHJlczMpCit7CisgICAgc2NfZXhpdChyZXN1bHQsIHJlczAsIHJlczEsIHJlczIsIHJlczMpOworfQorCisjZW5kaWYKKworI2VuZGlmIC8vIFNDX1RFU1RfSApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9maXJtd2FyZS95Y3IxX3NwZWNpZmljLmggYi92ZXJpbG9nL2R2L2Zpcm13YXJlL3ljcjFfc3BlY2lmaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjhkNzBmCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9maXJtd2FyZS95Y3IxX3NwZWNpZmljLmgKQEAgLTAsMCArMSwzOCBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7ICAgICAgICAvLy8vCisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuICAgICAgIC8vLy8KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAgICAvLy8vCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAgICAgIC8vLy8KKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLi8vLworLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAgICAvLy8vCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+ICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworI2lmbmRlZiBfX1lDUjFfX1NQRUNJRklDCisjZGVmaW5lIF9fWUNSMV9fU1BFQ0lGSUMKKworI2RlZmluZSBtY291bnRlbiAgICAgICAgMHg3RTAKKworLy8gTWVtb3J5LW1hcHBlZCByZWdpc3RlcnMKKyNkZWZpbmUgbXRpbWVfY3RybCAgICAgIDB4MDA0OTAwMDAKKyNkZWZpbmUgbXRpbWVfZGl2ICAgICAgIDB4MDA0OTAwMDQKKyNkZWZpbmUgbXRpbWUgICAgICAgICAgIDB4MDA0OTAwMDgKKyNkZWZpbmUgbXRpbWVoICAgICAgICAgIDB4MDA0OTAwMEMKKyNkZWZpbmUgbXRpbWVjbXAgICAgICAgIDB4MDA0OTAwMTAKKyNkZWZpbmUgbXRpbWVjbXBoICAgICAgIDB4MDA0OTAwMTQKKworI2RlZmluZSBZQ1IxX01USU1FX0NUUkxfRU4gICAgICAgICAgMAorI2RlZmluZSBZQ1IxX01USU1FX0NUUkxfQ0xLU1JDICAgICAgMQorCisjZGVmaW5lIFlDUjFfTVRJTUVfQ1RSTF9XUl9NQVNLICAgICAweDMKKyNkZWZpbmUgWUNSMV9NVElNRV9ESVZfV1JfTUFTSyAgICAgIDB4M0ZGCisKKyNlbmRpZiAvLyBfWUNSMV9fU1BFQ0lGSUMKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY19ib290L01ha2VmaWxlIGIvdmVyaWxvZy9kdi9yaXNjX2Jvb3QvTWFrZWZpbGUKaW5kZXggZGEzZmIxZS4uNWIxMTQ2YSAxMDA2NDQKLS0tIGEvdmVyaWxvZy9kdi9yaXNjX2Jvb3QvTWFrZWZpbGUKKysrIGIvdmVyaWxvZy9kdi9yaXNjX2Jvb3QvTWFrZWZpbGUKQEAgLTMwLDE0ICszMCwxNCBAQAogVVBSSl9SVExfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL3J0bAogVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMgPSAuLi9tb2RlbAogVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMgPSAuLi9hZ2VudHMKLVVQUkpfSU5DTFVERV9QQVRIMSA9ICQoVVBSSl9SVExfUEFUSCkvc3ludGFjb3JlL3NjcjEvc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDEgPSAkKFVQUkpfUlRMX1BBVEgpL3lpZml2ZS95Y3IxL3NyYy9pbmNsdWRlcwogVVBSSl9JTkNMVURFX1BBVEgyID0gJChVUFJKX1JUTF9QQVRIKS9zZHJhbV9jdHJsL3NyYy9kZWZzCiBVUFJKX0lOQ0xVREVfUEFUSDMgPSAkKFVQUkpfUlRMX1BBVEgpL2kyY20vc3JjL2luY2x1ZGVzCiBVUFJKX0lOQ0xVREVfUEFUSDQgPSAkKFVQUkpfUlRMX1BBVEgpL3VzYjFfaG9zdC9zcmMvaW5jbHVkZXMKIFVQUkpfSU5DTFVERV9QQVRINSA9ICQoVVBSSl9SVExfUEFUSCkvbWJpc3QvaW5jbHVkZQogCi0jIyBTWU5UQUNPUkUgRklSTVdBUkUKLVNZTlRBQ09SRV9GSVJNV0FSRV9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24KKyMjIFlJRklWRSBGSVJNV0FSRQorWUlGSVZFX0ZJUk1XQVJFX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9kdi9maXJtd2FyZQogIyMgUklTQ1YgR0NDIAogR0NDX1BBVEg/PS9lZi9hcHBzL2JpbgogR0NDX1BSRUZJWD89cmlzY3YzMi11bmtub3duLWVsZgpAQCAtNTksOSArNTksOSBAQAogdnZwOiAgJHtQQVRURVJOOj0udnZwfQogCiAlLnZ2cDogJV90Yi52ICUuaGV4Ci0JJHtHQ0M2NF9QUkVGSVh9LWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0xIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLWMgLUkuLyAtSSQoU1lOVEFDT1JFX0ZJUk1XQVJFX1BBVEgpICB1c2VyX3VhcnQuYyAtbyB1c2VyX3VhcnQubwotCSR7R0NDNjRfUFJFRklYfS1nY2MgLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAgLURfX1JWQ19FWFQgLXN0YXRpYyAtc3RkPWdudTk5IC1mbm8tY29tbW9uIC1mbm8tYnVpbHRpbi1wcmludGYgLURUQ009MSAtV2EsLW1hcmNoPXJ2MzJpbWMgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLURGTEFHU19TVFI9XCIiLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAiXCIgIC1EX19BU1NFTUJMWV9fPTEgLWMgLUkuLyAtSSQoU1lOVEFDT1JFX0ZJUk1XQVJFX1BBVEgpICAkKFNZTlRBQ09SRV9GSVJNV0FSRV9QQVRIKS9jcnRfdGNtLlMgLW8gY3J0X3RjbS5vCi0JJHtHQ0M2NF9QUkVGSVh9LWdjYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtVCAkKFNZTlRBQ09SRV9GSVJNV0FSRV9QQVRIKS9saW5rX3RjbS5sZCB1c2VyX3VhcnQubyBjcnRfdGNtLm8gLW5vc3RhcnRmaWxlcyAtbm9zdGRsaWIgLWxjIC1sZ2NjIC1vIHVzZXJfdWFydC5lbGYgLU4KKwkke0dDQzY0X1BSRUZJWH0tZ2NjIC1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIC1EX19SVkNfRVhUIC1zdGF0aWMgLXN0ZD1nbnU5OSAtZm5vLWNvbW1vbiAtZm5vLWJ1aWx0aW4tcHJpbnRmIC1EVENNPTEgLVdhLC1tYXJjaD1ydjMyaW1jIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1ERkxBR1NfU1RSPVwiIi1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIlwiICAtYyAtSS4vIC1JJChZSUZJVkVfRklSTVdBUkVfUEFUSCkgIHVzZXJfdWFydC5jIC1vIHVzZXJfdWFydC5vCisJJHtHQ0M2NF9QUkVGSVh9LWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0xIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLURfX0FTU0VNQkxZX189MSAtYyAtSS4vIC1JJChZSUZJVkVfRklSTVdBUkVfUEFUSCkgICQoWUlGSVZFX0ZJUk1XQVJFX1BBVEgpL2NydF90Y20uUyAtbyBjcnRfdGNtLm8KKwkke0dDQzY0X1BSRUZJWH0tZ2NjIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1UICQoWUlGSVZFX0ZJUk1XQVJFX1BBVEgpL2xpbmtfdGNtLmxkIHVzZXJfdWFydC5vIGNydF90Y20ubyAtbm9zdGFydGZpbGVzIC1ub3N0ZGxpYiAtbGMgLWxnY2MgLW8gdXNlcl91YXJ0LmVsZiAtTgogCSR7R0NDNjRfUFJFRklYfS1vYmpjb3B5IC1PIHZlcmlsb2cgdXNlcl91YXJ0LmVsZiB1c2VyX3VhcnQuaGV4CiAJJHtHQ0M2NF9QUkVGSVh9LW9iamR1bXAgLUQgdXNlcl91YXJ0LmVsZiA+IHVzZXJfdWFydC5kdW1wCiAJcm0gY3J0X3RjbS5vIHVzZXJfdWFydC5vCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvTWFrZWZpbGUgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvTWFrZWZpbGUKaW5kZXggNDg5YjQwZS4uODY4NzA0MyAxMDA2NDQKLS0tIGEvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL01ha2VmaWxlCisrKyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy9NYWtlZmlsZQpAQCAtMTMzLDcgKzEzMyw3IEBACiBVUFJKX0dMX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9nbAogVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMgPSAkKHJvb3RfZGlyKS8uLi9tb2RlbAogVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMgPSAkKHJvb3RfZGlyKS8uLi9hZ2VudHMKLVVQUkpfSU5DTFVERV9QQVRIMSA9ICQoVVBSSl9SVExfUEFUSCkvc3ludGFjb3JlL3NjcjEvc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDEgPSAkKFVQUkpfUlRMX1BBVEgpL3lpZml2ZS95Y3IxL3NyYy9pbmNsdWRlcwogVVBSSl9JTkNMVURFX1BBVEgyID0gJChVUFJKX1JUTF9QQVRIKS9zZHJhbV9jdHJsL3NyYy9kZWZzCiBVUFJKX0lOQ0xVREVfUEFUSDMgPSAkKFVQUkpfUlRMX1BBVEgpL2kyY20vc3JjL2luY2x1ZGVzCiBVUFJKX0lOQ0xVREVfUEFUSDQgPSAkKFVQUkpfUlRMX1BBVEgpL3VzYjFfaG9zdC9zcmMvaW5jbHVkZXMKQEAgLTE0Myw5ICsxNDMsOSBAQAogdG9wX21vZHVsZSAgICAgICAgID0gdXNlcl9yaXNjX3JlZ3Jlc3NfdGIKIAogIyBUQiBQYXRocwotZXhwb3J0IHNpbV9kaXIgIDo9ICQoVVBSSl9SVExfUEFUSCkvc3ludGFjb3JlL3NjcjEvc2ltCitleHBvcnQgc2ltX2RpciAgOj0gJChVUFJKX1RFU1RTX1BBVEgpCiBleHBvcnQgdHN0X2RpciAgOj0gJChzaW1fZGlyKS90ZXN0cwotZXhwb3J0IGluY19kaXIgIDo9ICQodHN0X2RpcikvY29tbW9uCitleHBvcnQgaW5jX2RpciAgOj0gJChVUFJKX1ZFUklMT0dfUEFUSCkvZHYvZmlybXdhcmUKIAogdGVzdF9yZXN1bHRzIDo9ICQoYmxkX2RpcikvdGVzdF9yZXN1bHRzLnR4dAogdGVzdF9pbmZvICAgIDo9ICQoYmxkX2RpcikvdGVzdF9pbmZvCkBAIC0xNzQsMTQgKzE3NCwxNCBAQAogaWZlcSAoLCQoZmluZHN0cmluZyBlLCQoQVJDSF9sb3dlcmNhc2UpKSkKIAkjIFRoZXNlIHRlc3RzIGNhbm5vdCBiZSBjb21waWxlZCBmb3IgUlZFCiAJIyBDb21tZW50IHRoaXMgdGFyZ2V0IGlmIHlvdSBkb24ndCB3YW50IHRvIHJ1biB0aGUgcmlzY3ZfaXNhCi0JI1RBUkdFVFMgKz0gcmlzY3ZfaXNhCisJVEFSR0VUUyArPSByaXNjdl9pc2EKIAogCSMgQ29tbWVudCB0aGlzIHRhcmdldCBpZiB5b3UgZG9uJ3Qgd2FudCB0byBydW4gdGhlIHJpc2N2X2NvbXBsaWFuY2UKIAkjVEFSR0VUUyArPSByaXNjdl9jb21wbGlhbmNlCiBlbmRpZgogCiAjIENvbW1lbnQgdGhpcyB0YXJnZXQgaWYgeW91IGRvbid0IHdhbnQgdG8gcnVuIHRoZSBpc3Jfc2FtcGxlCi1UQVJHRVRTICs9IGlzcl9zYW1wbGUKKyNUQVJHRVRTICs9IGlzcl9zYW1wbGUKIAogIyBDb21tZW50IHRoaXMgdGFyZ2V0IGlmIHlvdSBkb24ndCB3YW50IHRvIHJ1biB0aGUgY29yZW1hcmsKICNUQVJHRVRTICs9IGNvcmVtYXJrCkBAIC0xOTAsNyArMTkwLDcgQEAKICNUQVJHRVRTICs9IGRocnlzdG9uZTIxCiAKICMgQ29tbWVudCB0aGlzIHRhcmdldCBpZiB5b3UgZG9uJ3Qgd2FudCB0byBydW4gdGhlIGhlbGxvIHRlc3QKLVRBUkdFVFMgKz0gaGVsbG8KKyNUQVJHRVRTICs9IGhlbGxvCiAKIAogIyBUYXJnZXRzCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvYmVuY2htYXJrcy9jb3JlbWFyay9NYWtlZmlsZSBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9iZW5jaG1hcmtzL2NvcmVtYXJrL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MDYyM2IKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvYmVuY2htYXJrcy9jb3JlbWFyay9NYWtlZmlsZQpAQCAtMCwwICsxLDI2IEBACitzcmNfZGlyIDo9ICQoZGlyICQobGFzdHdvcmQgJChNQUtFRklMRV9MSVNUKSkpCitkZXBlbmRfZGlyIDo9ICQoc3JjX2RpcikvLi4vLi4vLi4vZGVwZW5kZW5jaWVzL2NvcmVtYXJrCisKK2lmZXEgKCIkKElURVJBVElPTlMpIiwiIikKK0lURVJBVElPTlM9MQorZW5kaWYKKworQUREX0NGTEFHUyAgKz0gLURJVEVSQVRJT05TPSQoSVRFUkFUSU9OUykKK0FERF9WUEFUSCAgIDo9ICQoZGVwZW5kX2RpcikKK0FERF9pbmNzICAgIDo9IC1JJChzcmNfZGlyKS9zcmMgLUkkKGRlcGVuZF9kaXIpCisKK2Nfc3JjIDo9IGNvcmVfcG9ydG1lLmMgc2NfcHJpbnQuYyAKK2NvcmVtYXJrX3NyYyA6PSAuL3NyYy9jb3JlX2xpc3Rfam9pbi5jIC4vc3JjL2NvcmVfbWF0cml4LmMgLi9zcmMvY29yZV9tYWluLmMgLi9zcmMvY29yZV91dGlsLmMgLi9zcmMvY29yZV9zdGF0ZS5jCitjX3NyYyArPSBjb3JlX2xpc3Rfam9pbi5jIGNvcmVfbWF0cml4LmMgY29yZV9tYWluLmMgY29yZV91dGlsLmMgY29yZV9zdGF0ZS5jCisKK2luY2x1ZGUgJChpbmNfZGlyKS9jb21tb24ubWsKKworCitkZWZhdWx0OiBsb2dfcmVxdWVzdGVkX3RndCAgJChibGRfZGlyKS9jb3JlbWFyay5lbGYgJChibGRfZGlyKS9jb3JlbWFyay5oZXggJChibGRfZGlyKS9jb3JlbWFyay5kdW1wIAorCitsb2dfcmVxdWVzdGVkX3RndDoKKwllY2hvIGNvcmVtYXJrLmhleD4+ICQoYmxkX2RpcikvdGVzdF9pbmZvCisJZWNobyAkKGluY19kaXIpL2NvbW1vbi5taworCitjbGVhbjoKKwkkKFJNKSAkKGNfb2JqcykgJChhc21fb2JqcykgJChibGRfZGlyKS9jb3JlbWFyay5oZXggJChibGRfZGlyKS9jb3JlbWFyay5kdW1wIApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL2JlbmNobWFya3MvY29yZW1hcmsvY29yZV9wb3J0bWUuYyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9iZW5jaG1hcmtzL2NvcmVtYXJrL2NvcmVfcG9ydG1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M4MDFmNwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9iZW5jaG1hcmtzL2NvcmVtYXJrL2NvcmVfcG9ydG1lLmMKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisJRmlsZSA6IGNvcmVfcG9ydG1lLmMKKyovCisvKgorCUF1dGhvciA6IFNoYXkgR2FsLU9uLCBFRU1CQworCUxlZ2FsIDogVE9ETyEKKyovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJjb3JlbWFyay5oIgorI2luY2x1ZGUgImNvcmVfcG9ydG1lLmgiCisjaW5jbHVkZSAicmlzY3ZfY3NyX2VuY29kaW5nLmgiCisjaW5jbHVkZSAic2NfdGVzdC5oIgorCisjaWYgVkFMSURBVElPTl9SVU4KKwl2b2xhdGlsZSBlZV9zMzIgc2VlZDFfdm9sYXRpbGU9MHgzNDE1OworCXZvbGF0aWxlIGVlX3MzMiBzZWVkMl92b2xhdGlsZT0weDM0MTU7CisJdm9sYXRpbGUgZWVfczMyIHNlZWQzX3ZvbGF0aWxlPTB4NjY7CisjZW5kaWYKKyNpZiBQRVJGT1JNQU5DRV9SVU4KKwl2b2xhdGlsZSBlZV9zMzIgc2VlZDFfdm9sYXRpbGU9MHgwOworCXZvbGF0aWxlIGVlX3MzMiBzZWVkMl92b2xhdGlsZT0weDA7CisJdm9sYXRpbGUgZWVfczMyIHNlZWQzX3ZvbGF0aWxlPTB4NjY7CisjZW5kaWYKKyNpZiBQUk9GSUxFX1JVTgorCXZvbGF0aWxlIGVlX3MzMiBzZWVkMV92b2xhdGlsZT0weDg7CisJdm9sYXRpbGUgZWVfczMyIHNlZWQyX3ZvbGF0aWxlPTB4ODsKKwl2b2xhdGlsZSBlZV9zMzIgc2VlZDNfdm9sYXRpbGU9MHg4OworI2VuZGlmCisJdm9sYXRpbGUgZWVfczMyIHNlZWQ0X3ZvbGF0aWxlPUlURVJBVElPTlM7CisJdm9sYXRpbGUgZWVfczMyIHNlZWQ1X3ZvbGF0aWxlPTA7CisKKy8qIFBvcnRpbmcgOiBUaW1pbmcgZnVuY3Rpb25zCisJSG93IHRvIGNhcHR1cmUgdGltZSBhbmQgY29udmVydCB0byBzZWNvbmRzIG11c3QgYmUgcG9ydGVkIHRvIHdoYXRldmVyIGlzIHN1cHBvcnRlZCBieSB0aGUgcGxhdGZvcm0uCisJZS5nLiBSZWFkIHZhbHVlIGZyb20gb24gYm9hcmQgUlRDLCByZWFkIHZhbHVlIGZyb20gY3B1IGNsb2NrIGN5Y2xlcyBwZXJmb3JtYW5jZSBjb3VudGVyIGV0Yy4KKwlTYW1wbGUgaW1wbGVtZW50YXRpb24gZm9yIHN0YW5kYXJkIHRpbWUuaCBhbmQgd2luZG93cy5oIGRlZmluaXRpb25zIGluY2x1ZGVkLgorKi8KKyNpZiAxCitDT1JFVElNRVRZUEUgYmFyZWJvbmVzX2Nsb2NrKCkgeworCXVuc2lnbmVkIGxvbmcgbjsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSJyZHRpbWUgJTAiCisJCTogIj1yIiAobikpOworCXJldHVybiBuOworfQorI2RlZmluZSBDTE9DS1NfUEVSX1NFQwkxMDAwMDAwMAorCisvKiBEZWZpbmUgOiBUSU1FUl9SRVNfRElWSURFUgorCURpdmlkZXIgdG8gdHJhZGUgb2ZmIHRpbWVyIHJlc29sdXRpb24gYW5kIHRvdGFsIHRpbWUgdGhhdCBjYW4gYmUgbWVhc3VyZWQuCisKKwlVc2UgbG93ZXIgdmFsdWVzIHRvIGluY3JlYXNlIHJlc29sdXRpb24sIGJ1dCBtYWtlIHN1cmUgdGhhdCBvdmVyZmxvdyBkb2VzIG5vdCBvY2N1ci4KKwlJZiB0aGVyZSBhcmUgaXNzdWVzIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvdmVyZmxvd2luZywgaW5jcmVhc2UgdGhpcyB2YWx1ZS4KKwkqLworLyogI2RlZmluZSBOU0VDU19QRVJfU0VDIENMT0NLU19QRVJfU0VDICovCisvKiAjZGVmaW5lIENPUkVUSU1FVFlQRSBjbG9ja190ICovCisjZGVmaW5lIEdFVE1ZVElNRShfdCkgKCpfdD1iYXJlYm9uZXNfY2xvY2soKSkKKyNkZWZpbmUgTVlUSU1FRElGRihmaW4saW5pKSAoKGZpbiktKGluaSkpCisjZGVmaW5lIFRJTUVSX1JFU19ESVZJREVSIDEKKyNkZWZpbmUgU0FNUExFX1RJTUVfSU1QTEVNRU5UQVRJT04gMQorI2RlZmluZSBFRV9USUNLU19QRVJfU0VDIChDTE9DS1NfUEVSX1NFQyAvIFRJTUVSX1JFU19ESVZJREVSKQorI2Vsc2UKKworI2VuZGlmCisKKy8qKiBEZWZpbmUgSG9zdCBzcGVjaWZpYyAoUE9TSVgpLCBvciB0YXJnZXQgc3BlY2lmaWMgZ2xvYmFsIHRpbWUgdmFyaWFibGVzLiAqLworc3RhdGljIENPUkVUSU1FVFlQRSBzdGFydF90aW1lX3ZhbCwgc3RvcF90aW1lX3ZhbDsKKworLyogRnVuY3Rpb24gOiBzdGFydF90aW1lCisJVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCByaWdodCBiZWZvcmUgc3RhcnRpbmcgdGhlIHRpbWVkIHBvcnRpb24gb2YgdGhlIGJlbmNobWFyay4KKworCUltcGxlbWVudGF0aW9uIG1heSBiZSBjYXB0dXJpbmcgYSBzeXN0ZW0gdGltZXIgKGFzIGltcGxlbWVudGVkIGluIHRoZSBleGFtcGxlIGNvZGUpCisJb3IgemVyb2luZyBzb21lIHN5c3RlbSBwYXJhbWV0ZXJzIC0gZS5nLiBzZXR0aW5nIHRoZSBjcHUgY2xvY2tzIGN5Y2xlcyB0byAwLgorKi8KK3ZvaWQgc3RhcnRfdGltZSh2b2lkKSB7CisJR0VUTVlUSU1FKCZzdGFydF90aW1lX3ZhbCApOworfQorLyogRnVuY3Rpb24gOiBzdG9wX3RpbWUKKwlUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHJpZ2h0IGFmdGVyIGVuZGluZyB0aGUgdGltZWQgcG9ydGlvbiBvZiB0aGUgYmVuY2htYXJrLgorCisJSW1wbGVtZW50YXRpb24gbWF5IGJlIGNhcHR1cmluZyBhIHN5c3RlbSB0aW1lciAoYXMgaW1wbGVtZW50ZWQgaW4gdGhlIGV4YW1wbGUgY29kZSkKKwlvciBvdGhlciBzeXN0ZW0gcGFyYW1ldGVycyAtIGUuZy4gcmVhZGluZyB0aGUgY3VycmVudCB2YWx1ZSBvZiBjcHUgY3ljbGVzIGNvdW50ZXIuCisqLwordm9pZCBzdG9wX3RpbWUodm9pZCkgeworCUdFVE1ZVElNRSgmc3RvcF90aW1lX3ZhbCApOworfQorLyogRnVuY3Rpb24gOiBnZXRfdGltZQorCVJldHVybiBhbiBhYnN0cmFjdCAidGlja3MiIG51bWJlciB0aGF0IHNpZ25pZmllcyB0aW1lIG9uIHRoZSBzeXN0ZW0uCisKKwlBY3R1YWwgdmFsdWUgcmV0dXJuZWQgbWF5IGJlIGNwdSBjeWNsZXMsIG1pbGxpc2Vjb25kcyBvciBhbnkgb3RoZXIgdmFsdWUsCisJYXMgbG9uZyBhcyBpdCBjYW4gYmUgY29udmVydGVkIHRvIHNlY29uZHMgYnkgPHRpbWVfaW5fc2Vjcz4uCisJVGhpcyBtZXRob2RvbG9neSBpcyB0YWtlbiB0byBhY2NvbW9kYXRlIGFueSBoYXJkd2FyZSBvciBzaW11bGF0ZWQgcGxhdGZvcm0uCisJVGhlIHNhbXBsZSBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG1pbGxpc2VjcyBieSBkZWZhdWx0LAorCWFuZCB0aGUgcmVzb2x1dGlvbiBpcyBjb250cm9sbGVkIGJ5IDxUSU1FUl9SRVNfRElWSURFUj4KKyovCitDT1JFX1RJQ0tTIGdldF90aW1lKHZvaWQpIHsKKwlDT1JFX1RJQ0tTIGVsYXBzZWQ9KENPUkVfVElDS1MpKE1ZVElNRURJRkYoc3RvcF90aW1lX3ZhbCwgc3RhcnRfdGltZV92YWwpKTsKKwlyZXR1cm4gZWxhcHNlZDsKK30KKy8qIEZ1bmN0aW9uIDogdGltZV9pbl9zZWNzCisJQ29udmVydCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgZ2V0X3RpbWUgdG8gc2Vjb25kcy4KKworCVRoZSA8c2Vjc19yZXQ+IHR5cGUgaXMgdXNlZCB0byBhY2NvbW9kYXRlIHN5c3RlbXMgd2l0aCBubyBzdXBwb3J0IGZvciBmbG9hdGluZyBwb2ludC4KKwlEZWZhdWx0IGltcGxlbWVudGF0aW9uIGltcGxlbWVudGVkIGJ5IHRoZSBFRV9USUNLU19QRVJfU0VDIG1hY3JvIGFib3ZlLgorKi8KK3NlY3NfcmV0IHRpbWVfaW5fc2VjcyhDT1JFX1RJQ0tTIHRpY2tzKSB7CisJc2Vjc19yZXQgcmV0dmFsPSgoc2Vjc19yZXQpdGlja3MpIC8gKHNlY3NfcmV0KUVFX1RJQ0tTX1BFUl9TRUM7CisJcmV0dXJuIHJldHZhbDsKK30KKworZWVfdTMyIGRlZmF1bHRfbnVtX2NvbnRleHRzPTE7CisKKy8qIEZ1bmN0aW9uIDogcG9ydGFibGVfaW5pdAorCVRhcmdldCBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiBjb2RlCisJVGVzdCBmb3Igc29tZSBjb21tb24gbWlzdGFrZXMuCisqLwordm9pZCBwb3J0YWJsZV9pbml0KGNvcmVfcG9ydGFibGUgKnAsIGludCAqYXJnYywgY2hhciAqYXJndltdKQoreworICAgIGVlX3ByaW50ZigiQ29yZU1hcmsgMS4wXG4iKTsKKwlpZiAoc2l6ZW9mKGVlX3B0cl9pbnQpICE9IHNpemVvZihlZV91OCAqKSkgeworCQllZV9wcmludGYoIkVSUk9SISBQbGVhc2UgZGVmaW5lIGVlX3B0cl9pbnQgdG8gYSB0eXBlIHRoYXQgaG9sZHMgYSBwb2ludGVyISAoJXUgIT0gJXUpXG4iLCBzaXplb2YoZWVfcHRyX2ludCksIHNpemVvZihlZV91OCAqKSk7CisJfQorCWlmIChzaXplb2YoZWVfdTMyKSAhPSA0KSB7CisJCWVlX3ByaW50ZigiRVJST1IhIFBsZWFzZSBkZWZpbmUgZWVfdTMyIHRvIGEgMzJiIHVuc2lnbmVkIHR5cGUhICgldSlcbiIsIHNpemVvZihlZV91MzIpKTsKKwl9CisJcC0+cG9ydGFibGVfaWQ9MTsKK30KKy8qIEZ1bmN0aW9uIDogcG9ydGFibGVfZmluaQorCVRhcmdldCBzcGVjaWZpYyBmaW5hbCBjb2RlCisqLwordm9pZCBwb3J0YWJsZV9maW5pKGNvcmVfcG9ydGFibGUgKnApCit7CisJcC0+cG9ydGFibGVfaWQ9MDsKKworICAgIHJlcG9ydF9yZXN1bHRzKDAsIDAsIDAsIDAsIDApOworCisgICAgLyogcmVzdWx0c1swXS5pdGVyYXRpb25zICogMTAwMDAwMDAvKHRvdGFsX3RpbWUpICovCisKKyAgICAvKiBleHRlcm4gdm9pZCB0b2hvc3RfZXhpdChsb25nIGNvZGUpOyAqLworCisgICAgLyogdG9ob3N0X2V4aXQoMCk7ICovCit9CmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvYmVuY2htYXJrcy9jb3JlbWFyay9jb3JlX3BvcnRtZS5oIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL2JlbmNobWFya3MvY29yZW1hcmsvY29yZV9wb3J0bWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTc5MzBmCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL2JlbmNobWFya3MvY29yZW1hcmsvY29yZV9wb3J0bWUuaApAQCAtMCwwICsxLDIxMCBAQAorLyogRmlsZSA6IGNvcmVfcG9ydG1lLmggKi8KKworLyoKKwlBdXRob3IgOiBTaGF5IEdhbC1PbiwgRUVNQkMKKwlMZWdhbCA6IFRPRE8hCisqLworLyogVG9waWMgOiBEZXNjcmlwdGlvbgorCVRoaXMgZmlsZSBjb250YWlucyBjb25maWd1cmF0aW9uIGNvbnN0YW50cyByZXF1aXJlZCB0byBleGVjdXRlIG9uIGRpZmZlcmVudCBwbGF0Zm9ybXMKKyovCisjaWZuZGVmIENPUkVfUE9SVE1FX0gKKyNkZWZpbmUgQ09SRV9QT1JUTUVfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERhdGEgdHlwZXMgYW5kIHNldHRpbmdzICovCisvKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQ29uZmlndXJhdGlvbiA6IEhBU19GTE9BVAorCURlZmluZSB0byAxIGlmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBmbG9hdGluZyBwb2ludC4KKyovCisjaWZuZGVmIEhBU19GTE9BVAorI2RlZmluZSBIQVNfRkxPQVQgMAorI2VuZGlmCisvKiBDb25maWd1cmF0aW9uIDogSEFTX1RJTUVfSAorCURlZmluZSB0byAxIGlmIHBsYXRmb3JtIGhhcyB0aGUgdGltZS5oIGhlYWRlciBmaWxlLAorCWFuZCBpbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgdGhlcmVvZi4KKyovCisjaWZuZGVmIEhBU19USU1FX0gKKyNkZWZpbmUgSEFTX1RJTUVfSCAwCisjZW5kaWYKKy8qIENvbmZpZ3VyYXRpb24gOiBVU0VfQ0xPQ0sKKwlEZWZpbmUgdG8gMSBpZiBwbGF0Zm9ybSBoYXMgdGhlIHRpbWUuaCBoZWFkZXIgZmlsZSwKKwlhbmQgaW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIHRoZXJlb2YuCisqLworI2lmbmRlZiBVU0VfQ0xPQ0sKKyNkZWZpbmUgVVNFX0NMT0NLIDAKKyNlbmRpZgorLyogQ29uZmlndXJhdGlvbiA6IEhBU19TVERJTworCURlZmluZSB0byAxIGlmIHRoZSBwbGF0Zm9ybSBoYXMgc3RkaW8uaC4KKyovCisjaWZuZGVmIEhBU19TVERJTworI2RlZmluZSBIQVNfU1RESU8gMQorI2VuZGlmCisvKiBDb25maWd1cmF0aW9uIDogSEFTX1BSSU5URgorCURlZmluZSB0byAxIGlmIHRoZSBwbGF0Zm9ybSBoYXMgc3RkaW8uaCBhbmQgaW1wbGVtZW50cyB0aGUgcHJpbnRmIGZ1bmN0aW9uLgorKi8KKyNpZm5kZWYgSEFTX1BSSU5URgorI2RlZmluZSBIQVNfUFJJTlRGIDAKKyNlbmRpZgorCisjaW5jbHVkZSAic2NfcHJpbnQuaCIKKyNkZWZpbmUgZWVfcHJpbnRmIHNjX3ByaW50ZgorCisvKiBzdGF0aWMgaW5saW5lIGludCBlZV9wcmludGYoY29uc3QgY2hhciAqZm10LCAuLi4pIHt9ICovCisKKy8qIENvbmZpZ3VyYXRpb24gOiBDT1JFX1RJQ0tTCisJRGVmaW5lIHR5cGUgb2YgcmV0dXJuIGZyb20gdGhlIHRpbWluZyBmdW5jdGlvbnMuCisgKi8KKy8qICNpbmNsdWRlIDx0aW1lLmg+ICovCisvKiB0eXBlZGVmIGNsb2NrX3QgQ09SRV9USUNLUzsgKi8KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNkZWZpbmUgQ09SRVRJTUVUWVBFIHVpbnQzMl90Cit0eXBlZGVmIHVpbnQzMl90IENPUkVfVElDS1M7CisKKy8qIERlZmluaXRpb25zIDogQ09NUElMRVJfVkVSU0lPTiwgQ09NUElMRVJfRkxBR1MsIE1FTV9MT0NBVElPTgorCUluaXRpYWxpemUgdGhlc2Ugc3RyaW5ncyBwZXIgcGxhdGZvcm0KKyovCisjaWZuZGVmIENPTVBJTEVSX1ZFUlNJT04KKyAjaWZkZWYgX19HTlVDX18KKyAjZGVmaW5lIENPTVBJTEVSX1ZFUlNJT04gIkdDQyJfX1ZFUlNJT05fXworICNlbHNlCisgI2RlZmluZSBDT01QSUxFUl9WRVJTSU9OICJQbGVhc2UgcHV0IGNvbXBpbGVyIHZlcnNpb24gaGVyZSAoZS5nLiBnY2MgNC4xKSIKKyAjZW5kaWYKKyNlbmRpZgorI2lmbmRlZiBDT01QSUxFUl9GTEFHUworICNkZWZpbmUgQ09NUElMRVJfRkxBR1MgRkxBR1NfU1RSIC8qICJQbGVhc2UgcHV0IGNvbXBpbGVyIGZsYWdzIGhlcmUgKGUuZy4gLW8zKSIgKi8KKyNlbmRpZgorI2lmbmRlZiBNRU1fTE9DQVRJT04KKyAvKiAjZGVmaW5lIE1FTV9MT0NBVElPTiAiU1RBQ0siICovCisgI2RlZmluZSBNRU1fTE9DQVRJT04gIlNUQVRJQyIKKyNlbmRpZgorCisvKiBEYXRhIFR5cGVzIDoKKwlUbyBhdm9pZCBjb21waWxlciBpc3N1ZXMsIGRlZmluZSB0aGUgZGF0YSB0eXBlcyB0aGF0IG5lZWQgb3QgYmUgdXNlZCBmb3IgOGIsIDE2YiBhbmQgMzJiIGluIDxjb3JlX3BvcnRtZS5oPi4KKworCSpJbXBydGFudCogOgorCWVlX3B0cl9pbnQgbmVlZHMgdG8gYmUgdGhlIGRhdGEgdHlwZSB1c2VkIHRvIGhvbGQgcG9pbnRlcnMsIG90aGVyd2lzZSBjb3JlbWFyayBtYXkgZmFpbCEhIQorKi8KK3R5cGVkZWYgaW50MTZfdCBlZV9zMTY7Cit0eXBlZGVmIHVpbnQxNl90IGVlX3UxNjsKK3R5cGVkZWYgaW50MzJfdCBlZV9zMzI7Cit0eXBlZGVmIGZsb2F0IGVlX2YzMjsKK3R5cGVkZWYgdWludDhfdCBlZV91ODsKK3R5cGVkZWYgdWludDMyX3QgZWVfdTMyOwordHlwZWRlZiB1aW50cHRyX3QgZWVfcHRyX2ludDsKK3R5cGVkZWYgc2l6ZV90IGVlX3NpemVfdDsKKy8qIGFsaWduX21lbSA6CisJVGhpcyBtYWNybyBpcyB1c2VkIHRvIGFsaWduIGFuIG9mZnNldCB0byBwb2ludCB0byBhIDMyYiB2YWx1ZS4gSXQgaXMgdXNlZCBpbiB0aGUgTWF0cml4IGFsZ29yaXRobSB0byBpbml0aWFsaXplIHRoZSBpbnB1dCBtZW1vcnkgYmxvY2tzLgorKi8KKyNkZWZpbmUgYWxpZ25fbWVtKHgpICh2b2lkICopKDQgKyAoKChlZV9wdHJfaW50KSh4KSAtIDEpICYgfjMpKQorCisvKiBDb25maWd1cmF0aW9uIDogU0VFRF9NRVRIT0QKKwlEZWZpbmVzIG1ldGhvZCB0byBnZXQgc2VlZCB2YWx1ZXMgdGhhdCBjYW5ub3QgYmUgY29tcHV0ZWQgYXQgY29tcGlsZSB0aW1lLgorCisJVmFsaWQgdmFsdWVzIDoKKwlTRUVEX0FSRyAtIGZyb20gY29tbWFuZCBsaW5lLgorCVNFRURfRlVOQyAtIGZyb20gYSBzeXN0ZW0gZnVuY3Rpb24uCisJU0VFRF9WT0xBVElMRSAtIGZyb20gdm9sYXRpbGUgdmFyaWFibGVzLgorKi8KKyNpZm5kZWYgU0VFRF9NRVRIT0QKKyNkZWZpbmUgU0VFRF9NRVRIT0QgU0VFRF9WT0xBVElMRQorI2VuZGlmCisKKy8qIENvbmZpZ3VyYXRpb24gOiBNRU1fTUVUSE9ECisJRGVmaW5lcyBtZXRob2QgdG8gZ2V0IGEgYmxvY2sgb2YgbWVtcnkuCisKKwlWYWxpZCB2YWx1ZXMgOgorCU1FTV9NQUxMT0MgLSBmb3IgcGxhdGZvcm1zIHRoYXQgaW1wbGVtZW50IG1hbGxvYyBhbmQgaGF2ZSBtYWxsb2MuaC4KKwlNRU1fU1RBVElDIC0gdG8gdXNlIGEgc3RhdGljIG1lbW9yeSBhcnJheS4KKwlNRU1fU1RBQ0sgLSB0byBhbGxvY2F0ZSB0aGUgZGF0YSBibG9jayBvbiB0aGUgc3RhY2sgKE5ZSSkuCisqLworI2lmbmRlZiBNRU1fTUVUSE9ECisvKiAjZGVmaW5lIE1FTV9NRVRIT0QgTUVNX1NUQUNLICovCisjZGVmaW5lIE1FTV9NRVRIT0QgTUVNX1NUQVRJQworI2VuZGlmCisKKy8qIENvbmZpZ3VyYXRpb24gOiBNVUxUSVRIUkVBRAorCURlZmluZSBmb3IgcGFyYWxsZWwgZXhlY3V0aW9uCisKKwlWYWxpZCB2YWx1ZXMgOgorCTEgLSBvbmx5IG9uZSBjb250ZXh0IChkZWZhdWx0KS4KKwlOPjEgLSB3aWxsIGV4ZWN1dGUgTiBjb3BpZXMgaW4gcGFyYWxsZWwuCisKKwlOb3RlIDoKKwlJZiB0aGlzIGZsYWcgaXMgZGVmaW5lZCB0byBtb3JlIHRoZW4gMSwgYW4gaW1wbGVtZW50YXRpb24gZm9yIGxhdW5jaGluZyBwYXJhbGxlbCBjb250ZXh0cyBtdXN0IGJlIGRlZmluZWQuCisKKwlUd28gc2FtcGxlIGltcGxlbWVudGF0aW9ucyBhcmUgcHJvdmlkZWQuIFVzZSA8VVNFX1BUSFJFQUQ+IG9yIDxVU0VfRk9SSz4gdG8gZW5hYmxlIHRoZW0uCisKKwlJdCBpcyB2YWxpZCB0byBoYXZlIGEgZGlmZmVyZW50IGltcGxlbWVudGF0aW9uIG9mIDxjb3JlX3N0YXJ0X3BhcmFsbGVsPiBhbmQgPGNvcmVfZW5kX3BhcmFsbGVsPiBpbiA8Y29yZV9wb3J0bWUuYz4sCisJdG8gZml0IGEgcGFydGljdWxhciBhcmNoaXRlY3R1cmUuCisqLworI2lmbmRlZiBNVUxUSVRIUkVBRAorI2RlZmluZSBNVUxUSVRIUkVBRCAxCisjZGVmaW5lIFVTRV9QVEhSRUFEIDAKKyNkZWZpbmUgVVNFX0ZPUksgMAorI2RlZmluZSBVU0VfU09DS0VUIDAKKyNlbmRpZgorCisvKiBDb25maWd1cmF0aW9uIDogTUFJTl9IQVNfTk9BUkdDCisJTmVlZGVkIGlmIHBsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQgZ2V0dGluZyBhcmd1bWVudHMgdG8gbWFpbi4KKworCVZhbGlkIHZhbHVlcyA6CisJMCAtIGFyZ2MvYXJndiB0byBtYWluIGlzIHN1cHBvcnRlZAorCTEgLSBhcmdjL2FyZ3YgdG8gbWFpbiBpcyBub3Qgc3VwcG9ydGVkCisKKwlOb3RlIDoKKwlUaGlzIGZsYWcgb25seSBtYXR0ZXJzIGlmIE1VTFRJVEhSRUFEIGhhcyBiZWVuIGRlZmluZWQgdG8gYSB2YWx1ZSBncmVhdGVyIHRoZW4gMS4KKyovCisjaWZuZGVmIE1BSU5fSEFTX05PQVJHQworI2RlZmluZSBNQUlOX0hBU19OT0FSR0MgMQorI2VuZGlmCisKKy8qIENvbmZpZ3VyYXRpb24gOiBNQUlOX0hBU19OT1JFVFVSTgorCU5lZWRlZCBpZiBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IHJldHVybmluZyBhIHZhbHVlIGZyb20gbWFpbi4KKworCVZhbGlkIHZhbHVlcyA6CisJMCAtIG1haW4gcmV0dXJucyBhbiBpbnQsIGFuZCByZXR1cm4gdmFsdWUgd2lsbCBiZSAwLgorCTEgLSBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IHJldHVybmluZyBhIHZhbHVlIGZyb20gbWFpbgorKi8KKyNpZm5kZWYgTUFJTl9IQVNfTk9SRVRVUk4KKyNkZWZpbmUgTUFJTl9IQVNfTk9SRVRVUk4gMAorI2VuZGlmCisKKy8qIFZhcmlhYmxlIDogZGVmYXVsdF9udW1fY29udGV4dHMKKwlOb3QgdXNlZCBmb3IgdGhpcyBzaW1wbGUgcG9ydCwgbXVzdCBjaW50YWluIHRoZSB2YWx1ZSAxLgorKi8KK2V4dGVybiBlZV91MzIgZGVmYXVsdF9udW1fY29udGV4dHM7CisKK3R5cGVkZWYgc3RydWN0IENPUkVfUE9SVEFCTEVfUyB7CisJZWVfdTgJcG9ydGFibGVfaWQ7Cit9IGNvcmVfcG9ydGFibGU7CisKKy8qIHRhcmdldCBzcGVjaWZpYyBpbml0L2ZpbmkgKi8KK3ZvaWQgcG9ydGFibGVfaW5pdChjb3JlX3BvcnRhYmxlICpwLCBpbnQgKmFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Cit2b2lkIHBvcnRhYmxlX2ZpbmkoY29yZV9wb3J0YWJsZSAqcCk7CisKKyNpZiAhZGVmaW5lZChQUk9GSUxFX1JVTikgJiYgIWRlZmluZWQoUEVSRk9STUFOQ0VfUlVOKSAmJiAhZGVmaW5lZChWQUxJREFUSU9OX1JVTikKKyNpZiAoVE9UQUxfREFUQV9TSVpFPT0xMjAwKQorI2RlZmluZSBQUk9GSUxFX1JVTiAxCisjZWxpZiAoVE9UQUxfREFUQV9TSVpFPT0yMDAwKQorI2RlZmluZSBQRVJGT1JNQU5DRV9SVU4gMQorI2Vsc2UKKyNkZWZpbmUgVkFMSURBVElPTl9SVU4gMQorI2VuZGlmCisjZW5kaWYKKwordHlwZWRlZiBlZV9zMTYgTUFUREFUOwordHlwZWRlZiBlZV9zMzIgTUFUUkVTOworCisKK2VlX3UxNiBjcmN1OChlZV91OCBkYXRhLCBlZV91MTYgY3JjICkgX19hdHRyaWJ1dGVfXyAoKGhvdCkpOworZWVfdTE2IGNyY3UxNihlZV91MTYgbmV3dmFsLCBlZV91MTYgY3JjKSBfX2F0dHJpYnV0ZV9fICgoaG90KSk7CitlZV91MTYgY3JjdTMyKGVlX3UzMiBuZXd2YWwsIGVlX3UxNiBjcmMpIF9fYXR0cmlidXRlX18gKChob3QpKTsKK2VlX3UxNiBjcmMxNihlZV9zMTYgbmV3dmFsLCBlZV91MTYgY3JjKSBfX2F0dHJpYnV0ZV9fICgoaG90KSk7CitlZV9zMTYgbWF0cml4X3N1bShlZV91MzIgTiwgTUFUUkVTICpDLCBNQVREQVQgY2xpcHZhbCkgX19hdHRyaWJ1dGVfXyAoKGhvdCkpOwordm9pZCBtYXRyaXhfbXVsX2NvbnN0KGVlX3UzMiBOLCBNQVRSRVMgKkMsIE1BVERBVCAqQSwgTUFUREFUIHZhbCkgX19hdHRyaWJ1dGVfXyAoKGhvdCkpOwordm9pZCBtYXRyaXhfbXVsX3ZlY3QoZWVfdTMyIE4sIE1BVFJFUyAqQywgTUFUREFUICpBLCBNQVREQVQgKkIpIF9fYXR0cmlidXRlX18gKChob3QpKTsKK3ZvaWQgbWF0cml4X211bF9tYXRyaXgoZWVfdTMyIE4sIE1BVFJFUyAqQywgTUFUREFUICpBLCBNQVREQVQgKkIpIF9fYXR0cmlidXRlX18gKChob3QpKTsKK3ZvaWQgbWF0cml4X211bF9tYXRyaXhfYml0ZXh0cmFjdChlZV91MzIgTiwgTUFUUkVTICpDLCBNQVREQVQgKkEsIE1BVERBVCAqQikgX19hdHRyaWJ1dGVfXyAoKGhvdCkpOwordm9pZCBtYXRyaXhfYWRkX2NvbnN0KGVlX3UzMiBOLCBNQVREQVQgKkEsIE1BVERBVCB2YWwpIF9fYXR0cmlidXRlX18gKChob3QpKTsKKworI2VuZGlmIC8qIENPUkVfUE9SVE1FX0ggKi8KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9iZW5jaG1hcmtzL2RocnlzdG9uZTIxL01ha2VmaWxlIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL2JlbmNobWFya3MvZGhyeXN0b25lMjEvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA1NjQ4OQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9iZW5jaG1hcmtzL2RocnlzdG9uZTIxL01ha2VmaWxlCkBAIC0wLDAgKzEsMTYgQEAKK3NyY19kaXIgOj0gJChkaXIgJChsYXN0d29yZCAkKE1BS0VGSUxFX0xJU1QpKSkKKworQUREX0ZMQUdTICAgOj0gLWZsdG8KK0FERF9DRkxBR1MgIDo9IC1EU0VMRl9USU1FRD0xIC1EVElNRT0xCisKK2Nfc3JjIDo9IHNjX3ByaW50LmMgZGhyeV8xLmMgZGhyeV8yLmMKKworaW5jbHVkZSAkKGluY19kaXIpL2NvbW1vbi5taworCitkZWZhdWx0OiBsb2dfcmVxdWVzdGVkX3RndCAkKGJsZF9kaXIpL2RocnlzdG9uZTIxLmVsZiAkKGJsZF9kaXIpL2RocnlzdG9uZTIxLmhleCAkKGJsZF9kaXIpL2RocnlzdG9uZTIxLmR1bXAKKworbG9nX3JlcXVlc3RlZF90Z3Q6CisJQGVjaG8gZGhyeXN0b25lMjEuaGV4Pj4gJChibGRfZGlyKS90ZXN0X2luZm8KKworY2xlYW46CisJJChSTSkgJChjX29ianMpICQoYXNtX29ianMpICQoYmxkX2RpcikvZGhyeXN0b25lMjEuZWxmICQoYmxkX2RpcikvZGhyeXN0b25lMjEuaGV4ICQoYmxkX2RpcikvZGhyeXN0b25lMjEuZHVtcApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9iZW5jaG1hcmtzL2RocnlzdG9uZTIxL2RocnkuaCBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9iZW5jaG1hcmtzL2RocnlzdG9uZTIxL2RocnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmEwMDU5Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL2JlbmNobWFya3MvZGhyeXN0b25lMjEvZGhyeS5oCkBAIC0wLDAgKzEsNDQ2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBUaGUgQllURSBVTklYIEJlbmNobWFya3MgLSBSZWxlYXNlIDMKKyAqICAgICAgICAgIE1vZHVsZTogZGhyeS5oICAgU0lEOiAzLjQgNS8xNS85MSAxOTozMDoyMQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQnVnIHJlcG9ydHMsIHBhdGNoZXMsIGNvbW1lbnRzLCBzdWdnZXN0aW9ucyBzaG91bGQgYmUgc2VudCB0bzoKKyAqCisgKglCZW4gU21pdGgsIFJpY2sgR3JlaGFuIG9yIFRvbSBZYWdlcgorICoJYmVuQGJ5dGVwYi5ieXRlLmNvbSAgIHJpY2tfZ0BieXRlcGIuYnl0ZS5jb20gICB0eWFnZXJAYnl0ZXBiLmJ5dGUuY29tCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgTW9kaWZpY2F0aW9uIExvZzoKKyAqICBhZGRhcHRlZCBmcm9tOgorICoKKyAqCisgKiAgICAgICAgICAgICAgICAgICAiREhSWVNUT05FIiBCZW5jaG1hcmsgUHJvZ3JhbQorICogICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiAgVmVyc2lvbjogICAgQywgVmVyc2lvbiAyLjEKKyAqCisgKiAgRmlsZTogICAgICAgZGhyeS5oIChwYXJ0IDEgb2YgMykKKyAqCisgKiAgRGF0ZTogICAgICAgTWF5IDI1LCAxOTg4CisgKgorICogIEF1dGhvcjogICAgIFJlaW5ob2xkIFAuIFdlaWNrZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIFNpZW1lbnMgQUcsIEFVVCBFIDUxCisgKiAgICAgICAgICAgICAgICAgICAgICBQb3N0ZmFjaCAzMjIwCisgKiAgICAgICAgICAgICAgICAgICAgICA4NTIwIEVybGFuZ2VuCisgKiAgICAgICAgICAgICAgICAgICAgICBHZXJtYW55IChXZXN0KQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaG9uZTogIFsrNDldLTkxMzEtNy0yMDMzMAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg4LTE3IENlbnRyYWwgRXVyb3BlYW4gVGltZSkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlbmV0OiAuLiFtY3ZheCF1bmlkbyFlc3RldmF4IXdlaWNrZXIKKyAqCisgKiAgICAgICAgICAgICAgT3JpZ2luYWwgVmVyc2lvbiAoaW4gQWRhKSBwdWJsaXNoZWQgaW4KKyAqICAgICAgICAgICAgICAiQ29tbXVuaWNhdGlvbnMgb2YgdGhlIEFDTSIgdm9sLiAyNy4sIG5vLiAxMCAoT2N0LiAxOTg0KSwKKyAqICAgICAgICAgICAgICBwcC4gMTAxMyAtIDEwMzAsIHRvZ2V0aGVyIHdpdGggdGhlIHN0YXRpc3RpY3MKKyAqICAgICAgICAgICAgICBvbiB3aGljaCB0aGUgZGlzdHJpYnV0aW9uIG9mIHN0YXRlbWVudHMgZXRjLiBpcyBiYXNlZC4KKyAqCisgKiAgICAgICAgICAgICAgSW4gdGhpcyBDIHZlcnNpb24sIHRoZSBmb2xsb3dpbmcgQyBsaWJyYXJ5IGZ1bmN0aW9ucyBhcmUgdXNlZDoKKyAqICAgICAgICAgICAgICAtIHN0cmNweSwgc3RyY21wIChpbnNpZGUgdGhlIG1lYXN1cmVtZW50IGxvb3ApCisgKiAgICAgICAgICAgICAgLSBwcmludGYsIHNjYW5mIChvdXRzaWRlIHRoZSBtZWFzdXJlbWVudCBsb29wKQorICogICAgICAgICAgICAgIEluIGFkZGl0aW9uLCBCZXJrZWxleSBVTklYIHN5c3RlbSBjYWxscyAidGltZXMgKCkiIG9yICJ0aW1lICgpIgorICogICAgICAgICAgICAgIGFyZSB1c2VkIGZvciBleGVjdXRpb24gdGltZSBtZWFzdXJlbWVudC4gRm9yIG1lYXN1cmVtZW50cworICogICAgICAgICAgICAgIG9uIG90aGVyIHN5c3RlbXMsIHRoZXNlIGNhbGxzIGhhdmUgdG8gYmUgY2hhbmdlZC4KKyAqCisgKiAgQ29sbGVjdGlvbiBvZiBSZXN1bHRzOgorICogICAgICAgICAgICAgIFJlaW5ob2xkIFdlaWNrZXIgKGFkZHJlc3Mgc2VlIGFib3ZlKSBhbmQKKyAqCisgKiAgICAgICAgICAgICAgUmljayBSaWNoYXJkc29uCisgKiAgICAgICAgICAgICAgUEMgUmVzZWFyY2guIEluYy4KKyAqICAgICAgICAgICAgICA5NCBBcHBsZSBPcmNoYXJkIERyaXZlCisgKiAgICAgICAgICAgICAgVGludG9uIEZhbGxzLCBOSiAwNzcyNAorICogICAgICAgICAgICAgICAgICAgICAgUGhvbmU6ICAoMjAxKSA4MzQtMTM3OCAoOS0xNyBFU1QpCisgKiAgICAgICAgICAgICAgICAgICAgICBVc2VuZXQ6IC4uLiFzZWlzbW8hdXVuZXQhcGNyYXQhcmljaworICoKKyAqICAgICAgUGxlYXNlIHNlbmQgcmVzdWx0cyB0byBSaWNrIFJpY2hhcmRzb24gYW5kL29yIFJlaW5ob2xkIFdlaWNrZXIuCisgKiAgICAgIENvbXBsZXRlIGluZm9ybWF0aW9uIHNob3VsZCBiZSBnaXZlbiBvbiBoYXJkd2FyZSBhbmQgc29mdHdhcmUgdXNlZC4KKyAqICAgICAgSGFyZHdhcmUgaW5mb3JtYXRpb24gaW5jbHVkZXM6IE1hY2hpbmUgdHlwZSwgQ1BVLCB0eXBlIGFuZCBzaXplCisgKiAgICAgIG9mIGNhY2hlczsgZm9yIG1pY3JvcHJvY2Vzc29yczogY2xvY2sgZnJlcXVlbmN5LCBtZW1vcnkgc3BlZWQKKyAqICAgICAgKG51bWJlciBvZiB3YWl0IHN0YXRlcykuCisgKiAgICAgIFNvZnR3YXJlIGluZm9ybWF0aW9uIGluY2x1ZGVzOiBDb21waWxlciAoYW5kIHJ1bnRpbWUgbGlicmFyeSkKKyAqICAgICAgbWFudWZhY3R1cmVyIGFuZCB2ZXJzaW9uLCBjb21waWxhdGlvbiBzd2l0Y2hlcywgT1MgdmVyc2lvbi4KKyAqICAgICAgVGhlIE9wZXJhdGluZyBTeXN0ZW0gdmVyc2lvbiBtYXkgZ2l2ZSBhbiBpbmRpY2F0aW9uIGFib3V0IHRoZQorICogICAgICBjb21waWxlcjsgRGhyeXN0b25lIGl0c2VsZiBwZXJmb3JtcyBubyBPUyBjYWxscyBpbiB0aGUgbWVhc3VyZW1lbnQgbG9vcC4KKyAqCisgKiAgICAgIFRoZSBjb21wbGV0ZSBvdXRwdXQgZ2VuZXJhdGVkIGJ5IHRoZSBwcm9ncmFtIHNob3VsZCBiZSBtYWlsZWQKKyAqICAgICAgc3VjaCB0aGF0IGF0IGxlYXN0IHNvbWUgY2hlY2tzIGZvciBjb3JyZWN0bmVzcyBjYW4gYmUgbWFkZS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIEhpc3Rvcnk6ICAgIFRoaXMgdmVyc2lvbiBDLzIuMSBoYXMgYmVlbiBtYWRlIGZvciB0d28gcmVhc29uczoKKyAqCisgKiAgICAgICAgICAgICAgMSkgVGhlcmUgaXMgYW4gb2J2aW91cyBuZWVkIGZvciBhIGNvbW1vbiBDIHZlcnNpb24gb2YKKyAqICAgICAgICAgICAgICBEaHJ5c3RvbmUsIHNpbmNlIEMgaXMgYXQgcHJlc2VudCB0aGUgbW9zdCBwb3B1bGFyIHN5c3RlbQorICogICAgICAgICAgICAgIHByb2dyYW1taW5nIGxhbmd1YWdlIGZvciB0aGUgY2xhc3Mgb2YgcHJvY2Vzc29ycworICogICAgICAgICAgICAgIChtaWNyb2NvbXB1dGVycywgbWluaWNvbXB1dGVycykgd2hlcmUgRGhyeXN0b25lIGlzIHVzZWQgbW9zdC4KKyAqICAgICAgICAgICAgICBUaGVyZSBzaG91bGQgYmUsIGFzIGZhciBhcyBwb3NzaWJsZSwgb25seSBvbmUgQyB2ZXJzaW9uIG9mCisgKiAgICAgICAgICAgICAgRGhyeXN0b25lIHN1Y2ggdGhhdCByZXN1bHRzIGNhbiBiZSBjb21wYXJlZCB3aXRob3V0CisgKiAgICAgICAgICAgICAgcmVzdHJpY3Rpb25zLiBJbiB0aGUgcGFzdCwgdGhlIEMgdmVyc2lvbnMgZGlzdHJpYnV0ZWQKKyAqICAgICAgICAgICAgICBieSBSaWNrIFJpY2hhcmRzb24gKFZlcnNpb24gMS4xKSBhbmQgYnkgUmVpbmhvbGQgV2VpY2tlcgorICogICAgICAgICAgICAgIGhhZCBzbWFsbCAodGhvdWdoIG5vdCBzaWduaWZpY2FudCkgZGlmZmVyZW5jZXMuCisgKgorICogICAgICAgICAgICAgIDIpIEFzIGZhciBhcyBpdCBpcyBwb3NzaWJsZSB3aXRob3V0IGNoYW5nZXMgdG8gdGhlIERocnlzdG9uZQorICogICAgICAgICAgICAgIHN0YXRpc3RpY3MsIG9wdGltaXppbmcgY29tcGlsZXJzIHNob3VsZCBiZSBwcmV2ZW50ZWQgZnJvbQorICogICAgICAgICAgICAgIHJlbW92aW5nIHNpZ25pZmljYW50IHN0YXRlbWVudHMuCisgKgorICogICAgICAgICAgICAgIFRoaXMgQyB2ZXJzaW9uIGhhcyBiZWVuIGRldmVsb3BlZCBpbiBjb29wZXJhdGlvbiB3aXRoCisgKiAgICAgICAgICAgICAgUmljayBSaWNoYXJkc29uIChUaW50b24gRmFsbHMsIE5KKSwgaXQgaW5jb3Jwb3JhdGVzIG1hbnkKKyAqICAgICAgICAgICAgICBpZGVhcyBmcm9tIHRoZSAiVmVyc2lvbiAxLjEiIGRpc3RyaWJ1dGVkIHByZXZpb3VzbHkgYnkKKyAqICAgICAgICAgICAgICBoaW0gb3ZlciB0aGUgVU5JWCBuZXR3b3JrIFVzZW5ldC4KKyAqICAgICAgICAgICAgICBJIGFsc28gdGhhbmsgQ2hhaW0gQmVuZWRlbGFjIChOYXRpb25hbCBTZW1pY29uZHVjdG9yKSwKKyAqICAgICAgICAgICAgICBEYXZpZCBEaXR6ZWwgKFNVTiksIEVhcmwgS2lsbGlhbiBhbmQgSm9obiBNYXNoZXkgKE1JUFMpLAorICogICAgICAgICAgICAgIEFsYW4gU21pdGggYW5kIFJhZmFlbCBTYWF2ZWRyYS1CYXJyZXJhIChVQyBhdCBCZXJrZWxleSkKKyAqICAgICAgICAgICAgICBmb3IgdGhlaXIgaGVscCB3aXRoIGNvbW1lbnRzIG9uIGVhcmxpZXIgdmVyc2lvbnMgb2YgdGhlCisgKiAgICAgICAgICAgICAgYmVuY2htYXJrLgorICoKKyAqICBDaGFuZ2VzOiAgICBJbiB0aGUgaW5pdGlhbGl6YXRpb24gcGFydCwgdGhpcyB2ZXJzaW9uIGZvbGxvd3MgbW9zdGx5CisgKiAgICAgICAgICAgICAgUmljayBSaWNoYXJkc29uJ3MgdmVyc2lvbiBkaXN0cmlidXRlZCB2aWEgVXNlbmV0LCBub3QgdGhlCisgKiAgICAgICAgICAgICAgdmVyc2lvbiBkaXN0cmlidXRlZCBlYXJsaWVyIHZpYSBmbG9wcHkgZGlzayBieSBSZWluaG9sZCBXZWlja2VyLgorICogICAgICAgICAgICAgIEFzIGEgY29uY2Vzc2lvbiB0byBvbGRlciBjb21waWxlcnMsIG5hbWVzIGhhdmUgYmVlbiBtYWRlCisgKiAgICAgICAgICAgICAgdW5pcXVlIHdpdGhpbiB0aGUgZmlyc3QgOCBjaGFyYWN0ZXJzLgorICogICAgICAgICAgICAgIEluc2lkZSB0aGUgbWVhc3VyZW1lbnQgbG9vcCwgdGhpcyB2ZXJzaW9uIGZvbGxvd3MgdGhlCisgKiAgICAgICAgICAgICAgdmVyc2lvbiBwcmV2aW91c2x5IGRpc3RyaWJ1dGVkIGJ5IFJlaW5ob2xkIFdlaWNrZXIuCisgKgorICogICAgICAgICAgICAgIEF0IHNldmVyYWwgcGxhY2VzIGluIHRoZSBiZW5jaG1hcmssIGNvZGUgaGFzIGJlZW4gYWRkZWQsCisgKiAgICAgICAgICAgICAgYnV0IHdpdGhpbiB0aGUgbWVhc3VyZW1lbnQgbG9vcCBvbmx5IGluIGJyYW5jaGVzIHRoYXQKKyAqICAgICAgICAgICAgICBhcmUgbm90IGV4ZWN1dGVkLiBUaGUgaW50ZW50aW9uIGlzIHRoYXQgb3B0aW1pemluZyBjb21waWxlcnMKKyAqICAgICAgICAgICAgICBzaG91bGQgYmUgcHJldmVudGVkIGZyb20gbW92aW5nIGNvZGUgb3V0IG9mIHRoZSBtZWFzdXJlbWVudAorICogICAgICAgICAgICAgIGxvb3AsIG9yIGZyb20gcmVtb3ZpbmcgY29kZSBhbHRvZ2V0aGVyLiBTaW5jZSB0aGUgc3RhdGVtZW50cworICogICAgICAgICAgICAgIHRoYXQgYXJlIGV4ZWN1dGVkIHdpdGhpbiB0aGUgbWVhc3VyZW1lbnQgbG9vcCBoYXZlIE5PVCBiZWVuCisgKiAgICAgICAgICAgICAgY2hhbmdlZCwgdGhlIG51bWJlcnMgZGVmaW5pbmcgdGhlICJEaHJ5c3RvbmUgZGlzdHJpYnV0aW9uIgorICogICAgICAgICAgICAgIChkaXN0cmlidXRpb24gb2Ygc3RhdGVtZW50cywgb3BlcmFuZCB0eXBlcyBhbmQgbG9jYWxpdHkpCisgKiAgICAgICAgICAgICAgc3RpbGwgaG9sZC4gRXhjZXB0IGZvciBzb3BoaXN0aWNhdGVkIG9wdGltaXppbmcgY29tcGlsZXJzLAorICogICAgICAgICAgICAgIGV4ZWN1dGlvbiB0aW1lcyBmb3IgdGhpcyB2ZXJzaW9uIHNob3VsZCBiZSB0aGUgc2FtZSBhcworICogICAgICAgICAgICAgIGZvciBwcmV2aW91cyB2ZXJzaW9ucy4KKyAqCisgKiAgICAgICAgICAgICAgU2luY2UgaXQgaGFzIHByb3ZlbiBkaWZmaWN1bHQgdG8gc3VidHJhY3QgdGhlIHRpbWUgZm9yIHRoZQorICogICAgICAgICAgICAgIG1lYXN1cmVtZW50IGxvb3Agb3ZlcmhlYWQgaW4gYSBjb3JyZWN0IHdheSwgdGhlIGxvb3AgY2hlY2sKKyAqICAgICAgICAgICAgICBoYXMgYmVlbiBtYWRlIGEgcGFydCBvZiB0aGUgYmVuY2htYXJrLiBUaGlzIGRvZXMgaGF2ZQorICogICAgICAgICAgICAgIGFuIGltcGFjdCAtIHRob3VnaCBhIHZlcnkgbWlub3Igb25lIC0gb24gdGhlIGRpc3RyaWJ1dGlvbgorICogICAgICAgICAgICAgIHN0YXRpc3RpY3Mgd2hpY2ggaGF2ZSBiZWVuIHVwZGF0ZWQgZm9yIHRoaXMgdmVyc2lvbi4KKyAqCisgKiAgICAgICAgICAgICAgQWxsIGNoYW5nZXMgd2l0aGluIHRoZSBtZWFzdXJlbWVudCBsb29wIGFyZSBkZXNjcmliZWQKKyAqICAgICAgICAgICAgICBhbmQgZGlzY3Vzc2VkIGluIHRoZSBjb21wYW5pb24gcGFwZXIgIlJhdGlvbmFsZSBmb3IKKyAqICAgICAgICAgICAgICBEaHJ5c3RvbmUgdmVyc2lvbiAyIi4KKyAqCisgKiAgICAgICAgICAgICAgQmVjYXVzZSBvZiB0aGUgc2VsZi1pbXBvc2VkIGxpbWl0YXRpb24gdGhhdCB0aGUgb3JkZXIgYW5kCisgKiAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uIG9mIHRoZSBleGVjdXRlZCBzdGF0ZW1lbnRzIHNob3VsZCBub3QgYmUKKyAqICAgICAgICAgICAgICBjaGFuZ2VkLCB0aGVyZSBhcmUgc3RpbGwgY2FzZXMgd2hlcmUgb3B0aW1pemluZyBjb21waWxlcnMKKyAqICAgICAgICAgICAgICBtYXkgbm90IGdlbmVyYXRlIGNvZGUgZm9yIHNvbWUgc3RhdGVtZW50cy4gVG8gYSBjZXJ0YWluCisgKiAgICAgICAgICAgICAgZGVncmVlLCB0aGlzIGlzIHVuYXZvaWRhYmxlIGZvciBzbWFsbCBzeW50aGV0aWMgYmVuY2htYXJrcy4KKyAqICAgICAgICAgICAgICBVc2VycyBvZiB0aGUgYmVuY2htYXJrIGFyZSBhZHZpc2VkIHRvIGNoZWNrIGNvZGUgbGlzdGluZ3MKKyAqICAgICAgICAgICAgICB3aGV0aGVyIGNvZGUgaXMgZ2VuZXJhdGVkIGZvciBhbGwgc3RhdGVtZW50cyBvZiBEaHJ5c3RvbmUuCisgKgorICogICAgICAgICAgICAgIFZlcnNpb24gMi4xIGlzIGlkZW50aWNhbCB0byB2ZXJzaW9uIDIuMCBkaXN0cmlidXRlZCB2aWEKKyAqICAgICAgICAgICAgICB0aGUgVU5JWCBuZXR3b3JrIFVzZW5ldCBpbiBNYXJjaCAxOTg4IGV4Y2VwdCB0aGF0IGl0IGNvcnJlY3RzCisgKiAgICAgICAgICAgICAgc29tZSBtaW5vciBkZWZpY2llbmNpZXMgdGhhdCB3ZXJlIGZvdW5kIGJ5IHVzZXJzIG9mIHZlcnNpb24gMi4wLgorICogICAgICAgICAgICAgIFRoZSBvbmx5IGNoYW5nZSB3aXRoaW4gdGhlIG1lYXN1cmVtZW50IGxvb3AgaXMgdGhhdCBhCisgKiAgICAgICAgICAgICAgbm9uLWV4ZWN1dGVkICJlbHNlIiBwYXJ0IHdhcyBhZGRlZCB0byB0aGUgImlmIiBzdGF0ZW1lbnQgaW4KKyAqICAgICAgICAgICAgICBGdW5jXzMsIGFuZCBhIG5vbi1leGVjdXRlZCAiZWxzZSIgcGFydCByZW1vdmVkIGZyb20gUHJvY18zLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBEZWZpbmVzOiAgICAgVGhlIGZvbGxvd2luZyAiRGVmaW5lcyIgYXJlIHBvc3NpYmxlOgorICogICAgICAgICAgICAgIC1EUkVHPXJlZ2lzdGVyICAgICAgICAgIChkZWZhdWx0OiBOb3QgZGVmaW5lZCkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFzIGFuIGFwcHJveGltYXRpb24gdG8gd2hhdCBhbiBhdmVyYWdlIEMgcHJvZ3JhbW1lcgorICogICAgICAgICAgICAgICAgICAgICAgbWlnaHQgZG8sIHRoZSAicmVnaXN0ZXIiIHN0b3JhZ2UgY2xhc3MgaXMgYXBwbGllZAorICogICAgICAgICAgICAgICAgICAgICAgKGlmIGVuYWJsZWQgYnkgLURSRUc9cmVnaXN0ZXIpCisgKiAgICAgICAgICAgICAgICAgICAgICAtIGZvciBsb2NhbCB2YXJpYWJsZXMsIGlmIHRoZXkgYXJlIHVzZWQgKGR5bmFtaWNhbGx5KQorICogICAgICAgICAgICAgICAgICAgICAgICBmaXZlIG9yIG1vcmUgdGltZXMKKyAqICAgICAgICAgICAgICAgICAgICAgIC0gZm9yIHBhcmFtZXRlcnMgaWYgdGhleSBhcmUgdXNlZCAoZHluYW1pY2FsbHkpCisgKiAgICAgICAgICAgICAgICAgICAgICAgIHNpeCBvciBtb3JlIHRpbWVzCisgKiAgICAgICAgICAgICAgICAgICAgICBOb3RlIHRoYXQgYW4gb3B0aW1hbCAicmVnaXN0ZXIiIHN0cmF0ZWd5IGlzCisgKiAgICAgICAgICAgICAgICAgICAgICBjb21waWxlci1kZXBlbmRlbnQsIGFuZCB0aGF0ICJyZWdpc3RlciIgZGVjbGFyYXRpb25zCisgKiAgICAgICAgICAgICAgICAgICAgICBkbyBub3QgbmVjZXNzYXJpbHkgbGVhZCB0byBmYXN0ZXIgZXhlY3V0aW9uLgorICogICAgICAgICAgICAgIC1ETk9TVFJVQ1RBU1NJR04gICAgICAgIChkZWZhdWx0OiBOb3QgZGVmaW5lZCkKKyAqICAgICAgICAgICAgICAgICAgICAgIERlZmluZSBpZiB0aGUgQyBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0CisgKiAgICAgICAgICAgICAgICAgICAgICBhc3NpZ25tZW50IG9mIHN0cnVjdHVyZXMuCisgKiAgICAgICAgICAgICAgLUROT0VOVU1TICAgICAgICAgICAgICAgKGRlZmF1bHQ6IE5vdCBkZWZpbmVkKQorICogICAgICAgICAgICAgICAgICAgICAgRGVmaW5lIGlmIHRoZSBDIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQKKyAqICAgICAgICAgICAgICAgICAgICAgIGVudW1lcmF0aW9uIHR5cGVzLgorICogICAgICAgICAgICAgIC1EVElNRVMgICAgICAgICAgICAgICAgIChkZWZhdWx0KQorICogICAgICAgICAgICAgIC1EVElNRQorICogICAgICAgICAgICAgICAgICAgICAgVGhlICJ0aW1lcyIgZnVuY3Rpb24gb2YgVU5JWCAocmV0dXJuaW5nIHByb2Nlc3MgdGltZXMpCisgKiAgICAgICAgICAgICAgICAgICAgICBvciB0aGUgInRpbWUiIGZ1bmN0aW9uIChyZXR1cm5pbmcgd2FsbGNsb2NrIHRpbWUpCisgKiAgICAgICAgICAgICAgICAgICAgICBpcyB1c2VkIGZvciBtZWFzdXJlbWVudC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEZvciBzaW5nbGUgdXNlciBtYWNoaW5lcywgInRpbWUgKCkiIGlzIGFkZXF1YXRlLiBGb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIG11bHRpLXVzZXIgbWFjaGluZXMgd2hlcmUgeW91IGNhbm5vdCBnZXQgc2luZ2xlLXVzZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIGFjY2VzcywgdXNlIHRoZSAidGltZXMgKCkiIGZ1bmN0aW9uLiBJZiB5b3UgaGF2ZQorICogICAgICAgICAgICAgICAgICAgICAgbmVpdGhlciwgdXNlIGEgc3RvcHdhdGNoIGluIHRoZSBkZWFkIG9mIG5pZ2h0LgorICogICAgICAgICAgICAgICAgICAgICAgInByaW50ZiJzIGFyZSBwcm92aWRlZCBtYXJraW5nIHRoZSBwb2ludHMgIlN0YXJ0IFRpbWVyIgorICogICAgICAgICAgICAgICAgICAgICAgYW5kICJTdG9wIFRpbWVyIi4gRE8gTk9UIHVzZSB0aGUgVU5JWCAidGltZSgxKSIKKyAqICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQsIGFzIHRoaXMgd2lsbCBtZWFzdXJlIHRoZSB0b3RhbCB0aW1lIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICBydW4gdGhpcyBwcm9ncmFtLCB3aGljaCB3aWxsIChlcnJvbmVvdXNseSkgaW5jbHVkZQorICogICAgICAgICAgICAgICAgICAgICAgdGhlIHRpbWUgdG8gYWxsb2NhdGUgc3RvcmFnZSAobWFsbG9jKSBhbmQgdG8gcGVyZm9ybQorICogICAgICAgICAgICAgICAgICAgICAgdGhlIGluaXRpYWxpemF0aW9uLgorICogICAgICAgICAgICAgIC1ESFo9bm5uCisgKiAgICAgICAgICAgICAgICAgICAgICBJbiBCZXJrZWxleSBVTklYLCB0aGUgZnVuY3Rpb24gInRpbWVzIiByZXR1cm5zIHByb2Nlc3MKKyAqICAgICAgICAgICAgICAgICAgICAgIHRpbWUgaW4gMS9IWiBzZWNvbmRzLCB3aXRoIEhaID0gNjAgZm9yIG1vc3Qgc3lzdGVtcy4KKyAqICAgICAgICAgICAgICAgICAgICAgIENIRUNLIFlPVVIgU1lTVEVNIERFU0NSSVBUSU9OIEJFRk9SRSBZT1UgSlVTVCBBUFBMWQorICogICAgICAgICAgICAgICAgICAgICAgQSBWQUxVRS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIENvbXBpbGF0aW9uIG1vZGVsIGFuZCBtZWFzdXJlbWVudCAoSU1QT1JUQU5UKToKKyAqCisgKiAgVGhpcyBDIHZlcnNpb24gb2YgRGhyeXN0b25lIGNvbnNpc3RzIG9mIHRocmVlIGZpbGVzOgorICogIC0gZGhyeS5oICh0aGlzIGZpbGUsIGNvbnRhaW5pbmcgZ2xvYmFsIGRlZmluaXRpb25zIGFuZCBjb21tZW50cykKKyAqICAtIGRocnlfMS5jIChjb250YWluaW5nIHRoZSBjb2RlIGNvcnJlc3BvbmRpbmcgdG8gQWRhIHBhY2thZ2UgUGFja18xKQorICogIC0gZGhyeV8yLmMgKGNvbnRhaW5pbmcgdGhlIGNvZGUgY29ycmVzcG9uZGluZyB0byBBZGEgcGFja2FnZSBQYWNrXzIpCisgKgorICogIFRoZSBmb2xsb3dpbmcgImdyb3VuZCBydWxlcyIgYXBwbHkgZm9yIG1lYXN1cmVtZW50czoKKyAqICAtIFNlcGFyYXRlIGNvbXBpbGF0aW9uCisgKiAgLSBObyBwcm9jZWR1cmUgbWVyZ2luZworICogIC0gT3RoZXJ3aXNlLCBjb21waWxlciBvcHRpbWl6YXRpb25zIGFyZSBhbGxvd2VkIGJ1dCBzaG91bGQgYmUgaW5kaWNhdGVkCisgKiAgLSBEZWZhdWx0IHJlc3VsdHMgYXJlIHRob3NlIHdpdGhvdXQgcmVnaXN0ZXIgZGVjbGFyYXRpb25zCisgKiAgU2VlIHRoZSBjb21wYW5pb24gcGFwZXIgIlJhdGlvbmFsZSBmb3IgRGhyeXN0b25lIFZlcnNpb24gMiIgZm9yIGEgbW9yZQorICogIGRldGFpbGVkIGRpc2N1c3Npb24gb2YgdGhlc2UgZ3JvdW5kIHJ1bGVzLgorICoKKyAqICBGb3IgMTYtQml0IHByb2Nlc3NvcnMgKGUuZy4gODAxODYsIDgwMjg2KSwgdGltZXMgZm9yIGFsbCBjb21waWxhdGlvbgorICogIG1vZGVscyAoInNtYWxsIiwgIm1lZGl1bSIsICJsYXJnZSIgZXRjLikgc2hvdWxkIGJlIGdpdmVuIGlmIHBvc3NpYmxlLAorICogIHRvZ2V0aGVyIHdpdGggYSBkZWZpbml0aW9uIG9mIHRoZXNlIG1vZGVscyBmb3IgdGhlIGNvbXBpbGVyIHN5c3RlbSB1c2VkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBEaHJ5c3RvbmUgKEMgdmVyc2lvbikgc3RhdGlzdGljczoKKyAqCisgKiAgW0NvbW1lbnQgZnJvbSB0aGUgZmlyc3QgZGlzdHJpYnV0aW9uLCB1cGRhdGVkIGZvciB2ZXJzaW9uIDIuCisgKiAgIE5vdGUgdGhhdCBiZWNhdXNlIG9mIGxhbmd1YWdlIGRpZmZlcmVuY2VzLCB0aGUgbnVtYmVycyBhcmUgc2xpZ2h0bHkKKyAqICAgZGlmZmVyZW50IGZyb20gdGhlIEFkYSB2ZXJzaW9uLl0KKyAqCisgKiAgVGhlIGZvbGxvd2luZyBwcm9ncmFtIGNvbnRhaW5zIHN0YXRlbWVudHMgb2YgYSBoaWdoIGxldmVsIHByb2dyYW1taW5nCisgKiAgbGFuZ3VhZ2UgKGhlcmU6IEMpIGluIGEgZGlzdHJpYnV0aW9uIGNvbnNpZGVyZWQgcmVwcmVzZW50YXRpdmU6CisgKgorICogICAgYXNzaWdubWVudHMgICAgICAgICAgICAgICAgICA1MiAoNTEuMCAlKQorICogICAgY29udHJvbCBzdGF0ZW1lbnRzICAgICAgICAgICAzMyAoMzIuNCAlKQorICogICAgcHJvY2VkdXJlLCBmdW5jdGlvbiBjYWxscyAgICAxNyAoMTYuNyAlKQorICoKKyAqICAxMDMgc3RhdGVtZW50cyBhcmUgZHluYW1pY2FsbHkgZXhlY3V0ZWQuIFRoZSBwcm9ncmFtIGlzIGJhbGFuY2VkIHdpdGgKKyAqICByZXNwZWN0IHRvIHRoZSB0aHJlZSBhc3BlY3RzOgorICoKKyAqICAgIC0gc3RhdGVtZW50IHR5cGUKKyAqICAgIC0gb3BlcmFuZCB0eXBlCisgKiAgICAtIG9wZXJhbmQgbG9jYWxpdHkKKyAqICAgICAgICAgb3BlcmFuZCBnbG9iYWwsIGxvY2FsLCBwYXJhbWV0ZXIsIG9yIGNvbnN0YW50LgorICoKKyAqICBUaGUgY29tYmluYXRpb24gb2YgdGhlc2UgdGhyZWUgYXNwZWN0cyBpcyBiYWxhbmNlZCBvbmx5IGFwcHJveGltYXRlbHkuCisgKgorICogIDEuIFN0YXRlbWVudCBUeXBlOgorICogIC0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgIG51bWJlcgorICoKKyAqICAgICBWMSA9IFYyICAgICAgICAgICAgICAgICAgICAgOQorICogICAgICAgKGluY2wuIFYxID0gRiguLikKKyAqICAgICBWID0gQ29uc3RhbnQgICAgICAgICAgICAgICAxMgorICogICAgIEFzc2lnbm1lbnQsICAgICAgICAgICAgICAgICA3CisgKiAgICAgICB3aXRoIGFycmF5IGVsZW1lbnQKKyAqICAgICBBc3NpZ25tZW50LCAgICAgICAgICAgICAgICAgNgorICogICAgICAgd2l0aCByZWNvcmQgY29tcG9uZW50CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNCAgICAgICAzNAorICoKKyAqICAgICBYID0gWSArfC18IiYmInwifCIgWiAgICAgICAgNQorICogICAgIFggPSBZICt8LXwiPT0iIENvbnN0YW50ICAgICA2CisgKiAgICAgWCA9IFggK3wtIDEgICAgICAgICAgICAgICAgIDMKKyAqICAgICBYID0gWSAqfC8gWiAgICAgICAgICAgICAgICAgMgorICogICAgIFggPSBFeHByZXNzaW9uLCAgICAgICAgICAgICAxCisgKiAgICAgICAgICAgdHdvIG9wZXJhdG9ycworICogICAgIFggPSBFeHByZXNzaW9uLCAgICAgICAgICAgICAxCisgKiAgICAgICAgICAgdGhyZWUgb3BlcmF0b3JzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOCAgICAgICAxOAorICoKKyAqICAgICBpZiAuLi4uICAgICAgICAgICAgICAgICAgICAxNAorICogICAgICAgd2l0aCAiZWxzZSIgICAgICA3CisgKiAgICAgICB3aXRob3V0ICJlbHNlIiAgIDcKKyAqICAgICAgICAgICBleGVjdXRlZCAgICAgICAgMworICogICAgICAgICAgIG5vdCBleGVjdXRlZCAgICA0CisgKiAgICAgZm9yIC4uLiAgICAgICAgICAgICAgICAgICAgIDcgIHwgIGNvdW50ZWQgZXZlcnkgdGltZQorICogICAgIHdoaWxlIC4uLiAgICAgICAgICAgICAgICAgICA0ICB8ICB0aGUgbG9vcCBjb25kaXRpb24KKyAqICAgICBkbyAuLi4gd2hpbGUgICAgICAgICAgICAgICAgMSAgfCAgaXMgZXZhbHVhdGVkCisgKiAgICAgc3dpdGNoIC4uLiAgICAgICAgICAgICAgICAgIDEKKyAqICAgICBicmVhayAgICAgICAgICAgICAgICAgICAgICAgMQorICogICAgIGRlY2xhcmF0aW9uIHdpdGggICAgICAgICAgICAxCisgKiAgICAgICBpbml0aWFsaXphdGlvbgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzQgICAgICAgMzQKKyAqCisgKiAgICAgUCAoLi4uKSAgcHJvY2VkdXJlIGNhbGwgICAgMTEKKyAqICAgICAgIHVzZXIgcHJvY2VkdXJlICAgICAgMTAKKyAqICAgICAgIGxpYnJhcnkgcHJvY2VkdXJlICAgIDEKKyAqICAgICBYID0gRiAoLi4uKQorICogICAgICAgICAgICAgZnVuY3Rpb24gIGNhbGwgICAgICA2CisgKiAgICAgICB1c2VyIGZ1bmN0aW9uICAgICAgICA1CisgKiAgICAgICBsaWJyYXJ5IGZ1bmN0aW9uICAgICAxCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNyAgICAgICAxNworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDMKKyAqCisgKiAgICBUaGUgYXZlcmFnZSBudW1iZXIgb2YgcGFyYW1ldGVycyBpbiBwcm9jZWR1cmUgb3IgZnVuY3Rpb24gY2FsbHMKKyAqICAgIGlzIDEuODIgKG5vdCBjb3VudGluZyB0aGUgZnVuY3Rpb24gdmFsdWVzIGFzIGltcGxpY2l0IHBhcmFtZXRlcnMpLgorICoKKyAqCisgKiAgMi4gT3BlcmF0b3JzCisgKiAgLS0tLS0tLS0tLS0tCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyICAgIGFwcHJveGltYXRlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmNlbnRhZ2UKKyAqCisgKiAgICBBcml0aG1ldGljICAgICAgICAgICAgIDMyICAgICAgICAgIDUwLjgKKyAqCisgKiAgICAgICArICAgICAgICAgICAgICAgICAgICAgMjEgICAgICAgICAgMzMuMworICogICAgICAgLSAgICAgICAgICAgICAgICAgICAgICA3ICAgICAgICAgIDExLjEKKyAqICAgICAgICogICAgICAgICAgICAgICAgICAgICAgMyAgICAgICAgICAgNC44CisgKiAgICAgICAvIChpbnQgZGl2KSAgICAgICAgICAgIDEgICAgICAgICAgIDEuNgorICoKKyAqICAgIENvbXBhcmlzb24gICAgICAgICAgICAgMjcgICAgICAgICAgIDQyLjgKKyAqCisgKiAgICAgICA9PSAgICAgICAgICAgICAgICAgICAgIDkgICAgICAgICAgIDE0LjMKKyAqICAgICAgIC89ICAgICAgICAgICAgICAgICAgICAgNCAgICAgICAgICAgIDYuMworICogICAgICAgPiAgICAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgMS42CisgKiAgICAgICA8ICAgICAgICAgICAgICAgICAgICAgIDMgICAgICAgICAgICA0LjgKKyAqICAgICAgID49ICAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgIDEuNgorICogICAgICAgPD0gICAgICAgICAgICAgICAgICAgICA5ICAgICAgICAgICAxNC4zCisgKgorICogICAgTG9naWMgICAgICAgICAgICAgICAgICAgNCAgICAgICAgICAgIDYuMworICoKKyAqICAgICAgICYmIChBTkQtVEhFTikgICAgICAgICAgMSAgICAgICAgICAgIDEuNgorICogICAgICAgfCAgKE9SKSAgICAgICAgICAgICAgICAxICAgICAgICAgICAgMS42CisgKiAgICAgICAhICAoTk9UKSAgICAgICAgICAgICAgIDIgICAgICAgICAgICAzLjIKKyAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tICAgICAgICAgIC0tLS0tCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIDYzICAgICAgICAgIDEwMC4xCisgKgorICoKKyAqICAzLiBPcGVyYW5kIFR5cGUgKGNvdW50ZWQgb25jZSBwZXIgb3BlcmFuZCByZWZlcmVuY2UpOgorICogIC0tLS0tLS0tLS0tLS0tLQorICogICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciAgICBhcHByb3hpbWF0ZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50YWdlCisgKgorICogICAgIEludGVnZXIgICAgICAgICAgICAgICAxNzUgICAgICAgIDcyLjMgJQorICogICAgIENoYXJhY3RlciAgICAgICAgICAgICAgNDUgICAgICAgIDE4LjYgJQorICogICAgIFBvaW50ZXIgICAgICAgICAgICAgICAgMTIgICAgICAgICA1LjAgJQorICogICAgIFN0cmluZzMwICAgICAgICAgICAgICAgIDYgICAgICAgICAyLjUgJQorICogICAgIEFycmF5ICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAwLjggJQorICogICAgIFJlY29yZCAgICAgICAgICAgICAgICAgIDIgICAgICAgICAwLjggJQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0gICAgICAgLS0tLS0tLQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAyNDIgICAgICAgMTAwLjAgJQorICoKKyAqICBXaGVuIHRoZXJlIGlzIGFuIGFjY2VzcyBwYXRoIGxlYWRpbmcgdG8gdGhlIGZpbmFsIG9wZXJhbmQgKGUuZy4gYSByZWNvcmQKKyAqICBjb21wb25lbnQpLCBvbmx5IHRoZSBmaW5hbCBkYXRhIHR5cGUgb24gdGhlIGFjY2VzcyBwYXRoIGlzIGNvdW50ZWQuCisgKgorICoKKyAqICA0LiBPcGVyYW5kIExvY2FsaXR5OgorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgICAgYXBwcm94aW1hdGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyY2VudGFnZQorICoKKyAqICAgICBsb2NhbCB2YXJpYWJsZSAgICAgICAgICAgICAgMTE0ICAgICAgICA0Ny4xICUKKyAqICAgICBnbG9iYWwgdmFyaWFibGUgICAgICAgICAgICAgIDIyICAgICAgICAgOS4xICUKKyAqICAgICBwYXJhbWV0ZXIgICAgICAgICAgICAgICAgICAgIDQ1ICAgICAgICAxOC42ICUKKyAqICAgICAgICB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgIDIzICAgICAgICAgOS41ICUKKyAqICAgICAgICByZWZlcmVuY2UgICAgICAgICAgICAgICAgICAgIDIyICAgICAgICAgOS4xICUKKyAqICAgICBmdW5jdGlvbiByZXN1bHQgICAgICAgICAgICAgICA2ICAgICAgICAgMi41ICUKKyAqICAgICBjb25zdGFudCAgICAgICAgICAgICAgICAgICAgIDU1ICAgICAgICAyMi43ICUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tICAgICAgIC0tLS0tLS0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQyICAgICAgIDEwMC4wICUKKyAqCisgKgorICogIFRoZSBwcm9ncmFtIGRvZXMgbm90IGNvbXB1dGUgYW55dGhpbmcgbWVhbmluZ2Z1bCwgYnV0IGl0IGlzIHN5bnRhY3RpY2FsbHkKKyAqICBhbmQgc2VtYW50aWNhbGx5IGNvcnJlY3QuIEFsbCB2YXJpYWJsZXMgaGF2ZSBhIHZhbHVlIGFzc2lnbmVkIHRvIHRoZW0KKyAqICBiZWZvcmUgdGhleSBhcmUgdXNlZCBhcyBhIHNvdXJjZSBvcGVyYW5kLgorICoKKyAqICBUaGVyZSBoYXMgYmVlbiBubyBleHBsaWNpdCBlZmZvcnQgdG8gYWNjb3VudCBmb3IgdGhlIGVmZmVjdHMgb2YgYQorICogIGNhY2hlLCBvciB0byBiYWxhbmNlIHRoZSB1c2Ugb2YgbG9uZyBvciBzaG9ydCBkaXNwbGFjZW1lbnRzIGZvciBjb2RlIG9yCisgKiAgZGF0YS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworCisvKiBDb21waWxlciBhbmQgc3lzdGVtIGRlcGVuZGVudCBkZWZpbml0aW9uczogKi8KKworI2lmbmRlZiBUSU1FCisjZGVmaW5lIFRJTUVTCisjZW5kaWYKKyAgICAgICAgICAgICAgICAvKiBVc2UgdGltZXMoMikgdGltZSBmdW5jdGlvbiB1bmxlc3MgICAgKi8KKyAgICAgICAgICAgICAgICAvKiBleHBsaWNpdGx5IGRlZmluZWQgb3RoZXJ3aXNlICAgICAgICAgKi8KKworI2lmZGVmIFRJTUVTCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3RpbWVzLmg+CisgICAgICAgICAgICAgICAgLyogZm9yICJ0aW1lcyIgKi8KKyNlbmRpZgorCisjZGVmaW5lIE1pY19zZWNzX1Blcl9TZWNvbmQgICAgIDEwMDAwMDAKKyAgICAgICAgICAgICAgICAvKiBCZXJrZWxleSBVTklYIEMgcmV0dXJucyBwcm9jZXNzIHRpbWVzIGluIHNlY29uZHMvSFogKi8KKworI2lmZGVmICBOT1NUUlVDVEFTU0lHTgorI2RlZmluZSBzdHJ1Y3Rhc3NpZ24oZCwgcykgICAgICBtZW1jcHkoJihkKSwgJihzKSwgc2l6ZW9mKGQpKQorI2Vsc2UKKyNkZWZpbmUgc3RydWN0YXNzaWduKGQsIHMpICAgICAgZCA9IHMKKyNlbmRpZgorCisjaWZkZWYgIE5PRU5VTQorI2RlZmluZSBJZGVudF8xIDAKKyNkZWZpbmUgSWRlbnRfMiAxCisjZGVmaW5lIElkZW50XzMgMgorI2RlZmluZSBJZGVudF80IDMKKyNkZWZpbmUgSWRlbnRfNSA0CisgIHR5cGVkZWYgaW50ICAgRW51bWVyYXRpb247CisjZWxzZQorICB0eXBlZGVmICAgICAgIGVudW0gICAge0lkZW50XzEsIElkZW50XzIsIElkZW50XzMsIElkZW50XzQsIElkZW50XzV9CisgICAgICAgICAgICAgICAgRW51bWVyYXRpb247CisjZW5kaWYKKyAgICAgICAgLyogZm9yIGJvb2xlYW4gYW5kIGVudW1lcmF0aW9uIHR5cGVzIGluIEFkYSwgUGFzY2FsICovCisKKy8qIEdlbmVyYWwgZGVmaW5pdGlvbnM6ICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorICAgICAgICAgICAgICAgIC8qIGZvciBzdHJjcHksIHN0cmNtcCAqLworCisjZGVmaW5lIE51bGwgMAorICAgICAgICAgICAgICAgIC8qIFZhbHVlIG9mIGEgTnVsbCBwb2ludGVyICovCisjZGVmaW5lIHRydWUgIDEKKyNkZWZpbmUgZmFsc2UgMAorCit0eXBlZGVmIGludCAgICAgT25lX1RoaXJ0eTsKK3R5cGVkZWYgaW50ICAgICBPbmVfRmlmdHk7Cit0eXBlZGVmIGNoYXIgICAgQ2FwaXRhbF9MZXR0ZXI7Cit0eXBlZGVmIGludCAgICAgQm9vbGVhbjsKK3R5cGVkZWYgY2hhciAgICBTdHJfMzAgWzMxXTsKK3R5cGVkZWYgaW50ICAgICBBcnJfMV9EaW0gWzUwXTsKK3R5cGVkZWYgaW50ICAgICBBcnJfMl9EaW0gWzUwXSBbNTBdOworCit0eXBlZGVmIHN0cnVjdCByZWNvcmQKKyAgICB7CisgICAgc3RydWN0IHJlY29yZCAqUHRyX0NvbXA7CisgICAgRW51bWVyYXRpb24gICAgRGlzY3I7CisgICAgdW5pb24geworICAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAgICBFbnVtZXJhdGlvbiBFbnVtX0NvbXA7CisgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICBJbnRfQ29tcDsKKyAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgIFN0cl9Db21wIFszMV07CisgICAgICAgICAgICAgICAgICB9IHZhcl8xOworICAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAgICBFbnVtZXJhdGlvbiBFX0NvbXBfMjsKKyAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgIFN0cl8yX0NvbXAgWzMxXTsKKyAgICAgICAgICAgICAgICAgIH0gdmFyXzI7CisgICAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgIENoXzFfQ29tcDsKKyAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgIENoXzJfQ29tcDsKKyAgICAgICAgICAgICAgICAgIH0gdmFyXzM7CisgICAgICAgICAgfSB2YXJpYW50OworICAgICAgfSBSZWNfVHlwZSwgKlJlY19Qb2ludGVyOworCisjaW5jbHVkZSAic2NfcHJpbnQuaCIKKyNpbmNsdWRlICJjc3IuaCIKKworIyBkZWZpbmUgcHJpbnRmIHNjX3ByaW50ZgorCisjZGVmaW5lIEhaIDEwMDAwMDAKK3N0YXRpYyBsb25nIHRpbWUobG9uZyAqeCkKK3sKKyAgICByZXR1cm4gcmRjeWNsZSgpOworfQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL2JlbmNobWFya3MvZGhyeXN0b25lMjEvZGhyeV8xLmMgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvYmVuY2htYXJrcy9kaHJ5c3RvbmUyMS9kaHJ5XzEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTJhY2JiCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL2JlbmNobWFya3MvZGhyeXN0b25lMjEvZGhyeV8xLmMKQEAgLTAsMCArMSw0NjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIFRoZSBCWVRFIFVOSVggQmVuY2htYXJrcyAtIFJlbGVhc2UgMworICogICAgICAgICAgTW9kdWxlOiBkaHJ5XzEuYyAgIFNJRDogMy40IDUvMTUvOTEgMTk6MzA6MjEKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEJ1ZyByZXBvcnRzLCBwYXRjaGVzLCBjb21tZW50cywgc3VnZ2VzdGlvbnMgc2hvdWxkIGJlIHNlbnQgdG86CisgKgorICoJQmVuIFNtaXRoLCBSaWNrIEdyZWhhbiBvciBUb20gWWFnZXIKKyAqCWJlbkBieXRlcGIuYnl0ZS5jb20gICByaWNrX2dAYnl0ZXBiLmJ5dGUuY29tICAgdHlhZ2VyQGJ5dGVwYi5ieXRlLmNvbQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICoqKiBXQVJOSU5HICoqKiogIFdpdGggQllURSdzIG1vZGlmaWNhdGlvbnMgYXBwbGllZCwgcmVzdWx0cyBvYnRhaW5lZCB3aXRoCisgKiAgICAgKioqKioqKiAgICAgICB0aGlzIHZlcnNpb24gb2YgdGhlIERocnlzdG9uZSBwcm9ncmFtIG1heSBub3QgYmUgYXBwbGljYWJsZQorICogICAgICAgICAgICAgICAgICAgdG8gb3RoZXIgdmVyc2lvbnMuCisgKgorICogIE1vZGlmaWNhdGlvbiBMb2c6CisgKiAgMTAvMjIvOTcgLSBjb2RlIGNsZWFudXAgdG8gcmVtb3ZlIEFOU0kgQyBjb21waWxlciB3YXJuaW5ncworICogICAgICAgICAgICAgQW5keSBLYWhuIDxrYWhuQHprMy5kZWMuY29tPgorICoKKyAqICBBZGFwdGVkIGZyb206CisgKgorICogICAgICAgICAgICAgICAgICAgIkRIUllTVE9ORSIgQmVuY2htYXJrIFByb2dyYW0KKyAqICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogIFZlcnNpb246ICAgIEMsIFZlcnNpb24gMi4xCisgKgorICogIEZpbGU6ICAgICAgIGRocnlfMS5jIChwYXJ0IDIgb2YgMykKKyAqCisgKiAgRGF0ZTogICAgICAgTWF5IDI1LCAxOTg4CisgKgorICogIEF1dGhvcjogICAgIFJlaW5ob2xkIFAuIFdlaWNrZXIKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworY2hhciBTQ0NTaWRbXSA9ICJAKCMpIEAoIylkaHJ5XzEuYzozLjQgLS0gNS8xNS85MSAxOTozMDoyMSI7CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgImRocnkuaCIKKy8vI2luY2x1ZGUgInRpbWVpdC5jIgorCit1bnNpZ25lZCBsb25nIFJ1bl9JbmRleDsKKy8qCit2b2lkIHJlcG9ydCgpCit7CisJZnByaW50ZihzdGRlcnIsIkNPVU5UfCVsZHwxfGxwc1xuIiwgUnVuX0luZGV4KTsKKwlleGl0KDApOworfQorKi8KKy8qIEdsb2JhbCBWYXJpYWJsZXM6ICovCisKK1JlY19Qb2ludGVyICAgICBQdHJfR2xvYiwKKyAgICAgICAgICAgICAgICBOZXh0X1B0cl9HbG9iOworaW50ICAgICAgICAgICAgIEludF9HbG9iOworQm9vbGVhbiAgICAgICAgIEJvb2xfR2xvYjsKK2NoYXIgICAgICAgICAgICBDaF8xX0dsb2IsCisgICAgICAgICAgICAgICAgQ2hfMl9HbG9iOworaW50ICAgICAgICAgICAgIEFycl8xX0dsb2IgWzUwXTsKK2ludCAgICAgICAgICAgICBBcnJfMl9HbG9iIFs1MF0gWzUwXTsKKworRW51bWVyYXRpb24gICAgIEZ1bmNfMSAoKTsKKyAgLyogZm9yd2FyZCBkZWNsYXJhdGlvbiBuZWNlc3Nhcnkgc2luY2UgRW51bWVyYXRpb24gbWF5IG5vdCBzaW1wbHkgYmUgaW50ICovCisKKyNpZm5kZWYgUkVHCisgICAgICAgIEJvb2xlYW4gUmVnID0gZmFsc2U7CisjZGVmaW5lIFJFRworICAgICAgICAvKiBSRUcgYmVjb21lcyBkZWZpbmVkIGFzIGVtcHR5ICovCisgICAgICAgIC8qIGkuZS4gbm8gcmVnaXN0ZXIgdmFyaWFibGVzICAgKi8KKyNlbHNlCisgICAgICAgIEJvb2xlYW4gUmVnID0gdHJ1ZTsKKyNlbmRpZgorCisvKiB2YXJpYWJsZXMgZm9yIHRpbWUgbWVhc3VyZW1lbnQ6ICovCisKKyNpZmRlZiBUSU1FUworc3RydWN0IHRtcyAgICAgIHRpbWVfaW5mbzsKKy8qIGV4dGVybiAgaW50ICAgICB0aW1lcyAoKTsgKi8KKyAgICAgICAgICAgICAgICAvKiBzZWUgbGlicmFyeSBmdW5jdGlvbiAidGltZXMiICovCisjZGVmaW5lIFRvb19TbWFsbF9UaW1lIDEyMAorICAgICAgICAgICAgICAgIC8qIE1lYXN1cmVtZW50cyBzaG91bGQgbGFzdCBhdCBsZWFzdCBhYm91dCAyIHNlY29uZHMgKi8KKyNlbmRpZgorI2lmZGVmIFRJTUUKK2V4dGVybiBsb25nICAgICB0aW1lKCk7CisgICAgICAgICAgICAgICAgLyogc2VlIGxpYnJhcnkgZnVuY3Rpb24gInRpbWUiICAqLworI2RlZmluZSBUb29fU21hbGxfVGltZSAyCisgICAgICAgICAgICAgICAgLyogTWVhc3VyZW1lbnRzIHNob3VsZCBsYXN0IGF0IGxlYXN0IDIgc2Vjb25kcyAqLworI2VuZGlmCisKK2xvbmcgICAgICAgICAgICBCZWdpbl9UaW1lLAorICAgICAgICAgICAgICAgIEVuZF9UaW1lLAorICAgICAgICAgICAgICAgIFVzZXJfVGltZTsKKyNpZiAwCitmbG9hdCAgICAgICAgICAgTWljcm9zZWNvbmRzLAorICAgICAgICAgICAgICAgIERocnlzdG9uZXNfUGVyX1NlY29uZDsKKyNlbHNlCitsb25nICAgICAgICAgICAgTWljcm9zZWNvbmRzLAorICAgICAgICAgICAgICAgIERocnlzdG9uZXNfUGVyX1NlY29uZDsKKyNlbmRpZgorCisvKiBlbmQgb2YgdmFyaWFibGVzIGZvciB0aW1lIG1lYXN1cmVtZW50ICovCisKK3ZvaWQgUHJvY18xIChSRUcgUmVjX1BvaW50ZXIgUHRyX1ZhbF9QYXIpOwordm9pZCBQcm9jXzIgKE9uZV9GaWZ0eSAgICpJbnRfUGFyX1JlZik7Cit2b2lkIFByb2NfMyAoUmVjX1BvaW50ZXIgKlB0cl9SZWZfUGFyKTsKK3ZvaWQgUHJvY180ICh2b2lkKTsKK3ZvaWQgUHJvY181ICh2b2lkKTsKKworCitleHRlcm4gQm9vbGVhbiBGdW5jXzIoU3RyXzMwLCBTdHJfMzApOworZXh0ZXJuIHZvaWQgUHJvY182KEVudW1lcmF0aW9uLCBFbnVtZXJhdGlvbiAqKTsKK2V4dGVybiB2b2lkIFByb2NfNyhPbmVfRmlmdHksIE9uZV9GaWZ0eSwgT25lX0ZpZnR5ICopOworZXh0ZXJuIHZvaWQgUHJvY184KEFycl8xX0RpbSwgQXJyXzJfRGltLCBpbnQsIGludCk7CisKK2ludCBtYWluIChhcmdjLCBhcmd2KQoraW50CWFyZ2M7CitjaGFyCSphcmd2W107CisgIC8qIG1haW4gcHJvZ3JhbSwgY29ycmVzcG9uZHMgdG8gcHJvY2VkdXJlcyAgICAgICAgKi8KKyAgLyogTWFpbiBhbmQgUHJvY18wIGluIHRoZSBBZGEgdmVyc2lvbiAgICAgICAgICAgICAqLworeworI2lmZGVmIFNFTEZfVElNRUQKKyAgICAgICAgaW50ICAgICAgICAgICAgIE51bWJlcl9PZl9SdW5zOworI2Vsc2UgLyogU0VMRl9USU1FRCAqLworICAgICAgICBpbnQgICAgICAgICAgICAgZHVyYXRpb247CisjZW5kaWYgLyogU0VMRl9USU1FRCAqLworICAgICAgICBPbmVfRmlmdHkgICAgICAgSW50XzFfTG9jOworICBSRUcgICBPbmVfRmlmdHkgICAgICAgSW50XzJfTG9jOworICAgICAgICBPbmVfRmlmdHkgICAgICAgSW50XzNfTG9jOworICBSRUcgICBjaGFyICAgICAgICAgICAgQ2hfSW5kZXg7CisgICAgICAgIEVudW1lcmF0aW9uICAgICBFbnVtX0xvYzsKKyAgICAgICAgU3RyXzMwICAgICAgICAgIFN0cl8xX0xvYzsKKyAgICAgICAgU3RyXzMwICAgICAgICAgIFN0cl8yX0xvYzsKKworICAvKiBJbml0aWFsaXphdGlvbnMgKi8KKyNpZiAwCisgIE5leHRfUHRyX0dsb2IgPSAoUmVjX1BvaW50ZXIpIG1hbGxvYyAoc2l6ZW9mIChSZWNfVHlwZSkpOworICBQdHJfR2xvYiA9IChSZWNfUG9pbnRlcikgbWFsbG9jIChzaXplb2YgKFJlY19UeXBlKSk7CisjZWxzZQorICBzdGF0aWMgUmVjX1R5cGUgZ2xvYjEsIGdsb2IyOworICBOZXh0X1B0cl9HbG9iID0gJmdsb2IxOworICBQdHJfR2xvYiA9ICZnbG9iMjsKKyNlbmRpZgorCisgIFB0cl9HbG9iLT5QdHJfQ29tcCAgICAgICAgICAgICAgICAgICAgPSBOZXh0X1B0cl9HbG9iOworICBQdHJfR2xvYi0+RGlzY3IgICAgICAgICAgICAgICAgICAgICAgID0gSWRlbnRfMTsKKyAgUHRyX0dsb2ItPnZhcmlhbnQudmFyXzEuRW51bV9Db21wICAgICA9IElkZW50XzM7CisgIFB0cl9HbG9iLT52YXJpYW50LnZhcl8xLkludF9Db21wICAgICAgPSA0MDsKKyAgc3RyY3B5IChQdHJfR2xvYi0+dmFyaWFudC52YXJfMS5TdHJfQ29tcCwKKyAgICAgICAgICAiREhSWVNUT05FIFBST0dSQU0sIFNPTUUgU1RSSU5HIik7CisgIHN0cmNweSAoU3RyXzFfTG9jLCAiREhSWVNUT05FIFBST0dSQU0sIDEnU1QgU1RSSU5HIik7CisKKyAgQXJyXzJfR2xvYiBbOF1bN10gPSAxMDsKKyAgICAgICAgLyogV2FzIG1pc3NpbmcgaW4gcHVibGlzaGVkIHByb2dyYW0uIFdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQsICAgICovCisgICAgICAgIC8qIEFycl8yX0dsb2IgWzhdWzddIHdvdWxkIGhhdmUgYW4gdW5kZWZpbmVkIHZhbHVlLiAgICAgICAgICAgICAqLworICAgICAgICAvKiBXYXJuaW5nOiBXaXRoIDE2LUJpdCBwcm9jZXNzb3JzIGFuZCBOdW1iZXJfT2ZfUnVucyA+IDMyMDAwLCAgKi8KKyAgICAgICAgLyogb3ZlcmZsb3cgbWF5IG9jY3VyIGZvciB0aGlzIGFycmF5IGVsZW1lbnQuICAgICAgICAgICAgICAgICAgICovCisKKyNpZmRlZiBTRUxGX1RJTUVECisgIE51bWJlcl9PZl9SdW5zID0gNTAwOy8vNTAwMDAwOworICBpZiAoYXJnYyA+PSAyKSB7CisgICAgTnVtYmVyX09mX1J1bnMgPSBhdG9pKGFyZ3ZbMV0pOworICAgIH0KKyAgcHJpbnRmICgiXG4iKTsKKyAgcHJpbnRmICgiRGhyeXN0b25lIEJlbmNobWFyaywgVmVyc2lvbiAyLjEgKExhbmd1YWdlOiBDKVxuIik7CisgIHByaW50ZiAoIlxuIik7CisgIGlmIChSZWcpCisgIHsKKyAgICBwcmludGYgKCJQcm9ncmFtIGNvbXBpbGVkIHdpdGggJ3JlZ2lzdGVyJyBhdHRyaWJ1dGVcbiIpOworICAgIHByaW50ZiAoIlxuIik7CisgIH0KKyAgZWxzZQorICB7CisgICAgcHJpbnRmICgiUHJvZ3JhbSBjb21waWxlZCB3aXRob3V0ICdyZWdpc3RlcicgYXR0cmlidXRlXG4iKTsKKyAgICBwcmludGYgKCJcbiIpOworICB9CisjaWZkZWYgUFJBVFRMRQorICBwcmludGYgKCJQbGVhc2UgZ2l2ZSB0aGUgbnVtYmVyIG9mIHJ1bnMgdGhyb3VnaCB0aGUgYmVuY2htYXJrOiAiKTsKKyAgeworICAgIGludCBuOworICAgIHNjYW5mICgiJWQiLCAmbik7CisgICAgTnVtYmVyX09mX1J1bnMgPSBuOworICB9CisgIHByaW50ZiAoIlxuIik7CisjZW5kaWYgLyogUFJBVFRMRSAqLworCisgIHByaW50ZiAoIkV4ZWN1dGlvbiBzdGFydHMsICVkIHJ1bnMgdGhyb3VnaCBEaHJ5c3RvbmVcbiIsIE51bWJlcl9PZl9SdW5zKTsKKworICBSdW5fSW5kZXggPSAwOworI2Vsc2UgLyogU0VMRl9USU1FRCAqLworICBpZiAoYXJnYyAhPSAyKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgZHVyYXRpb25cbiIsIGFyZ3ZbMF0pOworICAgIGV4aXQoMSk7CisgICAgfQorCisgIGR1cmF0aW9uID0gYXRvaShhcmd2WzFdKTsKKyAgUnVuX0luZGV4ID0gMDsKKyAgd2FrZV9tZShkdXJhdGlvbiwgcmVwb3J0KTsKKyNlbmRpZiAvKiBTRUxGX1RJTUVEICovCisKKyAgLyoqKioqKioqKioqKioqKi8KKyAgLyogU3RhcnQgdGltZXIgKi8KKyAgLyoqKioqKioqKioqKioqKi8KKworI2lmZGVmIFNFTEZfVElNRUQKKyNpZmRlZiBUSU1FUworICB0aW1lcyAoJnRpbWVfaW5mbyk7CisgIEJlZ2luX1RpbWUgPSAobG9uZykgdGltZV9pbmZvLnRtc191dGltZTsKKyNlbmRpZgorI2lmZGVmIFRJTUUKKyAgQmVnaW5fVGltZSA9IHRpbWUgKCAobG9uZyAqKSAwKTsKKyNlbmRpZgorI2VuZGlmIC8qIFNFTEZfVElNRUQgKi8KKworI2lmZGVmIFNFTEZfVElNRUQKKyAgZm9yIChSdW5fSW5kZXggPSAxOyBSdW5fSW5kZXggPD0gTnVtYmVyX09mX1J1bnMgOyArK1J1bl9JbmRleCkKKyNlbHNlIC8qIFNFTEZfVElNRUQgKi8KKyAgZm9yIChSdW5fSW5kZXggPSAxOyA7ICsrUnVuX0luZGV4KQorI2VuZGlmIC8qIFNFTEZfVElNRUQgKi8KKyAgeworCisgICAgUHJvY181KCk7CisgICAgUHJvY180KCk7CisgICAgICAvKiBDaF8xX0dsb2IgPT0gJ0EnLCBDaF8yX0dsb2IgPT0gJ0InLCBCb29sX0dsb2IgPT0gdHJ1ZSAqLworICAgIEludF8xX0xvYyA9IDI7CisgICAgSW50XzJfTG9jID0gMzsKKyAgICBzdHJjcHkgKFN0cl8yX0xvYywgIkRIUllTVE9ORSBQUk9HUkFNLCAyJ05EIFNUUklORyIpOworICAgIEVudW1fTG9jID0gSWRlbnRfMjsKKyAgICBCb29sX0dsb2IgPSAhIEZ1bmNfMiAoU3RyXzFfTG9jLCBTdHJfMl9Mb2MpOworICAgICAgLyogQm9vbF9HbG9iID09IDEgKi8KKyAgICB3aGlsZSAoSW50XzFfTG9jIDwgSW50XzJfTG9jKSAgLyogbG9vcCBib2R5IGV4ZWN1dGVkIG9uY2UgKi8KKyAgICB7CisgICAgICBJbnRfM19Mb2MgPSA1ICogSW50XzFfTG9jIC0gSW50XzJfTG9jOworICAgICAgICAvKiBJbnRfM19Mb2MgPT0gNyAqLworICAgICAgUHJvY183IChJbnRfMV9Mb2MsIEludF8yX0xvYywgJkludF8zX0xvYyk7CisgICAgICAgIC8qIEludF8zX0xvYyA9PSA3ICovCisgICAgICBJbnRfMV9Mb2MgKz0gMTsKKyAgICB9IC8qIHdoaWxlICovCisgICAgICAvKiBJbnRfMV9Mb2MgPT0gMywgSW50XzJfTG9jID09IDMsIEludF8zX0xvYyA9PSA3ICovCisgICAgUHJvY184IChBcnJfMV9HbG9iLCBBcnJfMl9HbG9iLCBJbnRfMV9Mb2MsIEludF8zX0xvYyk7CisgICAgICAvKiBJbnRfR2xvYiA9PSA1ICovCisgICAgUHJvY18xIChQdHJfR2xvYik7CisgICAgZm9yIChDaF9JbmRleCA9ICdBJzsgQ2hfSW5kZXggPD0gQ2hfMl9HbG9iOyArK0NoX0luZGV4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsb29wIGJvZHkgZXhlY3V0ZWQgdHdpY2UgKi8KKyAgICB7CisgICAgICBpZiAoRW51bV9Mb2MgPT0gRnVuY18xIChDaF9JbmRleCwgJ0MnKSkKKyAgICAgICAgICAvKiB0aGVuLCBub3QgZXhlY3V0ZWQgKi8KKyAgICAgICAgeworICAgICAgICBQcm9jXzYgKElkZW50XzEsICZFbnVtX0xvYyk7CisgICAgICAgIHN0cmNweSAoU3RyXzJfTG9jLCAiREhSWVNUT05FIFBST0dSQU0sIDMnUkQgU1RSSU5HIik7CisgICAgICAgIEludF8yX0xvYyA9IFJ1bl9JbmRleDsKKyAgICAgICAgSW50X0dsb2IgPSBSdW5fSW5kZXg7CisgICAgICAgIH0KKyAgICB9CisgICAgICAvKiBJbnRfMV9Mb2MgPT0gMywgSW50XzJfTG9jID09IDMsIEludF8zX0xvYyA9PSA3ICovCisgICAgSW50XzJfTG9jID0gSW50XzJfTG9jICogSW50XzFfTG9jOworICAgIEludF8xX0xvYyA9IEludF8yX0xvYyAvIEludF8zX0xvYzsKKyAgICBJbnRfMl9Mb2MgPSA3ICogKEludF8yX0xvYyAtIEludF8zX0xvYykgLSBJbnRfMV9Mb2M7CisgICAgICAvKiBJbnRfMV9Mb2MgPT0gMSwgSW50XzJfTG9jID09IDEzLCBJbnRfM19Mb2MgPT0gNyAqLworICAgIFByb2NfMiAoJkludF8xX0xvYyk7CisgICAgICAvKiBJbnRfMV9Mb2MgPT0gNSAqLworCisgIH0gLyogbG9vcCAiZm9yIFJ1bl9JbmRleCIgKi8KKworICAvKioqKioqKioqKioqKiovCisgIC8qIFN0b3AgdGltZXIgKi8KKyAgLyoqKioqKioqKioqKioqLworI2lmZGVmIFNFTEZfVElNRUQKKyNpZmRlZiBUSU1FUworICB0aW1lcyAoJnRpbWVfaW5mbyk7CisgIEVuZF9UaW1lID0gKGxvbmcpIHRpbWVfaW5mby50bXNfdXRpbWU7CisjZW5kaWYKKyNpZmRlZiBUSU1FCisgIEVuZF9UaW1lID0gdGltZSAoIChsb25nICopIDApOworI2VuZGlmCisjZW5kaWYgLyogU0VMRl9USU1FRCAqLworCisgIC8qIEJZVEUgdmVyc2lvbiBuZXZlciBleGVjdXRlcyB0aGlzIHN0dWZmICovCisjaWZkZWYgU0VMRl9USU1FRAorICBwcmludGYgKCJFeGVjdXRpb24gZW5kc1xuIik7CisgIHByaW50ZiAoIlxuIik7CisgIHByaW50ZiAoIkZpbmFsIHZhbHVlcyBvZiB0aGUgdmFyaWFibGVzIHVzZWQgaW4gdGhlIGJlbmNobWFyazpcbiIpOworICBwcmludGYgKCJcbiIpOworICBwcmludGYgKCJJbnRfR2xvYjogICAgICAgICAgICAlZFxuIiwgSW50X0dsb2IpOworICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICAlZFxuIiwgNSk7CisgIHByaW50ZiAoIkJvb2xfR2xvYjogICAgICAgICAgICVkXG4iLCBCb29sX0dsb2IpOworICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICAlZFxuIiwgMSk7CisgIHByaW50ZiAoIkNoXzFfR2xvYjogICAgICAgICAgICVjXG4iLCBDaF8xX0dsb2IpOworICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICAlY1xuIiwgJ0EnKTsKKyAgcHJpbnRmICgiQ2hfMl9HbG9iOiAgICAgICAgICAgJWNcbiIsIENoXzJfR2xvYik7CisgIHByaW50ZiAoIiAgICAgICAgc2hvdWxkIGJlOiAgICVjXG4iLCAnQicpOworICBwcmludGYgKCJBcnJfMV9HbG9iWzhdOiAgICAgICAlZFxuIiwgQXJyXzFfR2xvYls4XSk7CisgIHByaW50ZiAoIiAgICAgICAgc2hvdWxkIGJlOiAgICVkXG4iLCA3KTsKKyAgcHJpbnRmICgiQXJyXzJfR2xvYls4XVs3XTogICAgJWRcbiIsIEFycl8yX0dsb2JbOF1bN10pOworICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICBOdW1iZXJfT2ZfUnVucyArIDEwXG4iKTsKKyAgcHJpbnRmICgiUHRyX0dsb2ItPlxuIik7CisgIHByaW50ZiAoIiAgUHRyX0NvbXA6ICAgICAgICAgICVkXG4iLCAoaW50KSBQdHJfR2xvYi0+UHRyX0NvbXApOworICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICAoaW1wbGVtZW50YXRpb24tZGVwZW5kZW50KVxuIik7CisgIHByaW50ZiAoIiAgRGlzY3I6ICAgICAgICAgICAgICVkXG4iLCBQdHJfR2xvYi0+RGlzY3IpOworICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICAlZFxuIiwgMCk7CisgIHByaW50ZiAoIiAgRW51bV9Db21wOiAgICAgICAgICVkXG4iLCBQdHJfR2xvYi0+dmFyaWFudC52YXJfMS5FbnVtX0NvbXApOworICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICAlZFxuIiwgMik7CisgIHByaW50ZiAoIiAgSW50X0NvbXA6ICAgICAgICAgICVkXG4iLCBQdHJfR2xvYi0+dmFyaWFudC52YXJfMS5JbnRfQ29tcCk7CisgIHByaW50ZiAoIiAgICAgICAgc2hvdWxkIGJlOiAgICVkXG4iLCAxNyk7CisgIHByaW50ZiAoIiAgU3RyX0NvbXA6ICAgICAgICAgICVzXG4iLCBQdHJfR2xvYi0+dmFyaWFudC52YXJfMS5TdHJfQ29tcCk7CisgIHByaW50ZiAoIiAgICAgICAgc2hvdWxkIGJlOiAgIERIUllTVE9ORSBQUk9HUkFNLCBTT01FIFNUUklOR1xuIik7CisgIHByaW50ZiAoIk5leHRfUHRyX0dsb2ItPlxuIik7CisgIHByaW50ZiAoIiAgUHRyX0NvbXA6ICAgICAgICAgICVkXG4iLCAoaW50KSBOZXh0X1B0cl9HbG9iLT5QdHJfQ29tcCk7CisgIHByaW50ZiAoIiAgICAgICAgc2hvdWxkIGJlOiAgIChpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQpLCBzYW1lIGFzIGFib3ZlXG4iKTsKKyAgcHJpbnRmICgiICBEaXNjcjogICAgICAgICAgICAgJWRcbiIsIE5leHRfUHRyX0dsb2ItPkRpc2NyKTsKKyAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgJWRcbiIsIDApOworICBwcmludGYgKCIgIEVudW1fQ29tcDogICAgICAgICAlZFxuIiwgTmV4dF9QdHJfR2xvYi0+dmFyaWFudC52YXJfMS5FbnVtX0NvbXApOworICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICAlZFxuIiwgMSk7CisgIHByaW50ZiAoIiAgSW50X0NvbXA6ICAgICAgICAgICVkXG4iLCBOZXh0X1B0cl9HbG9iLT52YXJpYW50LnZhcl8xLkludF9Db21wKTsKKyAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgJWRcbiIsIDE4KTsKKyAgcHJpbnRmICgiICBTdHJfQ29tcDogICAgICAgICAgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5leHRfUHRyX0dsb2ItPnZhcmlhbnQudmFyXzEuU3RyX0NvbXApOworICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICBESFJZU1RPTkUgUFJPR1JBTSwgU09NRSBTVFJJTkdcbiIpOworICBwcmludGYgKCJJbnRfMV9Mb2M6ICAgICAgICAgICAlZFxuIiwgSW50XzFfTG9jKTsKKyAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgJWRcbiIsIDUpOworICBwcmludGYgKCJJbnRfMl9Mb2M6ICAgICAgICAgICAlZFxuIiwgSW50XzJfTG9jKTsKKyAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgJWRcbiIsIDEzKTsKKyAgcHJpbnRmICgiSW50XzNfTG9jOiAgICAgICAgICAgJWRcbiIsIEludF8zX0xvYyk7CisgIHByaW50ZiAoIiAgICAgICAgc2hvdWxkIGJlOiAgICVkXG4iLCA3KTsKKyAgcHJpbnRmICgiRW51bV9Mb2M6ICAgICAgICAgICAgJWRcbiIsIEVudW1fTG9jKTsKKyAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgJWRcbiIsIDEpOworICBwcmludGYgKCJTdHJfMV9Mb2M6ICAgICAgICAgICAlc1xuIiwgU3RyXzFfTG9jKTsKKyAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgREhSWVNUT05FIFBST0dSQU0sIDEnU1QgU1RSSU5HXG4iKTsKKyAgcHJpbnRmICgiU3RyXzJfTG9jOiAgICAgICAgICAgJXNcbiIsIFN0cl8yX0xvYyk7CisgIHByaW50ZiAoIiAgICAgICAgc2hvdWxkIGJlOiAgIERIUllTVE9ORSBQUk9HUkFNLCAyJ05EIFNUUklOR1xuIik7CisgIHByaW50ZiAoIlxuIik7CisKKyAgVXNlcl9UaW1lID0gRW5kX1RpbWUgLSBCZWdpbl9UaW1lOworCisgIGlmIChVc2VyX1RpbWUgPCBUb29fU21hbGxfVGltZSkKKyAgeworICAgIHByaW50ZiAoIk1lYXN1cmVkIHRpbWUgdG9vIHNtYWxsIHRvIG9idGFpbiBtZWFuaW5nZnVsIHJlc3VsdHNcbiIpOworICAgIHByaW50ZiAoIlBsZWFzZSBpbmNyZWFzZSBudW1iZXIgb2YgcnVuc1xuIik7CisgICAgcHJpbnRmICgiXG4iKTsKKyAgfQorICBlbHNlCisgIHsKKyNpZiAwCisjaWZkZWYgVElNRQorICAgIE1pY3Jvc2Vjb25kcyA9IChmbG9hdCkgVXNlcl9UaW1lICogTWljX3NlY3NfUGVyX1NlY29uZAorICAgICAgICAgICAgICAgICAgICAgICAgLyAoZmxvYXQpIE51bWJlcl9PZl9SdW5zOworICAgIERocnlzdG9uZXNfUGVyX1NlY29uZCA9IChmbG9hdCkgTnVtYmVyX09mX1J1bnMgLyAoZmxvYXQpIFVzZXJfVGltZTsKKyNlbHNlCisgICAgTWljcm9zZWNvbmRzID0gKGZsb2F0KSBVc2VyX1RpbWUgKiBNaWNfc2Vjc19QZXJfU2Vjb25kCisgICAgICAgICAgICAgICAgICAgICAgICAvICgoZmxvYXQpIEhaICogKChmbG9hdCkgTnVtYmVyX09mX1J1bnMpKTsKKyAgICBEaHJ5c3RvbmVzX1Blcl9TZWNvbmQgPSAoKGZsb2F0KSBIWiAqIChmbG9hdCkgTnVtYmVyX09mX1J1bnMpCisgICAgICAgICAgICAgICAgICAgICAgICAvIChmbG9hdCkgVXNlcl9UaW1lOworI2VuZGlmCisjZWxzZQorICBNaWNyb3NlY29uZHMgPSAoKFVzZXJfVGltZSAvIE51bWJlcl9PZl9SdW5zKSAqIE1pY19zZWNzX1Blcl9TZWNvbmQpIC8gSFo7CisgIERocnlzdG9uZXNfUGVyX1NlY29uZCA9IChIWiAqIE51bWJlcl9PZl9SdW5zKSAvIFVzZXJfVGltZTsKKworICBzY19wcmludGYoIk51bWJlcl9PZl9SdW5zPSAlbGQsIEhaPSAlbGRcbiIsIE51bWJlcl9PZl9SdW5zLCBIWik7CisgIHNjX3ByaW50ZigiVGltZTogYmVnaW49ICVsZCwgZW5kPSAlbGQsIGRpZmY9ICVsZFxuIiwgQmVnaW5fVGltZSwgRW5kX1RpbWUsIFVzZXJfVGltZSk7CisgIHNjX3ByaW50ZigiTWljcm9zZWNvbmRzIGZvciBvbmUgcnVuIHRocm91Z2ggRGhyeXN0b25lOiAlbGRcbiIsIE1pY3Jvc2Vjb25kcyk7CisgIHNjX3ByaW50ZigiRGhyeXN0b25lcyBwZXIgU2Vjb25kOiAgICAgICAgICAgICAgICAgICAgICAlbGRcbiIsIERocnlzdG9uZXNfUGVyX1NlY29uZCk7CisKKyNlbmRpZgorICB9CisjZW5kaWYgLyogU0VMRl9USU1FRCAqLworfQorCisKK3ZvaWQgUHJvY18xIChSRUcgUmVjX1BvaW50ZXIgUHRyX1ZhbF9QYXIpCisgICAgLyogZXhlY3V0ZWQgb25jZSAqLworeworICBSRUcgUmVjX1BvaW50ZXIgTmV4dF9SZWNvcmQgPSBQdHJfVmFsX1Bhci0+UHRyX0NvbXA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogPT0gUHRyX0dsb2JfTmV4dCAqLworICAvKiBMb2NhbCB2YXJpYWJsZSwgaW5pdGlhbGl6ZWQgd2l0aCBQdHJfVmFsX1Bhci0+UHRyX0NvbXAsICAgICovCisgIC8qIGNvcnJlc3BvbmRzIHRvICJyZW5hbWUiIGluIEFkYSwgIndpdGgiIGluIFBhc2NhbCAgICAgICAgICAgKi8KKworICBzdHJ1Y3Rhc3NpZ24gKCpQdHJfVmFsX1Bhci0+UHRyX0NvbXAsICpQdHJfR2xvYik7CisgIFB0cl9WYWxfUGFyLT52YXJpYW50LnZhcl8xLkludF9Db21wID0gNTsKKyAgTmV4dF9SZWNvcmQtPnZhcmlhbnQudmFyXzEuSW50X0NvbXAKKyAgICAgICAgPSBQdHJfVmFsX1Bhci0+dmFyaWFudC52YXJfMS5JbnRfQ29tcDsKKyAgTmV4dF9SZWNvcmQtPlB0cl9Db21wID0gUHRyX1ZhbF9QYXItPlB0cl9Db21wOworICBQcm9jXzMgKCZOZXh0X1JlY29yZC0+UHRyX0NvbXApOworICAgIC8qIFB0cl9WYWxfUGFyLT5QdHJfQ29tcC0+UHRyX0NvbXAKKyAgICAgICAgICAgICAgICAgICAgICAgID09IFB0cl9HbG9iLT5QdHJfQ29tcCAqLworICBpZiAoTmV4dF9SZWNvcmQtPkRpc2NyID09IElkZW50XzEpCisgICAgLyogdGhlbiwgZXhlY3V0ZWQgKi8KKyAgeworICAgIE5leHRfUmVjb3JkLT52YXJpYW50LnZhcl8xLkludF9Db21wID0gNjsKKyAgICBQcm9jXzYgKFB0cl9WYWxfUGFyLT52YXJpYW50LnZhcl8xLkVudW1fQ29tcCwKKyAgICAgICAgICAgJk5leHRfUmVjb3JkLT52YXJpYW50LnZhcl8xLkVudW1fQ29tcCk7CisgICAgTmV4dF9SZWNvcmQtPlB0cl9Db21wID0gUHRyX0dsb2ItPlB0cl9Db21wOworICAgIFByb2NfNyAoTmV4dF9SZWNvcmQtPnZhcmlhbnQudmFyXzEuSW50X0NvbXAsIDEwLAorICAgICAgICAgICAmTmV4dF9SZWNvcmQtPnZhcmlhbnQudmFyXzEuSW50X0NvbXApOworICB9CisgIGVsc2UgLyogbm90IGV4ZWN1dGVkICovCisgICAgc3RydWN0YXNzaWduICgqUHRyX1ZhbF9QYXIsICpQdHJfVmFsX1Bhci0+UHRyX0NvbXApOworfSAvKiBQcm9jXzEgKi8KKworCit2b2lkIFByb2NfMiAoT25lX0ZpZnR5ICAgKkludF9QYXJfUmVmKQorICAgIC8qIGV4ZWN1dGVkIG9uY2UgKi8KKyAgICAvKiAqSW50X1Bhcl9SZWYgPT0gMSwgYmVjb21lcyA0ICovCit7CisgIE9uZV9GaWZ0eSAgSW50X0xvYzsKKyAgRW51bWVyYXRpb24gICBFbnVtX0xvYzsKKworICBFbnVtX0xvYyA9IDA7CisKKyAgSW50X0xvYyA9ICpJbnRfUGFyX1JlZiArIDEwOworICBkbyAvKiBleGVjdXRlZCBvbmNlICovCisgICAgaWYgKENoXzFfR2xvYiA9PSAnQScpCisgICAgICAvKiB0aGVuLCBleGVjdXRlZCAqLworICAgIHsKKyAgICAgIEludF9Mb2MgLT0gMTsKKyAgICAgICpJbnRfUGFyX1JlZiA9IEludF9Mb2MgLSBJbnRfR2xvYjsKKyAgICAgIEVudW1fTG9jID0gSWRlbnRfMTsKKyAgICB9IC8qIGlmICovCisgIHdoaWxlIChFbnVtX0xvYyAhPSBJZGVudF8xKTsgLyogdHJ1ZSAqLworfSAvKiBQcm9jXzIgKi8KKworCit2b2lkIFByb2NfMyAoUmVjX1BvaW50ZXIgKlB0cl9SZWZfUGFyKQorICAgIC8qIGV4ZWN1dGVkIG9uY2UgKi8KKyAgICAvKiBQdHJfUmVmX1BhciBiZWNvbWVzIFB0cl9HbG9iICovCit7CisgIGlmIChQdHJfR2xvYiAhPSBOdWxsKQorICAgIC8qIHRoZW4sIGV4ZWN1dGVkICovCisgICAgKlB0cl9SZWZfUGFyID0gUHRyX0dsb2ItPlB0cl9Db21wOworICBQcm9jXzcgKDEwLCBJbnRfR2xvYiwgJlB0cl9HbG9iLT52YXJpYW50LnZhcl8xLkludF9Db21wKTsKK30gLyogUHJvY18zICovCisKKwordm9pZCBQcm9jXzQgKHZvaWQpIC8qIHdpdGhvdXQgcGFyYW1ldGVycyAqLworICAgIC8qIGV4ZWN1dGVkIG9uY2UgKi8KK3sKKyAgQm9vbGVhbiBCb29sX0xvYzsKKworICBCb29sX0xvYyA9IENoXzFfR2xvYiA9PSAnQSc7CisgIEJvb2xfR2xvYiA9IEJvb2xfTG9jIHwgQm9vbF9HbG9iOworICBDaF8yX0dsb2IgPSAnQic7Cit9IC8qIFByb2NfNCAqLworCit2b2lkIFByb2NfNSAodm9pZCkgLyogd2l0aG91dCBwYXJhbWV0ZXJzICovCisvKioqKioqKi8KKyAgICAvKiBleGVjdXRlZCBvbmNlICovCit7CisgIENoXzFfR2xvYiA9ICdBJzsKKyAgQm9vbF9HbG9iID0gZmFsc2U7Cit9IC8qIFByb2NfNSAqLworCisKKyAgICAgICAgLyogUHJvY2VkdXJlIGZvciB0aGUgYXNzaWdubWVudCBvZiBzdHJ1Y3R1cmVzLCAgICAgICAgICAqLworICAgICAgICAvKiBpZiB0aGUgQyBjb21waWxlciBkb2Vzbid0IHN1cHBvcnQgdGhpcyBmZWF0dXJlICAgICAgICovCisjaWZkZWYgIE5PU1RSVUNUQVNTSUdOCittZW1jcHkgKGQsIHMsIGwpCityZWdpc3RlciBjaGFyICAgKmQ7CityZWdpc3RlciBjaGFyICAgKnM7CityZWdpc3RlciBpbnQgICAgbDsKK3sKKyAgICAgICAgd2hpbGUgKGwtLSkgKmQrKyA9ICpzKys7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9iZW5jaG1hcmtzL2RocnlzdG9uZTIxL2RocnlfMi5jIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL2JlbmNobWFya3MvZGhyeXN0b25lMjEvZGhyeV8yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQwMTYxZgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9iZW5jaG1hcmtzL2RocnlzdG9uZTIxL2RocnlfMi5jCkBAIC0wLDAgKzEsMjA5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBUaGUgQllURSBVTklYIEJlbmNobWFya3MgLSBSZWxlYXNlIDMKKyAqICAgICAgICAgIE1vZHVsZTogZGhyeV8yLmMgICBTSUQ6IDMuNCA1LzE1LzkxIDE5OjMwOjIyCisgKiAgICAgICAgICAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQnVnIHJlcG9ydHMsIHBhdGNoZXMsIGNvbW1lbnRzLCBzdWdnZXN0aW9ucyBzaG91bGQgYmUgc2VudCB0bzoKKyAqCisgKglCZW4gU21pdGgsIFJpY2sgR3JlaGFuIG9yIFRvbSBZYWdlcgorICoJYmVuQGJ5dGVwYi5ieXRlLmNvbSAgIHJpY2tfZ0BieXRlcGIuYnl0ZS5jb20gICB0eWFnZXJAYnl0ZXBiLmJ5dGUuY29tCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgTW9kaWZpY2F0aW9uIExvZzoKKyAqICAxMC8yMi85NyAtIGNvZGUgY2xlYW51cCB0byByZW1vdmUgQU5TSSBDIGNvbXBpbGVyIHdhcm5pbmdzCisgKiAgICAgICAgICAgICBBbmR5IEthaG4gPGthaG5AemszLmRlYy5jb20+CisgKgorICogIEFkYXB0ZWQgZnJvbToKKyAqCisgKiAgICAgICAgICAgICAgICAgICAiREhSWVNUT05FIiBCZW5jaG1hcmsgUHJvZ3JhbQorICogICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiAqKioqIFdBUk5JTkcgKioqKiBTZWUgd2FybmluZyBpbiBuLmRocnlfMS5jCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAqICBWZXJzaW9uOiAgICBDLCBWZXJzaW9uIDIuMQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgKiAgRmlsZTogICAgICAgZGhyeV8yLmMgKHBhcnQgMyBvZiAzKQorICoKKyAqICBEYXRlOiAgICAgICBNYXkgMjUsIDE5ODgKKyAqCisgKiAgQXV0aG9yOiAgICAgUmVpbmhvbGQgUC4gV2VpY2tlcgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogU0NDU2lkIGlzIGRlZmluZWQgaW4gZGhyeV8xLmMgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgImRocnkuaCIKKworI2lmbmRlZiBSRUcKKyNkZWZpbmUgUkVHCisgICAgICAgIC8qIFJFRyBiZWNvbWVzIGRlZmluZWQgYXMgZW1wdHkgKi8KKyAgICAgICAgLyogaS5lLiBubyByZWdpc3RlciB2YXJpYWJsZXMgICAqLworI2VuZGlmCisKK2V4dGVybiAgaW50ICAgICBJbnRfR2xvYjsKK2V4dGVybiAgY2hhciAgICBDaF8xX0dsb2I7CisKK3ZvaWQgUHJvY182KEVudW1lcmF0aW9uLCBFbnVtZXJhdGlvbiAqKTsKK3ZvaWQgUHJvY183KE9uZV9GaWZ0eSwgT25lX0ZpZnR5LCBPbmVfRmlmdHkgKik7Cit2b2lkIFByb2NfOChBcnJfMV9EaW0sIEFycl8yX0RpbSwgaW50LCBpbnQpOworRW51bWVyYXRpb24gRnVuY18xKENhcGl0YWxfTGV0dGVyLCBDYXBpdGFsX0xldHRlcik7CitCb29sZWFuIEZ1bmNfMihTdHJfMzAsIFN0cl8zMCk7CitCb29sZWFuIEZ1bmNfMyhFbnVtZXJhdGlvbik7CisKK3ZvaWQgUHJvY182IChFbnVtZXJhdGlvbiBFbnVtX1ZhbF9QYXIsIEVudW1lcmF0aW9uICpFbnVtX1JlZl9QYXIpCisgICAgLyogZXhlY3V0ZWQgb25jZSAqLworICAgIC8qIEVudW1fVmFsX1BhciA9PSBJZGVudF8zLCBFbnVtX1JlZl9QYXIgYmVjb21lcyBJZGVudF8yICovCit7CisgICpFbnVtX1JlZl9QYXIgPSBFbnVtX1ZhbF9QYXI7CisgIGlmICghIEZ1bmNfMyAoRW51bV9WYWxfUGFyKSkKKyAgICAvKiB0aGVuLCBub3QgZXhlY3V0ZWQgKi8KKyAgICAqRW51bV9SZWZfUGFyID0gSWRlbnRfNDsKKyAgc3dpdGNoIChFbnVtX1ZhbF9QYXIpCisgIHsKKyAgICBjYXNlIElkZW50XzE6IAorICAgICAgKkVudW1fUmVmX1BhciA9IElkZW50XzE7CisgICAgICBicmVhazsKKyAgICBjYXNlIElkZW50XzI6IAorICAgICAgaWYgKEludF9HbG9iID4gMTAwKQorICAgICAgICAvKiB0aGVuICovCisgICAgICAqRW51bV9SZWZfUGFyID0gSWRlbnRfMTsKKyAgICAgIGVsc2UgKkVudW1fUmVmX1BhciA9IElkZW50XzQ7CisgICAgICBicmVhazsKKyAgICBjYXNlIElkZW50XzM6IC8qIGV4ZWN1dGVkICovCisgICAgICAqRW51bV9SZWZfUGFyID0gSWRlbnRfMjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgSWRlbnRfNDogYnJlYWs7CisgICAgY2FzZSBJZGVudF81OiAKKyAgICAgICpFbnVtX1JlZl9QYXIgPSBJZGVudF8zOworICAgICAgYnJlYWs7CisgIH0gLyogc3dpdGNoICovCit9IC8qIFByb2NfNiAqLworCit2b2lkIFByb2NfNyAoSW50XzFfUGFyX1ZhbCwgSW50XzJfUGFyX1ZhbCwgSW50X1Bhcl9SZWYpCitPbmVfRmlmdHkgICAgICAgSW50XzFfUGFyX1ZhbDsKK09uZV9GaWZ0eSAgICAgICBJbnRfMl9QYXJfVmFsOworT25lX0ZpZnR5ICAgICAgKkludF9QYXJfUmVmOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyogZXhlY3V0ZWQgdGhyZWUgdGltZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovIAorICAgIC8qIGZpcnN0IGNhbGw6ICAgICAgSW50XzFfUGFyX1ZhbCA9PSAyLCBJbnRfMl9QYXJfVmFsID09IDMsICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgSW50X1Bhcl9SZWYgYmVjb21lcyA3ICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIHNlY29uZCBjYWxsOiAgICAgSW50XzFfUGFyX1ZhbCA9PSAxMCwgSW50XzJfUGFyX1ZhbCA9PSA1LCAqLworICAgIC8qICAgICAgICAgICAgICAgICAgSW50X1Bhcl9SZWYgYmVjb21lcyAxNyAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIHRoaXJkIGNhbGw6ICAgICAgSW50XzFfUGFyX1ZhbCA9PSA2LCBJbnRfMl9QYXJfVmFsID09IDEwLCAqLworICAgIC8qICAgICAgICAgICAgICAgICAgSW50X1Bhcl9SZWYgYmVjb21lcyAxOCAgICAgICAgICAgICAgICAgICAqLworeworICBPbmVfRmlmdHkgSW50X0xvYzsKKworICBJbnRfTG9jID0gSW50XzFfUGFyX1ZhbCArIDI7CisgICpJbnRfUGFyX1JlZiA9IEludF8yX1Bhcl9WYWwgKyBJbnRfTG9jOworfSAvKiBQcm9jXzcgKi8KKworCit2b2lkIFByb2NfOCAoQXJyXzFfUGFyX1JlZiwgQXJyXzJfUGFyX1JlZiwgSW50XzFfUGFyX1ZhbCwgSW50XzJfUGFyX1ZhbCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyogZXhlY3V0ZWQgb25jZSAgICAgICovCisgICAgLyogSW50X1Bhcl9WYWxfMSA9PSAzICovCisgICAgLyogSW50X1Bhcl9WYWxfMiA9PSA3ICovCitBcnJfMV9EaW0gICAgICAgQXJyXzFfUGFyX1JlZjsKK0Fycl8yX0RpbSAgICAgICBBcnJfMl9QYXJfUmVmOworaW50ICAgICAgICAgICAgIEludF8xX1Bhcl9WYWw7CitpbnQgICAgICAgICAgICAgSW50XzJfUGFyX1ZhbDsKK3sKKyAgUkVHIE9uZV9GaWZ0eSBJbnRfSW5kZXg7CisgIFJFRyBPbmVfRmlmdHkgSW50X0xvYzsKKworICBJbnRfTG9jID0gSW50XzFfUGFyX1ZhbCArIDU7CisgIEFycl8xX1Bhcl9SZWYgW0ludF9Mb2NdID0gSW50XzJfUGFyX1ZhbDsKKyAgQXJyXzFfUGFyX1JlZiBbSW50X0xvYysxXSA9IEFycl8xX1Bhcl9SZWYgW0ludF9Mb2NdOworICBBcnJfMV9QYXJfUmVmIFtJbnRfTG9jKzMwXSA9IEludF9Mb2M7CisgIGZvciAoSW50X0luZGV4ID0gSW50X0xvYzsgSW50X0luZGV4IDw9IEludF9Mb2MrMTsgKytJbnRfSW5kZXgpCisgICAgQXJyXzJfUGFyX1JlZiBbSW50X0xvY10gW0ludF9JbmRleF0gPSBJbnRfTG9jOworICBBcnJfMl9QYXJfUmVmIFtJbnRfTG9jXSBbSW50X0xvYy0xXSArPSAxOworICBBcnJfMl9QYXJfUmVmIFtJbnRfTG9jKzIwXSBbSW50X0xvY10gPSBBcnJfMV9QYXJfUmVmIFtJbnRfTG9jXTsKKyAgSW50X0dsb2IgPSA1OworfSAvKiBQcm9jXzggKi8KKworCitFbnVtZXJhdGlvbiBGdW5jXzEgKENhcGl0YWxfTGV0dGVyIENoXzFfUGFyX1ZhbCwgQ2FwaXRhbF9MZXR0ZXIgQ2hfMl9QYXJfVmFsKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyogZXhlY3V0ZWQgdGhyZWUgdGltZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogZmlyc3QgY2FsbDogICAgICBDaF8xX1Bhcl9WYWwgPT0gJ0gnLCBDaF8yX1Bhcl9WYWwgPT0gJ1InICAgICovCisgICAgLyogc2Vjb25kIGNhbGw6ICAgICBDaF8xX1Bhcl9WYWwgPT0gJ0EnLCBDaF8yX1Bhcl9WYWwgPT0gJ0MnICAgICovCisgICAgLyogdGhpcmQgY2FsbDogICAgICBDaF8xX1Bhcl9WYWwgPT0gJ0InLCBDaF8yX1Bhcl9WYWwgPT0gJ0MnICAgICovCit7CisgIENhcGl0YWxfTGV0dGVyICAgICAgICBDaF8xX0xvYzsKKyAgQ2FwaXRhbF9MZXR0ZXIgICAgICAgIENoXzJfTG9jOworCisgIENoXzFfTG9jID0gQ2hfMV9QYXJfVmFsOworICBDaF8yX0xvYyA9IENoXzFfTG9jOworICBpZiAoQ2hfMl9Mb2MgIT0gQ2hfMl9QYXJfVmFsKQorICAgIC8qIHRoZW4sIGV4ZWN1dGVkICovCisgICAgcmV0dXJuIChJZGVudF8xKTsKKyAgZWxzZSAgLyogbm90IGV4ZWN1dGVkICovCisgIHsKKyAgICBDaF8xX0dsb2IgPSBDaF8xX0xvYzsKKyAgICByZXR1cm4gKElkZW50XzIpOworICAgfQorfSAvKiBGdW5jXzEgKi8KKworCisKK0Jvb2xlYW4gRnVuY18yIChTdHJfMV9QYXJfUmVmLCBTdHJfMl9QYXJfUmVmKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyogZXhlY3V0ZWQgb25jZSAqLworICAgIC8qIFN0cl8xX1Bhcl9SZWYgPT0gIkRIUllTVE9ORSBQUk9HUkFNLCAxJ1NUIFNUUklORyIgKi8KKyAgICAvKiBTdHJfMl9QYXJfUmVmID09ICJESFJZU1RPTkUgUFJPR1JBTSwgMidORCBTVFJJTkciICovCisKK1N0cl8zMCAgU3RyXzFfUGFyX1JlZjsKK1N0cl8zMCAgU3RyXzJfUGFyX1JlZjsKK3sKKyAgUkVHIE9uZV9UaGlydHkgICAgICAgIEludF9Mb2M7CisgICAgICBDYXBpdGFsX0xldHRlciAgICBDaF9Mb2M7CisKKyAgQ2hfTG9jID0gJ0EnOworICBJbnRfTG9jID0gMjsKKyAgd2hpbGUgKEludF9Mb2MgPD0gMikgLyogbG9vcCBib2R5IGV4ZWN1dGVkIG9uY2UgKi8KKyAgICBpZiAoRnVuY18xIChTdHJfMV9QYXJfUmVmW0ludF9Mb2NdLAorICAgICAgICAgICAgICAgIFN0cl8yX1Bhcl9SZWZbSW50X0xvYysxXSkgPT0gSWRlbnRfMSkKKyAgICAgIC8qIHRoZW4sIGV4ZWN1dGVkICovCisgICAgeworICAgICAgQ2hfTG9jID0gJ0EnOworICAgICAgSW50X0xvYyArPSAxOworICAgIH0gLyogaWYsIHdoaWxlICovCisgIGlmIChDaF9Mb2MgPj0gJ1cnICYmIENoX0xvYyA8ICdaJykKKyAgICAvKiB0aGVuLCBub3QgZXhlY3V0ZWQgKi8KKyAgICBJbnRfTG9jID0gNzsKKyAgaWYgKENoX0xvYyA9PSAnUicpCisgICAgLyogdGhlbiwgbm90IGV4ZWN1dGVkICovCisgICAgcmV0dXJuICh0cnVlKTsKKyAgZWxzZSAvKiBleGVjdXRlZCAqLworICB7CisgICAgaWYgKHN0cmNtcCAoU3RyXzFfUGFyX1JlZiwgU3RyXzJfUGFyX1JlZikgPiAwKQorICAgICAgLyogdGhlbiwgbm90IGV4ZWN1dGVkICovCisgICAgeworICAgICAgSW50X0xvYyArPSA3OworICAgICAgSW50X0dsb2IgPSBJbnRfTG9jOworICAgICAgcmV0dXJuICh0cnVlKTsKKyAgICB9CisgICAgZWxzZSAvKiBleGVjdXRlZCAqLworICAgICAgcmV0dXJuIChmYWxzZSk7CisgIH0gLyogaWYgQ2hfTG9jICovCit9IC8qIEZ1bmNfMiAqLworCisKK0Jvb2xlYW4gRnVuY18zIChFbnVtX1Bhcl9WYWwpCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qIGV4ZWN1dGVkIG9uY2UgICAgICAgICovCisgICAgLyogRW51bV9QYXJfVmFsID09IElkZW50XzMgKi8KK0VudW1lcmF0aW9uIEVudW1fUGFyX1ZhbDsKK3sKKyAgRW51bWVyYXRpb24gRW51bV9Mb2M7CisKKyAgRW51bV9Mb2MgPSBFbnVtX1Bhcl9WYWw7CisgIGlmIChFbnVtX0xvYyA9PSBJZGVudF8zKQorICAgIC8qIHRoZW4sIGV4ZWN1dGVkICovCisgICAgcmV0dXJuICh0cnVlKTsKKyAgZWxzZSAvKiBub3QgZXhlY3V0ZWQgKi8KKyAgICByZXR1cm4gKGZhbHNlKTsKK30gLyogRnVuY18zICovCisKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9oZWxsby9NYWtlZmlsZSBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9oZWxsby9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjU1ZDYwCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL2hlbGxvL01ha2VmaWxlCkBAIC0wLDAgKzEsMTMgQEAKK3NyY19kaXIgOj0gJChkaXIgJChsYXN0d29yZCAkKE1BS0VGSUxFX0xJU1QpKSkKKworY19zcmMgOj0gc2NfcHJpbnQuYyBoZWxsby5jCisKK2luY2x1ZGUgJChpbmNfZGlyKS9jb21tb24ubWsKKworZGVmYXVsdDogbG9nX3JlcXVlc3RlZF90Z3QgJChibGRfZGlyKS9oZWxsby5lbGYgJChibGRfZGlyKS9oZWxsby5oZXggJChibGRfZGlyKS9oZWxsby5kdW1wCisKK2xvZ19yZXF1ZXN0ZWRfdGd0OgorCWVjaG8gaGVsbG8uaGV4Pj4gJChibGRfZGlyKS90ZXN0X2luZm8KKworY2xlYW46CisJJChSTSkgJChjX29ianMpICQoYXNtX29ianMpICQoYmxkX2RpcikvaGVsbG8uZWxmICQoYmxkX2RpcikvaGVsbG8uaGV4ICQoYmxkX2RpcikvaGVsbG8uZHVtcApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9oZWxsby9oZWxsby5jIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL2hlbGxvL2hlbGxvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJjZjFiYwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9oZWxsby9oZWxsby5jCkBAIC0wLDAgKzEsNyBAQAorI2luY2x1ZGUgInNjX3ByaW50LmgiCisKK2ludCBtYWluKCkKK3sKKyAgICBzY19wcmludGYoIkhlbGxvIGZyb20gU0NSMSFcbiIpOworICAgIHJldHVybiAwOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9pc3Jfc2FtcGxlL01ha2VmaWxlIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL2lzcl9zYW1wbGUvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM5NWU3NAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9pc3Jfc2FtcGxlL01ha2VmaWxlCkBAIC0wLDAgKzEsMjYgQEAKK3NyY19kaXIgOj0gJChkaXIgJChsYXN0d29yZCAkKE1BS0VGSUxFX0xJU1QpKSkKKworTERGTEFHUyA6PSAtbm9zdGFydGZpbGVzIC1ub3N0ZGxpYiAtbWFyY2g9cnYzMiQoQVJDSCkgLW1hYmk9JChBQkkpCitBRERfQVNNX01BQ1JPIDo9IC1EQVNNCisKK2lmZXEgKCQoSVBJQykgLDEpCisgICAgQUREX0FTTV9NQUNSTyArPSAtRElQSUNfRU5BQkxFRAorZW5kaWYKKworaWZlcSAoJChWRUNUX0lSUSkgLDEpCisgICAgQUREX0FTTV9NQUNSTyArPSAtRFZFQ1RfSVJRX0VOQUJMRUQKK2VuZGlmCithc21fc3JjIDo9IGlzcl9zYW1wbGUuUworCisjIG92ZXJyaWRlIGxkIHNjcmlwdAorbGRfc2NyaXB0IDo9ICQoaW5jX2RpcikvbGluay5sZAorCitpbmNsdWRlICQoaW5jX2RpcikvY29tbW9uLm1rCisKK2RlZmF1bHQ6IGxvZ19yZXF1ZXN0ZWRfdGd0ICQoYmxkX2RpcikvaXNyX3NhbXBsZS5lbGYgJChibGRfZGlyKS9pc3Jfc2FtcGxlLmhleCAkKGJsZF9kaXIpL2lzcl9zYW1wbGUuZHVtcAorCitsb2dfcmVxdWVzdGVkX3RndDoKKwllY2hvIGlzcl9zYW1wbGUuaGV4ID4+ICQoYmxkX2RpcikvdGVzdF9pbmZvCisKK2NsZWFuOgorCSQoUk0pJChhc21fb2JqcykgJChibGRfZGlyKS9pc3Jfc2FtcGxlLmVsZiAkKGJsZF9kaXIpL2lzcl9zYW1wbGUuaGV4ICQoYmxkX2RpcikvaXNyX3NhbXBsZS5kdW1wClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL2lzcl9zYW1wbGUvaXNyX3NhbXBsZS5TIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL2lzcl9zYW1wbGUvaXNyX3NhbXBsZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3YjNkNjMKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvaXNyX3NhbXBsZS9pc3Jfc2FtcGxlLlMKQEAgLTAsMCArMSwyOTEgQEAKKyNpbmNsdWRlICJyaXNjdl9tYWNyb3MuaCIKKyNpbmNsdWRlICJzY190ZXN0LmgiCisKKy5hbHRtYWNybworLy8gZ2xvYmFsIGludGVycnVwdCBiaXQKKyNkZWZpbmUgTVNJRSAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IElSUV9NX1NPRlQpICAgICAgIC8vbWFjaGluZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgZW5hYmxlCisjZGVmaW5lIE1USUUgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCBJUlFfTV9USU1FUikgICAgICAvL21hY2hpbmUgdGltZXIgaW50ZXJydXB0IGVuYWJsZQorI2RlZmluZSBNRUlFICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgSVJRX01fRVhUKSAgICAgICAgLy9tYWNoaW5lIGV4dGVybmFsIGludGVycnVwdCBlbmFibGUKKyNkZWZpbmUgTUNBVVNFX0VYVF9JUlEgICAgICAgICAgICAgICgxIDw8IDMxIHwgSVJRX01fRVhUKQorI2RlZmluZSBNQ0FVU0VfU09GVF9JUlEgICAgICAgICAgICAgKDEgPDwgMzEgfCBJUlFfTV9TT0ZUKQorI2RlZmluZSBNQ0FVU0VfVE1SX0lSUSAgICAgICAgICAgICAgKDEgPDwgMzEgfCBJUlFfTV9USU1FUikKKworLy8gSVBJQworI2RlZmluZSBJUlFfTElORVNfQUREUiAgICAgICAgICAgICAgMHgxMDAyMDAxOCAgICAgIC8vIHNpbXVsYXRpb24KKyNkZWZpbmUgVFJJR19FWFRfSVJRX0FERFIgICAgICAgICAgIDB4MTAwMjAwMTggICAgICAvLyBleHRlcm5hbCBpcnEgaXMgdHJpZ2dlcmVkIHdoZW4gdGIgbWVtb3J5IGlzIHNldCB0byBub24temVybyAvLyBCaXQgWzE1OjBdCisjZGVmaW5lIFRSSUdfU1dfSVJRX0FERFIgICAgICAgICAgICAweDEwMDIwMDE4ICAgICAgLy8gc29mdHdhcmUgaXJxIGlzIHRyaWdnZXJlZCB3aGVuIHRiIG1lbW9yeSBpcyBzZXQgdG8gbm9uLXplcm8gLy8gQml0IFsxNl0KKworI2RlZmluZSBJUElDX0VPSSAgICAgICAgICAgICAgICAgICAgMHhCRjQgICAgICAgICAgIC8vIGVuZCBvZiBpbnRlcnJ1cHQKKyNkZWZpbmUgSVBJQ19TT0kgICAgICAgICAgICAgICAgICAgIDB4QkY1ICAgICAgICAgICAvLyBzdGFydCBvZiBpbnRlcnJ1cHQKKyNkZWZpbmUgSVBJQ19JRFggICAgICAgICAgICAgICAgICAgIDB4QkY2ICAgICAgICAgICAvLyBpbmRleCByZWdpc3RlcgorI2RlZmluZSBJUElDX0lDU1IgICAgICAgICAgICAgICAgICAgMHhCRjcgICAgICAgICAgIC8vIGludGVycnVwdCBjb250cm9sIHN0YXR1cyByZWdpc3RlcgorCisvLyBJUElDIEludGVycnVwdCBDb25zdHJvbCBTdGF0dXMgUmVnaXN0ZXIKKyNkZWZpbmUgSVBJQ19JQ1NSX0lQICAgICAgICAgICAgICAgICgxIDw8IDApICAgICAgICAvLyBpbnRlcnJ1cHQgcGVuZGluZworI2RlZmluZSBJUElDX0lDU1JfSUUgICAgICAgICAgICAgICAgKDEgPDwgMSkgICAgICAgIC8vIGludGVycnVwdCBlbmFibGUKKyNkZWZpbmUgSVBJQ19JQ1NSX0lNICAgICAgICAgICAgICAgICgxIDw8IDIpICAgICAgICAvLyBpbnRlcnJ1cHQgbW9kZSAoMC8xOiBsZXZlbC9lZGdlKQorI2RlZmluZSBJUElDX0lDU1JfSU5WICAgICAgICAgICAgICAgKDEgPDwgMykgICAgICAgIC8vIGxpbmUgaW52ZXJzaW9uCisjZGVmaW5lIElQSUNfSUNTUl9JUyAgICAgICAgICAgICAgICAoMSA8PCA0KSAgICAgICAgLy8gaW4gc2VydmljZQorCisvLyAgSW50ZXJydXB0IGxpbmVzIGluIHVzZSAKKyNkZWZpbmUgSVBJQ19JUlFfTElORTkgICAgICAgICAgICAgIDkKKyNkZWZpbmUgRVhUX0lSUV9MSU5FX0NPTU1PTiAgICAgICAgIDAKKworI2luY2x1ZGUgInRpbWVyLmgiCisjaW5jbHVkZSAicmVsb2MuaCIKKworLm1hY3JvIGptcF9zY19leGl0CisgICAgbGEgIHQwLCBzY19leGl0CisgICAganIgIHQwCisuZW5kbQorCisgICAgLnNlY3Rpb24gLnRleHQuaW5pdAorICAgIC5vcHRpb24gbm9ydmMKKyAgICAuZ2xvYmwgX3N0YXJ0CisvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRyYXAgaGFuZGxlcnMKKy8vIDB4WFhYWFhYMDAKKyAgICAub3B0aW9uIG5vcnZjCisub3JnICg2NCozKQorCisvLzB4WFhYWFhYQzAKKyAgICAuYmFsaWduIDY0CittYWNoaW5lX3RyYXBfZW50cnk6Cit2ZWNfdXNyX3NvZnQ6CisjaWZkZWYgVkVDVF9JUlFfRU5BQkxFRAorICAgIHRyYXBfZW50cnk6CisgICAgICAgIGogICAgX3RyYXBfZmFpbAorICAgIHZlY19zdXBlcnZpc29yX3NvZnQ6CisgICAgICAgIGogICAgX3RyYXBfZmFpbAorICAgIHZlY19yZXNlcnZlZDE6CisgICAgICAgIGogICAgX3RyYXBfZmFpbAorICAgIHZlY19tYWNoaW5lX3NvZnQ6CisgICAgICAgIGogICAgdmVjX21hY2hpbmVfc29mdF9oYW5kbGVyCisgICAgdmVjX3Vzcl90bXI6CisgICAgICAgIGogICAgX3RyYXBfZmFpbAorICAgIHZlY19zdXBlcnZpc29yX3RtcjoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX3Jlc2VydmVkMjoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX21hY2hpbmVfdG1yOgorICAgICAgICBqICAgIHZlY19tYWNoaW5lX3Rtcl9oYW5kbGVyCisgICAgdmVjX3Vzcl9leHQ6CisgICAgICAgIGogICAgX3RyYXBfZmFpbAorICAgIHZlY19zdXBlcnZpc29yX2V4dDoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX3Jlc2VydmVkMzoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX21hY2hpbmVfZXh0OgorICAgICAgICBqICAgIHZlY19tYWNoaW5lX2V4dF9oYW5kbGVyCisgICAgdmVjX3Jlc2VydmVkNDoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgICAgIGogICAgX3RyYXBfZmFpbAorICAgICAgICBqICAgIF90cmFwX2ZhaWwKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisjZWxzZQorICAgIHRyYXBfZW50cnk6CisgICAgICAgIGogICAgZGlyZWN0X2lycV9oYW5kbGVyCisgICAgdmVjX3N1cGVydmlzb3Jfc29mdDoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX3Jlc2VydmVkMToKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX21hY2hpbmVfc29mdDoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX3Vzcl90bXI6CisgICAgICAgIGogICAgX3RyYXBfZmFpbAorICAgIHZlY19zdXBlcnZpc29yX3RtcjoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX3Jlc2VydmVkMjoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX21hY2hpbmVfdG1yOgorICAgICAgICBqICAgIF90cmFwX2ZhaWwKKyAgICB2ZWNfdXNyX2V4dDoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX3N1cGVydmlzb3JfZXh0OgorICAgICAgICBqICAgIF90cmFwX2ZhaWwKKyAgICB2ZWNfcmVzZXJ2ZWQzOgorICAgICAgICBqICAgIF90cmFwX2ZhaWwKKyAgICB2ZWNfbWFjaGluZV9leHQ6CisgICAgICAgIGogICAgX3RyYXBfZmFpbAorICAgIHZlY19yZXNlcnZlZDQ6CisgICAgICAgIGogICAgX3RyYXBfZmFpbAorICAgICAgICBqICAgIF90cmFwX2ZhaWwKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgICAgIGogICAgX3RyYXBfZmFpbAorCisjZW5kaWYgLy8gaWZkZWYgVkVDVF9JUlFfRU5BQkxFRAorCisKKyAgICAuYmFsaWduIDY0Citfc3RhcnQ6CisgICAgbGEgICAgICAgICAgICAgICAgICB0MCwgbWFjaGluZV90cmFwX2VudHJ5CisgICAgY3NydyAgICAgICAgICAgICAgICBtdHZlYywgdDAKKworICAgIGxhICAgICAgICAgICAgICAgICAgdDAsICB0ZXN0X3N0YXJ0CisgICAganIgICAgICAgICAgICAgICAgICAodDApCisKKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC5vcHRpb24gbm9ydmMKKyAgICAuYmFsaWduIDY0Cit0ZXN0X3N0YXJ0OgorICAgIAorICAgIGxhICAgICAgICAgICAgICAgICAgdDAsIHRyYXBfZW50cnkKKyAgICBjc3J3ICAgICAgICAgICAgICAgIG10dmVjLCB0MCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2V0IG10dmVjIHRvIHRyYXBfZW50cnkKKyAgICAjaWZkZWYgVkVDVF9JUlFfRU5BQkxFRAorICAgICAgICBjc3JzaSAgICAgICAgICAgICAgIG10dmVjLCAxICAgICAgICAgICAgICAgICAgICAgICAvLyBzZXQgdmVjdG9yZWQgbW9kZQorICAgICNlbHNlCisgICAgICAgIGNzcnNpICAgICAgICAgICAgICAgbXR2ZWMsIDAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNldCBkaXJlY3QgbW9kZQorICAgICNlbmRpZgorCisgICAgLy8vIGNvbmZpZ3VyaW5nIHRpbWVyIGludGVycnVwdCAvLy8gCisgICAgX3Jlc2V0X210aW1lY21wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzZXQgdGltZXIKKyAgICBfcnVuX3RpbWVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBydW4gdGltZXIKKyAgICBjc3JzICAgICAgICAgICAgICAgIG1zdGF0dXMsIE1TVEFUVVNfTUlFICAgICAgICAgICAvLyBlbmFibGUgZ2xvYmFsIGludGVycnVwdAorICAgIGxpICAgICAgICAgICAgICAgICAgYTAsIE1USUUgICAgICAgICAgICAgICAgICAgICAgIAorICAgIGNzcnMgICAgICAgICAgICAgICAgbWllLCBhMCAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVuYWJsZSB0aW1lciBpbnRlcnJ1cHQKKyAgICBsaSAgICAgICAgICAgICAgICAgIHQyLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXNldCB0aW1lciBjb3VudGVyID0gMCAodXBkYXRlZCBpbiBpc3IpCisgICAgX3JlYWRfbXRpbWUgICAgICAgICBzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVhZCB0aW1lciB2YWx1ZQorICAgIGFkZGkgICAgICAgICAgICAgICAgczEsIHMxLCAyNTYKKyAgICBfd3JpdGVfbXRpbWVjbXBfMzIgIHMxIAorICAgIHdmaSAgCisKKworICAgLy8vIGNvbmZpZ3VyaW5nIGV4dGVybmFsIGludGVycnVwdCAvLy8gCisgICAgY3NydyAgICAgICAgICAgICAgICBtaWUsIHplcm8gICAgICAgICAgICAgICAgICAgICAgLy8gZGlzYWJsZSBhbGwgaW50ZXJydXB0cworICAgIGxpICAgICAgICAgICAgICAgICAgdDAsIElSUV9MSU5FU19BRERSCisgICAgc2ggICAgICAgICAgICAgICAgICB6ZXJvLCAodDApICAgICAgICAgICAgICAgICAgICAgLy8gc2V0IGFsbCBleHRlcmluYWwgaW50ZXJydXB0IGxpbmVzIGxvdworICAgICNpZmRlZiBJUElDX0VOQUJMRUQKKyAgICAgICAgbGkgICAgICAgICAgICAgICAgICB0MCwgSVBJQ19JUlFfTElORTkKKyAgICAgICAgY3NydyAgICAgICAgICAgICAgICBJUElDX0lEWCwgdDAgICAgICAgICAgICAgICAvLyBzZXQgSVBJQyB0byBleHBlY3QgaW50ZXJ1cHQgb24gbGluZSA5Li4uCisgICAgICAgIGxpICAgICAgICAgICAgICAgICAgdDAsIChJUElDX0lDU1JfSUUgfCBJUElDX0lDU1JfSU0pCisgICAgICAgIGNzcncgICAgICAgICAgICAgICAgSVBJQ19JQ1NSLCB0MCAgICAgICAgICAgICAgLy8gIC4uLi5lbmFibGUgaW50ZXJydXB0LHNldCBlZGdlIGludGVycnVwdCBtb2RlCisgICAgI2VuZGlmCisgICAgbGkgICAgICAgICAgICAgICAgICB0MCwgTUVJRQorICAgIGNzcnMgICAgICAgICAgICAgICAgbWllLCB0MCAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVuYWJsZSBleHRlcm5hbCBpbnRlcnJ1cHQgCisgICAgbGkgICAgICAgICAgICAgICAgICB0MCwgVFJJR19FWFRfSVJRX0FERFIKKyAgICAjaWZkZWYgSVBJQ19FTkFCTEVEICAgICAgICAgIAorICAgICAgICBsaSAgICAgICAgICAgICAgICAgIHQxLCAoMSA8PCBJUElDX0lSUV9MSU5FOSkKKyAgICAjZWxzZQorICAgICAgICBsaSAgICAgICAgICAgICAgICAgIHQxLCAoMSA8PCBFWFRfSVJRX0xJTkVfQ09NTU9OKQorICAgICNlbmRpZgorICAgIHNoICAgICAgICAgICAgICAgICAgdDEsICh0MCkgICAgICAgICAgICAgICAgICAgICAgIC8vc2VuZCBjb21tYW5kIHRvIGdlbmVyYXRlIGV4dGVybmFsIGludGVycnVwdCBvbiBsaW5lIDkgdG8gdGVzdGJlbmNoCisgICAgbm9wCisgICAgbm9wCisgICAgbm9wCisgICAgbm9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy93YWl0IGZvciBleHRlcm5hbCBpbnRlcnJ1cHQKKworCisgICAgLy8vIGNvbmZpZ3VyaW5nIHNvZnR3YXJlIGludGVycnVwdCAvLy8gCisgICAgY3NydyAgICAgICAgICAgICAgICBtaWUsIHplcm8gICAgICAgICAgICAgICAgICAgICAgLy8gZGlzYWJsZSBhbGwgaW50ZXJydXB0cworICAgIGxpICAgICAgICAgICAgICAgICAgdDAsIFRSSUdfU1dfSVJRX0FERFIKKyAgICBsaSAgICAgICAgICAgICAgICAgIHQxLCAweDAwMDEwMDAwICAgICAgICAgICAgICAgICAvLyBTb2Z0IGlyZXEgYml0IFsxNl0gCisgICAgc3cgICAgICAgICAgICAgICAgICB0MSwgKHQwKSAgICAgICAgICAgICAgICAgICAgICAgLy9zZW5kIGNvbW1hbmQgdG8gZ2VuZXJhdGUgc29mdHdhcmUgaW50ZXJydXB0IAorICAgIGxpICAgICAgICAgICAgICAgICAgdDAsIE1TSUUKKyAgICBjc3JzICAgICAgICAgICAgICAgIG1pZSwgdDAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlbmFibGUgc29mdHdhcmUgaW50ZXJydXB0IAorICAgIG5vcAorICAgIG5vcAorICAgIG5vcAorICAgIG5vcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vd2FpdCBmb3Igc29mdHdhcmUgaW50ZXJydXB0CisKKyAgICBsaSAgICAgICAgICAgICAgICAgIHMxLCAzCisgICAgbGkgICAgICAgICAgICAgICAgICBhMCwgMAorICAgIGJlcSAgICAgICAgICAgICAgICAgdDIsIHMxLCAxZgorICAgIGxpICAgICAgICAgICAgICAgICAgYTAsIC0xCisxOgorICAgIGptcF9zY19leGl0CisKKworI2lmbmRlZiBWRUNUX0lSUV9FTkFCTEVECisKK2RpcmVjdF9pcnFfaGFuZGxlcjoKKyAgICBjc3JyICAgICAgICAgICAgYTEsIG1jYXVzZQorICAgIGxpICAgICAgICAgICAgICBhNSwgTUNBVVNFX1RNUl9JUlEgICAgICAvLzB4ODAwMDAwMDcgLS0gbWNhdXNlID0gdG1yLmlycQorICAgIGJlcSAgICAgICAgICAgICBhMSwgYTUsIHZlY19tYWNoaW5lX3Rtcl9oYW5kbGVyCisgICAgbGkgICAgICAgICAgICAgIGE1LCBNQ0FVU0VfU09GVF9JUlEgICAgIC8vMHg4MDAwMDAwMyAtLSBtY2F1c2UgPSBzb2Z0LmlycQorICAgIGJlcSAgICAgICAgICAgICBhMSwgYTUsIHZlY19tYWNoaW5lX3NvZnRfaGFuZGxlcgorICAgIGxpICAgICAgICAgICAgICBhNSwgTUNBVVNFX0VYVF9JUlEgICAgICAvLzB4ODAwMDAwMEIgLS0gbWNhdXNlID0gZXh0LmlycQorICAgIGJlcSAgICAgICAgICAgICBhMSwgYTUsIHZlY19tYWNoaW5lX2V4dF9oYW5kbGVyCisgICAgbXJldAorI2VuZGlmCisKK3ZlY19tYWNoaW5lX3Rtcl9oYW5kbGVyOgorICAgIGNzcnIgICAgICAgICAgICBhMSwgbWNhdXNlCisgICAgbGkgICAgICAgICAgICAgIGE1LCBNQ0FVU0VfVE1SX0lSUSAgICAgIC8vMHg4MDAwMDAwNyAtLSBtY2F1c2UgPSB0bXIuaXJxCisgICAgbGkgICAgICAgICAgICAgIGEwLCAtMQorICAgIGJuZSAgICAgICAgICAgICBhMSwgYTUsIGNoZWNrX2ZhaWwKKyAgICBjc3JyICAgICAgICAgICAgdDEsIG1pcAorICAgIGxpICAgICAgICAgICAgICB0MCwgTUlQX01USVAKKyAgICBhbmQgICAgICAgICAgICAgdDAsIHQxLCB0MAorICAgIGJlcXogICAgICAgICAgICB0MCwgY2hlY2tfZmFpbAorI2lmZGVmIElQSUNfRU5BQkxFRAorICAgIGNzcncgICAgICAgICAgICBJUElDX1NPSSwgemVybworICAgIGNzcncgICAgICAgICAgICBJUElDX0VPSSwgemVybworI2VuZGlmCisgICAgX3Jlc2V0X210aW1lY21wCisgICAgY3NyciAgICAgICAgICAgIHQxLCBtaXAKKyAgICBhbmRpICAgICAgICAgICAgdDEsIHQxLCBNSVBfTVRJUAorICAgIGJuZSAgICAgICAgICAgICB0MSwgemVybywgY2hlY2tfZmFpbAorICAgIGFkZGkgICAgICAgICAgICB0MiwgdDIsIDEgICAgICAgICAgICAgICAvLyB0bXIgaXJxIGNvdW50ZXIgdXBkYXRlCisgICAgbXJldAorCit2ZWNfbWFjaGluZV9leHRfaGFuZGxlcjoKKworICAgIGNzcnIgICAgICAgICAgICBhMSwgbWNhdXNlCisgICAgbGkgICAgICAgICAgICAgIGE1LCBNQ0FVU0VfRVhUX0lSUSAgICAgIC8vMHg4MDAwMDAwQiAtLSBtY2F1c2UgPSBleHQuaXJxCisgICAgbGkgICAgICAgICAgICAgIGEwLCAtMQorICAgIGJuZSAgICAgICAgICAgICBhMSwgYTUsIGNoZWNrX2ZhaWwKKyAgICBjc3JyICAgICAgICAgICAgdDEsIG1pcAorICAgIGxpICAgICAgICAgICAgICB0MCwgTUlQX01FSVAKKyAgICBhbmQgICAgICAgICAgICAgdDAsIHQxLCB0MAorICAgIGJlcXogICAgICAgICAgICB0MCwgY2hlY2tfZmFpbAorI2lmZGVmIElQSUNfRU5BQkxFRAorICAgIGNzcncgICAgICAgICAgICBJUElDX1NPSSwgemVybworICAgIGNzcncgICAgICAgICAgICBJUElDX0VPSSwgemVybworI2VuZGlmCisgICAgbGkgICAgICAgICAgICAgICAgICB0MCwgTUVJRQorICAgIGNzcmMgICAgICAgICAgICAgICAgbWllLCB0MCAgICAgICAgICAgICAvLyBkaXNhYmxlIHNvZnR3YXJlIGludGVycnVwdCAKKworICAgIGxpICAgICAgICAgICAgICB0MCwgVFJJR19FWFRfSVJRX0FERFIKKyAgICBsaSAgICAgICAgICAgICAgdDEsIEVYVF9JUlFfTElORV9DT01NT04gICAgICAgICAKKyAgICBzaCAgICAgICAgICAgICAgdDEsICh0MCkgICAgICAgICAgICAgICAgLy8gc2VuZCBjb21tYW5kIHRvIGRpc2FibGUgZXh0ZXJuYWwgaW50ZXJydXB0IAorICAgICAKKyAgICBjc3JyICAgICAgICAgICAgdDEsIG1pcAorICAgIGxpICAgICAgICAgICAgICB0MCwgTUlQX01FSVAKKyAgICBibmUgICAgICAgICAgICAgdDEsIHplcm8sIGNoZWNrX2ZhaWwKKyAgICBhZGRpICAgICAgICAgICAgdDIsIHQyLCAxICAgICAgICAgICAgICAgLy8gZXh0IGlycSBjb3VudGVyIHVwZGF0ZQorICAgIG1yZXQKKwordmVjX21hY2hpbmVfc29mdF9oYW5kbGVyOgorICAgIGNzcnIgICAgICAgICAgICBhMSwgbWNhdXNlCisgICAgbGkgICAgICAgICAgICAgIGE1LCBNQ0FVU0VfU09GVF9JUlEgICAgIC8vMHg4MDAwMDAwMyAtLSBtY2F1c2UgPSBzb2Z0LmlycQorICAgIGxpICAgICAgICAgICAgICBhMCwgLTEKKyAgICBibmUgICAgICAgICAgICAgYTEsIGE1LCBjaGVja19mYWlsCisgICAgY3NyciAgICAgICAgICAgIHQxLCBtaXAKKyAgICBsaSAgICAgICAgICAgICAgdDAsIE1JUF9NU0lQCisgICAgYW5kICAgICAgICAgICAgIHQwLCB0MSwgdDAKKyAgICBiZXF6ICAgICAgICAgICAgdDAsIGNoZWNrX2ZhaWwKKyAgICAjaWZkZWYgSVBJQ19FTkFCTEVECisgICAgICAgY3NydyAgICAgICAgIElQSUNfU09JLCB6ZXJvCisgICAgICAgY3NydyAgICAgICAgIElQSUNfRU9JLCB6ZXJvCisgICAgI2VuZGlmCisgICAgbGkgICAgICAgICAgICAgIHQwLCBNU0lFCisgICAgY3NyYyAgICAgICAgICAgIG1pZSwgdDAgICAgICAgICAgICAgICAgIC8vIGRpc2FibGUgc29mdHdhcmUgaW50ZXJydXB0IAorICAgIGxpICAgICAgICAgICAgICB0MCwgVFJJR19TV19JUlFfQUREUgorICAgIGxpICAgICAgICAgICAgICB0MSwgMHgwMDAwMDAwMAorICAgIHN3ICAgICAgICAgICAgICB0MSwgKHQwKSAgICAgICAgICAgICAgICAvLyBzZW5kIGNvbW1hbmQgdG8gc3RvcCBnZW5lcmF0aW5nICBzb2Z0d2FyZSBpbnRlcnJ1cHQgCisgICAgbGkgICAgICAgICAgICAgIHQwLCBNSVBfTVNJUAorICAgIGNzcmMgICAgICAgICAgICBtaXAsIHQwCisgICAgY3NyciAgICAgICAgICAgIHQxLCBtaXAKKyAgICBsaSAgICAgICAgICAgICAgdDAsIE1JUF9NU0lQCisgICAgYW5kICAgICAgICAgICAgIHQxLCB0MSwgdDAKKyAgICBibmUgICAgICAgICAgICAgdDEsIHplcm8sIGNoZWNrX2ZhaWwKKyAgICBhZGRpICAgICAgICAgICAgdDIsIHQyLCAxICAgICAgICAgICAgICAgLy8gZXh0IGlycSBjb3VudGVyIHVwZGF0ZQorICAgIG1yZXQKKworY2hlY2tfZmFpbDoKKyAgICBsYSAgICAgICAgICAgICAgdDAsIHNjX2V4aXQKKyAgICBqciAgICAgICAgICAgICAgdDAKKworX3RyYXBfZmFpbDoKKyAgICBsaSAgICAgICAgICAgICAgYTAsIC0xCisgICAgaiAgICAgICAgICAgICAgIGNoZWNrX2ZhaWwKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9pc3Jfc2FtcGxlL3RpbWVyLmggYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvaXNyX3NhbXBsZS90aW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MWJjYzgKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvaXNyX3NhbXBsZS90aW1lci5oCkBAIC0wLDAgKzEsOTcgQEAKKyNpZm5kZWYgX19USU1FUl9fSAorI2RlZmluZSBfX1RJTUVSX19ICisKKworCisjZGVmaW5lIE1FTV9NVElNRV9NQVNLICAweEYwMDAwMDAwCisjZGVmaW5lIE1FTV9NVElNRV9DVFJMICAweDAwNDkwMDAwCisjZGVmaW5lIE1FTV9NVElNRV9ESVYgICAweDAwNDkwMDA0CisjZGVmaW5lIE1FTV9NVElNRSAgICAgICAweDAwNDkwMDA4CisjZGVmaW5lIE1FTV9NVElNRUggICAgICAweDAwNDkwMDBDCisjZGVmaW5lIE1FTV9NVElNRUNNUCAgICAweDAwNDkwMDEwCisjZGVmaW5lIE1FTV9NVElNRUNNUEggICAweDAwNDkwMDE0CisKKyNkZWZpbmUgVE1QICAgdDAKKyNkZWZpbmUgVE1QMiAgdDEKKyNkZWZpbmUgVE1QMyAgdDIKKworLy8gUmVzZXQKKy5tYWNybyBfcmVzZXRfbXRpbWUKKyAgICBsaSAgICAgICAgICBUTVAsIE1FTV9NVElNRQorICAgIHN3ICAgICAgICAgIHplcm8sIDAoVE1QKQorICAgIHN3ICAgICAgICAgIHplcm8sIDQoVE1QKQorLmVuZG0KKworLm1hY3JvIF9yZXNldF9tdGltZWNtcAorICAgIGxpICAgICAgICAgIFRNUCwgTUVNX01USU1FQ01QCisgICAgbm90ICAgICAgICAgVE1QMiwgemVybworICAgIHN3ICAgICAgICAgIFRNUDIsIDAoVE1QKQorICAgIHN3ICAgICAgICAgIFRNUDIsIDQoVE1QKQorLmVuZG0KKworLy8gV3JpdGUKKy5tYWNybyBfd3JpdGVfbXRpbWVfY3RybCByZWcKKyAgICBsaSAgICAgICAgICBUTVAsIE1FTV9NVElNRV9DVFJMCisgICAgc3cgICAgICAgICAgXHJlZywgMChUTVApCisuZW5kbQorCisubWFjcm8gX3dyaXRlX210aW1lX2RpdiByZWcKKyAgICBsaSAgICAgICAgICBUTVAsIE1FTV9NVElNRV9ESVYKKyAgICBzdyAgICAgICAgICBccmVnLCAwKFRNUCkKKy5lbmRtCisKKy5tYWNybyBfd3JpdGVfbXRpbWVjbXBfMzIgcmVnCisgICAgbGkgICAgICAgICAgVE1QLCBNRU1fTVRJTUVDTVAKKyAgICBsaSAgICAgICAgICBUTVAyLCAtMQorICAgIHN3ICAgICAgICAgIFRNUDIsIDAoVE1QKQorICAgIHN3ICAgICAgICAgIHplcm8sIDQoVE1QKQorICAgIHN3ICAgICAgICAgIFxyZWcsIDAoVE1QKQorLmVuZG0KKworLm1hY3JvIF93cml0ZV9tdGltZSByZWcKKyAgICBsaSAgICAgICAgICBUTVAsIE1FTV9NVElNRQorICAgIHN3ICAgICAgICAgIFxyZWcsIDAoVE1QKQorLmVuZG0KKworLm1hY3JvIF9yZWFkX210aW1lIHJlZworICAgIGxpICAgICAgICAgIFRNUCwgTUVNX01USU1FCisgICAgbHcgICAgICAgICAgXHJlZywgMChUTVApCisuZW5kbQorCisvLyBSZWFkCisubWFjcm8gX3JlYWRfbXRpbWVjbXAgcmVnCisgICAgbGkgICAgICAgICAgVE1QLCBNRU1fTVRJTUVDTVAKKyAgICBsdyAgICAgICAgICBccmVnLCAwKFRNUCkKKy5lbmRtCisKKy5tYWNybyBfcmVhZF9tdGltZV9jdHJsIHJlZworICAgIGxpICAgICAgICAgIFRNUCwgTUVNX01USU1FX0NUUkwKKyAgICBsdyAgICAgICAgICBccmVnLCAwKFRNUCkKKy5lbmRtCisKKy5tYWNybyBfcmVhZF9tdGltZV9kaXYgcmVnCisgICAgbGkgICAgICAgICAgVE1QLCBNRU1fTVRJTUVfRElWCisgICAgbHcgICAgICAgICAgXHJlZywgMChUTVApCisuZW5kbQorCisvLyBNaXNjCisubWFjcm8gX3J1bl90aW1lcgorICAgIGxpICAgICAgICAgIFRNUCwgTUVNX01USU1FX0NUUkwKKyAgICBsdyAgICAgICAgICBUTVAyLCAwKFRNUCkKKyAgICBsaSAgICAgICAgICBUTVAzLCAoMSA8PCBTQ1IxX01USU1FX0NUUkxfRU4pCisgICAgb3IgICAgICAgICAgVE1QMiwgVE1QMiwgVE1QMworICAgIHN3ICAgICAgICAgIFRNUDIsIDAoVE1QKQorLmVuZG0KKworLm1hY3JvIF9zdG9wX3RpbWVyCisgICAgbGkgICAgICAgICAgVE1QLCBNRU1fTVRJTUVfQ1RSTAorICAgIGx3ICAgICAgICAgIFRNUDIsIDAoVE1QKQorICAgIGxpICAgICAgICAgIFRNUDMsICgxIDw8IFNDUjFfTVRJTUVfQ1RSTF9FTikKKyAgICBub3QgICAgICAgICBUTVAzLCBUTVAzCisgICAgYW5kICAgICAgICAgVE1QMiwgVE1QMiwgVE1QMworICAgIHN3ICAgICAgICAgIFRNUDIsIDAoVE1QKQorLmVuZG0KKworCisKKyNlbmRpZiAvLyAjaWZuZGVmIF9fVElNRVJfX0gKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL01ha2VmaWxlIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA0ZmM4NwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL01ha2VmaWxlCkBAIC0wLDAgKzEsMjAyIEBACisjIyBAZmlsZQorIyMgU3ludGFjb3JlIFNDUiogdGVzdHMKKyMjCisjIyBAY29weXJpZ2h0IDIwMTUtMjAxOCBTeW50YWNvcmUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIyBSSVNDVi1Db21wbGlhbmNlCisjIworCitBUkNIID89aW0KK292ZXJyaWRlIEFSQ0g6PXJ2MzIkKEFSQ0gpCisKK3NyY19kaXIgICAgICAgOj0gJChDVVJESVIpCitSSVNDVl9DT01QTElBTkNFX1RFU1RTIDo9ICQoc3JjX2RpcikvLi4vLi4vZGVwZW5kZW5jaWVzL3Jpc2N2LWNvbXBsaWFuY2UvCisKKyNJIElNIElNQyBJQworI0VNIEVNQyBFQworCitpZmVxIChydjMyZSwkKGZpbmRzdHJpbmcgcnYzMmUsJChBUkNIKSkpCisgICAgJChpbmZvID4+PiBSVjMyRSAtIG5vIGNvbXBsaWFuY2UgdGVzdHMpCitlbHNlICMjIGlmZGVmIFNDUl9CQVNFX1JWRV9FWFQKKyAgI2lmZXEgKHJ2MzJpLCQoZmluZHN0cmluZyBydjMyaSwkKEFSQ0gpKSkKKyAgaWZlcSAoJChBUkNIKSwkKGZpbHRlciAkKEFSQ0gpLHJ2MzJpIHJ2MzJpbSBydjMyaW1jIHJ2MzJpYykpCisgICAgJChpbmZvID4+PiBJMzIgVEVTVFMpCisgICAgaW5jbHVkZWRfaSArPSAkKGZpbHRlciAlLlMsXAorICAgICAgICAgICAgICAgICAgICAgICAgJCh3aWxkY2FyZCAkKFJJU0NWX0NPTVBMSUFOQ0VfVEVTVFMpL3Jpc2N2LXRlc3Qtc3VpdGUvcnYzMmkvc3JjLyopKQorCWluY2x1ZGVkX2kgKz0gJChmaWx0ZXIgJS5TLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICQod2lsZGNhcmQgJChSSVNDVl9DT01QTElBTkNFX1RFU1RTKS9yaXNjdi10ZXN0LXN1aXRlL3J2MzJaaWNzci9zcmMvKikpCisJaW5jbHVkZWRfaSArPSAkKGZpbHRlciAlLlMsXAorICAgICAgICAgICAgICAgICAgICAgICAgJCh3aWxkY2FyZCAkKFJJU0NWX0NPTVBMSUFOQ0VfVEVTVFMpL3Jpc2N2LXRlc3Qtc3VpdGUvcnYzMlppZmVuY2VpL3NyYy8qKSkKKyAgICBjb21wbGlhbmNlX3NldCArPSAkKGluY2x1ZGVkX2kpCisgIGVuZGlmCisKKyAgIyQoaWYgb3IgaWZlcShydjMyaW0sJChmaW5kc3RyaW5nIHJ2MzJpbSwkKEFSQ0gpKSksIChydjMyaW1jLCQoZmluZHN0cmluZyBydjMyaW1jLCQoQVJDSCkpKSkKKyAgaWZlcSAoJChBUkNIKSwkKGZpbHRlciAkKEFSQ0gpLCBydjMyaW0gcnYzMmltYykpCisgICAgJChpbmZvID4+PiBJTTMyIFRFU1RTKQorICAgIGluY2x1ZGVkX2ltICs9ICQoZmlsdGVyICUuUyxcCisgICAgICAgICAgICAgICAgICAgICAgICAkKHdpbGRjYXJkICQoUklTQ1ZfQ09NUExJQU5DRV9URVNUUykvcmlzY3YtdGVzdC1zdWl0ZS9ydjMyaW0vc3JjLyopKQorICAgIGNvbXBsaWFuY2Vfc2V0ICs9ICQoaW5jbHVkZWRfaW0pCisgIGVuZGlmICMjCisKKyAgaWZlcSAocnYzMmltYywkKGZpbmRzdHJpbmcgcnYzMmltYywkKEFSQ0gpKSkKKyAgICAkKGluZm8gPj4+IElNQzMyIFRFU1RTKQorICAgIGluY2x1ZGVkX2ltYyArPSAkKGZpbHRlciAlLlMsXAorICAgICAgICAgICAgICAgICAgICAgICAgJCh3aWxkY2FyZCAkKFJJU0NWX0NPTVBMSUFOQ0VfVEVTVFMpL3Jpc2N2LXRlc3Qtc3VpdGUvcnYzMmltYy9zcmMvKikpCisgICAgY29tcGxpYW5jZV9zZXQgKz0gJChpbmNsdWRlZF9pbWMpCisgIGVuZGlmICMjIGlmZXEgKHJ2MzJpbWMsJChmaW5kc3RyaW5nIHJ2MzJpbWMsJChBUkNIKSkpCisgIGlmZXEgKHJ2MzJpYywkKGZpbmRzdHJpbmcgcnYzMmljLCQoQVJDSCkpKQorICBlbmRpZgorZW5kaWYgIyMKKworCiskKGluZm8gPj4+JChBUkNIKSBzZXQgaW5jbHVkZWQpCisKK2lmZXEgKCQoY29tcGxpYW5jZV9zZXQpLCkKKyQoaW5mbyA+Pj4gTm8gY29tcGxpYW5jZSB0ZXN0cyBpbmNsdWRlZCkKK2VuZGlmCisKKyQoaW5mbyA+Pj4+PiBjb21wbGlhbmNlIHNldDogJChjb21wbGlhbmNlX3NldCkpCisKK2RzdF9kaXIgICAgICAgOj0gJChibGRfZGlyKQordGVzdF9uYW1lICAgICA6PSByaXNjdl9jb21wbGlhbmNlCitibGRfZGlyICAgICAgIDo9ICQoYWRkcHJlZml4ICQoZHN0X2RpcikvLCAkKHRlc3RfbmFtZSkpCitvYmpfZGlyICAgICAgIDo9ICQoYmxkX2RpcikvcmlzY3ZfY29tcGxpYW5jZV9vYmpzCisKKyNjdXRfbGlzdCAgICAgICs9IHNjYWxsIGNzciBzaGFtdCBzaW1wbGUKK2N1dF9saXN0ICs9IEktTUlTQUxJR05fSk1QLTAxIEktTUlTQUxJR05fTERTVC0wMSBJLUVCUkVBSy0wMSBJLUVDQUxMLTAxCityZWZlcmVuY2Vfc3JjICs9ICQod2lsZGNhcmQgJChSSVNDVl9DT01QTElBTkNFX1RFU1RTKS9yaXNjdi10ZXN0LXN1aXRlL3J2MzJpKi8qLyoucmVmZXJlbmNlX291dHB1dCkKK3JlZmVyZW5jZV9zcmMgKz0gJCh3aWxkY2FyZCAkKFJJU0NWX0NPTVBMSUFOQ0VfVEVTVFMpL3Jpc2N2LXRlc3Qtc3VpdGUvcnYzMlppKi8qLyoucmVmZXJlbmNlX291dHB1dCkKK3Rlc3RuYW1lcyAgICAgOj0gJChiYXNlbmFtZSAkKG5vdGRpciAkKGNvbXBsaWFuY2Vfc2V0KSkpCitmaWx0ZXJlZCAgICAgIDo9ICQoZmlsdGVyLW91dCAkKGN1dF9saXN0KSwkKHRlc3RuYW1lcykpCitvYmpzICAgICAgICAgIDo9ICQoYWRkcHJlZml4ICQoYmxkX2RpcikvLCQoZmlsdGVyZWQ6JT0lLm8pKQordGVzdF9lbGYgICAgICA6PSAkKGFkZHByZWZpeCAkKGRzdF9kaXIpL2NvbXBsaWFuY2VfLCQoZmlsdGVyZWQ6JT0lLmVsZikpCit0ZXN0X2hleCAgICAgIDo9ICQoYWRkcHJlZml4ICQoZHN0X2RpcikvY29tcGxpYW5jZV8sJChmaWx0ZXJlZDolPSUuaGV4KSkKK3Rlc3RfZHVtcCAgICAgOj0gJChhZGRwcmVmaXggJChibGRfZGlyKS9jb21wbGlhbmNlXywkKGZpbHRlcmVkOiU9JS5kdW1wKSkKKworY29tcGxpYW5jZV9tYWNyb3NfZmlsZSA6PSAkKHJvb3RfZGlyKS90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL2NvbXBsaWFuY2VfaW8uaAorY29tcGxpYW5jZV9vdXRwdXQgPz0gdHJ1ZQorCit0ZXN0bmFtZXNfaSAgICAgOj0gJChiYXNlbmFtZSAkKG5vdGRpciAkKGluY2x1ZGVkX2kpKSkKK3Rlc3RuYW1lc19pbSAgICAgOj0gJChiYXNlbmFtZSAkKG5vdGRpciAkKGluY2x1ZGVkX2ltKSkpCit0ZXN0bmFtZXNfaW1jICAgICA6PSAkKGJhc2VuYW1lICQobm90ZGlyICQoaW5jbHVkZWRfaW1jKSkpCitmaWx0ZXJlZF9pICAgICAgOj0gJChmaWx0ZXItb3V0ICQoY3V0X2xpc3QpLCQodGVzdG5hbWVzX2kpKQorZmlsdGVyZWRfaW0gICAgICA6PSAkKGZpbHRlci1vdXQgJChjdXRfbGlzdCksJCh0ZXN0bmFtZXNfaW0pKQorZmlsdGVyZWRfaW1jICAgICAgOj0gJChmaWx0ZXItb3V0ICQoY3V0X2xpc3QpLCQodGVzdG5hbWVzX2ltYykpCisKKyMgQVJDSF9GTEFHUyA6PSAtV2EsLW1hcmNoPXJ2MzJpbSAtbWFyY2g9cnYzMmltCisjIEFSQ0hfRkxBR1NfQyA6PSAtV2EsLW1hcmNoPXJ2MzJpbWMgLW1hcmNoPXJ2MzJpbWMKK0NGTEFHUyA6PSAtSSQoaW5jX2RpcikgLUkkKHNyY19kaXIpIC1EQVNNIC1tYWJpPWlscDMyIC1EX19yaXNjdl94bGVuPTMyIC13CitMREZMQUdTIDo9IC1zdGF0aWMgLWZ2aXNpYmlsaXR5PWhpZGRlbiAtbm9zdGRsaWIgLW5vc3RhcnRmaWxlcyAtVCQoaW5jX2RpcikvbGluay5sZCAtbWFyY2g9JChBUkNIKSAtbWFiaT1pbHAzMgorR0NDVkVSU0lPTkdUNyA6PSAkKHNoZWxsIGV4cHIgYCQoUklTQ1ZfR0NDKSAtZHVtcGZ1bGx2ZXJzaW9uIHwgY3V0IC1mMSAtZCcuJ2AgXD4gNykKK2lmZXEgIiQoR0NDVkVSU0lPTkdUNykiICIxIgorCUxERkxBR1MgKz0gLW1uby1yZWxheAorZW5kaWYKK1ZQQVRIICs9ICQoc3JjX2RpcikgJChibGRfZGlyKSAkKG9ial9kaXIpICQoYXNtX3BhdGgpICQocmVmX3BhdGgpICQoUklTQ1ZfQ09NUExJQU5DRV9URVNUUykKKworaWZlcSAoJChjb21wbGlhbmNlX291dHB1dCksIHRydWUpCitDRkxBR1MgKz0gLURfQ09NUExJQU5DRV9PVVRQVVQKK2VuZGlmCisKK2RlZmF1bHQ6IGNsZWFuIGxvZ19yZXF1ZXN0ZWRfdGd0IGNoZWNrX3ZlcnNpb24gY3BfYXNtIHJlZl9kYXRhICQodGVzdF9lbGYpICQodGVzdF9oZXgpICQodGVzdF9kdW1wKQorCitkZWZpbmUgY29tcGlsZV90ZW1wbGF0ZQorJChvYmpfZGlyKS8kKDEpLm86ICQob2JqX2RpcikgY3BfYXNtCisJJChSSVNDVl9HQ0MpIC1jICQkKGJsZF9kaXIpL2NvbXBsaWFuY2VfYXNtLyQoMSkuUyAkJChDRkxBR1MpIC1XYSwkKDIpICQoMikgLW8gJCRACitlbmRlZgorCitkZWZpbmUgcHJlcHJvY2Vzc2luZworZm9yIHRlc3RfYXNtIGluICQoMSk7IGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCittYXJjaF90bXA9JCR0ZXN0X2FzbSA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK21hcmNoX3RtcD0kJHttYXJjaF90bXAlL3NyYyp9IDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorbWFyY2hfdG1wPSQkKGJhc2VuYW1lICQkbWFyY2hfdG1wKSA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitmaWxlX25hbWU9IiQkKGJhc2VuYW1lICQke3Rlc3RfYXNtfSkiIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyQoUklTQ1ZfR0NDKSAkKENGTEFHUykgLVdhLCQoMikgJCgyKSAtRSAkJHRlc3RfYXNtICAgICAgICAgICAgICAgICAgICAgICAgXAorLW8gJChibGRfZGlyKS9jb21wbGlhbmNlX2FzbS8kJGZpbGVfbmFtZSA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitkb25lCitlbmRlZgorCiskKGZvcmVhY2ggU1JDLCQoZmlsdGVyZWRfaSksJChldmFsICQoY2FsbCBjb21waWxlX3RlbXBsYXRlLCQoU1JDKSwtbWFyY2g9cnYzMmkpKSkKKyQoZm9yZWFjaCBTUkMsJChmaWx0ZXJlZF9pbSksJChldmFsICQoY2FsbCBjb21waWxlX3RlbXBsYXRlLCQoU1JDKSwtbWFyY2g9cnYzMmltKSkpCiskKGZvcmVhY2ggU1JDLCQoZmlsdGVyZWRfaW1jKSwkKGV2YWwgJChjYWxsIGNvbXBpbGVfdGVtcGxhdGUsJChTUkMpLC1tYXJjaD1ydjMyaW1jKSkpCisKKworbG9nX3JlcXVlc3RlZF90Z3Q6ICQoYmxkX2RpcikKKwkkKGZvcmVhY2ggdGVzdF9uYW1lLCAkKGZpbHRlcmVkKSwgJChldmFsICQoc2hlbGwgZWNobyBjb21wbGlhbmNlXyQodGVzdF9uYW1lKS5oZXggPj4gJChibGRfZGlyKS8uLi90ZXN0X2luZm8pKSkKKworJChibGRfZGlyKSA6CisJbWtkaXIgLXAgJChibGRfZGlyKQorCiskKG9ial9kaXIpIDogfCByZWZfZGF0YQorCW1rZGlyIC1wICQob2JqX2RpcikKKworJChkc3RfZGlyKS9jb21wbGlhbmNlXyUuZWxmOiAkKG9ial9kaXIpLyUubyB8ICQoZGVwX2ZpbGVzKQorCSQoUklTQ1ZfR0NDKSAkXiAkKExERkxBR1MpIC1vICRAIC1nCisKKyQoZHN0X2RpcikvY29tcGxpYW5jZV8lLmhleDogJChkc3RfZGlyKS9jb21wbGlhbmNlXyUuZWxmCisJJChSSVNDVl9ST01fT0JKQ09QWSkgJF4gJEAKKwkkKFJJU0NWX1JBTV9PQkpDT1BZKSAkXiAkQC5yYW0KKwkjYXNzaWduIDB4MDA0OF8weHh4ICB0byAweDAwMDBfMHh4eCB0byBtYXAgdG8gVENNIE1lbW9yeQorCXNlZCAtaSAncy9AMDA0ODAvQDAwMDAwL2cnICRALnJhbQorCiskKGJsZF9kaXIpL2NvbXBsaWFuY2VfJS5kdW1wOiAkKGRzdF9kaXIpL2NvbXBsaWFuY2VfJS5lbGYKKwkkKFJJU0NWX09CSkRVTVApIC1EIC13IC14IC1TICReID4gJEAKKworcmVmX2RhdGE6CisJbWtkaXIgLXAgJChibGRfZGlyKS9yZWZfZGF0YQorCWZvciBmaWxlcyBpbiAkKHJlZmVyZW5jZV9zcmMpIDsgZG8gXAorCXNlZF9pbnB1dD0kJGZpbGVzIDsgXAorCXNlZF9vdXRwdXQ9JCQoYmFzZW5hbWUgJCR7ZmlsZXMlLip9KSA7IFwKKwlzZWQgInMvXHIkJC8vOyBcCisJcy9cKC4uLi4uLi4uXCkvXDEsL2c7IFwKKwlzLy4kJC8vOyBzL1woLipcKSxcKC4qXCksXCguKlwpLFwoLipcKS9cNCxcMyxcMixcMS87IFwKKwlzL1woLi4uLi4uLi4uXCkvXDEweC9nOyBzL14vMHgvOyBzLyQkLywvOyAkJCBzLy4kJC8vIiAkJHNlZF9pbnB1dCA+ICQoYmxkX2RpcikvcmVmX2RhdGEvJCRzZWRfb3V0cHV0OyBcCisJZG9uZQorCitjcF9hc206CisJbWtkaXIgLXAgJChibGRfZGlyKS9jb21wbGlhbmNlX2FzbQorCSQoY2FsbCBwcmVwcm9jZXNzaW5nLCQoaW5jbHVkZWRfaSksLW1hcmNoPXJ2MzJpKQorCSQoY2FsbCBwcmVwcm9jZXNzaW5nLCQoaW5jbHVkZWRfaW0pLC1tYXJjaD1ydjMyaW0pCisJJChjYWxsIHByZXByb2Nlc3NpbmcsJChpbmNsdWRlZF9pbWMpLC1tYXJjaD1ydjMyaW1jKQorCisKK3Jpc2N2X2NvbXBsaWFuY2VfdGVzdHNfZGlyICAgIDo9ICQoaWYgJChSSVNDVl9DT01QTElBTkNFX1RFU1RTKSwgJChSSVNDVl9DT01QTElBTkNFX1RFU1RTKSwgLi91bmRlZmluZWQpCityaXNjdl90ZXN0c19jb21taXQgOj0gZDUxMjU5YjJhOTQ5YmUzYWYwMmU3NzZjMzllMTM1NDAyNjc1YWM5YgorIyMgY29tbWl0IGhhc2ggcmVhZGVkIGZyb20gbG9jYWwgY29weSBvZiBodHRwczovL2dpdGh1Yi5jb20vcmlzY3YvcmlzY3YtY29tcGxpYW5jZQordG1wX2NvbW1pdCA9ICQoc2hlbGwgY2QgJChyaXNjdl9jb21wbGlhbmNlX3Rlc3RzX2RpcikgMj4vZGV2L251bGwgJiYgZ2l0IGxvZyAtMSB8IGdyZXAgImNvbW1pdCIgfCBjdXQgLWYyIC1kICcgJykKK2lzX2NvbW1pdF9nb29kID0gJChpZiAkKHN1YnN0ICQocmlzY3ZfdGVzdHNfY29tbWl0KSwsJCh0bXBfY29tbWl0KSksZmFsc2UsdHJ1ZSkKKworIyBDb2xvcgorUkVEPVwwMzNbMDszMW0KK05DPVwwMzNbMG0KKworY2hlY2tfdmVyc2lvbiA6ICQocmlzY3ZfY29tcGxpYW5jZV90ZXN0c19kaXIpCisJQGlmIFsgISAtZCAkKHJpc2N2X2NvbXBsaWFuY2VfdGVzdHNfZGlyKSBdOyB0aGVuIFwKKwkJZWNobyAtZSAiJChSRUQpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iICYmXAorCQllY2hvICIgICBFcnJvciEgRW52aXJvbm1lbnQgdmFyaWFibGUgUklTQ1ZfQ09NUExJQU5DRV9URVNUUz0nJChyaXNjdl9jb21wbGlhbmNlX3Rlc3RzX2RpciknICIgJiZcCisJCWVjaG8gIiAgICAgIGRpcmVjdG9yeSBub3QgZXhpc3QhIiAmJiBcCisJCWVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JChOQykiIDsgXAorCWZpCitpZm5lcSAoJChpc19jb21taXRfZ29vZCksdHJ1ZSkKKwlAZWNobyAtZSAiJChSRUQpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCisJQGVjaG8gIiAgIFdhcm5pbmchIEV4ZWN1dGlvbiBvZiB0ZXN0IGNvZGUgaXMgbm90IGd1YXJhbnRlZWQgIgorCUBlY2hvICIgICB3aGlsZSB1c2luZyB0aGUgY3VycmVudCBjb21taXQgb2YgcmVwb3NpdG9yeSBsb2NhdGVkIGF0IDogJChyaXNjdl9jb21wbGlhbmNlX3Rlc3RzX2RpcikgLiIKKwlAZWNobyAiICAgIgorCUBlY2hvICIgICByaXNjdl9jb21wbGlhbmNlIHJlcG9zaXRvcnkgbXVzdCBwb2ludCB0byBjb21taXQgJChyaXNjdl90ZXN0c19jb21taXQpISIKKwlAZWNobyAtZSAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0kKE5DKSIKK2VuZGlmCisKKyQocmlzY3ZfY29tcGxpYW5jZV90ZXN0c19kaXIpIDouCitpZm5kZWYgUklTQ1ZfQ09NUExJQU5DRV9URVNUUworCUBlY2hvIC1lICIkKFJFRCk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKKwlAZWNobyAiICAgIEVycm9yISBFbnZpcm9ubWVudCB2YXJpYWJsZSBSSVNDVl9DT01QTElBTkNFX1RFU1RTIG5vdCBzZXQhIgorCUBlY2hvICIgICAgWW91IG11c3Qgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBSSVNDVl9DT01QTElBTkNFX1RFU1RTIgorCUBlY2hvICIgICAgVGhlIHZhcmlhYmxlIHNob3VsZCBwb2ludCB0byB0aGUgbG9jYWwgY29weSBvZiB0aGUiCisJQGVjaG8gIiAgICAgIHJlcG9zaXRvcnkgaHR0cHM6Ly9naXRodWIuY29tL3Jpc2N2L3Jpc2N2LWNvbXBsaWFuY2UiCisJQGVjaG8gIiAgICAgIHdpdGggdGhlIGNvbW1pdCAkKHJpc2N2X3Rlc3RzX2NvbW1pdCkiCisJQGVjaG8gLWUgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JChOQykiCisJZXhpdCAxCitlbmRpZgorCitjbGVhbjoKKwkkKFJNKSAtUiAkKHRlc3RfZWxmKSAkKHRlc3RfaGV4KSAkKGJsZF9kaXIpCisKKy5QSE9OWTogY2hlY2tfdmVyc2lvbiBjbGVhbiByZWZfZGF0YSBjcF9hc20gZGVmYXVsdApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvYXdfdGVzdF9tYWNyb3MuaCBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL2F3X3Rlc3RfbWFjcm9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UwNTJhMQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL2F3X3Rlc3RfbWFjcm9zLmgKQEAgLTAsMCArMSw2ODMgQEAKKy8qCisgIENPUFkgT0YgL3Jpc2N2LWNvbXBsaWFuY2UvcmlzY3YtdGVzdC1lbnYvYXdfdGVzdF9tYWNyb3MuaAorICAqLworCisvLyBTZWUgTElDRU5TRSBmb3IgbGljZW5zZSBkZXRhaWxzLgorCisjaWZuZGVmIF9fVEVTVF9NQUNST1NfU0NBTEFSX0gKKyNkZWZpbmUgX19URVNUX01BQ1JPU19TQ0FMQVJfSAorCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBIZWxwZXIgbWFjcm9zCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBNQVNLX1hMRU4oeCkgKCh4KSAmICgoMSA8PCAoX19yaXNjdl94bGVuIC0gMSkgPDwgMSkgLSAxKSkKKworI2RlZmluZSBDSEVDS19YTEVOIGxpIGEwLCAxOyBzbGxpIGEwLCBhMCwgMzE7IGJsdHogYTAsIDFmOyBSVlRFU1RfUEFTUzsgMTogc3JsaSBhMCwgYTAsIDMxOyBsYSB0MCwgYmVnaW5fc2lnbmF0dXJlOyBzdyBhMCwgMCh0MCkKKworI2RlZmluZSBURVNUTlVNIGdwCisKKyNkZWZpbmUgU1dTSUcoIHRlc3RudW0sIHRlc3RyZWcgKSBcCisgICAgbGEgIHgyOCwgdGVzdF9yZXM7IFwKKyAgICBzdyB0ZXN0cmVnLCAodGVzdG51bTw8MikoeDI4KTsgXAorCisjCisjIEFkZHJlc3MgPSBiYXNlKyh0ZXN0bnVtPDwyKQorIyBzdyB0ZXN0cmVnLCAodGVzdG51bTw8MikoYmFzZXJlZykKKyMKKyNkZWZpbmUgVEVTVF9DQVNFKCB0ZXN0bnVtLCB0ZXN0cmVnLCBjb3JyZWN0dmFsLCBjb2RlLi4uICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICAgIGNvZGU7IFwKKyAgICBsaSAgeDI5LCBNQVNLX1hMRU4oY29ycmVjdHZhbCk7IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICAgICAgICBTV1NJRyh0ZXN0bnVtLHRlc3RyZWcpOyBcCisgICAgYm5lIHRlc3RyZWcsIHgyOSwgZmFpbDsKKworIyBXZSB1c2UgYSBtYWNybyBoYWNrIHRvIHNpbXBpZnkgY29kZSBnZW5lcmF0aW9uIGZvciB2YXJpb3VzIG51bWJlcnMKKyMgb2YgYnViYmxlIGN5Y2xlcy4KKworI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzAKKyNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU18xICBub3A7IFRFU1RfSU5TRVJUX05PUFNfMAorI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzIgIG5vcDsgVEVTVF9JTlNFUlRfTk9QU18xCisjZGVmaW5lIFRFU1RfSU5TRVJUX05PUFNfMyAgbm9wOyBURVNUX0lOU0VSVF9OT1BTXzIKKyNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU180ICBub3A7IFRFU1RfSU5TRVJUX05PUFNfMworI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzUgIG5vcDsgVEVTVF9JTlNFUlRfTk9QU180CisjZGVmaW5lIFRFU1RfSU5TRVJUX05PUFNfNiAgbm9wOyBURVNUX0lOU0VSVF9OT1BTXzUKKyNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU183ICBub3A7IFRFU1RfSU5TRVJUX05PUFNfNgorI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzggIG5vcDsgVEVTVF9JTlNFUlRfTk9QU183CisjZGVmaW5lIFRFU1RfSU5TRVJUX05PUFNfOSAgbm9wOyBURVNUX0lOU0VSVF9OT1BTXzgKKyNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU18xMCBub3A7IFRFU1RfSU5TRVJUX05PUFNfOQorCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSVjY0VUkgTUFDUk9TCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIGZvciBpbnN0cnVjdGlvbnMgd2l0aCBpbW1lZGlhdGUgb3BlcmFuZAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgU0VYVF9JTU0oeCkgKCh4KSB8ICgtKCgoeCkgPj4gMTEpICYgMSkgPDwgMTEpKQorCisjZGVmaW5lIFRFU1RfSU1NX09QKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbDEsIGltbSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzMCwgcmVzdWx0LCBcCisgICAgICBsaSAgeDEsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgaW5zdCB4MzAsIHgxLCBTRVhUX0lNTShpbW0pOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfSU1NX1NSQzFfRVFfREVTVCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxLCBpbW0gKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MSwgcmVzdWx0LCBcCisgICAgICBsaSAgeDEsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgaW5zdCB4MSwgeDEsIFNFWFRfSU1NKGltbSk7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9JTU1fREVTVF9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QsIHJlc3VsdCwgdmFsMSwgaW1tICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDYsIHJlc3VsdCwgXAorICAgICAgbGkgIHg0LCAwOyBcCisxOiAgICBsaSAgeDEsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgaW5zdCB4MzAsIHgxLCBTRVhUX0lNTShpbW0pOyBcCisgICAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBub3BfY3ljbGVzIFwKKyAgICAgIGFkZGkgIHg2LCB4MzAsIDA7IFwKKyAgICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgICAgbGkgIHg1LCAyOyBcCisgICAgICBibmUgeDQsIHg1LCAxYiBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfSU1NX1NSQzFfQllQQVNTKCB0ZXN0bnVtLCBub3BfY3ljbGVzLCBpbnN0LCByZXN1bHQsIHZhbDEsIGltbSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzMCwgcmVzdWx0LCBcCisgICAgICBsaSAgeDQsIDA7IFwKKzE6ICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBub3BfY3ljbGVzIFwKKyAgICAgIGluc3QgeDMwLCB4MSwgU0VYVF9JTU0oaW1tKTsgXAorICAgICAgYWRkaSAgeDQsIHg0LCAxOyBcCisgICAgICBsaSAgeDUsIDI7IFwKKyAgICAgIGJuZSB4NCwgeDUsIDFiIFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9JTU1fWkVST1NSQzEoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgaW1tICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAorICAgICAgaW5zdCB4MSwgeDAsIFNFWFRfSU1NKGltbSk7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9JTU1fWkVST0RFU1QoIHRlc3RudW0sIGluc3QsIHZhbDEsIGltbSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgwLCAwLCBcCisgICAgICBsaSAgeDEsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgaW5zdCB4MCwgeDEsIFNFWFRfSU1NKGltbSk7IFwKKyAgICApCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyBmb3IgYW4gaW5zdHJ1Y3Rpb24gd2l0aCByZWdpc3RlciBvcGVyYW5kcworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgVEVTVF9SX09QKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbDEgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MzAsIHJlc3VsdCwgXAorICAgICAgbGkgIHgxLCB2YWwxOyBcCisgICAgICBpbnN0IHgzMCwgeDE7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SX1NSQzFfRVFfREVTVCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAorICAgICAgbGkgIHgxLCB2YWwxOyBcCisgICAgICBpbnN0IHgxLCB4MTsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JfREVTVF9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QsIHJlc3VsdCwgdmFsMSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHg2LCByZXN1bHQsIFwKKyAgICAgIGxpICB4NCwgMDsgXAorMTogICAgbGkgIHgxLCB2YWwxOyBcCisgICAgICBpbnN0IHgzMCwgeDE7IFwKKyAgICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIG5vcF9jeWNsZXMgXAorICAgICAgYWRkaSAgeDYsIHgzMCwgMDsgXAorICAgICAgYWRkaSAgeDQsIHg0LCAxOyBcCisgICAgICBsaSAgeDUsIDI7IFwKKyAgICAgIGJuZSB4NCwgeDUsIDFiIFwKKyAgICApCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyBmb3IgYW4gaW5zdHJ1Y3Rpb24gd2l0aCByZWdpc3Rlci1yZWdpc3RlciBvcGVyYW5kcworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgVEVTVF9SUl9PUCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDMwLCByZXN1bHQsIFwKKyAgICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBsaSAgeDIsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgaW5zdCB4MzAsIHgxLCB4MjsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1NSQzFfRVFfREVTVCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAorICAgICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpICB4MiwgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBpbnN0IHgxLCB4MSwgeDI7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SUl9TUkMyX0VRX0RFU1QoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgyLCByZXN1bHQsIFwKKyAgICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBsaSAgeDIsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgaW5zdCB4MiwgeDEsIHgyOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfU1JDMTJfRVFfREVTVCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAorICAgICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGluc3QgeDEsIHgxLCB4MTsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX0RFU1RfQllQQVNTKCB0ZXN0bnVtLCBub3BfY3ljbGVzLCBpbnN0LCByZXN1bHQsIHZhbDEsIHZhbDIgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4NiwgcmVzdWx0LCBcCisgICAgICBsaSAgeDQsIDA7IFwKKzE6ICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBsaSAgeDIsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgaW5zdCB4MzAsIHgxLCB4MjsgXAorICAgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgbm9wX2N5Y2xlcyBcCisgICAgICBhZGRpICB4NiwgeDMwLCAwOyBcCisgICAgICBhZGRpICB4NCwgeDQsIDE7IFwKKyAgICAgIGxpICB4NSwgMjsgXAorICAgICAgYm5lIHg0LCB4NSwgMWIgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1NSQzEyX0JZUEFTUyggdGVzdG51bSwgc3JjMV9ub3BzLCBzcmMyX25vcHMsIGluc3QsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzMCwgcmVzdWx0LCBcCisgICAgICBsaSAgeDQsIDA7IFwKKzE6ICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBzcmMxX25vcHMgXAorICAgICAgbGkgIHgyLCBNQVNLX1hMRU4odmFsMik7IFwKKyAgICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzJfbm9wcyBcCisgICAgICBpbnN0IHgzMCwgeDEsIHgyOyBcCisgICAgICBhZGRpICB4NCwgeDQsIDE7IFwKKyAgICAgIGxpICB4NSwgMjsgXAorICAgICAgYm5lIHg0LCB4NSwgMWIgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1NSQzIxX0JZUEFTUyggdGVzdG51bSwgc3JjMV9ub3BzLCBzcmMyX25vcHMsIGluc3QsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzMCwgcmVzdWx0LCBcCisgICAgICBsaSAgeDQsIDA7IFwKKzE6ICAgIGxpICB4MiwgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBzcmMxX25vcHMgXAorICAgICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzJfbm9wcyBcCisgICAgICBpbnN0IHgzMCwgeDEsIHgyOyBcCisgICAgICBhZGRpICB4NCwgeDQsIDE7IFwKKyAgICAgIGxpICB4NSwgMjsgXAorICAgICAgYm5lIHg0LCB4NSwgMWIgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1pFUk9TUkMxKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbCApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgyLCByZXN1bHQsIFwKKyAgICAgIGxpIHgxLCBNQVNLX1hMRU4odmFsKTsgXAorICAgICAgaW5zdCB4MiwgeDAsIHgxOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfWkVST1NSQzIoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDIsIHJlc3VsdCwgXAorICAgICAgbGkgeDEsIE1BU0tfWExFTih2YWwpOyBcCisgICAgICBpbnN0IHgyLCB4MSwgeDA7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SUl9aRVJPU1JDMTIoIHRlc3RudW0sIGluc3QsIHJlc3VsdCApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgxLCByZXN1bHQsIFwKKyAgICAgIGluc3QgeDEsIHgwLCB4MDsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1pFUk9ERVNUKCB0ZXN0bnVtLCBpbnN0LCB2YWwxLCB2YWwyICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDAsIDAsIFwKKyAgICAgIGxpIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpIHgyLCBNQVNLX1hMRU4odmFsMik7IFwKKyAgICAgIGluc3QgeDAsIHgxLCB4MjsgXAorICAgICkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3QgbWVtb3J5IGluc3RydWN0aW9ucworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgVEVTVF9MRF9PUCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCBvZmZzZXQsIGJhc2UgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MzAsIHJlc3VsdCwgXAorICAgICAgbGEgIHgxLCBiYXNlOyBcCisgICAgICBpbnN0IHgzMCwgb2Zmc2V0KHgxKTsgXAorICAgICkKKworI2RlZmluZSBURVNUX1NUX09QKCB0ZXN0bnVtLCBsb2FkX2luc3QsIHN0b3JlX2luc3QsIHJlc3VsdCwgb2Zmc2V0LCBiYXNlICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDMwLCByZXN1bHQsIFwKKyAgICAgIGxhICB4MSwgYmFzZTsgXAorICAgICAgbGkgIHgyLCByZXN1bHQ7IFwKKyAgICAgIHN0b3JlX2luc3QgeDIsIG9mZnNldCh4MSk7IFwKKyAgICAgIGxvYWRfaW5zdCB4MzAsIG9mZnNldCh4MSk7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9MRF9ERVNUX0JZUEFTUyggdGVzdG51bSwgbm9wX2N5Y2xlcywgaW5zdCwgcmVzdWx0LCBvZmZzZXQsIGJhc2UgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsYSAgeDEsIGJhc2U7IFwKKyAgICBpbnN0IHgzMCwgb2Zmc2V0KHgxKTsgXAorICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIG5vcF9jeWNsZXMgXAorICAgIGFkZGkgIHg2LCB4MzAsIDA7IFwKKyAgICBsaSAgeDI5LCByZXN1bHQ7IFwKKyAgICBibmUgeDYsIHgyOSwgZmFpbDsgXAorICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgIGxpICB4NSwgMjsgXAorICAgIGJuZSB4NCwgeDUsIDFiOyBcCisKKyNkZWZpbmUgVEVTVF9MRF9TUkMxX0JZUEFTUyggdGVzdG51bSwgbm9wX2N5Y2xlcywgaW5zdCwgcmVzdWx0LCBvZmZzZXQsIGJhc2UgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsYSAgeDEsIGJhc2U7IFwKKyAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBub3BfY3ljbGVzIFwKKyAgICBpbnN0IHgzMCwgb2Zmc2V0KHgxKTsgXAorICAgIGxpICB4MjksIHJlc3VsdDsgXAorICAgIGJuZSB4MzAsIHgyOSwgZmFpbDsgXAorICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgIGxpICB4NSwgMjsgXAorICAgIGJuZSB4NCwgeDUsIDFiIFwKKworI2RlZmluZSBURVNUX1NUX1NSQzEyX0JZUEFTUyggdGVzdG51bSwgc3JjMV9ub3BzLCBzcmMyX25vcHMsIGxvYWRfaW5zdCwgc3RvcmVfaW5zdCwgcmVzdWx0LCBvZmZzZXQsIGJhc2UgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsaSAgeDEsIHJlc3VsdDsgXAorICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzFfbm9wcyBcCisgICAgbGEgIHgyLCBiYXNlOyBcCisgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgc3JjMl9ub3BzIFwKKyAgICBzdG9yZV9pbnN0IHgxLCBvZmZzZXQoeDIpOyBcCisgICAgbG9hZF9pbnN0IHgzMCwgb2Zmc2V0KHgyKTsgXAorICAgIGxpICB4MjksIHJlc3VsdDsgXAorICAgIGJuZSB4MzAsIHgyOSwgZmFpbDsgXAorICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgIGxpICB4NSwgMjsgXAorICAgIGJuZSB4NCwgeDUsIDFiIFwKKworI2RlZmluZSBURVNUX1NUX1NSQzIxX0JZUEFTUyggdGVzdG51bSwgc3JjMV9ub3BzLCBzcmMyX25vcHMsIGxvYWRfaW5zdCwgc3RvcmVfaW5zdCwgcmVzdWx0LCBvZmZzZXQsIGJhc2UgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsYSAgeDIsIGJhc2U7IFwKKyAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBzcmMxX25vcHMgXAorICAgIGxpICB4MSwgcmVzdWx0OyBcCisgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgc3JjMl9ub3BzIFwKKyAgICBzdG9yZV9pbnN0IHgxLCBvZmZzZXQoeDIpOyBcCisgICAgbG9hZF9pbnN0IHgzMCwgb2Zmc2V0KHgyKTsgXAorICAgIGxpICB4MjksIHJlc3VsdDsgXAorICAgIGJuZSB4MzAsIHgyOSwgZmFpbDsgXAorICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgIGxpICB4NSwgMjsgXAorICAgIGJuZSB4NCwgeDUsIDFiIFwKKworI2RlZmluZSBURVNUX0JSMl9PUF9UQUtFTiggdGVzdG51bSwgaW5zdCwgdmFsMSwgdmFsMiApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICBTV1NJRyAodGVzdG51bSwgVEVTVE5VTSk7XAorICAgIGxpICB4MSwgdmFsMTsgXAorICAgIGxpICB4MiwgdmFsMjsgXAorICAgIGluc3QgeDEsIHgyLCAyZjsgXAorICAgIGJuZSB4MCwgVEVTVE5VTSwgZmFpbDsgXAorMTogIGJuZSB4MCwgVEVTVE5VTSwgM2Y7IFwKKzI6ICBpbnN0IHgxLCB4MiwgMWI7IFwKKyAgICBibmUgeDAsIFRFU1ROVU0sIGZhaWw7IFwKKzM6CisKKyNkZWZpbmUgVEVTVF9CUjJfT1BfTk9UVEFLRU4oIHRlc3RudW0sIGluc3QsIHZhbDEsIHZhbDIgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgICBsaSAgeDEsIHZhbDE7IFwKKyAgICBsaSAgeDIsIHZhbDI7IFwKKyAgICBpbnN0IHgxLCB4MiwgMWY7IFwKKyAgICBibmUgeDAsIFRFU1ROVU0sIDJmOyBcCisxOiAgYm5lIHgwLCBURVNUTlVNLCBmYWlsOyBcCisyOiAgaW5zdCB4MSwgeDIsIDFiOyBcCiszOgorCisjZGVmaW5lIFRFU1RfQlIyX1NSQzEyX0JZUEFTUyggdGVzdG51bSwgc3JjMV9ub3BzLCBzcmMyX25vcHMsIGluc3QsIHZhbDEsIHZhbDIgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsaSAgeDEsIHZhbDE7IFwKKyAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBzcmMxX25vcHMgXAorICAgIGxpICB4MiwgdmFsMjsgXAorICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzJfbm9wcyBcCisgICAgaW5zdCB4MSwgeDIsIGZhaWw7IFwKKyAgICBhZGRpICB4NCwgeDQsIDE7IFwKKyAgICBsaSAgeDUsIDI7IFwKKyAgICBibmUgeDQsIHg1LCAxYiBcCisKKyNkZWZpbmUgVEVTVF9CUjJfU1JDMjFfQllQQVNTKCB0ZXN0bnVtLCBzcmMxX25vcHMsIHNyYzJfbm9wcywgaW5zdCwgdmFsMSwgdmFsMiApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICBTV1NJRyAodGVzdG51bSwgVEVTVE5VTSk7XAorICAgIGxpICB4NCwgMDsgXAorMTogIGxpICB4MiwgdmFsMjsgXAorICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzFfbm9wcyBcCisgICAgbGkgIHgxLCB2YWwxOyBcCisgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgc3JjMl9ub3BzIFwKKyAgICBpbnN0IHgxLCB4MiwgZmFpbDsgXAorICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgIGxpICB4NSwgMjsgXAorICAgIGJuZSB4NCwgeDUsIDFiIFwKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3QganVtcCBpbnN0cnVjdGlvbnMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjZGVmaW5lIFRFU1RfSlJfU1JDMV9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsYSAgeDYsIDJmOyBcCisgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgbm9wX2N5Y2xlcyBcCisgICAgaW5zdCB4NjsgXAorICAgIGJuZSB4MCwgVEVTVE5VTSwgZmFpbDsgXAorMjogIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgIGxpICB4NSwgMjsgXAorICAgIGJuZSB4NCwgeDUsIDFiIFwKKworI2RlZmluZSBURVNUX0pBTFJfU1JDMV9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsYSAgeDYsIDJmOyBcCisgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgbm9wX2N5Y2xlcyBcCisgICAgaW5zdCB4MTksIHg2LCAwOyBcCisgICAgYm5lIHgwLCBURVNUTlVNLCBmYWlsOyBcCisyOiAgYWRkaSAgeDQsIHg0LCAxOyBcCisgICAgbGkgIHg1LCAyOyBcCisgICAgYm5lIHg0LCB4NSwgMWIgXAorCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSVjY0VUYgTUFDUk9TCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIGZsb2F0aW5nLXBvaW50IGluc3RydWN0aW9ucworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgcU5hTmYgMGY6N2ZjMDAwMDAKKyNkZWZpbmUgc05hTmYgMGY6N2Y4MDAwMDEKKyNkZWZpbmUgcU5hTiAwZDo3ZmY4MDAwMDAwMDAwMDAwCisjZGVmaW5lIHNOYU4gMGQ6N2ZmMDAwMDAwMDAwMDAwMQorCisjZGVmaW5lIFRFU1RfRlBfT1BfU19JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiwgdmFsMywgY29kZS4uLiApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhIDtcCisgIGZsdyBmMCwgMChhMCk7IFwKKyAgZmx3IGYxLCA0KGEwKTsgXAorICBmbHcgZjIsIDgoYTApOyBcCisgIGx3ICBhMywgMTIoYTApOyBcCisgIGNvZGU7IFwKKyAgZnNmbGFncyBhMSwgeDA7IFwKKyAgbGkgYTIsIGZsYWdzOyBcCisgIGJuZSBhMCwgYTMsIGZhaWw7IFwKKyAgYm5lIGExLCBhMiwgZmFpbDsgXAorICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgLmFsaWduIDI7IFwKKyAgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YTogXAorICAuZmxvYXQgdmFsMTsgXAorICAuZmxvYXQgdmFsMjsgXAorICAuZmxvYXQgdmFsMzsgXAorICAucmVzdWx0OyBcCisgIC5wb3BzZWN0aW9uCisKKyNkZWZpbmUgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyLCB2YWwzLCBjb2RlLi4uICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICBTV1NJRyAodGVzdG51bSwgVEVTVE5VTSk7XAorICBsYSAgYTAsIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGEgO1wKKyAgZmxkIGYwLCAwKGEwKTsgXAorICBmbGQgZjEsIDgoYTApOyBcCisgIGZsZCBmMiwgMTYoYTApOyBcCisgIGxkICBhMywgMjQoYTApOyBcCisgIGNvZGU7IFwKKyAgZnNmbGFncyBhMSwgeDA7IFwKKyAgbGkgYTIsIGZsYWdzOyBcCisgIGJuZSBhMCwgYTMsIGZhaWw7IFwKKyAgYm5lIGExLCBhMiwgZmFpbDsgXAorICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgLmFsaWduIDM7IFwKKyAgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YTogXAorICAuZG91YmxlIHZhbDE7IFwKKyAgLmRvdWJsZSB2YWwyOyBcCisgIC5kb3VibGUgdmFsMzsgXAorICAucmVzdWx0OyBcCisgIC5wb3BzZWN0aW9uCisKKy8vIFRPRE86IGFzc2lnbiBhIHNlcGFyYXRlIG1lbSBsb2NhdGlvbiBmb3IgdGhlIGNvbXBhcmlzb24gYWRkcmVzcz8KKyNkZWZpbmUgVEVTVF9GUF9PUF9EMzJfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCByZXN1bHQsIHZhbDEsIHZhbDIsIHZhbDMsIGNvZGUuLi4gKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCisgIFNXU0lHICh0ZXN0bnVtLCBURVNUTlVNKTtcCisgIGxhICBhMCwgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YSA7XAorICBmbGQgZjAsIDAoYTApOyBcCisgIGZsZCBmMSwgOChhMCk7IFwKKyAgZmxkIGYyLCAxNihhMCk7IFwKKyAgbHcgIGEzLCAyNChhMCk7IFwKKyAgbHcgIHQxLCAyOChhMCk7IFwKKyAgY29kZTsgXAorICBmc2ZsYWdzIGExLCB4MDsgXAorICBsaSBhMiwgZmxhZ3M7IFwKKyAgYm5lIGEwLCBhMywgZmFpbDsgXAorICBibmUgdDEsIHQyLCBmYWlsOyBcCisgIGJuZSBhMSwgYTIsIGZhaWw7IFwKKyAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCisgIC5hbGlnbiAzOyBcCisgIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGE6IFwKKyAgLmRvdWJsZSB2YWwxOyBcCisgIC5kb3VibGUgdmFsMjsgXAorICAuZG91YmxlIHZhbDM7IFwKKyAgLnJlc3VsdDsgXAorICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfRkNWVF9TX0QzMiggdGVzdG51bSwgcmVzdWx0LCB2YWwxICkgXAorICBURVNUX0ZQX09QX0QzMl9JTlRFUk5BTCggdGVzdG51bSwgMCwgZG91YmxlIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgZmN2dC5zLmQgZjMsIGYwOyBmY3Z0LmQucyBmMywgZjM7IGZzZCBmMywgMChhMCk7IGx3IHQyLCA0KGEwKTsgbHcgYTAsIDAoYTApKQorCisjZGVmaW5lIFRFU1RfRkNWVF9TX0QoIHRlc3RudW0sIHJlc3VsdCwgdmFsMSApIFwKKyAgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCAwLCBkb3VibGUgcmVzdWx0LCB2YWwxLCAwLjAsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBmY3Z0LnMuZCBmMywgZjA7IGZjdnQuZC5zIGYzLCBmMzsgZm12LnguZCBhMCwgZjMpCisKKyNkZWZpbmUgVEVTVF9GQ1ZUX0RfUyggdGVzdG51bSwgcmVzdWx0LCB2YWwxICkgXAorICBURVNUX0ZQX09QX1NfSU5URVJOQUwoIHRlc3RudW0sIDAsIGZsb2F0IHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgZmN2dC5kLnMgZjMsIGYwOyBmY3Z0LnMuZCBmMywgZjM7IGZtdi54LnMgYTAsIGYzKQorCisjZGVmaW5lIFRFU1RfRlBfT1AxX1MoIHRlc3RudW0sIGluc3QsIGZsYWdzLCByZXN1bHQsIHZhbDEgKSBcCisgIFRFU1RfRlBfT1BfU19JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGZsb2F0IHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjA7IGZtdi54LnMgYTAsIGYzKQorCisjZGVmaW5lIFRFU1RfRlBfT1AxX0QzMiggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSApIFwKKyAgVEVTVF9GUF9PUF9EMzJfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkb3VibGUgcmVzdWx0LCB2YWwxLCAwLjAsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMDsgZnNkIGYzLCAwKGEwKTsgbHcgdDIsIDQoYTApOyBsdyBhMCwgMChhMCkpCisvLyBeOiBzdG9yZSBjb21wdXRhdGlvbiByZXN1bHQgaW4gYWRkcmVzcyBmcm9tIGEwLCBsb2FkIGhpZ2gtd29yZCBpbnRvIHQyCisKKyNkZWZpbmUgVEVTVF9GUF9PUDFfRCggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSApIFwKKyAgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZG91YmxlIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjA7IGZtdi54LmQgYTAsIGYzKQorCisjZGVmaW5lIFRFU1RfRlBfT1AxX1NfRFdPUkRfUkVTVUxUKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxICkgXAorICBURVNUX0ZQX09QX1NfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkd29yZCByZXN1bHQsIHZhbDEsIDAuMCwgMC4wLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgZjMsIGYwOyBmbXYueC5zIGEwLCBmMykKKworI2RlZmluZSBURVNUX0ZQX09QMV9EMzJfRFdPUkRfUkVTVUxUKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxICkgXAorICBURVNUX0ZQX09QX0QzMl9JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGR3b3JkIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjA7IGZzZCBmMywgMChhMCk7IGx3IHQyLCA0KGEwKTsgbHcgYTAsIDAoYTApKQorLy8gXjogc3RvcmUgY29tcHV0YXRpb24gcmVzdWx0IGluIGFkZHJlc3MgZnJvbSBhMCwgbG9hZCBoaWdoLXdvcmQgaW50byB0MgorCisjZGVmaW5lIFRFU1RfRlBfT1AxX0RfRFdPUkRfUkVTVUxUKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxICkgXAorICBURVNUX0ZQX09QX0RfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkd29yZCByZXN1bHQsIHZhbDEsIDAuMCwgMC4wLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgZjMsIGYwOyBmbXYueC5kIGEwLCBmMykKKworI2RlZmluZSBURVNUX0ZQX09QMl9TKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAorICBURVNUX0ZQX09QX1NfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBmbG9hdCByZXN1bHQsIHZhbDEsIHZhbDIsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMCwgZjE7IGZtdi54LnMgYTAsIGYzKQorCisjZGVmaW5lIFRFU1RfRlBfT1AyX0QzMiggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgVEVTVF9GUF9PUF9EMzJfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkb3VibGUgcmVzdWx0LCB2YWwxLCB2YWwyLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjAsIGYxOyBmc2QgZjMsIDAoYTApOyBsdyB0MiwgNChhMCk7IGx3IGEwLCAwKGEwKSkKKy8vIF46IHN0b3JlIGNvbXB1dGF0aW9uIHJlc3VsdCBpbiBhZGRyZXNzIGZyb20gYTAsIGxvYWQgaGlnaC13b3JkIGludG8gdDIKKworI2RlZmluZSBURVNUX0ZQX09QMl9EKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAorICBURVNUX0ZQX09QX0RfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkb3VibGUgcmVzdWx0LCB2YWwxLCB2YWwyLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjAsIGYxOyBmbXYueC5kIGEwLCBmMykKKworI2RlZmluZSBURVNUX0ZQX09QM19TKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyLCB2YWwzICkgXAorICBURVNUX0ZQX09QX1NfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBmbG9hdCByZXN1bHQsIHZhbDEsIHZhbDIsIHZhbDMsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjAsIGYxLCBmMjsgZm12LngucyBhMCwgZjMpCisKKyNkZWZpbmUgVEVTVF9GUF9PUDNfRDMyKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyLCB2YWwzICkgXAorICBURVNUX0ZQX09QX0QzMl9JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGRvdWJsZSByZXN1bHQsIHZhbDEsIHZhbDIsIHZhbDMsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjAsIGYxLCBmMjsgZnNkIGYzLCAwKGEwKTsgbHcgdDIsIDQoYTApOyBsdyBhMCwgMChhMCkpCisvLyBeOiBzdG9yZSBjb21wdXRhdGlvbiByZXN1bHQgaW4gYWRkcmVzcyBmcm9tIGEwLCBsb2FkIGhpZ2gtd29yZCBpbnRvIHQyCisKKyNkZWZpbmUgVEVTVF9GUF9PUDNfRCggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiwgdmFsMyApIFwKKyAgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZG91YmxlIHJlc3VsdCwgdmFsMSwgdmFsMiwgdmFsMywgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMCwgZjEsIGYyOyBmbXYueC5kIGEwLCBmMykKKworI2RlZmluZSBURVNUX0ZQX0lOVF9PUF9TKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCBybSApIFwKKyAgVEVTVF9GUF9PUF9TX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgd29yZCByZXN1bHQsIHZhbDEsIDAuMCwgMC4wLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgYTAsIGYwLCBybSkKKworI2RlZmluZSBURVNUX0ZQX0lOVF9PUF9EMzIoIHRlc3RudW0sIGluc3QsIGZsYWdzLCByZXN1bHQsIHZhbDEsIHJtICkgXAorICBURVNUX0ZQX09QX0QzMl9JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGR3b3JkIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBhMCwgZjAsIGYxOyBsaSB0MiwgMCkKKworI2RlZmluZSBURVNUX0ZQX0lOVF9PUF9EKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCBybSApIFwKKyAgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZHdvcmQgcmVzdWx0LCB2YWwxLCAwLjAsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGEwLCBmMCwgcm0pCisKKyNkZWZpbmUgVEVTVF9GUF9DTVBfT1BfUyggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgVEVTVF9GUF9PUF9TX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgd29yZCByZXN1bHQsIHZhbDEsIHZhbDIsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGEwLCBmMCwgZjEpCisKKyNkZWZpbmUgVEVTVF9GUF9DTVBfT1BfRDMyKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAorICBURVNUX0ZQX09QX0QzMl9JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGR3b3JkIHJlc3VsdCwgdmFsMSwgdmFsMiwgMC4wLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgYTAsIGYwLCBmMTsgbGkgdDIsIDApCisKKyNkZWZpbmUgVEVTVF9GUF9DTVBfT1BfRCggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZHdvcmQgcmVzdWx0LCB2YWwxLCB2YWwyLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBhMCwgZjAsIGYxKQorCisjZGVmaW5lIFRFU1RfRkNMQVNTX1ModGVzdG51bSwgY29ycmVjdCwgaW5wdXQpIFwKKyAgVEVTVF9DQVNFKHRlc3RudW0sIGEwLCBjb3JyZWN0LCBsaSBhMCwgaW5wdXQ7IGZtdi5zLnggZmEwLCBhMDsgXAorICAgICAgICAgICAgICAgICAgICBmY2xhc3MucyBhMCwgZmEwKQorCisjZGVmaW5lIFRFU1RfRkNMQVNTX0QzMih0ZXN0bnVtLCBjb3JyZWN0LCBpbnB1dCkgXAorICBURVNUX0NBU0UodGVzdG51bSwgYTAsIGNvcnJlY3QsIFwKKyAgICAgICAgICAgIGxhIGEwLCB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhIDtcCisgICAgICAgICAgICBmbGQgZmEwLCAwKGEwKTsgXAorICAgICAgICAgICAgZmNsYXNzLmQgYTAsIGZhMCkgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIC5hbGlnbiAzOyBcCisgICAgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YTogXAorICAgIC5kd29yZCBpbnB1dDsgXAorICAgIC5wb3BzZWN0aW9uCisKKyNkZWZpbmUgVEVTVF9GQ0xBU1NfRCh0ZXN0bnVtLCBjb3JyZWN0LCBpbnB1dCkgXAorICBURVNUX0NBU0UodGVzdG51bSwgYTAsIGNvcnJlY3QsIGxpIGEwLCBpbnB1dDsgZm12LmQueCBmYTAsIGEwOyBcCisgICAgICAgICAgICAgICAgICAgIGZjbGFzcy5kIGEwLCBmYTApCisKKyNkZWZpbmUgVEVTVF9JTlRfRlBfT1BfUyggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICBTV1NJRyAodGVzdG51bSwgVEVTVE5VTSk7XAorICBsYSAgYTAsIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGEgO1wKKyAgbHcgIGEzLCAwKGEwKTsgXAorICBsaSAgYTAsIHZhbDE7IFwKKyAgaW5zdCBmMCwgYTA7IFwKKyAgZnNmbGFncyB4MDsgXAorICBmbXYueC5zIGEwLCBmMDsgXAorICBibmUgYTAsIGEzLCBmYWlsOyBcCisgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAuYWxpZ24gMjsgXAorICB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhOiBcCisgIC5mbG9hdCByZXN1bHQ7IFwKKyAgLnBvcHNlY3Rpb24KKworI2RlZmluZSBURVNUX0lOVF9GUF9PUF9EMzIoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsMSApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhIDtcCisgIGx3ICBhMywgMChhMCk7IFwKKyAgbHcgIGE0LCA0KGEwKTsgXAorICBsaSAgYTEsIHZhbDE7IFwKKyAgaW5zdCBmMCwgYTE7IFwKKyAgXAorICBmc2QgZjAsIDAoYTApOyBcCisgIGx3IGExLCA0KGEwKTsgXAorICBsdyBhMCwgMChhMCk7IFwKKyAgXAorICBmc2ZsYWdzIHgwOyBcCisgIGJuZSBhMCwgYTMsIGZhaWw7IFwKKyAgYm5lIGExLCBhNCwgZmFpbDsgXAorICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgLmFsaWduIDM7IFwKKyAgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YTogXAorICAuZG91YmxlIHJlc3VsdDsgXAorICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfSU5UX0ZQX09QX0QoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsMSApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhIDtcCisgIGxkICBhMywgMChhMCk7IFwKKyAgbGkgIGEwLCB2YWwxOyBcCisgIGluc3QgZjAsIGEwOyBcCisgIGZzZmxhZ3MgeDA7IFwKKyAgZm12LnguZCBhMCwgZjA7IFwKKyAgYm5lIGEwLCBhMywgZmFpbDsgXAorICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgLmFsaWduIDM7IFwKKyAgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YTogXAorICAuZG91YmxlIHJlc3VsdDsgXAorICAucG9wc2VjdGlvbgorCisvLyBXZSBuZWVkIHNvbWUgc3BlY2lhbCBoYW5kbGluZyBoZXJlIHRvIGFsbG93IDY0LWJpdCBjb21wYXJpc29uIGluIDMyLWJpdCBhcmNoCisvLyBUT0RPOiBmaW5kIGEgYmV0dGVyIG5hbWUgYW5kIGNsZWFuIHVwIHdoZW4gaW50ZW5kZWQgZm9yIGdlbmVyYWwgdXNhZ2U/CisjZGVmaW5lIFRFU1RfQ0FTRV9EMzIoIHRlc3RudW0sIHRlc3RyZWcxLCB0ZXN0cmVnMiwgY29ycmVjdHZhbCwgY29kZS4uLiApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgICBjb2RlOyBcCisgICAgbGEgIHgzMSwgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YSA7IFwKKyAgICBsdyAgeDI5LCAwKHgzMSk7IFwKKyAgICBsdyAgeDMxLCA0KHgzMSk7IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICAgIFNXU0lHICh0ZXN0bnVtLCBURVNUTlVNKTtcCisgICAgYm5lIHRlc3RyZWcxLCB4MjksIGZhaWw7XAorICAgIGJuZSB0ZXN0cmVnMiwgeDMxLCBmYWlsO1wKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYWxpZ24gMzsgXAorICAgIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGE6IFwKKyAgICAuZHdvcmQgY29ycmVjdHZhbDsgXAorICAgIC5wb3BzZWN0aW9uCisKKy8vIF4geDMwIGlzIHVzZWQgaW4gc29tZSBvdGhlciBtYWNyb3MsIHRvIGF2b2lkIGlzc3VlcyB3ZSB1c2UgeDMxIGZvciB1cHBlciB3b3JkCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQYXNzIGFuZCBmYWlsIGNvZGUgKGFzc3VtZXMgdGVzdCBudW0gaXMgaW4gVEVTVE5VTSkKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjZGVmaW5lIFRFU1RfUEFTU0ZBSUwgXAorICAgICAgICBibmUgeDAsIFRFU1ROVU0sIHBhc3M7IFwKK2ZhaWw6IFwKKyAgICAgICAgUlZURVNUX0ZBSUw7IFwKK3Bhc3M6IFwKKyAgICAgICAgUlZURVNUX1BBU1MgXAorCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0IGRhdGEgc2VjdGlvbgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgVEVTVF9EQVRBCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvY29tcGxpYW5jZV9pby5oIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvY29tcGxpYW5jZV9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViN2NhNTQKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvcmlzY3ZfY29tcGxpYW5jZS9jb21wbGlhbmNlX2lvLmgKQEAgLTAsMCArMSw3MCBAQAorLy8gUklTQy1WIENvbXBsaWFuY2UgSU8gVGVzdCBIZWFkZXIgRmlsZQorCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMTggSW1wZXJhcyBTb2Z0d2FyZSBMdGQuLCB3d3cuaW1wZXJhcy5jb20KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELAorICogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKi8KKworI2lmbmRlZiBfQ09NUExJQU5DRV9JT19ICisjZGVmaW5lIF9DT01QTElBTkNFX0lPX0gKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUlYgSU8gTWFjcm9zIChOb24gZnVuY3Rpb25hbCkKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNpZmRlZiBfQ09NUExJQU5DRV9PVVRQVVQKKworI2RlZmluZSBSVlRFU1RfSU9fUFVTSChfU1ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorbGEgX1NQLCBiZWdpbl9yZWdzdGF0ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorc3cgeDMsIDAoX1NQKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorc3cgeDQsIDQoX1NQKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorc3cgeDUsIDgoX1NQKTsKKworI2RlZmluZSBSVlRFU1RfSU9fUE9QKF9TUCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorbGEgX1NQLCBiZWdpbl9yZWdzdGF0ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorbHcgeDMsIDAoX1NQKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorbHcgeDQsIDQoX1NQKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorbHcgeDUsIDgoX1NQKTsJCisKKyNkZWZpbmUgUlZURVNUX0lPX1dSSVRFX1NUUihfU1AsIF9TVFIpCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC5zZWN0aW9uIC5kYXRhLnN0cmluZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorMjAwMDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC5zdHJpbmcgX1NUUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC5zZWN0aW9uIC50ZXh0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFJWVEVTVF9JT19QVVNIKF9TUCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGxpIHgzLCAweEYwMDAwMDAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGxhIHg0LCAyMDAwMWI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorMjogIGxiIHg1LCAwKHg0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNiIHg1LCAwKHgzKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGJlcSB4NSwgemVybywgMWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGFkZCB4NCwgeDQsIDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGogMmI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorMTogIFJWVEVTVF9JT19QT1AoX1NQKQorCisjZWxzZSAvLyAjaWZkZWYgX0NPTVBMSUFOQ0VfT1VUUFVUCisKKyNkZWZpbmUgUlZURVNUX0lPX1dSSVRFX1NUUihfU1AsIF9TVFIpCisKKyNlbmRpZiAvLyAjZW5kICNpZmRlZiBfQ09NUExJQU5DRV9PVVRQVVQKKworI2RlZmluZSBSVlRFU1RfSU9fSU5JVAorI2RlZmluZSBSVlRFU1RfSU9fQ0hFQ0soKQorI2RlZmluZSBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUShfU1AsIF9SLCBfSSkKKyNkZWZpbmUgUlZURVNUX0lPX0FTU0VSVF9TRlBSX0VRKF9GLCBfUiwgX0kpCisjZGVmaW5lIFJWVEVTVF9JT19BU1NFUlRfREZQUl9FUShfRCwgX1IsIF9JKQorI2RlZmluZSBSVlRFU1RfSU9fQVNTRVJUX0VRKF9SLCBfSSkgCisKKyNlbmRpZiAvLyBfQ09NUExJQU5DRV9JT19ICmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvcmlzY3ZfY29tcGxpYW5jZS9jb21wbGlhbmNlX3Rlc3QuaCBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL2NvbXBsaWFuY2VfdGVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjN2U3ZjkKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvcmlzY3ZfY29tcGxpYW5jZS9jb21wbGlhbmNlX3Rlc3QuaApAQCAtMCwwICsxLDMxIEBACisvLyBSSVNDLVYgQ29tcGxpYW5jZSBUZXN0IEhlYWRlciBGaWxlCisvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIENvZGFzaXAgTHRkLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8gU2VlIExJQ0VOU0UgZm9yIGxpY2Vuc2UgZGV0YWlscy4KKy8vCisvLyBEZXNjcmlwdGlvbjogQ29tbW9uIGhlYWRlciBmaWxlIGZvciBSVjMySSB0ZXN0cworCisjaWZuZGVmIF9DT01QTElBTkNFX1RFU1RfSAorI2RlZmluZSBfQ09NUExJQU5DRV9URVNUX0gKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUlYgQ29tcGxpYW5jZSBNYWNyb3MKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBSVl9DT01QTElBTkNFX0hBTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisKKyNkZWZpbmUgUlZfQ09NUExJQU5DRV9SVjMyTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBSVlRFU1RfUlYzMk0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisKKyNkZWZpbmUgUlZfQ09NUExJQU5DRV9DT0RFX0JFR0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBSVlRFU1RfQ09ERV9CRUdJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisKKyNkZWZpbmUgUlZfQ09NUExJQU5DRV9DT0RFX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBSVlRFU1RfQ09ERV9FTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisKKyNkZWZpbmUgUlZfQ09NUExJQU5DRV9EQVRBX0JFR0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBSVlRFU1RfREFUQV9CRUdJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisKKyNkZWZpbmUgUlZfQ09NUExJQU5DRV9EQVRBX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBSVlRFU1RfREFUQV9FTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisKKyNlbmRpZgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL3Jpc2N2X3Rlc3QuaCBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL3Jpc2N2X3Rlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGM2MTU2Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvcmlzY3ZfdGVzdC5oCkBAIC0wLDAgKzEsNyBAQAorCisjaWZuZGVmIF9SSVNDVl9URVNUX0gKKyNkZWZpbmUgX1JJU0NWX1RFU1RfSAorCisjaW5jbHVkZSAidGVzdF9tYWNyb3MuaCIKKworI2VuZGlmClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvcmlzY3ZfdGVzdF9tYWNyb3MuaCBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL3Jpc2N2X3Rlc3RfbWFjcm9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcxN2JkNAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL3Jpc2N2X3Rlc3RfbWFjcm9zLmgKQEAgLTAsMCArMSw0NjMgQEAKKy8vIFJJU0MtViBDb21wbGlhbmNlIElPIFRlc3QgSGVhZGVyIEZpbGUKKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDE4IEltcGVyYXMgU29mdHdhcmUgTHRkLiwgd3d3LmltcGVyYXMuY29tCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwKKyAqIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICovCisKKyNpbmNsdWRlICJyaXNjdl9tYWNyb3MuaCIKKworLy8KKy8vIEluIGdlbmVyYWwgdGhlIGZvbGxvd2luZyByZWdpc3RlcnMgYXJlIHJlc2VydmVkCisvLyByYSwgYTAsIHQwLCB0MQorLy8gQWRkaXRpb25hbGx5IG9uIGFuIGFzc2VydGlvbiB2aW9sYXRpb24sIHQxLCB0MiBhcmUgb3ZlcndyaXR0ZW4KKy8vIHgxLCB4MTAsIHg1LCB4NiwgeDcgcmVzcGVjdGl2ZWx5CisvLyBGbG9hdGluZyByZWdpc3RlcnMgcmVzZXJ2ZWQKKy8vIGY1CisvLworCisjZGVmaW5lIE1BU0tfWExFTih4KSAoKHgpICYgKCgxIDw8IChfX3Jpc2N2X3hsZW4gLSAxKSA8PCAxKSAtIDEpKQorCisjZGVmaW5lIFNFWFRfSU1NKHgpICgoeCkgfCAoLSgoKHgpID4+IDExKSAmIDEpIDw8IDExKSkKKworLy8gQmFzZSBmdW5jdGlvbiBmb3IgaW50ZWdlciBvcGVyYXRpb25zCisjZGVmaW5lIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBjb2RlLi4uICkgXAorICAgIGNvZGU7IFwKKyAgICBzdyBkZXN0cmVnLCBvZmZzZXQoc3dyZWcpOyBcCisgICAgUlZURVNUX0lPX0FTU0VSVF9HUFJfRVEodGVzdHJlZywgZGVzdHJlZywgY29ycmVjdHZhbCkgXAorCisvLyBCYXNlIGZ1bmN0aW9ucyBmb3Igc2luZ2xlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBvcGVyYXRpb25zCisjZGVmaW5lIFRFU1RfQ0FTRV9GUCh0ZXN0X251bSwgZGVzdHJlZywgcmVnMSwgcmVnMiwgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCwgY29kZS4uLiApIFwKKyAgICBsYSAgYTAsIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOyBcCisgICAgZmx3IHJlZzEsIDAoYTApOyBcCisgICAgZmx3IHJlZzIsIDQoYTApOyBcCisgICAgbHcgdDEsIDgoYTApOyBcCisgICAgY29kZTsgXAorICAgIGZzdyBkZXN0cmVnLCBvZmZzZXQoc3dyZWcpOyBcCisgICAgUlZURVNUX0lPX0FTU0VSVF9TRlBSX0VRKGRlc3RyZWcsIHQxLCBjb3JyZWN0dmFsKSBcCisgICAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCisgICAgLmFsaWduIDM7IFwKKyAgICB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLmZsb2F0IHZhbDE7IFwKKyAgICAgIC5mbG9hdCB2YWwyOyBcCisgICAgICAud29yZCBjb3JyZWN0dmFsOyBcCisgICAgLnBvcHNlY3Rpb24KKworI2RlZmluZSBURVNUX0NBU0VfRlBfSSh0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGx3IHQxLCAwKGEwKTsgXAorICAgIGNvZGU7IFwKKyAgICBmc3cgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorICAgIFJWVEVTVF9JT19BU1NFUlRfU0ZQUl9FUShkZXN0cmVnLCB0MSwgY29ycmVjdHZhbCkgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIC5hbGlnbiAxOyBcCisgICAgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE6IFwKKyAgICAgIC53b3JkIGNvcnJlY3R2YWw7IFwKKyAgICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfQ0FTRV9GUF9JMih0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZsdyByZWcsIDAoYTApOyBcCisgICAgbHcgdDEsIDQoYTApOyBcCisgICAgY29kZTsgXAorICAgIHN3IGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIGRlc3RyZWcsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYWxpZ24gMjsgXAorICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCisgICAgICAuZmxvYXQgdmFsOyBcCisgICAgICAud29yZCBjb3JyZWN0dmFsOyBcCisgICAgLnBvcHNlY3Rpb24KKworI2RlZmluZSBURVNUX0NBU0VfRlBfNFJFRyh0ZXN0X251bSwgZGVzdHJlZywgcmVnMSwgcmVnMiwgcmVnMywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgdmFsMywgc3dyZWcsIG9mZnNldCwgY29kZS4uLiApIFwKKyAgICBsYSAgYTAsIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOyBcCisgICAgZmx3IHJlZzEsIDAoYTApOyBcCisgICAgZmx3IHJlZzIsIDQoYTApOyBcCisgICAgZmx3IHJlZzMsIDgoYTApOyBcCisgICAgbHcgdDEsIDEyKGEwKTsgXAorICAgIGNvZGU7IFwKKyAgICBmc3cgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorICAgIFJWVEVTVF9JT19BU1NFUlRfU0ZQUl9FUShkZXN0cmVnLCB0MSwgY29ycmVjdHZhbCkgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIC5hbGlnbiA0OyBcCisgICAgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE6IFwKKyAgICAgIC5mbG9hdCB2YWwxOyBcCisgICAgICAuZmxvYXQgdmFsMjsgXAorICAgICAgLmZsb2F0IHZhbDM7IFwKKyAgICAgIC53b3JkIGNvcnJlY3R2YWw7IFwKKyAgICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfQ0FTRV9GUF9GTVZYUyh0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZsdyByZWcsIDAoYTApOyBcCisgICAgY29kZTsgXAorICAgIHN3IGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIGRlc3RyZWcsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYWxpZ24gMTsgXAorICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCisgICAgICAuZmxvYXQgdmFsOyBcCisgICAgLnBvcHNlY3Rpb24KKworI2RlZmluZSBURVNUX0NBU0VfRlBfRk1WU1godGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCBjb2RlLi4uKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGxpIHJlZywgdmFsOyBcCisgICAgY29kZTsgXAorICAgIGZzdyBkZXN0cmVnLCBvZmZzZXQoc3dyZWcpOyBcCisgICAgbHcgYTEsIDAoYTApOyBcCisgICAgUlZURVNUX0lPX0FTU0VSVF9TRlBSX0VRKGRlc3RyZWcsIGExLCBjb3JyZWN0dmFsKSBcCisgICAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCisgICAgLmFsaWduIDE7IFwKKyAgICB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLndvcmQgY29ycmVjdHZhbDsgXAorICAgIC5wb3BzZWN0aW9uCisKKy8vIEJhc2UgZnVuY3Rpb25zIGZvciBkb3VibGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IG9wZXJhdGlvbnMgLSBydjMyZAorI2RlZmluZSBURVNUX0NBU0VfRlBEKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcxLCByZWcyLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCBzd3JlZywgb2Zmc2V0LCBjb2RlLi4uICkgXAorICAgIGxhICBhMCwgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKKyAgICBmbGQgcmVnMSwgMChhMCk7IFwKKyAgICBmbGQgcmVnMiwgOChhMCk7IFwKKyAgICBjb2RlOyBcCisgICAgZnNkIGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICBsdyB0MSwgMTYoYTApOyBcCisgICAgbHcgdDIsIDIwKGEwKTsgXAorICAgIGxhIGEwLCBzdG9yZV8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKKyAgICBmc2QgZGVzdHJlZywgMChhMCk7IFwKKyAgICBsdyBhMSwgMChhMCk7IFwKKyAgICBsdyBhMiwgNChhMCk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0RGUFJfRVEoZGVzdHJlZywgdDIsIHQxLCBhMiwgYTEsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYWxpZ24gMzsgXAorICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCisgICAgICAuZG91YmxlIHZhbDE7IFwKKyAgICAgIC5kb3VibGUgdmFsMjsgXAorICAgICAgLmR3b3JkIGNvcnJlY3R2YWw7IFwKKyAgICAucG9wc2VjdGlvbjsgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIHN0b3JlXyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLmZpbGwgMSwgOCwgLTE7IFwKKyAgICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfQ0FTRV9GUERfSSh0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGNvZGU7IFwKKyAgICBmc2QgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorICAgIGx3IHQxLCAwKGEwKTsgXAorICAgIGx3IHQyLCA0KGEwKTsgXAorICAgIGxhIGEwLCBzdG9yZV8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKKyAgICBmc2QgZGVzdHJlZywgMChhMCk7IFwKKyAgICBsdyBhMSwgMChhMCk7IFwKKyAgICBsdyBhMiwgNChhMCk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0RGUFJfRVEoZGVzdHJlZywgdDIsIHQxLCBhMiwgYTEsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYWxpZ24gMTsgXAorICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCisgICAgICAuZHdvcmQgY29ycmVjdHZhbDsgXAorICAgIC5wb3BzZWN0aW9uOyBcCisgICAgc3RvcmVfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCisgICAgICAuZmlsbCAxLCA4LCAtMTsgXAorICAgIC5wb3BzZWN0aW9uCisKKyNkZWZpbmUgVEVTVF9DQVNFX0ZQRF9JMih0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZsZCByZWcsIDAoYTApOyBcCisgICAgbHcgdDEsIDgoYTApOyBcCisgICAgY29kZTsgXAorICAgIHN3IGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIGRlc3RyZWcsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYWxpZ24gMjsgXAorICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCisgICAgICAuZG91YmxlIHZhbDsgXAorICAgICAgLndvcmQgY29ycmVjdHZhbDsgXAorICAgIC5wb3BzZWN0aW9uCisKKyNkZWZpbmUgVEVTVF9DQVNFX0ZQRF80UkVHKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcxLCByZWcyLCByZWczLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCB2YWwzLCBzd3JlZywgb2Zmc2V0LCBjb2RlLi4uICkgXAorICAgIGxhICBhMCwgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKKyAgICBmbGQgcmVnMSwgMChhMCk7IFwKKyAgICBmbGQgcmVnMiwgOChhMCk7IFwKKyAgICBmbGQgcmVnMywgMTYoYTApOyBcCisgICAgY29kZTsgXAorICAgIGZzZCBkZXN0cmVnLCBvZmZzZXQoc3dyZWcpOyBcCisgICAgbHcgdDEsIDI0KGEwKTsgXAorICAgIGx3IHQyLCAyOChhMCk7IFwKKyAgICBsYSBhMCwgc3RvcmVfICMjIHRlc3RfbnVtICMjIF9kYXRhOyBcCisgICAgZnNkIGRlc3RyZWcsIDAoYTApOyBcCisgICAgbHcgYTEsIDAoYTApOyBcCisgICAgbHcgYTIsIDQoYTApOyBcCisgICAgUlZURVNUX0lPX0FTU0VSVF9ERlBSX0VRKGRlc3RyZWcsIHQyLCB0MSwgYTIsIGExLCBjb3JyZWN0dmFsKSBcCisgICAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCisgICAgLmFsaWduIDQ7IFwKKyAgICB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLmRvdWJsZSB2YWwxOyBcCisgICAgICAuZG91YmxlIHZhbDI7IFwKKyAgICAgIC5kb3VibGUgdmFsMzsgXAorICAgICAgLmR3b3JkIGNvcnJlY3R2YWw7IFwKKyAgICAucG9wc2VjdGlvbjsgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIHN0b3JlXyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLmZpbGwgMSwgOCwgLTE7IFwKKyAgICAucG9wc2VjdGlvbgorCisvL1Rlc3RzIGZvciBhIGluc3RydWN0aW9ucyB3aXRoIHJlZ2lzdGVyLXJlZ2lzdGVyIG9wZXJhbmQKKyNkZWZpbmUgVEVTVF9SUl9PUChpbnN0LCBkZXN0cmVnLCByZWcxLCByZWcyLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCBzd3JlZywgb2Zmc2V0LCB0ZXN0cmVnKSBcCisgICAgVEVTVF9DQVNFKHRlc3RyZWcsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGxpICByZWcxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpICByZWcyLCBNQVNLX1hMRU4odmFsMik7IFwKKyAgICAgIGluc3QgZGVzdHJlZywgcmVnMSwgcmVnMjsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1NSQzEoIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAorICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSBkZXN0cmVnLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpIHJlZywgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIGRlc3RyZWcsIHJlZzsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1NSQzIoIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAorICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSByZWcsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgbGkgZGVzdHJlZywgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIHJlZywgZGVzdHJlZzsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1NSQzEyKCBpbnN0LCBkZXN0cmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIHRlc3RyZWcpIFwKKyAgICBURVNUX0NBU0UodGVzdHJlZywgZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgbGkgZGVzdHJlZywgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIGRlc3RyZWcsIGRlc3RyZWc7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SUl9aRVJPMSggaW5zdCwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIHRlc3RyZWcpIFwKKyAgICBURVNUX0NBU0UodGVzdHJlZywgZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgbGkgcmVnLCBNQVNLX1hMRU4odmFsKTsgXAorICAgICAgaW5zdCBkZXN0cmVnLCB4MCwgcmVnOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfWkVSTzIoIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCB0ZXN0cmVnKSBcCisgICAgVEVTVF9DQVNFKHRlc3RyZWcsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGxpIHJlZywgTUFTS19YTEVOKHZhbCk7IFwKKyAgICAgIGluc3QgZGVzdHJlZywgcmVnLCB4MDsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1pFUk8xMiggaW5zdCwgZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAorICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBpbnN0IGRlc3RyZWcsIHgwLCB4MDsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1pFUk9ERVNUKCBpbnN0LCByZWcxLCByZWcyLCB2YWwxLCB2YWwyLCBzd3JlZywgb2Zmc2V0LCB0ZXN0cmVnKSBcCisgICAgVEVTVF9DQVNFKHRlc3RyZWcsIHgwLCAwLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSByZWcxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpIHJlZzIsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgaW5zdCB4MCwgcmVnMSwgcmVnMjsgXAorICAgICkKKworLy9UZXN0cyBmb3IgYSBpbnN0cnVjdGlvbnMgd2l0aCByZWdpc3Rlci1pbW1lZGlhdGUgb3BlcmFuZAorI2RlZmluZSBURVNUX0lNTV9PUCggaW5zdCwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIGltbSwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAorICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSByZWcsIE1BU0tfWExFTih2YWwpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIHJlZywgU0VYVF9JTU0oaW1tKTsgXAorICAgICkKKworI2RlZmluZSBURVNUX0lNTV9TUkMoIGluc3QsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0LCB0ZXN0cmVnKSBcCisgICAgVEVTVF9DQVNFKHRlc3RyZWcsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGxpIGRlc3RyZWcsIE1BU0tfWExFTih2YWwpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIGRlc3RyZWcsIFNFWFRfSU1NKGltbSk7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9JTU1fWkVST1NSQyggaW5zdCwgZGVzdHJlZywgY29ycmVjdHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0LCB0ZXN0cmVnKSBcCisgICAgVEVTVF9DQVNFKHRlc3RyZWcsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGluc3QgZGVzdHJlZywgeDAsIFNFWFRfSU1NKGltbSk7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9JTU1fWkVST0RFU1QoIGluc3QsIHJlZywgdmFsLCBpbW0sIHN3cmVnLCBvZmZzZXQsIHRlc3RyZWcpIFwKKyAgICBURVNUX0NBU0UodGVzdHJlZywgeDAsIDAsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGxpIHJlZywgTUFTS19YTEVOKHZhbCk7IFwKKyAgICAgIGluc3QgeDAsIHJlZywgU0VYVF9JTU0oaW1tKTsgXAorICAgICkKKworI2RlZmluZSBURVNUX0lNTV9PTkVSRUcoIGluc3QsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIGltbSwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAorICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBpbnN0IGRlc3RyZWcsIFNFWFRfSU1NKGltbSk7IFwKKyAgICAgICkKKworI2RlZmluZSBURVNUX0FVSVBDKGluc3QsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIGltbSwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAorICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICAxOiBcCisgICAgICBpbnN0IGRlc3RyZWcsIGltbTsgXAorICAgICAgbGEgc3dyZWcsIDFiOyBcCisgICAgICBzdWIgZGVzdHJlZywgZGVzdHJlZywgc3dyZWc7IFwKKyAgICAgICkKKworLy9UZXN0cyBmb3IgYSBjb21wcmVzc2VkIGluc3RydWN0aW9uCisjZGVmaW5lIFRFU1RfQ1JfT1AoIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAorICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSByZWcsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgbGkgZGVzdHJlZywgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIHJlZzsgXAorICAgICAgKQorCisjZGVmaW5lIFRFU1RfQ0lfT1AoIGluc3QsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0LCB0ZXN0cmVnKSBcCisgICAgVEVTVF9DQVNFKHRlc3RyZWcsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGxpIGRlc3RyZWcsIE1BU0tfWExFTih2YWwpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIGltbTsgXAorICAgICAgKQorCisjZGVmaW5lIFRFU1RfQ0lfT1BfTk9SRUcoaW5zdCwgY29ycmVjdHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0LCB0ZXN0cmVnKSBcCisgICAgVEVTVF9DQVNFKHRlc3RyZWcseDAsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGluc3QgaW1tOyBcCisgICAgICApCisKKy8vVGVzdHMgZm9yIGZsb2F0aW5nIHBvaW50IGluc3RydWN0aW9ucyAtIHNpbmdsZSBwcmVjaXNpb24KKyNkZWZpbmUgVEVTVF9GUF9PUCh0ZXN0X251bSwgaW5zdCwgZGVzdHJlZywgcmVnMSwgcmVnMiwgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgVEVTVF9DQVNFX0ZQKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcxLCByZWcyLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICAgIGluc3QgZGVzdHJlZywgcmVnMSwgcmVnMjsgXAorICAgICAgICApCisKKyNkZWZpbmUgVEVTVF9GUF9PTkVSRUcodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlAodGVzdF9udW0sIGRlc3RyZWcsIHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzsgXAorICAgICAgICApCisKKyNkZWZpbmUgVEVTVF9GUF80UkVHKHRlc3RfbnVtLCBpbnN0LCBkZXN0cmVnLCByZWcxLCByZWcyLCByZWczLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCB2YWwzLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlBfNFJFRyh0ZXN0X251bSwgZGVzdHJlZywgcmVnMSwgcmVnMiwgcmVnMywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgdmFsMywgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzEsIHJlZzIsIHJlZzM7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfRlBfSSh0ZXN0X251bSwgaW5zdCwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIFRFU1RfQ0FTRV9GUF9JKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBsaSByZWcsIE1BU0tfWExFTih2YWwpOyBcCisgICAgICAgIGluc3QgZGVzdHJlZywgcmVnOyBcCisgICAgICAgICkKKworI2RlZmluZSBURVNUX0ZQX0kyKHRlc3RfbnVtLCBpbnN0LCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgVEVTVF9DQVNFX0ZQX0kyKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzsgXAorICAgICAgICApCisKKy8vVGVzdHMgZm9yIGZsb2F0aW5nIHBvaW50IGluc3RydWN0aW9ucyAtIGRvdWJsZSBwcmVjaXNpb24KKyNkZWZpbmUgVEVTVF9GUERfT1AodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZzEsIHJlZzIsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIFRFU1RfQ0FTRV9GUEQodGVzdF9udW0sIGRlc3RyZWcsIHJlZzEsIHJlZzIsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgICAgaW5zdCBkZXN0cmVnLCByZWcxLCByZWcyOyBcCisgICAgICAgICkKKworI2RlZmluZSBURVNUX0ZQRF9PTkVSRUcodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlBEKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgICAgaW5zdCBkZXN0cmVnLCByZWc7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfRlBEXzRSRUcodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZzEsIHJlZzIsIHJlZzMsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHZhbDMsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIFRFU1RfQ0FTRV9GUERfNFJFRyh0ZXN0X251bSwgZGVzdHJlZywgcmVnMSwgcmVnMiwgcmVnMywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgdmFsMywgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzEsIHJlZzIsIHJlZzM7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfRlBEX0kodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlBEX0kodGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICAgIGxpIHJlZywgTUFTS19YTEVOKHZhbCk7IFwKKyAgICAgICAgaW5zdCBkZXN0cmVnLCByZWc7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfRlBEX0kyKHRlc3RfbnVtLCBpbnN0LCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgVEVTVF9DQVNFX0ZQRF9JMih0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgICAgaW5zdCBkZXN0cmVnLCByZWc7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfQ0FEREkxNlNQKGNvcnJlY3R2YWwsIGltbSwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAorICAgICAgVEVTVF9DQVNFKHRlc3RyZWcseDIsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGMuYWRkaTE2c3AgeDIsIGltbTsgXAorICAgICAgKQorCisjZGVmaW5lIFRFU1RfQ0FEREk0U1BOKGRlc3RyZWcsIGNvcnJlY3R2YWwsIGltbSwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAorICAgICAgVEVTVF9DQVNFKHRlc3RyZWcsZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBjLmFkZGk0c3BuIGRlc3RyZWcsIHgyLCBTRVhUX0lNTShpbW0pOyBcCisgICAgICAgICkKKworI2RlZmluZSBURVNUX0NKTChpbnN0LCByZWcsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgbGkgeDEwLCB2YWw7IFwKKyAgICAgIGxhIHJlZywgMWY7IFwKKyAgICAgIGluc3QgcmVnOyBcCisgICAgICBsaSB4MTAsIDB4MTIzYWI7IFwKKzE6IFwKKyAgICAgIHN3IHgxMCwgb2Zmc2V0KHN3cmVnKTsgXAorICAgICAgUlZURVNUX0lPX0FTU0VSVF9HUFJfRVEoeDMxLCB4MTAsIHZhbCk7IFwKKworI2RlZmluZSBBQlMoeCkgKCh4ID4+IDExKSBeIHgpIC0gKHggPj4gMTEpCisKKyNkZWZpbmUgVEVTVF9DSihpbnN0LCByZWcsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgbGkgcmVnLCB2YWw7IFwKKyAgICAgIGluc3QgMWY7IFwKKyAgICAgIGxpIHJlZywgMHgxMjNhYjsgXAorMTogXAorICAgICAgc3cgcmVnLCBvZmZzZXQoc3dyZWcpOyBcCisgICAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIHJlZywgdmFsKTsgXAorCisjZGVmaW5lIFRFU1RfQ0woaW5zdCwgcmVnLCBpbW0sIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIGxhIHJlZywgdGVzdF9kYXRhOyBcCisgICAgICBpbnN0IHJlZywgaW1tKHJlZyk7IFwKKyAgICAgIHN3IHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorCisvLyBsdyByZWcsIGltbSh4MikKKy8vIGMubHdzcCByZWcsIGltbSh4MikKKyNkZWZpbmUgVEVTVF9DTFdTUChyZWcsIGltbSwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgbGEgeDIsIHRlc3RfZGF0YTsgXAorICAgICAgYy5sd3NwIHJlZywgaW1tKHgyKTsgXAorICAgICAgc3cgcmVnLCBvZmZzZXQoc3dyZWcpOyBcCisKKyNkZWZpbmUgVEVTVF9DU1codGVzdF9kYXRhLCBpbnN0LCByZWcxLCByZWcyLCB2YWwsIGltbSwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgbGkgcmVnMSwgdmFsOyBcCisgICAgICBsYSByZWcyLCB0ZXN0X2RhdGE7IFwKKyAgICAgIGluc3QgcmVnMSwgaW1tKHJlZzIpOyBcCisgICAgICBsdyByZWcxLCBpbW0ocmVnMik7IFwKKyAgICAgIHN3IHJlZzEsIG9mZnNldChzd3JlZyk7IFwKKyAgICAgIFJWVEVTVF9JT19BU1NFUlRfR1BSX0VRKHgzMSwgcmVnMSwgdmFsKTsgXAorCisjZGVmaW5lIFRFU1RfQ1NXU1AodGVzdF9kYXRhLCByZWcsIHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBsYSB4MiwgdGVzdF9kYXRhOyBcCisgICAgICBsaSByZWcsIHZhbDsgXAorICAgICAgYy5zd3NwIHJlZywgaW1tKHgyKTsgXAorICAgICAgbHcgcmVnLCBpbW0oeDIpOyBcCisgICAgICBzdyByZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICAgIFJWVEVTVF9JT19BU1NFUlRfR1BSX0VRKHgzMSwgcmVnLCB2YWwpOyBcCisKKyNkZWZpbmUgVEVTVF9DQkVRWihyZWcsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgbGkgcmVnLCB2YWw7IFwKKyAgICAgIGMuc3ViIHJlZywgcmVnOyBcCisgICAgICBjLmJlcXogcmVnLCAzZjsgXAorICAgICAgbGkgcmVnLCAweDEyM2FiOyBcCiszOiBcCisgICAgICBzdyByZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICAgIFJWVEVTVF9JT19BU1NFUlRfR1BSX0VRKHgzMSwgcmVnLCAweDApOyBcCisKKyNkZWZpbmUgVEVTVF9DQk5FWihyZWcsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgbGkgcmVnLCB2YWw7IFwKKyAgICAgIGMuYm5leiByZWcsIDRmOyBcCisgICAgICBsaSByZWcsIDB4MDsgXAorNDogXAorICAgICAgc3cgcmVnLCBvZmZzZXQoc3dyZWcpOyBcCisgICAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIHJlZywgdmFsKTsgXAorCisjZGVmaW5lIFRFU1RfRk1WWFModGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlBfRk1WWFModGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICAgIGZtdi54LnMgZGVzdHJlZywgcmVnOyBcCisgICAgICAgICkKKworI2RlZmluZSBURVNUX0ZNVlNYKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgVEVTVF9DQVNFX0ZQX0ZNVlNYKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBmbXYucy54IGRlc3RyZWcsIHJlZzsgXAorICAgICAgICApCisKKyNkZWZpbmUgU1dTSUcoYSxiKQorCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvcmlzY3ZfY29tcGxpYW5jZS90ZXN0X21hY3Jvcy5oIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvdGVzdF9tYWNyb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmM2MTBlCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvdGVzdF9tYWNyb3MuaApAQCAtMCwwICsxLDU5MyBAQAorCisvLyBSSVNDLVYgQ29tcGxpYW5jZSBUZXN0IEhlYWRlciBGaWxlCisvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIENvZGFzaXAgTHRkLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8gU2VlIExJQ0VOU0UgZm9yIGxpY2Vuc2UgZGV0YWlscy4KKy8vCisvLyBEZXNjcmlwdGlvbjogQ29tbW9uIGhlYWRlciBmaWxlIGZvciBSVjMySSB0ZXN0cworCisjaWZuZGVmIF9URVNUX01BQ1JPU19ICisjZGVmaW5lIF9URVNUX01BQ1JPU19ICisKKyNpbmNsdWRlICJyaXNjdl9tYWNyb3MuaCIKKworLy8gUklTQy1WIENvbXBsaWFuY2UgSU8gVGVzdCBIZWFkZXIgRmlsZQorCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMTggSW1wZXJhcyBTb2Z0d2FyZSBMdGQuLCB3d3cuaW1wZXJhcy5jb20KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELAorICogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKi8KKworCisvLworLy8gSW4gZ2VuZXJhbCB0aGUgZm9sbG93aW5nIHJlZ2lzdGVycyBhcmUgcmVzZXJ2ZWQKKy8vIHJhLCBhMCwgdDAsIHQxCisvLyBBZGRpdGlvbmFsbHkgb24gYW4gYXNzZXJ0aW9uIHZpb2xhdGlvbiwgdDEsIHQyIGFyZSBvdmVyd3JpdHRlbgorLy8geDEsIHgxMCwgeDUsIHg2LCB4NyByZXNwZWN0aXZlbHkKKy8vIEZsb2F0aW5nIHJlZ2lzdGVycyByZXNlcnZlZAorLy8gZjUKKy8vCisKKyNkZWZpbmUgTUFTS19YTEVOKHgpICgoeCkgJiAoKDEgPDwgKF9fcmlzY3ZfeGxlbiAtIDEpIDw8IDEpIC0gMSkpCisKKyNkZWZpbmUgU0VYVF9JTU0oeCkgKCh4KSB8ICgtKCgoeCkgPj4gMTEpICYgMSkgPDwgMTEpKQorCisvLyBCYXNlIGZ1bmN0aW9uIGZvciBpbnRlZ2VyIG9wZXJhdGlvbnMKKyNkZWZpbmUgVEVTVF9DQVNFKGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgY29kZTsgXAorICAgIHN3IGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIGRlc3RyZWcsIGNvcnJlY3R2YWwpIFwKKworLy8gQmFzZSBmdW5jdGlvbnMgZm9yIHNpbmdsZSBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9ucworI2RlZmluZSBURVNUX0NBU0VfRlAodGVzdF9udW0sIGRlc3RyZWcsIHJlZzEsIHJlZzIsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZsdyByZWcxLCAwKGEwKTsgXAorICAgIGZsdyByZWcyLCA0KGEwKTsgXAorICAgIGx3IHQxLCA4KGEwKTsgXAorICAgIGNvZGU7IFwKKyAgICBmc3cgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorICAgIFJWVEVTVF9JT19BU1NFUlRfU0ZQUl9FUShkZXN0cmVnLCB0MSwgY29ycmVjdHZhbCkgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIC5iYWxpZ24gODsgXAorICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCisgICAgICAuZmxvYXQgdmFsMTsgXAorICAgICAgLmZsb2F0IHZhbDI7IFwKKyAgICAgIC53b3JkIGNvcnJlY3R2YWw7IFwKKyAgICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfQ0FTRV9GUF9JKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgY29kZS4uLiApIFwKKyAgICBsYSAgYTAsIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOyBcCisgICAgbHcgdDEsIDAoYTApOyBcCisgICAgY29kZTsgXAorICAgIGZzdyBkZXN0cmVnLCBvZmZzZXQoc3dyZWcpOyBcCisgICAgUlZURVNUX0lPX0FTU0VSVF9TRlBSX0VRKGRlc3RyZWcsIHQxLCBjb3JyZWN0dmFsKSBcCisgICAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCisgICAgLmJhbGlnbiAyOyBcCisgICAgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE6IFwKKyAgICAgIC53b3JkIGNvcnJlY3R2YWw7IFwKKyAgICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfQ0FTRV9GUF9JMih0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZsdyByZWcsIDAoYTApOyBcCisgICAgbHcgdDEsIDQoYTApOyBcCisgICAgY29kZTsgXAorICAgIHN3IGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIGRlc3RyZWcsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYmFsaWduIDQ7IFwKKyAgICB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLmZsb2F0IHZhbDsgXAorICAgICAgLndvcmQgY29ycmVjdHZhbDsgXAorICAgIC5wb3BzZWN0aW9uCisKKyNkZWZpbmUgVEVTVF9DQVNFX0ZQXzRSRUcodGVzdF9udW0sIGRlc3RyZWcsIHJlZzEsIHJlZzIsIHJlZzMsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHZhbDMsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZsdyByZWcxLCAwKGEwKTsgXAorICAgIGZsdyByZWcyLCA0KGEwKTsgXAorICAgIGZsdyByZWczLCA4KGEwKTsgXAorICAgIGx3IHQxLCAxMihhMCk7IFwKKyAgICBjb2RlOyBcCisgICAgZnN3IGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX1NGUFJfRVEoZGVzdHJlZywgdDEsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYmFsaWduIDE2OyBcCisgICAgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE6IFwKKyAgICAgIC5mbG9hdCB2YWwxOyBcCisgICAgICAuZmxvYXQgdmFsMjsgXAorICAgICAgLmZsb2F0IHZhbDM7IFwKKyAgICAgIC53b3JkIGNvcnJlY3R2YWw7IFwKKyAgICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfQ0FTRV9GUF9GTVZYUyh0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZsdyByZWcsIDAoYTApOyBcCisgICAgY29kZTsgXAorICAgIHN3IGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIGRlc3RyZWcsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYmFsaWduIDI7IFwKKyAgICB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLmZsb2F0IHZhbDsgXAorICAgIC5wb3BzZWN0aW9uCisKKyNkZWZpbmUgVEVTVF9DQVNFX0ZQX0ZNVlNYKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgY29kZS4uLikgXAorICAgIGxhICBhMCwgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKKyAgICBsaSByZWcsIHZhbDsgXAorICAgIGNvZGU7IFwKKyAgICBmc3cgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorICAgIGx3IGExLCAwKGEwKTsgXAorICAgIFJWVEVTVF9JT19BU1NFUlRfU0ZQUl9FUShkZXN0cmVnLCBhMSwgY29ycmVjdHZhbCkgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIC5iYWxpZ24gMjsgXAorICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCisgICAgICAud29yZCBjb3JyZWN0dmFsOyBcCisgICAgLnBvcHNlY3Rpb24KKworLy8gQmFzZSBmdW5jdGlvbnMgZm9yIGRvdWJsZSBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9ucyAtIHJ2MzJkCisjZGVmaW5lIFRFU1RfQ0FTRV9GUEQodGVzdF9udW0sIGRlc3RyZWcsIHJlZzEsIHJlZzIsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZsZCByZWcxLCAwKGEwKTsgXAorICAgIGZsZCByZWcyLCA4KGEwKTsgXAorICAgIGNvZGU7IFwKKyAgICBmc2QgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorICAgIGx3IHQxLCAxNihhMCk7IFwKKyAgICBsdyB0MiwgMjAoYTApOyBcCisgICAgbGEgYTAsIHN0b3JlXyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZzZCBkZXN0cmVnLCAwKGEwKTsgXAorICAgIGx3IGExLCAwKGEwKTsgXAorICAgIGx3IGEyLCA0KGEwKTsgXAorICAgIFJWVEVTVF9JT19BU1NFUlRfREZQUl9FUShkZXN0cmVnLCB0MiwgdDEsIGEyLCBhMSwgY29ycmVjdHZhbCkgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIC5iYWxpZ24gODsgXAorICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCisgICAgICAuZG91YmxlIHZhbDE7IFwKKyAgICAgIC5kb3VibGUgdmFsMjsgXAorICAgICAgLmR3b3JkIGNvcnJlY3R2YWw7IFwKKyAgICAucG9wc2VjdGlvbjsgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIHN0b3JlXyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLmZpbGwgMSwgOCwgLTE7IFwKKyAgICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfQ0FTRV9GUERfSSh0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGNvZGU7IFwKKyAgICBmc2QgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorICAgIGx3IHQxLCAwKGEwKTsgXAorICAgIGx3IHQyLCA0KGEwKTsgXAorICAgIGxhIGEwLCBzdG9yZV8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKKyAgICBmc2QgZGVzdHJlZywgMChhMCk7IFwKKyAgICBsdyBhMSwgMChhMCk7IFwKKyAgICBsdyBhMiwgNChhMCk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0RGUFJfRVEoZGVzdHJlZywgdDIsIHQxLCBhMiwgYTEsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYmFsaWduIDI7IFwKKyAgICB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLmR3b3JkIGNvcnJlY3R2YWw7IFwKKyAgICAucG9wc2VjdGlvbjsgXAorICAgIHN0b3JlXyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLmZpbGwgMSwgOCwgLTE7IFwKKyAgICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfQ0FTRV9GUERfSTIodGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCBjb2RlLi4uICkgXAorICAgIGxhICBhMCwgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKKyAgICBmbGQgcmVnLCAwKGEwKTsgXAorICAgIGx3IHQxLCA4KGEwKTsgXAorICAgIGNvZGU7IFwKKyAgICBzdyBkZXN0cmVnLCBvZmZzZXQoc3dyZWcpOyBcCisgICAgUlZURVNUX0lPX0FTU0VSVF9HUFJfRVEoeDMxLCBkZXN0cmVnLCBjb3JyZWN0dmFsKSBcCisgICAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCisgICAgLmJhbGlnbiA0OyBcCisgICAgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE6IFwKKyAgICAgIC5kb3VibGUgdmFsOyBcCisgICAgICAud29yZCBjb3JyZWN0dmFsOyBcCisgICAgLnBvcHNlY3Rpb24KKworI2RlZmluZSBURVNUX0NBU0VfRlBEXzRSRUcodGVzdF9udW0sIGRlc3RyZWcsIHJlZzEsIHJlZzIsIHJlZzMsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHZhbDMsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZsZCByZWcxLCAwKGEwKTsgXAorICAgIGZsZCByZWcyLCA4KGEwKTsgXAorICAgIGZsZCByZWczLCAxNihhMCk7IFwKKyAgICBjb2RlOyBcCisgICAgZnNkIGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICBsdyB0MSwgMjQoYTApOyBcCisgICAgbHcgdDIsIDI4KGEwKTsgXAorICAgIGxhIGEwLCBzdG9yZV8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKKyAgICBmc2QgZGVzdHJlZywgMChhMCk7IFwKKyAgICBsdyBhMSwgMChhMCk7IFwKKyAgICBsdyBhMiwgNChhMCk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0RGUFJfRVEoZGVzdHJlZywgdDIsIHQxLCBhMiwgYTEsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYmFsaWduIDE2OyBcCisgICAgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE6IFwKKyAgICAgIC5kb3VibGUgdmFsMTsgXAorICAgICAgLmRvdWJsZSB2YWwyOyBcCisgICAgICAuZG91YmxlIHZhbDM7IFwKKyAgICAgIC5kd29yZCBjb3JyZWN0dmFsOyBcCisgICAgLnBvcHNlY3Rpb247IFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICBzdG9yZV8gIyMgdGVzdF9udW0gIyMgX2RhdGE6IFwKKyAgICAgIC5maWxsIDEsIDgsIC0xOyBcCisgICAgLnBvcHNlY3Rpb24KKworLy9UZXN0cyBmb3IgYSBpbnN0cnVjdGlvbnMgd2l0aCByZWdpc3Rlci1yZWdpc3RlciBvcGVyYW5kCisjZGVmaW5lIFRFU1RfUlJfT1AoaW5zdCwgZGVzdHJlZywgcmVnMSwgcmVnMiwgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCkgXAorICAgIFRFU1RfQ0FTRSggZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgbGkgIHJlZzEsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgbGkgIHJlZzIsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgaW5zdCBkZXN0cmVnLCByZWcxLCByZWcyOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfU1JDMSggaW5zdCwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgVEVTVF9DQVNFKCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSBkZXN0cmVnLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpIHJlZywgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIGRlc3RyZWcsIHJlZzsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1NSQzIoIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCkgXAorICAgIFRFU1RfQ0FTRSggZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgbGkgcmVnLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpIGRlc3RyZWcsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgaW5zdCBkZXN0cmVnLCByZWcsIGRlc3RyZWc7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SUl9TUkMxMiggaW5zdCwgZGVzdHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgVEVTVF9DQVNFKCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSBkZXN0cmVnLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGluc3QgZGVzdHJlZywgZGVzdHJlZywgZGVzdHJlZzsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1pFUk8xKCBpbnN0LCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgIFRFU1RfQ0FTRSggZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgbGkgcmVnLCBNQVNLX1hMRU4odmFsKTsgXAorICAgICAgaW5zdCBkZXN0cmVnLCB4MCwgcmVnOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfWkVSTzIoIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgVEVTVF9DQVNFKCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSByZWcsIE1BU0tfWExFTih2YWwpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIHJlZywgeDA7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SUl9aRVJPMTIoIGluc3QsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICBURVNUX0NBU0UoIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGluc3QgZGVzdHJlZywgeDAsIHgwOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfWkVST0RFU1QoIGluc3QsIHJlZzEsIHJlZzIsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICBURVNUX0NBU0UoIHgwLCAwLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSByZWcxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpIHJlZzIsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgaW5zdCB4MCwgcmVnMSwgcmVnMjsgXAorICAgICkKKworLy9UZXN0cyBmb3IgYSBpbnN0cnVjdGlvbnMgd2l0aCByZWdpc3Rlci1pbW1lZGlhdGUgb3BlcmFuZAorI2RlZmluZSBURVNUX0lNTV9PUCggaW5zdCwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIGltbSwgc3dyZWcsIG9mZnNldCkgXAorICAgIFRFU1RfQ0FTRSAoIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGxpIHJlZywgTUFTS19YTEVOKHZhbCk7IFwKKyAgICAgIGluc3QgZGVzdHJlZywgcmVnLCBTRVhUX0lNTShpbW0pOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfSU1NX1NSQyggaW5zdCwgZGVzdHJlZywgY29ycmVjdHZhbCwgdmFsLCBpbW0sIHN3cmVnLCBvZmZzZXQpIFwKKyAgICBURVNUX0NBU0UgKCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSBkZXN0cmVnLCBNQVNLX1hMRU4odmFsKTsgXAorICAgICAgaW5zdCBkZXN0cmVnLCBkZXN0cmVnLCBTRVhUX0lNTShpbW0pOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfSU1NX1pFUk9TUkMoIGluc3QsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIGltbSwgc3dyZWcsIG9mZnNldCkgXAorICAgIFRFU1RfQ0FTRSAoIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGluc3QgZGVzdHJlZywgeDAsIFNFWFRfSU1NKGltbSk7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9JTU1fWkVST0RFU1QoIGluc3QsIHJlZywgdmFsLCBpbW0sIHN3cmVnLCBvZmZzZXQpIFwKKyAgICBURVNUX0NBU0UgKCB4MCwgMCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgbGkgcmVnLCBNQVNLX1hMRU4odmFsKTsgXAorICAgICAgaW5zdCB4MCwgcmVnLCBTRVhUX0lNTShpbW0pOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfSU1NX09ORVJFRyggaW5zdCwgZGVzdHJlZywgY29ycmVjdHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgVEVTVF9DQVNFICggZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgaW5zdCBkZXN0cmVnLCBTRVhUX0lNTShpbW0pOyBcCisgICAgICApCisKKyNkZWZpbmUgVEVTVF9BVUlQQyhpbnN0LCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBpbW0sIHN3cmVnLCBvZmZzZXQpIFwKKyAgICBURVNUX0NBU0UgKCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICAxOiBcCisgICAgICBpbnN0IGRlc3RyZWcsIFNFWFRfSU1NKGltbSk7IFwKKyAgICAgIGxhIHN3cmVnLCAxYjsgXAorICAgICAgc3ViIGRlc3RyZWcsIGRlc3RyZWcsIHN3cmVnOyBcCisgICAgICApCisKKy8vVGVzdHMgZm9yIGEgY29tcHJlc3NlZCBpbnN0cnVjdGlvbgorI2RlZmluZSBURVNUX0NSX09QKCBpbnN0LCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICBURVNUX0NBU0UgKCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSByZWcsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgbGkgZGVzdHJlZywgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIHJlZzsgXAorICAgICAgKQorCisjZGVmaW5lIFRFU1RfQ0lfT1AoIGluc3QsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgVEVTVF9DQVNFKCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSBkZXN0cmVnLCBNQVNLX1hMRU4odmFsKTsgXAorICAgICAgaW5zdCBkZXN0cmVnLCBpbW07IFwKKyAgICAgICkKKworI2RlZmluZSBURVNUX0NJX09QX05PUkVHKGluc3QsIGNvcnJlY3R2YWwsIGltbSwgc3dyZWcsIG9mZnNldCkgXAorICAgIFRFU1RfQ0FTRSAoeDAsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGluc3QgaW1tOyBcCisgICAgICApCisKKy8vVGVzdHMgZm9yIGZsb2F0aW5nIHBvaW50IGluc3RydWN0aW9ucyAtIHNpbmdsZSBwcmVjaXNpb24KKyNkZWZpbmUgVEVTVF9GUF9PUCh0ZXN0X251bSwgaW5zdCwgZGVzdHJlZywgcmVnMSwgcmVnMiwgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgVEVTVF9DQVNFX0ZQKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcxLCByZWcyLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICAgIGluc3QgZGVzdHJlZywgcmVnMSwgcmVnMjsgXAorICAgICAgICApCisKKyNkZWZpbmUgVEVTVF9GUF9PTkVSRUcodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlAodGVzdF9udW0sIGRlc3RyZWcsIHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzsgXAorICAgICAgICApCisKKyNkZWZpbmUgVEVTVF9GUF80UkVHKHRlc3RfbnVtLCBpbnN0LCBkZXN0cmVnLCByZWcxLCByZWcyLCByZWczLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCB2YWwzLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlBfNFJFRyh0ZXN0X251bSwgZGVzdHJlZywgcmVnMSwgcmVnMiwgcmVnMywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgdmFsMywgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzEsIHJlZzIsIHJlZzM7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfRlBfSSh0ZXN0X251bSwgaW5zdCwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIFRFU1RfQ0FTRV9GUF9JKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBsaSByZWcsIE1BU0tfWExFTih2YWwpOyBcCisgICAgICAgIGluc3QgZGVzdHJlZywgcmVnOyBcCisgICAgICAgICkKKworI2RlZmluZSBURVNUX0ZQX0kyKHRlc3RfbnVtLCBpbnN0LCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgVEVTVF9DQVNFX0ZQX0kyKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzsgXAorICAgICAgICApCisKKy8vVGVzdHMgZm9yIGZsb2F0aW5nIHBvaW50IGluc3RydWN0aW9ucyAtIGRvdWJsZSBwcmVjaXNpb24KKyNkZWZpbmUgVEVTVF9GUERfT1AodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZzEsIHJlZzIsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIFRFU1RfQ0FTRV9GUEQodGVzdF9udW0sIGRlc3RyZWcsIHJlZzEsIHJlZzIsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgICAgaW5zdCBkZXN0cmVnLCByZWcxLCByZWcyOyBcCisgICAgICAgICkKKworI2RlZmluZSBURVNUX0ZQRF9PTkVSRUcodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlBEKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgICAgaW5zdCBkZXN0cmVnLCByZWc7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfRlBEXzRSRUcodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZzEsIHJlZzIsIHJlZzMsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHZhbDMsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIFRFU1RfQ0FTRV9GUERfNFJFRyh0ZXN0X251bSwgZGVzdHJlZywgcmVnMSwgcmVnMiwgcmVnMywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgdmFsMywgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzEsIHJlZzIsIHJlZzM7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfRlBEX0kodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlBEX0kodGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICAgIGxpIHJlZywgTUFTS19YTEVOKHZhbCk7IFwKKyAgICAgICAgaW5zdCBkZXN0cmVnLCByZWc7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfRlBEX0kyKHRlc3RfbnVtLCBpbnN0LCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgVEVTVF9DQVNFX0ZQRF9JMih0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgICAgaW5zdCBkZXN0cmVnLCByZWc7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfQ0FEREkxNlNQKGNvcnJlY3R2YWwsIGltbSwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgVEVTVF9DQVNFKHgyLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBjLmFkZGkxNnNwIHgyLCBpbW07IFwKKyAgICAgICkKKworI2RlZmluZSBURVNUX0NBRERJNFNQTihkZXN0cmVnLCBjb3JyZWN0dmFsLCBpbW0sIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIFRFU1RfQ0FTRShkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICAgIGMuYWRkaTRzcG4gZGVzdHJlZywgeDIsIFNFWFRfSU1NKGltbSk7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfQ0pMKGluc3QsIHJlZywgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBsaSB4MTAsIHZhbDsgXAorICAgICAgbGEgcmVnLCAxZjsgXAorICAgICAgaW5zdCByZWc7IFwKKyAgICAgIGxpIHgxMCwgMHgxMjNhYjsgXAorMTogXAorICAgICAgc3cgeDEwLCBvZmZzZXQoc3dyZWcpOyBcCisgICAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIHgxMCwgdmFsKTsgXAorCisjZGVmaW5lIEFCUyh4KSAoKHggPj4gMTEpIF4geCkgLSAoeCA+PiAxMSkKKworI2RlZmluZSBURVNUX0NKKGluc3QsIHJlZywgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBsaSByZWcsIHZhbDsgXAorICAgICAgaW5zdCAxZjsgXAorICAgICAgbGkgcmVnLCAweDEyM2FiOyBcCisxOiBcCisgICAgICBzdyByZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICAgIFJWVEVTVF9JT19BU1NFUlRfR1BSX0VRKHgzMSwgcmVnLCB2YWwpOyBcCisKKyNkZWZpbmUgVEVTVF9DTChpbnN0LCByZWcsIGltbSwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgbGEgcmVnLCB0ZXN0X2RhdGE7IFwKKyAgICAgIGluc3QgcmVnLCBpbW0ocmVnKTsgXAorICAgICAgc3cgcmVnLCBvZmZzZXQoc3dyZWcpOyBcCisKKy8vIGx3IHJlZywgaW1tKHgyKQorLy8gYy5sd3NwIHJlZywgaW1tKHgyKQorI2RlZmluZSBURVNUX0NMV1NQKHJlZywgaW1tLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBsYSB4MiwgdGVzdF9kYXRhOyBcCisgICAgICBjLmx3c3AgcmVnLCBpbW0oeDIpOyBcCisgICAgICBzdyByZWcsIG9mZnNldChzd3JlZyk7IFwKKworI2RlZmluZSBURVNUX0NTVyh0ZXN0X2RhdGEsIGluc3QsIHJlZzEsIHJlZzIsIHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBsaSByZWcxLCB2YWw7IFwKKyAgICAgIGxhIHJlZzIsIHRlc3RfZGF0YTsgXAorICAgICAgaW5zdCByZWcxLCBpbW0ocmVnMik7IFwKKyAgICAgIGx3IHJlZzEsIGltbShyZWcyKTsgXAorICAgICAgc3cgcmVnMSwgb2Zmc2V0KHN3cmVnKTsgXAorICAgICAgUlZURVNUX0lPX0FTU0VSVF9HUFJfRVEoeDMxLCByZWcxLCB2YWwpOyBcCisKKyNkZWZpbmUgVEVTVF9DU1dTUCh0ZXN0X2RhdGEsIHJlZywgdmFsLCBpbW0sIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIGxhIHgyLCB0ZXN0X2RhdGE7IFwKKyAgICAgIGxpIHJlZywgdmFsOyBcCisgICAgICBjLnN3c3AgcmVnLCBpbW0oeDIpOyBcCisgICAgICBsdyByZWcsIGltbSh4Mik7IFwKKyAgICAgIHN3IHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorICAgICAgUlZURVNUX0lPX0FTU0VSVF9HUFJfRVEoeDMxLCByZWcsIHZhbCk7IFwKKworI2RlZmluZSBURVNUX0NCRVFaKHJlZywgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBsaSByZWcsIHZhbDsgXAorICAgICAgYy5zdWIgcmVnLCByZWc7IFwKKyAgICAgIGMuYmVxeiByZWcsIDNmOyBcCisgICAgICBsaSByZWcsIDB4MTIzYWI7IFwKKzM6IFwKKyAgICAgIHN3IHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorICAgICAgUlZURVNUX0lPX0FTU0VSVF9HUFJfRVEoeDMxLCByZWcsIDB4MCk7IFwKKworI2RlZmluZSBURVNUX0NCTkVaKHJlZywgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBsaSByZWcsIHZhbDsgXAorICAgICAgYy5ibmV6IHJlZywgNGY7IFwKKyAgICAgIGxpIHJlZywgMHgwOyBcCis0OiBcCisgICAgICBzdyByZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICAgIFJWVEVTVF9JT19BU1NFUlRfR1BSX0VRKHgzMSwgcmVnLCB2YWwpOyBcCisKKyNkZWZpbmUgVEVTVF9GTVZYUyh0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIFRFU1RfQ0FTRV9GUF9GTVZYUyh0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgICAgZm12LngucyBkZXN0cmVnLCByZWc7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfRk1WU1godGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlBfRk1WU1godGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICAgIGZtdi5zLnggZGVzdHJlZywgcmVnOyBcCisgICAgICAgICkKKworI2RlZmluZSBTV1NJRyhhLGIpCisKKworI2lmIF9fcmlzY3ZfeGxlbiA9PSA2NAorI2RlZmluZSBTQVRQX01PREUgU0FUUDY0X01PREUKKyNlbHNlCisjZGVmaW5lIFNBVFBfTU9ERSBTQVRQMzJfTU9ERQorI2VuZGlmCisKKyNkZWZpbmUgU0FUUDMyX01PREUgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIFNBVFAzMl9BU0lEICAgICAgICAgMHg3RkMwMDAwMAorI2RlZmluZSBTQVRQMzJfUFBOICAgICAgICAgIDB4MDAzRkZGRkYKKyNkZWZpbmUgU0FUUDY0X01PREUgMHhGMDAwMDAwMDAwMDAwMDAwCisjZGVmaW5lIFNBVFA2NF9BU0lEIDB4MEZGRkYwMDAwMDAwMDAwMAorI2RlZmluZSBTQVRQNjRfUFBOICAweDAwMDAwRkZGRkZGRkZGRkYKKworI2RlZmluZSBTQVRQX01PREVfT0ZGICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU0FUUF9NT0RFX1NWMzIgICAgICAgICAgICAgICAxCisjZGVmaW5lIFNBVFBfTU9ERV9TVjM5ICAgICAgICAgICAgICAgOAorI2RlZmluZSBTQVRQX01PREVfU1Y0OCAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgU0FUUF9NT0RFX1NWNTcgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFNBVFBfTU9ERV9TVjY0ICAgICAgICAgICAgICAxMQorCisjZGVmaW5lIFRFU1RfRlBfT1AyX0QzMiggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgVEVTVF9GUF9PUF9EMzJfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkb3VibGUgcmVzdWx0LCB2YWwxLCB2YWwyLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjAsIGYxOyBmc2QgZjMsIDAoYTApOyBsdyB0MiwgNChhMCk7IGx3IGEwLCAwKGEwKSkKKworI2RlZmluZSBURVNUX0NBU0VfRDMyKCB0ZXN0bnVtLCB0ZXN0cmVnMSwgdGVzdHJlZzIsIGNvcnJlY3R2YWwsIGNvZGUuLi4gKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgY29kZTsgXAorICAgIGxhICB4MzEsIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGEgOyBcCisgICAgbHcgIHgyOSwgMCh4MzEpOyBcCisgICAgbHcgIHgzMSwgNCh4MzEpOyBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgICBibmUgdGVzdHJlZzEsIHgyOSwgZmFpbDtcCisgICAgYm5lIHRlc3RyZWcyLCB4MzEsIGZhaWw7XAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIC5iYWxpZ24gODsgXAorICAgIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGE6IFwKKyAgICAuZHdvcmQgY29ycmVjdHZhbDsgXAorICAgIC5wb3BzZWN0aW9uCisKKyNkZWZpbmUgVEVTVF9GUF9PUF9EMzJfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCByZXN1bHQsIHZhbDEsIHZhbDIsIHZhbDMsIGNvZGUuLi4gKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCisgIGxhICBhMCwgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YSA7XAorICBmbGQgZjAsIDAoYTApOyBcCisgIGZsZCBmMSwgOChhMCk7IFwKKyAgZmxkIGYyLCAxNihhMCk7IFwKKyAgbHcgIGEzLCAyNChhMCk7IFwKKyAgbHcgIHQxLCAyOChhMCk7IFwKKyAgY29kZTsgXAorICBmc2ZsYWdzIGExLCB4MDsgXAorICBsaSBhMiwgZmxhZ3M7IFwKKyAgYm5lIGEwLCBhMywgZmFpbDsgXAorICBibmUgdDEsIHQyLCBmYWlsOyBcCisgIGJuZSBhMSwgYTIsIGZhaWw7IFwKKyAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCisgIC5iYWxpZ24gODsgXAorICB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhOiBcCisgIC5kb3VibGUgdmFsMTsgXAorICAuZG91YmxlIHZhbDI7IFwKKyAgLmRvdWJsZSB2YWwzOyBcCisgIC5yZXN1bHQ7IFwKKyAgLnBvcHNlY3Rpb24KKworI2RlZmluZSBURVNUX0ZQX09QMV9EMzIoIHRlc3RudW0sIGluc3QsIGZsYWdzLCByZXN1bHQsIHZhbDEgKSBcCisgIFRFU1RfRlBfT1BfRDMyX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZG91YmxlIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjA7IGZzZCBmMywgMChhMCk7IGx3IHQyLCA0KGEwKTsgbHcgYTAsIDAoYTApKQorCisjZGVmaW5lIFRFU1RfRkNMQVNTX0QzMih0ZXN0bnVtLCBjb3JyZWN0LCBpbnB1dCkgXAorICBURVNUX0NBU0UodGVzdG51bSwgYTAsIGNvcnJlY3QsIFwKKyAgICAgICAgICAgIGxhIGEwLCB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhIDtcCisgICAgICAgICAgICBmbGQgZmEwLCAwKGEwKTsgXAorICAgICAgICAgICAgZmNsYXNzLmQgYTAsIGZhMCkgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIC5iYWxpZ24gODsgXAorICAgIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGE6IFwKKyAgICAuZHdvcmQgaW5wdXQ7IFwKKyAgICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfRlBfQ01QX09QX0QzMiggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgVEVTVF9GUF9PUF9EMzJfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkd29yZCByZXN1bHQsIHZhbDEsIHZhbDIsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGEwLCBmMCwgZjE7IGxpIHQyLCAwKQorCisjZGVmaW5lIFRFU1RfSU5UX0ZQX09QX0QzMiggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICBsYSAgYTAsIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGEgO1wKKyAgbHcgIGEzLCAwKGEwKTsgXAorICBsdyAgYTQsIDQoYTApOyBcCisgIGxpICBhMSwgdmFsMTsgXAorICBpbnN0IGYwLCBhMTsgXAorICBcCisgIGZzZCBmMCwgMChhMCk7IFwKKyAgbHcgYTEsIDQoYTApOyBcCisgIGx3IGEwLCAwKGEwKTsgXAorICBcCisgIGZzZmxhZ3MgeDA7IFwKKyAgYm5lIGEwLCBhMywgZmFpbDsgXAorICBibmUgYTEsIGE0LCBmYWlsOyBcCisgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAuYmFsaWduIDg7IFwKKyAgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YTogXAorICAuZG91YmxlIHJlc3VsdDsgXAorICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfRkNWVF9TX0QzMiggdGVzdG51bSwgcmVzdWx0LCB2YWwxICkgXAorICBURVNUX0ZQX09QX0QzMl9JTlRFUk5BTCggdGVzdG51bSwgMCwgZG91YmxlIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgZmN2dC5zLmQgZjMsIGYwOyBmY3Z0LmQucyBmMywgZjM7IGZzZCBmMywgMChhMCk7IGx3IHQyLCA0KGEwKTsgbHcgYTAsIDAoYTApKQorCisjZGVmaW5lIFRFU1RfRlBfT1AzX0QzMiggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiwgdmFsMyApIFwKKyAgVEVTVF9GUF9PUF9EMzJfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkb3VibGUgcmVzdWx0LCB2YWwxLCB2YWwyLCB2YWwzLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgZjMsIGYwLCBmMSwgZjI7IGZzZCBmMywgMChhMCk7IGx3IHQyLCA0KGEwKTsgbHcgYTAsIDAoYTApKQorCisjZGVmaW5lIFRFU1RfRlBfT1AxX0QzMl9EV09SRF9SRVNVTFQoIHRlc3RudW0sIGluc3QsIGZsYWdzLCByZXN1bHQsIHZhbDEgKSBcCisgIFRFU1RfRlBfT1BfRDMyX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZHdvcmQgcmVzdWx0LCB2YWwxLCAwLjAsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMDsgZnNkIGYzLCAwKGEwKTsgbHcgdDIsIDQoYTApOyBsdyBhMCwgMChhMCkpCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvcmlzY3ZfaXNhL01ha2VmaWxlIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2lzYS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTcyMTcyCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2lzYS9NYWtlZmlsZQpAQCAtMCwwICsxLDk2IEBACisKK2luY2x1ZGUgcnYzMl90ZXN0cy5pbmMKKworQVJDSF90bXAgOj0gaW1mCisKK2lmbmVxICgsJChmaW5kc3RyaW5nIGMsJChBUkNIX2xvd2VyY2FzZSkpKQorCUFSQ0hfdG1wIDo9ICQoQVJDSF90bXApYworZW5kaWYKKworb3ZlcnJpZGUgQVJDSCA6PSAkKEFSQ0hfdG1wKQorCitzcmNfZGlyIDo9ICQoQ1VSRElSKQorb2JqX2RpciAgIDo9ICQoYmxkX2RpcikvcmlzY3Zfb2JqcwordGVzdF9saXN0IDo9ICQocGF0c3Vic3QgJS5TLCAlLCAkKG5vdGRpciAkKHJ2MzJfaXNhX3Rlc3RzKSkpCitvYmpzICAgICAgOj0gJChhZGRwcmVmaXggJChvYmpfZGlyKS8sJCh0ZXN0X2xpc3Q6JT0lLm8pKQordGVzdF9lbGYgIDo9ICQoYWRkcHJlZml4ICQoYmxkX2RpcikvLCQodGVzdF9saXN0OiU9JS5lbGYpKQordGVzdF9oZXggIDo9ICQoYWRkcHJlZml4ICQoYmxkX2RpcikvLCQodGVzdF9saXN0OiU9JS5oZXgpKQordGVzdF9kdW1wIDo9ICQoYWRkcHJlZml4ICQoYmxkX2RpcikvLCQodGVzdF9saXN0OiU9JS5kdW1wKSkKKworQ0ZMQUdTIDo9IC1JJChpbmNfZGlyKSAtSSQoc3JjX2RpcikgLURBU00gLVdhLC1tYXJjaD1ydjMyJChBUkNIKSAtbWFyY2g9cnYzMiQoQVJDSCkgLW1hYmk9aWxwMzJmIC1EX19yaXNjdl94bGVuPTMyCitMREZMQUdTIDo9IC1zdGF0aWMgLWZ2aXNpYmlsaXR5PWhpZGRlbiAtbm9zdGRsaWIgLW5vc3RhcnRmaWxlcyAtVCQoaW5jX2RpcikvbGluay5sZCAtbWFyY2g9cnYzMiQoQVJDSCkgLW1hYmk9aWxwMzJmCitSSVNDVl9URVNUUyA6PSAkKHNyY19kaXIpLy4uLy4uL2RlcGVuZGVuY2llcy9yaXNjdi10ZXN0cy8KKworVlBBVEggKz0gJChzcmNfZGlyKSAkKGJsZF9kaXIpICQob2JqX2RpcikgJChSSVNDVl9URVNUUykKKworZGVmYXVsdDogbG9nX3JlcXVlc3RlZF90Z3QgY2hlY2tfcmlzY3ZfdGVzdHMgJCh0ZXN0X2VsZikgJCh0ZXN0X2hleCkgJCh0ZXN0X2R1bXApCisKK2RlZmluZSBjb21waWxlX3RlbXBsYXRlCiskKG9ial9kaXIpLyQkKGJhc2VuYW1lICQobm90ZGlyICQoU1JDKSkpLm86ICQkKFNSQykgfCAkKG9ial9kaXIpCisJJChSSVNDVl9HQ0MpIC1jICQkPCAkKENGTEFHUykgLW8gJCRACisgZW5kZWYKKworJChmb3JlYWNoIFNSQywkKHJ2MzJfaXNhX3Rlc3RzKSwgJChldmFsICQoY29tcGlsZV90ZW1wbGF0ZSkpKQorCitsb2dfcmVxdWVzdGVkX3RndDoKKwkkKGZvcmVhY2ggdGVzdF9uYW1lLCAkKHRlc3RfbGlzdCksICQoZXZhbCAkKHNoZWxsIGVjaG8gJCh0ZXN0X25hbWUpLmhleCA+PiAkKGJsZF9kaXIpL3Rlc3RfaW5mbykpKQorCiskKG9ial9kaXIpIDoKKwlta2RpciAtcCAkKG9ial9kaXIpCisKKyQoYmxkX2RpcikvJS5lbGY6ICQob2JqX2RpcikvJS5vIHwgJChvYmpfZGlyKQorCSQoUklTQ1ZfR0NDKSAkXiAkKExERkxBR1MpIC1vICRACisKKyQoYmxkX2RpcikvJS5oZXg6ICQoYmxkX2RpcikvJS5lbGYKKwkkKFJJU0NWX1JPTV9PQkpDT1BZKSAkXiAkQAorCSQoUklTQ1ZfUkFNX09CSkNPUFkpICReICRALnJhbQorCSNhc3NpZ24gMHgwMDQ4XzB4eHggIHRvIDB4MDAwMF8weHh4IHRvIG1hcCB0byBUQ00gTWVtb3J5CisJc2VkIC1pICdzL0AwMDQ4MC9AMDAwMDAvZycgJEAucmFtCisKKyQoYmxkX2RpcikvJS5kdW1wOiAkKGJsZF9kaXIpLyUuZWxmCisJJChSSVNDVl9PQkpEVU1QKSAkXiA+ICRACisKK2NsZWFuOgorCSQoUk0pICQodGVzdF9lbGYpICQodGVzdF9oZXgpICQodGVzdF9kdW1wKSAkKG9ianMpCisJJChSTSkgLVIgJChvYmpfZGlyKQorCisKKy5QSE9OWTogY2hlY2tfcmlzY3ZfdGVzdHMKKworcmlzY3ZfdGVzdHNfZGlyICAgIDo9ICQoaWYgJChSSVNDVl9URVNUUyksICQoUklTQ1ZfVEVTVFMpLCAuL3VuZGVmaW5lZCkKK3Jpc2N2X3Rlc3RzX2NvbW1pdCA6PSA1ZjhhNDkxOGM2NDgyZTY1YzY3YTJiN2RlY2Q1YzJhZjNlM2ZlMGU1CisjIyBjb21taXQgaGFzaCByZWFkZWQgZnJvbSBsb2NhbCBjb3B5IG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9yaXNjdi9yaXNjdi10ZXN0cwordG1wX2NvbW1pdCA9ICQoc2hlbGwgY2QgJChyaXNjdl90ZXN0c19kaXIpIDI+L2Rldi9udWxsICYmIGdpdCBsb2cgLTEgfCBncmVwICJjb21taXQiIHwgY3V0IC1mMiAtZCAnICcpCitpc19jb21taXRfZ29vZCA9ICQoaWYgJChzdWJzdCAkKHJpc2N2X3Rlc3RzX2NvbW1pdCksLCQodG1wX2NvbW1pdCkpLGZhbHNlLHRydWUpCisKKyMgQ29sb3IKK1JFRD1cMDMzWzA7MzFtCitOQz1cMDMzWzBtCisKK2NoZWNrX3Jpc2N2X3Rlc3RzIDogJChyaXNjdl90ZXN0c19kaXIpCisJQGlmIFsgISAtZCAkKHJpc2N2X3Rlc3RzX2RpcikgXTsgdGhlbiBcCisJCWVjaG8gLWUgIiQoUkVEKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IiAmJlwKKwkJZWNobyAiICAgRXJyb3IhIEVudmlyb25tZW50IHZhcmlhYmxlIFJJU0NWX1RFU1RTPSckKHJpc2N2X3Rlc3RzX2RpciknICIgJiZcCisJCWVjaG8gIiAgICAgIGRpcmVjdG9yeSBub3QgZXhpc3QhIiAmJiBcCisJCWVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JChOQykiIDsgXAorCWZpCitpZm5lcSAoJChpc19jb21taXRfZ29vZCksdHJ1ZSkKKwlAZWNobyAtZSAiJChSRUQpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCisJQGVjaG8gIiAgIFdhcm5pbmchIEV4ZWN1dGlvbiBvZiB0ZXN0IGNvZGUgaXMgbm90IGd1YXJhbnRlZWQgIgorCUBlY2hvICIgICB3aGlsZSB1c2luZyB0aGUgY3VycmVudCBjb21taXQgb2YgcmVwb3NpdG9yeWxvY2F0ZWQgYXQgOiAkKHJpc2N2X3Rlc3RzX2RpcikgLiIKKwlAZWNobyAiICAgIgorCUBlY2hvICIgICBSaXNjdi10ZXN0cyByZXBvc2l0b3J5IG11c3QgcG9pbnQgdG8gY29tbWl0ICQocmlzY3ZfdGVzdHNfY29tbWl0KSEiCisJQGVjaG8gLWUgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JChOQykiCitlbmRpZgorCiskKHJpc2N2X3Rlc3RzX2RpcikgOi4KK2lmbmRlZiBSSVNDVl9URVNUUworCUBlY2hvIC1lICIkKFJFRCk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKKwlAZWNobyAiICAgIEVycm9yISBFbnZpcm9ubWVudCB2YXJpYWJsZSBSSVNDVl9URVNUUyBub3Qgc2V0ISIKKwlAZWNobyAiICAgIFlvdSBtdXN0IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUklTQ1ZfVEVTVFMiCisJQGVjaG8gIiAgICBUaGUgdmFyaWFibGUgc2hvdWxkIHBvaW50IHRvIHRoZSBsb2NhbCBjb3B5IG9mIHRoZSIKKwlAZWNobyAiICAgICAgcmVwb3NpdG9yeSBodHRwczovL2dpdGh1Yi5jb20vcmlzY3YvcmlzY3YtdGVzdHMiCisJQGVjaG8gIiAgICAgIHdpdGggdGhlIGNvbW1pdCAkKHJpc2N2X3Rlc3RzX2NvbW1pdCkiCisJQGVjaG8gLWUgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JChOQykiCisJZXhpdCAxCitlbmRpZgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2lzYS9yaXNjdl90ZXN0LmggYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvcmlzY3ZfaXNhL3Jpc2N2X3Rlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjljZTBkCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2lzYS9yaXNjdl90ZXN0LmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fUklTQ1ZfX1RFU1RfX0gKKyNkZWZpbmUgX19SSVNDVl9fVEVTVF9fSAorCisjaW5jbHVkZSAicmlzY3ZfbWFjcm9zLmgiIAorCisjZW5kaWYgLy8gI2lmbmRlZiBfX1JJU0NWX19URVNUX19ICmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvcmlzY3ZfaXNhL3J2MzJfdGVzdHMuaW5jIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2lzYS9ydjMyX3Rlc3RzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmU1MDEyCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2lzYS9ydjMyX3Rlc3RzLmluYwpAQCAtMCwwICsxLDY2IEBACisKK0FSQ0hfbG93ZXJjYXNlID0gJChzaGVsbCBlY2hvICQoQVJDSCkgfCB0ciBBLVogYS16KQorCisKK3J2MzJfaXNhX3Rlc3RzICs9IGlzYS9ydjMydWkvYWRkLlMgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvYWRkaS5TICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL2FuZC5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9hbmRpLlMgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvYXVpcGMuUyAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL2JlcS5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9iZ2UuUyAgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvYmdldS5TICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL2JsdC5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9ibHR1LlMgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvYm5lLlMgICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMm1pL2Nzci5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9mZW5jZV9pLlMgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMybWkvaWxsZWdhbC5TICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL2phbC5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9qYWxyLlMgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvbGIuUyAgICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL2xidS5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9saC5TICAgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvbGh1LlMgICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL2x1aS5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9sdy5TICAgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMybWkvbWFfYWRkci5TICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMm1pL21hX2ZldGNoLlMgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJtaS9tY3NyLlMgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvb3IuUyAgICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL29yaS5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9zYi5TICAgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMybWkvc2JyZWFrLlMgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMm1pL3NjYWxsLlMgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9zaC5TICAgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMybWkvc2hhbXQuUyAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL3NpbXBsZS5TICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9zbGwuUyAgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvc2xsaS5TICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL3NsdC5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9zbHRpLlMgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvc2x0aXUuUyAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL3NsdHUuUyAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9zcmEuUyAgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvc3JhaS5TICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL3NybC5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9zcmxpLlMgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvc3ViLlMgICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL3N3LlMgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS94b3IuUyAgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkveG9yaS5TCisKK2lmbmVxICgsJChmaW5kc3RyaW5nIG0sJChBUkNIX2xvd2VyY2FzZSkpKQorcnYzMl9pc2FfdGVzdHMgKz0gaXNhL3J2MzJ1bS9kaXYuUyAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1bS9kaXZ1LlMgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydW0vbXVsLlMgICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVtL211bGguUyAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1bS9tdWxoc3UuUyAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydW0vbXVsaHUuUyAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVtL3JlbS5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1bS9yZW11LlMKK2VuZGlmICMjIGlmZXEgKG0sJChmaW5kc3RyaW5nIG0sJChBUkNIX2xvd2VyY2FzZSkpKQorCitpZm5lcSAoLCQoZmluZHN0cmluZyBjLCQoQVJDSF9sb3dlcmNhc2UpKSkKK3J2MzJfaXNhX3Rlc3RzICs9IGlzYS9ydjMydWMvcnZjLlMKK2VuZGlmICMjIGlmZXEgKG0sJChmaW5kc3RyaW5nIGMsJChBUkNIX2xvd2VyY2FzZSkpKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9pc2EvdGVzdF9tYWNyb3MuaCBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9pc2EvdGVzdF9tYWNyb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDM5MThkCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2lzYS90ZXN0X21hY3Jvcy5oCkBAIC0wLDAgKzEsNSBAQAorI2lmbmRlZiBfX1RFU1RfX01BQ1JPU19fSAorI2RlZmluZSBfX1RFU1RfX01BQ1JPU19fSAorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91YXJ0X21hc3Rlci9NYWtlZmlsZSBiL3Zlcmlsb2cvZHYvdWFydF9tYXN0ZXIvTWFrZWZpbGUKaW5kZXggZmRhYTQ3ZC4uYTIwNzYwOCAxMDA2NDQKLS0tIGEvdmVyaWxvZy9kdi91YXJ0X21hc3Rlci9NYWtlZmlsZQorKysgYi92ZXJpbG9nL2R2L3VhcnRfbWFzdGVyL01ha2VmaWxlCkBAIC0zMSw3ICszMSw3IEBACiBVUFJKX0dMX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9nbAogVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMgPSAuLi9tb2RlbAogVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMgPSAuLi9hZ2VudHMKLVVQUkpfSU5DTFVERV9QQVRIMSA9ICQoVVBSSl9SVExfUEFUSCkvc3ludGFjb3JlL3NjcjEvc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDEgPSAkKFVQUkpfUlRMX1BBVEgpL3lpZml2ZS95Y3IxL3NyYy9pbmNsdWRlcwogVVBSSl9JTkNMVURFX1BBVEgyID0gJChVUFJKX1JUTF9QQVRIKS9zZHJhbV9jdHJsL3NyYy9kZWZzCiBVUFJKX0lOQ0xVREVfUEFUSDMgPSAkKFVQUkpfUlRMX1BBVEgpL2kyY20vc3JjL2luY2x1ZGVzCiBVUFJKX0lOQ0xVREVfUEFUSDQgPSAkKFVQUkpfUlRMX1BBVEgpL3VzYjFfaG9zdC9zcmMvaW5jbHVkZXMKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl9iYXNpYy9NYWtlZmlsZSBiL3Zlcmlsb2cvZHYvdXNlcl9iYXNpYy9NYWtlZmlsZQppbmRleCAyYzliNDMyLi4yYzBiMDFmIDEwMDY0NAotLS0gYS92ZXJpbG9nL2R2L3VzZXJfYmFzaWMvTWFrZWZpbGUKKysrIGIvdmVyaWxvZy9kdi91c2VyX2Jhc2ljL01ha2VmaWxlCkBAIC0yOSwxNCArMjksMTQgQEAKIFVQUkpfR0xfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL2dsCiBVUFJKX0JFSEFWSU9VUkFMX01PREVMUyA9IC4uL21vZGVsCiBVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUyA9IC4uL2FnZW50cwotVVBSSl9JTkNMVURFX1BBVEgxID0gJChVUFJKX1JUTF9QQVRIKS9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRIMSA9ICQoVVBSSl9SVExfUEFUSCkveWlmaXZlL3ljcjEvc3JjL2luY2x1ZGVzCiBVUFJKX0lOQ0xVREVfUEFUSDIgPSAkKFVQUkpfUlRMX1BBVEgpL3NkcmFtX2N0cmwvc3JjL2RlZnMKIFVQUkpfSU5DTFVERV9QQVRIMyA9ICQoVVBSSl9SVExfUEFUSCkvaTJjbS9zcmMvaW5jbHVkZXMKIFVQUkpfSU5DTFVERV9QQVRINCA9ICQoVVBSSl9SVExfUEFUSCkvdXNiMV9ob3N0L3NyYy9pbmNsdWRlcwogVVBSSl9JTkNMVURFX1BBVEg1ID0gJChVUFJKX1JUTF9QQVRIKS9tYmlzdC9pbmNsdWRlCiAKLSMjIFNZTlRBQ09SRSBGSVJNV0FSRQotU1lOVEFDT1JFX0ZJUk1XQVJFX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbgorIyMgWUlGSVZFIEZJUk1XQVJFCitZSUZJVkVfRklSTVdBUkVfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL2R2L2Zpcm13YXJlCiBHQ0M2NF9QUkVGSVg/PXJpc2N2NjQtdW5rbm93bi1lbGYKIAogIyMgUklTQ1YgR0NDIApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX2Jhc2ljL3VzZXJfYmFzaWNfdGIudiBiL3Zlcmlsb2cvZHYvdXNlcl9iYXNpYy91c2VyX2Jhc2ljX3RiLnYKaW5kZXggODY1ZTRmOS4uOTE4MTQ5ZiAxMDA2NDQKLS0tIGEvdmVyaWxvZy9kdi91c2VyX2Jhc2ljL3VzZXJfYmFzaWNfdGIudgorKysgYi92ZXJpbG9nL2R2L3VzZXJfYmFzaWMvdXNlcl9iYXNpY190Yi52CkBAIC0yNDIsOCArMjQyLDggQEAKICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCwnaDEpOwogCiAJIHdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gzMDAyMDA1OCxyZWFkX2RhdGEsMzInaDgyNzNfODM0Myk7Ci0JIHdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gzMDAyMDA1QyxyZWFkX2RhdGEsMzInaDA2MDFfMjAyMik7Ci0JIHdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gzMDAyMDA2MCxyZWFkX2RhdGEsMzInaDAwMDJfNTAwMCk7CisJIHdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gzMDAyMDA1QyxyZWFkX2RhdGEsMzInaDE0MDFfMjAyMik7CisJIHdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gzMDAyMDA2MCxyZWFkX2RhdGEsMzInaDAwMDNfMDAwMCk7CiAKICAgICAgIGVuZAogICAgCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfaTJjbS9NYWtlZmlsZSBiL3Zlcmlsb2cvZHYvdXNlcl9pMmNtL01ha2VmaWxlCmluZGV4IDg1NGU4Y2YuLjYwNWM2MjMgMTAwNjQ0Ci0tLSBhL3Zlcmlsb2cvZHYvdXNlcl9pMmNtL01ha2VmaWxlCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl9pMmNtL01ha2VmaWxlCkBAIC0yOSwxNCArMjksMTQgQEAKIFVQUkpfR0xfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL2dsCiBVUFJKX0JFSEFWSU9VUkFMX01PREVMUyA9IC4uL21vZGVsCiBVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUyA9IC4uL2FnZW50cwotVVBSSl9JTkNMVURFX1BBVEgxID0gJChVUFJKX1JUTF9QQVRIKS9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRIMSA9ICQoVVBSSl9SVExfUEFUSCkveWlmaXZlL3ljcjEvc3JjL2luY2x1ZGVzCiBVUFJKX0lOQ0xVREVfUEFUSDIgPSAkKFVQUkpfUlRMX1BBVEgpL3NkcmFtX2N0cmwvc3JjL2RlZnMKIFVQUkpfSU5DTFVERV9QQVRIMyA9ICQoVVBSSl9SVExfUEFUSCkvaTJjbS9zcmMvaW5jbHVkZXMKIFVQUkpfSU5DTFVERV9QQVRINCA9ICQoVVBSSl9SVExfUEFUSCkvdXNiMV9ob3N0L3NyYy9pbmNsdWRlcwogVVBSSl9JTkNMVURFX1BBVEg1ID0gJChVUFJKX1JUTF9QQVRIKS9tYmlzdC9pbmNsdWRlCiAKLSMjIFNZTlRBQ09SRSBGSVJNV0FSRQotU1lOVEFDT1JFX0ZJUk1XQVJFX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbgorIyMgWUlGSVZFIEZJUk1XQVJFCitZSUZJVkVfRklSTVdBUkVfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL2R2L2Zpcm13YXJlCiBHQ0M2NF9QUkVGSVg/PXJpc2N2NjQtdW5rbm93bi1lbGYKIAogIyMgUklTQ1YgR0NDIApAQCAtNTksOSArNTksOSBAQAogdnZwOiAgJHtQQVRURVJOOj0udnZwfQogCiAlLnZ2cDogJV90Yi52Ci0JJHtHQ0M2NF9QUkVGSVh9LWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0xIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLWMgLUkuLyAtSS4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uICB1c2VyX3VhcnQuYyAtbyB1c2VyX3VhcnQubwotCSR7R0NDNjRfUFJFRklYfS1nY2MgLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAgLURfX1JWQ19FWFQgLXN0YXRpYyAtc3RkPWdudTk5IC1mbm8tY29tbW9uIC1mbm8tYnVpbHRpbi1wcmludGYgLURUQ009MSAtV2EsLW1hcmNoPXJ2MzJpbWMgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLURGTEFHU19TVFI9XCIiLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAiXCIgIC1EX19BU1NFTUJMWV9fPTEgLWMgLUkuLyAtSS4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uLyAgLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vY3J0X3RjbS5TIC1vIGNydF90Y20ubwotCSR7R0NDNjRfUFJFRklYfS1nY2MgLW8gdXNlcl91YXJ0LmVsZiAtVCAuLi8uLi9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbi9saW5rX3RjbS5sZCB1c2VyX3VhcnQubyBjcnRfdGNtLm8gLW5vc3RhcnRmaWxlcyAtbm9zdGRsaWIgLWxjIC1sZ2NjIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyCisJJHtHQ0M2NF9QUkVGSVh9LWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0xIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLWMgLUkuLyAtSSQoWUlGSVZFX0ZJUk1XQVJFX1BBVEgpICB1c2VyX3VhcnQuYyAtbyB1c2VyX3VhcnQubworCSR7R0NDNjRfUFJFRklYfS1nY2MgLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAgLURfX1JWQ19FWFQgLXN0YXRpYyAtc3RkPWdudTk5IC1mbm8tY29tbW9uIC1mbm8tYnVpbHRpbi1wcmludGYgLURUQ009MSAtV2EsLW1hcmNoPXJ2MzJpbWMgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLURGTEFHU19TVFI9XCIiLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAiXCIgIC1EX19BU1NFTUJMWV9fPTEgLWMgLUkuLyAtSSQoWUlGSVZFX0ZJUk1XQVJFX1BBVEgpICAkKFlJRklWRV9GSVJNV0FSRV9QQVRIKS9jcnRfdGNtLlMgLW8gY3J0X3RjbS5vCisJJHtHQ0M2NF9QUkVGSVh9LWdjYyAtbyB1c2VyX3VhcnQuZWxmIC1UICQoWUlGSVZFX0ZJUk1XQVJFX1BBVEgpL2xpbmtfdGNtLmxkIHVzZXJfdWFydC5vIGNydF90Y20ubyAtbm9zdGFydGZpbGVzIC1ub3N0ZGxpYiAtbGMgLWxnY2MgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIKIAkke0dDQzY0X1BSRUZJWH0tb2JqY29weSAtTyB2ZXJpbG9nIHVzZXJfdWFydC5lbGYgdXNlcl91YXJ0LmhleAogCSR7R0NDNjRfUFJFRklYfS1vYmpkdW1wIC1EIHVzZXJfdWFydC5lbGYgPiB1c2VyX3VhcnQuZHVtcAogCXJtIGNydF90Y20ubyB1c2VyX3VhcnQubwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX21iaXN0X3Rlc3QxL01ha2VmaWxlIGIvdmVyaWxvZy9kdi91c2VyX21iaXN0X3Rlc3QxL01ha2VmaWxlCmluZGV4IGQ2ZDM0YzYuLjMyNjNiMzMgMTAwNjQ0Ci0tLSBhL3Zlcmlsb2cvZHYvdXNlcl9tYmlzdF90ZXN0MS9NYWtlZmlsZQorKysgYi92ZXJpbG9nL2R2L3VzZXJfbWJpc3RfdGVzdDEvTWFrZWZpbGUKQEAgLTI5LDE0ICsyOSwxNCBAQAogVVBSSl9HTF9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvZ2wKIFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTID0gLi4vbW9kZWwKIFVQUkpfQkVIQVZJT1VSQUxfQUdFTlRTID0gLi4vYWdlbnRzCi1VUFJKX0lOQ0xVREVfUEFUSDEgPSAkKFVQUkpfUlRMX1BBVEgpL3N5bnRhY29yZS9zY3IxL3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEgxID0gJChVUFJKX1JUTF9QQVRIKS95aWZpdmUveWNyMS9zcmMvaW5jbHVkZXMKIFVQUkpfSU5DTFVERV9QQVRIMiA9ICQoVVBSSl9SVExfUEFUSCkvc2RyYW1fY3RybC9zcmMvZGVmcwogVVBSSl9JTkNMVURFX1BBVEgzID0gJChVUFJKX1JUTF9QQVRIKS9pMmNtL3NyYy9pbmNsdWRlcwogVVBSSl9JTkNMVURFX1BBVEg0ID0gJChVUFJKX1JUTF9QQVRIKS91c2IxX2hvc3Qvc3JjL2luY2x1ZGVzCiBVUFJKX0lOQ0xVREVfUEFUSDUgPSAkKFVQUkpfUlRMX1BBVEgpL21iaXN0L2luY2x1ZGUKIAotIyMgU1lOVEFDT1JFIEZJUk1XQVJFCi1TWU5UQUNPUkVfRklSTVdBUkVfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uCisjIyBZSUZJVkUgRklSTVdBUkUKK1lJRklWRV9GSVJNV0FSRV9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvZHYvZmlybXdhcmUKIEdDQzY0X1BSRUZJWD89cmlzY3Y2NC11bmtub3duLWVsZgogCiAjIyBSSVNDViBHQ0MgCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfcmlzY19ib290L01ha2VmaWxlIGIvdmVyaWxvZy9kdi91c2VyX3Jpc2NfYm9vdC9NYWtlZmlsZQppbmRleCBkODQ0MDFkLi4yNjEwNGE4IDEwMDY0NAotLS0gYS92ZXJpbG9nL2R2L3VzZXJfcmlzY19ib290L01ha2VmaWxlCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl9yaXNjX2Jvb3QvTWFrZWZpbGUKQEAgLTI5LDE5ICsyOSwxOSBAQAogVVBSSl9HTF9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvZ2wKIFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTID0gLi4vbW9kZWwKIFVQUkpfQkVIQVZJT1VSQUxfQUdFTlRTID0gLi4vYWdlbnRzCi1VUFJKX0lOQ0xVREVfUEFUSDEgPSAkKFVQUkpfUlRMX1BBVEgpL3N5bnRhY29yZS9zY3IxL3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEgxID0gJChVUFJKX1JUTF9QQVRIKS95aWZpdmUveWNyMS9zcmMvaW5jbHVkZXMKIFVQUkpfSU5DTFVERV9QQVRIMiA9ICQoVVBSSl9SVExfUEFUSCkvc2RyYW1fY3RybC9zcmMvZGVmcwogVVBSSl9JTkNMVURFX1BBVEgzID0gJChVUFJKX1JUTF9QQVRIKS9pMmNtL3NyYy9pbmNsdWRlcwogVVBSSl9JTkNMVURFX1BBVEg0ID0gJChVUFJKX1JUTF9QQVRIKS91c2IxX2hvc3Qvc3JjL2luY2x1ZGVzCiBVUFJKX0lOQ0xVREVfUEFUSDUgPSAkKFVQUkpfUlRMX1BBVEgpL21iaXN0L2luY2x1ZGUKIAotIyMgU1lOVEFDT1JFIEZJUk1XQVJFCi1TWU5UQUNPUkVfRklSTVdBUkVfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uCisjIyBZSUZJVkUgRklSTVdBUkUKK1lJRklWRV9GSVJNV0FSRV9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvZHYvZmlybXdhcmUKIEdDQzY0X1BSRUZJWD89cmlzY3Y2NC11bmtub3duLWVsZgogCiAjIyBSSVNDViBHQ0MgCiBHQ0NfUEFUSD89L2VmL2FwcHMvYmluCi1HQ0MzMl9QUkVGSVg/PXJpc2N2MzItdW5rbm93bi1lbGYKK0dDQ19QUkVGSVg/PXJpc2N2MzItdW5rbm93bi1lbGYKIFBES19QQVRIPz0vZWYvdGVjaC9TVy9za3kxMzBBCiAKICMjIFNpbXVsYXRpb24gbW9kZTogUlRML0dMCkBAIC01OSw5ICs1OSw5IEBACiB2dnA6ICAke1BBVFRFUk46PS52dnB9CiAKICUudnZwOiAlX3RiLnYKLQkke0dDQzY0X1BSRUZJWH0tZ2NjIC1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIC1EX19SVkNfRVhUIC1zdGF0aWMgLXN0ZD1nbnU5OSAtZm5vLWNvbW1vbiAtZm5vLWJ1aWx0aW4tcHJpbnRmIC1EVENNPTEgLVdhLC1tYXJjaD1ydjMyaW1jIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1ERkxBR1NfU1RSPVwiIi1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIlwiICAtYyAtSS4vIC1JLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24gIHVzZXJfcmlzY19ib290LmMgLW8gdXNlcl9yaXNjX2Jvb3QubwotCSR7R0NDNjRfUFJFRklYfS1nY2MgLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAgLURfX1JWQ19FWFQgLXN0YXRpYyAtc3RkPWdudTk5IC1mbm8tY29tbW9uIC1mbm8tYnVpbHRpbi1wcmludGYgLURUQ009MSAtV2EsLW1hcmNoPXJ2MzJpbWMgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLURGTEFHU19TVFI9XCIiLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAiXCIgIC1EX19BU1NFTUJMWV9fPTEgLWMgLUkuLyAtSS4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uLyAgLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vY3J0X3RjbS5TIC1vIGNydF90Y20ubwotCSR7R0NDNjRfUFJFRklYfS1nY2MgLW8gdXNlcl9yaXNjX2Jvb3QuZWxmIC1UICQoU1lOVEFDT1JFX0ZJUk1XQVJFX1BBVEgpL2xpbmtfdGNtLmxkIHVzZXJfcmlzY19ib290Lm8gY3J0X3RjbS5vIC1ub3N0YXJ0ZmlsZXMgLW5vc3RkbGliIC1sYyAtbGdjYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtTgorCSR7R0NDNjRfUFJFRklYfS1nY2MgLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAgLURfX1JWQ19FWFQgLXN0YXRpYyAtc3RkPWdudTk5IC1mbm8tY29tbW9uIC1mbm8tYnVpbHRpbi1wcmludGYgLURUQ009MSAtV2EsLW1hcmNoPXJ2MzJpbWMgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLURGTEFHU19TVFI9XCIiLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAiXCIgIC1jIC1JLi8gLUkkKFlJRklWRV9GSVJNV0FSRV9QQVRIKSAgdXNlcl9yaXNjX2Jvb3QuYyAtbyB1c2VyX3Jpc2NfYm9vdC5vCisJJHtHQ0M2NF9QUkVGSVh9LWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0xIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLURfX0FTU0VNQkxZX189MSAtYyAtSS4vIC1JJChZSUZJVkVfRklSTVdBUkVfUEFUSCkgICQoWUlGSVZFX0ZJUk1XQVJFX1BBVEgpL2NydF90Y20uUyAtbyBjcnRfdGNtLm8KKwkke0dDQzY0X1BSRUZJWH0tZ2NjIC1vIHVzZXJfcmlzY19ib290LmVsZiAtVCAkKFlJRklWRV9GSVJNV0FSRV9QQVRIKS9saW5rX3RjbS5sZCB1c2VyX3Jpc2NfYm9vdC5vIGNydF90Y20ubyAtbm9zdGFydGZpbGVzIC1ub3N0ZGxpYiAtbGMgLWxnY2MgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLU4KIAkke0dDQzY0X1BSRUZJWH0tb2JqY29weSAtTyB2ZXJpbG9nIHVzZXJfcmlzY19ib290LmVsZiB1c2VyX3Jpc2NfYm9vdC5oZXgKIAkke0dDQzY0X1BSRUZJWH0tb2JqZHVtcCAtRCB1c2VyX3Jpc2NfYm9vdC5lbGYgPiB1c2VyX3Jpc2NfYm9vdC5kdW1wCiAJcm0gY3J0X3RjbS5vIHVzZXJfcmlzY19ib290Lm8KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl9yaXNjX3NvZnRfYm9vdC9NYWtlZmlsZSBiL3Zlcmlsb2cvZHYvdXNlcl9yaXNjX3NvZnRfYm9vdC9NYWtlZmlsZQppbmRleCAzODFiMzRhLi4zOTk4NjY2IDEwMDY0NAotLS0gYS92ZXJpbG9nL2R2L3VzZXJfcmlzY19zb2Z0X2Jvb3QvTWFrZWZpbGUKKysrIGIvdmVyaWxvZy9kdi91c2VyX3Jpc2Nfc29mdF9ib290L01ha2VmaWxlCkBAIC0yOSwxNCArMjksMTQgQEAKIFVQUkpfR0xfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL2dsCiBVUFJKX0JFSEFWSU9VUkFMX01PREVMUyA9IC4uL21vZGVsCiBVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUyA9IC4uL2FnZW50cwotVVBSSl9JTkNMVURFX1BBVEgxID0gJChVUFJKX1JUTF9QQVRIKS9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRIMSA9ICQoVVBSSl9SVExfUEFUSCkveWlmaXZlL3ljcjEvc3JjL2luY2x1ZGVzCiBVUFJKX0lOQ0xVREVfUEFUSDIgPSAkKFVQUkpfUlRMX1BBVEgpL3NkcmFtX2N0cmwvc3JjL2RlZnMKIFVQUkpfSU5DTFVERV9QQVRIMyA9ICQoVVBSSl9SVExfUEFUSCkvaTJjbS9zcmMvaW5jbHVkZXMKIFVQUkpfSU5DTFVERV9QQVRINCA9ICQoVVBSSl9SVExfUEFUSCkvdXNiMV9ob3N0L3NyYy9pbmNsdWRlcwogVVBSSl9JTkNMVURFX1BBVEg1ID0gJChVUFJKX1JUTF9QQVRIKS9tYmlzdC9pbmNsdWRlCiAKLSMjIFNZTlRBQ09SRSBGSVJNV0FSRQotU1lOVEFDT1JFX0ZJUk1XQVJFX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbgorIyMgWUlGSVZFIEZJUk1XQVJFCitZSUZJVkVfRklSTVdBUkVfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL2R2L2Zpcm13YXJlCiBHQ0M2NF9QUkVGSVg/PXJpc2N2NjQtdW5rbm93bi1lbGYKIAogIyMgUklTQ1YgR0NDIApAQCAtNTksOSArNTksOSBAQAogdnZwOiAgJHtQQVRURVJOOj0udnZwfQogCiAlLnZ2cDogJV90Yi52Ci0JJHtHQ0M2NF9QUkVGSVh9LWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0xIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLWMgLUkuLyAtSS4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uICB1c2VyX3Jpc2NfYm9vdC5jIC1vIHVzZXJfcmlzY19ib290Lm8KLQkke0dDQzY0X1BSRUZJWH0tZ2NjIC1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIC1EX19SVkNfRVhUIC1zdGF0aWMgLXN0ZD1nbnU5OSAtZm5vLWNvbW1vbiAtZm5vLWJ1aWx0aW4tcHJpbnRmIC1EVENNPTEgLVdhLC1tYXJjaD1ydjMyaW1jIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1ERkxBR1NfU1RSPVwiIi1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIlwiICAtRF9fQVNTRU1CTFlfXz0xIC1jIC1JLi8gLUkuLi8uLi9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbi8gIC4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uL2NydF90Y20uUyAtbyBjcnRfdGNtLm8KLQkke0dDQzY0X1BSRUZJWH0tZ2NjIC1vIHVzZXJfcmlzY19ib290LmVsZiAtVCAuLi8uLi9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbi9saW5rX3RjbS5sZCB1c2VyX3Jpc2NfYm9vdC5vIGNydF90Y20ubyAtbm9zdGFydGZpbGVzIC1ub3N0ZGxpYiAtbGMgLWxnY2MgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLU4KKwkke0dDQzY0X1BSRUZJWH0tZ2NjIC1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIC1EX19SVkNfRVhUIC1zdGF0aWMgLXN0ZD1nbnU5OSAtZm5vLWNvbW1vbiAtZm5vLWJ1aWx0aW4tcHJpbnRmIC1EVENNPTEgLVdhLC1tYXJjaD1ydjMyaW1jIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1ERkxBR1NfU1RSPVwiIi1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIlwiICAtYyAtSS4vIC1JJChZSUZJVkVfRklSTVdBUkVfUEFUSCkgIHVzZXJfcmlzY19ib290LmMgLW8gdXNlcl9yaXNjX2Jvb3QubworCSR7R0NDNjRfUFJFRklYfS1nY2MgLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAgLURfX1JWQ19FWFQgLXN0YXRpYyAtc3RkPWdudTk5IC1mbm8tY29tbW9uIC1mbm8tYnVpbHRpbi1wcmludGYgLURUQ009MSAtV2EsLW1hcmNoPXJ2MzJpbWMgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLURGTEFHU19TVFI9XCIiLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAiXCIgIC1EX19BU1NFTUJMWV9fPTEgLWMgLUkuLyAtSSQoWUlGSVZFX0ZJUk1XQVJFX1BBVEgpICAkKFlJRklWRV9GSVJNV0FSRV9QQVRIKS9jcnRfdGNtLlMgLW8gY3J0X3RjbS5vCisJJHtHQ0M2NF9QUkVGSVh9LWdjYyAtbyB1c2VyX3Jpc2NfYm9vdC5lbGYgLVQgJChZSUZJVkVfRklSTVdBUkVfUEFUSCkvbGlua190Y20ubGQgdXNlcl9yaXNjX2Jvb3QubyBjcnRfdGNtLm8gLW5vc3RhcnRmaWxlcyAtbm9zdGRsaWIgLWxjIC1sZ2NjIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1OCiAJJHtHQ0M2NF9QUkVGSVh9LW9iamNvcHkgLU8gdmVyaWxvZyB1c2VyX3Jpc2NfYm9vdC5lbGYgdXNlcl9yaXNjX2Jvb3QuaGV4CiAJJHtHQ0M2NF9QUkVGSVh9LW9iamR1bXAgLUQgdXNlcl9yaXNjX2Jvb3QuZWxmID4gdXNlcl9yaXNjX2Jvb3QuZHVtcAogCXJtIGNydF90Y20ubyB1c2VyX3Jpc2NfYm9vdC5vCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfc3BpL01ha2VmaWxlIGIvdmVyaWxvZy9kdi91c2VyX3NwaS9NYWtlZmlsZQppbmRleCAzN2YyNmZlLi4zMmJiZmVjIDEwMDY0NAotLS0gYS92ZXJpbG9nL2R2L3VzZXJfc3BpL01ha2VmaWxlCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl9zcGkvTWFrZWZpbGUKQEAgLTI5LDE0ICsyOSwxNCBAQAogVVBSSl9HTF9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvZ2wKIFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTID0gLi4vbW9kZWwKIFVQUkpfQkVIQVZJT1VSQUxfQUdFTlRTID0gLi4vYWdlbnRzCi1VUFJKX0lOQ0xVREVfUEFUSDEgPSAkKFVQUkpfUlRMX1BBVEgpL3N5bnRhY29yZS9zY3IxL3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEgxID0gJChVUFJKX1JUTF9QQVRIKS95aWZpdmUveWNyMS9zcmMvaW5jbHVkZXMKIFVQUkpfSU5DTFVERV9QQVRIMiA9ICQoVVBSSl9SVExfUEFUSCkvc2RyYW1fY3RybC9zcmMvZGVmcwogVVBSSl9JTkNMVURFX1BBVEgzID0gJChVUFJKX1JUTF9QQVRIKS9pMmNtL3NyYy9pbmNsdWRlcwogVVBSSl9JTkNMVURFX1BBVEg0ID0gJChVUFJKX1JUTF9QQVRIKS91c2IxX2hvc3Qvc3JjL2luY2x1ZGVzCiBVUFJKX0lOQ0xVREVfUEFUSDUgPSAkKFVQUkpfUlRMX1BBVEgpL21iaXN0L2luY2x1ZGUKIAotIyMgU1lOVEFDT1JFIEZJUk1XQVJFCi1TWU5UQUNPUkVfRklSTVdBUkVfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uCisjIyBZSUZJVkUgRklSTVdBUkUKK1lJRklWRV9GSVJNV0FSRV9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvZHYvZmlybXdhcmUKIEdDQzY0X1BSRUZJWD89cmlzY3Y2NC11bmtub3duLWVsZgogCiAjIyBSSVNDViBHQ0MgCkBAIC01OSw5ICs1OSw5IEBACiB2dnA6ICAke1BBVFRFUk46PS52dnB9CiAKICUudnZwOiAlX3RiLnYKLQkke0dDQzY0X1BSRUZJWH0tZ2NjIC1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIC1EX19SVkNfRVhUIC1zdGF0aWMgLXN0ZD1nbnU5OSAtZm5vLWNvbW1vbiAtZm5vLWJ1aWx0aW4tcHJpbnRmIC1EVENNPTEgLVdhLC1tYXJjaD1ydjMyaW1jIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1ERkxBR1NfU1RSPVwiIi1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIlwiICAtYyAtSS4vIC1JLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24gIHVzZXJfcmlzY19ib290LmMgLW8gdXNlcl9yaXNjX2Jvb3QubwotCSR7R0NDNjRfUFJFRklYfS1nY2MgLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAgLURfX1JWQ19FWFQgLXN0YXRpYyAtc3RkPWdudTk5IC1mbm8tY29tbW9uIC1mbm8tYnVpbHRpbi1wcmludGYgLURUQ009MSAtV2EsLW1hcmNoPXJ2MzJpbWMgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLURGTEFHU19TVFI9XCIiLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAiXCIgIC1EX19BU1NFTUJMWV9fPTEgLWMgLUkuLyAtSS4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uLyAgLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vY3J0X3RjbS5TIC1vIGNydF90Y20ubwotCSR7R0NDNjRfUFJFRklYfS1nY2MgLW8gdXNlcl9yaXNjX2Jvb3QuZWxmIC1UIC4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uL2xpbmtfdGNtLmxkIHVzZXJfcmlzY19ib290Lm8gY3J0X3RjbS5vIC1ub3N0YXJ0ZmlsZXMgLW5vc3RkbGliIC1sYyAtbGdjYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtTgorCSR7R0NDNjRfUFJFRklYfS1nY2MgLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAgLURfX1JWQ19FWFQgLXN0YXRpYyAtc3RkPWdudTk5IC1mbm8tY29tbW9uIC1mbm8tYnVpbHRpbi1wcmludGYgLURUQ009MSAtV2EsLW1hcmNoPXJ2MzJpbWMgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLURGTEFHU19TVFI9XCIiLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAiXCIgIC1jIC1JLi8gLUkkKFlJRklWRV9GSVJNV0FSRV9QQVRIKSAgdXNlcl9yaXNjX2Jvb3QuYyAtbyB1c2VyX3Jpc2NfYm9vdC5vCisJJHtHQ0M2NF9QUkVGSVh9LWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0xIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLURfX0FTU0VNQkxZX189MSAtYyAtSS4vIC1JJChZSUZJVkVfRklSTVdBUkVfUEFUSCkgICQoWUlGSVZFX0ZJUk1XQVJFX1BBVEgpL2NydF90Y20uUyAtbyBjcnRfdGNtLm8KKwkke0dDQzY0X1BSRUZJWH0tZ2NjIC1vIHVzZXJfcmlzY19ib290LmVsZiAtVCAkKFlJRklWRV9GSVJNV0FSRV9QQVRIKS9saW5rX3RjbS5sZCB1c2VyX3Jpc2NfYm9vdC5vIGNydF90Y20ubyAtbm9zdGFydGZpbGVzIC1ub3N0ZGxpYiAtbGMgLWxnY2MgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLU4KIAkke0dDQzY0X1BSRUZJWH0tb2JqY29weSAtTyB2ZXJpbG9nIHVzZXJfcmlzY19ib290LmVsZiB1c2VyX3Jpc2NfYm9vdC5oZXgKIAkke0dDQzY0X1BSRUZJWH0tb2JqZHVtcCAtRCB1c2VyX3Jpc2NfYm9vdC5lbGYgPiB1c2VyX3Jpc2NfYm9vdC5kdW1wCiAJcm0gY3J0X3RjbS5vIHVzZXJfcmlzY19ib290Lm8KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl91YXJ0L01ha2VmaWxlIGIvdmVyaWxvZy9kdi91c2VyX3VhcnQvTWFrZWZpbGUKaW5kZXggNDAxYTM5OS4uOTVlYmE2MyAxMDA2NDQKLS0tIGEvdmVyaWxvZy9kdi91c2VyX3VhcnQvTWFrZWZpbGUKKysrIGIvdmVyaWxvZy9kdi91c2VyX3VhcnQvTWFrZWZpbGUKQEAgLTI5LDE0ICsyOSwxNCBAQAogVVBSSl9HTF9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvZ2wKIFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTID0gLi4vbW9kZWwKIFVQUkpfQkVIQVZJT1VSQUxfQUdFTlRTID0gLi4vYWdlbnRzCi1VUFJKX0lOQ0xVREVfUEFUSDEgPSAkKFVQUkpfUlRMX1BBVEgpL3N5bnRhY29yZS9zY3IxL3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEgxID0gJChVUFJKX1JUTF9QQVRIKS95aWZpdmUveWNyMS9zcmMvaW5jbHVkZXMKIFVQUkpfSU5DTFVERV9QQVRIMiA9ICQoVVBSSl9SVExfUEFUSCkvc2RyYW1fY3RybC9zcmMvZGVmcwogVVBSSl9JTkNMVURFX1BBVEgzID0gJChVUFJKX1JUTF9QQVRIKS9pMmNtL3NyYy9pbmNsdWRlcwogVVBSSl9JTkNMVURFX1BBVEg0ID0gJChVUFJKX1JUTF9QQVRIKS91c2IxX2hvc3Qvc3JjL2luY2x1ZGVzCiBVUFJKX0lOQ0xVREVfUEFUSDUgPSAkKFVQUkpfUlRMX1BBVEgpL21iaXN0L2luY2x1ZGUKIAotIyMgU1lOVEFDT1JFIEZJUk1XQVJFCi1TWU5UQUNPUkVfRklSTVdBUkVfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uCisjIyBZSUZJVkUgRklSTVdBUkUKK1lJRklWRV9GSVJNV0FSRV9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvZHYvZmlybXdhcmUKIEdDQzY0X1BSRUZJWD89cmlzY3Y2NC11bmtub3duLWVsZgogCiAjIyBSSVNDViBHQ0MgCkBAIC01OSw5ICs1OSw5IEBACiB2dnA6ICAke1BBVFRFUk46PS52dnB9CiAKICUudnZwOiAlX3RiLnYKLQkke0dDQzY0X1BSRUZJWH0tZ2NjIC1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIC1EX19SVkNfRVhUIC1zdGF0aWMgLXN0ZD1nbnU5OSAtZm5vLWNvbW1vbiAtZm5vLWJ1aWx0aW4tcHJpbnRmIC1EVENNPTEgLVdhLC1tYXJjaD1ydjMyaW1jIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1ERkxBR1NfU1RSPVwiIi1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIlwiICAtYyAtSS4vIC1JLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24gIHVzZXJfdWFydC5jIC1vIHVzZXJfdWFydC5vCi0JJHtHQ0M2NF9QUkVGSVh9LWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0xIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLURfX0FTU0VNQkxZX189MSAtYyAtSS4vIC1JLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vICAuLi8uLi9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbi9jcnRfdGNtLlMgLW8gY3J0X3RjbS5vCi0JJHtHQ0M2NF9QUkVGSVh9LWdjYyAtbyB1c2VyX3VhcnQuZWxmIC1UIC4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uL2xpbmtfdGNtLmxkIHVzZXJfdWFydC5vIGNydF90Y20ubyAtbm9zdGFydGZpbGVzIC1ub3N0ZGxpYiAtbGMgLWxnY2MgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLU4KKwkke0dDQzY0X1BSRUZJWH0tZ2NjIC1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIC1EX19SVkNfRVhUIC1zdGF0aWMgLXN0ZD1nbnU5OSAtZm5vLWNvbW1vbiAtZm5vLWJ1aWx0aW4tcHJpbnRmIC1EVENNPTEgLVdhLC1tYXJjaD1ydjMyaW1jIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1ERkxBR1NfU1RSPVwiIi1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIlwiICAtYyAtSS4vIC1JJChZSUZJVkVfRklSTVdBUkVfUEFUSCkgdXNlcl91YXJ0LmMgLW8gdXNlcl91YXJ0Lm8KKwkke0dDQzY0X1BSRUZJWH0tZ2NjIC1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIC1EX19SVkNfRVhUIC1zdGF0aWMgLXN0ZD1nbnU5OSAtZm5vLWNvbW1vbiAtZm5vLWJ1aWx0aW4tcHJpbnRmIC1EVENNPTEgLVdhLC1tYXJjaD1ydjMyaW1jIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1ERkxBR1NfU1RSPVwiIi1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIlwiICAtRF9fQVNTRU1CTFlfXz0xIC1jIC1JLi8gLUkkKFlJRklWRV9GSVJNV0FSRV9QQVRIKSAgJChZSUZJVkVfRklSTVdBUkVfUEFUSCkvY3J0X3RjbS5TIC1vIGNydF90Y20ubworCSR7R0NDNjRfUFJFRklYfS1nY2MgLW8gdXNlcl91YXJ0LmVsZiAtVCAkKFlJRklWRV9GSVJNV0FSRV9QQVRIKS9saW5rX3RjbS5sZCB1c2VyX3VhcnQubyBjcnRfdGNtLm8gLW5vc3RhcnRmaWxlcyAtbm9zdGRsaWIgLWxjIC1sZ2NjIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1OCiAJJHtHQ0M2NF9QUkVGSVh9LW9iamNvcHkgLU8gdmVyaWxvZyB1c2VyX3VhcnQuZWxmIHVzZXJfdWFydC5oZXgKIAkke0dDQzY0X1BSRUZJWH0tb2JqZHVtcCAtRCB1c2VyX3VhcnQuZWxmID4gdXNlcl91YXJ0LmR1bXAKIAlybSBjcnRfdGNtLm8gdXNlcl91YXJ0Lm8KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl91YXJ0X21hc3Rlci9NYWtlZmlsZSBiL3Zlcmlsb2cvZHYvdXNlcl91YXJ0X21hc3Rlci9NYWtlZmlsZQppbmRleCBjYjMxYjBiLi5kYmUxY2U3IDEwMDY0NAotLS0gYS92ZXJpbG9nL2R2L3VzZXJfdWFydF9tYXN0ZXIvTWFrZWZpbGUKKysrIGIvdmVyaWxvZy9kdi91c2VyX3VhcnRfbWFzdGVyL01ha2VmaWxlCkBAIC0yOSwxNCArMjksMTQgQEAKIFVQUkpfR0xfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL2dsCiBVUFJKX0JFSEFWSU9VUkFMX01PREVMUyA9IC4uL21vZGVsCiBVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUyA9IC4uL2FnZW50cwotVVBSSl9JTkNMVURFX1BBVEgxID0gJChVUFJKX1JUTF9QQVRIKS9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRIMSA9ICQoVVBSSl9SVExfUEFUSCkveWlmaXZlL3ljcjEvc3JjL2luY2x1ZGVzCiBVUFJKX0lOQ0xVREVfUEFUSDIgPSAkKFVQUkpfUlRMX1BBVEgpL3NkcmFtX2N0cmwvc3JjL2RlZnMKIFVQUkpfSU5DTFVERV9QQVRIMyA9ICQoVVBSSl9SVExfUEFUSCkvaTJjbS9zcmMvaW5jbHVkZXMKIFVQUkpfSU5DTFVERV9QQVRINCA9ICQoVVBSSl9SVExfUEFUSCkvdXNiMV9ob3N0L3NyYy9pbmNsdWRlcwogVVBSSl9JTkNMVURFX1BBVEg1ID0gJChVUFJKX1JUTF9QQVRIKS9tYmlzdC9pbmNsdWRlCiAKLSMjIFNZTlRBQ09SRSBGSVJNV0FSRQotU1lOVEFDT1JFX0ZJUk1XQVJFX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbgorIyMgWUlGSVZFIEZJUk1XQVJFCitZSUZJVkVfRklSTVdBUkVfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL2R2L2Zpcm13YXJlCiAKIAogIyMgU2ltdWxhdGlvbiBtb2RlOiBSVEwvR0wKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvd2JfcG9ydC9NYWtlZmlsZSBiL3Zlcmlsb2cvZHYvd2JfcG9ydC9NYWtlZmlsZQppbmRleCA2ZTE0NGJmLi5kMzc4Y2U3IDEwMDY0NAotLS0gYS92ZXJpbG9nL2R2L3diX3BvcnQvTWFrZWZpbGUKKysrIGIvdmVyaWxvZy9kdi93Yl9wb3J0L01ha2VmaWxlCkBAIC0zMCw3ICszMCw3IEBACiBVUFJKX1JUTF9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvcnRsCiBVUFJKX0dMX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9nbAogVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMgPSAuLi8KLVVQUkpfSU5DTFVERV9QQVRIMSA9ICQoVVBSSl9SVExfUEFUSCkvc3ludGFjb3JlL3NjcjEvc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDEgPSAkKFVQUkpfUlRMX1BBVEgpL3lpZml2ZS95Y3IxL3NyYy9pbmNsdWRlcwogVVBSSl9JTkNMVURFX1BBVEgyID0gJChVUFJKX1JUTF9QQVRIKS9zZHJhbV9jdHJsL3NyYy9kZWZzCiBVUFJKX0lOQ0xVREVfUEFUSDMgPSAkKFVQUkpfUlRMX1BBVEgpL2kyY20vc3JjL2luY2x1ZGVzCiBVUFJKX0lOQ0xVREVfUEFUSDQgPSAkKFVQUkpfUlRMX1BBVEgpL3VzYjFfaG9zdC9zcmMvaW5jbHVkZXMKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3Bpbm11eC9zcmMvcGlubXV4LnN2IGIvdmVyaWxvZy9ydGwvcGlubXV4L3NyYy9waW5tdXguc3YKaW5kZXggZTNhZTYxYi4uMTJkNTYyNSAxMDA3NTUKLS0tIGEvdmVyaWxvZy9ydGwvcGlubXV4L3NyYy9waW5tdXguc3YKKysrIGIvdmVyaWxvZy9ydGwvcGlubXV4L3NyYy9waW5tdXguc3YKQEAgLTEsMyArMSw0MSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBQaW5tdXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSByaXNjZHVpbm8gY29yZXMgcHJvamVjdCAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3Jpc2NkdWluby5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICBQaW5NdXggTWFuYWdlcyBhbGwgdGhlIHBpbiBtdWx0aXBsZXhpbmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4xIC0gMTZ0aCBGZWIgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgaW5pdGlhbCB2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogbW9kdWxlIHBpbm11eCAoCiAgICAgICAgICAgICAgICAgICAgIGBpZmRlZiBVU0VfUE9XRVJfUElOUwogICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCBsb2dpYyAgICAgICAgIHZjY2QxLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9waW5tdXgvc3JjL3Bpbm11eF9yZWcuc3YgYi92ZXJpbG9nL3J0bC9waW5tdXgvc3JjL3Bpbm11eF9yZWcuc3YKaW5kZXggMjRjOGFlNi4uNTQ5ZGM2OCAxMDA2NDQKLS0tIGEvdmVyaWxvZy9ydGwvcGlubXV4L3NyYy9waW5tdXhfcmVnLnN2CisrKyBiL3Zlcmlsb2cvcnRsL3Bpbm11eC9zcmMvcGlubXV4X3JlZy5zdgpAQCAtMSw0ICsxLDQxIEBACi0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUGlubXV4IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHJpc2NkdWlubyBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEvcmlzY2R1aW5vLmdpdCAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIEhvbGQgYWxsIHRoZSBHbG9iYWwgYW5kIFBpbk11eCBSZWdpc3RlciAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUmV2aXNpb24gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAwLjEgLSAxNnRoIEZlYiAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBpbml0aWFsIHZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KIG1vZHVsZSBwaW5tdXhfcmVnICgKICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3lzdGVtIFNpZ25hbHMKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5wdXRzCkBAIC02ODQsNyArNzIxLDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIFNvZnR3YXJlIFJlZy0yLCBSZWxlYXNlIGRhdGU6IDxEQVk+PE1PTlRIPjxZRUFSPgogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotZ2VuXzMyYl9yZWcgICMoMzInaDA4MDFfMjAyMikgdV9yZWdfMjMJKAorZ2VuXzMyYl9yZWcgICMoMzInaDE0MDFfMjAyMikgdV9yZWdfMjMJKAogCSAgICAgIC8vTGlzdCBvZiBJbnB1dHMKIAkgICAgICAucmVzZXRfbiAgICAoaF9yZXNldF9uICAgICApLAogCSAgICAgIC5jbGsgICAgICAgIChtY2xrICAgICAgICAgICksCkBAIC02OTcsOSArNzM0LDkgQEAKIAkgICAgICApOwogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBTb2Z0d2FyZSBSZWctMzogUG9qZWN0IFJldmlzb24gMi42ID0gMDAwMjYwMAorLy8gU29mdHdhcmUgUmVnLTM6IFBvamVjdCBSZXZpc29uIDMuMCA9IDAwMDMwMDAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWdlbl8zMmJfcmVnICAjKDMyJ2gwMDAyXzYwMDApIHVfcmVnXzI0CSgKK2dlbl8zMmJfcmVnICAjKDMyJ2gwMDAzXzAwMDApIHVfcmVnXzI0CSgKIAkgICAgICAvL0xpc3Qgb2YgSW5wdXRzCiAJICAgICAgLnJlc2V0X24gICAgKGhfcmVzZXRfbiAgICAgKSwKIAkgICAgICAuY2xrICAgICAgICAobWNsayAgICAgICAgICApLApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvTElDRU5TRSBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL0xJQ0VOU0UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkNzUzYWQuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvTElDRU5TRQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLe+7vyMgU29sZGVycGFkIEhhcmR3YXJlIExpY2VuY2UgVmVyc2lvbiAyLjAKLQotVGhpcyBsaWNlbmNlICh0aGUg4oCcTGljZW5jZeKAnSkgb3BlcmF0ZXMgYXMgYSB3cmFwYXJvdW5kIGxpY2VuY2UgdG8gdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wICh0aGUg4oCcQXBhY2hlIExpY2Vuc2XigJ0pIGFuZCBncmFudHMgdG8gWW91IHRoZSByaWdodHMsIGFuZCBpbXBvc2VzIHRoZSBvYmxpZ2F0aW9ucywgc2V0IG91dCBpbiB0aGUgQXBhY2hlIExpY2Vuc2UgKHdoaWNoIGNhbiBiZSBmb3VuZCBoZXJlOiBodHRwOi8vYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCksIHdpdGggdGhlIGZvbGxvd2luZyBleHRlbnNpb25zLiBJdCBtdXN0IGJlIHJlYWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgQXBhY2hlIExpY2Vuc2UuIFNlY3Rpb24gMSBiZWxvdyBtb2RpZmllcyBkZWZpbml0aW9ucyBpbiB0aGUgQXBhY2hlIExpY2Vuc2UsIGFuZCBzZWN0aW9uIDIgYmVsb3cgcmVwbGFjZXMgc2VjdGlvbnMgMiBvZiB0aGUgQXBhY2hlIExpY2Vuc2UuIFlvdSBtYXksIGF0IHlvdXIgb3B0aW9uLCBjaG9vc2UgdG8gdHJlYXQgYW55IFdvcmsgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFzIHJlbGVhc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSAodGh1cyBpZ25vcmluZyBhbGwgc2VjdGlvbnMgd3JpdHRlbiBiZWxvdyBlbnRpcmVseSkuIFdvcmRzIGluIGl0YWxpY3MgaW5kaWNhdGUgY2hhbmdlcyByb20gdGhlIEFwYWNoZSBMaWNlbnNlLCBidXQgYXJlIGluZGljYXRpdmUgYW5kIG5vdCB0byBiZSB0YWtlbiBpbnRvIGFjY291bnQgaW4gaW50ZXJwcmV0YXRpb24uCi0KLTEuIFRoZSBkZWZpbml0aW9ucyBzZXQgb3V0IGluIHRoZSBBcGFjaGUgTGljZW5zZSBhcmUgbW9kaWZpZWQgYXMgZm9sbG93czoKLQotQ29weXJpZ2h0IGFueSByZWZlcmVuY2UgdG8g4oCYY29weXJpZ2h04oCZICh3aGV0aGVyIGNhcGl0YWxpc2VkIG9yIG5vdCkgaW5jbHVkZXMg4oCYUmlnaHRz4oCZIChhcyBkZWZpbmVkIGJlbG93KS4KLQotQ29udHJpYnV0aW9uIGFsc28gaW5jbHVkZXMgYW55IGRlc2lnbiwgYXMgd2VsbCBhcyBhbnkgd29yayBvZiBhdXRob3JzaGlwLgotCi1EZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluIHJldmVyc2libHkgc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIG9yIHBoeXNpY2FsbHkgY29ubmVjdCB0byBvciBpbnRlcm9wZXJhdGUgd2l0aCB0aGUgaW50ZXJmYWNlcyBvZiB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgotCi1PYmplY3QgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSBvciB0aGUgYXBwbGljYXRpb24gb2YgYSBTb3VyY2UgZm9ybSB0byBwaHlzaWNhbCBtYXRlcmlhbCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBjb21waWxlZCBvYmplY3QgY29kZSwgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24sIHRoZSBpbnN0YW50aWF0aW9uIG9mIGEgaGFyZHdhcmUgZGVzaWduIG9yIHBoeXNpY2FsIG9iamVjdCBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMsIGluY2x1ZGluZyBpbnRlcm1lZGlhdGUgZm9ybXMgc3VjaCBhcyBieXRlY29kZXMsIEZQR0EgYml0c3RyZWFtcywgbW91bGRzLCBhcnR3b3JrIGFuZCBzZW1pY29uZHVjdG9yIHRvcG9ncmFwaGllcyAobWFzayB3b3JrcykuCi0KLVJpZ2h0cyBtZWFucyBjb3B5cmlnaHQgYW5kIGFueSBzaW1pbGFyIHJpZ2h0IGluY2x1ZGluZyBkZXNpZ24gcmlnaHQgKHdoZXRoZXIgcmVnaXN0ZXJlZCBvciB1bnJlZ2lzdGVyZWQpLCBzZW1pY29uZHVjdG9yIHRvcG9ncmFwaHkgKG1hc2spIHJpZ2h0cyBhbmQgZGF0YWJhc2UgcmlnaHRzIChidXQgZXhjbHVkaW5nIFBhdGVudHMgYW5kIFRyYWRlbWFya3MpLgotCi1Tb3VyY2UgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc291cmNlIGNvZGUsIG5ldCBsaXN0cywgYm9hcmQgbGF5b3V0cywgQ0FEIGZpbGVzLCBkb2N1bWVudGF0aW9uIHNvdXJjZSwgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCi0KLVdvcmsgYWxzbyBpbmNsdWRlcyBhIGRlc2lnbiBvciB3b3JrIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gU291cmNlIGZvcm0gb3Igb3RoZXIgT2JqZWN0IGZvcm0uCi0KLTIuIEdyYW50IG9mIExpY2VuY2UKLQotMi4xIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgbGljZW5zZSB1bmRlciB0aGUgUmlnaHRzIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLCBtYWtlLCBhZGFwdCwgcmVwYWlyLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSBhbmQgZG8gYW55dGhpbmcgaW4gcmVsYXRpb24gdG8gdGhlIFdvcmsgYXMgaWYgdGhlIFJpZ2h0cyBkaWQgbm90IGV4aXN0LgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvTWFrZWZpbGUgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTIxNDJjNC4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDMxMCArMCwwIEBACi0jLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0jLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjEKLSMvLyAKLSMvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jLy8KLSMvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIy8vCi0jLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0jLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IFN5bnRhY29yZSBMTEMKLSMvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBNYWtlZmlsZSBmb3IgU0NSMQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jIFBBUkFNRVRFUlMKLQotIyBDRkcgPSA8TUFYLCBCQVNFLCBNSU4sIENVU1RPTT4KLSMgQlVTID0gPEFIQiwgQVhJPgotCi1leHBvcnQgQ0ZHICAgICAgPz0gTUFYCi1leHBvcnQgQlVTICAgICAgPz0gQUhCCi0KLWlmZXEgKCQoQ0ZHKSwgTUFYKQotIyBQcmVkZWZpbmVkIGNvbmZpZ3VyYXRpb24gU0NSMV9DRkdfUlYzMklNQ19NQVgKLSAgICBvdmVycmlkZSBBUkNIICAgICAgICAgOj0gSU1DCi0gICAgb3ZlcnJpZGUgVkVDVF9JUlEgICAgIDo9IDEKLSAgICBvdmVycmlkZSBJUElDICAgICAgICAgOj0gMQotICAgIG92ZXJyaWRlIFRDTSAgICAgICAgICA6PSAxCi0gICAgb3ZlcnJpZGUgU0lNX0NGR19ERUYgIDo9IFNDUjFfQ0ZHX1JWMzJJTUNfTUFYCi1lbHNlCi0gICAgaWZlcSAoJChDRkcpLCBCQVNFKQotICAgICMgUHJlZGVmaW5lZCBjb25maWd1cmF0aW9uIFNDUjFfQ0ZHX1JWMzJJQ19CQVNFCi0gICAgICAgIG92ZXJyaWRlIEFSQ0ggICAgICAgICA6PSBJQwotICAgICAgICBvdmVycmlkZSBWRUNUX0lSUSAgICAgOj0gMQotICAgICAgICBvdmVycmlkZSBJUElDICAgICAgICAgOj0gMQotICAgICAgICBvdmVycmlkZSBUQ00gICAgICAgICAgOj0gMQotICAgICAgICBvdmVycmlkZSBTSU1fQ0ZHX0RFRiAgOj0gU0NSMV9DRkdfUlYzMklDX0JBU0UKLSAgICBlbHNlCi0gICAgICAgIGlmZXEgKCQoQ0ZHKSwgTUlOKQotICAgICAgICAjIFByZWRlZmluZWQgY29uZmlndXJhdGlvbiBTQ1IxX0NGR19SVjMyRUNfTUlOCi0gICAgICAgICAgICBvdmVycmlkZSBBUkNIICAgICAgICAgOj0gRUMKLSAgICAgICAgICAgIG92ZXJyaWRlIFZFQ1RfSVJRICAgICA6PSAwCi0gICAgICAgICAgICBvdmVycmlkZSBJUElDICAgICAgICAgOj0gMAotICAgICAgICAgICAgb3ZlcnJpZGUgVENNICAgICAgICAgIDo9IDEKLSAgICAgICAgICAgIG92ZXJyaWRlIFNJTV9DRkdfREVGICA6PSBTQ1IxX0NGR19SVjMyRUNfTUlOCi0gICAgICAgIGVsc2UKLSAgICAgICAgIyBDVVNUT00gY29uZmlndXJhdGlvbi4gUGFyYW1ldGVycyBjYW4gYmUgb3ZlcndyaXR0ZW4KLSAgICAgICAgICAgICMgVGhlc2Ugb3B0aW9ucyBhcmUgZm9yIGNvbXBpbGluZyB0ZXN0cyBvbmx5LiBTZXQgdGhlIGNvcnJlc3BvbmRpbmcgUlRMIHBhcmFtZXRlcnMgbWFudWFsbHkgaW4gdGhlIGZpbGUgc2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aC4KLSAgICAgICAgICAgICMgQVJDSCA9IDxJTUMsIElDLCBJTSwgSSwgRU1DLCBFTSwgRUMsIEU+Ci0gICAgICAgICAgICAjIFZFQ1RfSVJRID0gPDAsIDE+Ci0gICAgICAgICAgICAjIElQSUMgPSA8MCwgMT4KLSAgICAgICAgICAgICMgVENNID0gPDAsIDE+Ci0gICAgICAgICAgICBBUkNIICAgICAgPz0gSU1DCi0gICAgICAgICAgICBWRUNUX0lSUSAgPz0gMAotICAgICAgICAgICAgSVBJQyAgICAgID89IDAKLSAgICAgICAgICAgIFRDTSAgICAgICA/PSAwCi0gICAgICAgICAgICBTSU1fQ0ZHX0RFRiAgPSBTQ1IxX0NGR18kKENGRykKLSAgICAgICAgZW5kaWYKLSAgICBlbmRpZgotZW5kaWYKLQotIyBleHBvcnQgYWxsIG92ZXJyaWRlZCB2YXJpYWJsZXMKLWV4cG9ydCBBUkNICi1leHBvcnQgVkVDVF9JUlEKLWV4cG9ydCBJUElDCi1leHBvcnQgVENNCi1leHBvcnQgU0lNX0NGR19ERUYKLQotQVJDSF9sb3dlcmNhc2UgPSAkKHNoZWxsIGVjaG8gJChBUkNIKSB8IHRyIEEtWiBhLXopCi1CVVNfbG93ZXJjYXNlICA9ICQoc2hlbGwgZWNobyAkKEJVUykgIHwgdHIgQS1aIGEteikKLQotaWZlcSAoJChBUkNIX2xvd2VyY2FzZSksKQotICAgIEFSQ0hfdG1wID0gaW1jCi1lbHNlCi0gICAgaWZuZXEgKCwkKGZpbmRzdHJpbmcgZSwkKEFSQ0hfbG93ZXJjYXNlKSkpCi0gICAgICAgIEFSQ0hfdG1wICAgKz0gZQotICAgICAgICBFWFRfQ0ZMQUdTICs9IC1EX19SVkVfRVhUCi0gICAgZWxzZQotICAgICAgICBBUkNIX3RtcCAgICs9IGkKLSAgICBlbmRpZgotICAgIGlmbmVxICgsJChmaW5kc3RyaW5nIG0sJChBUkNIX2xvd2VyY2FzZSkpKQotICAgICAgICBBUkNIX3RtcCAgIDo9ICQoQVJDSF90bXApbQotICAgIGVuZGlmCi0gICAgaWZuZXEgKCwkKGZpbmRzdHJpbmcgYywkKEFSQ0hfbG93ZXJjYXNlKSkpCi0gICAgICAgIEFSQ0hfdG1wICAgOj0gJChBUkNIX3RtcCljCi0gICAgICAgIEVYVF9DRkxBR1MgKz0gLURfX1JWQ19FWFQKLSAgICBlbmRpZgotZW5kaWYKLQotb3ZlcnJpZGUgQVJDSD0kKEFSQ0hfdG1wKQotCi0jIFVzZSB0aGlzIHBhcmFtZXRlciB0byBlbmFibGUgdHJhY2Vsb2cKLVRSQUNFID89IDAKLQotaWZlcSAoJChUUkFDRSksIDEpCi0gICAgZXhwb3J0IFNJTV9UUkFDRV9ERUYgPSBTQ1IxX1RSQUNFX0xPR19FTgotZWxzZQotICAgIGV4cG9ydCBTSU1fVFJBQ0VfREVGID0gU0NSMV9UUkFDRV9MT0dfRElTCi1lbmRpZgotCi0KLSMgVXNlIHRoaXMgcGFyYW1ldGVyIHRvIHBhc3MgYWRkaXRpb25hbCBvcHRpb25zIGZvciBzaW11bGF0aW9uIGJ1aWxkIGNvbW1hbmQKLVNJTV9CVUlMRF9PUFRTID89Ci0KLSMgVXNlIHRoaXMgcGFyYW1ldGVyIHRvIHNldCB0aGUgbGlzdCBvZiB0ZXN0cyB0byBydW4KLSMgVEFSR0VUUyA9IDxyaXNjdl9pc2EsIHJpc2N2X2NvbXBsaWFuY2UsIGNvcmVtYXJrLCBkaHJ5c3RvbmUyMSwgaGVsbG8sIGlzcl9zYW1wbGU+Ci1leHBvcnQgVEFSR0VUUyA6PQotCi0KLWV4cG9ydCBBQkkgICA/PSBpbHAzMgotIyBUZXN0YmVuY2ggbWVtb3J5IGRlbGF5IHBhdHRlcm5zXAotICAoRkZGRkZGRkYgLSBubyBkZWxheSwgMDAwMDAwMDAgLSByYW5kb20gZGVsYXksIDAwMDAwMDAxIC0gbWF4IGRlbGF5KQotaW1lbV9wYXR0ZXJuID89IEZGRkZGRkZGCi1kbWVtX3BhdHRlcm4gPz0gRkZGRkZGRkYKLQotVkNTX09QVFMgICAgICAgPz0KLU1PREVMU0lNX09QVFMgID89Ci1OQ1NJTV9PUFRTICAgICA/PQotVkVSSUxBVE9SX09QVFMgPz0KLQotY3VycmVudF9nb2FsIDo9ICQoTUFLRUNNREdPQUxTOnJ1bl8lPSUpCi1pZmVxICgkKGN1cnJlbnRfZ29hbCksKQotICAgIGN1cnJlbnRfZ29hbCA6PSB2ZXJpbGF0b3IKLWVuZGlmCi0KLSMgUGF0aHMKLWV4cG9ydCByb290X2RpciA6PSAkKHNoZWxsIHB3ZCkKLWV4cG9ydCB0c3RfZGlyICA6PSAkKHJvb3RfZGlyKS9zaW0vdGVzdHMKLWV4cG9ydCBpbmNfZGlyICA6PSAkKHRzdF9kaXIpL2NvbW1vbgotZXhwb3J0IGJsZF9kaXIgIDo9ICQocm9vdF9kaXIpL2J1aWxkLyQoY3VycmVudF9nb2FsKV8kKEJVUylfJChDRkcpXyQoQVJDSClfSVBJQ18kKElQSUMpX1RDTV8kKFRDTSlfVklSUV8kKFZFQ1RfSVJRKV9UUkFDRV8kKFRSQUNFKQotCi10ZXN0X3Jlc3VsdHMgOj0gJChibGRfZGlyKS90ZXN0X3Jlc3VsdHMudHh0Ci10ZXN0X2luZm8gICAgOj0gJChibGRfZGlyKS90ZXN0X2luZm8KLXNpbV9yZXN1bHRzICA6PSAkKGJsZF9kaXIpL3NpbV9yZXN1bHRzLnR4dAotCi10b2RvX2xpc3QgICAgOj0gJChibGRfZGlyKS90b2RvLnR4dAotIyBFbnZpcm9ubWVudAotZXhwb3J0IENST1NTX1BSRUZJWCAgPz0gcmlzY3Y2NC11bmtub3duLWVsZi0KLWV4cG9ydCBSSVNDVl9HQ0MgICAgID89ICQoQ1JPU1NfUFJFRklYKWdjYwotZXhwb3J0IFJJU0NWX09CSkRVTVAgPz0gJChDUk9TU19QUkVGSVgpb2JqZHVtcCAtRAotZXhwb3J0IFJJU0NWX09CSkNPUFkgPz0gJChDUk9TU19QUkVGSVgpb2JqY29weSAtTyB2ZXJpbG9nCi1leHBvcnQgUklTQ1ZfUkVBREVMRiA/PSAkKENST1NTX1BSRUZJWClyZWFkZWxmIC1zCi0jLS0KLWlmbmVxICgsJChmaW5kc3RyaW5nIGF4aSwkKEJVU19sb3dlcmNhc2UpKSkKLWV4cG9ydCBydGxfdG9wX2ZpbGVzIDo9IGF4aV90b3AuZmlsZXMKLWV4cG9ydCBydGxfdGJfZmlsZXMgIDo9IGF4aV90Yi5maWxlcwotZXhwb3J0IHRvcF9tb2R1bGUgICAgOj0gc2NyMV90b3BfdGJfYXhpCi1lbHNlCi1leHBvcnQgcnRsX3RvcF9maWxlcyA6PSBhaGJfdG9wLmZpbGVzCi1leHBvcnQgcnRsX3RiX2ZpbGVzICA6PSBhaGJfdGIuZmlsZXMKLWV4cG9ydCB0b3BfbW9kdWxlICAgIDo9IHNjcjFfdG9wX3RiX2FoYgotZW5kaWYKLQotaWZuZXEgKCwkKGZpbmRzdHJpbmcgZSwkKEFSQ0hfbG93ZXJjYXNlKSkpCi0jIFRlc3RzIGNhbiBiZSBjb21waWxlZCBmb3IgUlZFIG9ubHkgaWYgZ2NjIHZlcnNpb24gOC4wLjAgb3IgaGlnaGVyCi0gICAgR0NDVkVSU0lPTkdUNyA6PSAkKHNoZWxsIGV4cHIgYCQoUklTQ1ZfR0NDKSAtZHVtcGZ1bGx2ZXJzaW9uIHwgY3V0IC1mMSAtZCcuJ2AgXD4gNykKLSAgICBpZmVxICIkKEdDQ1ZFUlNJT05HVDcpIiAiMSIKLSAgICAgICAgQUJJIDo9IGlscDMyZQotICAgIGVuZGlmCi1lbmRpZgotCi0jLS0KLWlmZXEgKCwkKGZpbmRzdHJpbmcgZSwkKEFSQ0hfbG93ZXJjYXNlKSkpCi0jIFRoZXNlIHRlc3RzIGNhbm5vdCBiZSBjb21waWxlZCBmb3IgUlZFCi0KLSAgICAjIENvbW1lbnQgdGhpcyB0YXJnZXQgaWYgeW91IGRvbid0IHdhbnQgdG8gcnVuIHRoZSByaXNjdl9pc2EKLSAgICBUQVJHRVRTICs9IHJpc2N2X2lzYQotCi0gICAgIyBDb21tZW50IHRoaXMgdGFyZ2V0IGlmIHlvdSBkb24ndCB3YW50IHRvIHJ1biB0aGUgcmlzY3ZfY29tcGxpYW5jZQotICAgIFRBUkdFVFMgKz0gcmlzY3ZfY29tcGxpYW5jZQotZW5kaWYKLQotIyBDb21tZW50IHRoaXMgdGFyZ2V0IGlmIHlvdSBkb24ndCB3YW50IHRvIHJ1biB0aGUgaXNyX3NhbXBsZQotVEFSR0VUUyArPSBpc3Jfc2FtcGxlCi0KLSMgQ29tbWVudCB0aGlzIHRhcmdldCBpZiB5b3UgZG9uJ3Qgd2FudCB0byBydW4gdGhlIGNvcmVtYXJrCi1UQVJHRVRTICs9IGNvcmVtYXJrCi0KLSMgQ29tbWVudCB0aGlzIHRhcmdldCBpZiB5b3UgZG9uJ3Qgd2FudCB0byBydW4gdGhlIGRocnlzdG9uZQotVEFSR0VUUyArPSBkaHJ5c3RvbmUyMQotCi0jIENvbW1lbnQgdGhpcyB0YXJnZXQgaWYgeW91IGRvbid0IHdhbnQgdG8gcnVuIHRoZSBoZWxsbyB0ZXN0Ci1UQVJHRVRTICs9IGhlbGxvCi0KLSMgVGFyZ2V0cwotLlBIT05ZOiB0ZXN0cyBydW5fbW9kZWxzaW0gcnVuX3ZjcyBydW5fbmNzaW0gcnVuX3ZlcmlsYXRvciBydW5fdmVyaWxhdG9yX3dmCi0KLWRlZmF1bHQ6IGNsZWFuX3Rlc3RfbGlzdCBydW5fdmVyaWxhdG9yCi0KLWNsZWFuX3Rlc3RfbGlzdDoKLQlybSAtZiAkKHRlc3RfaW5mbykKLQotZWNob19vdXQ6IHRlc3RzCi0JQGVjaG8gIiAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdCAgICAgICAgICAgICAgIHwgYnVpbGQgfCBzaW11bGF0aW9uICIgOwotCUBlY2hvICIkJChjYXQgJCh0ZXN0X3Jlc3VsdHMpKSIKLQotdGVzdHM6ICQoVEFSR0VUUykKLQotJCh0ZXN0X2luZm8pOiBjbGVhbl9oZXggdGVzdHMKLQljZCAkKGJsZF9kaXIpCi0KLWlzcl9zYW1wbGU6IHwgJChibGRfZGlyKQotCSQoTUFLRSkgLUMgJCh0c3RfZGlyKS9pc3Jfc2FtcGxlIEFSQ0g9JChBUkNIKSBJUElDPSQoSVBJQykgVkVDVF9JUlE9JChWRUNUX0lSUSkKLQotZGhyeXN0b25lMjE6IHwgJChibGRfZGlyKQotCSQoTUFLRSkgLUMgJCh0c3RfZGlyKS9iZW5jaG1hcmtzL2RocnlzdG9uZTIxIEVYVF9DRkxBR1M9IiQoRVhUX0NGTEFHUykiIEFSQ0g9JChBUkNIKQotCi1jb3JlbWFyazogfCAkKGJsZF9kaXIpCi0JLSQoTUFLRSkgLUMgJCh0c3RfZGlyKS9iZW5jaG1hcmtzL2NvcmVtYXJrIEVYVF9DRkxBR1M9IiQoRVhUX0NGTEFHUykiIEFSQ0g9JChBUkNIKQotCi1yaXNjdl9pc2E6IHwgJChibGRfZGlyKQotCSQoTUFLRSkgLUMgJCh0c3RfZGlyKS9yaXNjdl9pc2EgQVJDSD0kKEFSQ0gpCi0KLXJpc2N2X2NvbXBsaWFuY2U6IHwgJChibGRfZGlyKQotCSQoTUFLRSkgLUMgJCh0c3RfZGlyKS9yaXNjdl9jb21wbGlhbmNlIEFSQ0g9JChBUkNIKQotCi1oZWxsbzogfCAkKGJsZF9kaXIpCi0JLSQoTUFLRSkgLUMgJCh0c3RfZGlyKS9oZWxsbyBFWFRfQ0ZMQUdTPSIkKEVYVF9DRkxBR1MpIiBBUkNIPSQoQVJDSCkKLQotY2xlYW5faGV4OiB8ICQoYmxkX2RpcikKLQkkKFJNKSAkKGJsZF9kaXIpLyouaGV4Ci0KLSQoYmxkX2Rpcik6Ci0JbWtkaXIgLXAgJChibGRfZGlyKQotCi1ydW5fdmNzOiAkKHRlc3RfaW5mbykKLQkkKE1BS0UpIC1DICQocm9vdF9kaXIpL3NpbSBidWlsZF92Y3MgU0lNX0NGR19ERUY9JChTSU1fQ0ZHX0RFRikgU0lNX1RSQUNFX0RFRj0kKFNJTV9UUkFDRV9ERUYpIFNJTV9CVUlMRF9PUFRTPSQoU0lNX0JVSUxEX09QVFMpOwotCXByaW50ZiAiIiA+ICQodGVzdF9yZXN1bHRzKTsKLQljZCAkKGJsZF9kaXIpOyBcCi0JJChibGRfZGlyKS9zaW12ICAtViBcCi0JK3Rlc3RfaW5mbz0kKHRlc3RfaW5mbykgXAotCSt0ZXN0X3Jlc3VsdHM9JCh0ZXN0X3Jlc3VsdHMpIFwKLQkraW1lbV9wYXR0ZXJuPSQoaW1lbV9wYXR0ZXJuKSBcCi0JK2RtZW1fcGF0dGVybj0kKGRtZW1fcGF0dGVybikgXAotCSQoVkNTX09QVFMpIHwgdGVlICQoc2ltX3Jlc3VsdHMpICA7XAotCXByaW50ZiAiICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0ICAgICAgICAgICAgICAgfCBidWlsZCB8IHNpbXVsYXRpb24gXG4iIDsgXAotCXByaW50ZiAiJCQoY2F0ICQodGVzdF9yZXN1bHRzKSkgXG4iCi1ydW5fbW9kZWxzaW06ICQodGVzdF9pbmZvKQotCSQoTUFLRSkgLUMgJChyb290X2Rpcikvc2ltIGJ1aWxkX21vZGVsc2ltIFNJTV9DRkdfREVGPSQoU0lNX0NGR19ERUYpIFNJTV9UUkFDRV9ERUY9JChTSU1fVFJBQ0VfREVGKSBTSU1fQlVJTERfT1BUUz0kKFNJTV9CVUlMRF9PUFRTKTsgXAotCXByaW50ZiAiIiA+ICQodGVzdF9yZXN1bHRzKTsgXAotCWNkICQoYmxkX2Rpcik7IFwKLQl2c2ltIC1jIC1kbyAicnVuIC1hbGwiICtub3dhcm4zNjkxIFwKLQkrdGVzdF9pbmZvPSQodGVzdF9pbmZvKSBcCi0JK3Rlc3RfcmVzdWx0cz0kKHRlc3RfcmVzdWx0cykgXAotCStpbWVtX3BhdHRlcm49JChpbWVtX3BhdHRlcm4pIFwKLQkrZG1lbV9wYXR0ZXJuPSQoZG1lbV9wYXR0ZXJuKSBcCi0Jd29yay4kKHRvcF9tb2R1bGUpIFwKLQkkKE1PREVMU0lNX09QVFMpIHwgdGVlICQoc2ltX3Jlc3VsdHMpICA7XAotCXByaW50ZiAiU2ltdWxhdGlvbiBwZXJmb3JtZWQgb24gJCQodnNpbSAtdmVyc2lvbikgXG4iIDtcCi0JcHJpbnRmICIgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3QgICAgICAgICAgICAgICB8IGJ1aWxkIHwgc2ltdWxhdGlvbiBcbiIgOyBcCi0JcHJpbnRmICIkJChjYXQgJCh0ZXN0X3Jlc3VsdHMpKSBcbiIKLQotcnVuX25jc2ltOiAkKHRlc3RfaW5mbykKLQkkKE1BS0UpIC1DICQocm9vdF9kaXIpL3NpbSBidWlsZF9uY3NpbSBTSU1fQ0ZHX0RFRj0kKFNJTV9DRkdfREVGKSBTSU1fVFJBQ0VfREVGPSQoU0lNX1RSQUNFX0RFRikgU0lNX0JVSUxEX09QVFM9JChTSU1fQlVJTERfT1BUUyk7Ci0JcHJpbnRmICIiID4gJCh0ZXN0X3Jlc3VsdHMpOwotCWNkICQoYmxkX2Rpcik7IFwKLQlpcnVuIFwKLQktUiBcCi0JLTY0Yml0IFwKLQkrdGVzdF9pbmZvPSQodGVzdF9pbmZvKSBcCi0JK3Rlc3RfcmVzdWx0cz0kKHRlc3RfcmVzdWx0cykgXAotCStpbWVtX3BhdHRlcm49JChpbWVtX3BhdHRlcm4pIFwKLQkrZG1lbV9wYXR0ZXJuPSQoZG1lbV9wYXR0ZXJuKSBcCi0JJChOQ1NJTV9PUFRTKSB8IHRlZSAkKHNpbV9yZXN1bHRzKSAgO1wKLQlwcmludGYgIlNpbXVsYXRpb24gcGVyZm9ybWVkIG9uICQkKGlydW4gLXZlcnNpb24pIFxuIiA7XAotCXByaW50ZiAiICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0ICAgICAgICAgICAgICAgfCBidWlsZCB8IHNpbXVsYXRpb24gXG4iIDsgXAotCXByaW50ZiAiJCQoY2F0ICQodGVzdF9yZXN1bHRzKSkgXG4iCi0KLXJ1bl92ZXJpbGF0b3I6ICQodGVzdF9pbmZvKQotCSQoTUFLRSkgLUMgJChyb290X2Rpcikvc2ltIGJ1aWxkX3ZlcmlsYXRvciBTSU1fQ0ZHX0RFRj0kKFNJTV9DRkdfREVGKSBTSU1fVFJBQ0VfREVGPSQoU0lNX1RSQUNFX0RFRikgU0lNX0JVSUxEX09QVFM9JChTSU1fQlVJTERfT1BUUyk7Ci0JcHJpbnRmICIiID4gJCh0ZXN0X3Jlc3VsdHMpOwotCWNkICQoYmxkX2Rpcik7IFwKLQllY2hvICQodG9wX21vZHVsZSkgfCB0ZWUgJChzaW1fcmVzdWx0cyk7IFwKLQkkKGJsZF9kaXIpL3ZlcmlsYXRvci9WJCh0b3BfbW9kdWxlKSBcCi0JK3Rlc3RfaW5mbz0kKHRlc3RfaW5mbykgXAotCSt0ZXN0X3Jlc3VsdHM9JCh0ZXN0X3Jlc3VsdHMpIFwKLQkraW1lbV9wYXR0ZXJuPSQoaW1lbV9wYXR0ZXJuKSBcCi0JK2RtZW1fcGF0dGVybj0kKGRtZW1fcGF0dGVybikgXAotCSQoVkVSSUxBVE9SX09QVFMpIHwgdGVlIC1hICQoc2ltX3Jlc3VsdHMpIDtcCi0JcHJpbnRmICJTaW11bGF0aW9uIHBlcmZvcm1lZCBvbiAkJCh2ZXJpbGF0b3IgLXZlcnNpb24pIFxuIiA7XAotCXByaW50ZiAiICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0ICAgICAgICAgICAgICAgfCBidWlsZCB8IHNpbXVsYXRpb24gXG4iIDsgXAotCXByaW50ZiAiJCQoY2F0ICQodGVzdF9yZXN1bHRzKSkgXG4iCi0KLXJ1bl92ZXJpbGF0b3Jfd2Y6ICQodGVzdF9pbmZvKQotCSQoTUFLRSkgLUMgJChyb290X2Rpcikvc2ltIGJ1aWxkX3ZlcmlsYXRvcl93ZiBTSU1fQ0ZHX0RFRj0kKFNJTV9DRkdfREVGKSBTSU1fVFJBQ0VfREVGPSQoU0lNX1RSQUNFX0RFRikgU0lNX0JVSUxEX09QVFM9JChTSU1fQlVJTERfT1BUUyk7Ci0JcHJpbnRmICIiID4gJCh0ZXN0X3Jlc3VsdHMpOwotCWNkICQoYmxkX2Rpcik7IFwKLQllY2hvICQodG9wX21vZHVsZSkgfCB0ZWUgJChzaW1fcmVzdWx0cyk7IFwKLQkkKGJsZF9kaXIpL3ZlcmlsYXRvci9WJCh0b3BfbW9kdWxlKSBcCi0JK3Rlc3RfaW5mbz0kKHRlc3RfaW5mbykgXAotCSt0ZXN0X3Jlc3VsdHM9JCh0ZXN0X3Jlc3VsdHMpIFwKLQkraW1lbV9wYXR0ZXJuPSQoaW1lbV9wYXR0ZXJuKSBcCi0JK2RtZW1fcGF0dGVybj0kKGRtZW1fcGF0dGVybikgXAotCSQoVkVSSUxBVE9SX09QVFMpIHwgdGVlIC1hICQoc2ltX3Jlc3VsdHMpICA7XAotCXByaW50ZiAiU2ltdWxhdGlvbiBwZXJmb3JtZWQgb24gJCQodmVyaWxhdG9yIC12ZXJzaW9uKSBcbiIgO1wKLQlwcmludGYgIiAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdCAgICAgICAgICAgICAgIHwgYnVpbGQgfCBzaW11bGF0aW9uIFxuIiA7IFwKLQlwcmludGYgIiQkKGNhdCAkKHRlc3RfcmVzdWx0cykpIFxuIgotY2xlYW46Ci0JJChNQUtFKSAtQyAkKHRzdF9kaXIpL2JlbmNobWFya3MvZGhyeXN0b25lMjEgY2xlYW4KLQkkKE1BS0UpIC1DICQodHN0X2RpcikvcmlzY3ZfaXNhIGNsZWFuCi0JJChNQUtFKSAtQyAkKHRzdF9kaXIpL3Jpc2N2X2NvbXBsaWFuY2UgY2xlYW4KLQkkKFJNKSAtUiAkKHJvb3RfZGlyKS9idWlsZC8qCi0JJChSTSkgJCh0ZXN0X2luZm8pCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9SRUFETUUubWQgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9SRUFETUUubWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmYjY2NDguLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvUkVBRE1FLm1kCisrKyAvZGV2L251bGwKQEAgLTEsMTk3ICswLDAgQEAKLSMgU0NSMSBSSVNDLVYgQ29yZQotCi1TQ1IxIGlzIGFuIG9wZW4tc291cmNlIGFuZCBmcmVlIHRvIHVzZSBSSVNDLVYgY29tcGF0aWJsZSBNQ1UtY2xhc3MgY29yZSwgZGVzaWduZWQgYW5kIG1haW50YWluZWQgYnkgU3ludGFjb3JlLiBJdCBpcyBpbmR1c3RyeS1ncmFkZSBhbmQgc2lsaWNvbi1wcm92ZW4gKGluY2x1ZGluZyBmdWxsLXdhZmVyIHByb2R1Y3Rpb24pLCB3b3JrcyBvdXQgb2YgdGhlIGJveCBpbiBhbGwgbWFqb3IgRURBIGZsb3dzIGFuZCBWZXJpbGF0b3IsIGFuZCBjb21lcyB3aXRoIGV4dGVuc2l2ZSBjb2xsYXRlcmFsIGFuZCBkb2N1bWVudGF0aW9uLgotCi0hW1NDUjEgY2x1c3Rlcl0oLi9kb2NzL2ltZy9zY3IxX2NsdXN0ZXIuc3ZnKQotCi0jIyBLZXkgZmVhdHVyZXMKLQotKiBPcGVuIHNvdXJjZWQgdW5kZXIgU0hMLWxpY2Vuc2UgKHNlZSBMSUNFTlNFIGZpbGUpIC0gdW5yZXN0cmljdGVkIGNvbW1lcmNpYWwgdXNlIGFsbG93ZWQKLSogUlYzMkkgb3IgUlYzMkUgSVNBIGJhc2UgKyBvcHRpb25hbCBSVk0gYW5kIFJWQyBzdGFuZGFyZCBleHRlbnNpb25zCi0qIE1hY2hpbmUgcHJpdmlsZWdlIG1vZGUgb25seQotKiAyIHRvIDQgc3RhZ2UgcGlwZWxpbmUKLSogT3B0aW9uYWwgSW50ZWdyYXRlZCBQcm9ncmFtbWFibGUgSW50ZXJydXB0IENvbnRyb2xsZXIgd2l0aCAxNiBJUlEgbGluZXMKLSogT3B0aW9uYWwgUklTQy1WIERlYnVnIHN1YnN5c3RlbSB3aXRoIEpUQUcgaW50ZXJmYWNlCi0qIE9wdGlvbmFsIG9uLWNoaXAgVGlnaHRseS1Db3VwbGVkIE1lbW9yeQotKiAzMi1iaXQgQVhJNC9BSEItTGl0ZSBleHRlcm5hbCBpbnRlcmZhY2UKLSogV3JpdHRlbiBpbiBTeXN0ZW1WZXJpbG9nCi0qIE9wdGltaXplZCBmb3IgYXJlYSBhbmQgcG93ZXIKLSogMyBwcmVkZWZpbmVkIHJlY29tbWVuZGVkIGNvbmZpZ3VyYXRpb25zCi0qIEEgbnVtYmVyIG9mIGZpbmUtdHVuaW5nIG9wdGlvbnMgZm9yIGN1c3RvbSBjb25maWd1cmF0aW9uCi0qIFZlcmlmaWNhdGlvbiBzdWl0ZSBwcm92aWRlZAotKiBFeHRlbnNpdmUgZG9jdW1lbnRhdGlvbgotCi1Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjb3JlIGFyY2hpdGVjdHVyZSwgc2VlIFtTQ1IxIEV4dGVybmFsIEFyY2hpdGVjdHVyZSBTcGVjaWZpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vc3ludGFjb3JlL3NjcjEvYmxvYi9tYXN0ZXIvZG9jcy9zY3IxX2Vhcy5wZGYpLgotCi1Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwcm9qZWN0IHVzYWdlLCBzZWUgW1NDUjEgVXNlciBNYW51YWxdKGh0dHBzOi8vZ2l0aHViLmNvbS9zeW50YWNvcmUvc2NyMS9ibG9iL21hc3Rlci9kb2NzL3NjcjFfdW0ucGRmKS4KLQotIyMgUmVwb3NpdG9yeSBjb250ZW50cwotCi18Rm9sZGVyIHwgRGVzY3JpcHRpb24KLXwtLS0tLS0gfCAtLS0tLS0tLS0tLQotfCoqZGVwZW5kZW5jaWVzKiogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgIHwgKipEZXBlbmRlbnQgc3VibW9kdWxlcyoqCi184pSc4pSAIHJpc2N2LXRlc3RzIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICB8IENvbW1vbiBzb3VyY2UgZmlsZXMgZm9yIFJJU0MtViBJU0EgdGVzdHMKLXzilJzilIAgcmlzY3YtY29tcGxpYW5jZSDCoCDCoCDCoCDCoCDCoCDCoCDCoCB8IENvbW1vbiBzb3VyY2UgZmlsZXMgZm9yIFJJU0MtViBDb21wbGlhbmNlIHRlc3RzCi184pSU4pSAIGNvcmVtYXJrIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHwgQ29tbW9uIHNvdXJjZSBmaWxlcyBmb3IgRUVNQkMncyBDb3JlTWFya8KuIGJlbmNobWFyawotfCoqZG9jcyoqICAgICAgICAgICAgICAgICAgICAgICAgICB8ICoqU0NSMSBkb2N1bWVudGF0aW9uKioKLXzilJzilIAgc2NyMV9lYXMucGRmIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHwgU0NSMSBFeHRlcm5hbCBBcmNoaXRlY3R1cmUgU3BlY2lmaWNhdGlvbgotfOKUlOKUgCBzY3IxX3VtLnBkZiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAgfCBTQ1IxIFVzZXIgTWFudWFsCi18KipzaW0qKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKipUZXN0cyBhbmQgc2NyaXB0cyBmb3Igc2ltdWxhdGlvbioqCi184pSc4pSAIHRlc3RzL2NvbW1vbiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB8IENvbW1vbiBzb3VyY2UgZmlsZXMgZm9yIHRlc3RzCi184pSc4pSAIHRlc3RzL3Jpc2N2X2lzYSDCoCDCoCDCoCDCoCDCoCDCoCDCoCAgfCBSSVNDLVYgSVNBIHRlc3RzIHBsYXRmb3JtIHNwZWNpZmljIHNvdXJjZSBmaWxlcwotfOKUnOKUgCB0ZXN0cy9yaXNjdl9jb21wbGlhbmNlIMKgIMKgIMKgIMKgIHwgUklTQy1WIENvbXBsaWFuY2UgcGxhdGZvcm0gc3BlY2lmaWMgc291cmNlIGZpbGVzCi184pSc4pSAIHRlc3RzL2JlbmNobWFya3MvZGhyeXN0b25lMjEgwqAgfCBEaHJ5c3RvbmUgMi4xIGJlbmNobWFyayBzb3VyY2UgZmlsZXMKLXzilJzilIAgdGVzdHMvYmVuY2htYXJrcy9jb3JlbWFyayDCoCDCoCAgfCBFRU1CQydzIENvcmVNYXJrwq4gYmVuY2htYXJrIHBsYXRmb3JtIHNwZWNpZmljIHNvdXJjZSBmaWxlcwotfOKUnOKUgCB0ZXN0cy9pc3Jfc2FtcGxlIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHwgU2FtcGxlIHByb2dyYW0gIkludGVycnVwdCBTZXJ2aWNlIFJvdXRpbmUiCi184pSc4pSAIHRlc3RzL2hlbGxvICAgICAgICAgICAgICAgICAgICB8IFNhbXBsZSBwcm9ncmFtICJIZWxsbyIKLXzilJTilIAgdmVyaWxhdG9yX3dyYXAgICAgICAgICAgICAgICAgIHwgV3JhcHBlcnMgZm9yIFZlcmlsYXRvciBzaW11bGF0aW9uCi18KipzcmMqKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKipTQ1IxIFJUTCBzb3VyY2UgYW5kIHRlc3RiZW5jaCBmaWxlcyoqCi184pSc4pSAIGluY2x1ZGVzICAgICAgICAgICAgICAgICAgICAgICB8IEhlYWRlciBmaWxlcwotfOKUnOKUgCBjb3JlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDb3JlIHRvcCBzb3VyY2UgZmlsZXMKLXzilJzilIAgdG9wICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2x1c3RlciBzb3VyY2UgZmlsZXMKLXzilJTilIAgdGIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGVzdGJlbmNoIGZpbGVzCi0KLSMjIFNDUjEgc291cmNlIGZpbGUgbGlzdHMKLQotU0NSMSBzb3VyY2UgZmlsZSBsaXN0cyBvZiBTQ1IxIGNhbiBiZSBmb3VuZCBpbiBbLi9zcmNdKGh0dHBzOi8vZ2l0aHViLmNvbS9zeW50YWNvcmUvc2NyMS90cmVlL21hc3Rlci9zcmMpOgotCi0qICoqY29yZS5maWxlcyoqICAgIC0gYWxsIHN5bnRoZXNpemVkIGZpbGUgc291cmNlcyBvZiB0aGUgU0NSMSBjb3JlCi0qICoqYWhiX3RvcC5maWxlcyoqIC0gc3ludGhlc2l6ZWQgZmlsZSBzb3VyY2VzIG9mIEFIQiBjbHVzdGVyCi0qICoqYXhpX3RvcC5maWxlcyoqIC0gc3ludGhlc2l6ZWQgZmlsZSBzb3VyY2VzIG9mIEFYSSBjbHVzdGVyCi0qICoqYWhiX3RiLmZpbGVzKiogIC0gdGVzdGJlbmNoIGZpbGUgc291cmNlcyBmb3IgQUhCIGNsdXN0ZXIgKGZvciBzaW11bGF0aW9uIG9ubHkpCi0qICoqYXhpX3RiLmZpbGVzKiogIC0gdGVzdGJlbmNoIGZpbGUgc291cmNlcyBmb3IgQVhJIGNsdXN0ZXIgKGZvciBzaW11bGF0aW9uIG9ubHkpCi0KLUxpYnJhcnkgd2l0aCBoZWFkZXIgZmlsZXMgdG8gaW5jbHVkZSBpcyBbLi9zcmMvaW5jbHVkZXMvXShodHRwczovL2dpdGh1Yi5jb20vc3ludGFjb3JlL3NjcjEvdHJlZS9tYXN0ZXIvc3JjL2luY2x1ZGVzKQotCi0jIyBTaW11bGF0aW9uIHF1aWNrIHN0YXJ0IGd1aWRlCi0KLVRoZSBwcm9qZWN0IGNvbnRhaW5zIHRlc3RiZW5jaGVzLCB0ZXN0IHNvdXJjZXMgYW5kIHNjcmlwdHMgdG8gcXVpY2tseSBzdGFydCB0aGUgU0NSMSBzaW11bGF0aW9uLiBCZWZvcmUgc3RhcnRpbmcgdGhlIHNpbXVsYXRpb24sIG1ha2Ugc3VyZSB5b3UgaGF2ZToKLQotKiBpbnN0YWxsZWQgUklTQy1WIEdDQyB0b29sY2hhaW4sCi0qIGluc3RhbGxlZCBvbmUgb2YgdGhlIHN1cHBvcnRlZCBzaW11bGF0b3JzLAotKiBpbml0aWFsaXplZCBzdWJtb2R1bGVzIHdpdGggdGVzdCBzb3VyY2VzLgotCi0jIyMgUmVxdWlyZW1lbnRzCi0KLSMjIyMgT3BlcmF0aW5nIHN5c3RlbQotCi1HQ0MgdG9vbGNoYWluIGFuZCBtYWtlLXNjcmlwdHMgYXJlIHN1cHBvcnRlZCBieSBtb3N0IHBvcHVsYXIgTGludXgtbGlrZSBvcGVyYXRpbmcgc3lzdGVtcy4KLQotVG8gcnVuIGZyb20gV2luZG93cyB5b3UgY2FuIHVzZSBhbiBhZGRpdGlvbmFsIGNvbXBhdGliaWxpdHkgbGF5ZXIsIHN1Y2ggYXMgV1NMIG9yIEN5Z3dpbi4KLQotIyMjIyBSSVNDLVYgR0NDIHRvb2xjaGFpbgotCi1SSVNDLVYgR0NDIHRvb2xjaGFpbiBpcyByZXF1aXJlZCB0byBjb21waWxlIHRoZSBzb2Z0d2FyZS4gWW91IGNhbiB1c2UgcHJlLWJ1aWx0IGJpbmFyaWVzIG9yIGJ1aWxkIHRoZSB0b29sY2hhaW4gZnJvbSBzY3JhdGNoLgotCi0jIyMjIyBVc2luZyBwcmUtYnVpbHQgYmluYXJ5IHRvb2xzCi0KLVByZS1idWlsdCBSSVNDLVYgR0NDIHRvb2xjaGFpbiB3aXRoIHN1cHBvcnQgZm9yIGFsbCBTQ1IxIGFyY2hpdGVjdHVyYWwgY29uZmlndXJhdGlvbnMgaXMgYXZhaWxhYmxlIGZvciBkb3dubG9hZCBmcm9tIGh0dHA6Ly9zeW50YWNvcmUuY29tL3BhZ2UvcHJvZHVjdHMvc3ctdG9vbHMuCi0KLTEuIERvd25sb2FkIHRoZSBhcmNoaXZlIGZvciB5b3VyIHBsYXRmb3JtLgotMi4gRXh0cmFjdCB0aGUgYXJjaGl2ZSB0byBwcmVmZXJyZWQgZGlyZWN0b3J5IGA8R0NDX0lOU1RBTExfUEFUSD5gLgotMy4gQWRkIHRoZSBgPEdDQ19JTlNUQUxMX1BBVEg+L2JpbmAgZm9sZGVyIHRvIHRoZSAkUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZToKLWBgYAotICAgIGV4cG9ydCBQQVRIPTxHQ0NfSU5TVEFMTF9QQVRIPi9iaW46JFBBVEgKLWBgYAotCi0jIyMjIyBCdWlsZGluZyB0b29scyBmcm9tIHNvdXJjZQotCi1Zb3UgY2FuIGJ1aWxkIHRoZSBSSVNDLVYgR0NDIHRvb2xjaGFpbiBmcm9tIHNvdXJjZXMsIHN0b3JlZCBpbiBvZmZpY2lhbCByZXBvIGh0dHBzOi8vZ2l0aHViLmNvbS9yaXNjdi9yaXNjdi1nbnUtdG9vbGNoYWluCi0KLUluc3RydWN0aW9ucyBvbiBob3cgdG8gcHJlcGFyZSBhbmQgYnVpbGQgdGhlIHRvb2xjaGFpbiBjYW4gYmUgZm91bmQgb24gaHR0cHM6Ly9naXRodWIuY29tL3Jpc2N2L3Jpc2N2LWdudS10b29sY2hhaW4vYmxvYi9tYXN0ZXIvUkVBRE1FLm1kCi0KLVdlIHJlY29tbWVuZCB1c2luZyB0aGUgbXVsdGlsaWIgY29tcGlsZXIuIFBsZWFzZSBub3RlIHRoYXQgUlYzMklDLCBSVjMyRSwgUlYzMkVNLCBSVjMyRU1DLCBSVjMyRUMgYXJjaGl0ZWN0dXJhbCBjb25maWd1cmF0aW9ucyBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSBjb21waWxlciBieSBkZWZhdWx0LiBJZiB5b3UgcGxhbiB0byB1c2UgdGhlbSwgeW91IHdpbGwgbmVlZCB0byBpbmNsdWRlIHRoZSBhcHByb3ByaWF0ZSBsaWJyYXJpZXMgYnkgeW91cnNlbGYgYmVmb3JlIGJ1aWxkaW5nLgotCi1BZnRlciB0aGUgYnVpbGRpbmcsIGJlIHN1cmUgdG8gYWRkIHRoZSBgPEdDQ19JTlNUQUxMX1BBVEg+L2JpbmAgZm9sZGVyIHRvIHRoZSAkUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZQotCi0KLSMjIyMgSERMIHNpbXVsYXRvcnMKLQotQ3VycmVudGx5IHN1cHBvcnRlZCBzaW11bGF0b3JzOgotCi0qIFZlcmlsYXRvciAobGFzdCB2ZXJpZmllZCB2ZXJzaW9uOiB2NC4xMDIpCi0qIEludGVsIE1vZGVsU2ltIChsYXN0IHZlcmlmaWVkIHZlcnNpb246IElOVEVMIEZQR0EgU1RBUlRFUiBFRElUSU9OIHZzaW0gMjAyMC4xXzMpCi0qIE1lbnRvciBHcmFwaGljcyBNb2RlbFNpbSAobGFzdCB2ZXJpZmllZCB2ZXJzaW9uOiBNb2RlbHNpbSBQRSBTdHVkZW50IEVkaXRpb24gMTAuNGEpCi0qIFN5bm9wc3lzIFZDUyAobGFzdCB2ZXJpZmllZCB2ZXJzaW9uOiB2Y3MtbXhfdkwtMjAxNi4wNikKLSogQ2FkZW5jZSBOQ1NpbQotCi1QbGVhc2Ugbm90ZSB0aGF0IFJUTCBzaW11bGF0b3IgZXhlY3V0YWJsZXMgc2hvdWxkIGJlIGluIHlvdXIgJFBBVEggdmFyaWFibGUuCi0KLSMjIyMgVGVzdHMgcHJlcGFyYXRpb24KLQotVGhlIHNpbXVsYXRpb24gcGFja2FnZSBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIHRlc3RzOgotCi0qICoqaGVsbG8qKiAtICJIZWxsbyIgc2FtcGxlIHByb2dyYW0KLSogKippc3Jfc2FtcGxlKiogLSAiSW50ZXJydXB0IFNlcnZpY2UgUm91dGluZSIgc2FtcGxlIHByb2dyYW0KLSogKipyaXNjdl9pc2EqKiAtIFJJU0MtViBJU0EgdGVzdHMgKHN1Ym1vZHVsZSkKLSogKipyaXNjdl9jb21wbGlhbmNlKiogLSBSSVNDLVYgQ29tcGxpYW5jZSB0ZXN0cyAoc3VibW9kdWxlKQotKiAqKmRocnlzdG9uZTIxKiogLSBEaHJ5c3RvbmUgMi4xIGJlbmNobWFyawotKiAqKmNvcmVtYXJrKiogLSBFRU1CQydzIENvcmVNYXJrwq4gYmVuY2htYXJrIChzdWJtb2R1bGUpCi0KLUFmdGVyIHRoZSBtYWluIFNDUjEgcmVwb3NpdG9yeSBoYXMgYmVlbiBjbG9uZWQgZXhlY3V0ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6Ci1gYGAKLSAgICBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgLS1yZWN1cnNpdmUKLWBgYAotCi1UaGlzIGNvbW1hbmQgd2lsbCBpbml0aWFsaXplZCBzdWJtb2R1bGVzIHdpdGggdGVzdCBzb3VyY2VzLgotCi0jIyMgUnVubmluZyBzaW11bGF0aW9uCi0KLVRvIGJ1aWxkIFJUTCwgY29tcGlsZSBhbmQgcnVuIHRlc3RzIGZyb20gdGhlIHJlcG8gcm9vdCBmb2xkZXIgeW91IGhhdmUgdG8gY2FsbCBNYWtlZmlsZS4KLUJ5IGRlZmF1bHQsIHlvdSBtYXkgc2ltcGx5IGNhbGwgTWFrZWZpbGUgd2l0aG91dCBhbnkgcGFyYW1ldGVyczoKLWBgYCBzaAotIMKgIMKgbWFrZQotYGBgCi0KLUluIHRoaXMgY2FzZSBzaW11bGF0aW9uIHdpbGwgcnVuIG9uIFZlcmlsYXRvciB3aXRoIGZvbGxvd2luZyBwYXJhbWV0ZXJzOiBgQ0ZHPU1BWCBCVVM9QUhCIFRSQUNFPTAgVEFSR0VUUz0iaGVsbG8gaXNyX3NhbXBsZSByaXNjdl9pc2EgcmlzY3ZfY29tcGxpYW5jZSBkaHJ5c3RvbmUyMSBjb3JlbWFyayJgLgotCi1NYWtlZmlsZSBzdXBwb3J0czoKLQotKiBjaG9pY2Ugb2Ygc2ltdWxhdG9yIC0gYHJ1bl88U0lNVUxBVE9SPiA9IDxydW5fdmNzLCBydW5fbW9kZWxzaW0sIHJ1bl9uY3NpbSwgcnVuX3ZlcmlsYXRvciwgcnVuX3ZlcmlsYXRvcl93Zj5gCi0qIHNlbGVjdGlvbiBvZiBleHRlcm5hbCBpbnRlcmZhY2UgLSBgQlVTID0gPEFIQiwgQVhJPmAsCi0qIGNvbmZpZ3VyYXRpb24gc2V0dXAgLSBgQ0ZHID0gPE1BWCwgQkFTRSwgTUlOLCBDVVNUT00+YCwKLSogcGFyYW1ldGVycyBmb3IgQ1VTVE9NIGNvbmZpZ3VyYXRpb24gLSBgQVJDSCA9IDxJTUMsIElDLCBJTSwgSSwgRU1DLCBFTSwgRUMsIEU+LCBWRUNUX0lSUSA9IDwwLCAxPiwgSVBJQyA9IDwwLCAxPiwgVENNID0gPDAsIDE+YAotKiB0ZXN0cyBzdWJzZXQgdG8gcnVuIC0gYFRBUkdFVFMgPSA8aGVsbG8sIGlzcl9zYW1wbGUsIHJpc2N2X2lzYSwgcmlzY3ZfY29tcGxpYW5jZSwgZGhyeXN0b25lMjEsIGNvcmVtYXJrPmAKLSogZW5hYmxpbmcgdHJhY2Vsb2cgLSBgVFJBQ0UgPSA8MCwgMT5gCi0qIGFuZCBhbnkgYWRkaXRpb25hbCBvcHRpb25zIHRvIHBhc3MgdG8gdGhlIHNpbXVsYXRvciAtIGBTSU1fQlVJTERfT1BUU2AuCi0KLUV4YW1wbGVzOgotYGBgIHNoCi0gwqAgwqBtYWtlIHJ1bl92ZXJpbGF0b3Jfd2YgQ0ZHPU1BWCBCVVM9QVhJIFRBUkdFVFM9InJpc2N2X2lzYSByaXNjdl9jb21wbGlhbmNlIiBUUkFDRT0xCi0gwqAgwqBtYWtlIHJ1bl92Y3MgQ0ZHPUJBU0UgQlVTPUFIQiBUQVJHRVRTPSJkaHJ5c3RvbmUyMSBjb3JlbWFyayIgU0lNX0JVSUxEX09QVFM9Ii1ndWkiCi0gwqAgwqBtYWtlIHJ1bl9tb2RlbHNpbSBDRkc9Q1VTVE9NIEJVUz1BWEkgQVJDSD1JIFZFQ1RfSVJRPTEgSVBJQz0xIFRDTT0wIFRBUkdFVFM9aXNyX3NhbXBsZQotYGBgCi0KLUJ1aWxkIGFuZCBydW4gcGFyYW1ldGVycyBjYW4gYmUgY29uZmlndXJlZCBpbiB0aGUgYC4vTWFrZWZpbGVgLgotCi1BZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgZmluaXNoZWQsIHRoZSByZXN1bHRzIGNhbiBiZSBmb3VuZCBpbiBgYnVpbGQvPFNJTV9DRkc+L3Rlc3RfcmVzdWx0cy50eHRgLgotCi0qKklNUE9SVEFOVDoqKiBUbyBlbnN1cmUgY29ycmVjdCByZWJ1aWxkLCBwbGVhc2UgY2xlYW4gYnVpbGQgZGlyZWN0b3J5IGJldHdlZW4gc2ltdWxhdGlvbiBydW5zOgotYGBgIHNoCi0gwqAgIG1ha2UgY2xlYW4KLWBgYAotCi1QbGVhc2UgcmVmZXIgdG8gdGhlICoiU2ltdWxhdGlvbiBlbnZpcm9ubWVudCIqIGNoYXB0ZXIgb2YgdGhlIFtTQ1IxIFVzZXIgTWFudWFsXShodHRwczovL2dpdGh1Yi5jb20vc3ludGFjb3JlL3NjcjEvYmxvYi9tYXN0ZXIvZG9jcy9zY3IxX3VtLnBkZikgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gc2V0dGluZyB1cCBhIHNpbXVsYXRpb24gcnVuLgotCi0jIyBTQ1IxIFNES3MKLQotRlBHQS1iYXNlZCBTREtzIGFyZSBhdmFpbGFibGUgYXQgdGhlIDxodHRwczovL2dpdGh1Yi5jb20vc3ludGFjb3JlL3NjcjEtc2RrPi4KLQotUmVwbyBjb250YWluczoKLQotKiBQcmUtYnVpbGQgaW1hZ2VzIGFuZCBvcGVuIGRlc2lnbnMgZm9yIHNldmVyYWwgc3RhbmRhcmQgRlBHQXMgYm9hcmRzOgotICAqIERpZ2lsZW50IEFydHkgKFhpbGlueCkKLSAgKiBEaWdpbGVudCBOZXh5cyA0IEREUiAoWGlsaW54KQotICAqIEFycmlhIFYgR1ggU3RhcnRlciAoSW50ZWwpCi0gICogVGVyYXNpYyBERTEwLUxpdGUgKEludGVsKQotKiBTb2Z0d2FyZSBwYWNrYWdlOgotICAqIEJvb3Rsb2FkZXIKLSAgKiBaZXBoeXIgUlRPUwotICAqIFRlc3RzXFNXIHNhbXBsZXMKLSogVXNlciBHdWlkZXMgZm9yIFNES3MgYW5kIHRvb2xzCi0KLSMjIENvbnRhY3RzCi0KLVJlcG9ydCBhbiBpc3N1ZTogPGh0dHBzOi8vZ2l0aHViLmNvbS9zeW50YWNvcmUvc2NyMS9pc3N1ZXM+Ci0KLUFzayBhIHF1ZXN0aW9uOiBzY3IxQHN5bnRhY29yZS5jb20KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL2RvY3MvaW1nL3NjcjFfY2x1c3Rlci5zdmcgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9kb2NzL2ltZy9zY3IxX2NsdXN0ZXIuc3ZnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWFmMjM4Li4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL2RvY3MvaW1nL3NjcjFfY2x1c3Rlci5zdmcKKysrIC9kZXYvbnVsbApAQCAtMSw2MTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQotPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCi08IS0tINCh0L7Qt9C00LDQvdC+IE1pY3Jvc29mdCBWaXNpbywg0Y3QutGB0L/QvtGA0YIgU1ZHIHNjcjFfY2x1c3Rlci5zdmcgc2NyMV9jbHVzdGVyIC0tPg0KLTxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6ZXY9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLWV2ZW50cyINCi0JCXhtbG5zOnY9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vdmlzaW8vMjAwMy9TVkdFeHRlbnNpb25zLyIgd2lkdGg9IjUuNzM5NThpbiIgaGVpZ2h0PSI1LjExNDU4aW4iDQotCQl2aWV3Qm94PSIwIDAgNDEzLjI1IDM2OC4yNSIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIiBjbGFzcz0ic3QxMiI+DQotCTx2OmRvY3VtZW50UHJvcGVydGllcyB2OmxhbmdJRD0iMjA1NyIgdjp2aWV3TWFya3VwPSJmYWxzZSIvPg0KLQ0KLQk8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KLQk8IVtDREFUQVsNCi0JCS5zdDEge2ZpbGw6I2RjZWRmYTtzdHJva2U6IzI0Mzc0MDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS13aWR0aDowLjc1fQ0KLQkJLnN0MiB7ZmlsbDojYjFkZGYwO3N0cm9rZTojMjQzNzQwO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLXdpZHRoOjAuNzV9DQotCQkuc3QzIHtmaWxsOiNiMGUzZTY7c3Ryb2tlOiMyNDM3NDA7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2Utd2lkdGg6MC43NX0NCi0JCS5zdDQge2ZpbGw6bm9uZX0NCi0JCS5zdDUge3N0cm9rZTojMjQzNzQwO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLXdpZHRoOjEuNX0NCi0JCS5zdDYge2ZpbGw6IzI0Mzc0MDtzdHJva2U6IzI0Mzc0MDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS13aWR0aDoxLjV9DQotCQkuc3Q3IHtmaWxsOm5vbmU7c3Ryb2tlOm5vbmU7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2Utd2lkdGg6MC43NX0NCi0JCS5zdDgge2ZpbGw6IzI0Mzc0MDtmb250LWZhbWlseTpDYWxpYnJpO2ZvbnQtc2l6ZTowLjc1ZW07Zm9udC13ZWlnaHQ6Ym9sZH0NCi0JCS5zdDkge2ZpbGw6IzI0Mzc0MDtmb250LWZhbWlseTpDYWxpYnJpO2ZvbnQtc2l6ZTowLjgzMzMzNmVtO2ZvbnQtd2VpZ2h0OmJvbGR9DQotCQkuc3QxMCB7ZmlsbDojMGMwYzBjO2ZvbnQtZmFtaWx5OkNhbGlicmk7Zm9udC1zaXplOjAuODMzMzM2ZW07Zm9udC13ZWlnaHQ6Ym9sZH0NCi0JCS5zdDExIHtmb250LXNpemU6MWVtfQ0KLQkJLnN0MTIge2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtmb250LXNpemU6MTJweDtvdmVyZmxvdzp2aXNpYmxlO3N0cm9rZS1saW5lY2FwOnNxdWFyZTtzdHJva2UtbWl0ZXJsaW1pdDozfQ0KLQldXT4NCi0JPC9zdHlsZT4NCi0NCi0JPGcgdjptSUQ9IjAiIHY6aW5kZXg9IjEiIHY6Z3JvdXBDb250ZXh0PSJmb3JlZ3JvdW5kUGFnZSI+DQotCQk8dGl0bGU+c2NyMV9jbHVzdGVyPC90aXRsZT4NCi0JCTx2OnBhZ2VQcm9wZXJ0aWVzIHY6ZHJhd2luZ1NjYWxlPSIxIiB2OnBhZ2VTY2FsZT0iMSIgdjpkcmF3aW5nVW5pdHM9IjE5IiB2OnNoYWRvd09mZnNldFg9IjkiIHY6c2hhZG93T2Zmc2V0WT0iLTkiLz4NCi0JCTxnIGlkPSJzaGFwZTItMSIgdjptSUQ9IjIiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNjAuMzc1LC0zMC4zNzUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuMjwvdGl0bGU+DQotCQkJPHBhdGggZD0iTTAgMzU2LjU1IEExMS43MDAzIDExLjcwMDMgLTE4MCAwIDAgMTEuNyAzNjguMjUgTDI4MC44IDM2OC4yNSBBMTEuNzAwMyAxMS43MDAzIC0xODAgMCAwIDI5Mi41IDM1Ni41NSBMMjkyLjUNCi0JCQkJCQkgNDIuNDUgQTExLjcwMDMgMTEuNzAwMyAtMTgwIDAgMCAyODAuOCAzMC43NSBMMTEuNyAzMC43NSBBMTEuNzAwMyAxMS43MDAzIC0xODAgMCAwIDAgNDIuNDUgTDAgMzU2LjU1IFoiDQotCQkJCQljbGFzcz0ic3QxIi8+DQotCQk8L2c+DQotCQk8ZyBpZD0ic2hhcGUzLTMiIHY6bUlEPSIzIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDY3Ljg3NSwtMjEwLjM3NSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi4zPC90aXRsZT4NCi0JCQk8cGF0aCBkPSJNMCAzNjIuODUgQTUuNDAwMTMgNS40MDAxMyAtMTgwIDAgMCA1LjQgMzY4LjI1IEwyNzIuMSAzNjguMjUgQTUuNDAwMTMgNS40MDAxMyAtMTgwIDAgMCAyNzcuNSAzNjIuODUgTDI3Ny41IDIzOC42NQ0KLQkJCQkJCSBBNS40MDAxMyA1LjQwMDEzIC0xODAgMCAwIDI3Mi4xIDIzMy4yNSBMNS40IDIzMy4yNSBBNS40MDAxMyA1LjQwMDEzIC0xODAgMCAwIDAgMjM4LjY1IEwwIDM2Mi44NSBaIg0KLQkJCQkJY2xhc3M9InN0MiIvPg0KLQkJPC9nPg0KLQkJPGcgaWQ9InNoYXBlNC01IiB2Om1JRD0iNCIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3NS4zNzUsLTIxNy44NzUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuNDwvdGl0bGU+DQotCQkJPHBhdGggZD0iTTAgMzYzLjc1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIDQuNSAzNjguMjUgTDU1LjUgMzY4LjI1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIDYwIDM2My43NSBMNjAgMzQyLjc1IEE0LjUwMDENCi0JCQkJCQkgNC41MDAxIC0xODAgMCAwIDU1LjUgMzM4LjI1IEw0LjUgMzM4LjI1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIDAgMzQyLjc1IEwwIDM2My43NSBaIiBjbGFzcz0ic3QzIi8+DQotCQk8L2c+DQotCQk8ZyBpZD0ic2hhcGU1LTciIHY6bUlEPSI1IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE0Mi44NzUsLTIxNy44NzUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuNTwvdGl0bGU+DQotCQkJPHBhdGggZD0iTTAgMzYzLjc1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIDQuNSAzNjguMjUgTDU1LjUgMzY4LjI1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIDYwIDM2My43NSBMNjAgMzQyLjc1IEE0LjUwMDENCi0JCQkJCQkgNC41MDAxIC0xODAgMCAwIDU1LjUgMzM4LjI1IEw0LjUgMzM4LjI1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIDAgMzQyLjc1IEwwIDM2My43NSBaIiBjbGFzcz0ic3QzIi8+DQotCQk8L2c+DQotCQk8ZyBpZD0ic2hhcGU2LTkiIHY6bUlEPSI2IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIxMC4zNzUsLTIxNy44NzUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuNjwvdGl0bGU+DQotCQkJPHBhdGggZD0iTTAgMzYzLjc1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIDQuNSAzNjguMjUgTDU1LjUgMzY4LjI1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIDYwIDM2My43NSBMNjAgMzQyLjc1IEE0LjUwMDENCi0JCQkJCQkgNC41MDAxIC0xODAgMCAwIDU1LjUgMzM4LjI1IEw0LjUgMzM4LjI1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIDAgMzQyLjc1IEwwIDM2My43NSBaIiBjbGFzcz0ic3QzIi8+DQotCQk8L2c+DQotCQk8ZyBpZD0ic2hhcGU3LTExIiB2Om1JRD0iNyIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzcuODc1LC0yMTcuODc1KSI+DQotCQkJPHRpdGxlPtCb0LjRgdGCLjc8L3RpdGxlPg0KLQkJCTxwYXRoIGQ9Ik0wIDM2My43NSBBNC41MDAxIDQuNTAwMSAtMTgwIDAgMCA0LjUgMzY4LjI1IEw1NS41IDM2OC4yNSBBNC41MDAxIDQuNTAwMSAtMTgwIDAgMCA2MCAzNjMuNzUgTDYwIDM0Mi43NSBBNC41MDAxDQotCQkJCQkJIDQuNTAwMSAtMTgwIDAgMCA1NS41IDMzOC4yNSBMNC41IDMzOC4yNSBBNC41MDAxIDQuNTAwMSAtMTgwIDAgMCAwIDM0Mi43NSBMMCAzNjMuNzUgWiIgY2xhc3M9InN0MyIvPg0KLQkJPC9nPg0KLQkJPGcgaWQ9InNoYXBlOC0xMyIgdjptSUQ9IjgiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTQyLjg3NSwtMjU1LjM3NSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi44PC90aXRsZT4NCi0JCQk8cGF0aCBkPSJNMCAzNjMuNzUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgNC41IDM2OC4yNSBMNTUuNSAzNjguMjUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgNjAgMzYzLjc1IEw2MCAzNDIuNzUgQTQuNTAwMQ0KLQkJCQkJCSA0LjUwMDEgLTE4MCAwIDAgNTUuNSAzMzguMjUgTDQuNSAzMzguMjUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgMCAzNDIuNzUgTDAgMzYzLjc1IFoiIGNsYXNzPSJzdDMiLz4NCi0JCTwvZz4NCi0JCTxnIGlkPSJzaGFwZTktMTUiIHY6bUlEPSI5IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDc1LjM3NSwtMjU1LjM3NSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi45PC90aXRsZT4NCi0JCQk8cGF0aCBkPSJNMCAzNjMuNzUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgNC41IDM2OC4yNSBMNTUuNSAzNjguMjUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgNjAgMzYzLjc1IEw2MCAzNDIuNzUgQTQuNTAwMQ0KLQkJCQkJCSA0LjUwMDEgLTE4MCAwIDAgNTUuNSAzMzguMjUgTDQuNSAzMzguMjUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgMCAzNDIuNzUgTDAgMzYzLjc1IFoiIGNsYXNzPSJzdDMiLz4NCi0JCTwvZz4NCi0JCTxnIGlkPSJzaGFwZTEwLTE3IiB2Om1JRD0iMTAiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjEwLjM3NSwtMjU1LjM3NSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi4xMDwvdGl0bGU+DQotCQkJPHBhdGggZD0iTTAgMzYzLjc1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIDQuNSAzNjguMjUgTDU1LjUgMzY4LjI1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIDYwIDM2My43NSBMNjAgMzQyLjc1IEE0LjUwMDENCi0JCQkJCQkgNC41MDAxIC0xODAgMCAwIDU1LjUgMzM4LjI1IEw0LjUgMzM4LjI1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIDAgMzQyLjc1IEwwIDM2My43NSBaIiBjbGFzcz0ic3QzIi8+DQotCQk8L2c+DQotCQk8ZyBpZD0ic2hhcGUxMS0xOSIgdjptSUQ9IjExIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDUyLjMwNSwtMzA3LjYzNSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi4xMTwvdGl0bGU+DQotCQkJPHBhdGggZD0iTTE2LjE0IDM2OC4wMSBMOC4wNyAzNjguMDEgTDguMDcgMzY4LjIzIEwwIDM2OC4yNSBMMTYuMTQgMzY4LjAxIFoiIGNsYXNzPSJzdDQiLz4NCi0JCQk8cGF0aCBkPSJNMTYuMTQgMzY4LjAxIEw4LjA3IDM2OC4wMSBMOC4wNyAzNjguMjMgTDAgMzY4LjI1IiBjbGFzcz0ic3Q1Ii8+DQotCQk8L2c+DQotCQk8ZyBpZD0ic2hhcGUxMi0yMiIgdjptSUQ9IjEyIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDY4LjQ0NSwtMzA1LjI1KSI+DQotCQkJPHRpdGxlPtCb0LjRgdGCLjEyPC90aXRsZT4NCi0JCQk8cGF0aCBkPSJNNS4yNSAzNjUuNjIgTDAgMzY4LjI1IEwwIDM2MyBMNS4yNSAzNjUuNjIgWiIgY2xhc3M9InN0NiIvPg0KLQkJPC9nPg0KLQkJPGcgaWQ9InNoYXBlMTMtMjQiIHY6bUlEPSIxMyIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg0Ny4wNTUsLTMwNS4wMSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi4xMzwvdGl0bGU+DQotCQkJPHBhdGggZD0iTTAgMzY1LjYzIEw1LjI0IDM2MyBMNS4yNSAzNjguMjUgTDAgMzY1LjYzIFoiIGNsYXNzPSJzdDYiLz4NCi0JCTwvZz4NCi0JCTxnIGlkPSJzaGFwZTE0LTI2IiB2Om1JRD0iMTQiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNzUuMzc1LC0yOTIuODc1KSI+DQotCQkJPHRpdGxlPtCb0LjRgdGCLjE0PC90aXRsZT4NCi0JCQk8cGF0aCBkPSJNMCAzNjMuNzUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgNC41IDM2OC4yNSBMNTUuNSAzNjguMjUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgNjAgMzYzLjc1IEw2MCAzNDIuNzUgQTQuNTAwMQ0KLQkJCQkJCSA0LjUwMDEgLTE4MCAwIDAgNTUuNSAzMzguMjUgTDQuNSAzMzguMjUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgLTAgMzQyLjc1IEwwIDM2My43NSBaIiBjbGFzcz0ic3QzIi8+DQotCQk8L2c+DQotCQk8ZyBpZD0ic2hhcGUxNS0yOCIgdjptSUQ9IjE1IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI3Ny44NzUsLTI1NS4zNzUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuMTU8L3RpdGxlPg0KLQkJCTxwYXRoIGQ9Ik0wIDM2My43NSBBNC41MDAxIDQuNTAwMSAtMTgwIDAgMCA0LjUgMzY4LjI1IEw1NS41IDM2OC4yNSBBNC41MDAxIDQuNTAwMSAtMTgwIDAgMCA2MCAzNjMuNzUgTDYwIDM0Mi43NSBBNC41MDAxDQotCQkJCQkJIDQuNTAwMSAtMTgwIDAgMCA1NS41IDMzOC4yNSBMNC41IDMzOC4yNSBBNC41MDAxIDQuNTAwMSAtMTgwIDAgMCAwIDM0Mi43NSBMMCAzNjMuNzUgWiIgY2xhc3M9InN0MyIvPg0KLQkJPC9nPg0KLQkJPGcgaWQ9InNoYXBlMTYtMzAiIHY6bUlEPSIxNiIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNDIuODc1LC0yOTIuODc1KSI+DQotCQkJPHRpdGxlPtCb0LjRgdGCLjE2PC90aXRsZT4NCi0JCQk8cGF0aCBkPSJNMCAzNjMuNzUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgNC41IDM2OC4yNSBMNTUuNSAzNjguMjUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgNjAgMzYzLjc1IEw2MCAzNDIuNzUgQTQuNTAwMQ0KLQkJCQkJCSA0LjUwMDEgLTE4MCAwIDAgNTUuNSAzMzguMjUgTDQuNSAzMzguMjUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgLTAgMzQyLjc1IEwwIDM2My43NSBaIiBjbGFzcz0ic3QzIi8+DQotCQk8L2c+DQotCQk8ZyBpZD0ic2hhcGUxNy0zMiIgdjptSUQ9IjE3IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM0NC44MDUsLTMwNy42MzUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuMTc8L3RpdGxlPg0KLQkJCTxwYXRoIGQ9Ik0wIDM2OC4wMSBMOC4wNyAzNjguMDEgTDguMDcgMzY4LjIzIEwxNi4xNCAzNjguMjUgTDAgMzY4LjAxIFoiIGNsYXNzPSJzdDQiLz4NCi0JCQk8cGF0aCBkPSJNMCAzNjguMDEgTDguMDcgMzY4LjAxIEw4LjA3IDM2OC4yMyBMMTYuMTQgMzY4LjI1IiBjbGFzcz0ic3Q1Ii8+DQotCQk8L2c+DQotCQk8ZyBpZD0ic2hhcGUxOC0zNSIgdjptSUQ9IjE4IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMzOS41NTUsLTMwNS4yNSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi4xODwvdGl0bGU+DQotCQkJPHBhdGggZD0iTTAgMzY1LjYyIEw1LjI1IDM2MyBMNS4yNSAzNjguMjUgTDAgMzY1LjYyIFoiIGNsYXNzPSJzdDYiLz4NCi0JCTwvZz4NCi0JCTxnIGlkPSJzaGFwZTE5LTM3IiB2Om1JRD0iMTkiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzYwLjk0NSwtMzA1LjAxKSI+DQotCQkJPHRpdGxlPtCb0LjRgdGCLjE5PC90aXRsZT4NCi0JCQk8cGF0aCBkPSJNNS4yNSAzNjUuNjMgTDAgMzY4LjI1IEwwLjAxIDM2MyBMNS4yNSAzNjUuNjMgWiIgY2xhc3M9InN0NiIvPg0KLQkJPC9nPg0KLQkJPGcgaWQ9InNoYXBlMjAtMzkiIHY6bUlEPSIyMCIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzcuODc1LC0yOTIuODc1KSI+DQotCQkJPHRpdGxlPtCb0LjRgdGCLjIwPC90aXRsZT4NCi0JCQk8cGF0aCBkPSJNLTAgMzYzLjc1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIDQuNSAzNjguMjUgTDU1LjUgMzY4LjI1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIDYwIDM2My43NSBMNjAgMzQyLjc1IEE0LjUwMDENCi0JCQkJCQkgNC41MDAxIC0xODAgMCAwIDU1LjUgMzM4LjI1IEw0LjUgMzM4LjI1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIC0wIDM0Mi43NSBMMCAzNjMuNzUgWiIgY2xhc3M9InN0MyIvPg0KLQkJPC9nPg0KLQkJPGcgaWQ9InNoYXBlMjEtNDEiIHY6bUlEPSIyMSIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMTAuMzc1LC0yOTIuODc1KSI+DQotCQkJPHRpdGxlPtCb0LjRgdGCLjIxPC90aXRsZT4NCi0JCQk8cGF0aCBkPSJNLTAgMzYzLjc1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIDQuNSAzNjguMjUgTDU1LjUgMzY4LjI1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIDYwIDM2My43NSBMNjAgMzQyLjc1IEE0LjUwMDENCi0JCQkJCQkgNC41MDAxIC0xODAgMCAwIDU1LjUgMzM4LjI1IEw0LjUgMzM4LjI1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIC0wIDM0Mi43NSBMMCAzNjMuNzUgWiIgY2xhc3M9InN0MyIvPg0KLQkJPC9nPg0KLQkJPGcgaWQ9InNoYXBlMjItNDMiIHY6bUlEPSIyMiIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNTAuMzc1LC0xMjMuMzc1KSI+DQotCQkJPHRpdGxlPtCb0LjRgdGCLjIyPC90aXRsZT4NCi0JCQk8cGF0aCBkPSJNMCAzNjAuMzcgQTcuODc1MTggNy44NzUxOCAtMTgwIDAgMCA3Ljg3IDM2OC4yNSBMMTA0LjYyIDM2OC4yNSBBNy44NzUxOCA3Ljg3NTE4IC0xODAgMCAwIDExMi41IDM2MC4zNyBMMTEyLjUNCi0JCQkJCQkgMzIzLjYzIEE3Ljg3NTE4IDcuODc1MTggLTE4MCAwIDAgMTA0LjYyIDMxNS43NSBMNy44NyAzMTUuNzUgQTcuODc1MTggNy44NzUxOCAtMTgwIDAgMCAwIDMyMy42MyBMMCAzNjAuMzcNCi0JCQkJCQkgWiIgY2xhc3M9InN0MiIvPg0KLQkJPC9nPg0KLQkJPGcgaWQ9InNoYXBlMjMtNDUiIHY6bUlEPSIyMyIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxOTUuMzc1LC04NS44NzUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuMjM8L3RpdGxlPg0KLQkJCTxwYXRoIGQ9Ik0tMCAzNjMuNzUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgNC41IDM2OC4yNSBMNjMgMzY4LjI1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIDY3LjUgMzYzLjc1IEw2Ny41IDM0Mi43NSBBNC41MDAxDQotCQkJCQkJIDQuNTAwMSAtMTgwIDAgMCA2MyAzMzguMjUgTDQuNSAzMzguMjUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgLTAgMzQyLjc1IEwwIDM2My43NSBaIiBjbGFzcz0ic3QyIi8+DQotCQk8L2c+DQotCQk8ZyBpZD0ic2hhcGUyNC00NyIgdjptSUQ9IjI0IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEyMC4zNzUsLTE0OS42MjUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuMjQ8L3RpdGxlPg0KLQkJCTxwYXRoIGQ9Ik0wIDM1OS40MyBMMCAzNjguMjUgTDIzLjA3IDM2OC4yNSBMMCAzNTkuNDMgWiIgY2xhc3M9InN0NCIvPg0KLQkJCTxwYXRoIGQ9Ik0wIDM1OS40MyBMMCAzNjguMjUgTDIzLjA3IDM2OC4yNSIgY2xhc3M9InN0NSIvPg0KLQkJPC9nPg0KLQkJPGcgaWQ9InNoYXBlMjUtNTAiIHY6bUlEPSIyNSIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMTcuNzUsLTE1OC40NDUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuMjU8L3RpdGxlPg0KLQkJCTxwYXRoIGQ9Ik0yLjYzIDM2MyBMNS4yNSAzNjguMjUgTDAgMzY4LjI1IEwyLjYzIDM2MyBaIiBjbGFzcz0ic3Q2Ii8+DQotCQk8L2c+DQotCQk8ZyBpZD0ic2hhcGUyNi01MiIgdjptSUQ9IjI2IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE0My40NDUsLTE0NykiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi4yNjwvdGl0bGU+DQotCQkJPHBhdGggZD0iTTUuMjUgMzY1LjYzIEwwIDM2OC4yNSBMMCAzNjMgTDUuMjUgMzY1LjYzIFoiIGNsYXNzPSJzdDYiLz4NCi0JCTwvZz4NCi0JCTxnIGlkPSJzaGFwZTI3LTU0IiB2Om1JRD0iMjciIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTA1LjM3NSwtMjAyLjMwNSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi4yNzwvdGl0bGU+DQotCQkJPHBhdGggZD0iTTAgMzY4LjI1IEwwIDM1OS42MSBMMCAzNjguMjUgWiIgY2xhc3M9InN0NCIvPg0KLQkJCTxwYXRoIGQ9Ik0wIDM2OC4yNSBMMCAzNTkuNjEiIGNsYXNzPSJzdDUiLz4NCi0JCTwvZz4NCi0JCTxnIGlkPSJzaGFwZTI4LTU3IiB2Om1JRD0iMjgiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTAyLjc1LC0xOTcuMDU1KSI+DQotCQkJPHRpdGxlPtCb0LjRgdGCLjI4PC90aXRsZT4NCi0JCQk8cGF0aCBkPSJNMi42MyAzNjguMjUgTDAgMzYzIEw1LjI1IDM2MyBMMi42MyAzNjguMjUgWiIgY2xhc3M9InN0NiIvPg0KLQkJPC9nPg0KLQkJPGcgaWQ9InNoYXBlMjktNTkiIHY6bUlEPSIyOSIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDIuNzUsLTIxMC45NDUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuMjk8L3RpdGxlPg0KLQkJCTxwYXRoIGQ9Ik0yLjYzIDM2MyBMNS4yNSAzNjguMjUgTDAgMzY4LjI1IEwyLjYzIDM2MyBaIiBjbGFzcz0ic3Q2Ii8+DQotCQk8L2c+DQotCQk8ZyBpZD0ic2hhcGUzMC02MSIgdjptSUQ9IjMwIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDc1LjM3NSwtMTY1LjM3NSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi4zMDwvdGl0bGU+DQotCQkJPHBhdGggZD0iTTAgMzY4LjI1IEwxMiAzMzguMjUgTDQ4IDMzOC4yNSBMNjAgMzY4LjI1IEwwIDM2OC4yNSBaIiBjbGFzcz0ic3QyIi8+DQotCQk8L2c+DQotCQk8ZyBpZD0ic2hhcGUzMS02MyIgdjptSUQ9IjMxIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI2OS44MDUsLTE0OS42MjUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuMzE8L3RpdGxlPg0KLQkJCTxwYXRoIGQ9Ik0yMy4wNyAzNTkuNDMgTDIzLjA3IDM2OC4yNSBMMCAzNjguMjUgTDIzLjA3IDM1OS40MyBaIiBjbGFzcz0ic3Q0Ii8+DQotCQkJPHBhdGggZD0iTTIzLjA3IDM1OS40MyBMMjMuMDcgMzY4LjI1IEwwIDM2OC4yNSIgY2xhc3M9InN0NSIvPg0KLQkJPC9nPg0KLQkJPGcgaWQ9InNoYXBlMzItNjYiIHY6bUlEPSIzMiIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyOTAuMjUsLTE1OC40NDUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuMzI8L3RpdGxlPg0KLQkJCTxwYXRoIGQ9Ik0yLjYzIDM2MyBMNS4yNSAzNjguMjUgTDAgMzY4LjI1IEwyLjYzIDM2MyBaIiBjbGFzcz0ic3Q2Ii8+DQotCQk8L2c+DQotCQk8ZyBpZD0ic2hhcGUzMy02OCIgdjptSUQ9IjMzIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI2NC41NTUsLTE0NykiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi4zMzwvdGl0bGU+DQotCQkJPHBhdGggZD0iTTAgMzY1LjYzIEw1LjI1IDM2MyBMNS4yNSAzNjguMjUgTDAgMzY1LjYzIFoiIGNsYXNzPSJzdDYiLz4NCi0JCTwvZz4NCi0JCTxnIGlkPSJzaGFwZTM0LTcwIiB2Om1JRD0iMzQiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjc3Ljg3NSwtMTY1LjM3NSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi4zNDwvdGl0bGU+DQotCQkJPHBhdGggZD0iTTAgMzY4LjI1IEwxMiAzMzguMjUgTDQ4IDMzOC4yNSBMNjAgMzY4LjI1IEwwIDM2OC4yNSBaIiBjbGFzcz0ic3QyIi8+DQotCQk8L2c+DQotCQk8ZyBpZD0ic2hhcGUzNS03MiIgdjptSUQ9IjM1IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMwNy44NzUsLTIwMi4zMDUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuMzU8L3RpdGxlPg0KLQkJCTxwYXRoIGQ9Ik0wIDM1OS42MSBMMCAzNjguMjUgTDAgMzU5LjYxIFoiIGNsYXNzPSJzdDQiLz4NCi0JCQk8cGF0aCBkPSJNMCAzNTkuNjEgTDAgMzY4LjI1IiBjbGFzcz0ic3Q1Ii8+DQotCQk8L2c+DQotCQk8ZyBpZD0ic2hhcGUzNi03NSIgdjptSUQ9IjM2IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMwNS4yNSwtMjEwLjk0NSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi4zNjwvdGl0bGU+DQotCQkJPHBhdGggZD0iTTIuNjMgMzYzIEw1LjI1IDM2OC4yNSBMMCAzNjguMjUgTDIuNjMgMzYzIFoiIGNsYXNzPSJzdDYiLz4NCi0JCTwvZz4NCi0JCTxnIGlkPSJzaGFwZTM3LTc3IiB2Om1JRD0iMzciIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzA1LjI1LC0xOTcuMDU1KSI+DQotCQkJPHRpdGxlPtCb0LjRgdGCLjM3PC90aXRsZT4NCi0JCQk8cGF0aCBkPSJNMi42MyAzNjguMjUgTDAgMzYzIEw1LjI1IDM2MyBMMi42MyAzNjguMjUgWiIgY2xhc3M9InN0NiIvPg0KLQkJPC9nPg0KLQkJPGcgaWQ9InNoYXBlMzgtNzkiIHY6bUlEPSIzOCIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNjkuODA1LC0xMDAuODc1KSI+DQotCQkJPHRpdGxlPtCb0LjRgdGCLjM4PC90aXRsZT4NCi0JCQk8cGF0aCBkPSJNMCAzNjguMjUgTDM4LjA3IDM2OC4yNSBMMzguMDcgMzEwLjY4IEwwIDM2OC4yNSBaIiBjbGFzcz0ic3Q0Ii8+DQotCQkJPHBhdGggZD0iTTAgMzY4LjI1IEwzOC4wNyAzNjguMjUgTDM4LjA3IDMxMC42OCIgY2xhc3M9InN0NSIvPg0KLQkJPC9nPg0KLQkJPGcgaWQ9InNoYXBlMzktODIiIHY6bUlEPSIzOSIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNjQuNTU1LC05OC4yNSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi4zOTwvdGl0bGU+DQotCQkJPHBhdGggZD0iTTAgMzY1LjYyIEw1LjI1IDM2MyBMNS4yNSAzNjguMjUgTDAgMzY1LjYyIFoiIGNsYXNzPSJzdDYiLz4NCi0JCTwvZz4NCi0JCTxnIGlkPSJzaGFwZTQwLTg0IiB2Om1JRD0iNDAiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzA1LjI1LC0xNTguNDQ1KSI+DQotCQkJPHRpdGxlPtCb0LjRgdGCLjQwPC90aXRsZT4NCi0JCQk8cGF0aCBkPSJNMi42MyAzNjMgTDUuMjUgMzY4LjI1IEwwIDM2OC4yNSBMMi42MyAzNjMgWiIgY2xhc3M9InN0NiIvPg0KLQkJPC9nPg0KLQkJPGcgaWQ9InNoYXBlNDEtODYiIHY6bUlEPSI0MSIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg5MC4zNzUsLTg5LjgwNSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi40MTwvdGl0bGU+DQotCQkJPHBhdGggZD0iTTAgMzY4LjI1IEwwIDI5OS42MSBMMCAzNjguMjUgWiIgY2xhc3M9InN0NCIvPg0KLQkJCTxwYXRoIGQ9Ik0wIDM2OC4yNSBMMCAyOTkuNjEiIGNsYXNzPSJzdDUiLz4NCi0JCTwvZz4NCi0JCTxnIGlkPSJzaGFwZTQyLTg5IiB2Om1JRD0iNDIiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODcuNzUsLTg0LjU1NSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi40MjwvdGl0bGU+DQotCQkJPHBhdGggZD0iTTIuNjMgMzY4LjI1IEwwIDM2MyBMNS4yNSAzNjMgTDIuNjMgMzY4LjI1IFoiIGNsYXNzPSJzdDYiLz4NCi0JCTwvZz4NCi0JCTxnIGlkPSJzaGFwZTQzLTkxIiB2Om1JRD0iNDMiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODcuNzUsLTE1OC40NDUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuNDM8L3RpdGxlPg0KLQkJCTxwYXRoIGQ9Ik0yLjYzIDM2MyBMNS4yNSAzNjguMjUgTDAgMzY4LjI1IEwyLjYzIDM2MyBaIiBjbGFzcz0ic3Q2Ii8+DQotCQk8L2c+DQotCQk8ZyBpZD0ic2hhcGU0NC05MyIgdjptSUQ9IjQ0IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDc1LjM3NSwtNDUuMzc1KSI+DQotCQkJPHRpdGxlPtCb0LjRgdGCLjQ0PC90aXRsZT4NCi0JCQk8cGF0aCBkPSJNMCAzNjIuNjIgQTUuNjI1MTMgNS42MjUxMyAtMTgwIDAgMCA1LjYzIDM2OC4yNSBMNTQuMzggMzY4LjI1IEE1LjYyNTEzIDUuNjI1MTMgLTE4MCAwIDAgNjAgMzYyLjYyIEw2MCAzMzYuMzgNCi0JCQkJCQkgQTUuNjI1MTMgNS42MjUxMyAtMTgwIDAgMCA1NC4zOCAzMzAuNzUgTDUuNjIgMzMwLjc1IEE1LjYyNTEzIDUuNjI1MTMgLTE4MCAwIDAgMCAzMzYuMzggTDAgMzYyLjYyIFoiDQotCQkJCQljbGFzcz0ic3QyIi8+DQotCQk8L2c+DQotCQk8ZyBpZD0ic2hhcGU0NS05NSIgdjptSUQ9IjQ1IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI3Ny44NzUsLTQ1LjM3NSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi40NTwvdGl0bGU+DQotCQkJPHBhdGggZD0iTTAgMzYyLjYyIEE1LjYyNTEzIDUuNjI1MTMgLTE4MCAwIDAgNS42MyAzNjguMjUgTDU0LjM4IDM2OC4yNSBBNS42MjUxMyA1LjYyNTEzIC0xODAgMCAwIDYwIDM2Mi42MiBMNjAgMzM2LjM4DQotCQkJCQkJIEE1LjYyNTEzIDUuNjI1MTMgLTE4MCAwIDAgNTQuMzggMzMwLjc1IEw1LjYyIDMzMC43NSBBNS42MjUxMyA1LjYyNTEzIC0xODAgMCAwIDAgMzM2LjM4IEwwIDM2Mi42MiBaIg0KLQkJCQkJY2xhc3M9InN0MiIvPg0KLQkJPC9nPg0KLQkJPGcgaWQ9InNoYXBlNDYtOTciIHY6bUlEPSI0NiIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMjIuODc1LC04OS44MDUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuNDY8L3RpdGxlPg0KLQkJCTxwYXRoIGQ9Ik0wIDI5OS42MSBMMCAzNjguMjUgTDAgMjk5LjYxIFoiIGNsYXNzPSJzdDQiLz4NCi0JCQk8cGF0aCBkPSJNMCAyOTkuNjEgTDAgMzY4LjI1IiBjbGFzcz0ic3Q1Ii8+DQotCQk8L2c+DQotCQk8ZyBpZD0ic2hhcGU0Ny0xMDAiIHY6bUlEPSI0NyIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMjAuMjUsLTE1OC40NDUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuNDc8L3RpdGxlPg0KLQkJCTxwYXRoIGQ9Ik0yLjYzIDM2MyBMNS4yNSAzNjguMjUgTDAgMzY4LjI1IEwyLjYzIDM2MyBaIiBjbGFzcz0ic3Q2Ii8+DQotCQk8L2c+DQotCQk8ZyBpZD0ic2hhcGU0OC0xMDIiIHY6bUlEPSI0OCIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMjAuMjUsLTg0LjU1NSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi40ODwvdGl0bGU+DQotCQkJPHBhdGggZD0iTTIuNjMgMzY4LjI1IEwwIDM2MyBMNS4yNSAzNjMgTDIuNjMgMzY4LjI1IFoiIGNsYXNzPSJzdDYiLz4NCi0JCTwvZz4NCi0JCTxnIGlkPSJzaGFwZTQ5LTEwNCIgdjptSUQ9IjQ5IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM2Ny44NzUsLTMwMC4zNzUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuNDk8L3RpdGxlPg0KLQkJCTxyZWN0IHg9IjAiIHk9IjM1My4yNSIgd2lkdGg9IjQ1IiBoZWlnaHQ9IjE1IiBjbGFzcz0ic3Q3Ii8+DQotCQk8L2c+DQotCQk8ZyBpZD0ic2hhcGU1MC0xMDYiIHY6bUlEPSI1MCIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzNTQuMzUsLTMwMi45MjUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuNTA8L3RpdGxlPg0KLQkJCTxkZXNjPkpUQUcgSS9GPC9kZXNjPg0KLQkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4NCi0JCQk8djp0ZXh0UmVjdCBjeD0iMzYuMDI1IiBjeT0iMzYyLjg1IiB3aWR0aD0iNzIuMDYiIGhlaWdodD0iMTAuOCIvPg0KLQkJCTxyZWN0IHg9IjAiIHk9IjM1Ny40NSIgd2lkdGg9IjcyLjA1IiBoZWlnaHQ9IjEwLjgiIGNsYXNzPSJzdDciLz4NCi0JCQk8dGV4dCB4PSIyMC41IiB5PSIzNjUuNTUiIGNsYXNzPSJzdDgiIHY6bGFuZ0lEPSIyMDU3Ij48djpwYXJhZ3JhcGggdjpob3JpekFsaWduPSIxIi8+PHY6dGFiTGlzdC8+SlRBRyBJL0Y8L3RleHQ+CQk8L2c+DQotCQk8ZyBpZD0ic2hhcGU1MS0xMDkiIHY6bUlEPSI1MSIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjM3NSwtMzAwLjM3NSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi41MTwvdGl0bGU+DQotCQkJPHJlY3QgeD0iMCIgeT0iMzUzLjI1IiB3aWR0aD0iNDUiIGhlaWdodD0iMTUiIGNsYXNzPSJzdDciLz4NCi0JCTwvZz4NCi0JCTxnIGlkPSJzaGFwZTUyLTExMSIgdjptSUQ9IjUyIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC04LjY1LC0zMDIuOTI1KSI+DQotCQkJPHRpdGxlPtCb0LjRgdGCLjUyPC90aXRsZT4NCi0JCQk8ZGVzYz5JUlEgSS9GPC9kZXNjPg0KLQkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4NCi0JCQk8djp0ZXh0UmVjdCBjeD0iMzEuNTI1IiBjeT0iMzYyLjg1IiB3aWR0aD0iNjMuMDUiIGhlaWdodD0iMTAuOCIvPg0KLQkJCTxyZWN0IHg9IjAiIHk9IjM1Ny40NSIgd2lkdGg9IjYzLjA1IiBoZWlnaHQ9IjEwLjgiIGNsYXNzPSJzdDciLz4NCi0JCQk8dGV4dCB4PSIxOC40OSIgeT0iMzY1LjU1IiBjbGFzcz0ic3Q4IiB2OmxhbmdJRD0iMjA1NyI+PHY6cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPklSUSBJL0Y8L3RleHQ+CQk8L2c+DQotCQk8ZyBpZD0ic2hhcGU1My0xMTQiIHY6bUlEPSI1MyIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2Ny44NzUsLTAuMzc1KSI+DQotCQkJPHRpdGxlPtCb0LjRgdGCLjUzPC90aXRsZT4NCi0JCQk8cmVjdCB4PSIwIiB5PSIzNTMuMjUiIHdpZHRoPSI3NSIgaGVpZ2h0PSIxNSIgY2xhc3M9InN0NyIvPg0KLQkJPC9nPg0KLQkJPGcgaWQ9InNoYXBlNTQtMTE2IiB2Om1JRD0iNTQiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNTUuODUsLTIuOTI1KSI+DQotCQkJPHRpdGxlPtCb0LjRgdGCLjU0PC90aXRsZT4NCi0JCQk8ZGVzYz5BSEIvQVhJIEkvRjwvZGVzYz4NCi0JCQk8djp0ZXh0QmxvY2sgdjptYXJnaW5zPSJyZWN0KDAsMCwwLDApIi8+DQotCQkJPHY6dGV4dFJlY3QgY3g9IjQ5LjUyNSIgY3k9IjM2Mi44NSIgd2lkdGg9Ijk5LjA1IiBoZWlnaHQ9IjEwLjgiLz4NCi0JCQk8cmVjdCB4PSIwIiB5PSIzNTcuNDUiIHdpZHRoPSI5OS4wNSIgaGVpZ2h0PSIxMC44IiBjbGFzcz0ic3Q3Ii8+DQotCQkJPHRleHQgeD0iMjQuMzciIHk9IjM2NS44NSIgY2xhc3M9InN0OSIgdjpsYW5nSUQ9IjIwNTciPjx2OnBhcmFncmFwaCB2Omhvcml6QWxpZ249IjEiLz48djp0YWJMaXN0Lz5BSEIvQVhJIEkvRjwvdGV4dD4JCTwvZz4NCi0JCTxnIGlkPSJzaGFwZTU1LTExOSIgdjptSUQ9IjU1IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEwNS4zNzUsLTIyLjMwNSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi41NTwvdGl0bGU+DQotCQkJPHBhdGggZD0iTTAgMzUyLjExIEwwIDM2OC4yNSBMMCAzNTIuMTEgWiIgY2xhc3M9InN0NCIvPg0KLQkJCTxwYXRoIGQ9Ik0wIDM1Mi4xMSBMMCAzNjguMjUiIGNsYXNzPSJzdDUiLz4NCi0JCTwvZz4NCi0JCTxnIGlkPSJzaGFwZTU2LTEyMiIgdjptSUQ9IjU2IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEwMi43NSwtMzguNDQ1KSI+DQotCQkJPHRpdGxlPtCb0LjRgdGCLjU2PC90aXRsZT4NCi0JCQk8cGF0aCBkPSJNMi42MyAzNjMgTDUuMjUgMzY4LjI1IEwwIDM2OC4yNSBMMi42MyAzNjMgWiIgY2xhc3M9InN0NiIvPg0KLQkJPC9nPg0KLQkJPGcgaWQ9InNoYXBlNTctMTI0IiB2Om1JRD0iNTciIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTAyLjc1LC0xNy4wNTUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuNTc8L3RpdGxlPg0KLQkJCTxwYXRoIGQ9Ik0yLjYzIDM2OC4yNSBMMCAzNjMgTDUuMjUgMzYzIEwyLjYzIDM2OC4yNSBaIiBjbGFzcz0ic3Q2Ii8+DQotCQk8L2c+DQotCQk8ZyBpZD0ic2hhcGU1OC0xMjYiIHY6bUlEPSI1OCIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzAuMzc1LC0wLjM3NSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi41ODwvdGl0bGU+DQotCQkJPHJlY3QgeD0iMCIgeT0iMzUzLjI1IiB3aWR0aD0iNzUiIGhlaWdodD0iMTUiIGNsYXNzPSJzdDciLz4NCi0JCTwvZz4NCi0JCTxnIGlkPSJzaGFwZTU5LTEyOCIgdjptSUQ9IjU5IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI1OC4zNSwtMi45MjUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuNTk8L3RpdGxlPg0KLQkJCTxkZXNjPkFIQi9BWEkgSS9GPC9kZXNjPg0KLQkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4NCi0JCQk8djp0ZXh0UmVjdCBjeD0iNDkuNTI1IiBjeT0iMzYyLjg1IiB3aWR0aD0iOTkuMDYiIGhlaWdodD0iMTAuOCIvPg0KLQkJCTxyZWN0IHg9IjAiIHk9IjM1Ny40NSIgd2lkdGg9Ijk5LjA1IiBoZWlnaHQ9IjEwLjgiIGNsYXNzPSJzdDciLz4NCi0JCQk8dGV4dCB4PSIyNC4zNyIgeT0iMzY1Ljg1IiBjbGFzcz0ic3Q5IiB2OmxhbmdJRD0iMjA1NyI+PHY6cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPkFIQi9BWEkgSS9GPC90ZXh0PgkJPC9nPg0KLQkJPGcgaWQ9InNoYXBlNjAtMTMxIiB2Om1JRD0iNjAiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzA3Ljg3NSwtMjIuMzA1KSI+DQotCQkJPHRpdGxlPtCb0LjRgdGCLjYwPC90aXRsZT4NCi0JCQk8cGF0aCBkPSJNMCAzNTIuMTEgTDAgMzY4LjI1IEwwIDM1Mi4xMSBaIiBjbGFzcz0ic3Q0Ii8+DQotCQkJPHBhdGggZD0iTTAgMzUyLjExIEwwIDM2OC4yNSIgY2xhc3M9InN0NSIvPg0KLQkJPC9nPg0KLQkJPGcgaWQ9InNoYXBlNjEtMTM0IiB2Om1JRD0iNjEiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzA1LjI1LC0zOC40NDUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuNjE8L3RpdGxlPg0KLQkJCTxwYXRoIGQ9Ik0yLjYzIDM2MyBMNS4yNSAzNjguMjUgTDAgMzY4LjI1IEwyLjYzIDM2MyBaIiBjbGFzcz0ic3Q2Ii8+DQotCQk8L2c+DQotCQk8ZyBpZD0ic2hhcGU2Mi0xMzYiIHY6bUlEPSI2MiIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMDUuMjUsLTE3LjA1NSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi42MjwvdGl0bGU+DQotCQkJPHBhdGggZD0iTTIuNjMgMzY4LjI1IEwwIDM2MyBMNS4yNSAzNjMgTDIuNjMgMzY4LjI1IFoiIGNsYXNzPSJzdDYiLz4NCi0JCTwvZz4NCi0JCTxnIGlkPSJzaGFwZTYzLTEzOCIgdjptSUQ9IjYzIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDY3Ljg3NSwtMzQ5LjEyNSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi42MzwvdGl0bGU+DQotCQkJPHJlY3QgeD0iMCIgeT0iMzUzLjI1IiB3aWR0aD0iODIuNSIgaGVpZ2h0PSIxNSIgY2xhc3M9InN0NyIvPg0KLQkJPC9nPg0KLQkJPGcgaWQ9InNoYXBlNjQtMTQwIiB2Om1JRD0iNjQiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIuNjc1LC0zNTEuNDUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuNjQ8L3RpdGxlPg0KLQkJCTxkZXNjPlNDUjEgY2x1c3RlcjwvZGVzYz4NCi0JCQk8djp0ZXh0QmxvY2sgdjptYXJnaW5zPSJyZWN0KDAsMCwwLDApIi8+DQotCQkJPHY6dGV4dFJlY3QgY3g9IjQzLjMyNSIgY3k9IjM2Mi44NSIgd2lkdGg9Ijg2LjY1IiBoZWlnaHQ9IjEwLjgiLz4NCi0JCQk8cmVjdCB4PSIwIiB5PSIzNTcuNDUiIHdpZHRoPSI4Ni42NSIgaGVpZ2h0PSIxMC44IiBjbGFzcz0ic3Q3Ii8+DQotCQkJPHRleHQgeD0iMCIgeT0iMzY1Ljg1IiBjbGFzcz0ic3QxMCIgdjpsYW5nSUQ9IjIwNTciPjx2OnBhcmFncmFwaC8+PHY6dGFiTGlzdC8+U0NSMSBjbHVzdGVyPC90ZXh0PgkJPC9nPg0KLQkJPGcgaWQ9InNoYXBlNjUtMTQzIiB2Om1JRD0iNjUiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNzUuMzc1LC0zMjYuNjI1KSI+DQotCQkJPHRpdGxlPtCb0LjRgdGCLjY1PC90aXRsZT4NCi0JCQk8cmVjdCB4PSIwIiB5PSIzNTMuMjUiIHdpZHRoPSI3NSIgaGVpZ2h0PSIxNSIgY2xhc3M9InN0NyIvPg0KLQkJPC9nPg0KLQkJPGcgaWQ9InNoYXBlNjYtMTQ1IiB2Om1JRD0iNjYiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNzYuODUsLTMyOS4xNzUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuNjY8L3RpdGxlPg0KLQkJCTxkZXNjPlNDUjEgY29yZTwvZGVzYz4NCi0JCQk8djp0ZXh0QmxvY2sgdjptYXJnaW5zPSJyZWN0KDAsMCwwLDApIi8+DQotCQkJPHY6dGV4dFJlY3QgY3g9IjQwLjUyNSIgY3k9IjM2Mi44NSIgd2lkdGg9IjgxLjA2IiBoZWlnaHQ9IjEwLjgiLz4NCi0JCQk8cmVjdCB4PSIwIiB5PSIzNTcuNDUiIHdpZHRoPSI4MS4wNSIgaGVpZ2h0PSIxMC44IiBjbGFzcz0ic3Q3Ii8+DQotCQkJPHRleHQgeD0iMCIgeT0iMzY1Ljg1IiBjbGFzcz0ic3QxMCIgdjpsYW5nSUQ9IjIwNTciPjx2OnBhcmFncmFwaC8+PHY6dGFiTGlzdC8+U0NSMSBjb3JlPC90ZXh0PgkJPC9nPg0KLQkJPGcgaWQ9InNoYXBlNjctMTQ4IiB2Om1JRD0iNjciIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTAuMzc1LC0zMDAuMzc1KSI+DQotCQkJPHRpdGxlPtCb0LjRgdGCLjY3PC90aXRsZT4NCi0JCQk8cmVjdCB4PSIwIiB5PSIzNTMuMjUiIHdpZHRoPSIzMCIgaGVpZ2h0PSIxNSIgY2xhc3M9InN0NyIvPg0KLQkJPC9nPg0KLQkJPGcgaWQ9InNoYXBlNjgtMTUwIiB2Om1JRD0iNjgiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNjQuMTI1LC0zMDEuOTUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuNjg8L3RpdGxlPg0KLQkJCTxkZXNjPkludGVycnVwdCBDb250cm9sbGVyPC9kZXNjPg0KLQkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4NCi0JCQk8djp0ZXh0UmVjdCBjeD0iNDAuNTI1IiBjeT0iMzYyLjg1IiB3aWR0aD0iODEuMDUiIGhlaWdodD0iMTAuOCIvPg0KLQkJCTxyZWN0IHg9IjAiIHk9IjM1Ny40NSIgd2lkdGg9IjgxLjA1IiBoZWlnaHQ9IjEwLjgiIGNsYXNzPSJzdDciLz4NCi0JCQk8dGV4dCB4PSIyMy41IiB5PSIzNjAuMTUiIGNsYXNzPSJzdDgiIHY6bGFuZ0lEPSIxMDMzIj48djpwYXJhZ3JhcGggdjpob3JpekFsaWduPSIxIi8+PHY6dGFiTGlzdC8+SW50ZXJydXB0IDx2OmxmLz48dHNwYW4NCi0JCQkJCQl4PSIyMS42NSIgZHk9IjEuMmVtIiBjbGFzcz0ic3QxMSI+Q29udHJvbGxlcjwvdHNwYW4+PC90ZXh0PgkJPC9nPg0KLQkJPGcgaWQ9InNoYXBlNjktMTU0IiB2Om1JRD0iNjkiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU3Ljg3NSwtMzAwLjM3NSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi42OTwvdGl0bGU+DQotCQkJPHJlY3QgeD0iMCIgeT0iMzUzLjI1IiB3aWR0aD0iMzAiIGhlaWdodD0iMTUiIGNsYXNzPSJzdDciLz4NCi0JCTwvZz4NCi0JCTxnIGlkPSJzaGFwZTcwLTE1NiIgdjptSUQ9IjcwIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzMi4zNSwtMzAyLjkyNSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi43MDwvdGl0bGU+DQotCQkJPGRlc2M+U3lzdGVtIENvbnRyb2wgVW5pdDwvZGVzYz4NCi0JCQk8djp0ZXh0QmxvY2sgdjptYXJnaW5zPSJyZWN0KDAsMCwwLDApIi8+DQotCQkJPHY6dGV4dFJlY3QgY3g9IjQwLjUyNSIgY3k9IjM2Mi44NSIgd2lkdGg9IjgxLjA2IiBoZWlnaHQ9IjEwLjgiLz4NCi0JCQk8cmVjdCB4PSIwIiB5PSIzNTcuNDUiIHdpZHRoPSI4MS4wNSIgaGVpZ2h0PSIxMC44IiBjbGFzcz0ic3Q3Ii8+DQotCQkJPHRleHQgeD0iMjYuOTkiIHk9IjM2MC4xNSIgY2xhc3M9InN0OCIgdjpsYW5nSUQ9IjEwMzMiPjx2OnBhcmFncmFwaCB2Omhvcml6QWxpZ249IjEiLz48djp0YWJMaXN0Lz5TeXN0ZW0gPHY6bGYvPjx0c3Bhbg0KLQkJCQkJCXg9IjE3LjU5IiBkeT0iMS4yZW0iIGNsYXNzPSJzdDExIj5Db250cm9sIFVuaXQ8L3RzcGFuPjwvdGV4dD4JCTwvZz4NCi0JCTxnIGlkPSJzaGFwZTcxLTE2MCIgdjptSUQ9IjcxIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIyNS4zNzUsLTMwMC4zNzUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuNzE8L3RpdGxlPg0KLQkJCTxyZWN0IHg9IjAiIHk9IjM1My4yNSIgd2lkdGg9IjMwIiBoZWlnaHQ9IjE1IiBjbGFzcz0ic3Q3Ii8+DQotCQk8L2c+DQotCQk8ZyBpZD0ic2hhcGU3Mi0xNjIiIHY6bUlEPSI3MiIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMDQuMzUsLTMwMi45MjUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuNzI8L3RpdGxlPg0KLQkJCTxkZXNjPkRlYnVnIE1vZHVsZTwvZGVzYz4NCi0JCQk8djp0ZXh0QmxvY2sgdjptYXJnaW5zPSJyZWN0KDAsMCwwLDApIi8+DQotCQkJPHY6dGV4dFJlY3QgY3g9IjM2LjAyNSIgY3k9IjM2Mi44NSIgd2lkdGg9IjcyLjA2IiBoZWlnaHQ9IjEwLjgiLz4NCi0JCQk8cmVjdCB4PSIwIiB5PSIzNTcuNDUiIHdpZHRoPSI3Mi4wNSIgaGVpZ2h0PSIxMC44IiBjbGFzcz0ic3Q3Ii8+DQotCQkJPHRleHQgeD0iMjMuOTYiIHk9IjM2MC4xNSIgY2xhc3M9InN0OCIgdjpsYW5nSUQ9IjEwMzMiPjx2OnBhcmFncmFwaCB2Omhvcml6QWxpZ249IjEiLz48djp0YWJMaXN0Lz5EZWJ1ZyA8djpsZi8+PHRzcGFuDQotCQkJCQkJeD0iMjEuNDciIGR5PSIxLjJlbSIgY2xhc3M9InN0MTEiPk1vZHVsZTwvdHNwYW4+PC90ZXh0PgkJPC9nPg0KLQkJPGcgaWQ9InNoYXBlNzMtMTY2IiB2Om1JRD0iNzMiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjkyLjg3NSwtMzAwLjM3NSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi43MzwvdGl0bGU+DQotCQkJPHJlY3QgeD0iMCIgeT0iMzUzLjI1IiB3aWR0aD0iMzAiIGhlaWdodD0iMTUiIGNsYXNzPSJzdDciLz4NCi0JCTwvZz4NCi0JCTxnIGlkPSJzaGFwZTc0LTE2OCIgdjptSUQ9Ijc0IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI2Ny4zNSwtMzAyLjkyNSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi43NDwvdGl0bGU+DQotCQkJPGRlc2M+VEFQIENvbnRyb2xsZXI8L2Rlc2M+DQotCQkJPHY6dGV4dEJsb2NrIHY6bWFyZ2lucz0icmVjdCgwLDAsMCwwKSIvPg0KLQkJCTx2OnRleHRSZWN0IGN4PSI0MC41MjUiIGN5PSIzNjIuODUiIHdpZHRoPSI4MS4wNiIgaGVpZ2h0PSIxMC44Ii8+DQotCQkJPHJlY3QgeD0iMCIgeT0iMzU3LjQ1IiB3aWR0aD0iODEuMDUiIGhlaWdodD0iMTAuOCIgY2xhc3M9InN0NyIvPg0KLQkJCTx0ZXh0IHg9IjMzLjE4IiB5PSIzNjAuMTUiIGNsYXNzPSJzdDgiIHY6bGFuZ0lEPSIxMDMzIj48djpwYXJhZ3JhcGggdjpob3JpekFsaWduPSIxIi8+PHY6dGFiTGlzdC8+VEFQPHY6bGYvPjx0c3Bhbg0KLQkJCQkJCXg9IjIxLjY1IiBkeT0iMS4yZW0iIGNsYXNzPSJzdDExIj5Db250cm9sbGVyPC90c3Bhbj48L3RleHQ+CQk8L2c+DQotCQk8ZyBpZD0ic2hhcGU3NS0xNzIiIHY6bUlEPSI3NSIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg5MC4zNzUsLTI2Mi44NzUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuNzU8L3RpdGxlPg0KLQkJCTxyZWN0IHg9IjAiIHk9IjM1My4yNSIgd2lkdGg9IjMwIiBoZWlnaHQ9IjE1IiBjbGFzcz0ic3Q3Ii8+DQotCQk8L2c+DQotCQk8ZyBpZD0ic2hhcGU3Ni0xNzQiIHY6bUlEPSI3NiIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2NC44NSwtMjY1LjQyNSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi43NjwvdGl0bGU+DQotCQkJPGRlc2M+Q29udHJvbC1TdGF0dXMgUmVnaXN0ZXIgRmlsZTwvZGVzYz4NCi0JCQk8djp0ZXh0QmxvY2sgdjptYXJnaW5zPSJyZWN0KDAsMCwwLDApIi8+DQotCQkJPHY6dGV4dFJlY3QgY3g9IjQwLjUyNSIgY3k9IjM2Mi44NSIgd2lkdGg9IjgxLjA1IiBoZWlnaHQ9IjEwLjgiLz4NCi0JCQk8cmVjdCB4PSIwIiB5PSIzNTcuNDUiIHdpZHRoPSI4MS4wNSIgaGVpZ2h0PSIxMC44IiBjbGFzcz0ic3Q3Ii8+DQotCQkJPHRleHQgeD0iMTMuNTciIHk9IjM2MC4xNSIgY2xhc3M9InN0OCIgdjpsYW5nSUQ9IjEwMzMiPjx2OnBhcmFncmFwaCB2Omhvcml6QWxpZ249IjEiLz48djp0YWJMaXN0Lz5Db250cm9sLVN0YXR1cyA8djpsZi8+PHRzcGFuDQotCQkJCQkJeD0iMTcuNzEiIGR5PSIxLjJlbSIgY2xhc3M9InN0MTEiPlJlZ2lzdGVyIEZpbGU8L3RzcGFuPjwvdGV4dD4JCTwvZz4NCi0JCTxnIGlkPSJzaGFwZTc3LTE3OCIgdjptSUQ9Ijc3IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE5MS42MjUsLTE0Mi4xMjUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuNzc8L3RpdGxlPg0KLQkJCTxyZWN0IHg9IjAiIHk9IjM1My4yNSIgd2lkdGg9IjMwIiBoZWlnaHQ9IjE1IiBjbGFzcz0ic3Q3Ii8+DQotCQk8L2c+DQotCQk8ZyBpZD0ic2hhcGU3OC0xODAiIHY6bUlEPSI3OCIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjIsLTE0NCkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi43ODwvdGl0bGU+DQotCQkJPGRlc2M+VGlnaHRseS1Db3VwbGVkIE1lbW9yeTwvZGVzYz4NCi0JCQk8djp0ZXh0QmxvY2sgdjptYXJnaW5zPSJyZWN0KDAsMCwwLDApIi8+DQotCQkJPHY6dGV4dFJlY3QgY3g9IjQ1IiBjeT0iMzYyLjg1IiB3aWR0aD0iOTAiIGhlaWdodD0iMTAuOCIvPg0KLQkJCTxyZWN0IHg9IjAiIHk9IjM1Ny40NSIgd2lkdGg9IjkwIiBoZWlnaHQ9IjEwLjgiIGNsYXNzPSJzdDciLz4NCi0JCQk8dGV4dCB4PSIxMi4yNSIgeT0iMzU5Ljg1IiBjbGFzcz0ic3Q5IiB2OmxhbmdJRD0iMTAzMyI+PHY6cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPlRpZ2h0bHktQ291cGxlZCA8dHNwYW4NCi0JCQkJCQl4PSIyNy4yMSIgZHk9IjEuMmVtIiBjbGFzcz0ic3QxMSI+TWVtb3J5PC90c3Bhbj48L3RleHQ+CQk8L2c+DQotCQk8ZyBpZD0ic2hhcGU3OS0xODQiIHY6bUlEPSI3OSIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMTQuMTI1LC05My4zNzUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuNzk8L3RpdGxlPg0KLQkJCTxyZWN0IHg9IjAiIHk9IjM1My4yNSIgd2lkdGg9IjMwIiBoZWlnaHQ9IjE1IiBjbGFzcz0ic3Q3Ii8+DQotCQk8L2c+DQotCQk8ZyBpZD0ic2hhcGU4MC0xODYiIHY6bUlEPSI4MCIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMDYuNiwtOTUuOTI1KSI+DQotCQkJPHRpdGxlPtCb0LjRgdGCLjgwPC90aXRsZT4NCi0JCQk8ZGVzYz5UaW1lcjwvZGVzYz4NCi0JCQk8djp0ZXh0QmxvY2sgdjptYXJnaW5zPSJyZWN0KDAsMCwwLDApIi8+DQotCQkJPHY6dGV4dFJlY3QgY3g9IjIyLjUyNSIgY3k9IjM2Mi44NSIgd2lkdGg9IjQ1LjA1IiBoZWlnaHQ9IjEwLjgiLz4NCi0JCQk8cmVjdCB4PSIwIiB5PSIzNTcuNDUiIHdpZHRoPSI0NS4wNSIgaGVpZ2h0PSIxMC44IiBjbGFzcz0ic3Q3Ii8+DQotCQkJPHRleHQgeD0iMTAuNDYiIHk9IjM2NS44NSIgY2xhc3M9InN0OSIgdjpsYW5nSUQ9IjIwNTciPjx2OnBhcmFncmFwaCB2Omhvcml6QWxpZ249IjEiLz48djp0YWJMaXN0Lz5UaW1lcjwvdGV4dD4JCTwvZz4NCi0JCTxnIGlkPSJzaGFwZTgxLTE4OSIgdjptSUQ9IjgxIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE1Ny44NzUsLTIyNS4zNzUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuODE8L3RpdGxlPg0KLQkJCTxyZWN0IHg9IjAiIHk9IjM1My4yNSIgd2lkdGg9IjMwIiBoZWlnaHQ9IjE1IiBjbGFzcz0ic3Q3Ii8+DQotCQk8L2c+DQotCQk8ZyBpZD0ic2hhcGU4Mi0xOTEiIHY6bUlEPSI4MiIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzIuMzUsLTIyNy45MjUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuODI8L3RpdGxlPg0KLQkJCTxkZXNjPkluc3RydWN0aW9uIERlY29kZSBVbml0PC9kZXNjPg0KLQkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4NCi0JCQk8djp0ZXh0UmVjdCBjeD0iNDAuNTI1IiBjeT0iMzYyLjg1IiB3aWR0aD0iODEuMDYiIGhlaWdodD0iMTAuOCIvPg0KLQkJCTxyZWN0IHg9IjAiIHk9IjM1Ny40NSIgd2lkdGg9IjgxLjA1IiBoZWlnaHQ9IjEwLjgiIGNsYXNzPSJzdDciLz4NCi0JCQk8dGV4dCB4PSIyMC4xNiIgeT0iMzYwLjE1IiBjbGFzcz0ic3Q4IiB2OmxhbmdJRD0iMTAzMyI+PHY6cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPkluc3RydWN0aW9uIDx2OmxmLz48dHNwYW4NCi0JCQkJCQl4PSIxNy40MSIgZHk9IjEuMmVtIiBjbGFzcz0ic3QxMSI+RGVjb2RlIFVuaXQ8L3RzcGFuPjwvdGV4dD4JCTwvZz4NCi0JCTxnIGlkPSJzaGFwZTgzLTE5NSIgdjptSUQ9IjgzIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIyNS4zNzUsLTIyNS4zNzUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuODM8L3RpdGxlPg0KLQkJCTxyZWN0IHg9IjAiIHk9IjM1My4yNSIgd2lkdGg9IjMwIiBoZWlnaHQ9IjE1IiBjbGFzcz0ic3Q3Ii8+DQotCQk8L2c+DQotCQk8ZyBpZD0ic2hhcGU4NC0xOTciIHY6bUlEPSI4NCIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxOTkuODUsLTIyNy45MjUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuODQ8L3RpdGxlPg0KLQkJCTxkZXNjPkV4ZWN1dGlvbiBVbml0PC9kZXNjPg0KLQkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4NCi0JCQk8djp0ZXh0UmVjdCBjeD0iNDAuNTI1IiBjeT0iMzYyLjg1IiB3aWR0aD0iODEuMDYiIGhlaWdodD0iMTAuOCIvPg0KLQkJCTxyZWN0IHg9IjAiIHk9IjM1Ny40NSIgd2lkdGg9IjgxLjA1IiBoZWlnaHQ9IjEwLjgiIGNsYXNzPSJzdDciLz4NCi0JCQk8dGV4dCB4PSIyMi4yIiB5PSIzNjAuMTUiIGNsYXNzPSJzdDgiIHY6bGFuZ0lEPSIxMDMzIj48djpwYXJhZ3JhcGggdjpob3JpekFsaWduPSIxIi8+PHY6dGFiTGlzdC8+RXhlY3V0aW9uIDx2OmxmLz48dHNwYW4NCi0JCQkJCQl4PSIzMi41MSIgZHk9IjEuMmVtIiBjbGFzcz0ic3QxMSI+VW5pdDwvdHNwYW4+PC90ZXh0PgkJPC9nPg0KLQkJPGcgaWQ9InNoYXBlODUtMjAxIiB2Om1JRD0iODUiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjkyLjg3NSwtMjI1LjM3NSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi44NTwvdGl0bGU+DQotCQkJPHJlY3QgeD0iMCIgeT0iMzUzLjI1IiB3aWR0aD0iMzAiIGhlaWdodD0iMTUiIGNsYXNzPSJzdDciLz4NCi0JCTwvZz4NCi0JCTxnIGlkPSJzaGFwZTg2LTIwMyIgdjptSUQ9Ijg2IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI2Ny4zNSwtMjI3LjkyNSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi44NjwvdGl0bGU+DQotCQkJPGRlc2M+TG9hZC1TdG9yZSBVbml0PC9kZXNjPg0KLQkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4NCi0JCQk8djp0ZXh0UmVjdCBjeD0iNDAuNTI1IiBjeT0iMzYyLjg1IiB3aWR0aD0iODEuMDYiIGhlaWdodD0iMTAuOCIvPg0KLQkJCTxyZWN0IHg9IjAiIHk9IjM1Ny40NSIgd2lkdGg9IjgxLjA1IiBoZWlnaHQ9IjEwLjgiIGNsYXNzPSJzdDciLz4NCi0JCQk8dGV4dCB4PSIyMC4yMiIgeT0iMzYwLjE1IiBjbGFzcz0ic3Q4IiB2OmxhbmdJRD0iMTAzMyI+PHY6cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPkxvYWQtU3RvcmUgPHY6bGYvPjx0c3Bhbg0KLQkJCQkJCXg9IjMyLjUxIiBkeT0iMS4yZW0iIGNsYXNzPSJzdDExIj5Vbml0PC90c3Bhbj48L3RleHQ+CQk8L2c+DQotCQk8ZyBpZD0ic2hhcGU4Ny0yMDciIHY6bUlEPSI4NyIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMjUuMzc1LC0yNjIuODc1KSI+DQotCQkJPHRpdGxlPtCb0LjRgdGCLjg3PC90aXRsZT4NCi0JCQk8cmVjdCB4PSIwIiB5PSIzNTMuMjUiIHdpZHRoPSIzMCIgaGVpZ2h0PSIxNSIgY2xhc3M9InN0NyIvPg0KLQkJPC9nPg0KLQkJPGcgaWQ9InNoYXBlODgtMjA5IiB2Om1JRD0iODgiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTk5Ljg1LC0yNjUuNDI1KSI+DQotCQkJPHRpdGxlPtCb0LjRgdGCLjg4PC90aXRsZT4NCi0JCQk8ZGVzYz5UcmlnZ2VyIERlYnVnIFVuaXQ8L2Rlc2M+DQotCQkJPHY6dGV4dEJsb2NrIHY6bWFyZ2lucz0icmVjdCgwLDAsMCwwKSIvPg0KLQkJCTx2OnRleHRSZWN0IGN4PSI0MC41MjUiIGN5PSIzNjIuODUiIHdpZHRoPSI4MS4wNiIgaGVpZ2h0PSIxMC44Ii8+DQotCQkJPHJlY3QgeD0iMCIgeT0iMzU3LjQ1IiB3aWR0aD0iODEuMDUiIGhlaWdodD0iMTAuOCIgY2xhc3M9InN0NyIvPg0KLQkJCTx0ZXh0IHg9IjI3LjQ2IiB5PSIzNjAuMTUiIGNsYXNzPSJzdDgiIHY6bGFuZ0lEPSIxMDMzIj48djpwYXJhZ3JhcGggdjpob3JpekFsaWduPSIxIi8+PHY6dGFiTGlzdC8+VHJpZ2dlciA8djpsZi8+PHRzcGFuDQotCQkJCQkJeD0iMTkuNDIiIGR5PSIxLjJlbSIgY2xhc3M9InN0MTEiPkRlYnVnIFVuaXQ8L3RzcGFuPjwvdGV4dD4JCTwvZz4NCi0JCTxnIGlkPSJzaGFwZTg5LTIxMyIgdjptSUQ9Ijg5IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkwLjM3NSwtNjcuODc1KSI+DQotCQkJPHRpdGxlPtCb0LjRgdGCLjg5PC90aXRsZT4NCi0JCQk8cmVjdCB4PSIwIiB5PSIzNjAuNzUiIHdpZHRoPSIzMCIgaGVpZ2h0PSI3LjUiIGNsYXNzPSJzdDciLz4NCi0JCTwvZz4NCi0JCTxnIGlkPSJzaGFwZTkwLTIxNSIgdjptSUQ9IjkwIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDg3LjM1LC02Ni42NzUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuOTA8L3RpdGxlPg0KLQkJCTxkZXNjPklNRU08L2Rlc2M+DQotCQkJPHY6dGV4dEJsb2NrIHY6bWFyZ2lucz0icmVjdCgwLDAsMCwwKSIvPg0KLQkJCTx2OnRleHRSZWN0IGN4PSIxOC4wMjUiIGN5PSIzNjIuODUiIHdpZHRoPSIzNi4wNSIgaGVpZ2h0PSIxMC44Ii8+DQotCQkJPHJlY3QgeD0iMCIgeT0iMzU3LjQ1IiB3aWR0aD0iMzYuMDUiIGhlaWdodD0iMTAuOCIgY2xhc3M9InN0NyIvPg0KLQkJCTx0ZXh0IHg9IjUuNTEiIHk9IjM2NS44NSIgY2xhc3M9InN0OSIgdjpsYW5nSUQ9IjIwNTciPjx2OnBhcmFncmFwaCB2Omhvcml6QWxpZ249IjEiLz48djp0YWJMaXN0Lz5JTUVNPC90ZXh0PgkJPC9nPg0KLQkJPGcgaWQ9InNoYXBlOTEtMjE4IiB2Om1JRD0iOTEiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTAuMzc1LC01OC44NzUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuOTE8L3RpdGxlPg0KLQkJCTxyZWN0IHg9IjAiIHk9IjM2MC43NSIgd2lkdGg9IjMwIiBoZWlnaHQ9IjcuNSIgY2xhc3M9InN0NyIvPg0KLQkJPC9nPg0KLQkJPGcgaWQ9InNoYXBlOTItMjIwIiB2Om1JRD0iOTIiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNzMuODUsLTU3LjY3NSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi45MjwvdGl0bGU+DQotCQkJPGRlc2M+QUhCL0FYSTwvZGVzYz4NCi0JCQk8djp0ZXh0QmxvY2sgdjptYXJnaW5zPSJyZWN0KDAsMCwwLDApIi8+DQotCQkJPHY6dGV4dFJlY3QgY3g9IjMxLjUyNSIgY3k9IjM2Mi44NSIgd2lkdGg9IjYzLjA1IiBoZWlnaHQ9IjEwLjgiLz4NCi0JCQk8cmVjdCB4PSIwIiB5PSIzNTcuNDUiIHdpZHRoPSI2My4wNSIgaGVpZ2h0PSIxMC44IiBjbGFzcz0ic3Q3Ii8+DQotCQkJPHRleHQgeD0iMTMuMjciIHk9IjM2NS44NSIgY2xhc3M9InN0OSIgdjpsYW5nSUQ9IjIwNTciPjx2OnBhcmFncmFwaCB2Omhvcml6QWxpZ249IjEiLz48djp0YWJMaXN0Lz5BSEIvQVhJPC90ZXh0PgkJPC9nPg0KLQkJPGcgaWQ9InNoYXBlOTMtMjIzIiB2Om1JRD0iOTMiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTAuMzc1LC00OS44NzUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuOTM8L3RpdGxlPg0KLQkJCTxyZWN0IHg9IjAiIHk9IjM2MC43NSIgd2lkdGg9IjMwIiBoZWlnaHQ9IjcuNSIgY2xhc3M9InN0NyIvPg0KLQkJPC9nPg0KLQkJPGcgaWQ9InNoYXBlOTQtMjI1IiB2Om1JRD0iOTQiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNzguMzUsLTQ4LjY3NSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi45NDwvdGl0bGU+DQotCQkJPGRlc2M+YnJpZGdlPC9kZXNjPg0KLQkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4NCi0JCQk8djp0ZXh0UmVjdCBjeD0iMjcuMDI1IiBjeT0iMzYyLjg1IiB3aWR0aD0iNTQuMDUiIGhlaWdodD0iMTAuOCIvPg0KLQkJCTxyZWN0IHg9IjAiIHk9IjM1Ny40NSIgd2lkdGg9IjU0LjA1IiBoZWlnaHQ9IjEwLjgiIGNsYXNzPSJzdDciLz4NCi0JCQk8dGV4dCB4PSIxMy43NyIgeT0iMzY1Ljg1IiBjbGFzcz0ic3Q5IiB2OmxhbmdJRD0iMjA1NyI+PHY6cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPmJyaWRnZTwvdGV4dD4JCTwvZz4NCi0JCTxnIGlkPSJzaGFwZTk1LTIyOCIgdjptSUQ9Ijk1IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI5Mi44NzUsLTY3Ljg3NSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi45NTwvdGl0bGU+DQotCQkJPHJlY3QgeD0iMCIgeT0iMzYwLjc1IiB3aWR0aD0iMzAiIGhlaWdodD0iNy41IiBjbGFzcz0ic3Q3Ii8+DQotCQk8L2c+DQotCQk8ZyBpZD0ic2hhcGU5Ni0yMzAiIHY6bUlEPSI5NiIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyODkuODUsLTY2LjY3NSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi45NjwvdGl0bGU+DQotCQkJPGRlc2M+RE1FTTwvZGVzYz4NCi0JCQk8djp0ZXh0QmxvY2sgdjptYXJnaW5zPSJyZWN0KDAsMCwwLDApIi8+DQotCQkJPHY6dGV4dFJlY3QgY3g9IjE4LjAyNSIgY3k9IjM2Mi44NSIgd2lkdGg9IjM2LjA1IiBoZWlnaHQ9IjEwLjgiLz4NCi0JCQk8cmVjdCB4PSIwIiB5PSIzNTcuNDUiIHdpZHRoPSIzNi4wNSIgaGVpZ2h0PSIxMC44IiBjbGFzcz0ic3Q3Ii8+DQotCQkJPHRleHQgeD0iMy42OSIgeT0iMzY1Ljg1IiBjbGFzcz0ic3Q5IiB2OmxhbmdJRD0iMjA1NyI+PHY6cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPkRNRU08L3RleHQ+CQk8L2c+DQotCQk8ZyBpZD0ic2hhcGU5Ny0yMzMiIHY6bUlEPSI5NyIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyOTIuODc1LC01OC44NzUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuOTc8L3RpdGxlPg0KLQkJCTxyZWN0IHg9IjAiIHk9IjM2MC43NSIgd2lkdGg9IjMwIiBoZWlnaHQ9IjcuNSIgY2xhc3M9InN0NyIvPg0KLQkJPC9nPg0KLQkJPGcgaWQ9InNoYXBlOTgtMjM1IiB2Om1JRD0iOTgiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjc2LjM1LC01Ny42NzUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuOTg8L3RpdGxlPg0KLQkJCTxkZXNjPkFIQi9BWEk8L2Rlc2M+DQotCQkJPHY6dGV4dEJsb2NrIHY6bWFyZ2lucz0icmVjdCgwLDAsMCwwKSIvPg0KLQkJCTx2OnRleHRSZWN0IGN4PSIzMS41MjUiIGN5PSIzNjIuODUiIHdpZHRoPSI2My4wNSIgaGVpZ2h0PSIxMC44Ii8+DQotCQkJPHJlY3QgeD0iMCIgeT0iMzU3LjQ1IiB3aWR0aD0iNjMuMDUiIGhlaWdodD0iMTAuOCIgY2xhc3M9InN0NyIvPg0KLQkJCTx0ZXh0IHg9IjEzLjI3IiB5PSIzNjUuODUiIGNsYXNzPSJzdDkiIHY6bGFuZ0lEPSIyMDU3Ij48djpwYXJhZ3JhcGggdjpob3JpekFsaWduPSIxIi8+PHY6dGFiTGlzdC8+QUhCL0FYSTwvdGV4dD4JCTwvZz4NCi0JCTxnIGlkPSJzaGFwZTk5LTIzOCIgdjptSUQ9Ijk5IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI5Mi44NzUsLTQ5Ljg3NSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi45OTwvdGl0bGU+DQotCQkJPHJlY3QgeD0iMCIgeT0iMzYwLjc1IiB3aWR0aD0iMzAiIGhlaWdodD0iNy41IiBjbGFzcz0ic3Q3Ii8+DQotCQk8L2c+DQotCQk8ZyBpZD0ic2hhcGUxMDAtMjQwIiB2Om1JRD0iMTAwIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI4MC44NSwtNDguNjc1KSI+DQotCQkJPHRpdGxlPtCb0LjRgdGCLjEwMDwvdGl0bGU+DQotCQkJPGRlc2M+YnJpZGdlPC9kZXNjPg0KLQkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4NCi0JCQk8djp0ZXh0UmVjdCBjeD0iMjcuMDI1IiBjeT0iMzYyLjg1IiB3aWR0aD0iNTQuMDUiIGhlaWdodD0iMTAuOCIvPg0KLQkJCTxyZWN0IHg9IjAiIHk9IjM1Ny40NSIgd2lkdGg9IjU0LjA1IiBoZWlnaHQ9IjEwLjgiIGNsYXNzPSJzdDciLz4NCi0JCQk8dGV4dCB4PSIxMy43NyIgeT0iMzY1Ljg1IiBjbGFzcz0ic3Q5IiB2OmxhbmdJRD0iMjA1NyI+PHY6cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPmJyaWRnZTwvdGV4dD4JCTwvZz4NCi0JCTxnIGlkPSJzaGFwZTEwMS0yNDMiIHY6bUlEPSIxMDEiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTAuMzc1LC0xODAuMzc1KSI+DQotCQkJPHRpdGxlPtCb0LjRgdGCLjEwMTwvdGl0bGU+DQotCQkJPHJlY3QgeD0iMCIgeT0iMzYwLjc1IiB3aWR0aD0iMzAiIGhlaWdodD0iNy41IiBjbGFzcz0ic3Q3Ii8+DQotCQk8L2c+DQotCQk8ZyBpZD0ic2hhcGUxMDItMjQ1IiB2Om1JRD0iMTAyIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDg3LjM1LC0xNzkuMTc1KSI+DQotCQkJPHRpdGxlPtCb0LjRgdGCLjEwMjwvdGl0bGU+DQotCQkJPGRlc2M+SU1FTTwvZGVzYz4NCi0JCQk8djp0ZXh0QmxvY2sgdjptYXJnaW5zPSJyZWN0KDAsMCwwLDApIi8+DQotCQkJPHY6dGV4dFJlY3QgY3g9IjE4LjAyNSIgY3k9IjM2Mi44NSIgd2lkdGg9IjM2LjA1IiBoZWlnaHQ9IjEwLjgiLz4NCi0JCQk8cmVjdCB4PSIwIiB5PSIzNTcuNDUiIHdpZHRoPSIzNi4wNSIgaGVpZ2h0PSIxMC44IiBjbGFzcz0ic3Q3Ii8+DQotCQkJPHRleHQgeD0iNS41MSIgeT0iMzY1Ljg1IiBjbGFzcz0ic3Q5IiB2OmxhbmdJRD0iMjA1NyI+PHY6cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPklNRU08L3RleHQ+CQk8L2c+DQotCQk8ZyBpZD0ic2hhcGUxMDMtMjQ4IiB2Om1JRD0iMTAzIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkwLjM3NSwtMTcxLjM3NSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi4xMDM8L3RpdGxlPg0KLQkJCTxyZWN0IHg9IjAiIHk9IjM2MC43NSIgd2lkdGg9IjMwIiBoZWlnaHQ9IjcuNSIgY2xhc3M9InN0NyIvPg0KLQkJPC9nPg0KLQkJPGcgaWQ9InNoYXBlMTA0LTI1MCIgdjptSUQ9IjEwNCIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3OC4zNSwtMTcwLjE3NSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi4xMDQ8L3RpdGxlPg0KLQkJCTxkZXNjPnJvdXRlcjwvZGVzYz4NCi0JCQk8djp0ZXh0QmxvY2sgdjptYXJnaW5zPSJyZWN0KDAsMCwwLDApIi8+DQotCQkJPHY6dGV4dFJlY3QgY3g9IjI3LjAyNSIgY3k9IjM2Mi44NSIgd2lkdGg9IjU0LjA1IiBoZWlnaHQ9IjEwLjgiLz4NCi0JCQk8cmVjdCB4PSIwIiB5PSIzNTcuNDUiIHdpZHRoPSI1NC4wNSIgaGVpZ2h0PSIxMC44IiBjbGFzcz0ic3Q3Ii8+DQotCQkJPHRleHQgeD0iMTMuODUiIHk9IjM2NS44NSIgY2xhc3M9InN0OSIgdjpsYW5nSUQ9IjIwNTciPjx2OnBhcmFncmFwaCB2Omhvcml6QWxpZ249IjEiLz48djp0YWJMaXN0Lz5yb3V0ZXI8L3RleHQ+CQk8L2c+DQotCQk8ZyBpZD0ic2hhcGUxMDUtMjUzIiB2Om1JRD0iMTA1IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI5Mi44NzUsLTE4MC4zNzUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuMTA1PC90aXRsZT4NCi0JCQk8cmVjdCB4PSIwIiB5PSIzNjAuNzUiIHdpZHRoPSIzMCIgaGVpZ2h0PSI3LjUiIGNsYXNzPSJzdDciLz4NCi0JCTwvZz4NCi0JCTxnIGlkPSJzaGFwZTEwNi0yNTUiIHY6bUlEPSIxMDYiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjg5Ljg1LC0xNzkuMTc1KSI+DQotCQkJPHRpdGxlPtCb0LjRgdGCLjEwNjwvdGl0bGU+DQotCQkJPGRlc2M+RE1FTTwvZGVzYz4NCi0JCQk8djp0ZXh0QmxvY2sgdjptYXJnaW5zPSJyZWN0KDAsMCwwLDApIi8+DQotCQkJPHY6dGV4dFJlY3QgY3g9IjE4LjAyNSIgY3k9IjM2Mi44NSIgd2lkdGg9IjM2LjA1IiBoZWlnaHQ9IjEwLjgiLz4NCi0JCQk8cmVjdCB4PSIwIiB5PSIzNTcuNDUiIHdpZHRoPSIzNi4wNSIgaGVpZ2h0PSIxMC44IiBjbGFzcz0ic3Q3Ii8+DQotCQkJPHRleHQgeD0iMy42OSIgeT0iMzY1Ljg1IiBjbGFzcz0ic3Q5IiB2OmxhbmdJRD0iMjA1NyI+PHY6cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPkRNRU08L3RleHQ+CQk8L2c+DQotCQk8ZyBpZD0ic2hhcGUxMDctMjU4IiB2Om1JRD0iMTA3IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI5Mi44NzUsLTE3MS4zNzUpIj4NCi0JCQk8dGl0bGU+0JvQuNGB0YIuMTA3PC90aXRsZT4NCi0JCQk8cmVjdCB4PSIwIiB5PSIzNjAuNzUiIHdpZHRoPSIzMCIgaGVpZ2h0PSI3LjUiIGNsYXNzPSJzdDciLz4NCi0JCTwvZz4NCi0JCTxnIGlkPSJzaGFwZTEwOC0yNjAiIHY6bUlEPSIxMDgiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjgwLjg1LC0xNzAuMTc1KSI+DQotCQkJPHRpdGxlPtCb0LjRgdGCLjEwODwvdGl0bGU+DQotCQkJPGRlc2M+cm91dGVyPC9kZXNjPg0KLQkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4NCi0JCQk8djp0ZXh0UmVjdCBjeD0iMjcuMDI1IiBjeT0iMzYyLjg1IiB3aWR0aD0iNTQuMDUiIGhlaWdodD0iMTAuOCIvPg0KLQkJCTxyZWN0IHg9IjAiIHk9IjM1Ny40NSIgd2lkdGg9IjU0LjA1IiBoZWlnaHQ9IjEwLjgiIGNsYXNzPSJzdDciLz4NCi0JCQk8dGV4dCB4PSIxMy44NSIgeT0iMzY1Ljg1IiBjbGFzcz0ic3Q5IiB2OmxhbmdJRD0iMjA1NyI+PHY6cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPnJvdXRlcjwvdGV4dD4JCTwvZz4NCi0JCTxnIGlkPSJzaGFwZTEwOS0yNjMiIHY6bUlEPSIxMDkiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU3Ljg3NSwtMjYyLjg3NSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi4xMDk8L3RpdGxlPg0KLQkJCTxyZWN0IHg9IjAiIHk9IjM1My4yNSIgd2lkdGg9IjMwIiBoZWlnaHQ9IjE1IiBjbGFzcz0ic3Q3Ii8+DQotCQk8L2c+DQotCQk8ZyBpZD0ic2hhcGUxMTAtMjY1IiB2Om1JRD0iMTEwIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzMi4zNSwtMjY1LjQyNSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi4xMTA8L3RpdGxlPg0KLQkJCTxkZXNjPk11bHRpLVBvcnQgUmVnaXN0ZXIgRmlsZTwvZGVzYz4NCi0JCQk8djp0ZXh0QmxvY2sgdjptYXJnaW5zPSJyZWN0KDAsMCwwLDApIi8+DQotCQkJPHY6dGV4dFJlY3QgY3g9IjQwLjUyNSIgY3k9IjM2Mi44NSIgd2lkdGg9IjgxLjA2IiBoZWlnaHQ9IjEwLjgiLz4NCi0JCQk8cmVjdCB4PSIwIiB5PSIzNTcuNDUiIHdpZHRoPSI4MS4wNSIgaGVpZ2h0PSIxMC44IiBjbGFzcz0ic3Q3Ii8+DQotCQkJPHRleHQgeD0iMjEuMDYiIHk9IjM2MC4xNSIgY2xhc3M9InN0OCIgdjpsYW5nSUQ9IjEwMzMiPjx2OnBhcmFncmFwaCB2Omhvcml6QWxpZ249IjEiLz48djp0YWJMaXN0Lz5NdWx0aS1Qb3J0IDx2OmxmLz48dHNwYW4NCi0JCQkJCQl4PSIxNy43MSIgZHk9IjEuMmVtIiBjbGFzcz0ic3QxMSI+UmVnaXN0ZXIgRmlsZTwvdHNwYW4+PC90ZXh0PgkJPC9nPg0KLQkJPGcgaWQ9InNoYXBlMTExLTI2OSIgdjptSUQ9IjExMSIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyOTIuODc1LC0yNjIuODc1KSI+DQotCQkJPHRpdGxlPtCb0LjRgdGCLjExMTwvdGl0bGU+DQotCQkJPHJlY3QgeD0iMCIgeT0iMzUzLjI1IiB3aWR0aD0iMzAiIGhlaWdodD0iMTUiIGNsYXNzPSJzdDciLz4NCi0JCTwvZz4NCi0JCTxnIGlkPSJzaGFwZTExMi0yNzEiIHY6bUlEPSIxMTIiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjY3LjM1LC0yNjUuNDI1KSI+DQotCQkJPHRpdGxlPtCb0LjRgdGCLjExMjwvdGl0bGU+DQotCQkJPGRlc2M+SGFydCBEZWJ1ZyBVbml0PC9kZXNjPg0KLQkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4NCi0JCQk8djp0ZXh0UmVjdCBjeD0iNDAuNTI1IiBjeT0iMzYyLjg1IiB3aWR0aD0iODEuMDYiIGhlaWdodD0iMTAuOCIvPg0KLQkJCTxyZWN0IHg9IjAiIHk9IjM1Ny40NSIgd2lkdGg9IjgxLjA1IiBoZWlnaHQ9IjEwLjgiIGNsYXNzPSJzdDciLz4NCi0JCQk8dGV4dCB4PSIzMi4zMSIgeT0iMzYwLjE1IiBjbGFzcz0ic3Q4IiB2OmxhbmdJRD0iMTAzMyI+PHY6cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPkhhcnQgPHY6bGYvPjx0c3Bhbg0KLQkJCQkJCXg9IjE5LjQyIiBkeT0iMS4yZW0iIGNsYXNzPSJzdDExIj5EZWJ1ZyBVbml0PC90c3Bhbj48L3RleHQ+CQk8L2c+DQotCQk8ZyBpZD0ic2hhcGUxMTMtMjc1IiB2Om1JRD0iMTEzIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkwLjM3NSwtMjI1LjM3NSkiPg0KLQkJCTx0aXRsZT7Qm9C40YHRgi4xMTM8L3RpdGxlPg0KLQkJCTxyZWN0IHg9IjAiIHk9IjM1My4yNSIgd2lkdGg9IjMwIiBoZWlnaHQ9IjE1IiBjbGFzcz0ic3Q3Ii8+DQotCQk8L2c+DQotCQk8ZyBpZD0ic2hhcGUxMTQtMjc3IiB2Om1JRD0iMTE0IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDY0Ljg1LC0yMjcuOTI1KSI+DQotCQkJPHRpdGxlPtCb0LjRgdGCLjExNDwvdGl0bGU+DQotCQkJPGRlc2M+SW5zdHJ1Y3Rpb24gRmV0Y2ggVW5pdDwvZGVzYz4NCi0JCQk8djp0ZXh0QmxvY2sgdjptYXJnaW5zPSJyZWN0KDAsMCwwLDApIi8+DQotCQkJPHY6dGV4dFJlY3QgY3g9IjQwLjUyNSIgY3k9IjM2Mi44NSIgd2lkdGg9IjgxLjA1IiBoZWlnaHQ9IjEwLjgiLz4NCi0JCQk8cmVjdCB4PSIwIiB5PSIzNTcuNDUiIHdpZHRoPSI4MS4wNSIgaGVpZ2h0PSIxMC44IiBjbGFzcz0ic3Q3Ii8+DQotCQkJPHRleHQgeD0iMjAuMTYiIHk9IjM2MC4xNSIgY2xhc3M9InN0OCIgdjpsYW5nSUQ9IjEwMzMiPjx2OnBhcmFncmFwaCB2Omhvcml6QWxpZ249IjEiLz48djp0YWJMaXN0Lz5JbnN0cnVjdGlvbjx2Om5ld2xpbmVDaGFyLz48dHNwYW4NCi0JCQkJCQl4PSIyMS4zIiBkeT0iMS4yZW0iIGNsYXNzPSJzdDExIj5GZXRjaCBVbml0PC90c3Bhbj48L3RleHQ+CQk8L2c+DQotCTwvZz4NCi08L3N2Zz4NCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9kb2NzL3NjcjFfZWFzLnBkZiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL2RvY3Mvc2NyMV9lYXMucGRmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDM2ZTFjLi4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL2RvY3Mvc2NyMV9lYXMucGRmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvZG9jcy9zY3IxX3VtLnBkZiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL2RvY3Mvc2NyMV91bS5wZGYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3YTY5ZDEuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvZG9jcy9zY3IxX3VtLnBkZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlLmZpbGVzIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUuZmlsZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhNDBlYzYuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUuZmlsZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhCi0vLyAKLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0vLyBTUERYLUZpbGVDb250cmlidXRvcjogRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi1jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9oZHUuc3YKLWNvcmUvcGlwZWxpbmUvc2NyMV9waXBlX3RkdS5zdgotY29yZS9waXBlbGluZS9zY3IxX2lwaWMuc3YKLWNvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2Nzci5zdgotY29yZS9waXBlbGluZS9zY3IxX3BpcGVfZXh1LnN2Ci1jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9pYWx1LnN2Ci1jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9pZHUuc3YKLWNvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2lmdS5zdgotY29yZS9waXBlbGluZS9zY3IxX3BpcGVfbHN1LnN2Ci1jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9tcHJmLnN2Ci1jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9tdWwuc3YKLWNvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2Rpdi5zdgotY29yZS9waXBlbGluZS9zY3IxX3BpcGVfdG9wLnN2Ci1jb3JlL3ByaW1pdGl2ZXMvc2NyMV9yZXNldF9jZWxscy5zdgotY29yZS9wcmltaXRpdmVzL3NjcjFfY2cuc3YKLWNvcmUvc2NyMV9jbGtfY3RybC5zdgotY29yZS9zY3IxX3RhcGNfc2hpZnRfcmVnLnN2Ci1jb3JlL3NjcjFfdGFwYy5zdgotY29yZS9zY3IxX3RhcGNfc3luY2hyb25pemVyLnN2Ci1jb3JlL3NjcjFfY29yZV90b3Auc3YKLWNvcmUvc2NyMV9kbS5zdgotY29yZS9zY3IxX2RtaS5zdgotY29yZS9zY3IxX3NjdS5zdgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9pcGljLnN2IGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9pcGljLnN2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWZhYWU1Li4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfaXBpYy5zdgorKysgL2Rldi9udWxsCkBAIC0xLDY3MyArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIxCi0vLyAKLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0vLyBTUERYLUZpbGVDb250cmlidXRvcjogU3ludGFjb3JlIExMQwotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLyBAZmlsZSAgICAgICA8c2NyMV9pcGljLnN2PgotLy8vIEBicmllZiAgICAgIEludGVncmF0ZWQgUHJvZ3JhbW1hYmxlIEludGVycnVwdCBDb250cm9sbGVyIChJUElDKQotLy8vCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gLy8KLSAvLyBGdW5jdGlvbmFsaXR5OgotIC8vIC0gU3luY2hyb25pemVzIElSUSBsaW5lcyAob3B0aW9uYWwpCi0gLy8gLSBEZXRlY3RzIGxldmVsIGFuZCBlZGdlICh3aXRoIG9wdGlvbmFsIGxpbmVzIGludmVyc2lvbikgb2YgSVJRIGxpbmVzCi0gLy8gLSBTZXR1cHMgaW50ZXJydXB0cyBoYW5kbGluZyAobW9kZSwgaW52ZXJzaW9uLCBlbmFibGUpCi0gLy8gLSBQcm92aWRlcyBpbmZvcm1hdGlvbiBhYm91dCBwZW5kaW5nIGludGVycnVwdHMgYW5kIGludGVycnVwdHMgY3VycmVudGx5IGluCi0gLy8gICBzZXJ2aWNlCi0gLy8gLSBHZW5lcmF0ZXMgaW50ZXJydXB0IHJlcXVlc3QgdG8gQ1NSCi0gLy8KLSAvLyBTdHJ1Y3R1cmU6Ci0gLy8gLSBJUlEgbGluZXMgaGFuZGxpbmcgKHN5bmNocm9uaXphdGlvbiwgbGV2ZWwgYW5kIGVkZ2UgZGV0ZWN0aW9uKSBsb2dpYwotIC8vIC0gSVBJQyByZWdpc3RlcnM6Ci0gLy8gICAtIENJU1YKLSAvLyAgIC0gQ0lDU1IKLSAvLyAgIC0gRU9JCi0gLy8gICAtIFNPSQotIC8vICAgLSBJRFgKLSAvLyAgIC0gSVBSCi0gLy8gICAtIElTVlIKLSAvLyAgIC0gSUVSCi0gLy8gICAtIElNUgotIC8vICAgLSBJSU5WUgotIC8vICAgLSBJQ1NSCi0gLy8gLSBQcmlvcml0eSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBsb2dpYwotIC8vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1gaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKLQotYGlmZGVmIFNDUjFfSVBJQ19FTgotCi1gaW5jbHVkZSAic2NyMV9pcGljLnN2aCIKLQotbW9kdWxlIHNjcjFfaXBpYwotKAotICAgIC8vIENvbW1vbgotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLCAgICAgICAgICAgICAgICAgIC8vIElQSUMgcmVzZXQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGssICAgICAgICAgICAgICAgICAgICAvLyBJUElDIGNsb2NrCi0KLSAgICAvLyBFeHRlcm5hbCBJbnRlcnJ1cHQgbGluZXMKLSAgICBpbnB1dCAgIGxvZ2ljIFtTQ1IxX0lSUV9MSU5FU19OVU0tMTowXSAgICAgICAgICBzb2MyaXBpY19pcnFfbGluZXNfaSwgICAvLyBFeHRlcm5hbCBJUlEgbGluZXMKLQotICAgIC8vIENTUiA8LT4gSVBJQyBpbnRlcmZhY2UKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IyaXBpY19yX3JlcV9pLCAgICAgICAvLyBJUElDIHJlYWQgcmVxdWVzdAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJpcGljX3dfcmVxX2ksICAgICAgIC8vIElQSUMgd3JpdGUgcmVxdWVzdAotICAgIGlucHV0ICAgbG9naWMgWzI6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJpcGljX2FkZHJfaSwgICAgICAgIC8vIElQSUMgYWRkcmVzcwotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgIGNzcjJpcGljX3dkYXRhX2ksICAgICAgIC8vIElQSUMgd3JpdGUgZGF0YQotICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgIGlwaWMyY3NyX3JkYXRhX28sICAgICAgIC8vIElQSUMgcmVhZCBkYXRhCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBpYzJjc3JfaXJxX21fcmVxX28gICAgLy8gSVJRIHJlcXVlc3QgZnJvbSBJUElDCi0pOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHR5cGVzIGRlY2xhcmF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXR5cGVkZWYgc3RydWN0IHBhY2tlZCB7IC8vIGNwLjYKLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmQ7Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeDsKLX0gdHlwZV9zY3IxX3NlYXJjaF9vbmVfMl9zOwotCi10eXBlZGVmIHN0cnVjdCBwYWNrZWQgeyAvLyBjcC42Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZkOwotICAgIGxvZ2ljICAgW1NDUjFfSVJRX1ZFQ1RfV0lEVEgtMTowXSAgICAgICBpZHg7Ci19IHR5cGVfc2NyMV9zZWFyY2hfb25lXzE2X3M7Ci0KLXR5cGVkZWYgc3RydWN0IHBhY2tlZCB7Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwOwotICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZTsKLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW07Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludjsKLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXM7Ci0gICAgbG9naWMgICBbU0NSMV9JUlFfTElORVNfV0lEVEgtMTowXSAgICAgIGxpbmU7Ci19IHR5cGVfc2NyMV9pY3NyX21fczsKLQotdHlwZWRlZiBzdHJ1Y3QgcGFja2VkIHsKLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXA7Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGllOwotfSB0eXBlX3NjcjFfY2ljc3JfczsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCBmdW5jdGlvbnMgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1mdW5jdGlvbiBhdXRvbWF0aWMgdHlwZV9zY3IxX3NlYXJjaF9vbmVfMl9zIHNjcjFfc2VhcmNoX29uZV8yKAotICAgIGlucHV0ICAgbG9naWMgICBbMTowXSBkaW4KLSk7Ci0gICAgdHlwZV9zY3IxX3NlYXJjaF9vbmVfMl9zIHRtcDsKLWJlZ2luCi0gICAgdG1wLnZkICA9IHxkaW47Ci0gICAgdG1wLmlkeCA9IH5kaW5bMF07Ci0gICAgc2NyMV9zZWFyY2hfb25lXzIgPSAgdG1wOwotZW5kCi1lbmRmdW5jdGlvbgotCi1mdW5jdGlvbiBhdXRvbWF0aWMgdHlwZV9zY3IxX3NlYXJjaF9vbmVfMTZfcyBzY3IxX3NlYXJjaF9vbmVfMTYoCi0gICAgaW5wdXQgICBsb2dpYyBbMTU6MF0gICAgZGluCi0pOwotICAgIGxvZ2ljIFs3OjBdICAgICAgICAgc3RhZ2UxX3ZkOwotICAgIGxvZ2ljIFszOjBdICAgICAgICAgc3RhZ2UyX3ZkOwotICAgIGxvZ2ljIFsxOjBdICAgICAgICAgc3RhZ2UzX3ZkOwotCi0gICAgbG9naWMgICAgICAgICAgICAgICBzdGFnZTFfaWR4IFs3OjBdOwotICAgIGxvZ2ljIFsxOjBdICAgICAgICAgc3RhZ2UyX2lkeCBbMzowXTsKLSAgICBsb2dpYyBbMjowXSAgICAgICAgIHN0YWdlM19pZHggWzE6MF07Ci0gICAgdHlwZV9zY3IxX3NlYXJjaF9vbmVfMTZfcyByZXN1bHQ7Ci0gICAgdHlwZV9zY3IxX3NlYXJjaF9vbmVfMl9zIHRtcDsKLSAgICBpbnRlZ2VyIGk7IC8vIGNwLjE3Ci1iZWdpbgotICAgIC8vIFN0YWdlIDEKLSAgICBmb3IgKGk9MDsgaTw4OyBpPWkrMSkgYmVnaW4KLSAgICAgICAgdG1wID0gc2NyMV9zZWFyY2hfb25lXzIoZGluWyhpKzEpKjItMS06Ml0pOwotICAgICAgICBzdGFnZTFfdmRbaV0gID0gdG1wLnZkOwotICAgICAgICBzdGFnZTFfaWR4W2ldID0gdG1wLmlkeDsKLSAgICBlbmQKLQotICAgIC8vIFN0YWdlIDIKLSAgICBmb3IgKGk9MDsgaTw0OyBpPWkrMSkgYmVnaW4KLSAgICAgICAgdG1wID0gc2NyMV9zZWFyY2hfb25lXzIoc3RhZ2UxX3ZkWyhpKzEpKjItMS06Ml0pOwotICAgICAgICBzdGFnZTJfdmRbaV0gID0gdG1wLnZkOwotICAgICAgICBzdGFnZTJfaWR4W2ldID0gKH50bXAuaWR4KSA/IHt0bXAuaWR4LCBzdGFnZTFfaWR4WzIqaV19IDoge3RtcC5pZHgsIHN0YWdlMV9pZHhbMippKzFdfTsKLSAgICBlbmQKLQotICAgIC8vIFN0YWdlIDMKLSAgICBmb3IgKGk9MDsgaTwyOyBpPWkrMSkgYmVnaW4KLSAgICAgICAgdG1wID0gc2NyMV9zZWFyY2hfb25lXzIoc3RhZ2UyX3ZkWyhpKzEpKjItMS06Ml0pOwotICAgICAgICBzdGFnZTNfdmRbaV0gID0gdG1wLnZkOwotICAgICAgICBzdGFnZTNfaWR4W2ldID0gKH50bXAuaWR4KSA/IHt0bXAuaWR4LCBzdGFnZTJfaWR4WzIqaV19IDoge3RtcC5pZHgsIHN0YWdlMl9pZHhbMippKzFdfTsKLSAgICBlbmQKLQotICAgIC8vIFN0YWdlIDQKLSAgICByZXN1bHQudmQgPSB8c3RhZ2UzX3ZkOwotICAgIHJlc3VsdC5pZHggPSAoc3RhZ2UzX3ZkWzBdKSA/IHsxJ2IwLCBzdGFnZTNfaWR4WzBdfSA6IHsxJ2IxLCBzdGFnZTNfaWR4WzFdfTsKLQotICAgIHNjcjFfc2VhcmNoX29uZV8xNiA9IHJlc3VsdDsKLWVuZAotZW5kZnVuY3Rpb24KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHNpZ25hbHMgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIElSUSBsaW5lcyBoYW5kbGluZyBzaWduYWxzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1sb2dpYyBbU0NSMV9JUlFfVkVDVF9OVU0tMTowXSAgICAgICAgICAgaXJxX2xpbmVzOyAgICAgICAgICAgICAgLy8gSW50ZXJuYWwgSVJRIGxpbmVzCi1gaWZkZWYgU0NSMV9JUElDX1NZTkNfRU4KLWxvZ2ljIFtTQ1IxX0lSUV9WRUNUX05VTS0xOjBdICAgICAgICAgICBpcnFfbGluZXNfc3luYzsKLWBlbmRpZiAvLyBTQ1IxX0lQSUNfU1lOQ19FTgotbG9naWMgW1NDUjFfSVJRX1ZFQ1RfTlVNLTE6MF0gICAgICAgICAgIGlycV9saW5lc19kbHk7ICAgICAgICAgIC8vIEludGVybmFsIElSUSBsaW5lcyBkZWxheWVkIGZvciAxIGN5Y2xlCi1sb2dpYyBbU0NSMV9JUlFfVkVDVF9OVU0tMTowXSAgICAgICAgICAgaXJxX2VkZ2VfZGV0ZWN0ZWQ7ICAgICAgLy8gSVJRIGxpbmVzIGVkZ2UgZGV0ZWN0ZWQgZmxhZ3MKLWxvZ2ljIFtTQ1IxX0lSUV9WRUNUX05VTS0xOjBdICAgICAgICAgICBpcnFfbHZsOyAgICAgICAgICAgICAgICAvLyBJUlEgbGluZXMgbGV2ZWwKLQotLy8gSVBJQyByZWdpc3RlcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIENJU1YgcmVnaXN0ZXIKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcGljX2Npc3ZfdXBkOyAgICAgICAgICAvLyBDdXJyZW50IEludGVycnVwdCBWZWNvdHIgaW4gU2VydmljZSByZWdpc3RlciB1cGRhdGUKLWxvZ2ljIFtTQ1IxX0lSUV9WRUNUX1dJRFRILTE6MF0gICAgICAgICBpcGljX2Npc3ZfZmY7ICAgICAgICAgICAvLyBDdXJyZW50IEludGVycnVwdCBWZWN0b3IgaW4gU2VydmljZSByZWdpc3RlcgotbG9naWMgW1NDUjFfSVJRX1ZFQ1RfV0lEVEgtMTowXSAgICAgICAgIGlwaWNfY2lzdl9uZXh0OyAgICAgICAgIC8vIEN1cnJlbnQgSW50ZXJydXB0IFZlY3RvciBpbiBTZXJ2aWNlIHJlZ2lzdGVyIG5leHQgdmFsdWUKLQotLy8gQ0lDUyByZWdpc3RlciAoQ0lDU1IpCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ljc3Jfd3JfcmVxOyAgICAgICAgICAgLy8gV3JpdGUgcmVxdWVzdCB0byBDdXJyZW50IEludGVycnVwdCBDb250cm9sIFN0YXR1cyByZWdpc3RlcgotdHlwZV9zY3IxX2NpY3NyX3MgICAgICAgICAgICAgICAgICAgICAgIGlwaWNfY2ljc3I7ICAgICAgICAgICAgIC8vIEN1cnJlbnQgSW50ZXJydXB0IENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyCi0KLS8vIEVPSSByZWdpc3RlcgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVvaV93cl9yZXE7ICAgICAgICAgICAgIC8vIFdyaXRlIHJlcXVlc3QgdG8gRW5kIG9mIEludGVycnVwdCByZWdpc3RlcgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwaWNfZW9pX3JlcTsgICAgICAgICAgIC8vIFJlcXVlc3QgdG8gZW5kIHRoZSBpbnRlcnJ1cHQgdGhhdCBpcyBjdXJyZW50bHkgaW4gc2VydmljZQotCi0vLyBTT0kgcmVnaXN0ZXIKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2lfd3JfcmVxOyAgICAgICAgICAgICAvLyBXcml0ZSByZXF1ZXN0IHRvIFN0YXJ0IG9mIEludGVycnVwdCByZWdpc3RlcgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwaWNfc29pX3JlcTsgICAgICAgICAgIC8vIFJlcXVlc3QgdG8gc3RhcnQgdGhlIGludGVycnVwdAotCi0vLyBJRFggcmVnaXN0ZXIgKElEWFIpCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4cl93cl9yZXE7ICAgICAgICAgICAgLy8gV3JpdGUgcmVxdWVzdCB0byBJbmRleCByZWdpc3RlcgotbG9naWMgW1NDUjFfSVJRX0lEWF9XSURUSC0xOjBdICAgICAgICAgIGlwaWNfaWR4cl9mZjsgICAgICAgICAgIC8vIEluZGV4IHJlZ2lzdGVyCi0KLS8vIElQIHJlZ2lzdGVyIChJUFIpCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBpY19pcHJfdXBkOyAgICAgICAgICAgLy8gSW50ZXJydXB0IHBlbmRpbmcgcmVnaXN0ZXIgdXBkYXRlCi1sb2dpYyBbU0NSMV9JUlFfVkVDVF9OVU0tMTowXSAgICAgICAgICAgaXBpY19pcHJfZmY7ICAgICAgICAgICAgLy8gSW50ZXJydXB0IHBlbmRpbmcgcmVnaXN0ZXIKLWxvZ2ljIFtTQ1IxX0lSUV9WRUNUX05VTS0xOjBdICAgICAgICAgICBpcGljX2lwcl9uZXh0OyAgICAgICAgICAvLyBJbnRlcnJ1cHQgcGVuZGluZyByZWdpc3RlciBuZXh0IHZhbHVlCi1sb2dpYyBbU0NSMV9JUlFfVkVDVF9OVU0tMTowXSAgICAgICAgICAgaXBpY19pcHJfY2xyX2NvbmQ7ICAgICAgLy8gSW50ZXJydXB0IHBlbmRpbmcgY2xlYXIgY29uZGl0aW9uCi1sb2dpYyBbU0NSMV9JUlFfVkVDVF9OVU0tMTowXSAgICAgICAgICAgaXBpY19pcHJfY2xyX3JlcTsgICAgICAgLy8gSW50ZXJydXB0IHBlbmRpbmcgY2xlYXIgcmVxdWVzdAotbG9naWMgW1NDUjFfSVJRX1ZFQ1RfTlVNLTE6MF0gICAgICAgICAgIGlwaWNfaXByX2NscjsgICAgICAgICAgIC8vIEludGVycnVwdCBwZW5kaW5nIGNsZWFyIG9wZXJhdGlvbgotCi0vLyBJU1YgcmVnaXN0ZXIgKElTVlIpCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBpY19pc3ZyX3VwZDsgICAgICAgICAgLy8gSW50ZXJydXB0IFNlcnZpY2VkIHJlZ2lzdGVyIHVwZGF0ZQotbG9naWMgW1NDUjFfSVJRX1ZFQ1RfTlVNLTE6MF0gICAgICAgICAgIGlwaWNfaXN2cl9mZjsgICAgICAgICAgIC8vIEludGVycnVwdCBTZXJ2aWNlZCByZWdpc3RlcgotbG9naWMgW1NDUjFfSVJRX1ZFQ1RfTlVNLTE6MF0gICAgICAgICAgIGlwaWNfaXN2cl9uZXh0OyAgICAgICAgIC8vIEludGVycnVwdCBTZXJ2aWNlZCByZWdpc3RlciBuZXh0IHZhbHVlCi0KLS8vIElFIHJlZ2lzdGVyIChJRVIpCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBpY19pZXJfdXBkOyAgICAgICAgICAgLy8gSW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciB1cGRhdGUKLWxvZ2ljIFtTQ1IxX0lSUV9WRUNUX05VTS0xOjBdICAgICAgICAgICBpcGljX2llcl9mZjsgICAgICAgICAgICAvLyBJbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyCi1sb2dpYyBbU0NSMV9JUlFfVkVDVF9OVU0tMTowXSAgICAgICAgICAgaXBpY19pZXJfbmV4dDsgICAgICAgICAgLy8gSW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciBuZXh0IHZhbHVlCi0KLS8vIElNIHJlZ2lzdGVyIChJTVIpCi1sb2dpYyBbU0NSMV9JUlFfVkVDVF9OVU0tMTowXSAgICAgICAgICAgaXBpY19pbXJfZmY7ICAgICAgICAgICAgLy8gSW50ZXJydXB0IG1vZGUgcmVnaXN0ZXIKLWxvZ2ljIFtTQ1IxX0lSUV9WRUNUX05VTS0xOjBdICAgICAgICAgICBpcGljX2ltcl9uZXh0OyAgICAgICAgICAvLyBJbnRlcnJ1cHQgbW9kZSByZWdpc3RlciBuZXh0IHZhbHVlCi0KLS8vIElJTlYgcmVnaXN0ZXIgKElJTlZSKQotbG9naWMgW1NDUjFfSVJRX1ZFQ1RfTlVNLTE6MF0gICAgICAgICAgIGlwaWNfaWludnJfZmY7ICAgICAgICAgIC8vIEludGVycnVwdCBJbnZlcnNpb24gcmVnaXN0ZXIKLWxvZ2ljIFtTQ1IxX0lSUV9WRUNUX05VTS0xOjBdICAgICAgICAgICBpcGljX2lpbnZyX25leHQ7ICAgICAgICAvLyBJbnRlcnJ1cHQgSW52ZXJzaW9uIHJlZ2lzdGVyIG5leHQgdmFsdWUKLQotLy8gSUNTIHJlZ2lzdGVyIChJQ1NSKQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc3Jfd3JfcmVxOyAgICAgICAgICAgIC8vIFdyaXRlIHJlcXVlc3QgdG8gSW50ZXJydXB0IENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyCi10eXBlX3NjcjFfaWNzcl9tX3MgICAgICAgICAgICAgICAgICAgICAgaXBpY19pY3NyOyAgICAgICAgICAgICAgLy8gSW50ZXJydXB0IENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyCi0KLS8vIFByaW9yaXR5IGludGVycnVwdCBnZW5lcmF0aW9uIHNpZ25hbHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFNlcnZpY2VkIGludGVycnVwdCBzaWduYWxzCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXJxX3NlcnZfdmQ7ICAgICAgICAgICAgLy8gVGhlcmUgaXMgYW4gaW50ZXJydXB0IGluIHNlcnZpY2UKLWxvZ2ljIFtTQ1IxX0lSUV9WRUNUX1dJRFRILTE6MF0gICAgICAgICBpcnFfc2Vydl9pZHg7ICAgICAgICAgICAvLyBJbmRleCBvZiBhbiBpbnRlcnJ1cHQgdGhhdCBpcyBjdXJyZW50bHkgaW4gc2VydmljZQotCi0vLyBSZXF1ZXN0ZWQgaW50ZXJydXB0IHNpZ25hbHMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcnFfcmVxX3ZkOyAgICAgICAgICAgICAvLyBUaGVyZSBpcyBhIHJlcXVlc3RlZCBpbnRlcnJ1cHQKLWxvZ2ljIFtTQ1IxX0lSUV9WRUNUX1dJRFRILTE6MF0gICAgICAgICBpcnFfcmVxX2lkeDsgICAgICAgICAgICAvLyBJbmRleCBvZiBhIHJlcXVlc3RlZCBpbnRlcnJ1cHQKLQotLy8gSW50ZXJydXB0IHJlcXVlc3RlZCBvbiAiZW5kIG9mIHRoZSBwcmV2aW91cyBpbnRlcnJ1cHQiIHNpZ25hbHMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcnFfZW9pX3JlcV92ZDsgICAgICAgICAvLyBUaGVyZSBpcyBhIHJlcXVlc3RlZCBpbnRlcnJ1cHQgd2hlbiB0aGUgcHJldmlvdXMgb25lIGhhcyBlbmRlZAotbG9naWMgW1NDUjFfSVJRX1ZFQ1RfV0lEVEgtMTowXSAgICAgICAgIGlycV9lb2lfcmVxX2lkeDsgICAgICAgIC8vIEluZGV4IG9mIGFuIGludGVycnVwdCByZXF1ZXN0ZWQgd2hlbiB0aGUgcHJldmlvdXMgb25lIGhhcyBlbmRlZAotCi1sb2dpYyBbU0NSMV9JUlFfVkVDVF9OVU0tMTowXSAgICAgICAgICAgaXJxX3JlcV92OyAgICAgICAgICAgICAgLy8gVmVjdG9yIG9mIGludGVycnVwdHMgdGhhdCBhcmUgcGVuZGluZyBhbmQgZW5hYmxlZAotCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXJxX3N0YXJ0X3ZkOyAgICAgICAgICAgLy8gUmVxdWVzdCB0byBzdGFydCBhbiBpbnRlcnJ1cHQgaXMgdmFsaWQKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcnFfaGlfcHJpb3JfcG5kOyAgICAgICAvLyBUaGVyZSBpcyBhIHBlbmRpbmcgSVJRIHdpdGggYSBwcmlvcml0eSBoaWdoZXIgdGhhbiBvZiB0aGUgaW50ZXJydXB0IHRoYXQgaXMgY3VycmVudGx5IGluIHNlcnZpY2UKLQotdHlwZV9zY3IxX3NlYXJjaF9vbmVfMTZfcyAgICAgICAgICAgICAgIGlycl9wcmlvcml0eTsgICAgICAgICAgIC8vIFN0cnVjdHVyZSBmb3IgdmQgYW5kIGlkeCBvZiB0aGUgcmVxdWVzdGVkIGludGVycnVwdAotdHlwZV9zY3IxX3NlYXJjaF9vbmVfMTZfcyAgICAgICAgICAgICAgIGlzdnJfcHJpb3JpdHlfZW9pOyAgICAgIC8vIFN0cnVjdHVyZSBmb3IgdmQgYW5kIGlkeCBvZiB0aGUgaW50ZXJydXB0IHJlcXVlc3RlZCB3aGVuIHRoZSBwcmV2aW91cyBpbnRlcnJ1cHQgaGFzIGVuZGVkCi1sb2dpYyBbU0NSMV9JUlFfVkVDVF9OVU0tMTowXSAgICAgICAgICAgaXBpY19pc3ZyX2VvaTsgICAgICAgICAgLy8gSW50ZXJydXB0IFNlcnZpY2VkIHJlZ2lzdGVyIHdoZW4gdGhlIHByZXZpb3VzIGludGVycnVwdCBoYXMgZW5kZWQKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIElSUSBsaW5lcyBoYW5kbGluZwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYGlmZGVmIFNDUjFfSVBJQ19TWU5DX0VOCi0vLyBJUlEgbGluZXMgc3luY2hyb25pemF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICBpcnFfbGluZXNfc3luYyA8PSAnMDsKLSAgICAgICAgaXJxX2xpbmVzICAgICAgPD0gJzA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgaXJxX2xpbmVzX3N5bmMgPD0gc29jMmlwaWNfaXJxX2xpbmVzX2k7Ci0gICAgICAgIGlycV9saW5lcyAgICAgIDw9IGlycV9saW5lc19zeW5jOwotICAgIGVuZAotZW5kCi1gZWxzZSAvLyBTQ1IxX0lQSUNfU1lOQ19FTgotYXNzaWduIGlycV9saW5lcyA9IHNvYzJpcGljX2lycV9saW5lc19pOwotYGVuZGlmIC8vIFNDUjFfSVBJQ19TWU5DX0VOCi0KLS8vIElSUSBsaW5lcyBsZXZlbCBkZXRlY3Rpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBpcnFfbHZsID0gaXJxX2xpbmVzIF4gaXBpY19paW52cl9uZXh0OwotCi0vLyBJUlEgbGluZXMgZWRnZSBkZXRlY3Rpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGlycV9saW5lc19kbHkgPD0gJzA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgaXJxX2xpbmVzX2RseSA8PSBpcnFfbGluZXM7Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIGlycV9lZGdlX2RldGVjdGVkID0gKGlycV9saW5lc19kbHkgXiBpcnFfbGluZXMpICYgaXJxX2x2bDsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIElQSUMgcmVnaXN0ZXJzIHJlYWQvd3JpdGUgaW50ZXJmYWNlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBSZWFkIExvZ2ljCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBSZWFkIGRhdGEgbXVsdGlwbGV4ZXIKLWFsd2F5c19jb21iIGJlZ2luCi0gICAgaXBpYzJjc3JfcmRhdGFfbyAgPSAnMDsKLQotICAgIGlmIChjc3IyaXBpY19yX3JlcV9pKSBiZWdpbgotICAgICAgICBjYXNlIChjc3IyaXBpY19hZGRyX2kpCi0gICAgICAgICAgICBTQ1IxX0lQSUNfQ0lTViA6IGJlZ2luCi0gICAgICAgICAgICAgICAgaXBpYzJjc3JfcmRhdGFfb1tTQ1IxX0lSUV9WRUNUX1dJRFRILTE6MF0gPSBpcnFfc2Vydl92ZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaXBpY19jaXN2X2ZmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTQ1IxX0lSUV9WT0lEX1ZFQ1RfTlVNOwotICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBTQ1IxX0lQSUNfQ0lDU1IgOiBiZWdpbgotICAgICAgICAgICAgICAgIGlwaWMyY3NyX3JkYXRhX29bU0NSMV9JUElDX0lDU1JfSVBdICA9IGlwaWNfY2ljc3IuaXA7Ci0gICAgICAgICAgICAgICAgaXBpYzJjc3JfcmRhdGFfb1tTQ1IxX0lQSUNfSUNTUl9JRV0gID0gaXBpY19jaWNzci5pZTsKLSAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgU0NSMV9JUElDX0lQUiA6IGJlZ2luCi0gICAgICAgICAgICAgICAgaXBpYzJjc3JfcmRhdGFfbyA9IGBTQ1IxX1hMRU4nKGlwaWNfaXByX2ZmKTsKLSAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgU0NSMV9JUElDX0lTVlIgOiBiZWdpbgotICAgICAgICAgICAgICAgIGlwaWMyY3NyX3JkYXRhX28gPSBgU0NSMV9YTEVOJyhpcGljX2lzdnJfZmYpOwotICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBTQ1IxX0lQSUNfRU9JLAotICAgICAgICAgICAgU0NSMV9JUElDX1NPSSA6IGJlZ2luCi0gICAgICAgICAgICAgICAgaXBpYzJjc3JfcmRhdGFfbyA9ICcwOwotICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBTQ1IxX0lQSUNfSURYIDogYmVnaW4KLSAgICAgICAgICAgICAgICBpcGljMmNzcl9yZGF0YV9vID0gYFNDUjFfWExFTicoaXBpY19pZHhyX2ZmKTsKLSAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgU0NSMV9JUElDX0lDU1IgOiBiZWdpbgotICAgICAgICAgICAgICAgIGlwaWMyY3NyX3JkYXRhX29bU0NSMV9JUElDX0lDU1JfSVBdICAgICAgPSBpcGljX2ljc3IuaXA7Ci0gICAgICAgICAgICAgICAgaXBpYzJjc3JfcmRhdGFfb1tTQ1IxX0lQSUNfSUNTUl9JRV0gICAgICA9IGlwaWNfaWNzci5pZTsKLSAgICAgICAgICAgICAgICBpcGljMmNzcl9yZGF0YV9vW1NDUjFfSVBJQ19JQ1NSX0lNXSAgICAgID0gaXBpY19pY3NyLmltOwotICAgICAgICAgICAgICAgIGlwaWMyY3NyX3JkYXRhX29bU0NSMV9JUElDX0lDU1JfSU5WXSAgICAgPSBpcGljX2ljc3IuaW52OwotICAgICAgICAgICAgICAgIGlwaWMyY3NyX3JkYXRhX29bU0NSMV9JUElDX0lDU1JfUFJWX01TQjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfSVBJQ19JQ1NSX1BSVl9MU0JdID0gU0NSMV9JUElDX1BSVl9NOwotICAgICAgICAgICAgICAgIGlwaWMyY3NyX3JkYXRhX29bU0NSMV9JUElDX0lDU1JfSVNdICAgICAgPSBpcGljX2ljc3IuaXM7Ci0gICAgICAgICAgICAgICAgaXBpYzJjc3JfcmRhdGFfb1tTQ1IxX0lQSUNfSUNTUl9MTl9NU0ItMToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfSVBJQ19JQ1NSX0xOX0xTQl0gID0gaXBpY19pY3NyLmxpbmU7Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIGRlZmF1bHQgOiBiZWdpbgotICAgICAgICAgICAgICAgIGlwaWMyY3NyX3JkYXRhX28gPSAneDsKLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmRjYXNlCi0gICAgZW5kCi1lbmQKLQotLy8gV3JpdGUgbG9naWMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFJlZ2lzdGVyIHNlbGVjdGlvbgotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBjaWNzcl93cl9yZXEgPSAxJ2IwOwotICAgIGVvaV93cl9yZXEgICA9IDEnYjA7Ci0gICAgc29pX3dyX3JlcSAgID0gMSdiMDsKLSAgICBpZHhyX3dyX3JlcSAgPSAxJ2IwOwotICAgIGljc3Jfd3JfcmVxICA9IDEnYjA7Ci0gICAgaWYgKGNzcjJpcGljX3dfcmVxX2kpIGJlZ2luCi0gICAgICAgIGNhc2UgKGNzcjJpcGljX2FkZHJfaSkKLSAgICAgICAgICAgIFNDUjFfSVBJQ19DSVNWIDogYmVnaW4gZW5kIC8vIFF1aWV0IFJlYWQtT25seQotICAgICAgICAgICAgU0NSMV9JUElDX0NJQ1NSOiBjaWNzcl93cl9yZXEgPSAxJ2IxOwotICAgICAgICAgICAgU0NSMV9JUElDX0lQUiAgOiBiZWdpbiBlbmQKLSAgICAgICAgICAgIFNDUjFfSVBJQ19JU1ZSIDogYmVnaW4gZW5kIC8vIFF1aWV0IFJlYWQtT25seQotICAgICAgICAgICAgU0NSMV9JUElDX0VPSSAgOiBlb2lfd3JfcmVxICAgPSAxJ2IxOwotICAgICAgICAgICAgU0NSMV9JUElDX1NPSSAgOiBzb2lfd3JfcmVxICAgPSAxJ2IxOwotICAgICAgICAgICAgU0NSMV9JUElDX0lEWCAgOiBpZHhyX3dyX3JlcSAgPSAxJ2IxOwotICAgICAgICAgICAgU0NSMV9JUElDX0lDU1IgOiBpY3NyX3dyX3JlcSAgPSAxJ2IxOwotICAgICAgICAgICAgZGVmYXVsdCA6IGJlZ2luIC8vIElsbGVnYWwgSVBJQyByZWdpc3RlciBhZGRyZXNzCi0gICAgICAgICAgICAgICAgY2ljc3Jfd3JfcmVxID0gJ3g7Ci0gICAgICAgICAgICAgICAgZW9pX3dyX3JlcSAgID0gJ3g7Ci0gICAgICAgICAgICAgICAgc29pX3dyX3JlcSAgID0gJ3g7Ci0gICAgICAgICAgICAgICAgaWR4cl93cl9yZXEgID0gJ3g7Ci0gICAgICAgICAgICAgICAgaWNzcl93cl9yZXEgID0gJ3g7Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kY2FzZQotICAgIGVuZAotZW5kCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBJUElDIHJlZ2lzdGVycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0gLy8gUmVnaXN0ZXJzOgotIC8vIC0gQ3VycmVudCBJbnRlcnJ1cHQgVmVjdG9yIGluIFNlcnZpY2UgKENJU1YpIHJlZ2lzdGVyCi0gLy8gLSBDdXJyZW50IEludGVycnVwdCBDb250cm9sIFN0YXR1cyAoQ0lDU1IpIHJlZ2lzdGVyCi0gLy8gLSBFbmQgb2YgSW50ZXJydXB0IChFT0kpIHJlZ2lzdGVyCi0gLy8gLSBTdGFydCBvZiBJbnRlcnJ1cHQgKFNPSSkgcmVnaXN0ZXIKLSAvLyAtIEluZGV4IChJRFgpIHJlZ2lzdGVyCi0gLy8gLSBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3RlciAoSVBSKQotIC8vIC0gSW50ZXJydXB0IFNlcnZpY2VkIFJlZ2lzdGVyIChJU1ZSKQotIC8vIC0gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAoSUVSKQotIC8vIC0gSW50ZXJydXB0IE1vZGUgUmVnaXN0ZXIgKElNUikKLSAvLyAtIEludGVycnVwdCBJbnZlcnNpb24gUmVnaXN0ZXIgKElJTlZSKQotIC8vIC0gSW50ZXJydXB0IENvbnRyb2wgU3RhdHVzIFJlZ2lzdGVyIChJQ1NSKQotLy8KLQotLy8gQ0lTViByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIENvbnRhaW5zIG51bWJlciBvZiB0aGUgaW50ZXJydXB0IHZlY3RvciBjdXJyZW50bHkgaW4gc2VydmljZS4gV2hlbiBubwotLy8gaW50ZXJydXB0cyBhcmUgaW4gc2VydmljZSwgY29udGFpbnMgbnVtYmVyIG9mIHRoZSB2b2lkIGludGVycnVwdCB2ZWN0b3IgKDB4MTApLgotLy8gVGhlIHJlZ2lzdGVyIGNhbm5vdCBjb250YWluIGFsbCAwJ3MKLQotYXNzaWduIGlwaWNfY2lzdl91cGQgPSBpcnFfc3RhcnRfdmQgfCBpcGljX2VvaV9yZXE7Ci0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGlwaWNfY2lzdl9mZiA8PSBTQ1IxX0lSUV9WT0lEX1ZFQ1RfTlVNOwotICAgIGVuZCBlbHNlIGlmIChpcGljX2Npc3ZfdXBkKSBiZWdpbgotICAgICAgICBpcGljX2Npc3ZfZmYgPD0gaXBpY19jaXN2X25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIGlwaWNfY2lzdl9uZXh0ID0gaXJxX3N0YXJ0X3ZkID8gaXJxX3JlcV9pZHgKLSAgICAgICAgICAgICAgICAgICAgICA6IGlwaWNfZW9pX3JlcSA/IGlycV9lb2lfcmVxX3ZkID8gaXJxX2VvaV9yZXFfaWR4Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfSVJRX1ZPSURfVkVDVF9OVU0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDEnYjA7Ci0KLWFzc2lnbiBpcnFfc2Vydl9pZHggPSBpcGljX2Npc3ZfZmZbU0NSMV9JUlFfVkVDVF9XSURUSC0yOjBdOwotYXNzaWduIGlycV9zZXJ2X3ZkICA9IH5pcGljX2Npc3ZfZmZbU0NSMV9JUlFfVkVDVF9XSURUSC0xXTsKLQotLy8gQ0lDU1IgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBTaG93cyB3aGV0aGVyIHRoZSBpbnRlcnJ1cHQgY3VycmVudGx5IGluIHNlcnZpY2UgaXMgcGVuZGluZyBhbmQgZW5hYmxlZAotCi1hc3NpZ24gaXBpY19jaWNzci5pcCA9IGlwaWNfaXByX2ZmW2lycV9zZXJ2X2lkeF0gJiBpcnFfc2Vydl92ZDsKLWFzc2lnbiBpcGljX2NpY3NyLmllID0gaXBpY19pZXJfZmZbaXJxX3NlcnZfaWR4XSAmIGlycV9zZXJ2X3ZkOwotCi0vLyBFT0kgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBXcml0aW5nIGFueSB2YWx1ZSB0byBFT0kgcmVnaXN0ZXIgZW5kcyB0aGUgaW50ZXJydXB0IHdoaWNoIGlzIGN1cnJlbnRseSBpbiBzZXJ2aWNlCi0KLWFzc2lnbiBpcGljX2VvaV9yZXEgPSBlb2lfd3JfcmVxICYgaXJxX3NlcnZfdmQ7Ci0KLS8vIFNPSSByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFdyaXRpbmcgYW55IHZhbHVlIHRvIFNPSSBhY3RpdmF0ZXMgc3RhcnQgb2YgaW50ZXJydXB0IGlmIG9uZSBvZiB0aGUgZm9sbG93aW5nCi0vLyBjb25kaXRpb25zIGlzIHRydWU6Ci0vLyAtIFRoZXJlIGlzIGF0IGxlYXN0IG9uZSBwZW5kaW5nIGludGVycnVwdCB3aXRoIElFIGFuZCBJU1IgaXMgemVybwotLy8gLSBUaGVyZSBpcyBhdCBsZWFzdCBvbmUgcGVuZGluZyBpbnRlcnJ1cHQgd2l0aCBJRSBhbmQgaGlnaGVyIHByaW9yaXR5IHRoYW4gdGhlCi0vLyBpbnRlcnJ1cHRzIGN1cnJlbnRseSBpbiBzZXJ2aWNlCi0KLWFzc2lnbiBpcGljX3NvaV9yZXEgPSBzb2lfd3JfcmVxICYgaXJxX3JlcV92ZDsKLQotLy8gSURYIHJlZ2lzdGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRGVmaW5lcyB0aGUgbnVtYmVyIG9mIGludGVycnVwdCB2ZWN0b3Igd2hpY2ggaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgSVBJQ19JQ1NSCi0vLyByZWdpc3RlcgotCi1hbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICBpcGljX2lkeHJfZmYgPD0gJzA7Ci0gICAgZW5kIGVsc2UgaWYgKGlkeHJfd3JfcmVxKSBiZWdpbgotICAgICAgICBpcGljX2lkeHJfZmYgPD0gY3NyMmlwaWNfd2RhdGFfaVtTQ1IxX0lSUV9JRFhfV0lEVEgtMTowXTsKLSAgICBlbmQKLWVuZAotCi0vLyBJUFIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBGb3IgZXZlcnkgSVJRIGxpbmUgc2hvd3Mgd2hldGhlciB0aGVyZSBpcyBhIHBlbmRpbmcgaW50ZXJydXB0Ci0KLWFzc2lnbiBpcGljX2lwcl91cGQgPSAoaXBpY19pcHJfbmV4dCAhPSBpcGljX2lwcl9mZik7Ci0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGlwaWNfaXByX2ZmIDw9ICcwOwotICAgIGVuZCBlbHNlIGlmIChpcGljX2lwcl91cGQpIGJlZ2luCi0gICAgICAgIGlwaWNfaXByX2ZmIDw9IGlwaWNfaXByX25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBpcGljX2lwcl9jbHJfcmVxID0gJzA7Ci0gICAgaWYgKGNzcjJpcGljX3dfcmVxX2kpIGJlZ2luCi0gICAgICAgIGNhc2UgKGNzcjJpcGljX2FkZHJfaSkKLSAgICAgICAgICAgIFNDUjFfSVBJQ19DSUNTUjogaXBpY19pcHJfY2xyX3JlcVtpcnFfc2Vydl9pZHhdID0gY3NyMmlwaWNfd2RhdGFfaVtTQ1IxX0lQSUNfSUNTUl9JUF0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgaXJxX3NlcnZfdmQ7Ci0gICAgICAgICAgICBTQ1IxX0lQSUNfSVBSICA6IGlwaWNfaXByX2Nscl9yZXEgICAgICAgICAgICAgICA9IGNzcjJpcGljX3dkYXRhX2lbU0NSMV9JUlFfVkVDVF9OVU0tMTowXTsKLSAgICAgICAgICAgIFNDUjFfSVBJQ19TT0kgIDogaXBpY19pcHJfY2xyX3JlcVtpcnFfcmVxX2lkeF0gID0gaXJxX3JlcV92ZDsKLSAgICAgICAgICAgIFNDUjFfSVBJQ19JQ1NSIDogaXBpY19pcHJfY2xyX3JlcVtpcGljX2lkeHJfZmZdID0gY3NyMmlwaWNfd2RhdGFfaVtTQ1IxX0lQSUNfSUNTUl9JUF07Ci0gICAgICAgICAgICBkZWZhdWx0ICAgICAgICA6IGJlZ2luIGVuZAotICAgICAgICBlbmRjYXNlCi0gICAgZW5kCi1lbmQKLQotYXNzaWduIGlwaWNfaXByX2Nscl9jb25kID0gfmlycV9sdmwgfCBpcGljX2ltcl9uZXh0OwotYXNzaWduIGlwaWNfaXByX2NsciAgICAgID0gaXBpY19pcHJfY2xyX3JlcSAmIGlwaWNfaXByX2Nscl9jb25kOwotaW50ZWdlciBpOwotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBpcGljX2lwcl9uZXh0ID0gJzA7Ci0gICAgZm9yIChpPTA7IGk8U0NSMV9JUlFfVkVDVF9OVU07IGk9aSsxKSBiZWdpbgotICAgICAgICBpcGljX2lwcl9uZXh0W2ldID0gaXBpY19pcHJfY2xyW2ldID8gMSdiMAotICAgICAgICAgICAgICAgICAgICAgICAgIDogfmlwaWNfaW1yX2ZmW2ldID8gaXJxX2x2bFtpXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaXBpY19pcHJfZmZbaV0gfCBpcnFfZWRnZV9kZXRlY3RlZFtpXTsKLSAgICBlbmQKLWVuZAotCi0vLyBJU1ZSCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRm9yIGV2ZXJ5IElSUSBsaW5lIHNob3dzIHdoZXRoZXIgdGhlIGludGVycnVwdCBpcyBpbiBzZXJ2aWNlIG9yIG5vdAotCi1hc3NpZ24gaXBpY19pc3ZyX3VwZCA9IGlycV9zdGFydF92ZCB8IGlwaWNfZW9pX3JlcTsKLQotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgaXBpY19pc3ZyX2ZmIDw9ICcwOwotICAgIGVuZCBlbHNlIGlmIChpcGljX2lzdnJfdXBkKSBiZWdpbgotICAgICAgICBpcGljX2lzdnJfZmYgPD0gaXBpY19pc3ZyX25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBpcGljX2lzdnJfZW9pID0gaXBpY19pc3ZyX2ZmOwotICAgIGlmIChpcnFfc2Vydl92ZCkgYmVnaW4KLSAgICAgICAgaXBpY19pc3ZyX2VvaVtpcnFfc2Vydl9pZHhdID0gMSdiMDsKLSAgICBlbmQKLWVuZAotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGlwaWNfaXN2cl9uZXh0ID0gaXBpY19pc3ZyX2ZmOwotICAgIGlmIChpcnFfc3RhcnRfdmQpIGJlZ2luCi0gICAgICAgIGlwaWNfaXN2cl9uZXh0W2lycV9yZXFfaWR4XSA9IDEnYjE7Ci0gICAgZW5kIGVsc2UgaWYgKGlwaWNfZW9pX3JlcSkgYmVnaW4KLSAgICAgICAgaXBpY19pc3ZyX25leHQgPSBpcGljX2lzdnJfZW9pOwotICAgIGVuZAotZW5kCi0KLS8vIElFUgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEVuYWJsZXMvZGlzYWJsZXMgaW50ZXJydXB0IGZvciBldmVyeSBJUlEgbGluZQotCi1hc3NpZ24gaXBpY19pZXJfdXBkID0gY2ljc3Jfd3JfcmVxIHwgaWNzcl93cl9yZXE7Ci0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGlwaWNfaWVyX2ZmIDw9ICcwOwotICAgIGVuZCBlbHNlIGlmIChpcGljX2llcl91cGQpIGJlZ2luCi0gICAgICAgIGlwaWNfaWVyX2ZmIDw9IGlwaWNfaWVyX25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBpcGljX2llcl9uZXh0ID0gaXBpY19pZXJfZmY7Ci0gICAgaWYgKGNpY3NyX3dyX3JlcSkgYmVnaW4KLSAgICAgICAgaXBpY19pZXJfbmV4dFtpcnFfc2Vydl9pZHhdID0gaXJxX3NlcnZfdmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY3NyMmlwaWNfd2RhdGFfaVtTQ1IxX0lQSUNfSUNTUl9JRV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaXBpY19pZXJfZmZbaXJxX3NlcnZfaWR4XTsKLSAgICBlbmQgZWxzZSBpZiAoaWNzcl93cl9yZXEpIGJlZ2luCi0gICAgICAgIGlwaWNfaWVyX25leHRbaXBpY19pZHhyX2ZmXSA9IGNzcjJpcGljX3dkYXRhX2lbU0NSMV9JUElDX0lDU1JfSUVdOwotICAgIGVuZAotZW5kCi0KLS8vIElNUgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEZvciBldmVyeSBJUlEgbGluZSBzZXRzIGVpdGhlciBMZXZlbCAoMCkgb3IgRWRnZSAoMSkgZGV0ZWN0aW9uCi0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGlwaWNfaW1yX2ZmIDw9ICcwOwotICAgIGVuZCBlbHNlIGlmIChpY3NyX3dyX3JlcSkgYmVnaW4KLSAgICAgICAgaXBpY19pbXJfZmYgPD0gaXBpY19pbXJfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGlwaWNfaW1yX25leHQgPSBpcGljX2ltcl9mZjsKLSAgICBpZiAoaWNzcl93cl9yZXEpIGJlZ2luCi0gICAgICAgIGlwaWNfaW1yX25leHRbaXBpY19pZHhyX2ZmXSA9IGNzcjJpcGljX3dkYXRhX2lbU0NSMV9JUElDX0lDU1JfSU1dOwotICAgIGVuZAotZW5kCi0KLS8vIElJTlZSCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRm9yIGV2ZXJ5IElSUSBsaW5lIGRlZmluZXMgd2hldGhlciBpdCBzaG91bGQgYmUgaW52ZXJ0ZWQgb3Igbm90Ci0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGlwaWNfaWludnJfZmYgPD0gJzA7Ci0gICAgZW5kIGVsc2UgaWYgKGljc3Jfd3JfcmVxKSBiZWdpbgotICAgICAgICBpcGljX2lpbnZyX2ZmIDw9IGlwaWNfaWludnJfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGlwaWNfaWludnJfbmV4dCA9IGlwaWNfaWludnJfZmY7Ci0gICAgaWYgKGljc3Jfd3JfcmVxKSBiZWdpbgotICAgICAgICBpcGljX2lpbnZyX25leHRbaXBpY19pZHhyX2ZmXSA9IGNzcjJpcGljX3dkYXRhX2lbU0NSMV9JUElDX0lDU1JfSU5WXTsKLSAgICBlbmQKLWVuZAotCi0vLyBJQ1NSCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSG9sZHMgY29udHJvbCBhbmQgc3RhdHVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbnRlcnJ1cHQgZGVmaW5lZCBieSBJbmRleCBSZWdpc3RlcgotCi1hc3NpZ24gaXBpY19pY3NyLmlwICAgID0gaXBpY19pcHJfZmYgIFtpcGljX2lkeHJfZmZdOwotYXNzaWduIGlwaWNfaWNzci5pZSAgICA9IGlwaWNfaWVyX2ZmICBbaXBpY19pZHhyX2ZmXTsKLWFzc2lnbiBpcGljX2ljc3IuaW0gICAgPSBpcGljX2ltcl9mZiAgW2lwaWNfaWR4cl9mZl07Ci1hc3NpZ24gaXBpY19pY3NyLmludiAgID0gaXBpY19paW52cl9mZltpcGljX2lkeHJfZmZdOwotYXNzaWduIGlwaWNfaWNzci5pcyAgICA9IGlwaWNfaXN2cl9mZiBbaXBpY19pZHhyX2ZmXTsKLWFzc2lnbiBpcGljX2ljc3IubGluZSAgPSBTQ1IxX0lSUV9MSU5FU19XSURUSCcoaXBpY19pZHhyX2ZmKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFByaW9yaXR5IElSUSBnZW5lcmF0aW9uIGxvZ2ljCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gaXJxX3JlcV92ID0gaXBpY19pcHJfZmYgJiBpcGljX2llcl9mZjsKLQotLyoqKiBNb2RpZmllZCBmb3IgWW9zeXMgaGFuZGluZyB0eXBlZGVmIGluIGZ1bmN0aW9uIC0gZGluZXNoYQotYXNzaWduIGlycl9wcmlvcml0eSAgICAgICAgPSBzY3IxX3NlYXJjaF9vbmVfMTYoaXJxX3JlcV92KTsKLWFzc2lnbiBpcnFfcmVxX3ZkICAgICAgICAgID0gaXJyX3ByaW9yaXR5LnZkOwotYXNzaWduIGlycV9yZXFfaWR4ICAgICAgICAgPSBpcnJfcHJpb3JpdHkuaWR4OwotKioqKi8KLQotYWx3YXlzX2NvbWIgCi1iZWdpbgotICAgIGNhc2V4KGlycV9yZXFfdikKLQkgICAgMTYnYnh4eHhfeHh4eF94eHh4X3h4eDEgOiBpcnFfcmVxX2lkeCA9IDA7Ci0JICAgIDE2J2J4eHh4X3h4eHhfeHh4eF94eDEwIDogaXJxX3JlcV9pZHggPSAxOwotCSAgICAxNidieHh4eF94eHh4X3h4eHhfeDEwMCA6IGlycV9yZXFfaWR4ID0gMjsKLQkgICAgMTYnYnh4eHhfeHh4eF94eHh4XzEwMDAgOiBpcnFfcmVxX2lkeCA9IDM7Ci0JICAgIDE2J2J4eHh4X3h4eHhfeHh4MV8wMDAwIDogaXJxX3JlcV9pZHggPSA0OwotCSAgICAxNidieHh4eF94eHh4X3h4MTBfMDAwMCA6IGlycV9yZXFfaWR4ID0gNTsKLQkgICAgMTYnYnh4eHhfeHh4eF94MTAwXzAwMDAgOiBpcnFfcmVxX2lkeCA9IDY7Ci0JICAgIDE2J2J4eHh4X3h4eHhfMTAwMF8wMDAwIDogaXJxX3JlcV9pZHggPSA3OwotCSAgICAxNidieHh4eF94eHgxXzAwMDBfMDAwMCA6IGlycV9yZXFfaWR4ID0gODsKLQkgICAgMTYnYnh4eHhfeHgxMF8wMDAwXzAwMDAgOiBpcnFfcmVxX2lkeCA9IDk7Ci0JICAgIDE2J2J4eHh4X3gxMDBfMDAwMF8wMDAwIDogaXJxX3JlcV9pZHggPSAxMDsKLQkgICAgMTYnYnh4eHhfMTAwMF8wMDAwXzAwMDAgOiBpcnFfcmVxX2lkeCA9IDExOwotCSAgICAxNidieHh4MV8wMDAwXzAwMDBfMDAwMCA6IGlycV9yZXFfaWR4ID0gMTI7Ci0JICAgIDE2J2J4eDEwXzAwMDBfMDAwMF8wMDAwIDogaXJxX3JlcV9pZHggPSAxMzsKLQkgICAgMTYnYngxMDBfMDAwMF8wMDAwXzAwMDAgOiBpcnFfcmVxX2lkeCA9IDE0OwotCSAgICAxNidiMTAwMF8wMDAwXzAwMDBfMDAwMCA6IGlycV9yZXFfaWR4ID0gMTU7Ci0JICAgIDE2J2IwMDAwXzAwMDBfMDAwMF8wMDAwIDogaXJxX3JlcV9pZHggPSAxNjsKLQkgICAgZGVmYXVsdCA6IGlycV9yZXFfaWR4ID0gMTY7Ci0gICAgZW5kY2FzZQotICAgIGlycV9yZXFfdmQgPSB8aXJxX3JlcV92OwotZW5kCi0KLS8qKiogTW9kaWZpZWQgZm9yIFlvc3lzIGhhbmRpbmcgdHlwZWRlZiBpbiBmdW5jdGlvbiAtIGRpbmVzaGEKLWFzc2lnbiBpc3ZyX3ByaW9yaXR5X2VvaSAgID0gc2NyMV9zZWFyY2hfb25lXzE2KGlwaWNfaXN2cl9lb2kpOwotYXNzaWduIGlycV9lb2lfcmVxX3ZkICAgICAgPSBpc3ZyX3ByaW9yaXR5X2VvaS52ZDsKLWFzc2lnbiBpcnFfZW9pX3JlcV9pZHggICAgID0gaXN2cl9wcmlvcml0eV9lb2kuaWR4OwotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotYWx3YXlzX2NvbWIgCi1iZWdpbgotICAgIGNhc2V4KGlwaWNfaXN2cl9lb2kpCi0JICAgIDE2J2J4eHh4X3h4eHhfeHh4eF94eHgxIDogaXJxX2VvaV9yZXFfaWR4ID0gMDsKLQkgICAgMTYnYnh4eHhfeHh4eF94eHh4X3h4MTAgOiBpcnFfZW9pX3JlcV9pZHggPSAxOwotCSAgICAxNidieHh4eF94eHh4X3h4eHhfeDEwMCA6IGlycV9lb2lfcmVxX2lkeCA9IDI7Ci0JICAgIDE2J2J4eHh4X3h4eHhfeHh4eF8xMDAwIDogaXJxX2VvaV9yZXFfaWR4ID0gMzsKLQkgICAgMTYnYnh4eHhfeHh4eF94eHgxXzAwMDAgOiBpcnFfZW9pX3JlcV9pZHggPSA0OwotCSAgICAxNidieHh4eF94eHh4X3h4MTBfMDAwMCA6IGlycV9lb2lfcmVxX2lkeCA9IDU7Ci0JICAgIDE2J2J4eHh4X3h4eHhfeDEwMF8wMDAwIDogaXJxX2VvaV9yZXFfaWR4ID0gNjsKLQkgICAgMTYnYnh4eHhfeHh4eF8xMDAwXzAwMDAgOiBpcnFfZW9pX3JlcV9pZHggPSA3OwotCSAgICAxNidieHh4eF94eHgxXzAwMDBfMDAwMCA6IGlycV9lb2lfcmVxX2lkeCA9IDg7Ci0JICAgIDE2J2J4eHh4X3h4MTBfMDAwMF8wMDAwIDogaXJxX2VvaV9yZXFfaWR4ID0gOTsKLQkgICAgMTYnYnh4eHhfeDEwMF8wMDAwXzAwMDAgOiBpcnFfZW9pX3JlcV9pZHggPSAxMDsKLQkgICAgMTYnYnh4eHhfMTAwMF8wMDAwXzAwMDAgOiBpcnFfZW9pX3JlcV9pZHggPSAxMTsKLQkgICAgMTYnYnh4eDFfMDAwMF8wMDAwXzAwMDAgOiBpcnFfZW9pX3JlcV9pZHggPSAxMjsKLQkgICAgMTYnYnh4MTBfMDAwMF8wMDAwXzAwMDAgOiBpcnFfZW9pX3JlcV9pZHggPSAxMzsKLQkgICAgMTYnYngxMDBfMDAwMF8wMDAwXzAwMDAgOiBpcnFfZW9pX3JlcV9pZHggPSAxNDsKLQkgICAgMTYnYjEwMDBfMDAwMF8wMDAwXzAwMDAgOiBpcnFfZW9pX3JlcV9pZHggPSAxNTsKLQkgICAgMTYnYjAwMDBfMDAwMF8wMDAwXzAwMDAgOiBpcnFfZW9pX3JlcV9pZHggPSAxNjsKLQkgICAgZGVmYXVsdCA6IGlycV9lb2lfcmVxX2lkeCA9IDE2OwotICAgIGVuZGNhc2UKLSAgICBpcnFfZW9pX3JlcV92ZCA9IHxpcGljX2lzdnJfZW9pOwotZW5kCi0KLWFzc2lnbiBpcnFfaGlfcHJpb3JfcG5kICAgICA9IGlycV9yZXFfaWR4IDwgaXJxX3NlcnZfaWR4OwotCi1hc3NpZ24gaXBpYzJjc3JfaXJxX21fcmVxX28gPSBpcnFfcmVxX3ZkICYgKH5pcnFfc2Vydl92ZCB8IGlycV9oaV9wcmlvcl9wbmQpOwotCi1hc3NpZ24gaXJxX3N0YXJ0X3ZkICAgICAgICAgPSBpcGljMmNzcl9pcnFfbV9yZXFfbyAmIGlwaWNfc29pX3JlcTsKLQotZW5kbW9kdWxlIDogc2NyMV9pcGljCi0KLWBlbmRpZiAvLyBTQ1IxX0lQSUNfRU4KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9jc3Iuc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfY3NyLnN2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWI4MjBjLi4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9jc3Iuc3YKKysrIC9kZXYvbnVsbApAQCAtMSwxMTg2ICswLDAgQEAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjEKLS8vIAotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKLS8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBTeW50YWNvcmUgTExDCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vIEBmaWxlICAgICAgIDxzY3IxX3BpcGVfY3NyLnN2PgotLy8vIEBicmllZiAgICAgIENvbnRyb2wgU3RhdHVzIFJlZ2lzdGVycyAoQ1NSKQotLy8vCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gLy8KLSAvLyBGdW5jdGlvbmFsaXR5OgotIC8vIC0gUHJvdmlkZXMgYWNjZXNzIHRvIFJJU0MtViBDU1IgTWFjaGluZSByZWdpc3RlcnMKLSAvLyAtIEhhbmRsZXMgZXZlbnRzIChFWEMsIElSUSBhbmQgTVJFVCk6Ci0gLy8gICAtIFNldHVwcyBoYW5kbGluZyBjb25maWd1cmF0aW9uCi0gLy8gICAtIERpc3BsYXlzIGV2ZW50cyBzdGF0dXNlcyBhbmQgaW5mb3JtYXRpb24KLSAvLyAgIC0gR2VuZXJhdGVzIG5ldyBQQwotIC8vIC0gUHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG51bWJlciBvZiBleGVjdXRlZCBpbnN0cnVjdGlvbnMgYW5kIGVsYXBzZWQKLSAvLyAgIGN5Y2xlcwotIC8vIC0gUHJvdmlkZXMgaW50ZXJmYWNlcyBmb3IgSVBJQywgSERVIGFuZCBURFUgcmVnaXN0ZXJzIGFjY2VzcwotIC8vCi0gLy8gU3RydWN0dXJlOgotIC8vIC0gRXZlbnRzIChFWEMsIElSUSwgTVJFVCkgbG9naWMKLSAvLyAtIENTUiByZWFkL3dyaXRlIGludGVyZmFjZQotIC8vIC0gQ1NSIHJlZ2lzdGVyczoKLSAvLyAgIC0gTWFjaGluZSBUcmFwIFNldHVwIHJlZ2lzdGVycwotIC8vICAgLSBNYWNoaW5lIFRyYXAgSGFuZGxpbmcgcmVnaXN0ZXJzCi0gLy8gICAtIE1hY2hpbmUgQ291bnRlcnMvVGltZXJzIHJlZ2lzdGVycwotIC8vICAgLSBOb24tc3RhbmRhcmQgQ1NScyAoTUNPVU5URU4pCi0gLy8gLSBDU1IgPC0+IEVYVSBpL2YKLSAvLyAtIENTUiA8LT4gSVBJQyBpL2YKLSAvLyAtIENTUiA8LT4gSERVIGkvZgotIC8vIC0gQ1NSIDwtPiBURFUgaS9mCi0gLy8KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWBpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgotYGluY2x1ZGUgInNjcjFfY3NyLnN2aCIKLWBpbmNsdWRlICJzY3IxX2FyY2hfdHlwZXMuc3ZoIgotYGluY2x1ZGUgInNjcjFfcmlzY3ZfaXNhX2RlY29kaW5nLnN2aCIKLWBpZmRlZiBTQ1IxX0lQSUNfRU4KLWBpbmNsdWRlICJzY3IxX2lwaWMuc3ZoIgotYGVuZGlmIC8vIFNDUjFfSVBJQ19FTgotYGlmZGVmIFNDUjFfREJHX0VOCi1gaW5jbHVkZSAic2NyMV9oZHUuc3ZoIgotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi1gaWZkZWYgU0NSMV9URFVfRU4KLWBpbmNsdWRlICJzY3IxX3RkdS5zdmgiCi1gZW5kaWYgLy8gU0NSMV9URFVfRU4KLQotbW9kdWxlIHNjcjFfcGlwZV9jc3IgKAotICAgIC8vIENvbW1vbgotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByc3RfbiwgICAgICAgICAgICAgICAgICAgICAgLy8gQ1NSIHJlc2V0Ci0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaywgICAgICAgICAgICAgICAgICAgICAgICAvLyBHYXRlZCBDU1IgY2xvY2sKLWBpZmRlZiBTQ1IxX0NMS0NUUkxfRU4KLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrX2Fsd19vbiwgICAgICAgICAgICAgICAgIC8vIE5vdC1nYXRlZCBDU1IgY2xvY2sKLWBlbmRpZiAvLyBTQ1IxX0NMS0NUUkxfRU4KLQotICAgIC8vIFNPQyBzaWduYWxzCi0gICAgLy8gSVJRCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvYzJjc3JfaXJxX2V4dF9pLCAgICAgICAgICAvLyBFeHRlcm5hbCBpbnRlcnJ1cHQgcmVxdWVzdAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2MyY3NyX2lycV9zb2Z0X2ksICAgICAgICAgLy8gU29mdHdhcmUgaW50ZXJydXB0IHJlcXVlc3QKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jMmNzcl9pcnFfbXRpbWVyX2ksICAgICAgIC8vIEV4dGVybmFsIHRpbWVyIGludGVycnVwdCByZXF1ZXN0Ci0KLSAgICAvLyBNZW1vcnktbWFwcGVkIGV4dGVybmFsIHRpbWVyCi0gICAgaW5wdXQgICBsb2dpYyBbNjM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvYzJjc3JfbXRpbWVyX3ZhbF9pLCAgICAgICAvLyBFeHRlcm5hbCB0aW1lciB2YWx1ZQotCi0gICAgLy8gTUhBUlRJRCBmdXNlCi0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgIHNvYzJjc3JfZnVzZV9taGFydGlkX2ksICAgICAvLyBNSEFSVElEIGZ1c2UKLQotICAgIC8vIENTUiA8LT4gRVhVIHJlYWQvd3JpdGUgaW50ZXJmYWNlCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJjc3Jfcl9yZXFfaSwgICAgICAgICAgICAvLyBDU1IgcmVhZC93cml0ZSBhZGRyZXNzCi0gICAgaW5wdXQgICBsb2dpYyBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdICAgICAgICAgICAgIGV4dTJjc3JfcndfYWRkcl9pLCAgICAgICAgICAvLyBDU1IgcmVhZCByZXF1ZXN0Ci0gICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgIGNzcjJleHVfcl9kYXRhX28sICAgICAgICAgICAvLyBDU1IgcmVhZCBkYXRhCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJjc3Jfd19yZXFfaSwgICAgICAgICAgICAvLyBDU1Igd3JpdGUgcmVxdWVzdAotICAgIGlucHV0ICAgdHlwZV9zY3IxX2Nzcl9jbWRfc2VsX2UgICAgICAgICAgICAgICAgICAgICBleHUyY3NyX3dfY21kX2ksICAgICAgICAgICAgLy8gQ1NSIHdyaXRlIGNvbW1hbmQKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgZXh1MmNzcl93X2RhdGFfaSwgICAgICAgICAgIC8vIENTUiB3cml0ZSBkYXRhCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJleHVfcndfZXhjX28sICAgICAgICAgICAvLyBDU1IgcmVhZC93cml0ZSBhY2Nlc3MgZXhjZXB0aW9uCi0KLSAgICAvLyBDU1IgPC0+IEVYVSBldmVudCBpbnRlcmZhY2UKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MmNzcl90YWtlX2lycV9pLCAgICAgICAgIC8vIFRha2UgSVJRIHRyYXAKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MmNzcl90YWtlX2V4Y19pLCAgICAgICAgIC8vIFRha2UgZXhjZXB0aW9uIHRyYXAKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MmNzcl9tcmV0X3VwZGF0ZV9pLCAgICAgIC8vIE1SRVQgdXBkYXRlIENTUgotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUyY3NyX21yZXRfaW5zdHJfaSwgICAgICAgLy8gTVJFVCBpbnN0cnVjdGlvbgotICAgIGlucHV0ICAgbG9naWMgW1NDUjFfRVhDX0NPREVfV0lEVEhfRS0xOjBdICAgICAgICAgIGV4dTJjc3JfZXhjX2NvZGVfaSwgICAgICAgICAvLyBFeGNlcHRpb24gY29kZSAoc2VlIHNjcjFfYXJjaF90eXBlcy5zdmgpIC0gY3AuNwotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICBleHUyY3NyX3RyYXBfdmFsX2ksICAgICAgICAgLy8gVHJhcCB2YWx1ZQotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IyZXh1X2lycV9vLCAgICAgICAgICAgICAgLy8gSVJRIHJlcXVlc3QKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMmV4dV9pcF9pZV9vLCAgICAgICAgICAgIC8vIFNvbWUgSVJRIHBlbmRpbmcgYW5kIGxvY2FsbHkgZW5hYmxlZAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IyZXh1X21zdGF0dXNfbWllX3VwX28sICAgLy8gTVNUQVRVUyBvciBNSUUgdXBkYXRlIGluIHRoZSBjdXJyZW50IGN5Y2xlCi0KLWBpZmRlZiBTQ1IxX0lQSUNfRU4KLSAgICAvLyBDU1IgPC0+IElQSUMgaW50ZXJmYWNlCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJpcGljX3JfcmVxX28sICAgICAgICAgICAvLyBJUElDIHJlYWQgcmVxdWVzdAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IyaXBpY193X3JlcV9vLCAgICAgICAgICAgLy8gSVBJQyB3cml0ZSByZXF1ZXN0Ci0gICAgb3V0cHV0ICBsb2dpYyBbMjowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJpcGljX2FkZHJfbywgICAgICAgICAgICAvLyBJUElDIGFkZHJlc3MKLSAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgY3NyMmlwaWNfd2RhdGFfbywgICAgICAgICAgIC8vIElQSUMgd3JpdGUgZGF0YQotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICBpcGljMmNzcl9yZGF0YV9pLCAgICAgICAgICAgLy8gSVBJQyByZWFkIGRhdGEKLWBlbmRpZiAvLyBTQ1IxX0lQSUNfRU4KLQotYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgLy8gQ1NSIDwtPiBIRFUgaW50ZXJmYWNlCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJoZHVfcmVxX28sICAgICAgICAgICAgICAvLyBSZXF1ZXN0IHRvIEhEVQotICAgIG91dHB1dCAgdHlwZV9zY3IxX2Nzcl9jbWRfc2VsX2UgICAgICAgICAgICAgICAgICAgICBjc3IyaGR1X2NtZF9vLCAgICAgICAgICAgICAgLy8gSERVIGNvbW1hbmQKLSAgICBvdXRwdXQgIGxvZ2ljIFtTQ1IxX0hEVV9ERUJVR0NTUl9BRERSX1dJRFRILTE6MF0gICAgY3NyMmhkdV9hZGRyX28sICAgICAgICAgICAgIC8vIEhEVSBhZGRyZXNzCi0gICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgIGNzcjJoZHVfd2RhdGFfbywgICAgICAgICAgICAvLyBIRFUgd3JpdGUgZGF0YQotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICBoZHUyY3NyX3JkYXRhX2ksICAgICAgICAgICAgLy8gSERVIHJlYWQgZGF0YQotICAgIGlucHV0ICAgdHlwZV9zY3IxX2Nzcl9yZXNwX2UgICAgICAgICAgICAgICAgICAgICAgICBoZHUyY3NyX3Jlc3BfaSwgICAgICAgICAgICAgLy8gSERVIHJlc3BvbnNlCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJjc3Jfbm9fY29tbWl0X2ksICAgICAgICAvLyBGb3JiaWQgaW5zdHJ1Y3Rpb24gY29tbWl0bWVudAotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KLWBpZmRlZiBTQ1IxX1REVV9FTgotICAgIC8vIENTUiA8LT4gVERVIGludGVyZmFjZQotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IydGR1X3JlcV9vLCAgICAgICAgICAgICAgLy8gUmVxdWVzdCB0byBURFUKLSAgICBvdXRwdXQgIHR5cGVfc2NyMV9jc3JfY21kX3NlbF9lICAgICAgICAgICAgICAgICAgICAgY3NyMnRkdV9jbWRfbywgICAgICAgICAgICAgIC8vIFREVSBjb21tYW5kCi0gICAgb3V0cHV0ICBsb2dpYyBbU0NSMV9DU1JfQUREUl9URFVfT0ZGU19XLTE6MF0gICAgICAgIGNzcjJ0ZHVfYWRkcl9vLCAgICAgICAgICAgICAvLyBURFUgYWRkcmVzcwotICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICBjc3IydGR1X3dkYXRhX28sICAgICAgICAgICAgLy8gVERVIHdyaXRlIGRhdGEKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9pLCAgICAgICAgICAgIC8vIFREVSByZWFkIGRhdGEKLSAgICBpbnB1dCAgIHR5cGVfc2NyMV9jc3JfcmVzcF9lICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZXNwX2ksICAgICAgICAgICAgIC8vIFREVSByZXNwb25zZQotYGVuZGlmIC8vIFNDUjFfVERVX0VOCi0KLSAgICAvLyBDU1IgPC0+IEVYVSBQQyBpbnRlcmZhY2UKLWBpZm5kZWYgU0NSMV9DU1JfUkVEVUNFRF9DTlQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MmNzcl9pbnN0cmV0X25vX2V4Y19pLCAgIC8vIEluc3RydWN0aW9uIHJldGlyZWQgKHdpdGhvdXQgZXhjZXB0aW9uKQotYGVuZGlmIC8vIFNDUjFfQ1NSX1JFRFVDRURfQ05UCi0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgIGV4dTJjc3JfcGNfY3Vycl9pLCAgICAgICAgICAvLyBDdXJyZW50IFBDCi0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgIGV4dTJjc3JfcGNfbmV4dF9pLCAgICAgICAgICAvLyBOZXh0IFBDCi0gICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgIGNzcjJleHVfbmV3X3BjX28gICAgICAgICAgICAvLyBFeGNlcHRpb24vSVJRL01SRVQgbmV3IFBDCi0pOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgcGFyYW1ldGVycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYGlmZGVmIFNDUjFfUlZDX0VYVAotICAgIGxvY2FscGFyYW0gUENfTFNCID0gMTsKLWBlbHNlCi0gICAgbG9jYWxwYXJhbSBQQ19MU0IgPSAyOwotYGVuZGlmCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCBzaWduYWxzIGRlY2xhcmF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBNYWNoaW5lIFRyYXAgU2V0dXAgcmVnaXN0ZXJzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBNU1RBVFVTIHJlZ2lzdGVyCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21zdGF0dXNfdXBkOyAgICAgICAgLy8gTVNUQVRVUyB1cGRhdGUgZW5hYmxlCi1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21zdGF0dXM7ICAgICAgICAgICAgLy8gQWdncmVnYXRlZCBNU1RBVFVTCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21zdGF0dXNfbWllX2ZmOyAgICAgLy8gTVNUQVRVUzogR2xvYmFsIGludGVycnVwdCBlbmFibGUKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbXN0YXR1c19taWVfbmV4dDsgICAvLyBNU1RBVFVTOiBHbG9iYWwgaW50ZXJydXB0IGVuYWJsZSBuZXh0IHZhbHVlCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21zdGF0dXNfbXBpZV9mZjsgICAgLy8gTVNUQVRVUzogR2xvYmFsIGludGVycnVwdCBlbmFibGUgcHJpb3IgdG8gdGhlIHRyYXAKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbXN0YXR1c19tcGllX25leHQ7ICAvLyBNU1RBVFVTOiBHbG9iYWwgaW50ZXJydXB0IGVuYWJsZSBwcmlvciB0byB0aGUgdHJhcCBuZXh0IHZhbHVlCi0KLS8vIE1JRSByZWdpc3RlcgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9taWVfdXBkOyAgICAgICAgICAgIC8vIE1JRSB1cGRhdGUgZW5hYmxlCi1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21pZTsgICAgICAgICAgICAgICAgLy8gQWdncmVnYXRlZCBNSUUKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWllX210aWVfZmY7ICAgICAgICAvLyBNSUU6IE1hY2hpbmUgdGltZXIgaW50ZXJydXB0IGVuYWJsZQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9taWVfbWVpZV9mZjsgICAgICAgIC8vIE1JRTogTWFjaGluZSBleHRlcm5hbCBpbnRlcnJ1cHQgZW5hYmxlCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21pZV9tc2llX2ZmOyAgICAgICAgLy8gTUlFOiBNYWNoaW5lIHNvZnR3YXJlIGludGVycnVwdCBlbmFibGUKLQotLy8gTVRWRUMgcmVnaXN0ZXIKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbXR2ZWNfdXBkOyAgICAgICAgICAvLyBNVFZFQyB1cGRhdGUgZW5hYmxlCi1sb2dpYyBbYFNDUjFfWExFTi0xOlNDUjFfQ1NSX01UVkVDX0JBU0VfWkVST19CSVRTXSAgY3NyX210dmVjX2Jhc2U7ICAgICAgICAgLy8gTVRWRUM6IEJhc2UgKHVwcGVyIDI2IGJpdHMpCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX210dmVjX21vZGU7ICAgICAgICAgLy8gTVRWRUM6IE1vZGUgKDAtZGlyZWN0LCAxLXZlY3RvcmVkKSAod2lyZWQpCi1gaWZkZWYgU0NSMV9NVFZFQ19NT0RFX0VOCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX210dmVjX21vZGVfZmY7ICAgICAgLy8gTVRWRUM6IE1vZGUgKDAtZGlyZWN0LCAxLXZlY3RvcmVkKSAocmVnaXN0ZXJlZCkKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbXR2ZWNfbW9kZV92ZWN0OwotYGVuZGlmCi0KLS8vIE1hY2hpbmUgVHJhcCBIYW5kbGluZyByZWdpc3RlcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIE1TQ1JBVENIIHJlZ2lzdGVyCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21zY3JhdGNoX3VwZDsgICAgICAgLy8gTVNDUkFUQ0ggdXBkYXRlIGVuYWJsZQotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tc2NyYXRjaF9mZjsgICAgICAgIC8vIE1TQ1JBVENICi0KLS8vIE1FUEMgcmVnaXN0ZXIKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWVwY191cGQ7ICAgICAgICAgICAvLyBNRVBDIHVwZGF0ZSBlbmFibGUKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6UENfTFNCXSAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWVwY19mZjsgICAgICAgICAgICAvLyBNRVBDIHJlZ2lzdGVyZWQgdmFsdWUKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6UENfTFNCXSAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWVwY19uZXh0OyAgICAgICAgICAvLyBNRVBDIG5leHQgdmFsdWUKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWVwYzsgICAgICAgICAgICAgICAvLyBNRVBDIHJlZ2lzdGVyZWQgdmFsdWUgZXh0ZW5kZWQgdG8gWExFTgotCi0vLyBNQ0FVU0UgcmVnaXN0ZXIKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWNhdXNlX3VwZDsgICAgICAgICAvLyBNQ0FVU0UgdXBkYXRlIGVuYWJsZQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY2F1c2VfaV9mZjsgICAgICAgIC8vIE1DQVVTRTogSW50ZXJydXB0Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21jYXVzZV9pX25leHQ7ICAgICAgLy8gTUNBVVNFOiBJbnRlcnJ1cHQgbmV4dCB2YWx1ZQotbG9naWMgW1NDUjFfRVhDX0NPREVfV0lEVEhfRS0xOjBdICAgICAgICAgICAgICAgICAgIGNzcl9tY2F1c2VfZWNfZmY7ICAgICAgIC8vIE1DQVVTRTogRXhjZXB0aW9uIGNvZGUgLSBjcC43Ci1sb2dpYyBbU0NSMV9FWENfQ09ERV9XSURUSF9FLTE6MF0gICAgICAgICAgICAgICAgICAgY3NyX21jYXVzZV9lY19uZXh0OyAgICAgLy8gTUNBVVNFOiBFeGNlcHRpb24gY29kZSBuZXh0IHZhbHVlIC0gY3AuNwotbG9naWMgW1NDUjFfRVhDX0NPREVfV0lEVEhfRS0xOjBdICAgICAgICAgICAgICAgICAgIGNzcl9tY2F1c2VfZWNfbmV3OyAgICAgIC8vIE1DQVVTRTogRXhjZXB0aW9uIGNvZGUgbmV3IHZhbHVlIChJUlFzKSAtIGNwLjcKLQotLy8gTVRWQUwgcmVnaXN0ZXIKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbXR2YWxfdXBkOyAgICAgICAgICAvLyBNVFZBTCB1cGRhdGUgZW5hYmxlCi1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX210dmFsX2ZmOyAgICAgICAgICAgLy8gTVRWQUwgcmVnaXN0ZXJlZCB2YWx1ZQotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tdHZhbF9uZXh0OyAgICAgICAgIC8vIE1UVkFMIG5leHQgdmFsdWUKLQotLy8gTUlQIHJlZ2lzdGVyCi1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21pcDsgICAgICAgICAgICAgICAgLy8gQWdncmVnYXRlZCBNSVAKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWlwX210aXA7ICAgICAgICAgICAvLyBNSVA6IE1hY2hpbmUgdGltZXIgaW50ZXJydXB0IHBlbmRpbmcKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWlwX21laXA7ICAgICAgICAgICAvLyBNSVA6IE1hY2hpbmUgZXh0ZXJuYWwgaW50ZXJydXB0IHBlbmRpbmcKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWlwX21zaXA7ICAgICAgICAgICAvLyBNSVA6IE1hY2hpbmUgc29mdHdhcmUgaW50ZXJydXB0IHBlbmRpbmcKLQotLy8gTWFjaGluZSBDb3VudGVycy9UaW1lcnMgcmVnaXN0ZXJzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1gaWZuZGVmIFNDUjFfQ1NSX1JFRFVDRURfQ05UCi0vLyBNSU5TVFJFVCByZWdpc3RlcgotbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9taW5zdHJldF91cGQ7Ci1sb2dpYyBbU0NSMV9DU1JfQ09VTlRFUlNfV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgY3NyX21pbnN0cmV0OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9taW5zdHJldF9sb19pbmM7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21pbnN0cmV0X2xvX3VwZDsKLWxvZ2ljIFs3OjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWluc3RyZXRfbG9fZmY7Ci1sb2dpYyBbNzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21pbnN0cmV0X2xvX25leHQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21pbnN0cmV0X2hpX2luYzsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWluc3RyZXRfaGlfdXBkOwotbG9naWMgW1NDUjFfQ1NSX0NPVU5URVJTX1dJRFRILTE6OF0gICAgICAgICAgICAgICAgIGNzcl9taW5zdHJldF9oaV9mZjsKLWxvZ2ljIFtTQ1IxX0NTUl9DT1VOVEVSU19XSURUSC0xOjhdICAgICAgICAgICAgICAgICBjc3JfbWluc3RyZXRfaGlfbmV4dDsKLWxvZ2ljIFtTQ1IxX0NTUl9DT1VOVEVSU19XSURUSC0xOjhdICAgICAgICAgICAgICAgICBjc3JfbWluc3RyZXRfaGlfbmV3OwotCi0vLyBNQ1lDTEUgcmVnaXN0ZXIKLWxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWN5Y2xlX3VwZDsKLWxvZ2ljIFtTQ1IxX0NTUl9DT1VOVEVSU19XSURUSC0xOjBdICAgICAgICAgICAgICAgICBjc3JfbWN5Y2xlOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY3ljbGVfbG9faW5jOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY3ljbGVfbG9fdXBkOwotbG9naWMgWzc6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY3ljbGVfbG9fZmY7Ci1sb2dpYyBbNzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21jeWNsZV9sb19uZXh0OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY3ljbGVfaGlfaW5jOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY3ljbGVfaGlfdXBkOwotbG9naWMgW1NDUjFfQ1NSX0NPVU5URVJTX1dJRFRILTE6OF0gICAgICAgICAgICAgICAgIGNzcl9tY3ljbGVfaGlfZmY7Ci1sb2dpYyBbU0NSMV9DU1JfQ09VTlRFUlNfV0lEVEgtMTo4XSAgICAgICAgICAgICAgICAgY3NyX21jeWNsZV9oaV9uZXh0OwotbG9naWMgW1NDUjFfQ1NSX0NPVU5URVJTX1dJRFRILTE6OF0gICAgICAgICAgICAgICAgIGNzcl9tY3ljbGVfaGlfbmV3OwotYGVuZGlmIC8vIH5TQ1IxX0NTUl9SRURVQ0VEX0NOVAotCi0vLyBOb24tc3RhbmRhcmQgQ1NScwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gTUNPVU5URU4gcmVnaXN0ZXIKLWBpZmRlZiBTQ1IxX01DT1VOVEVOX0VOCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21jb3VudGVuX3VwZDsgICAgICAgLy8gTUNPVU5URU4gdXBkYXRlIGVuYWJsZQotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY291bnRlbjsgICAgICAgICAgIC8vIEFnZ3JlZ2F0ZWQgTUNPVU5URU4KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWNvdW50ZW5fY3lfZmY7ICAgICAvLyBDeWNsZSBjb3VudCBlbmFibGUKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWNvdW50ZW5faXJfZmY7ICAgICAvLyBJbnN0cmV0IGNvdW50IGVuYWJsZQotYGVuZGlmIC8vIFNDUjFfTUNPVU5URU5fRU4KLQotLy8gQ1NSIHJlYWQvd3JpdGUgaS9mCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX3JfZGF0YTsKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3Jfd19kYXRhOwotCi0vLyBFdmVudHMgKGV4Y2VwdGlvbnMsIGludGVycnVwdHMsIG1yZXQpIHNpZ25hbHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIEV2ZW50IGZsYWdzCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZV9leGM7ICAgICAgICAgICAgICAvLyBTdWNjZXNzZnVsIGV4Y2VwdGlvbiB0cmFwCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZV9pcnE7ICAgICAgICAgICAgICAvLyBTdWNjZXNzZnVsIElSUSB0cmFwCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZV9tcmV0OyAgICAgICAgICAgICAvLyBNUkVUIGluc3RydWN0aW9uCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZV9pcnFfbm1yZXQ7ICAgICAgICAvLyBJUlEgdHJhcCB3aXRob3V0IE1SRVQgaW5zdHJ1Y3Rpb24KLQotLy8gSW50ZXJydXB0IHBlbmRpbmcgJiBlbmFibGUgc2lnbmFscwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9laXJxX3BuZF9lbjsgICAgLy8gRXh0ZXJuYWwgSVJRIHBlbmRpbmcgYW5kIGxvY2FsbHkgZW5hYmxlZAotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9zaXJxX3BuZF9lbjsgICAgLy8gU29mdHdhcmUgSVJRIHBlbmRpbmcgYW5kIGxvY2FsbHkgZW5hYmxlZAotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl90aXJxX3BuZF9lbjsgICAgLy8gVGltZXIgSVJRIHBlbmRpbmcgYW5kIGxvY2FsbHkgZW5hYmxlZAotCi0vLyBFeGNlcHRpb24gZmxhZ3MKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3Jfd19leGM7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX3JfZXhjOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dV9yZXFfbm9fZXhjOwotCi0vLyBSZXF1ZXN0cyB0byBvdGhlciBtb2R1bGVzCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2lwaWNfcmVxOwotYGlmZGVmIFNDUjFfREJHX0VOCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2hkdV9yZXE7Ci1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLWBpZmRlZiBTQ1IxX1REVV9FTgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9icmttX3JlcTsKLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRXZlbnRzIChJUlEsIEVYQywgTVJFVCkKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIEV2ZW50cyBwcmlvcml0eQotYXNzaWduIGVfZXhjICAgID0gZXh1MmNzcl90YWtlX2V4Y19pCi1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICAgICAgICAgICAgICAmIH5oZHUyY3NyX25vX2NvbW1pdF9pCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLSAgICAgICAgICAgICAgICA7Ci1hc3NpZ24gZV9pcnEgICAgPSBleHUyY3NyX3Rha2VfaXJxX2kgJiB+ZXh1MmNzcl90YWtlX2V4Y19pCi1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICAgICAgICAgICAgICAmIH5oZHUyY3NyX25vX2NvbW1pdF9pCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLSAgICAgICAgICAgICAgICA7Ci1hc3NpZ24gZV9tcmV0ICAgPSBleHUyY3NyX21yZXRfdXBkYXRlX2kKLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgICAgICAgICAgICAgICYgfmhkdTJjc3Jfbm9fY29tbWl0X2kKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotICAgICAgICAgICAgICAgIDsKLWFzc2lnbiBlX2lycV9ubXJldCA9IGVfaXJxICYgfmV4dTJjc3JfbXJldF9pbnN0cl9pOwotCi0vLyBJUlEgcGVuZGluZyAmIGVuYWJsZSBzaWduYWxzCi1hc3NpZ24gY3NyX2VpcnFfcG5kX2VuID0gY3NyX21pcF9tZWlwICYgY3NyX21pZV9tZWllX2ZmOwotYXNzaWduIGNzcl9zaXJxX3BuZF9lbiA9IGNzcl9taXBfbXNpcCAmIGNzcl9taWVfbXNpZV9mZjsKLWFzc2lnbiBjc3JfdGlycV9wbmRfZW4gPSBjc3JfbWlwX210aXAgJiBjc3JfbWllX210aWVfZmY7Ci0KLS8vIElSUSBleGNlcHRpb24gY29kZXMgcHJpb3JpdHkKLWFsd2F5c19jb21iIGJlZ2luCi0gICAgY2FzZSAoMSdiMSkKLSAgICAgICAgY3NyX2VpcnFfcG5kX2VuOiBjc3JfbWNhdXNlX2VjX25ldyA9IFNDUjFfRVhDX0NPREVfSVJRX01fRVhURVJOQUw7IC8vIGNwLjcKLSAgICAgICAgY3NyX3NpcnFfcG5kX2VuOiBjc3JfbWNhdXNlX2VjX25ldyA9IFNDUjFfRVhDX0NPREVfSVJRX01fU09GVFdBUkU7IC8vIGNwLjcKLSAgICAgICAgY3NyX3RpcnFfcG5kX2VuOiBjc3JfbWNhdXNlX2VjX25ldyA9IFNDUjFfRVhDX0NPREVfSVJRX01fVElNRVI7IC8vIGNwLjcKLSAgICAgICAgZGVmYXVsdCAgICAgICAgOiBjc3JfbWNhdXNlX2VjX25ldyA9IFNDUjFfRVhDX0NPREVfSVJRX01fRVhURVJOQUw7IC8vIGNwLjcKLSAgICBlbmRjYXNlCi1lbmQKLQotYXNzaWduIGV4dV9yZXFfbm9fZXhjID0gKChleHUyY3NyX3JfcmVxX2kgJiB+Y3NyX3JfZXhjKQotICAgICAgICAgICAgICAgICAgICAgIHwgIChleHUyY3NyX3dfcmVxX2kgJiB+Y3NyX3dfZXhjKSk7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDU1IgcmVhZC93cml0ZSBpbnRlcmZhY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIENTUiByZWFkIGxvZ2ljCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGNzcl9yX2RhdGEgICAgID0gJzA7Ci0gICAgY3NyX3JfZXhjICAgICAgPSAxJ2IwOwotYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgY3NyX2hkdV9yZXEgICAgPSAxJ2IwOwotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi1gaWZkZWYgU0NSMV9URFVfRU4KLSAgICBjc3JfYnJrbV9yZXEgICA9IDEnYjA7Ci1gZW5kaWYgLy8gU0NSMV9URFVfRU4KLWBpZmRlZiBTQ1IxX0lQSUNfRU4KLSAgICBjc3IyaXBpY19yX3JlcV9vID0gMSdiMDsKLWBlbmRpZiAvLyBTQ1IxX0lQSUNfRU4KLQotICAgIGNhc2V6IChleHUyY3NyX3J3X2FkZHJfaSkKLSAgICAgICAgLy8gTWFjaGluZSBJbmZvcm1hdGlvbiBSZWdpc3RlcnMgKHJlYWQtb25seSkKLSAgICAgICAgU0NSMV9DU1JfQUREUl9NVkVORE9SSUQgOiBjc3Jfcl9kYXRhICAgID0gU0NSMV9DU1JfTVZFTkRPUklEOwotICAgICAgICBTQ1IxX0NTUl9BRERSX01BUkNISUQgICA6IGNzcl9yX2RhdGEgICAgPSBTQ1IxX0NTUl9NQVJDSElEOwotICAgICAgICBTQ1IxX0NTUl9BRERSX01JTVBJRCAgICA6IGNzcl9yX2RhdGEgICAgPSBTQ1IxX0NTUl9NSU1QSUQ7Ci0gICAgICAgIFNDUjFfQ1NSX0FERFJfTUhBUlRJRCAgIDogY3NyX3JfZGF0YSAgICA9IHNvYzJjc3JfZnVzZV9taGFydGlkX2k7Ci0KLSAgICAgICAgLy8gTWFjaGluZSBUcmFwIFNldHVwIChyZWFkLXdyaXRlKQotICAgICAgICBTQ1IxX0NTUl9BRERSX01TVEFUVVMgICA6IGNzcl9yX2RhdGEgICAgPSBjc3JfbXN0YXR1czsKLSAgICAgICAgU0NSMV9DU1JfQUREUl9NSVNBICAgICAgOiBjc3Jfcl9kYXRhICAgID0gU0NSMV9DU1JfTUlTQTsKLSAgICAgICAgU0NSMV9DU1JfQUREUl9NSUUgICAgICAgOiBjc3Jfcl9kYXRhICAgID0gY3NyX21pZTsKLSAgICAgICAgU0NSMV9DU1JfQUREUl9NVFZFQyAgICAgOiBjc3Jfcl9kYXRhICAgID0ge2Nzcl9tdHZlY19iYXNlLCA0J2QwLCAyJyhjc3JfbXR2ZWNfbW9kZSl9OwotCi0gICAgICAgIC8vIE1hY2hpbmUgVHJhcCBIYW5kbGluZyAocmVhZC13cml0ZSkKLSAgICAgICAgU0NSMV9DU1JfQUREUl9NU0NSQVRDSCAgOiBjc3Jfcl9kYXRhICAgID0gY3NyX21zY3JhdGNoX2ZmOwotICAgICAgICBTQ1IxX0NTUl9BRERSX01FUEMgICAgICA6IGNzcl9yX2RhdGEgICAgPSBjc3JfbWVwYzsKLSAgICAgICAgU0NSMV9DU1JfQUREUl9NQ0FVU0UgICAgOiBjc3Jfcl9kYXRhICAgID0ge2Nzcl9tY2F1c2VfaV9mZiwgKGBTQ1IxX1hMRU4tMSknKGNzcl9tY2F1c2VfZWNfZmYpfTsKLSAgICAgICAgU0NSMV9DU1JfQUREUl9NVFZBTCAgICAgOiBjc3Jfcl9kYXRhICAgID0gY3NyX210dmFsX2ZmOwotICAgICAgICBTQ1IxX0NTUl9BRERSX01JUCAgICAgICA6IGNzcl9yX2RhdGEgICAgPSBjc3JfbWlwOwotCi0gICAgICAgIC8vIFVzZXIgQ291bnRlcnMvVGltZXJzIChyZWFkLW9ubHkpCi0gICAgICAgIHtTQ1IxX0NTUl9BRERSX0hQTUNPVU5URVJfTUFTSywgNSdiPz8/Pz99ICAgOiBiZWdpbgotICAgICAgICAgICAgY2FzZSAoZXh1MmNzcl9yd19hZGRyX2lbNDowXSkKLSAgICAgICAgICAgICAgICA1J2QxICAgICAgICA6IGNzcl9yX2RhdGEgICAgPSBzb2MyY3NyX210aW1lcl92YWxfaVszMTowXTsKLWBpZm5kZWYgU0NSMV9DU1JfUkVEVUNFRF9DTlQKLSAgICAgICAgICAgICAgICA1J2QwICAgICAgICA6IGNzcl9yX2RhdGEgICAgPSBjc3JfbWN5Y2xlWzMxOjBdOwotICAgICAgICAgICAgICAgIDUnZDIgICAgICAgIDogY3NyX3JfZGF0YSAgICA9IGNzcl9taW5zdHJldFszMTowXTsKLWBlbmRpZiAvLyBTQ1IxX0NTUl9SRURVQ0VEX0NOVAotICAgICAgICAgICAgICAgIGRlZmF1bHQgICAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIDAKLSAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIGVuZGNhc2UKLSAgICAgICAgZW5kCi0KLSAgICAgICAge1NDUjFfQ1NSX0FERFJfSFBNQ09VTlRFUkhfTUFTSywgNSdiPz8/Pz99ICA6IGJlZ2luCi0gICAgICAgICAgICBjYXNlIChleHUyY3NyX3J3X2FkZHJfaVs0OjBdKQotICAgICAgICAgICAgICAgIDUnZDEgICAgICAgIDogY3NyX3JfZGF0YSAgICA9IHNvYzJjc3JfbXRpbWVyX3ZhbF9pWzYzOjMyXTsKLWBpZm5kZWYgU0NSMV9DU1JfUkVEVUNFRF9DTlQKLSAgICAgICAgICAgICAgICA1J2QwICAgICAgICA6IGNzcl9yX2RhdGEgICAgPSBjc3JfbWN5Y2xlWzYzOjMyXTsKLSAgICAgICAgICAgICAgICA1J2QyICAgICAgICA6IGNzcl9yX2RhdGEgICAgPSBjc3JfbWluc3RyZXRbNjM6MzJdOwotYGVuZGlmIC8vIFNDUjFfQ1NSX1JFRFVDRURfQ05UCi0gICAgICAgICAgICAgICAgZGVmYXVsdCAgICAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4gMAotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZW5kY2FzZQotICAgICAgICBlbmQKLQotICAgICAgICAvLyBNYWNoaW5lIENvdW50ZXJzL1RpbWVycyAocmVhZC13cml0ZSkKLSAgICAgICAge1NDUjFfQ1NSX0FERFJfTUhQTUNPVU5URVJfTUFTSywgNSdiPz8/Pz99ICA6IGJlZ2luCi0gICAgICAgICAgICBjYXNlIChleHUyY3NyX3J3X2FkZHJfaVs0OjBdKQotICAgICAgICAgICAgICAgIDUnZDEgICAgICAgIDogY3NyX3JfZXhjICAgICA9IGV4dTJjc3Jfcl9yZXFfaTsKLWBpZm5kZWYgU0NSMV9DU1JfUkVEVUNFRF9DTlQKLSAgICAgICAgICAgICAgICA1J2QwICAgICAgICA6IGNzcl9yX2RhdGEgICAgPSBjc3JfbWN5Y2xlWzMxOjBdOwotICAgICAgICAgICAgICAgIDUnZDIgICAgICAgIDogY3NyX3JfZGF0YSAgICA9IGNzcl9taW5zdHJldFszMTowXTsKLWBlbmRpZiAvLyBTQ1IxX0NTUl9SRURVQ0VEX0NOVAotICAgICAgICAgICAgICAgIGRlZmF1bHQgICAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIDAKLSAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIGVuZGNhc2UKLSAgICAgICAgZW5kCi0KLSAgICAgICAge1NDUjFfQ1NSX0FERFJfTUhQTUNPVU5URVJIX01BU0ssIDUnYj8/Pz8/fSA6IGJlZ2luCi0gICAgICAgICAgICBjYXNlIChleHUyY3NyX3J3X2FkZHJfaVs0OjBdKQotICAgICAgICAgICAgICAgIDUnZDEgICAgICAgIDogY3NyX3JfZXhjICAgICA9IGV4dTJjc3Jfcl9yZXFfaTsKLWBpZm5kZWYgU0NSMV9DU1JfUkVEVUNFRF9DTlQKLSAgICAgICAgICAgICAgICA1J2QwICAgICAgICA6IGNzcl9yX2RhdGEgICAgPSBjc3JfbWN5Y2xlWzYzOjMyXTsKLSAgICAgICAgICAgICAgICA1J2QyICAgICAgICA6IGNzcl9yX2RhdGEgICAgPSBjc3JfbWluc3RyZXRbNjM6MzJdOwotYGVuZGlmIC8vIFNDUjFfQ1NSX1JFRFVDRURfQ05UCi0gICAgICAgICAgICAgICAgZGVmYXVsdCAgICAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4gMAotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZW5kY2FzZQotICAgICAgICBlbmQKLQotICAgICAgICB7U0NSMV9DU1JfQUREUl9NSFBNRVZFTlRfTUFTSywgNSdiPz8/Pz99ICAgIDogYmVnaW4KLSAgICAgICAgICAgIGNhc2UgKGV4dTJjc3JfcndfYWRkcl9pWzQ6MF0pCi0gICAgICAgICAgICAgICAgNSdkMCwKLSAgICAgICAgICAgICAgICA1J2QxLAotICAgICAgICAgICAgICAgIDUnZDIgICAgICAgIDogY3NyX3JfZXhjID0gZXh1MmNzcl9yX3JlcV9pOwotICAgICAgICAgICAgICAgIGRlZmF1bHQgICAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIDAKLSAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIGVuZGNhc2UKLSAgICAgICAgZW5kCi0KLWBpZmRlZiBTQ1IxX01DT1VOVEVOX0VOCi0gICAgICAgIFNDUjFfQ1NSX0FERFJfTUNPVU5URU4gICAgICA6IGNzcl9yX2RhdGEgICAgPSBjc3JfbWNvdW50ZW47Ci1gZW5kaWYgLy8gU0NSMV9NQ09VTlRFTl9FTgotCi1gaWZkZWYgU0NSMV9JUElDX0VOCi0gICAgICAgIC8vIElQSUMgcmVnaXN0ZXJzCi0gICAgICAgIFNDUjFfQ1NSX0FERFJfSVBJQ19DSVNWLAotICAgICAgICBTQ1IxX0NTUl9BRERSX0lQSUNfQ0lDU1IsCi0gICAgICAgIFNDUjFfQ1NSX0FERFJfSVBJQ19JUFIsCi0gICAgICAgIFNDUjFfQ1NSX0FERFJfSVBJQ19JU1ZSLAotICAgICAgICBTQ1IxX0NTUl9BRERSX0lQSUNfRU9JLAotICAgICAgICBTQ1IxX0NTUl9BRERSX0lQSUNfU09JLAotICAgICAgICBTQ1IxX0NTUl9BRERSX0lQSUNfSURYLAotICAgICAgICBTQ1IxX0NTUl9BRERSX0lQSUNfSUNTUiAgICAgOiBiZWdpbgotICAgICAgICAgICAgY3NyX3JfZGF0YSAgICAgICA9IGlwaWMyY3NyX3JkYXRhX2k7Ci0gICAgICAgICAgICBjc3IyaXBpY19yX3JlcV9vID0gZXh1MmNzcl9yX3JlcV9pOwotICAgICAgICBlbmQKLWBlbmRpZiAvLyBTQ1IxX0lQSUNfRU4KLQotYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgICAgIC8vIEhEVSByZWdpc3RlcnMKLSAgICAgICAgU0NSMV9IRFVfREJHQ1NSX0FERFJfRENTUiwKLSAgICAgICAgU0NSMV9IRFVfREJHQ1NSX0FERFJfRFBDLAotICAgICAgICBTQ1IxX0hEVV9EQkdDU1JfQUREUl9EU0NSQVRDSDAsCi0gICAgICAgIFNDUjFfSERVX0RCR0NTUl9BRERSX0RTQ1JBVENIMSA6IGJlZ2luCi0gICAgICAgICAgICBjc3JfaGR1X3JlcSA9IDEnYjE7Ci0gICAgICAgICAgICBjc3Jfcl9kYXRhICA9IGhkdTJjc3JfcmRhdGFfaTsKLSAgICAgICAgZW5kCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotYGlmZGVmIFNDUjFfVERVX0VOCi0gICAgICAgIC8vIFREVSByZWdpc3RlcnMKLSAgICAgICAgU0NSMV9DU1JfQUREUl9URFVfVFNFTEVDVCwKLSAgICAgICAgU0NSMV9DU1JfQUREUl9URFVfVERBVEExLAotICAgICAgICBTQ1IxX0NTUl9BRERSX1REVV9UREFUQTIsCi0gICAgICAgIFNDUjFfQ1NSX0FERFJfVERVX1RJTkZPOiBiZWdpbgotICAgICAgICAgICAgY3NyX2Jya21fcmVxICAgID0gMSdiMTsKLSAgICAgICAgICAgIGNzcl9yX2RhdGEgICAgICA9IHRkdTJjc3JfcmRhdGFfaTsKLSAgICAgICAgZW5kCi1gZW5kaWYgLy8gU0NSMV9URFVfRU4KLQotICAgICAgICBkZWZhdWx0ICAgICA6IGJlZ2luCi0gICAgICAgICAgICBjc3Jfcl9leGMgICA9IGV4dTJjc3Jfcl9yZXFfaTsKLSAgICAgICAgZW5kCi0gICAgZW5kY2FzZSAvLyBleHUyY3NyX3J3X2FkZHJfaQotZW5kCi0KLWFzc2lnbiBjc3IyZXh1X3JfZGF0YV9vID0gY3NyX3JfZGF0YTsKLQotLy8gQ1NSIHdyaXRlIGxvZ2ljCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGNhc2UgKGV4dTJjc3Jfd19jbWRfaSkKLSAgICAgICAgU0NSMV9DU1JfQ01EX1dSSVRFICA6IGNzcl93X2RhdGEgPSAgZXh1MmNzcl93X2RhdGFfaTsKLSAgICAgICAgU0NSMV9DU1JfQ01EX1NFVCAgICA6IGNzcl93X2RhdGEgPSAgZXh1MmNzcl93X2RhdGFfaSB8IGNzcl9yX2RhdGE7Ci0gICAgICAgIFNDUjFfQ1NSX0NNRF9DTEVBUiAgOiBjc3Jfd19kYXRhID0gfmV4dTJjc3Jfd19kYXRhX2kgJiBjc3Jfcl9kYXRhOwotICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgIDogY3NyX3dfZGF0YSA9ICcwOwotICAgIGVuZGNhc2UKLWVuZAotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGNzcl9tc3RhdHVzX3VwZCAgICAgPSAxJ2IwOwotICAgIGNzcl9taWVfdXBkICAgICAgICAgPSAxJ2IwOwotICAgIGNzcl9tc2NyYXRjaF91cGQgICAgPSAxJ2IwOwotICAgIGNzcl9tZXBjX3VwZCAgICAgICAgPSAxJ2IwOwotICAgIGNzcl9tY2F1c2VfdXBkICAgICAgPSAxJ2IwOwotICAgIGNzcl9tdHZhbF91cGQgICAgICAgPSAxJ2IwOwotICAgIGNzcl9tdHZlY191cGQgICAgICAgPSAxJ2IwOwotCi1gaWZuZGVmIFNDUjFfQ1NSX1JFRFVDRURfQ05UCi0gICAgY3NyX21jeWNsZV91cGQgICAgICA9IDInYjAwOwotICAgIGNzcl9taW5zdHJldF91cGQgICAgPSAyJ2IwMDsKLWBlbmRpZiAvLyBTQ1IxX0NTUl9SRURVQ0VEX0NOVAotCi1gaWZkZWYgU0NSMV9NQ09VTlRFTl9FTgotICAgIGNzcl9tY291bnRlbl91cGQgICAgPSAxJ2IwOwotYGVuZGlmIC8vIFNDUjFfTUNPVU5URU5fRU4KLSAgICBjc3Jfd19leGMgICAgICAgICAgID0gMSdiMDsKLWBpZmRlZiBTQ1IxX0lQSUNfRU4KLSAgICBjc3IyaXBpY193X3JlcV9vICAgID0gMSdiMDsKLWBlbmRpZiAvLyBTQ1IxX0lQSUNfRU4KLQotICAgIGlmIChleHUyY3NyX3dfcmVxX2kpIGJlZ2luCi0gICAgICAgIGNhc2V6IChleHUyY3NyX3J3X2FkZHJfaSkKLSAgICAgICAgICAgIC8vIE1hY2hpbmUgVHJhcCBTZXR1cCAocmVhZC13cml0ZSkKLSAgICAgICAgICAgIFNDUjFfQ1NSX0FERFJfTVNUQVRVUyAgIDogY3NyX21zdGF0dXNfdXBkICAgPSAxJ2IxOwotICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9NSVNBICAgICAgOiBiZWdpbiBlbmQKLSAgICAgICAgICAgIFNDUjFfQ1NSX0FERFJfTUlFICAgICAgIDogY3NyX21pZV91cGQgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9NVFZFQyAgICAgOiBjc3JfbXR2ZWNfdXBkICAgICA9IDEnYjE7Ci0KLSAgICAgICAgICAgIC8vIE1hY2hpbmUgVHJhcCBIYW5kbGluZyAocmVhZC13cml0ZSkKLSAgICAgICAgICAgIFNDUjFfQ1NSX0FERFJfTVNDUkFUQ0ggIDogY3NyX21zY3JhdGNoX3VwZCAgPSAxJ2IxOwotICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9NRVBDICAgICAgOiBjc3JfbWVwY191cGQgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICBTQ1IxX0NTUl9BRERSX01DQVVTRSAgICA6IGNzcl9tY2F1c2VfdXBkICAgID0gMSdiMTsKLSAgICAgICAgICAgIFNDUjFfQ1NSX0FERFJfTVRWQUwgICAgIDogY3NyX210dmFsX3VwZCAgICAgPSAxJ2IxOwotICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9NSVAgICAgICAgOiBiZWdpbiBlbmQKLQotICAgICAgICAgICAgLy8gTWFjaGluZSBDb3VudGVycy9UaW1lcnMgKHJlYWQtd3JpdGUpCi0gICAgICAgICAgICB7U0NSMV9DU1JfQUREUl9NSFBNQ09VTlRFUl9NQVNLLCA1J2I/Pz8/P30gIDogYmVnaW4KLSAgICAgICAgICAgICAgICBjYXNlIChleHUyY3NyX3J3X2FkZHJfaVs0OjBdKQotICAgICAgICAgICAgICAgICAgICA1J2QxICAgICAgICA6IGNzcl93X2V4YyAgICAgICAgICAgPSAxJ2IxOwotYGlmbmRlZiBTQ1IxX0NTUl9SRURVQ0VEX0NOVAotICAgICAgICAgICAgICAgICAgICA1J2QwICAgICAgICA6IGNzcl9tY3ljbGVfdXBkWzBdICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICA1J2QyICAgICAgICA6IGNzcl9taW5zdHJldF91cGRbMF0gPSAxJ2IxOwotYGVuZGlmIC8vIFNDUjFfQ1NSX1JFRFVDRURfQ05UCi0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgICAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vIGV4Y2VwdGlvbgotICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICBlbmRjYXNlCi0gICAgICAgICAgICBlbmQKLQotICAgICAgICAgICAge1NDUjFfQ1NSX0FERFJfTUhQTUNPVU5URVJIX01BU0ssIDUnYj8/Pz8/fSA6IGJlZ2luCi0gICAgICAgICAgICAgICAgY2FzZSAoZXh1MmNzcl9yd19hZGRyX2lbNDowXSkKLSAgICAgICAgICAgICAgICAgICAgNSdkMSAgICAgICAgOiBjc3Jfd19leGMgICAgICAgICAgID0gMSdiMTsKLWBpZm5kZWYgU0NSMV9DU1JfUkVEVUNFRF9DTlQKLSAgICAgICAgICAgICAgICAgICAgNSdkMCAgICAgICAgOiBjc3JfbWN5Y2xlX3VwZFsxXSAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgNSdkMiAgICAgICAgOiBjc3JfbWluc3RyZXRfdXBkWzFdID0gMSdiMTsKLWBlbmRpZiAvLyBTQ1IxX0NTUl9SRURVQ0VEX0NOVAotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ICAgICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBubyBleGNlcHRpb24KLSAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgZW5kY2FzZQotICAgICAgICAgICAgZW5kCi0KLSAgICAgICAgICAgIHtTQ1IxX0NTUl9BRERSX01IUE1FVkVOVF9NQVNLLCA1J2I/Pz8/P30gICAgOiBiZWdpbgotICAgICAgICAgICAgICAgIGNhc2UgKGV4dTJjc3JfcndfYWRkcl9pWzQ6MF0pCi0gICAgICAgICAgICAgICAgICAgIDUnZDAsCi0gICAgICAgICAgICAgICAgICAgIDUnZDEsCi0gICAgICAgICAgICAgICAgICAgIDUnZDIgICAgICAgIDogY3NyX3dfZXhjID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCAgICAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm8gZXhjZXB0aW9uCi0gICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgIGVuZGNhc2UKLSAgICAgICAgICAgIGVuZAotCi1gaWZkZWYgU0NSMV9NQ09VTlRFTl9FTgotICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9NQ09VTlRFTiAgICAgIDogY3NyX21jb3VudGVuX3VwZCA9IDEnYjE7Ci1gZW5kaWYgLy8gU0NSMV9NQ09VTlRFTl9FTgotCi1gaWZkZWYgU0NSMV9JUElDX0VOCi0gICAgICAgICAgICAvLyBJUElDIHJlZ2lzdGVycwotICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9JUElDX0NJQ1NSLAotICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9JUElDX0lQUiwKLSAgICAgICAgICAgIFNDUjFfQ1NSX0FERFJfSVBJQ19FT0ksCi0gICAgICAgICAgICBTQ1IxX0NTUl9BRERSX0lQSUNfU09JLAotICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9JUElDX0lEWCwKLSAgICAgICAgICAgIFNDUjFfQ1NSX0FERFJfSVBJQ19JQ1NSICAgICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgY3NyMmlwaWNfd19yZXFfbyAgPSAxJ2IxOwotICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBTQ1IxX0NTUl9BRERSX0lQSUNfQ0lTViwKLSAgICAgICAgICAgIFNDUjFfQ1NSX0FERFJfSVBJQ19JU1ZSICAgICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgLy8gbm8gZXhjZXB0aW9uIG9uIHdyaXRlCi0gICAgICAgICAgICBlbmQKLWBlbmRpZiAvLyBTQ1IxX0lQSUNfRU4KLQotYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgICAgICAgICBTQ1IxX0hEVV9EQkdDU1JfQUREUl9EQ1NSLAotICAgICAgICAgICAgU0NSMV9IRFVfREJHQ1NSX0FERFJfRFBDLAotICAgICAgICAgICAgU0NSMV9IRFVfREJHQ1NSX0FERFJfRFNDUkFUQ0gwLAotICAgICAgICAgICAgU0NSMV9IRFVfREJHQ1NSX0FERFJfRFNDUkFUQ0gxIDogYmVnaW4KLSAgICAgICAgICAgIGVuZAotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KLWBpZmRlZiBTQ1IxX1REVV9FTgotICAgICAgICAgICAgLy8gVERVIHJlZ2lzdGVycwotICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9URFVfVFNFTEVDVCwKLSAgICAgICAgICAgIFNDUjFfQ1NSX0FERFJfVERVX1REQVRBMSwKLSAgICAgICAgICAgIFNDUjFfQ1NSX0FERFJfVERVX1REQVRBMiwKLSAgICAgICAgICAgIFNDUjFfQ1NSX0FERFJfVERVX1RJTkZPOiBiZWdpbgotICAgICAgICAgICAgZW5kCi1gZW5kaWYgLy8gU0NSMV9URFVfRU4KLQotICAgICAgICAgICAgZGVmYXVsdCA6IGJlZ2luCi0gICAgICAgICAgICAgICAgY3NyX3dfZXhjICAgPSAxJ2IxOwotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZGNhc2UKLSAgICBlbmQKLWVuZAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTWFjaGluZSBUcmFwIFNldHVwIHJlZ2lzdGVycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0gLy8gUmVnaXN0ZXJzOgotIC8vIC0gTVNUQVRVUwotIC8vIC0gTUlFCi0gLy8gLSBNVFZFQwotLy8KLQotLy8gTVNUQVRVUyByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIENvbnNpc3RzIG9mIDIgYml0cyAtIGN1cnJlbnQgYW5kIHByZXZpb3VzIChiZWZvcmUgdHJhcCkgZ2xvYmFsIGludGVycnVwdAotLy8gZW5hYmxlIGJpdHMgKE1JRSAmIE1QSUUpCi0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGNzcl9tc3RhdHVzX21pZV9mZiAgPD0gU0NSMV9DU1JfTVNUQVRVU19NSUVfUlNUX1ZBTDsKLSAgICAgICAgY3NyX21zdGF0dXNfbXBpZV9mZiA8PSBTQ1IxX0NTUl9NU1RBVFVTX01QSUVfUlNUX1ZBTDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICBjc3JfbXN0YXR1c19taWVfZmYgIDw9IGNzcl9tc3RhdHVzX21pZV9uZXh0OwotICAgICAgICBjc3JfbXN0YXR1c19tcGllX2ZmIDw9IGNzcl9tc3RhdHVzX21waWVfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGNhc2UgKDEnYjEpCi0gICAgICAgIGVfZXhjLCBlX2lycSAgOiBiZWdpbgotICAgICAgICAgICAgY3NyX21zdGF0dXNfbWllX25leHQgID0gMSdiMDsKLSAgICAgICAgICAgIGNzcl9tc3RhdHVzX21waWVfbmV4dCA9IGNzcl9tc3RhdHVzX21pZV9mZjsKLSAgICAgICAgZW5kCi0gICAgICAgIGVfbXJldCAgICAgICAgOiBiZWdpbgotICAgICAgICAgICAgY3NyX21zdGF0dXNfbWllX25leHQgID0gY3NyX21zdGF0dXNfbXBpZV9mZjsKLSAgICAgICAgICAgIGNzcl9tc3RhdHVzX21waWVfbmV4dCA9IDEnYjE7Ci0gICAgICAgIGVuZAotICAgICAgICBjc3JfbXN0YXR1c191cGQ6IGJlZ2luCi0gICAgICAgICAgICBjc3JfbXN0YXR1c19taWVfbmV4dCAgPSBjc3Jfd19kYXRhW1NDUjFfQ1NSX01TVEFUVVNfTUlFX09GRlNFVF07Ci0gICAgICAgICAgICBjc3JfbXN0YXR1c19tcGllX25leHQgPSBjc3Jfd19kYXRhW1NDUjFfQ1NSX01TVEFUVVNfTVBJRV9PRkZTRVRdOwotICAgICAgICBlbmQKLSAgICAgICAgZGVmYXVsdCAgICAgICA6IGJlZ2luCi0gICAgICAgICAgICBjc3JfbXN0YXR1c19taWVfbmV4dCAgPSBjc3JfbXN0YXR1c19taWVfZmY7Ci0gICAgICAgICAgICBjc3JfbXN0YXR1c19tcGllX25leHQgPSBjc3JfbXN0YXR1c19tcGllX2ZmOwotICAgICAgICBlbmQKLSAgICBlbmRjYXNlCi1lbmQKLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBjc3JfbXN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJzA7Ci0gICAgY3NyX21zdGF0dXNbU0NSMV9DU1JfTVNUQVRVU19NSUVfT0ZGU0VUXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGNzcl9tc3RhdHVzX21pZV9mZjsKLSAgICBjc3JfbXN0YXR1c1tTQ1IxX0NTUl9NU1RBVFVTX01QSUVfT0ZGU0VUXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gY3NyX21zdGF0dXNfbXBpZV9mZjsKLSAgICBjc3JfbXN0YXR1c1tTQ1IxX0NTUl9NU1RBVFVTX01QUF9PRkZTRVQrMTpTQ1IxX0NTUl9NU1RBVFVTX01QUF9PRkZTRVRdID0gU0NSMV9DU1JfTVNUQVRVU19NUFA7Ci1lbmQKLQotLy8gTUlFIHJlZ2lzdGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQ29udGFpbnMgaW50ZXJydXB0IGVuYWJsZSBiaXRzIChleHRlcm5hbCwgc29mdHdhcmUsIHRpbWVyIElSUXMpCi0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGNzcl9taWVfbXRpZV9mZiA8PSBTQ1IxX0NTUl9NSUVfTVRJRV9SU1RfVkFMOwotICAgICAgICBjc3JfbWllX21laWVfZmYgPD0gU0NSMV9DU1JfTUlFX01FSUVfUlNUX1ZBTDsKLSAgICAgICAgY3NyX21pZV9tc2llX2ZmIDw9IFNDUjFfQ1NSX01JRV9NU0lFX1JTVF9WQUw7Ci0gICAgZW5kIGVsc2UgaWYgKGNzcl9taWVfdXBkKSBiZWdpbgotICAgICAgICBjc3JfbWllX210aWVfZmYgPD0gY3NyX3dfZGF0YVtTQ1IxX0NTUl9NSUVfTVRJRV9PRkZTRVRdOwotICAgICAgICBjc3JfbWllX21laWVfZmYgPD0gY3NyX3dfZGF0YVtTQ1IxX0NTUl9NSUVfTUVJRV9PRkZTRVRdOwotICAgICAgICBjc3JfbWllX21zaWVfZmYgPD0gY3NyX3dfZGF0YVtTQ1IxX0NTUl9NSUVfTVNJRV9PRkZTRVRdOwotICAgIGVuZAotZW5kCi0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgY3NyX21pZSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJzA7Ci0gICAgY3NyX21pZVtTQ1IxX0NTUl9NSUVfTVNJRV9PRkZTRVRdID0gY3NyX21pZV9tc2llX2ZmOwotICAgIGNzcl9taWVbU0NSMV9DU1JfTUlFX01USUVfT0ZGU0VUXSA9IGNzcl9taWVfbXRpZV9mZjsKLSAgICBjc3JfbWllW1NDUjFfQ1NSX01JRV9NRUlFX09GRlNFVF0gPSBjc3JfbWllX21laWVfZmY7Ci1lbmQKLQotLy8gTVRWRUMgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBIb2xkcyB0cmFwIHZlY3RvciBjb25maWd1YXRpb24uIENvbnNpc3RzIG9mIGJhc2UgYW5kIG1vZGUgcGFydHMKLQotLy8gTVRWRUMgQkFTRSBwYXJ0Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSG9sZHMgdHJhcCB2ZWN0b3IgYmFzZSBhZGRyZXNzCi1nZW5lcmF0ZQotICAgIC8vIEFsbCBiaXRzIG9mIE1UVkVDIGJhc2UgYXJlIFJlYWQtT25seSBhbmQgaGFyZHdpcmVkIHRvIDAncwotICAgIGlmIChTQ1IxX01UVkVDX0JBU0VfV1JfQklUUyA9PSAwKSBiZWdpbiA6IG10dmVjX2Jhc2Vfcm8KLQotICAgICAgICBhc3NpZ24gY3NyX210dmVjX2Jhc2UgICA9IFNDUjFfQ1NSX01UVkVDX0JBU0VfUlNUX1ZBTDsKLQotICAgIC8vIEFsbCBiaXRzIG9mIE1UVkVDIGJhc2UgYXJlIFJXCi0gICAgZW5kIGVsc2UgaWYgKFNDUjFfTVRWRUNfQkFTRV9XUl9CSVRTID09IFNDUjFfQ1NSX01UVkVDX0JBU0VfVkFMX0JJVFMpIGJlZ2luIDogbXR2ZWNfYmFzZV9ydwotCi0gICAgICAgIGFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgICAgICAgICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgICAgICAgICBjc3JfbXR2ZWNfYmFzZSAgPD0gU0NSMV9DU1JfTVRWRUNfQkFTRV9SU1RfVkFMOwotICAgICAgICAgICAgZW5kIGVsc2UgaWYgKGNzcl9tdHZlY191cGQpIGJlZ2luCi0gICAgICAgICAgICAgICAgY3NyX210dmVjX2Jhc2UgIDw9IGNzcl93X2RhdGFbYFNDUjFfWExFTi0xOlNDUjFfQ1NSX01UVkVDX0JBU0VfWkVST19CSVRTXTsKLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmQKLQotICAgIC8vIExvd2VyIGJpdHMgb2YgTVRWRUMgYmFzZSBhcmUgUk8sIGhpZ2hlciAtIFJXCi0gICAgZW5kIGVsc2UgYmVnaW4gOiBtdHZlY19iYXNlX3JvX3J3Ci0KLSAgICAgICAgbG9naWMgWyhgU0NSMV9YTEVOLTEpOihgU0NSMV9YTEVOLVNDUjFfTVRWRUNfQkFTRV9XUl9CSVRTKV0gICBjc3JfbXR2ZWNfYmFzZV9yZWc7Ci0KLSAgICAgICAgYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgICAgICAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICAgICAgICAgIGNzcl9tdHZlY19iYXNlX3JlZyA8PSBTQ1IxX0NTUl9NVFZFQ19CQVNFX1JTVF9WQUxbKGBTQ1IxX1hMRU4tMSktOlNDUjFfTVRWRUNfQkFTRV9XUl9CSVRTXSA7Ci0gICAgICAgICAgICBlbmQgZWxzZSBpZiAoY3NyX210dmVjX3VwZCkgYmVnaW4KLSAgICAgICAgICAgICAgICBjc3JfbXR2ZWNfYmFzZV9yZWcgPD0gY3NyX3dfZGF0YVsoYFNDUjFfWExFTi0xKS06U0NSMV9NVFZFQ19CQVNFX1dSX0JJVFNdOwotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZAotCi0gICAgICAgIGFzc2lnbiBjc3JfbXR2ZWNfYmFzZSA9IHtjc3JfbXR2ZWNfYmFzZV9yZWcsIFNDUjFfQ1NSX01UVkVDX0JBU0VfUlNUX1ZBTFtTQ1IxX0NTUl9NVFZFQ19CQVNFX1pFUk9fQklUUys6U0NSMV9DU1JfTVRWRUNfQkFTRV9ST19CSVRTXX07Ci0gICAgZW5kCi1lbmRnZW5lcmF0ZQotCi0vLyBNVFZFQyBNT0RFIHBhcnQKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDaG9vc2VzIGJldHdlZW4gZGlyZWN0IChhbGwgZXhjZXB0aW9ucyBzZXQgUEMgdG8gQkFTRSkgb3IgdmVjdG9yZWQKLS8vIChhc3luY2hyb25vdXMgaW50ZXJydXB0cyBzZXQgUEMgdG8gQkFTRSs0eGNhdXNlKSBpbnRlcnJ1cHQgbW9kZXMKLQotYGlmZGVmIFNDUjFfTVRWRUNfTU9ERV9FTgotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgY3NyX210dmVjX21vZGVfZmYgPD0gU0NSMV9DU1JfTVRWRUNfTU9ERV9ESVJFQ1Q7Ci0gICAgZW5kIGVsc2UgaWYgKGNzcl9tdHZlY191cGQpIGJlZ2luCi0gICAgICAgIGNzcl9tdHZlY19tb2RlX2ZmIDw9IGNzcl93X2RhdGFbMF07Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIGNzcl9tdHZlY19tb2RlICAgICAgPSBjc3JfbXR2ZWNfbW9kZV9mZjsKLWFzc2lnbiBjc3JfbXR2ZWNfbW9kZV92ZWN0ID0gKGNzcl9tdHZlY19tb2RlX2ZmID09IFNDUjFfQ1NSX01UVkVDX01PREVfVkVDVE9SRUQpOwotYGVsc2UgLy8gU0NSMV9NVFZFQ19NT0RFX0VOCi1hc3NpZ24gY3NyX210dmVjX21vZGUgPSBTQ1IxX0NTUl9NVFZFQ19NT0RFX0RJUkVDVDsKLWBlbmRpZiAvLyBTQ1IxX01UVkVDX01PREVfRU4KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIE1hY2hpbmUgVHJhcCBIYW5kbGluZyByZWdpc3RlcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotIC8vIFJlZ2lzdGVyczoKLSAvLyAtIE1TQ1JBVENICi0gLy8gLSBNRVBDCi0gLy8gLSBNQ0FVU0UKLSAvLyAtIE1UVkFMCi0gLy8gLSBNSVAKLS8vCi0KLS8vIE1TQ1JBVENIIHJlZ2lzdGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSG9sZHMgYSBwb2ludGVyIHRvIGEgbWFjaGluZS1tb2RlIGhhcnQtbG9jYWwgY29udGV4dCBzcGFjZQotCi1hbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICBjc3JfbXNjcmF0Y2hfZmYgPD0gJzA7Ci0gICAgZW5kIGVsc2UgaWYgKGNzcl9tc2NyYXRjaF91cGQpIGJlZ2luCi0gICAgICAgIGNzcl9tc2NyYXRjaF9mZiA8PSBjc3Jfd19kYXRhOwotICAgIGVuZAotZW5kCi0KLS8vIE1FUEMgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBXaGVuIGEgdHJhcCBpcyB0YWtlbiBpbnRvIE0tbW9kZSBzYXZlcyB0aGUgdmlydHVhbCBhZGRyZXNzIG9mIGluc3RydWN0aW9uIHRoYXQKLS8vIHdhcyBpbnRlcnJ1cHRlZCBvciB0aGF0IGVuY291bnRlcmVkIHRoZSBleGNlcHRpb24KLQotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgY3NyX21lcGNfZmYgPD0gJzA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgY3NyX21lcGNfZmYgPD0gY3NyX21lcGNfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGNhc2UgKDEnYjEpCi0gICAgICAgIGVfZXhjICAgICAgIDogY3NyX21lcGNfbmV4dCA9IGV4dTJjc3JfcGNfY3Vycl9pW2BTQ1IxX1hMRU4tMTpQQ19MU0JdOwotICAgICAgICBlX2lycV9ubXJldCA6IGNzcl9tZXBjX25leHQgPSBleHUyY3NyX3BjX25leHRfaVtgU0NSMV9YTEVOLTE6UENfTFNCXTsKLSAgICAgICAgY3NyX21lcGNfdXBkOiBjc3JfbWVwY19uZXh0ID0gY3NyX3dfZGF0YVtgU0NSMV9YTEVOLTE6UENfTFNCXTsKLSAgICAgICAgZGVmYXVsdCAgICAgOiBjc3JfbWVwY19uZXh0ID0gY3NyX21lcGNfZmY7Ci0gICAgZW5kY2FzZQotZW5kCi0KLWBpZmRlZiBTQ1IxX1JWQ19FWFQKLSAgICBhc3NpZ24gY3NyX21lcGMgPSB7Y3NyX21lcGNfZmYsIDEnYjB9OwotYGVsc2UKLSAgICBhc3NpZ24gY3NyX21lcGMgPSB7Y3NyX21lcGNfZmYsIDInYjAwfTsKLWBlbmRpZgotCi0vLyBNQ0FVU0UgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBXaGVuIGEgdHJhcCBpcyB0YWtlbiBpbnRvIE0tbW9kZSBzYXZlcyBhIGNvZGUgaW5kaWNhdGluZyB0aGUgZXZlbnQgdGhhdCBjYXVzZWQKLS8vIHRoZSB0cmFwCi0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGNzcl9tY2F1c2VfaV9mZiAgPD0gMSdiMDsKLSAgICAgICAgY3NyX21jYXVzZV9lY19mZiA8PSBTQ1IxX0VYQ19DT0RFX1JFU0VUOyAvLyBjcC43Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgY3NyX21jYXVzZV9pX2ZmICA8PSBjc3JfbWNhdXNlX2lfbmV4dDsKLSAgICAgICAgY3NyX21jYXVzZV9lY19mZiA8PSBjc3JfbWNhdXNlX2VjX25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBjYXNlICgxJ2IxKQotICAgICAgICBlX2V4YyAgICAgICAgIDogYmVnaW4KLSAgICAgICAgICAgIGNzcl9tY2F1c2VfaV9uZXh0ICA9IDEnYjA7Ci0gICAgICAgICAgICBjc3JfbWNhdXNlX2VjX25leHQgPSBleHUyY3NyX2V4Y19jb2RlX2k7Ci0gICAgICAgIGVuZAotICAgICAgICBlX2lycSAgICAgICAgIDogYmVnaW4KLSAgICAgICAgICAgIGNzcl9tY2F1c2VfaV9uZXh0ICA9IDEnYjE7Ci0gICAgICAgICAgICBjc3JfbWNhdXNlX2VjX25leHQgPSBjc3JfbWNhdXNlX2VjX25ldzsKLSAgICAgICAgZW5kCi0gICAgICAgIGNzcl9tY2F1c2VfdXBkOiBiZWdpbgotICAgICAgICAgICAgY3NyX21jYXVzZV9pX25leHQgID0gY3NyX3dfZGF0YVtgU0NSMV9YTEVOLTFdOwotICAgICAgICAgICAgY3NyX21jYXVzZV9lY19uZXh0ID0gY3NyX3dfZGF0YVtTQ1IxX0VYQ19DT0RFX1dJRFRIX0UtMTowXTsgLy8gY3AuNwotICAgICAgICBlbmQKLSAgICAgICAgZGVmYXVsdCAgICAgICA6IGJlZ2luCi0gICAgICAgICAgICBjc3JfbWNhdXNlX2lfbmV4dCAgPSBjc3JfbWNhdXNlX2lfZmY7Ci0gICAgICAgICAgICBjc3JfbWNhdXNlX2VjX25leHQgPSBjc3JfbWNhdXNlX2VjX2ZmOwotICAgICAgICBlbmQKLSAgICBlbmRjYXNlCi1lbmQKLQotLy8gTVRWQUwgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBXaGVuIGEgdHJhcCBpcyB0YWtlbiBpbnRvIE0tbW9kZSBpcyBlaXRoZXIgc2V0IHRvIHplcm8gb3Igd3JpdHRlbiB3aXRoIGV4Y2VwdGlvbi0KLS8vIHNwZWNpZmljIGluZm9ybWF0aW9uCi0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGNzcl9tdHZhbF9mZiA8PSAnMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICBjc3JfbXR2YWxfZmYgPD0gY3NyX210dmFsX25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBjYXNlICgxJ2IxKQotICAgICAgICBlX2V4YyAgICAgICAgOiBjc3JfbXR2YWxfbmV4dCA9IGV4dTJjc3JfdHJhcF92YWxfaTsKLSAgICAgICAgZV9pcnEgICAgICAgIDogY3NyX210dmFsX25leHQgPSAnMDsKLSAgICAgICAgY3NyX210dmFsX3VwZDogY3NyX210dmFsX25leHQgPSBjc3Jfd19kYXRhOwotICAgICAgICBkZWZhdWx0ICAgICAgOiBjc3JfbXR2YWxfbmV4dCA9IGNzcl9tdHZhbF9mZjsKLSAgICBlbmRjYXNlCi1lbmQKLQotLy8gTUlQIHJlZ2lzdGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQ29udGFpbnMgaW5mb3JtYXRpb24gb24gcGVuZGluZyBpbnRlcnJ1cHRzIChleHRlcm5hbCwgc29mdHdhcmUsIHRpbWVyIElSUXMpCi0KLWFzc2lnbiBjc3JfbWlwX210aXAgPSBzb2MyY3NyX2lycV9tdGltZXJfaTsKLWFzc2lnbiBjc3JfbWlwX21laXAgPSBzb2MyY3NyX2lycV9leHRfaTsKLWFzc2lnbiBjc3JfbWlwX21zaXAgPSBzb2MyY3NyX2lycV9zb2Z0X2k7Ci0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgY3NyX21pcCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJzA7Ci0gICAgY3NyX21pcFtTQ1IxX0NTUl9NSUVfTVNJRV9PRkZTRVRdID0gY3NyX21pcF9tc2lwOwotICAgIGNzcl9taXBbU0NSMV9DU1JfTUlFX01USUVfT0ZGU0VUXSA9IGNzcl9taXBfbXRpcDsKLSAgICBjc3JfbWlwW1NDUjFfQ1NSX01JRV9NRUlFX09GRlNFVF0gPSBjc3JfbWlwX21laXA7Ci1lbmQKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIE1hY2hpbmUgQ291bnRlcnMvVGltZXJzIHJlZ2lzdGVycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0gLy8gUmVnaXN0ZXJzOgotIC8vIC0gTUNZQ0xFCi0gLy8gLSBNSU5TVFJFVAotLy8KLQotYGlmbmRlZiBTQ1IxX0NTUl9SRURVQ0VEX0NOVAotLy8gTUNZQ0xFIHJlZ2lzdGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSG9sZHMgdGhlIG51bWJlciBvZiBjbG9jayBjeWNsZXMgc2luY2Ugc29tZSBhcmJpdHJhcnkgcG9pbnQgb2YgdGltZSBpbiB0aGUKLS8vIHBhc3QgYXQgd2hpY2ggTUNZQ0xFIHdhcyB6ZXJvCi0KLWFzc2lnbiBjc3JfbWN5Y2xlX2xvX2luYyA9IDEnYjEKLSBgaWZkZWYgU0NSMV9NQ09VTlRFTl9FTgotICAgICAgICAgICAgICAgICAgICAgICAgICYgY3NyX21jb3VudGVuX2N5X2ZmCi0gYGVuZGlmIC8vIFNDUjFfTUNPVU5URU5fRU4KLSAgICAgICAgICAgICAgICAgICAgICAgICA7Ci1hc3NpZ24gY3NyX21jeWNsZV9oaV9pbmMgPSBjc3JfbWN5Y2xlX2xvX2luYyAmICgmY3NyX21jeWNsZV9sb19mZik7Ci0KLWFzc2lnbiBjc3JfbWN5Y2xlX2xvX3VwZCA9IGNzcl9tY3ljbGVfbG9faW5jIHwgY3NyX21jeWNsZV91cGRbMF07Ci1hc3NpZ24gY3NyX21jeWNsZV9oaV91cGQgPSBjc3JfbWN5Y2xlX2hpX2luYyB8ICh8Y3NyX21jeWNsZV91cGQpOwotCi0gYGlmbmRlZiBTQ1IxX0NMS0NUUkxfRU4KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotIGBlbHNlIC8vIFNDUjFfQ0xLQ1RSTF9FTgotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGtfYWx3X29uKSBiZWdpbgotIGBlbmRpZiAvLyBTQ1IxX0NMS0NUUkxfRU4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICBjc3JfbWN5Y2xlX2xvX2ZmIDw9ICcwOwotICAgICAgICBjc3JfbWN5Y2xlX2hpX2ZmIDw9ICcwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGlmIChjc3JfbWN5Y2xlX2xvX3VwZCkgY3NyX21jeWNsZV9sb19mZiA8PSBjc3JfbWN5Y2xlX2xvX25leHQ7Ci0gICAgICAgIGlmIChjc3JfbWN5Y2xlX2hpX3VwZCkgY3NyX21jeWNsZV9oaV9mZiA8PSBjc3JfbWN5Y2xlX2hpX25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIGNzcl9tY3ljbGVfaGlfbmV3ICA9IGNzcl9tY3ljbGVfaGlfZmYgKyAxJ2IxOwotCi1hc3NpZ24gY3NyX21jeWNsZV9sb19uZXh0ID0gY3NyX21jeWNsZV91cGRbMF0gPyBjc3Jfd19kYXRhWzc6MF0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjc3JfbWN5Y2xlX2xvX2luYyA/IGNzcl9tY3ljbGVfbG9fZmYgKyAxJ2IxCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjc3JfbWN5Y2xlX2xvX2ZmOwotYXNzaWduIGNzcl9tY3ljbGVfaGlfbmV4dCA9IGNzcl9tY3ljbGVfdXBkWzBdID8ge2Nzcl9tY3ljbGVfaGlfbmV3WzYzOjMyXSwgY3NyX3dfZGF0YVszMTo4XX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjc3JfbWN5Y2xlX3VwZFsxXSA/IHtjc3Jfd19kYXRhLCBjc3JfbWN5Y2xlX2hpX25ld1szMTo4XX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjc3JfbWN5Y2xlX2hpX2luYyA/IGNzcl9tY3ljbGVfaGlfbmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjc3JfbWN5Y2xlX2hpX2ZmOwotCi1hc3NpZ24gY3NyX21jeWNsZSA9IHtjc3JfbWN5Y2xlX2hpX2ZmLCBjc3JfbWN5Y2xlX2xvX2ZmfTsKLQotLy8gTUlOU1RSRVQgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBIb2xkcyB0aGUgbnVtYmVyIG9mIGluc3RydWN0aW9ucyBleGVjdXRlZCBieSB0aGUgY29yZSBmcm9tIHNvbWUgYXJiaXRyYXJ5IHRpbWUKLS8vIGluIHRoZSBwYXN0IGF0IHdoaWNoIE1JTlNUUkVUIHdhcyBlcXVhbCB0byB6ZXJvCi0KLWFzc2lnbiBjc3JfbWluc3RyZXRfbG9faW5jID0gZXh1MmNzcl9pbnN0cmV0X25vX2V4Y19pCi0gYGlmZGVmIFNDUjFfTUNPVU5URU5fRU4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICYgY3NyX21jb3VudGVuX2lyX2ZmCi0gYGVuZGlmIC8vIFNDUjFfTUNPVU5URU5fRU4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKLWFzc2lnbiBjc3JfbWluc3RyZXRfaGlfaW5jID0gY3NyX21pbnN0cmV0X2xvX2luYyAmICgmY3NyX21pbnN0cmV0X2xvX2ZmKTsKLQotYXNzaWduIGNzcl9taW5zdHJldF9sb191cGQgPSBjc3JfbWluc3RyZXRfbG9faW5jIHwgY3NyX21pbnN0cmV0X3VwZFswXTsKLWFzc2lnbiBjc3JfbWluc3RyZXRfaGlfdXBkID0gY3NyX21pbnN0cmV0X2hpX2luYyB8ICh8Y3NyX21pbnN0cmV0X3VwZCk7Ci0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGNzcl9taW5zdHJldF9sb19mZiA8PSAnMDsKLSAgICAgICAgY3NyX21pbnN0cmV0X2hpX2ZmIDw9ICcwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGlmIChjc3JfbWluc3RyZXRfbG9fdXBkKSBjc3JfbWluc3RyZXRfbG9fZmYgPD0gY3NyX21pbnN0cmV0X2xvX25leHQ7Ci0gICAgICAgIGlmIChjc3JfbWluc3RyZXRfaGlfdXBkKSBjc3JfbWluc3RyZXRfaGlfZmYgPD0gY3NyX21pbnN0cmV0X2hpX25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIGNzcl9taW5zdHJldF9oaV9uZXcgID0gY3NyX21pbnN0cmV0X2hpX2ZmICsgMSdiMTsKLQotYXNzaWduIGNzcl9taW5zdHJldF9sb19uZXh0ID0gY3NyX21pbnN0cmV0X3VwZFswXSA/IGNzcl93X2RhdGFbNzowXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3NyX21pbnN0cmV0X2xvX2luYyA/IGNzcl9taW5zdHJldF9sb19mZiArIDEnYjEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjc3JfbWluc3RyZXRfbG9fZmY7Ci1hc3NpZ24gY3NyX21pbnN0cmV0X2hpX25leHQgPSBjc3JfbWluc3RyZXRfdXBkWzBdID8ge2Nzcl9taW5zdHJldF9oaV9uZXdbNjM6MzJdLCBjc3Jfd19kYXRhWzMxOjhdfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3NyX21pbnN0cmV0X3VwZFsxXSA/IHtjc3Jfd19kYXRhLCBjc3JfbWluc3RyZXRfaGlfbmV3WzMxOjhdfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3NyX21pbnN0cmV0X2hpX2luYyA/IGNzcl9taW5zdHJldF9oaV9uZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjc3JfbWluc3RyZXRfaGlfZmY7Ci0KLWFzc2lnbiBjc3JfbWluc3RyZXQgPSB7Y3NyX21pbnN0cmV0X2hpX2ZmLCBjc3JfbWluc3RyZXRfbG9fZmZ9OwotYGVuZGlmIC8vIFNDUjFfQ1NSX1JFRFVDRURfQ05UCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBOb24tc3RhbmRhcmQgQ1NSCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1gaWZkZWYgU0NSMV9NQ09VTlRFTl9FTgotLy8gTUNPVU5URU4gcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBIb2xkcyBDb3VudGVycyBlbmFibGUgYml0cyAoQ1kgLSBNQ1lDTEUgY291bnRlcjsgSVIgLSBNSU5TVFJFVCBjb3VudGVyKQotCi1hbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICBjc3JfbWNvdW50ZW5fY3lfZmYgPD0gMSdiMTsKLSAgICAgICAgY3NyX21jb3VudGVuX2lyX2ZmIDw9IDEnYjE7Ci0gICAgZW5kIGVsc2UgaWYgKGNzcl9tY291bnRlbl91cGQpIGJlZ2luCi0gICAgICAgIGNzcl9tY291bnRlbl9jeV9mZiA8PSBjc3Jfd19kYXRhW1NDUjFfQ1NSX01DT1VOVEVOX0NZX09GRlNFVF07Ci0gICAgICAgIGNzcl9tY291bnRlbl9pcl9mZiA8PSBjc3Jfd19kYXRhW1NDUjFfQ1NSX01DT1VOVEVOX0lSX09GRlNFVF07Ci0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBjc3JfbWNvdW50ZW4gICAgPSAnMDsKLSAgICBjc3JfbWNvdW50ZW5bU0NSMV9DU1JfTUNPVU5URU5fQ1lfT0ZGU0VUXSAgID0gY3NyX21jb3VudGVuX2N5X2ZmOwotICAgIGNzcl9tY291bnRlbltTQ1IxX0NTUl9NQ09VTlRFTl9JUl9PRkZTRVRdICAgPSBjc3JfbWNvdW50ZW5faXJfZmY7Ci1lbmQKLWBlbmRpZiAvLyBTQ1IxX01DT1VOVEVOX0VOCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDU1IgPC0+IEVYVSBpbnRlcmZhY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIENTUiBleGNlcHRpb24KLWFzc2lnbiBjc3IyZXh1X3J3X2V4Y19vID0gY3NyX3JfZXhjIHwgY3NyX3dfZXhjCi1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICAgICAgICAgICAgICAgICAgICAgIHwgKGNzcjJoZHVfcmVxX28gJiAoaGR1MmNzcl9yZXNwX2kgIT0gU0NSMV9DU1JfUkVTUF9PSykpCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLWBpZmRlZiBTQ1IxX1REVV9FTgotICAgICAgICAgICAgICAgICAgICAgICAgfCAoY3NyMnRkdV9yZXFfbyAmICh0ZHUyY3NyX3Jlc3BfaSAhPSBTQ1IxX0NTUl9SRVNQX09LKSkKLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotICAgICAgICAgICAgICAgICAgICAgICAgOwotYXNzaWduIGNzcjJleHVfaXBfaWVfbyAgPSBjc3JfZWlycV9wbmRfZW4gfCBjc3Jfc2lycV9wbmRfZW4gfCBjc3JfdGlycV9wbmRfZW47Ci1hc3NpZ24gY3NyMmV4dV9pcnFfbyAgICA9IGNzcjJleHVfaXBfaWVfbyAmIGNzcl9tc3RhdHVzX21pZV9mZjsKLQotYXNzaWduIGNzcjJleHVfbXN0YXR1c19taWVfdXBfbyA9IGNzcl9tc3RhdHVzX3VwZCB8IGNzcl9taWVfdXBkIHwgZV9tcmV0OwotCi0vLyBOZXcgUEMgbXVsdGlwbGV4ZXIKLWBpZm5kZWYgU0NSMV9NVFZFQ19NT0RFX0VOCi1hc3NpZ24gY3NyMmV4dV9uZXdfcGNfbyA9IChleHUyY3NyX21yZXRfaW5zdHJfaSAmIH5leHUyY3NyX3Rha2VfaXJxX2kpCi0gICAgICAgICAgICAgICAgICAgICAgICA/IGNzcl9tZXBjCi0gICAgICAgICAgICAgICAgICAgICAgICA6IHtjc3JfbXR2ZWNfYmFzZSwgU0NSMV9DU1JfTVRWRUNfQkFTRV9aRVJPX0JJVFMnKDApfTsKLWBlbHNlIC8vIFNDUjFfTVRWRUNfTU9ERV9FTgotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBpZiAoZXh1MmNzcl9tcmV0X2luc3RyX2kgJiB+ZXh1MmNzcl90YWtlX2lycV9pKSBiZWdpbgotICAgICAgICBjc3IyZXh1X25ld19wY19vICA9IGNzcl9tZXBjOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGlmIChjc3JfbXR2ZWNfbW9kZV92ZWN0KSBiZWdpbgotICAgICAgICAgICAgY2FzZSAoMSdiMSkKLSAgICAgICAgICAgICAgICBleHUyY3NyX3Rha2VfZXhjX2k6IGNzcjJleHVfbmV3X3BjX28gPSB7Y3NyX210dmVjX2Jhc2UsIFNDUjFfQ1NSX01UVkVDX0JBU0VfWkVST19CSVRTJygwKX07Ci0gICAgICAgICAgICAgICAgY3NyX2VpcnFfcG5kX2VuICAgOiBjc3IyZXh1X25ld19wY19vID0ge2Nzcl9tdHZlY19iYXNlLCBTQ1IxX0VYQ19DT0RFX0lSUV9NX0VYVEVSTkFMLCAyJ2QwfTsKLSAgICAgICAgICAgICAgICBjc3Jfc2lycV9wbmRfZW4gICA6IGNzcjJleHVfbmV3X3BjX28gPSB7Y3NyX210dmVjX2Jhc2UsIFNDUjFfRVhDX0NPREVfSVJRX01fU09GVFdBUkUsIDInZDB9OwotICAgICAgICAgICAgICAgIGNzcl90aXJxX3BuZF9lbiAgIDogY3NyMmV4dV9uZXdfcGNfbyA9IHtjc3JfbXR2ZWNfYmFzZSwgU0NSMV9FWENfQ09ERV9JUlFfTV9USU1FUiwgMidkMH07Ci0gICAgICAgICAgICAgICAgZGVmYXVsdCAgICAgICAgICAgOiBjc3IyZXh1X25ld19wY19vID0ge2Nzcl9tdHZlY19iYXNlLCBTQ1IxX0NTUl9NVFZFQ19CQVNFX1pFUk9fQklUUycoMCl9OwotICAgICAgICAgICAgZW5kY2FzZQotICAgICAgICBlbmQgZWxzZSBiZWdpbiAvLyBkaXJlY3QgbW9kZQotICAgICAgICAgICAgY3NyMmV4dV9uZXdfcGNfbyA9IHtjc3JfbXR2ZWNfYmFzZSwgU0NSMV9DU1JfTVRWRUNfQkFTRV9aRVJPX0JJVFMnKDApfTsKLSAgICAgICAgZW5kCi0gICAgZW5kCi1lbmQKLWBlbmRpZiAvLyBTQ1IxX01UVkVDX01PREVfRU4KLQotYGlmZGVmIFNDUjFfSVBJQ19FTgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIENTUiA8LT4gSVBJQyBpbnRlcmZhY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBjc3JfaXBpY19yZXEgICAgID0gY3NyMmlwaWNfcl9yZXFfbyB8IGNzcjJpcGljX3dfcmVxX287Ci1hc3NpZ24gY3NyMmlwaWNfYWRkcl9vICA9IGNzcl9pcGljX3JlcSAgICAgPyBleHUyY3NyX3J3X2FkZHJfaVsyOjBdIDogJzA7Ci1hc3NpZ24gY3NyMmlwaWNfd2RhdGFfbyA9IGNzcjJpcGljX3dfcmVxX28gPyBleHUyY3NyX3dfZGF0YV9pICAgICAgIDogJzA7Ci1gZW5kaWYgLy8gU0NSMV9JUElDX0VOCi0KLWBpZmRlZiBTQ1IxX0RCR19FTgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIENTUiA8LT4gSERVIGludGVyZmFjZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIGNzcjJoZHVfcmVxX28gICA9IGNzcl9oZHVfcmVxICYgZXh1X3JlcV9ub19leGM7Ci1hc3NpZ24gY3NyMmhkdV9jbWRfbyAgID0gZXh1MmNzcl93X2NtZF9pOwotYXNzaWduIGNzcjJoZHVfYWRkcl9vICA9IGV4dTJjc3JfcndfYWRkcl9pW1NDUjFfSERVX0RFQlVHQ1NSX0FERFJfV0lEVEgtMTowXTsKLWFzc2lnbiBjc3IyaGR1X3dkYXRhX28gPSBleHUyY3NyX3dfZGF0YV9pOwotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KLWBpZmRlZiBTQ1IxX1REVV9FTgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIENTUiA8LT4gVERVIGludGVyZmFjZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIGNzcjJ0ZHVfcmVxX28gICA9IGNzcl9icmttX3JlcSAmIGV4dV9yZXFfbm9fZXhjOwotYXNzaWduIGNzcjJ0ZHVfY21kX28gICA9IGV4dTJjc3Jfd19jbWRfaTsKLWFzc2lnbiBjc3IydGR1X2FkZHJfbyAgPSBleHUyY3NyX3J3X2FkZHJfaVtTQ1IxX0NTUl9BRERSX1REVV9PRkZTX1ctMTowXTsKLWFzc2lnbiBjc3IydGR1X3dkYXRhX28gPSBleHUyY3NyX3dfZGF0YV9pOwotYGVuZGlmIC8vIFNDUjFfVERVX0VOCi0KLWBpZmRlZiBTQ1IxX1RSR1RfU0lNVUxBVElPTgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEFzc2VydGlvbnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFggY2hlY2tzCi0KLVNDUjFfU1ZBX0NTUl9YQ0hFQ0tfQ1RSTCA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICAhJGlzdW5rbm93bih7ZXh1MmNzcl9yX3JlcV9pLCBleHUyY3NyX3dfcmVxX2ksIGV4dTJjc3JfdGFrZV9pcnFfaSwgZXh1MmNzcl90YWtlX2V4Y19pLCBleHUyY3NyX21yZXRfdXBkYXRlX2kKLWBpZm5kZWYgU0NSMV9DU1JfUkVEVUNFRF9DTlQKLSAgICAsIGV4dTJjc3JfaW5zdHJldF9ub19leGNfaQotYGVuZGlmIC8vIFNDUjFfQ1NSX1JFRFVDRURfQ05UCi0gICAgfSkKLSAgICApIGVsc2UgJGVycm9yKCJDU1IgRXJyb3I6IHVua25vd24gY29udHJvbCB2YWx1ZXMiKTsKLQotU0NSMV9TVkFfQ1NSX1hDSEVDS19SRUFEIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgIGV4dTJjc3Jfcl9yZXFfaSB8LT4gISRpc3Vua25vd24oe2V4dTJjc3JfcndfYWRkcl9pLCBjc3IyZXh1X3JfZGF0YV9vLCBjc3IyZXh1X3J3X2V4Y19vfSkKLSAgICApIGVsc2UgJGVycm9yKCJDU1IgRXJyb3I6IHVua25vd24gY29udHJvbCB2YWx1ZXMiKTsKLQotU0NSMV9TVkFfQ1NSX1hDSEVDS19XUklURSA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICBleHUyY3NyX3dfcmVxX2kgfC0+ICEkaXN1bmtub3duKHtleHUyY3NyX3J3X2FkZHJfaSwgZXh1MmNzcl93X2NtZF9pLCBleHUyY3NyX3dfZGF0YV9pLCBjc3IyZXh1X3J3X2V4Y19vfSkKLSAgICApIGVsc2UgJGVycm9yKCJDU1IgRXJyb3I6IHVua25vd24gY29udHJvbCB2YWx1ZXMiKTsKLQotYGlmZGVmIFNDUjFfSVBJQ19FTgotU0NSMV9TVkFfQ1NSX1hDSEVDS19SRUFEX0lQSUMgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgY3NyMmlwaWNfcl9yZXFfbyB8LT4gISRpc3Vua25vd24oe2NzcjJpcGljX2FkZHJfbywgaXBpYzJjc3JfcmRhdGFfaX0pCi0gICAgKSBlbHNlICRlcnJvcigiQ1NSIEVycm9yOiB1bmtub3duIGNvbnRyb2wgdmFsdWVzIik7Ci0KLVNDUjFfU1ZBX0NTUl9YQ0hFQ0tfV1JJVEVfSVBJQyA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICBjc3IyaXBpY193X3JlcV9vIHwtPiAhJGlzdW5rbm93bih7Y3NyMmlwaWNfYWRkcl9vLCBjc3IyaXBpY193ZGF0YV9vfSkKLSAgICApIGVsc2UgJGVycm9yKCJDU1IgRXJyb3I6IHVua25vd24gY29udHJvbCB2YWx1ZXMiKTsKLWBlbmRpZiAvLyBTQ1IxX0lQSUNfRU4KLQotLy8gQmVoYXZpb3IgY2hlY2tzCi0KLWBpZm5kZWYgVkVSSUxBVE9SCi1TQ1IxX1NWQV9DU1JfTVJFVCA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICBlX21yZXQgfD0+ICgkc3RhYmxlKGNzcl9tZXBjX2ZmKSAmICRzdGFibGUoY3NyX210dmFsX2ZmKSkKLSAgICApIGVsc2UgJGVycm9yKCJDU1IgRXJyb3I6IE1SRVQgd3JvbmcgYmVoYXZpb3IiKTsKLQotU0NSMV9TVkFfQ1NSX01SRVRfSVJRIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgIChleHUyY3NyX21yZXRfaW5zdHJfaSAmIGVfaXJxKQotICAgIHw9PiAoJHN0YWJsZShjc3JfbWVwY19mZikgJiAoZXh1MmNzcl9wY19jdXJyX2kgIT0gY3NyX21lcGMpKQotICAgICkgZWxzZSAkZXJyb3IoIkNTUiBFcnJvcjogTVJFVCtJUlEgd3JvbmcgYmVoYXZpb3IiKTsKLQotU0NSMV9TVkFfQ1NSX0VYQ19JUlEgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgKGV4dTJjc3JfdGFrZV9leGNfaSAmIGV4dTJjc3JfdGFrZV9pcnFfaQotYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgJiB+aGR1MmNzcl9ub19jb21taXRfaQotYGVuZGlmCi0gICAgKSB8PT4KLSAgICAofmNzcl9tc3RhdHVzX21pZV9mZiAmICh+Y3NyX21jYXVzZV9pX2ZmKQotICAgICYgKGV4dTJjc3JfcGNfY3Vycl9pPT17Y3NyX210dmVjX2Jhc2UsIFNDUjFfQ1NSX01UVkVDX0JBU0VfWkVST19CSVRTJygwKX0pKQotICAgICkgZWxzZSAkZXJyb3IoIkNTUiBFcnJvcjogd3JvbmcgRVhDK0lSUSIpOwotYGVuZGlmIC8vIFZFUklMQVRPUgotU0NSMV9TVkFfQ1NSX0VWRU5UUyA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICAkb25laG90MCh7ZV9pcnEsIGVfZXhjLCBlX21yZXR9KQotICAgICkgZWxzZSAkZXJyb3IoIkNTUiBFcnJvcjogbW9yZSB0aGFuIG9uZSBldmVudCBhdCBhIHRpbWUiKTsKLQotU0NSMV9TVkFfQ1NSX1JXX0VYQyA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICBjc3IyZXh1X3J3X2V4Y19vIHwtPiAoZXh1MmNzcl93X3JlcV9pIHwgZXh1MmNzcl9yX3JlcV9pKQotICAgICkgZWxzZSAkZXJyb3IoIkNTUiBFcnJvcjogaW1wb3NzaWJsZSBleGNlcHRpb24iKTsKLQotYGlmbmRlZiBWRVJJTEFUT1IKLVNDUjFfU1ZBX0NTUl9NU1RBVFVTX01JRV9VUCA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICBjc3IyZXh1X21zdGF0dXNfbWllX3VwX28gfD0+IH5jc3IyZXh1X21zdGF0dXNfbWllX3VwX28KLSAgICApIGVsc2UgJGVycm9yKCJDU1IgRXJyb3I6IGNzcjJleHVfbXN0YXR1c19taWVfdXBfbyBjYW4gb25seSBiZSBoaWdoIGZvciBvbmUgbWN5Y2xlIik7Ci1gZW5kaWYgLy8gVkVSSUxBVE9SCi0KLWBpZm5kZWYgU0NSMV9DU1JfUkVEVUNFRF9DTlQKLQotYGlmbmRlZiBWRVJJTEFUT1IKLVNDUjFfU1ZBX0NTUl9DWUNMRV9JTkMgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAoCi1gaWZuZGVmIFNDUjFfQ0xLQ1RSTF9FTgotbmVnZWRnZSBjbGsKLWBlbHNlIC8vIFNDUjFfQ0xLQ1RSTF9FTgotbmVnZWRnZSBjbGtfYWx3X29uCi1gZW5kaWYgLy8gU0NSMV9DTEtDVFJMX0VOCi0gICAgKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgICh+fGNzcl9tY3ljbGVfdXBkKSB8PT4KLWBpZmRlZiBTQ1IxX01DT1VOVEVOX0VOCi0gICAgKCRwYXN0KGNzcl9tY291bnRlbl9jeV9mZikgPyAoY3NyX21jeWNsZSA9PSAkcGFzdChjc3JfbWN5Y2xlICsgMSdiMSkpIDogJHN0YWJsZShjc3JfbWN5Y2xlKSkKLWBlbHNlIC8vU0NSMV9NQ09VTlRFTl9FTgotICAgIChjc3JfbWN5Y2xlID09ICRwYXN0KGNzcl9tY3ljbGUgKyAxJ2IxKSkKLWBlbmRpZiAvLyBTQ1IxX01DT1VOVEVOX0VOCi0gICAgKSBlbHNlICRlcnJvcigiQ1NSIEVycm9yOiBDWUNMRSBpbmNyZW1lbnQgd3JvbmcgYmVoYXZpb3IiKTsKLQotU0NSMV9TVkFfQ1NSX0lOU1RSRVRfSU5DIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgIChleHUyY3NyX2luc3RyZXRfbm9fZXhjX2kgJiB+fGNzcl9taW5zdHJldF91cGQpIHw9PgotYGlmZGVmIFNDUjFfTUNPVU5URU5fRU4KLSAgICAoJHBhc3QoY3NyX21jb3VudGVuX2lyX2ZmKSA/IChjc3JfbWluc3RyZXQgPT0gJHBhc3QoY3NyX21pbnN0cmV0ICsgMSdiMSkpIDogJHN0YWJsZShjc3JfbWluc3RyZXQpKQotYGVsc2UgLy9TQ1IxX01DT1VOVEVOX0VOCi0gICAgKGNzcl9taW5zdHJldCA9PSAkcGFzdChjc3JfbWluc3RyZXQgKyAxJ2IxKSkKLWBlbmRpZiAvLyBTQ1IxX01DT1VOVEVOX0VOCi0gICAgKSBlbHNlICRlcnJvcigiQ1NSIEVycm9yOiBJTlNUUkVUIGluY3JlbWVudCB3cm9uZyBiZWhhdmlvciIpOwotYGVuZGlmCi1TQ1IxX1NWQV9DU1JfQ1lDTEVfSU5TVFJFVF9VUCA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICB+KCZjc3JfbWluc3RyZXRfdXBkIHwgJmNzcl9tY3ljbGVfdXBkKQotICAgICkgZWxzZSAkZXJyb3IoIkNTUiBFcnJvcjogSU5TVFJFVC9DWUNMRSB1cCBpbGxlZ2FsIHZhbHVlIik7Ci0KLWBlbmRpZiAvLyBTQ1IxX0NTUl9SRURVQ0VEX0NOVAotCi1gZW5kaWYgLy8gU0NSMV9UUkdUX1NJTVVMQVRJT04KLQotZW5kbW9kdWxlIDogc2NyMV9waXBlX2NzcgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2Rpdi5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9kaXYuc3YKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGE5MTFkNDEuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2Rpdi5zdgorKysgL2Rldi9udWxsCkBAIC0xLDIxNSArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQotLy8vLyAKLS8vLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLy8vCi0vLy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLy8vCi0vLy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0vLy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0vLy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPiAgICAgICAgICAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gIDMyIC8gMzIgRGl2aWRlciB3aXRoIDE2IHN0YWdlIHBpcGUgbGluZSAsIFN1cHBvcnQgU2lnbmVkIERpdmlzaW9uICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHlpZml2ZSBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMveWlmaXZlLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gIERlc2NyaXB0aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgIDMyIERpdiBCeSAzMiB3aXRoIDE2IHN0YWdlIHBpcGUgbGluZSBmb3IgdGltaW5nIHJlYXNvbiAgICAgICAgICAgLy8vLwotLy8vLyAgICBOb3RlOiAyIEJpdCBhcmUgY29tcHV0ZWQgYXQgYSB0aW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgYml0WzMyXSA9MSBpbmRpY2F0ZSBuZWdhdGl2ZSBudW1iZXIgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgRXhhbXBsZTogNCdiMTAxMSBEaXYgNCdiMDAxMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgICAiIiIiIiIiInwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgMTAxMSB8ICA8LSBxciByZWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgLTAwMTEwMDAgfCAgPC0gU2h1ZnQgRGl2aWRlciBieSAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgICAiIiIiIiIiInwgIDwtICAwMDExMDAwID4gMTAxMSAsIGlnbm9yZSBzdWIsIFF1bzogMCAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgMTAxMSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgIC0wMDExMDAgfCAgPC0gU2hpZnQgRGl2aWRlciBieSAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgICAiIiIiIiIiInwgIDwtICAwMDExMDAgPiAxMDExICwgaWdub3JlIHN1YiwgUXVvOjAwICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgMTAxMSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAtMDAxMTAgfCAgPC0gU2hpZnQgRGl2aWRlciBieSAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgICAiIiIiIiIiInwgIDwtIDAwMTEwIDwgMTAxMSwgUmVtOiAwMTAxIGFuZCBRdW86MDAxICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgMDEwMSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgLTAwMTEgfCAgPC0gU2hpZnQgRGl2aWRlciBieSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgICAiIiIiIiIiInwgIDwtIDAwMTEgPCAwMTAxICwgUmVtOiAxMCBhbmQgUXVvOiAwMDExICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAxMCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgIFF1b3RpZW50LCAzICgwMDExKTsgcmVtYWluZGVyIDIgKDEwKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAgICAgICAgLy8vLwotLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgICAgICAgIC8vLy8KLS8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgICAgICAgICAvLy8vCi0vLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAgICAgICAgLy8vLwotLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgICAgICAgICAvLy8vCi0vLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgICAgICAgLy8vLwotLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgICAgICAgIC8vLy8KLS8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgICAgICAgICAvLy8vCi0vLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgICAgICAgICAvLy8vCi0vLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAgICAgICAgLy8vLwotLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgICAgICAgIC8vLy8KLS8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlICAgICAgICAvLy8vCi0vLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgICAgICAgICAvLy8vCi0vLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAgICAgICAgLy8vLwotLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi1tb2R1bGUgc2NyMV9waXBlX2RpdigKLQlpbnB1dCAgIGxvZ2ljICAgICAgICBjbGssIAotCWlucHV0ICAgbG9naWMgICAgICAgIHJzdG4sIAotCWlucHV0ICAgbG9naWMgICAgICAgIGRhdGFfdmFsaWQsICAgLy8gaW5wdXQgdmFsaWQKLQlpbnB1dCAgIGxvZ2ljIFszMjowXSBEaW4xLCAgICAgICAgIC8vIGRpdmlkZW5kCi0JaW5wdXQgICBsb2dpYyBbMzI6MF0gRGluMiwgICAgICAgICAvLyBkaXZpZGVyCi0Jb3V0cHV0ICBsb2dpYyBbMzE6MF0gcXVvdGllbnQsICAgICAvLyBxdW90aWVudAotCW91dHB1dCAgbG9naWMgWzMxOjBdIHJlbWFpbmRlciwgICAgLy8gcmVtYWluZGVyCi0Jb3V0cHV0ICBsb2dpYyAgICAgICAgZGl2X3JkeV9vLCAgICAvLyBEaXYgcmVzdWx0IHJlYWR5Ci0JaW5wdXQgICBsb2dpYyAgICAgICAgZGF0YV9kb25lICAgICAvLyBSZXN1bHQgcHJvY2Vzc2luZyBjb21wbGV0ZSBpbmRpY2F0aW9uCi0gICAgICk7Ci0KLXBhcmFtZXRlciBXQUlUX0NNRCAgICAgID0gMidiMDA7IC8vIEFjY2VwdCBjb21tYW5kIGFuZCBEbyBTaWduZWQgdG8gdW5zaWduZWQKLXBhcmFtZXRlciBXQUlUX0NPTVAgICAgID0gMidiMDE7IC8vIFdhaXQgZm9yIENPTVBVVEFUSU9OCi1wYXJhbWV0ZXIgV0FJVF9ET05FICAgICA9IDInYjEwOyAvLyBEbyBTaWduZWQgdG8gVW5zaWduZWQgY29udmVyc2lvbiAKLXBhcmFtZXRlciBXQUlUX0VYSVQgICAgID0gMidiMTE7IC8vIFdhaXQgZm9yIERhdGEgQ29tcGxldGlvbgotCi1sb2dpYyBbMzE6MF0gc3JjMSwgc3JjMjsKLQotLy8gd2lyZXMKLWxvZ2ljIGRpdjAsIGRpdjE7Ci1sb2dpYyBbMzE6MF0gcmVtMCwgcmVtMSwgcmVtMjsKLWxvZ2ljIFszMjowXSBzdWIwLCBzdWIxOwotbG9naWMgWzYzOjBdIGNtcDAsIGNtcDE7Ci1sb2dpYyBbMzE6MF0gZGl2X291dCwgcmVtX291dDsKLWxvZ2ljIFsxOjBdICBzdGF0ZSwgbmV4dF9zdGF0ZTsKLWxvZ2ljICAgICAgICBkaXZfcmR5X2k7Ci1sb2dpYyBbMzE6MF0gcXVvdGllbnRfbmV4dDsgICAgIC8vIHF1b3RpZW50Ci1sb2dpYyBbMzE6MF0gcmVtYWluZGVyX25leHQ7ICAgIC8vIHJlbWFpbmRlcgotCi0vLyByZWFsIHJlZ2lzdGVycwotbG9naWMgWzM6MF0gIGN5Y2xlLG5leHRfY3ljbGU7Ci0KLS8vIFRoZSBtYWluIGxvZ2ljCi1hc3NpZ24gY21wMSA9IHNyYzIgPDwgKHs0J2IxMTExIC0gY3ljbGUsIDEnYjB9ICsgJ2gxKTsKLWFzc2lnbiBjbXAwID0gc3JjMiA8PCAoezQnYjExMTEgLSBjeWNsZSwgMSdiMH0gKyAnaDApOwotCi1hc3NpZ24gcmVtMiA9IGN5Y2xlICE9IDAgPyByZW1haW5kZXIgOiBzcmMxOwotCi1hc3NpZ24gc3ViMSA9IHsxJ2IwLCByZW0yfSAtIHsxJ2IwLCBjbXAxWzMxOjBdfTsKLWFzc2lnbiBkaXYxID0gfGNtcDFbNjM6MzJdID8gMSdiMCA6ICFzdWIxWzMyXTsKLWFzc2lnbiByZW0xID0gZGl2MSA/IHN1YjFbMzE6MF0gOiByZW0yWzMxOjBdOwotCi1hc3NpZ24gc3ViMCA9IHsxJ2IwLCByZW0xfSAtIHsxJ2IwLCBjbXAwWzMxOjBdfTsKLWFzc2lnbiBkaXYwID0gfGNtcDBbNjM6MzJdID8gMSdiMCA6ICFzdWIwWzMyXTsKLWFzc2lnbiByZW0wID0gZGl2MCA/IHN1YjBbMzE6MF0gOiByZW0xWzMxOjBdOwotCi0vLwotLy8gaW4gY2xvY2sgY3ljbGUgMCB3ZSBmaXJzdCBjYWxjdWxhdGUgdHdvIE1TQiBiaXRzLCAuLi4KLS8vIHRpbGwgZmluYWxseSBpbiBjbG9jayBjeWNsZSAzIHdlIGNhbGN1bGF0ZSB0d28gTFNCIGJpdHMKLWFzc2lnbiBkaXZfb3V0ID0ge3F1b3RpZW50WzI5OjBdLCBkaXYxLCBkaXYwfTsKLWFzc2lnbiByZW1fb3V0ID0gcmVtMDsKLQotLy8KLS8vIGRpdmlkZXIgd29ya3MgaW4gZm91ciBjbG9jayBjeWNsZXMgLS0gMCwgMSwgMiBhbmQgMwotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3RuKQotYmVnaW4KLSAgaWYgKCFyc3RuKSBiZWdpbgotICAgIHN0YXRlICAgICAgICA8PSBXQUlUX0NNRDsKLSAgICBjeWNsZSAgICAgICAgPD0gNCdiMDsKLSAgICBkaXZfcmR5X28gICAgPD0gMSdiMDsKLSAgICBxdW90aWVudCAgICAgPD0gMzInaDA7Ci0gICAgcmVtYWluZGVyICAgIDw9IDMyJ2gwOwotICAgIHNyYzEgICAgICAgICA8PSAzMidoMDsKLSAgICBzcmMyICAgICAgICAgPD0gMzInaDA7Ci0gIGVuZCBlbHNlIGJlZ2luCi0gICAgIGN5Y2xlICAgICAgICA8PSBuZXh0X2N5Y2xlOwotICAgICBzdGF0ZSAgICAgICAgPD0gbmV4dF9zdGF0ZTsKLSAgICAgZGl2X3JkeV9vICAgIDw9IGRpdl9yZHlfaTsKLSAgICAgaWYoZGF0YV92YWxpZCAmJiBzdGF0ZT09IFdBSVRfQ01EICkgYmVnaW4KLSAgICAgICAgc3JjMSAgIDw9IChEaW4xWzMyXSA9PSAxJ2IxKSA/ICgzMidoRkZGRl9GRkZGIF4gRGluMVszMTowXSkrMSA6IERpbjFbMzE6MF07Ci0gICAgICAgIHNyYzIgICA8PSAoRGluMlszMl0gPT0gMSdiMSkgPyAoMzInaEZGRkZfRkZGRiBeIERpbjJbMzE6MF0pKzEgOiBEaW4yWzMxOjBdOwotICAgICBlbmQKLSAgICAgcXVvdGllbnQgICAgPD0gcXVvdGllbnRfbmV4dDsKLSAgICAgcmVtYWluZGVyICAgPD0gcmVtYWluZGVyX25leHQ7Ci0gIGVuZAotZW5kCi0KLQotYWx3YXlzX2NvbWIKLWJlZ2luCi0gICAgIGRpdl9yZHlfaSAgICAgICAgPSAwOwotICAgICBuZXh0X2N5Y2xlICAgICAgID0gY3ljbGU7Ci0gICAgIG5leHRfc3RhdGUgICAgICAgPSBzdGF0ZTsKLSAgICAgcXVvdGllbnRfbmV4dCAgICA9IHF1b3RpZW50OwotICAgICByZW1haW5kZXJfbmV4dCAgID0gcmVtYWluZGVyOwotICAgICBjYXNlKHN0YXRlKQotICAgICBXQUlUX0NNRDogaWYoZGF0YV92YWxpZCkgIGJlZ2luIAotCSAgICAgbmV4dF9jeWNsZSA9IDA7Ci0JICAgICBpZihEaW4yWzMxOjBdID09IDApIGJlZ2luIC8vIERpdiBieSAwIGNhc2UKLQkgICAgICAgIG5leHRfc3RhdGUgPSBXQUlUX0RPTkU7Ci0JICAgICBlbmQgZWxzZSBiZWdpbgotCSAgICAgICAgbmV4dF9zdGF0ZSA9IFdBSVRfQ09NUDsKLSAgICAgICAgICAgICBlbmQKLQkgZW5kCi0gICAgIC8vIFdBSVQgZm9yIENvbXB1dGF0aW9uCi0gICAgIFdBSVRfQ09NUDogIAotCWJlZ2luCi0gICAgICAgICAgIHF1b3RpZW50X25leHQgICAgPSBkaXZfb3V0OwotICAgICAgICAgICByZW1haW5kZXJfbmV4dCAgID0gcmVtX291dDsKLQkgICBuZXh0X2N5Y2xlID0gY3ljbGUgKzE7Ci0JICAgaWYoY3ljbGUgPT0gMTUpIGJlZ2luCi0JICAgICAgbmV4dF9zdGF0ZSAgPSBXQUlUX0RPTkU7Ci0gICAgICAgICAgIGVuZCBlbHNlIGJlZ2luCi0JICAgICAgbmV4dF9jeWNsZSA9IGN5Y2xlICsxOwotCSAgIGVuZAotCWVuZAotICAgICBXQUlUX0RPTkU6ICAKLQliZWdpbgotCSAgIGlmKERpbjJbMzE6MF0gPT0gMCkgYmVnaW4gLy8gSGFuZGxpbmcgZGl2IGJ5IDAgY2FzZQotCSAgICAgICBxdW90aWVudF9uZXh0ID0gMzInaEZGRkZfRkZGRjsKLSAgICAgICAgICAgICAgIHJlbWFpbmRlcl9uZXh0ID0gRGluMVszMTowXTsKLSAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4KLQkgICAgICBpZihEaW4xWzMyXSBeIERpbjJbMzJdKSAgYmVnaW4KLSAgICAgICAgICAgICAgICAgcXVvdGllbnRfbmV4dCA9ICgzMidoRkZGRl9GRkZGIF4gcXVvdGllbnRbMzE6MF0pICsgMTsKLSAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgIGlmKERpbjFbMzJdKSAgYmVnaW4KLSAgICAgICAgICAgICAgICAgcmVtYWluZGVyX25leHQgPSAoMzInaEZGRkZfRkZGRiBeIHJlbWFpbmRlclszMTowXSkgKyAxOwotCSAgICAgIGVuZAotCSAgIGVuZAotICAgICAgICAgICBkaXZfcmR5X2kgPSAxJ2IxOwotCSAgIG5leHRfc3RhdGUgID0gV0FJVF9FWElUOwotCWVuZAotCVdBSVRfRVhJVDogYmVnaW4KLQkgICAgaWYoZGF0YV9kb25lKSAvLyBXYWl0IGZvciBkYXRhIGNvbXBsZXRpb24gY29tbWFuZAotCSAgICAgICAgbmV4dF9zdGF0ZSAgPSBXQUlUX0NNRDsKLQllbmQJCi0gICAgZW5kY2FzZQotZW5kCi1lbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9leHUuc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfZXh1LnN2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2FlODU3Li4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9leHUuc3YKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkyICswLDAgQEAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjEKLS8vIAotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKLS8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBTeW50YWNvcmUgTExDCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vIEBmaWxlICAgICAgIDxzY3IxX3BpcGVfZXh1LnN2PgotLy8vIEBicmllZiAgICAgIEV4ZWN1dGlvbiBVbml0IChFWFUpCi0vLy8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAvLwotIC8vIEZ1bmN0aW9uYWxpdHk6Ci0gLy8gLSBQZXJmb3JtcyBpbnN0cnVjdGlvbnMgZXhlY3V0aW9uOgotIC8vICAgLSBQcmV2ZW50cyBpbnN0cnVjdGlvbnMgZnJvbSBleGVjdXRpb24gaWYgdGhlIEhBUlQgaXMgaW4gV0ZJIG9yIERlYnVnIEhhbHRlZAotIC8vICAgICBzdGF0ZQotIC8vICAgLSBGZXRjaGVzIG9wZXJhbmRzIGZvciBJQUxVCi0gLy8gICAtIENhbGN1bGF0ZXMgb3BlcmF0aW9uIHJlc3VsdHMgdmlhIElBTFUKLSAvLyAgIC0gU3RvcmVzIElBTFUgcmVzdWx0cyBpbiBNUFJGCi0gLy8gICAtIFBlcmZvcm1zIExPQUQvU1RPUkUgb3BlcmF0aW9ucyB2aWEgTFNVCi0gLy8gLSBIYW5kbGVzIGV4Y2VwdGlvbnM6Ci0gLy8gICAtIEdlbmVyYXRlcyBleGNlcHRpb24gcmVxdWVzdAotIC8vICAgLSBFbmNvZGVzIGV4Y2VwdGlvbiBjb2RlCi0gLy8gICAtIENhbGN1bGF0ZXMgZXhjZXB0aW9uIHRyYXAgdmFsdWUKLSAvLyAtIENvbnRyb2xzIFdGSSBpbnN0cnVjdGlvbiBleGVjdXRpb24KLSAvLyAtIENhbGN1bGF0ZXMgUEMgdmFsdWU6Ci0gLy8gICAtIEluaXRpYWxpemVzIFBDIG9uIHJlc2V0Ci0gLy8gICAtIFN0b3JlcyB0aGUgY3VycmVudCBQQyB2YWx1ZQotIC8vICAgLSBDYWxjdWxhdGVzIGEgTmV3IFBDIHZhbHVlIGFuZCBnZW5lcmF0ZXMgYSBOZXcgUEMgcmVxdWVzdCB0byBJRlUKLSAvLwotIC8vIFN0cnVjdHVyZToKLSAvLyAtIEluc3RydWN0aW9uIHF1ZXVlCi0gLy8gLSBJbnRlZ2VyIEFyaXRobWV0aWMgTG9naWMgVW5pdCAoSUFMVSkKLSAvLyAtIEV4Y2VwdGlvbnMgbG9naWMKLSAvLyAtIFdGSSBsb2dpYwotIC8vIC0gUHJvZ3JhbSBDb3VudGVyIGxvZ2ljCi0gLy8gLSBMb2FkLVN0b3JlIFVuaXQgKExTVSkKLSAvLyAtIEVYVSBzdGF0dXMgbG9naWMKLSAvLyAtIEVYVSA8LT4gTVBSRiBpL2YKLSAvLyAtIEVYVSA8LT4gQ1NSIGkvZgotIC8vIC0gRVhVIDwtPiBURFUgaS9mCi0gLy8KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWBpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgotYGluY2x1ZGUgInNjcjFfYXJjaF90eXBlcy5zdmgiCi1gaW5jbHVkZSAic2NyMV9tZW1pZi5zdmgiCi1gaW5jbHVkZSAic2NyMV9yaXNjdl9pc2FfZGVjb2Rpbmcuc3ZoIgotYGluY2x1ZGUgInNjcjFfY3NyLnN2aCIKLQotYGlmZGVmIFNDUjFfREJHX0VOCi0gYGluY2x1ZGUgInNjcjFfaGR1LnN2aCIKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi1gaWZkZWYgU0NSMV9URFVfRU4KLSBgaW5jbHVkZSAic2NyMV90ZHUuc3ZoIgotYGVuZGlmIC8vIFNDUjFfVERVX0VOCi0KLW1vZHVsZSBzY3IxX3BpcGVfZXh1ICgKLSAgICAvLyBDb21tb24KLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLCAgICAgICAgICAgICAgICAgICAgICAvLyBFWFUgcmVzZXQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaywgICAgICAgICAgICAgICAgICAgICAgICAvLyBHYXRlZCBFWFUgY2xvY2sKLWBpZmRlZiBTQ1IxX0NMS0NUUkxfRU4KLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsa19hbHdfb24sICAgICAgICAgICAgICAgICAvLyBOb3QtZ2F0ZWQgRVhVIGNsb2NrCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGtfcGlwZV9lbiwgICAgICAgICAgICAgICAgLy8gRVhVIGNsb2NrIGVuYWJsZWQgZmxhZwotYGVuZGlmIC8vIFNDUjFfQ0xLQ1RSTF9FTgotCi0gICAgLy8gRVhVIDwtPiBJRFUgaW50ZXJmYWNlCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3JlcV9pLCAgICAgICAgICAgICAgLy8gUmVxdWVzdCBmb3JtIElEVSB0byBFWFUKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJpZHVfcmR5X28sICAgICAgICAgICAgICAvLyBFWFUgcmVhZHkgZm9yIG5ldyBkYXRhIGZyb20gSURVCi0gICAgaW5wdXQgICB0eXBlX3NjcjFfZXh1X2NtZF9zICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9pLCAgICAgICAgICAgICAgLy8gRVhVIGNvbW1hbmQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMV9pLCAgICAgICAgICAvLyBDbG9jayBnYXRpbmcgb24gcnMxX2FkZHIgZmllbGQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMl9pLCAgICAgICAgICAvLyBDbG9jayBnYXRpbmcgb24gcnMyX2FkZHIgZmllbGQKLWBpZm5kZWYgU0NSMV9OT19FWEVfU1RBR0UKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JkX2ksICAgICAgICAgICAvLyBDbG9jayBnYXRpbmcgb24gcmRfYWRkciBmaWVsZAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfaW1tX2ksICAgICAgICAgIC8vIENsb2NrIGdhdGluZyBvbiBpbW0gZmllbGQKLWBlbmRpZiAvLyBTQ1IxX05PX0VYRV9TVEFHRQotCi0gICAgLy8gRVhVIDwtPiBNUFJGIGludGVyZmFjZQotICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX01QUkZfQVdJRFRILTE6MF0gICAgICAgZXh1Mm1wcmZfcnMxX2FkZHJfbywgICAgICAgIC8vIE1QUkYgcnMxIHJlYWQgYWRkcmVzcwotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgbXByZjJleHVfcnMxX2RhdGFfaSwgICAgICAgIC8vIE1QUkYgcnMxIHJlYWQgZGF0YQotICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX01QUkZfQVdJRFRILTE6MF0gICAgICAgZXh1Mm1wcmZfcnMyX2FkZHJfbywgICAgICAgIC8vIE1QUkYgcnMyIHJlYWQgYWRkcmVzcwotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgbXByZjJleHVfcnMyX2RhdGFfaSwgICAgICAgIC8vIE1QUkYgcnMyIHJlYWQgZGF0YQotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1Mm1wcmZfd19yZXFfbywgICAgICAgICAgIC8vIE1QUkYgd3JpdGUgcmVxdWVzdAotICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX01QUkZfQVdJRFRILTE6MF0gICAgICAgZXh1Mm1wcmZfcmRfYWRkcl9vLCAgICAgICAgIC8vIE1QUkYgcmQgd3JpdGUgYWRkcmVzcwotICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgZXh1Mm1wcmZfcmRfZGF0YV9vLCAgICAgICAgIC8vIE1QUkYgcmQgd3JpdGUgZGF0YQotCi0gICAgLy8gRVhVIDwtPiBDU1IgcmVhZC93cml0ZSBpbnRlcmZhY2UKLSAgICBvdXRwdXQgIGxvZ2ljIFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gICAgIGV4dTJjc3JfcndfYWRkcl9vLCAgICAgICAgICAvLyBDU1IgcmVhZC93cml0ZSBhZGRyZXNzCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUyY3NyX3JfcmVxX28sICAgICAgICAgICAgLy8gQ1NSIHJlYWQgcmVxdWVzdAotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgY3NyMmV4dV9yX2RhdGFfaSwgICAgICAgICAgIC8vIENTUiByZWFkIGRhdGEKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJjc3Jfd19yZXFfbywgICAgICAgICAgICAvLyBDU1Igd3JpdGUgcmVxdWVzdAotICAgIG91dHB1dCAgdHlwZV9zY3IxX2Nzcl9jbWRfc2VsX2UgICAgICAgICAgICAgZXh1MmNzcl93X2NtZF9vLCAgICAgICAgICAgIC8vIENTUiB3cml0ZSBjb21tYW5kCi0gICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICBleHUyY3NyX3dfZGF0YV9vLCAgICAgICAgICAgLy8gQ1NSIHdyaXRlIGRhdGEKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJleHVfcndfZXhjX2ksICAgICAgICAgICAvLyBDU1IgcmVhZC93cml0ZSBhY2Nlc3MgZXhjZXB0aW9uCi0KLSAgICAvLyBFWFUgPC0+IENTUiBldmVudHMgaW50ZXJmYWNlCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUyY3NyX3Rha2VfaXJxX28sICAgICAgICAgLy8gVGFrZSBJUlEgdHJhcAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MmNzcl90YWtlX2V4Y19vLCAgICAgICAgIC8vIFRha2UgZXhjZXB0aW9uIHRyYXAKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJjc3JfbXJldF91cGRhdGVfbywgICAgICAvLyBNUkVUIHVwZGF0ZSBDU1IKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJjc3JfbXJldF9pbnN0cl9vLCAgICAgICAvLyBNUkVUIGluc3RydWN0aW9uCi0gICAgb3V0cHV0ICBsb2dpYyBbU0NSMV9FWENfQ09ERV9XSURUSF9FLTE6MF0gICBleHUyY3NyX2V4Y19jb2RlX28sICAgICAgICAgLy8gRXhjZXB0aW9uIGNvZGUgKHNlZSBzY3IxX2FyY2hfdHlwZXMuc3ZoKSAtIGNwLjcKLSAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgIGV4dTJjc3JfdHJhcF92YWxfbywgICAgICAgICAvLyBUcmFwIHZhbHVlCi0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICBjc3IyZXh1X25ld19wY19pLCAgICAgICAgICAgLy8gRXhjZXB0aW9uL0lSUS9NUkVUIG5ldyBQQwotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMmV4dV9pcnFfaSwgICAgICAgICAgICAgIC8vIElSUSByZXF1ZXN0Ci0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IyZXh1X2lwX2llX2ksICAgICAgICAgICAgLy8gU29tZSBJUlEgcGVuZGluZyBhbmQgbG9jYWxseSBlbmFibGVkCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IyZXh1X21zdGF0dXNfbWllX3VwX2ksICAgLy8gTVNUQVRVUyBvciBNSUUgdXBkYXRlIGluIHRoZSBjdXJyZW50IGN5Y2xlCi0KLSAgICAvLyBFWFUgPC0+IERNRU0gaW50ZXJmYWNlCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUyZG1lbV9yZXFfbywgICAgICAgICAgICAgLy8gRGF0YSBtZW1vcnkgcmVxdWVzdAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MmRtZW1fY21kX28sICAgICAgICAgICAgIC8vIERhdGEgbWVtb3J5IGNvbW1hbmQgLSBjcC43Ci0gICAgb3V0cHV0ICBsb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICBleHUyZG1lbV93aWR0aF9vLCAgICAgICAgICAgLy8gRGF0YSBtZW1vcnkgd2lkdGgKLSAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9ETUVNX0FXSURUSC0xOjBdICAgICAgIGV4dTJkbWVtX2FkZHJfbywgICAgICAgICAgICAvLyBEYXRhIG1lbW9yeSBhZGRyZXNzCi0gICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICBleHUyZG1lbV93ZGF0YV9vLCAgICAgICAgICAgLy8gRGF0YSBtZW1vcnkgd3JpdGUgZGF0YQotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1lbTJleHVfcmVxX2Fja19pLCAgICAgICAgIC8vIERhdGEgbWVtb3J5IHJlcXVlc3QgYWNrbm93bGVkZ2UKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgICAgIGRtZW0yZXh1X3JkYXRhX2ksICAgICAgICAgICAvLyBEYXRhIG1lbW9yeSByZWFkIGRhdGEKLSAgICBpbnB1dCAgIGxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW0yZXh1X3Jlc3BfaSwgICAgICAgICAgICAvLyBEYXRhIG1lbW9yeSByZXNwb25zZSAtIGNwLjcKLQotICAgIC8vIEVYVSBjb250cm9sCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUycGlwZV9leGNfcmVxX28sICAgICAgICAgLy8gRXhjZXB0aW9uIG9uIGxhc3QgaW5zdHJ1Y3Rpb24KLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJwaXBlX2Jya3B0X28sICAgICAgICAgICAvLyBTb2Z0d2FyZSBCcmVha3BvaW50IChFQlJFQUspCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUycGlwZV9pbml0X3BjX28sICAgICAgICAgLy8gUmVzZXQgZXhpdAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MnBpcGVfd2ZpX3J1bjJoYWx0X28sICAgIC8vIFRyYW5zaXRpb24gdG8gV0ZJIGhhbHRlZCBzdGF0ZQotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MnBpcGVfaW5zdHJldF9vLCAgICAgICAgIC8vIEluc3RydWN0aW9uIHJldGlyZWQgKHdpdGggb3Igd2l0aG91dCBleGNlcHRpb24pCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUyY3NyX2luc3RyZXRfbm9fZXhjX28sICAgLy8gSW5zdHJ1Y3Rpb24gcmV0aXJlZCAod2l0aG91dCBleGNlcHRpb24pCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUycGlwZV9leHVfYnVzeV9vLCAgICAgICAgLy8gRVhVIGJ1c3kKLQotYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgLy8gRVhVIDwtPiBIRFUgaW50ZXJmYWNlCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHUyZXh1X25vX2NvbW1pdF9pLCAgICAgICAgLy8gRm9yYmlkIGluc3RydWN0aW9uIGNvbW1pdG1lbnQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJleHVfaXJxX2RzYmxfaSwgICAgICAgICAvLyBEaXNhYmxlIElSUQotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1MmV4dV9wY19hZHZtdF9kc2JsX2ksICAgIC8vIEZvcmJpZCBQQyBhZHZhbmNlbWVudAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1MmV4dV9kbW9kZV9zc3RlcF9lbl9pLCAgIC8vIEVuYWJsZSBzaW5nbGUtc3RlcAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1MmV4dV9wYnVmX2ZldGNoX2ksICAgICAgIC8vIFRha2UgaW5zdHJ1Y3Rpb25zIGZyb20gUHJvZ3JhbSBCdWZmZXIKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJleHVfZGJnX2hhbHRlZF9pLCAgICAgICAvLyBEZWJ1ZyBoYWx0ZWQgc3RhdGUKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJleHVfZGJnX3J1bjJoYWx0X2ksICAgICAvLyBUcmFuc2l0aW9uIHRvIGRlYnVnIGhhbHRlZCBzdGF0ZQotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1MmV4dV9kYmdfaGFsdDJydW5faSwgICAgIC8vIFRyYW5zaXRpb24gdG8gcnVuIHN0YXRlCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHUyZXh1X2RiZ19ydW5fc3RhcnRfaSwgICAgLy8gRmlyc3QgY3ljbGUgb2YgcnVuIHN0YXRlCi0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICBoZHUyZXh1X2RiZ19uZXdfcGNfaSwgICAgICAgLy8gTmV3IFBDIGFzIHN0YXJ0aW5nIHBvaW50IGZvciBIQVJUIFJlc3VtZQotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KLWBpZmRlZiBTQ1IxX1REVV9FTgotICAgIC8vIEVYVSA8LT4gVERVIGludGVyZmFjZQotICAgIG91dHB1dCB0eXBlX3NjcjFfYnJrbV9pbnN0cl9tb25fcyAgICAgICAgICAgZXh1MnRkdV9pbW9uX28sICAgICAgICAgICAgIC8vIEluc3RydWN0aW9uIG1vbml0b3IKLSAgICBpbnB1dCAgbG9naWMgW1NDUjFfVERVX0FMTFRSSUdfTlVNLTE6MF0gICAgIHRkdTJleHVfaWJya3B0X21hdGNoX2ksICAgICAvLyBJbnN0cnVjdGlvbiBicmVha3BvaW50KHMpIG1hdGNoCi0gICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZHUyZXh1X2licmtwdF9leGNfcmVxX2ksICAgLy8gSW5zdHJ1Y3Rpb24gYnJlYWtwb2ludCBleGNlcHRpb24KLSAgICBvdXRwdXQgdHlwZV9zY3IxX2Jya21fbHN1X21vbl9zICAgICAgICAgICAgIGxzdTJ0ZHVfZG1vbl9vLCAgICAgICAgICAgICAvLyBEYXRhIG1vbml0b3IKLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkdTJsc3VfaWJya3B0X2V4Y19yZXFfaSwgICAvLyBJbnN0cnVjdGlvbiBicmVha3BvaW50IGV4Y2VwdGlvbgotICAgIGlucHV0ICBsb2dpYyBbU0NSMV9URFVfTVRSSUdfTlVNLTE6MF0gICAgICAgdGR1MmxzdV9kYnJrcHRfbWF0Y2hfaSwgICAgIC8vIERhdGEgYnJlYWtwb2ludChzKSBtYXRjaAotICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmxzdV9kYnJrcHRfZXhjX3JlcV9pLCAgIC8vIERhdGEgYnJlYWtwb2ludCBleGNlcHRpb24KLSAgICBvdXRwdXQgbG9naWMgW1NDUjFfVERVX0FMTFRSSUdfTlVNLTE6MF0gICAgIGV4dTJ0ZHVfaWJya3B0X3JldF9vLCAgICAgICAvLyBJbnN0cnVjdGlvbiB3aXRoIGJyZWFrcG9pbnQgZmxhZyByZXRpcmUKLSAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJoZHVfaWJya3B0X2h3X28sICAgICAgICAvLyBIYXJkd2FyZSBicmVha3BvaW50IG9uIGN1cnJlbnQgaW5zdHJ1Y3Rpb24KLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotCi0gICAgLy8gUEMgaW50ZXJmYWNlCi1gaWZkZWYgU0NSMV9DTEtDVFJMX0VOCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUycGlwZV93ZmlfaGFsdGVkX28sICAgICAgLy8gV0ZJIGhhbHRlZCBzdGF0ZQotYGVuZGlmIC8vIFNDUjFfQ0xLQ1RSTF9FTgotICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgZXh1MnBpcGVfcGNfY3Vycl9vLCAgICAgICAgIC8vIEN1cnJlbnQgUEMKLSAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgIGV4dTJjc3JfcGNfbmV4dF9vLCAgICAgICAgICAvLyBOZXh0IFBDCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUyaWZ1X3BjX25ld19yZXFfbywgICAgICAgLy8gTmV3IFBDIHJlcXVlc3QKLSAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgIGV4dTJpZnVfcGNfbmV3X28gICAgICAgICAgICAvLyBOZXcgUEMgZGF0YQotKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHBhcmFtZXRlcnMgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWxvY2FscGFyYW0gU0NSMV9KVU1QX01BU0sgPSBgU0NSMV9YTEVOJ2hGRkZGX0ZGRkU7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCB0eXBlcyBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy90eXBlZGVmIGVudW0gbG9naWMgewotcGFyYW1ldGVyICAgICBTQ1IxX0NTUl9JTklUID0gMSdiMDsKLXBhcmFtZXRlciAgICAgU0NSMV9DU1JfUkRZICA9IDEnYjE7Ci0vL30gc2NyMV9jc3JfYWNjZXNzX2U7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCBzaWduYWxzIGRlY2xhcmF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBJbnN0cnVjdGlvbiBxdWV1ZSBzaWduYWxzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1X3F1ZXVlX3ZkOwotdHlwZV9zY3IxX2V4dV9jbWRfcyAgICAgICAgICAgICAgICAgZXh1X3F1ZXVlOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1X3F1ZXVlX2JhcnJpZXI7Ci0KLWBpZmRlZiBTQ1IxX0RCR19FTgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJnX3J1bl9zdGFydF9ucGJ1ZjsKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1X3F1ZXVlX2VuOwotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgZXh1X2lsbGVnYWxfaW5zdHI7Ci0KLWBpZm5kZWYgU0NSMV9OT19FWEVfU1RBR0UKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMV9mZjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMl9mZjsKLQotLy8gRVhVIHF1ZXVlIHZhbGlkIGZsYWcgcmVnaXN0ZXIgc2lnbmFscwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1X3F1ZXVlX3ZkX3VwZDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dV9xdWV1ZV92ZF9mZjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dV9xdWV1ZV92ZF9uZXh0OwotYGVuZGlmIC8vIFNDUjFfTk9fRVhFX1NUQUdFCi0KLS8vIElBTFUgc2lnbmFscwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWBpZmRlZiBTQ1IxX1JWTV9FWFQKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlhbHVfcmR5OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWFsdV92ZDsKLWBlbmRpZiAvLyBTQ1IxX1JWTV9FWFQKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgIGlhbHVfbWFpbl9vcDE7Ci1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICBpYWx1X21haW5fb3AyOwotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgaWFsdV9tYWluX3JlczsKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgIGlhbHVfYWRkcl9vcDE7Ci1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICBpYWx1X2FkZHJfb3AyOwotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgaWFsdV9hZGRyX3JlczsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlhbHVfY21wOwotCi0vLyBFeGNlcHRpb25zIHNpZ25hbHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHVfZXhjX3JlcTsKLWBpZmRlZiBTQ1IxX0RCR19FTgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1X2V4Y19yZXFfZmY7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHVfZXhjX3JlcV9uZXh0OwotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi1sb2dpYyBbU0NSMV9FWENfQ09ERV9XSURUSF9FLTE6MF0gICBleGNfY29kZTsgLy8gY3AuNwotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgZXhjX3RyYXBfdmFsOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdHJfZmF1bHRfcnZpX2hpOwotCi0vLyBXRkkgc2lnbmFscwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFdGSSBjb250cm9sIHNpZ25hbHMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdmaV9oYWx0X2NvbmQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZmlfcnVuX3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdmaV9oYWx0X3JlcTsKLQotLy8gV0ZJIFJ1biBTdGFydCByZWdpc3RlcgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ZpX3J1bl9zdGFydF9mZjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdmaV9ydW5fc3RhcnRfbmV4dDsKLQotLy8gV0ZJIGhhbHRlZCByZWdpc3RlcgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ZpX2hhbHRlZF91cGQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZmlfaGFsdGVkX2ZmOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ZpX2hhbHRlZF9uZXh0OwotCi0vLyBQQyBzaWduYWxzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgaW5pdF9wY192OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdF9wYzsKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgIGluY19wYzsKLQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoX3Rha2VuOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamJfdGFrZW47Ci1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICBqYl9uZXdfcGM7Ci1gaWZuZGVmIFNDUjFfUlZDX0VYVAotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamJfbWlzYWxpZ247Ci1gZW5kaWYKLQotLy8gQ3VycmVudCBQQyByZWdpc3RlcgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNfY3Vycl91cGQ7Ci1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICBwY19jdXJyX2ZmOwotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgcGNfY3Vycl9uZXh0OwotCi0vLyBMU1Ugc2lnbmFscwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzdV9yZXE7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsc3VfcmR5OwotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgbHN1X2xfZGF0YTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzdV9leGNfcmVxOwotbG9naWMgW1NDUjFfRVhDX0NPREVfV0lEVEhfRS0xOjBdICAgbHN1X2V4Y19jb2RlOyAvLyBjcC43Ci0KLS8vIEVYVSBzdGF0dXMgc2lnbmFscwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dV9yZHk7Ci0KLS8vIE1QUkYgc2lnbmFscwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wcmZfcnMxX3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wcmZfcnMyX3JlcTsKLQotbG9naWMgICBbYFNDUjFfTVBSRl9BV0lEVEgtMTowXSAgICAgbXByZl9yczFfYWRkcjsKLWxvZ2ljICAgW2BTQ1IxX01QUkZfQVdJRFRILTE6MF0gICAgIG1wcmZfcnMyX2FkZHI7Ci0KLS8vIENTUiBzaWduYWxzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQ1NSIGFjY2VzcyByZWdpc3RlcgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2FjY2Vzc19mZjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9hY2Nlc3NfbmV4dDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9hY2Nlc3NfaW5pdDsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEluc3RydWN0aW9uIGV4ZWN1dGlvbiBxdWV1ZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0gLy8gSW5zdHJ1Y3Rpb24gZXhlY3V0aW9uIHF1ZXVlIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25hbCB1bml0czoKLSAvLyAtIEVYVSBxdWV1ZSBjb250cm9sIGxvZ2ljCi0gLy8gLSBFWFUgcXVldWUgdmFsaWQgZmxhZyByZWdpc3RlcgotIC8vIC0gRVhVIHF1ZXVlIHJlZ2lzdGVyCi0gLy8gLSBFWFUgcXVldWUgc3RhdHVzIGxvZ2ljCi0vLwotCi1gaWZkZWYgU0NSMV9EQkdfRU4KLWFzc2lnbiBkYmdfcnVuX3N0YXJ0X25wYnVmID0gaGR1MmV4dV9kYmdfcnVuX3N0YXJ0X2kgJiB+aGR1MmV4dV9wYnVmX2ZldGNoX2k7Ci1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotYGlmbmRlZiBTQ1IxX05PX0VYRV9TVEFHRQotCi0vLyBFWFUgcXVldWUgY29udHJvbCBsb2dpYwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIGV4dV9xdWV1ZV9iYXJyaWVyID0gd2ZpX2hhbHRlZF9mZiB8IHdmaV9oYWx0X3JlcSB8IHdmaV9ydW5fc3RhcnRfZmYKLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgICAgICAgICAgICAgICAgICAgICAgIHwgaGR1MmV4dV9kYmdfaGFsdGVkX2kgIHwgaGR1MmV4dV9kYmdfcnVuMmhhbHRfaQotICAgICAgICAgICAgICAgICAgICAgICAgIHwgZGJnX3J1bl9zdGFydF9ucGJ1ZgotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi07Ci0KLWFzc2lnbiBleHVfcXVldWVfZW4gPSBleHUyaWR1X3JkeV9vICYgaWR1MmV4dV9yZXFfaTsKLQotLy8gRVhVIHF1ZXVlIHZhbGlkIGZsYWcgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBleHVfcXVldWVfdmRfdXBkID0gZXh1X3F1ZXVlX2JhcnJpZXIgfCBleHVfcmR5OwotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICBleHVfcXVldWVfdmRfZmYgPD0gMSdiMDsKLSAgICBlbmQgZWxzZSBpZiAoZXh1X3F1ZXVlX3ZkX3VwZCkgYmVnaW4KLSAgICAgICAgZXh1X3F1ZXVlX3ZkX2ZmIDw9IGV4dV9xdWV1ZV92ZF9uZXh0OwotICAgIGVuZAotZW5kCi0KLWFzc2lnbiBleHVfcXVldWVfdmRfbmV4dCA9IH5leHVfcXVldWVfYmFycmllciAmIGlkdTJleHVfcmVxX2kgJiB+ZXh1MmlmdV9wY19uZXdfcmVxX287Ci1hc3NpZ24gZXh1X3F1ZXVlX3ZkICAgICAgPSBleHVfcXVldWVfdmRfZmY7Ci0KLS8vIEVYVSBxdWV1ZSByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKGV4dV9xdWV1ZV9lbikgYmVnaW4KLSAgICAgICAgZXh1X3F1ZXVlLmluc3RyX3J2YyAgICAgIDw9IGlkdTJleHVfY21kX2kuaW5zdHJfcnZjOwotICAgICAgICBleHVfcXVldWUuaWFsdV9vcCAgICAgICAgPD0gaWR1MmV4dV9jbWRfaS5pYWx1X29wOwotICAgICAgICBleHVfcXVldWUuaWFsdV9jbWQgICAgICAgPD0gaWR1MmV4dV9jbWRfaS5pYWx1X2NtZDsKLSAgICAgICAgZXh1X3F1ZXVlLnN1bTJfb3AgICAgICAgIDw9IGlkdTJleHVfY21kX2kuc3VtMl9vcDsKLSAgICAgICAgZXh1X3F1ZXVlLmxzdV9jbWQgICAgICAgIDw9IGlkdTJleHVfY21kX2kubHN1X2NtZDsKLSAgICAgICAgZXh1X3F1ZXVlLmNzcl9vcCAgICAgICAgIDw9IGlkdTJleHVfY21kX2kuY3NyX29wOwotICAgICAgICBleHVfcXVldWUuY3NyX2NtZCAgICAgICAgPD0gaWR1MmV4dV9jbWRfaS5jc3JfY21kOwotICAgICAgICBleHVfcXVldWUucmRfd2Jfc2VsICAgICAgPD0gaWR1MmV4dV9jbWRfaS5yZF93Yl9zZWw7Ci0gICAgICAgIGV4dV9xdWV1ZS5qdW1wX3JlcSAgICAgICA8PSBpZHUyZXh1X2NtZF9pLmp1bXBfcmVxOwotICAgICAgICBleHVfcXVldWUuYnJhbmNoX3JlcSAgICAgPD0gaWR1MmV4dV9jbWRfaS5icmFuY2hfcmVxOwotICAgICAgICBleHVfcXVldWUubXJldF9yZXEgICAgICAgPD0gaWR1MmV4dV9jbWRfaS5tcmV0X3JlcTsKLSAgICAgICAgZXh1X3F1ZXVlLmZlbmNlaV9yZXEgICAgIDw9IGlkdTJleHVfY21kX2kuZmVuY2VpX3JlcTsKLSAgICAgICAgZXh1X3F1ZXVlLndmaV9yZXEgICAgICAgIDw9IGlkdTJleHVfY21kX2kud2ZpX3JlcTsKLSAgICAgICAgZXh1X3F1ZXVlLmV4Y19yZXEgICAgICAgIDw9IGlkdTJleHVfY21kX2kuZXhjX3JlcTsKLSAgICAgICAgZXh1X3F1ZXVlLmV4Y19jb2RlICAgICAgIDw9IGlkdTJleHVfY21kX2kuZXhjX2NvZGU7Ci0gICAgICAgIGlkdTJleHVfdXNlX3JzMV9mZiAgICAgICA8PSBpZHUyZXh1X3VzZV9yczFfaTsKLSAgICAgICAgaWR1MmV4dV91c2VfcnMyX2ZmICAgICAgIDw9IGlkdTJleHVfdXNlX3JzMl9pOwotICAgICAgICBpZiAoaWR1MmV4dV91c2VfcnMxX2kpIGJlZ2luCi0gICAgICAgICAgICBleHVfcXVldWUucnMxX2FkZHIgICA8PSBpZHUyZXh1X2NtZF9pLnJzMV9hZGRyOwotICAgICAgICBlbmQKLSAgICAgICAgaWYgKGlkdTJleHVfdXNlX3JzMl9pKSBiZWdpbgotICAgICAgICAgICAgZXh1X3F1ZXVlLnJzMl9hZGRyICAgPD0gaWR1MmV4dV9jbWRfaS5yczJfYWRkcjsKLSAgICAgICAgZW5kCi0gICAgICAgIGlmIChpZHUyZXh1X3VzZV9yZF9pKSAgYmVnaW4KLSAgICAgICAgICAgIGV4dV9xdWV1ZS5yZF9hZGRyICAgIDw9IGlkdTJleHVfY21kX2kucmRfYWRkcjsKLSAgICAgICAgZW5kCi0gICAgICAgIGlmIChpZHUyZXh1X3VzZV9pbW1faSkgYmVnaW4KLSAgICAgICAgICAgIGV4dV9xdWV1ZS5pbW0gICAgICAgIDw9IGlkdTJleHVfY21kX2kuaW1tOwotICAgICAgICBlbmQKLSAgICBlbmQKLWVuZAotCi1gZWxzZSAvLyB+U0NSMV9OT19FWEVfU1RBR0UKLQotYXNzaWduIGV4dV9xdWV1ZV9iYXJyaWVyID0gd2ZpX2hhbHRlZF9mZiB8IHdmaV9ydW5fc3RhcnRfZmYKLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgICAgICAgICAgICAgICAgICAgICAgIHwgaGR1MmV4dV9kYmdfaGFsdGVkX2kgIHwgZGJnX3J1bl9zdGFydF9ucGJ1ZgotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi07Ci1hc3NpZ24gZXh1X3F1ZXVlX3ZkICA9IGlkdTJleHVfcmVxX2kgJiB+ZXh1X3F1ZXVlX2JhcnJpZXI7Ci1hc3NpZ24gZXh1X3F1ZXVlICAgICA9IGlkdTJleHVfY21kX2k7Ci0KLWBlbmRpZiAvLyB+U0NSMV9OT19FWEVfU1RBR0UKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEludGVnZXIgQXJpdGhtZXRpYyBMb2dpYyBVbml0IChJQUxVKQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAvLwotIC8vIEZ1bmN0aW9uYWxpdHk6Ci0gLy8gLSBQZXJmb3JtcyBhZGRpdGlvbi9zdWJ0cmFjdGlvbiBhbmQgYXJpdGhtZXRpYyBhbmQgYnJhbmNoIGNvbXBhcmlzb25zCi0gLy8gLSBQZXJmb3JtcyBsb2dpY2FsIG9wZXJhdGlvbnMgKEFORChJKSwgT1IoSSksIFhPUihJKSkKLSAvLyAtIFBlcmZvcm1zIGFkZHJlc3MgY2FsY3VsYXRpb24gZm9yIGJyYW5jaCwganVtcCwgRE1FTSBsb2FkIGFuZCBzdG9yZSBhbmQgQVVJUEMKLSAvLyAgIGluc3RydWN0aW9ucwotIC8vIC0gUGVyZm9ybXMgc2hpZnQgb3BlcmF0aW9ucwotIC8vIC0gUGVyZm9ybXMgTVVML0RJViBvcGVyYXRpb25zCi0gLy8KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIElBTFUgbWFpbiBvcGVyYW5kcyBmZXRjaAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYGlmZGVmIFNDUjFfUlZNX0VYVAotYXNzaWduIGlhbHVfdmQgID0gZXh1X3F1ZXVlX3ZkICYgKGV4dV9xdWV1ZS5pYWx1X2NtZCAhPSBTQ1IxX0lBTFVfQ01EX05PTkUpCi1gaWZkZWYgU0NSMV9URFVfRU4KLSAgICAgICAgICAgICAgICAmIH50ZHUyZXh1X2licmtwdF9leGNfcmVxX2kKLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotICAgICAgICAgICAgICAgIDsKLWBlbmRpZiAvLyBTQ1IxX1JWTV9FWFQKLQotYWx3YXlzX2NvbWIgYmVnaW4KLWBpZmRlZiBTQ1IxX1JWTV9FWFQKLSAgICBpZiAofmlhbHVfdmQpIGJlZ2luCi0gICAgICAgIGlhbHVfbWFpbl9vcDEgPSAnMDsKLSAgICAgICAgaWFsdV9tYWluX29wMiA9ICcwOwotICAgIGVuZCBlbHNlIGJlZ2luCi1gZW5kaWYgLy8gU0NSMV9SVk1fRVhUCi0gICAgICAgIGlmIChleHVfcXVldWUuaWFsdV9vcCA9PSBTQ1IxX0lBTFVfT1BfUkVHX1JFRykgYmVnaW4KLSAgICAgICAgICAgIGlhbHVfbWFpbl9vcDEgPSBtcHJmMmV4dV9yczFfZGF0YV9pOwotICAgICAgICAgICAgaWFsdV9tYWluX29wMiA9IG1wcmYyZXh1X3JzMl9kYXRhX2k7Ci0gICAgICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgICAgICBpYWx1X21haW5fb3AxID0gbXByZjJleHVfcnMxX2RhdGFfaTsKLSAgICAgICAgICAgIGlhbHVfbWFpbl9vcDIgPSBleHVfcXVldWUuaW1tOwotICAgICAgICBlbmQKLWBpZmRlZiBTQ1IxX1JWTV9FWFQKLSAgICBlbmQKLWBlbmRpZiAvLyBTQ1IxX1JWTV9FWFQKLWVuZAotCi0vLyBJQUxVIGFkZHJlc3Mgb3BlcmFuZHMgZmV0Y2gKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgaWYgKGV4dV9xdWV1ZS5zdW0yX29wID09IFNDUjFfU1VNMl9PUF9SRUdfSU1NKSBiZWdpbgotICAgICAgICBpYWx1X2FkZHJfb3AxID0gbXByZjJleHVfcnMxX2RhdGFfaTsKLSAgICAgICAgaWFsdV9hZGRyX29wMiA9IGV4dV9xdWV1ZS5pbW07Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgaWFsdV9hZGRyX29wMSA9IHBjX2N1cnJfZmY7Ci0gICAgICAgIGlhbHVfYWRkcl9vcDIgPSBleHVfcXVldWUuaW1tOwotICAgIGVuZAotZW5kCi0KLS8vIElBTFUgbW9kdWxlIGluc3RhbnRpYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXNjcjFfcGlwZV9pYWx1IGlfaWFsdSgKLWBpZmRlZiBTQ1IxX1JWTV9FWFQKLSAgICAvLyBDb21tb24KLSAgICAuY2xrICAgICAgICAgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICksCi0gICAgLnJzdF9uICAgICAgICAgICAgICAgICAgICAgIChyc3RfbiAgICAgICAgICAgICApLAotICAgIC5leHUyaWFsdV9ydm1fY21kX3ZkX2kgICAgICAoaWFsdV92ZCAgICAgICAgICAgKSwKLSAgICAuaWFsdTJleHVfcnZtX3Jlc19yZHlfbyAgICAgKGlhbHVfcmR5ICAgICAgICAgICksCi1gZW5kaWYgLy8gU0NSMV9SVk1fRVhUCi0KLSAgICAvLyBJQUxVCi0gICAgLmV4dTJpYWx1X21haW5fb3AxX2kgICAgICAgIChpYWx1X21haW5fb3AxICAgICApLAotICAgIC5leHUyaWFsdV9tYWluX29wMl9pICAgICAgICAoaWFsdV9tYWluX29wMiAgICAgKSwKLSAgICAuZXh1MmlhbHVfY21kX2kgICAgICAgICAgICAgKGV4dV9xdWV1ZS5pYWx1X2NtZCksCi0gICAgLmlhbHUyZXh1X21haW5fcmVzX28gICAgICAgIChpYWx1X21haW5fcmVzICAgICApLAotICAgIC5pYWx1MmV4dV9jbXBfcmVzX28gICAgICAgICAoaWFsdV9jbXAgICAgICAgICAgKSwKLQotICAgIC8vIEFkZHJlc3MgYWRkZXIgc2lnbmFscwotICAgIC5leHUyaWFsdV9hZGRyX29wMV9pICAgICAgICAoaWFsdV9hZGRyX29wMSAgICAgKSwKLSAgICAuZXh1MmlhbHVfYWRkcl9vcDJfaSAgICAgICAgKGlhbHVfYWRkcl9vcDIgICAgICksCi0gICAgLmlhbHUyZXh1X2FkZHJfcmVzX28gICAgICAgIChpYWx1X2FkZHJfcmVzICAgICApCi0pOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRXhjZXB0aW9ucyBsb2dpYwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0gLy8gRXhjZXB0aW9ucyBsb2dpYyBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uYWwgdW5pdHM6Ci0gLy8gLSBFeGNlcHRpb24gcmVxdWVzdCBsb2dpYwotIC8vIC0gRXhjZXB0aW9uIGNvZGUgZW5jb2RlcgotIC8vIC0gRXhjZXB0aW9uIHRyYXAgdmFsdWUgbXVsdGlwbGV4ZXIKLSAvLwotLy8KLQotYGlmbmRlZiBTQ1IxX1JWQ19FWFQKLWFzc2lnbiBqYl9taXNhbGlnbiAgPSBleHVfcXVldWVfdmQgICYgamJfdGFrZW4gJiB8amJfbmV3X3BjWzE6MF07Ci1gZW5kaWYgLy8gflNDUjFfUlZDX0VYVAotCi0vLyBFeGNlcHRpb24gcmVxdWVzdAotYXNzaWduIGV4dV9leGNfcmVxICA9IGV4dV9xdWV1ZV92ZCAmIChleHVfcXVldWUuZXhjX3JlcSB8IGxzdV9leGNfcmVxCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY3NyMmV4dV9yd19leGNfaQotYGlmbmRlZiBTQ1IxX1JWQ19FWFQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBqYl9taXNhbGlnbgotYGVuZGlmIC8vIH5TQ1IxX1JWQ19FWFQKLWBpZmRlZiBTQ1IxX1REVV9FTgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGV4dTJoZHVfaWJya3B0X2h3X28KLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotCi0vLyBFWFUgZXhjZXB0aW9uIHJlcXVlc3QgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWBpZmRlZiBTQ1IxX0RCR19FTgotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICBleHVfZXhjX3JlcV9mZiA8PSAxJ2IwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGV4dV9leGNfcmVxX2ZmIDw9IGV4dV9leGNfcmVxX25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIGV4dV9leGNfcmVxX25leHQgPSBoZHUyZXh1X2RiZ19oYWx0MnJ1bl9pID8gMSdiMCA6IGV4dV9leGNfcmVxOwotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KLS8vIEV4Y2VwdGlvbiBjb2RlIGVuY29kZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgY2FzZSAoMSdiMSkKLWBpZmRlZiBTQ1IxX1REVV9FTgotICAgICAgICBleHUyaGR1X2licmtwdF9od19vOiBleGNfY29kZSA9IFNDUjFfRVhDX0NPREVfQlJFQUtQT0lOVDsKLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotICAgICAgICBleHVfcXVldWUuZXhjX3JlcSAgOiBleGNfY29kZSA9IGV4dV9xdWV1ZS5leGNfY29kZTsKLSAgICAgICAgbHN1X2V4Y19yZXEgICAgICAgIDogZXhjX2NvZGUgPSBsc3VfZXhjX2NvZGU7Ci0gICAgICAgIGNzcjJleHVfcndfZXhjX2kgICA6IGV4Y19jb2RlID0gU0NSMV9FWENfQ09ERV9JTExFR0FMX0lOU1RSOwotYGlmbmRlZiBTQ1IxX1JWQ19FWFQKLSAgICAgICAgamJfbWlzYWxpZ24gICAgICAgIDogZXhjX2NvZGUgPSBTQ1IxX0VYQ19DT0RFX0lOU1RSX01JU0FMSUdOOwotYGVuZGlmIC8vIH5TQ1IxX1JWQ19FWFQKLSAgICAgICAgZGVmYXVsdCAgICAgICAgICAgIDogZXhjX2NvZGUgPSBTQ1IxX0VYQ19DT0RFX0VDQUxMX007Ci0gICAgZW5kY2FzZSAvLyAxJ2IxCi1lbmQKLQotLy8gRXhjZXB0aW9uIHRyYXAgdmFsdWUgbXVsdGlwbGV4ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBpbnN0cl9mYXVsdF9ydmlfaGkgPSBleHVfcXVldWUuaW5zdHJfcnZjOwotYXNzaWduIGV4dV9pbGxlZ2FsX2luc3RyID0ge2V4dTJjc3JfcndfYWRkcl9vLCAgICAgICAgICAvLyBDU1IgYWRkcmVzcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUnKGV4dV9xdWV1ZS5yczFfYWRkciksICAgICAvLyByczEgLyB6aW1tCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1X3F1ZXVlLmltbVsxNDoxMl0sICAgICAgIC8vIGZ1bmN0MwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUnKGV4dV9xdWV1ZS5yZF9hZGRyKSwgICAgICAvLyByZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfT1BDT0RFX1NZU1RFTSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0lOU1RSX1JWSQotICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKLQotLy8gSWYgSW5zdHJ1Y3Rpb24gQWNjZXNzIEZhdWx0IG9jY3VycmVkIG9uIGhpZ2ggcGFydCBvZiBSVkkgaW5zdHJ1Y3Rpb24gdHJhcAotLy8gdmFsdWUgaXMgc2V0IHRvIHBvaW50IG9uIHRoZSBoaWdoIHBhcnQgb2YgdGhlIGluc3RydWN0aW9uIChpbmNfcGM9cGMrMikKLWFsd2F5c19jb21iIGJlZ2luCi0gICAgY2FzZSAoZXhjX2NvZGUpCi1gaWZuZGVmIFNDUjFfUlZDX0VYVAotICAgICAgICBTQ1IxX0VYQ19DT0RFX0lOU1RSX01JU0FMSUdOICAgIDogZXhjX3RyYXBfdmFsID0gamJfbmV3X3BjOwotYGVuZGlmIC8vIFNDUjFfUlZDX0VYVAotICAgICAgICBTQ1IxX0VYQ19DT0RFX0lOU1RSX0FDQ0VTU19GQVVMVDogZXhjX3RyYXBfdmFsID0gaW5zdHJfZmF1bHRfcnZpX2hpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpbmNfcGMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHBjX2N1cnJfZmY7Ci1gaWZkZWYgU0NSMV9NVFZBTF9JTExFR0FMX0lOU1RSX0VOCi0gICAgICAgIFNDUjFfRVhDX0NPREVfSUxMRUdBTF9JTlNUUiAgICAgOiBleGNfdHJhcF92YWwgPSBleHVfcXVldWUuZXhjX3JlcQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZXh1X3F1ZXVlLmltbQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZXh1X2lsbGVnYWxfaW5zdHI7Ci1gZWxzZSAvLyBTQ1IxX01UVkFMX0lMTEVHQUxfSU5TVFJfRU4KLSAgICAgICAgU0NSMV9FWENfQ09ERV9JTExFR0FMX0lOU1RSICAgICA6IGV4Y190cmFwX3ZhbCA9ICcwOwotYGVuZGlmIC8vIFNDUjFfTVRWQUxfSUxMRUdBTF9JTlNUUl9FTgotYGlmZGVmIFNDUjFfVERVX0VOCi0gICAgICAgIFNDUjFfRVhDX0NPREVfQlJFQUtQT0lOVDogYmVnaW4KLSAgICAgICAgICAgIGNhc2UgKDEnYjEpCi0gICAgICAgICAgICAgICAgdGR1MmV4dV9pYnJrcHRfZXhjX3JlcV9pOiBleGNfdHJhcF92YWwgPSBwY19jdXJyX2ZmOwotICAgICAgICAgICAgICAgIHRkdTJsc3VfZGJya3B0X2V4Y19yZXFfaTogZXhjX3RyYXBfdmFsID0gaWFsdV9hZGRyX3JlczsKLSAgICAgICAgICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgICAgICA6IGV4Y190cmFwX3ZhbCA9ICcwOwotICAgICAgICAgICAgZW5kY2FzZQotICAgICAgICBlbmQKLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotICAgICAgICBTQ1IxX0VYQ19DT0RFX0xEX0FERFJfTUlTQUxJR04sCi0gICAgICAgIFNDUjFfRVhDX0NPREVfTERfQUNDRVNTX0ZBVUxULAotICAgICAgICBTQ1IxX0VYQ19DT0RFX1NUX0FERFJfTUlTQUxJR04sCi0gICAgICAgIFNDUjFfRVhDX0NPREVfU1RfQUNDRVNTX0ZBVUxUICAgOiBleGNfdHJhcF92YWwgPSBpYWx1X2FkZHJfcmVzOwotICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgICAgICAgICAgICAgIDogZXhjX3RyYXBfdmFsID0gJzA7Ci0gICAgZW5kY2FzZSAvLyBleGNfY29kZQotZW5kCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBXRkkgbG9naWMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotIC8vIFdhaXQgZm9yIGludGVycnVwdCAoV0ZJKSBsb2dpYyBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uYWwgdW5pdHM6Ci0gLy8gLSBXRkkgY29udHJvbCBsb2dpYwotIC8vIC0gV0ZJIFJ1biBTdGFydCByZWdpc3RlcgotIC8vIC0gV0ZJIEhhbHRlZCBmbGFnIHJlZ2lzdGVyCi0gLy8gLSBXRkkgc3RhdHVzIHNpZ25hbHMKLS8vCi0KLS8vIFdGSSBjb250cm9sIGxvZ2ljCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gd2ZpX2hhbHRfY29uZCA9IH5jc3IyZXh1X2lwX2llX2kKLSAgICAgICAgICAgICAgICAgICAgICYgKChleHVfcXVldWVfdmQgJiBleHVfcXVldWUud2ZpX3JlcSkgfCB3ZmlfcnVuX3N0YXJ0X2ZmKQotYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgICAgICAgICAgICAgICAgICAmIH5oZHUyZXh1X25vX2NvbW1pdF9pICYgfmhkdTJleHVfZG1vZGVfc3N0ZXBfZW5faSAmIH5oZHUyZXh1X2RiZ19ydW4yaGFsdF9pCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLSAgICAgICAgICAgICAgICAgICAgIDsKLWFzc2lnbiB3ZmlfaGFsdF9yZXEgID0gfndmaV9oYWx0ZWRfZmYgJiB3ZmlfaGFsdF9jb25kOwotCi0vLyBIQVJUIHdpbGwgZXhpdCBXRkkgaGFsdGVkIHN0YXRlIGlmIHRoZSBldmVudCB0aGF0IGNhdXNlcyB0aGUgSEFSVCB0byByZXN1bWUKLS8vIGV4ZWN1dGlvbiBvY2N1cnMgZXZlbiBpZiBpdCBkb2Vzbid0IGNhdXNlIGFuIGludGVycnVwdCB0byBiZSB0YWtlbgotYXNzaWduIHdmaV9ydW5fcmVxICAgPSB3ZmlfaGFsdGVkX2ZmICAmIChjc3IyZXh1X2lwX2llX2kKLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhkdTJleHVfZGJnX2hhbHQycnVuX2kKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotCi0vLyBXRkkgUnVuIFN0YXJ0IHJlZ2lzdGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1gaWZuZGVmIFNDUjFfQ0xLQ1RSTF9FTgotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi1gZWxzZSAvLyBTQ1IxX0NMS0NUUkxfRU4KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrX2Fsd19vbikgYmVnaW4KLWBlbmRpZiAvLyBTQ1IxX0NMS0NUUkxfRU4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICB3ZmlfcnVuX3N0YXJ0X2ZmIDw9IDEnYjA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgd2ZpX3J1bl9zdGFydF9mZiA8PSB3ZmlfcnVuX3N0YXJ0X25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIHdmaV9ydW5fc3RhcnRfbmV4dCA9IHdmaV9oYWx0ZWRfZmYgJiBjc3IyZXh1X2lwX2llX2kgJiB+ZXh1MmNzcl90YWtlX2lycV9vOwotCi0vLyBXRkkgaGFsdGVkIGZsYWcgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiB3ZmlfaGFsdGVkX3VwZCA9IHdmaV9oYWx0X3JlcSB8IHdmaV9ydW5fcmVxOwotCi1gaWZuZGVmIFNDUjFfQ0xLQ1RSTF9FTgotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi1gZWxzZSAvLyBTQ1IxX0NMS0NUUkxfRU4KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrX2Fsd19vbikgYmVnaW4KLWBlbmRpZiAvLyBTQ1IxX0NMS0NUUkxfRU4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICB3ZmlfaGFsdGVkX2ZmIDw9IDEnYjA7Ci0gICAgZW5kIGVsc2UgaWYgKHdmaV9oYWx0ZWRfdXBkKSBiZWdpbgotICAgICAgICB3ZmlfaGFsdGVkX2ZmIDw9IHdmaV9oYWx0ZWRfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gd2ZpX2hhbHRlZF9uZXh0ID0gd2ZpX2hhbHRfcmVxIHwgfndmaV9ydW5fcmVxOwotCi0vLyBXRkkgc3RhdHVzIHNpZ25hbHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBleHUycGlwZV93ZmlfcnVuMmhhbHRfbyA9IHdmaV9oYWx0X3JlcTsKLWBpZmRlZiBTQ1IxX0NMS0NUUkxfRU4KLWFzc2lnbiBleHUycGlwZV93ZmlfaGFsdGVkX28gICA9IHdmaV9oYWx0ZWRfZmY7Ci1gZW5kaWYgLy8gU0NSMV9DTEtDVFJMX0VOCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBQcm9ncmFtIENvdW50ZXIgbG9naWMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotIC8vIFBDIGxvZ2ljIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25hbCB1bml0czoKLSAvLyAtIFBDIGluaXRpYWxpemF0aW9uIGxvZ2ljCi0gLy8gLSBDdXJyZW50IFBDIHJlZ2lzdGVyCi0gLy8gLSBOZXcgUEMgbXVsdGlwbGV4ZXIKLQotLy8gUEMgaW5pdGlhbGl6YXRpb24gbG9naWMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBHZW5lcmF0ZXMgYSBOZXcgUEMgcmVxdWVzdCB0byBzZXQgUEMgdG8gcmVzZXQgdmFsdWUKLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24pIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgaW5pdF9wY192IDw9ICcwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGlmICh+JmluaXRfcGNfdikgYmVnaW4KLSAgICAgICAgICAgIGluaXRfcGNfdiA8PSB7aW5pdF9wY192WzI6MF0sIDEnYjF9OwotICAgICAgICBlbmQKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gaW5pdF9wYyA9IH5pbml0X3BjX3ZbM10gJiBpbml0X3BjX3ZbMl07Ci0KLS8vIEN1cnJlbnQgUEMgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBwY19jdXJyX3VwZCA9ICgoZXh1MnBpcGVfaW5zdHJldF9vIHwgZXh1MmNzcl90YWtlX2lycV9vCi1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICAgICAgICAgICAgICAgICB8IGRiZ19ydW5fc3RhcnRfbnBidWYpICYgKCB+aGR1MmV4dV9wY19hZHZtdF9kc2JsX2kKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiB+aGR1MmV4dV9ub19jb21taXRfaQotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0gICAgICAgICAgICAgICAgICAgKSk7Ci0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIHBjX2N1cnJfZmYgPD0gU0NSMV9SU1RfVkVDVE9SOwotICAgIGVuZCBlbHNlIGlmIChwY19jdXJyX3VwZCkgYmVnaW4KLSAgICAgICAgcGNfY3Vycl9mZiA8PSBwY19jdXJyX25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYGlmZGVmIFNDUjFfUlZDX0VYVAotYXNzaWduIGluY19wYyA9IHBjX2N1cnJfZmYgKyAoZXh1X3F1ZXVlLmluc3RyX3J2YyA/IGBTQ1IxX1hMRU4nZDIgOiBgU0NSMV9YTEVOJ2Q0KTsKLWBlbHNlIC8vIH5TQ1IxX1JWQ19FWFQKLWFzc2lnbiBpbmNfcGMgPSBwY19jdXJyX2ZmICsgYFNDUjFfWExFTidkNDsKLWBlbmRpZiAvLyB+U0NSMV9SVkNfRVhUCi0KLWFzc2lnbiBwY19jdXJyX25leHQgPSBleHUyaWZ1X3BjX25ld19yZXFfbyAgICAgICAgPyBleHUyaWZ1X3BjX25ld19vCi0gICAgICAgICAgICAgICAgICAgIDogKGluY19wY1s2XSBeIHBjX2N1cnJfZmZbNl0pID8gaW5jX3BjCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoge3BjX2N1cnJfZmZbYFNDUjFfWExFTi0xOjZdLCBpbmNfcGNbNTowXX07Ci0KLS8vIE5ldyBQQyBtdWx0aXBsZXhlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBjYXNlICgxJ2IxKQotICAgICAgICBpbml0X3BjICAgICAgICAgICAgIDogZXh1MmlmdV9wY19uZXdfbyA9IFNDUjFfUlNUX1ZFQ1RPUjsKLSAgICAgICAgZXh1MmNzcl90YWtlX2V4Y19vLAotICAgICAgICBleHUyY3NyX3Rha2VfaXJxX28sCi0gICAgICAgIGV4dTJjc3JfbXJldF9pbnN0cl9vOiBleHUyaWZ1X3BjX25ld19vID0gY3NyMmV4dV9uZXdfcGNfaTsKLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgICAgICBkYmdfcnVuX3N0YXJ0X25wYnVmIDogZXh1MmlmdV9wY19uZXdfbyA9IGhkdTJleHVfZGJnX25ld19wY19pOwotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0gICAgICAgIHdmaV9ydW5fc3RhcnRfZmYgICAgOiBleHUyaWZ1X3BjX25ld19vID0gcGNfY3Vycl9mZjsKLSAgICAgICAgZXh1X3F1ZXVlLmZlbmNlaV9yZXE6IGV4dTJpZnVfcGNfbmV3X28gPSBpbmNfcGM7Ci0gICAgICAgIGRlZmF1bHQgICAgICAgICAgICAgOiBleHUyaWZ1X3BjX25ld19vID0gaWFsdV9hZGRyX3JlcyAmIFNDUjFfSlVNUF9NQVNLOwotICAgIGVuZGNhc2UKLWVuZAotCi1hc3NpZ24gZXh1MmlmdV9wY19uZXdfcmVxX28gPSBpbml0X3BjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlc2V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBleHUyY3NyX3Rha2VfaXJxX28KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGV4dTJjc3JfdGFrZV9leGNfbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKGV4dTJjc3JfbXJldF9pbnN0cl9vICYgfmNzcjJleHVfbXN0YXR1c19taWVfdXBfaSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChleHVfcXVldWVfdmQgJiBleHVfcXVldWUuZmVuY2VpX3JlcSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICh3ZmlfcnVuX3N0YXJ0X2ZmCi1gaWZkZWYgU0NSMV9DTEtDVFJMX0VOCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBjbGtfcGlwZV9lbgotYGVuZGlmIC8vIFNDUjFfQ0xLQ1RSTF9FTgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZGJnX3J1bl9zdGFydF9ucGJ1ZgotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoZXh1X3F1ZXVlX3ZkICYgamJfdGFrZW4pOwotCi0vLyBKdW1wL2JyYW5jaCBzaWduYWxzCi1hc3NpZ24gYnJhbmNoX3Rha2VuID0gZXh1X3F1ZXVlLmJyYW5jaF9yZXEgJiBpYWx1X2NtcCAmIGlhbHVfcmR5OwotYXNzaWduIGpiX3Rha2VuICAgICA9IGV4dV9xdWV1ZS5qdW1wX3JlcSB8IGJyYW5jaF90YWtlbjsKLWFzc2lnbiBqYl9uZXdfcGMgICAgPSBpYWx1X2FkZHJfcmVzICYgU0NSMV9KVU1QX01BU0s7Ci0KLS8vIFBDIHRvIGJlIGxvYWRlZCBvbiBNUkVUIGZyb20gaW50ZXJydXB0IHRyYXAKLWFzc2lnbiBleHUyY3NyX3BjX25leHRfbyAgPSB+ZXh1X3F1ZXVlX3ZkID8gcGNfY3Vycl9mZgotICAgICAgICAgICAgICAgICAgICAgICAgICA6IGpiX3Rha2VuICAgICAgPyBqYl9uZXdfcGMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaW5jX3BjOwotYXNzaWduIGV4dTJwaXBlX3BjX2N1cnJfbyA9IHBjX2N1cnJfZmY7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2FkL1N0b3JlIFVuaXQgKExTVSkKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gLy8KLSAvLyBGdW5jdGlvbmFsaXR5OgotIC8vIC0gUGVyZm9ybXMgbG9hZCBhbmQgc3RvcmUgb3BlcmF0aW9ucyBpbiBEYXRhIE1lbW9yeQotIC8vIC0gR2VuZXJhdGVzIERNRU0gYWRkcmVzcyBtaXNhbGlnbiBhbmQgYWNjZXNzIGZhdWx0IGV4Y2VwdGlvbnMKLSAvLyAtIFBhc3NlcyBETUVNIG9wZXJhdGlvbnMgaW5mb3JtYXRpb24gdG8gVERVIGFuZCBnZW5lcmF0ZXMgTFNVIGJyZWFrcG9pbnQgZXhjZXB0aW9uCi0gLy8KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBsc3VfcmVxICA9ICgoZXh1X3F1ZXVlLmxzdV9jbWQgIT0gU0NSMV9MU1VfQ01EX05PTkUpICYgZXh1X3F1ZXVlX3ZkKTsKLQotc2NyMV9waXBlX2xzdSBpX2xzdSgKLSAgICAucnN0X24gICAgICAgICAgICAgICAgICAgICAgKHJzdF9uICAgICAgICAgICAgICAgICAgICksCi0gICAgLmNsayAgICAgICAgICAgICAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICAgICAgICApLAotCi0gICAgLy8gRVhVIDwtPiBMU1UgaW50ZXJmYWNlCi0gICAgLmV4dTJsc3VfcmVxX2kgICAgICAgICAgICAgIChsc3VfcmVxICAgICAgICAgICAgICAgICApLCAgICAgICAvLyBSZXF1ZXN0IHRvIExTVQotICAgIC5leHUybHN1X2NtZF9pICAgICAgICAgICAgICAoZXh1X3F1ZXVlLmxzdV9jbWQgICAgICAgKSwgICAgICAgLy8gTFNVIGNvbW1hbmQKLSAgICAuZXh1MmxzdV9hZGRyX2kgICAgICAgICAgICAgKGlhbHVfYWRkcl9yZXMgICAgICAgICAgICksICAgICAgIC8vIERNRU0gYWRkcmVzcwotICAgIC5leHUybHN1X3NkYXRhX2kgICAgICAgICAgICAobXByZjJleHVfcnMyX2RhdGFfaSAgICAgKSwgICAgICAgLy8gRGF0YSBmb3Igc3RvcmUgdG8gRE1FTQotICAgIC5sc3UyZXh1X3JkeV9vICAgICAgICAgICAgICAobHN1X3JkeSAgICAgICAgICAgICAgICAgKSwgICAgICAgLy8gTFNVIHJlYWR5Ci0gICAgLmxzdTJleHVfbGRhdGFfbyAgICAgICAgICAgIChsc3VfbF9kYXRhICAgICAgICAgICAgICApLCAgICAgICAvLyBMb2FkZWQgZGF0YSBmb3JtIERNRU0KLSAgICAubHN1MmV4dV9leGNfbyAgICAgICAgICAgICAgKGxzdV9leGNfcmVxICAgICAgICAgICAgICksICAgICAgIC8vIExTVSBleGNlcHRpb24KLSAgICAubHN1MmV4dV9leGNfY29kZV9vICAgICAgICAgKGxzdV9leGNfY29kZSAgICAgICAgICAgICksICAgICAgIC8vIExTVSBleGNlcHRpb24gY29kZQotCi1gaWZkZWYgU0NSMV9URFVfRU4KLSAgICAvLyBURFUgPC0+IExTVSBpbnRlcmZhY2UKLSAgICAubHN1MnRkdV9kbW9uX28gICAgICAgICAgICAgKGxzdTJ0ZHVfZG1vbl9vICAgICAgICAgICksCi0gICAgLnRkdTJsc3VfaWJya3B0X2V4Y19yZXFfaSAgICh0ZHUybHN1X2licmtwdF9leGNfcmVxX2kpLAotICAgIC50ZHUybHN1X2RicmtwdF9leGNfcmVxX2kgICAodGR1MmxzdV9kYnJrcHRfZXhjX3JlcV9pKSwKLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotCi0gICAgLy8gRGF0YSBtZW1vcnkgaW50ZXJmYWNlCi0gICAgLmxzdTJkbWVtX3JlcV9vICAgICAgICAgICAgIChleHUyZG1lbV9yZXFfbyAgICAgICAgICApLCAgICAgICAvLyBETUVNIHJlcXVlc3QKLSAgICAubHN1MmRtZW1fY21kX28gICAgICAgICAgICAgKGV4dTJkbWVtX2NtZF9vICAgICAgICAgICksICAgICAgIC8vIERNRU0gY29tbWFuZAotICAgIC5sc3UyZG1lbV93aWR0aF9vICAgICAgICAgICAoZXh1MmRtZW1fd2lkdGhfbyAgICAgICAgKSwgICAgICAgLy8gRE1FTSB3aWR0aAotICAgIC5sc3UyZG1lbV9hZGRyX28gICAgICAgICAgICAoZXh1MmRtZW1fYWRkcl9vICAgICAgICAgKSwgICAgICAgLy8gRE1FTSBhZGRyZXNzCi0gICAgLmxzdTJkbWVtX3dkYXRhX28gICAgICAgICAgIChleHUyZG1lbV93ZGF0YV9vICAgICAgICApLCAgICAgICAvLyBETUVNIHdyaXRlIGRhdGEKLSAgICAuZG1lbTJsc3VfcmVxX2Fja19pICAgICAgICAgKGRtZW0yZXh1X3JlcV9hY2tfaSAgICAgICksICAgICAgIC8vIERNRU0gcmVxdWVzdCBhY2tub3dsZWRnZQotICAgIC5kbWVtMmxzdV9yZGF0YV9pICAgICAgICAgICAoZG1lbTJleHVfcmRhdGFfaSAgICAgICAgKSwgICAgICAgLy8gRE1FTSByZWFkIGRhdGEKLSAgICAuZG1lbTJsc3VfcmVzcF9pICAgICAgICAgICAgKGRtZW0yZXh1X3Jlc3BfaSAgICAgICAgICkgICAgICAgIC8vIERNRU0gcmVzcG9uc2UKLSk7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBFWFUgc3RhdHVzIGxvZ2ljCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBFWFUgcmVhZHkgZmxhZwotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBjYXNlICgxJ2IxKQotICAgICAgICBsc3VfcmVxICAgICAgICAgICAgICAgICA6IGV4dV9yZHkgPSBsc3VfcmR5IHwgbHN1X2V4Y19yZXE7Ci1gaWZkZWYgU0NSMV9SVk1fRVhUCi0gICAgICAgIGlhbHVfdmQgICAgICAgICAgICAgICAgIDogZXh1X3JkeSA9IGlhbHVfcmR5OwotYGVuZGlmIC8vIFNDUjFfUlZNX0VYVAotICAgICAgICBjc3IyZXh1X21zdGF0dXNfbWllX3VwX2k6IGV4dV9yZHkgPSAxJ2IwOwotICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgICAgICA6IGV4dV9yZHkgPSAxJ2IxOwotICAgIGVuZGNhc2UKLWVuZAotCi1hc3NpZ24gZXh1MnBpcGVfaW5pdF9wY19vICAgICAgID0gaW5pdF9wYzsKLWFzc2lnbiBleHUyaWR1X3JkeV9vICAgICAgICAgICAgPSBleHVfcmR5ICYgfmV4dV9xdWV1ZV9iYXJyaWVyOwotYXNzaWduIGV4dTJwaXBlX2V4dV9idXN5X28gICAgICA9IGV4dV9xdWV1ZV92ZCAmIH5leHVfcmR5OwotYXNzaWduIGV4dTJwaXBlX2luc3RyZXRfbyAgICAgICA9IGV4dV9xdWV1ZV92ZCAmIGV4dV9yZHk7Ci1hc3NpZ24gZXh1MmNzcl9pbnN0cmV0X25vX2V4Y19vID0gZXh1MnBpcGVfaW5zdHJldF9vICYgfmV4dV9leGNfcmVxOwotCi0vLyBFeGNlcHRpb25zCi1gaWZkZWYgU0NSMV9EQkdfRU4KLWFzc2lnbiBleHUycGlwZV9leGNfcmVxX28gID0gZXh1X3F1ZXVlX3ZkID8gZXh1X2V4Y19yZXEgOiBleHVfZXhjX3JlcV9mZjsKLWBlbHNlIC8vIFNDUjFfREJHX0VOCi1hc3NpZ24gZXh1MnBpcGVfZXhjX3JlcV9vICA9IGV4dV9leGNfcmVxOwotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KLS8vIEJyZWFrcG9pbnRzCi1hc3NpZ24gZXh1MnBpcGVfYnJrcHRfbyAgICA9IGV4dV9xdWV1ZV92ZCAmIChleHVfcXVldWUuZXhjX2NvZGUgPT0gU0NSMV9FWENfQ09ERV9CUkVBS1BPSU5UKTsKLWBpZmRlZiBTQ1IxX1REVV9FTgotYXNzaWduIGV4dTJoZHVfaWJya3B0X2h3X28gPSB0ZHUyZXh1X2licmtwdF9leGNfcmVxX2kgfCB0ZHUybHN1X2RicmtwdF9leGNfcmVxX2k7Ci1gZW5kaWYgLy8gU0NSMV9URFVfRU4KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEVYVSA8LT4gTVBSRiBpbnRlcmZhY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIE9wZXJhbmRzIGZldGNoaW5nIHN0YWdlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1gaWZkZWYgIFNDUjFfTk9fRVhFX1NUQUdFCi1hc3NpZ24gbXByZl9yczFfcmVxID0gZXh1X3F1ZXVlX3ZkICYgaWR1MmV4dV91c2VfcnMxX2k7Ci1hc3NpZ24gbXByZl9yczJfcmVxID0gZXh1X3F1ZXVlX3ZkICYgaWR1MmV4dV91c2VfcnMyX2k7Ci1gZWxzZSAvLyBTQ1IxX05PX0VYRV9TVEFHRQotIGBpZmRlZiAgU0NSMV9NUFJGX1JBTQotICAgICBhc3NpZ24gbXByZl9yczFfcmVxID0gZXh1X3F1ZXVlX2VuCi0gICAgICAgICAgICAgICAgICAgICAgICAgPyAoZXh1X3F1ZXVlX3ZkX25leHQgJiBpZHUyZXh1X3VzZV9yczFfaSkKLSAgICAgICAgICAgICAgICAgICAgICAgICA6IChleHVfcXVldWVfdmQgICAgICAmIGlkdTJleHVfdXNlX3JzMV9mZik7Ci0gICAgIGFzc2lnbiBtcHJmX3JzMl9yZXEgPSBleHVfcXVldWVfZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICA/IChleHVfcXVldWVfdmRfbmV4dCAmIGlkdTJleHVfdXNlX3JzMl9pKQotICAgICAgICAgICAgICAgICAgICAgICAgIDogKGV4dV9xdWV1ZV92ZCAgICAgICYgaWR1MmV4dV91c2VfcnMyX2ZmKTsKLSBgZWxzZSAvLyBTQ1IxX01QUkZfUkFNCi0gICAgYGlmZGVmICBTQ1JDMV9NUFJGX1NUQUdFIC8vIEFERCBGRiBTdGFnZSBhdCBNUlBGCi0gICAgICAgIGFzc2lnbiBtcHJmX3JzMV9yZXEgPSBleHVfcXVldWVfZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IChleHVfcXVldWVfdmRfbmV4dCAmIGlkdTJleHVfdXNlX3JzMV9pKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGV4dV9xdWV1ZV92ZCAgICAgICYgaWR1MmV4dV91c2VfcnMxX2ZmKTsKLSAgICAgICAgYXNzaWduIG1wcmZfcnMyX3JlcSA9IGV4dV9xdWV1ZV9lbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKGV4dV9xdWV1ZV92ZF9uZXh0ICYgaWR1MmV4dV91c2VfcnMyX2kpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoZXh1X3F1ZXVlX3ZkICAgICAgJiBpZHUyZXh1X3VzZV9yczJfZmYpOwotCi0gICAgIGBlbHNlCi0gICAgICAgICAgYXNzaWduIG1wcmZfcnMxX3JlcSA9IGV4dV9xdWV1ZV92ZCAmIGlkdTJleHVfdXNlX3JzMV9mZjsKLSAgICAgICAgICBhc3NpZ24gbXByZl9yczJfcmVxID0gZXh1X3F1ZXVlX3ZkICYgaWR1MmV4dV91c2VfcnMyX2ZmOwotICAgICBgZW5kaWYgLy8gU0NSMV9NUFJGX1JBTQotICBgZW5kaWYKLWBlbmRpZiAvLyBTQ1IxX05PX0VYRV9TVEFHRQotCi0vLyBJZiBleHVfcXVldWUgaXNuJ3QgZW5hYmxlZCB3ZSBuZWVkIHByZXZpb3VzIGFkZHJlc3NlcyBhbmQgdXNhZ2UgZmxhZ3MgYmVjYXVzZQotLy8gUkFNIGJsb2NrcyByZWFkIG9wZXJhdGlvbiBpcyBTWU5DSFJPTk9VUwotYGlmZGVmIFNDUjFfTVBSRl9SQU0KLSAgICAgYXNzaWduIG1wcmZfcnMxX2FkZHIgPSBleHVfcXVldWVfZW4gPyBpZHUyZXh1X2NtZF9pLnJzMV9hZGRyIDogZXh1X3F1ZXVlLnJzMV9hZGRyOwotICAgICBhc3NpZ24gbXByZl9yczJfYWRkciA9IGV4dV9xdWV1ZV9lbiA/IGlkdTJleHVfY21kX2kucnMyX2FkZHIgOiBleHVfcXVldWUucnMyX2FkZHI7Ci1gZWxzZSAvLyBTQ1IxX01QUkZfUkFNCi0gICAgYGlmZGVmIFNDUkMxX01QUkZfU1RBR0UKLSAgICAgICAgYXNzaWduIG1wcmZfcnMxX2FkZHIgPSBleHVfcXVldWVfZW4gPyBpZHUyZXh1X2NtZF9pLnJzMV9hZGRyIDogZXh1X3F1ZXVlLnJzMV9hZGRyOwotICAgICAgICBhc3NpZ24gbXByZl9yczJfYWRkciA9IGV4dV9xdWV1ZV9lbiA/IGlkdTJleHVfY21kX2kucnMyX2FkZHIgOiBleHVfcXVldWUucnMyX2FkZHI7Ci0gICAgYGVsc2UKLSAgICAgICAgYXNzaWduIG1wcmZfcnMxX2FkZHIgPSBleHVfcXVldWUucnMxX2FkZHI7Ci0gICAgICAgIGFzc2lnbiBtcHJmX3JzMl9hZGRyID0gZXh1X3F1ZXVlLnJzMl9hZGRyOwotICAgICBgZW5kaWYKLWBlbmRpZiAvLyBTQ1IxX01QUkZfUkFNCi0KLWFzc2lnbiBleHUybXByZl9yczFfYWRkcl9vID0gbXByZl9yczFfcmVxID8gYFNDUjFfTVBSRl9BV0lEVEgnKG1wcmZfcnMxX2FkZHIpIDogJzA7Ci1hc3NpZ24gZXh1Mm1wcmZfcnMyX2FkZHJfbyA9IG1wcmZfcnMyX3JlcSA/IGBTQ1IxX01QUkZfQVdJRFRIJyhtcHJmX3JzMl9hZGRyKSA6ICcwOwotCi0vLyBXcml0ZSBiYWNrIHN0YWdlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gZXh1Mm1wcmZfd19yZXFfbyAgID0gKGV4dV9xdWV1ZS5yZF93Yl9zZWwgIT0gU0NSMV9SRF9XQl9OT05FKSAmIGV4dV9xdWV1ZV92ZCAmIH5leHVfZXhjX3JlcQotYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgICAgICAgICAgICAgICAgICAgICAgICYgfmhkdTJleHVfbm9fY29tbWl0X2kKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotICAgICAgICAgICAgICAgICAgICAgICAgICAmICgoZXh1X3F1ZXVlLnJkX3diX3NlbCA9PSBTQ1IxX1JEX1dCX0NTUikgPyBjc3JfYWNjZXNzX2luaXQgOiBleHVfcmR5KTsKLQotYXNzaWduIGV4dTJtcHJmX3JkX2FkZHJfbyA9IGBTQ1IxX01QUkZfQVdJRFRIJyhleHVfcXVldWUucmRfYWRkcik7Ci0KLS8vIE1SUEYgUkQgZGF0YSBtdWx0aXBsZXhlcgotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBjYXNlIChleHVfcXVldWUucmRfd2Jfc2VsKQotICAgICAgICBTQ1IxX1JEX1dCX1NVTTIgIDogZXh1Mm1wcmZfcmRfZGF0YV9vID0gaWFsdV9hZGRyX3JlczsKLSAgICAgICAgU0NSMV9SRF9XQl9JTU0gICA6IGV4dTJtcHJmX3JkX2RhdGFfbyA9IGV4dV9xdWV1ZS5pbW07Ci0gICAgICAgIFNDUjFfUkRfV0JfSU5DX1BDOiBleHUybXByZl9yZF9kYXRhX28gPSBpbmNfcGM7Ci0gICAgICAgIFNDUjFfUkRfV0JfTFNVICAgOiBleHUybXByZl9yZF9kYXRhX28gPSBsc3VfbF9kYXRhOwotICAgICAgICBTQ1IxX1JEX1dCX0NTUiAgIDogZXh1Mm1wcmZfcmRfZGF0YV9vID0gY3NyMmV4dV9yX2RhdGFfaTsKLSAgICAgICAgZGVmYXVsdCAgICAgICAgICA6IGV4dTJtcHJmX3JkX2RhdGFfbyA9IGlhbHVfbWFpbl9yZXM7Ci0gICAgZW5kY2FzZQotZW5kCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBFWFUgPC0+IENTUiBpbnRlcmZhY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotIC8vIEVYVSA8LT4gQ1NSIGludGVyZmFjZSBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uYWwgdW5pdHM6Ci0gLy8gLSBDU1Igd3JpdGUvcmVhZCBpbnRlcmZhY2UKLSAvLyAtIENTUiBhY2Nlc3MgRlNNCi0gLy8gLSBDU1IgZXZlbnRzIGludGVyZmFjZToKLSAvLyAgIC0gRXhjZXB0aW9ucyBzaWduYWxzCi0gLy8gICAtIEludGVycnVwdHMgc2lnbmFscwotIC8vICAgLSBNUkVUIHNpZ25hbHMKLS8vCi0KLS8vIENTUnMgd3JpdGUvcmVhZCBpbnRlcmZhY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIENTUiB3cml0ZS9yZWFkIHJlcXVlc3Qgc2lnbmFscyBjYWxjdWxhdGlvbgotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBpZiAofmV4dV9xdWV1ZV92ZAotYGlmZGVmIFNDUjFfVERVX0VOCi0gICAgICAgfCB0ZHUyZXh1X2licmtwdF9leGNfcmVxX2kKLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotICAgICkgYmVnaW4KLSAgICAgICAgZXh1MmNzcl9yX3JlcV9vID0gMSdiMDsKLSAgICAgICAgZXh1MmNzcl93X3JlcV9vID0gMSdiMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICBjYXNlIChleHVfcXVldWUuY3NyX2NtZCkKLSAgICAgICAgICAgIFNDUjFfQ1NSX0NNRF9XUklURSAgOiBiZWdpbgotICAgICAgICAgICAgICAgIGV4dTJjc3Jfcl9yZXFfbyA9IHxleHVfcXVldWUucmRfYWRkcjsKLSAgICAgICAgICAgICAgICBleHUyY3NyX3dfcmVxX28gPSBjc3JfYWNjZXNzX2luaXQ7Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIFNDUjFfQ1NSX0NNRF9TRVQsCi0gICAgICAgICAgICBTQ1IxX0NTUl9DTURfQ0xFQVIgIDogYmVnaW4KLSAgICAgICAgICAgICAgICBleHUyY3NyX3JfcmVxX28gPSAxJ2IxOwotICAgICAgICAgICAgICAgIGV4dTJjc3Jfd19yZXFfbyA9IHxleHVfcXVldWUucnMxX2FkZHIgJiBjc3JfYWNjZXNzX2luaXQ7Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIGRlZmF1bHQgOiBiZWdpbgotICAgICAgICAgICAgICAgIGV4dTJjc3Jfcl9yZXFfbyA9IDEnYjA7Ci0gICAgICAgICAgICAgICAgZXh1MmNzcl93X3JlcV9vID0gMSdiMDsKLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmRjYXNlCi0gICAgZW5kCi1lbmQKLQotYXNzaWduIGV4dTJjc3Jfd19jbWRfbyAgID0gZXh1X3F1ZXVlLmNzcl9jbWQ7Ci1hc3NpZ24gZXh1MmNzcl9yd19hZGRyX28gPSBleHVfcXVldWUuaW1tW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXTsKLWFzc2lnbiBleHUyY3NyX3dfZGF0YV9vICA9IChleHVfcXVldWUuY3NyX29wID09IFNDUjFfQ1NSX09QX1JFRykKLSAgICAgICAgICAgICAgICAgICAgICAgICA/IG1wcmYyZXh1X3JzMV9kYXRhX2kKLSAgICAgICAgICAgICAgICAgICAgICAgICA6IHsnMCwgZXh1X3F1ZXVlLnJzMV9hZGRyfTsgLy8gemltbQotCi0KLS8vIENTUiBhY2Nlc3MgRlNNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICBjc3JfYWNjZXNzX2ZmIDw9IFNDUjFfQ1NSX0lOSVQ7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgY3NyX2FjY2Vzc19mZiA8PSBjc3JfYWNjZXNzX25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIGNzcl9hY2Nlc3NfbmV4dCA9IChjc3JfYWNjZXNzX2luaXQgJiBjc3IyZXh1X21zdGF0dXNfbWllX3VwX2kpCi0gICAgICAgICAgICAgICAgICAgICAgID8gU0NSMV9DU1JfUkRZCi0gICAgICAgICAgICAgICAgICAgICAgIDogU0NSMV9DU1JfSU5JVDsKLQotYXNzaWduIGNzcl9hY2Nlc3NfaW5pdCA9IChjc3JfYWNjZXNzX2ZmID09IFNDUjFfQ1NSX0lOSVQpOwotCi0vLyBDU1IgZXZlbnRzIGludGVyZmFjZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gRXhjZXB0aW9ucyBzaWduYWxzCi1hc3NpZ24gZXh1MmNzcl90YWtlX2V4Y19vID0gZXh1X2V4Y19yZXEKLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgICAgICAgICAgICAgICAgICAgICAgICAmIH5oZHUyZXh1X2RiZ19oYWx0ZWRfaQotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDsKLWFzc2lnbiBleHUyY3NyX2V4Y19jb2RlX28gPSBleGNfY29kZTsKLWFzc2lnbiBleHUyY3NyX3RyYXBfdmFsX28gPSBleGNfdHJhcF92YWw7Ci0KLS8vIEludGVycnVwdHMgc2lnbmFscwotYXNzaWduIGV4dTJjc3JfdGFrZV9pcnFfbyA9IGNzcjJleHVfaXJxX2kgJiB+ZXh1MnBpcGVfZXh1X2J1c3lfbwotYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgICAgICAgICAgICAgICAgICAgICAgICYgfmhkdTJleHVfaXJxX2RzYmxfaQotICAgICAgICAgICAgICAgICAgICAgICAgICAmIH5oZHUyZXh1X2RiZ19oYWx0ZWRfaQotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi1gaWZkZWYgU0NSMV9DTEtDVFJMX0VOCi0gICAgICAgICAgICAgICAgICAgICAgICAgICYgY2xrX3BpcGVfZW4KLWBlbmRpZiAvLyBTQ1IxX0NMS0NUUkxfRU4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgOwotCi0vLyBNUkVUIHNpZ25hbHMKLS8vIE1SRVQgaW5zdHJ1Y3Rpb24gZmxhZwotYXNzaWduIGV4dTJjc3JfbXJldF9pbnN0cl9vICA9IGV4dV9xdWV1ZV92ZCAmIGV4dV9xdWV1ZS5tcmV0X3JlcQotYGlmZGVmIFNDUjFfVERVX0VOCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgfnRkdTJleHVfaWJya3B0X2V4Y19yZXFfaQotYGVuZGlmIC8vIFNDUjFfVERVX0VOCi1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiB+aGR1MmV4dV9kYmdfaGFsdGVkX2kKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Ci1hc3NpZ24gZXh1MmNzcl9tcmV0X3VwZGF0ZV9vID0gZXh1MmNzcl9tcmV0X2luc3RyX28gJiBjc3JfYWNjZXNzX2luaXQ7Ci0KLWBpZmRlZiBTQ1IxX1REVV9FTgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEVYVSA8LT4gVERVIGludGVyZmFjZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gSW5zdHJ1Y3Rpb24gbW9uaXRvcgotYXNzaWduIGV4dTJ0ZHVfaW1vbl9vLnZkICAgID0gZXh1X3F1ZXVlX3ZkOwotYXNzaWduIGV4dTJ0ZHVfaW1vbl9vLnJlcSAgID0gZXh1MnBpcGVfaW5zdHJldF9vOwotYXNzaWduIGV4dTJ0ZHVfaW1vbl9vLmFkZHIgID0gcGNfY3Vycl9mZjsKLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBleHUydGR1X2licmtwdF9yZXRfbyA9ICcwOwotICAgIGlmIChleHVfcXVldWVfdmQpIGJlZ2luCi0gICAgICAgIGV4dTJ0ZHVfaWJya3B0X3JldF9vID0gdGR1MmV4dV9pYnJrcHRfbWF0Y2hfaTsKLSAgICAgICAgaWYgKGxzdV9yZXEpIGJlZ2luCi0gICAgICAgICAgICBleHUydGR1X2licmtwdF9yZXRfb1tTQ1IxX1REVV9NVFJJR19OVU0tMTowXSB8PSB0ZHUybHN1X2RicmtwdF9tYXRjaF9pOwotICAgICAgICBlbmQKLSAgICBlbmQKLWVuZAotYGVuZGlmIC8vIFNDUjFfVERVX0VOCi0KLQotYGlmZGVmIFNDUjFfVFJHVF9TSU1VTEFUSU9OCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gVHJhY2Vsb2cgc2lnbmFscwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgIHVwZGF0ZV9wYzsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVfcGNfZW47Ci0KLWFzc2lnbiB1cGRhdGVfcGNfZW4gPSAoaW5pdF9wYyB8IGV4dTJwaXBlX2luc3RyZXRfbyB8IGV4dTJjc3JfdGFrZV9pcnFfbykKLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgICAgICAgICAgICAgICAgICAmIH5oZHUyZXh1X3BjX2Fkdm10X2RzYmxfaSAmIH5oZHUyZXh1X25vX2NvbW1pdF9pCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLSAgICAgICAgICAgICAgICAgICAgOwotYXNzaWduIHVwZGF0ZV9wYyAgICA9IGV4dTJpZnVfcGNfbmV3X3JlcV9vID8gZXh1MmlmdV9wY19uZXdfbyA6IGluY19wYzsKLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQXNzZXJ0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBYIGNoZWNrcwotCi1TQ1IxX1NWQV9FWFVfWENIRUNLX0NUUkwgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgISRpc3Vua25vd24oe2lkdTJleHVfcmVxX2ksIGNzcjJleHVfaXJxX2ksIGNzcjJleHVfaXBfaWVfaSwgbHN1X3JlcSwgbHN1X3JkeSwgZXh1X2V4Y19yZXF9KQotICAgICkgZWxzZSAkZXJyb3IoIkVYVSBFcnJvcjogdW5rbm93biBjb250cm9sIHZhbHVlcyIpOwotCi1TQ1IxX1NWQV9FWFVfWENIRUNLX1FVRVVFIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgIGlkdTJleHVfcmVxX2kgfC0+ICEkaXN1bmtub3duKGlkdTJleHVfY21kX2kpCi0gICAgKSBlbHNlICRlcnJvcigiRVhVIEVycm9yOiB1bmtub3duIHZhbHVlcyBpbiBxdWV1ZSIpOwotCi1TQ1IxX1NWQV9FWFVfWENIRUNLX0NTUl9SREFUQSA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICBleHUyY3NyX3JfcmVxX28gfC0+ICEkaXN1bmtub3duKHtjc3IyZXh1X3JfZGF0YV9pLCBjc3IyZXh1X3J3X2V4Y19pfSkKLSAgICApIGVsc2UgJGVycm9yKCJFWFUgRXJyb3I6IHVua25vd24gdmFsdWVzIGZyb20gQ1NSIik7Ci0KLS8vIEJlaGF2aW9yIGNoZWNrcwotCi1TQ1IxX1NWQV9FWFVfT05FSE9UIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgICRvbmVob3QwKHtleHVfcXVldWUuanVtcF9yZXEsIGV4dV9xdWV1ZS5icmFuY2hfcmVxLCBsc3VfcmVxfSkKLSAgICApIGVsc2UgJGVycm9yKCJFWFUgRXJyb3I6IGlsbGVnYWwgY29tYmluYXRpb24gb2YgY29udHJvbCBzaWduYWxzIik7Ci0KLVNDUjFfU1ZBX0VYVV9PTkVIT1RfRVhDIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgIGV4dV9xdWV1ZV92ZCB8LT4KLSAgICAkb25laG90MCh7ZXh1X3F1ZXVlLmV4Y19yZXEsIGxzdV9leGNfcmVxLCBjc3IyZXh1X3J3X2V4Y19pCi1gaWZuZGVmIFNDUjFfUlZDX0VYVAotICAgICwgamJfbWlzYWxpZ24KLWBlbmRpZgotICAgIH0pCi0gICAgKSBlbHNlICRlcnJvcigiRVhVIEVycm9yOiBleGNlcHRpb25zICRvbmVob3QwIGZhaWxlZCIpOwotCi1gZW5kaWYgLy8gU0NSMV9UUkdUX1NJTVVMQVRJT04KLQotZW5kbW9kdWxlIDogc2NyMV9waXBlX2V4dQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2hkdS5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9oZHUuc3YKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyM2U1NGIuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2hkdS5zdgorKysgL2Rldi9udWxsCkBAIC0xLDkyMCArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IFN5bnRhY29yZSBMTEMgqSAyMDE2LTIwMjEKLS8vIAotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKLS8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBTeW50YWNvcmUgTExDCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vIEBmaWxlICAgICAgIDxzY3IxX3BpcGVfaGR1LnN2PgotLy8vIEBicmllZiAgICAgIEhBUlQgRGVidWcgVW5pdCAoSERVKQotLy8vCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gLy8KLSAvLwotIC8vIEZ1bmN0aW9uYWxpdHk6Ci0gLy8gLSBDb250cm9scyBIQVJUIHN0YXRlIChSVU4sIERlYnVnIFJVTiwgRGVidWcgSEFMVEVEKQotIC8vIC0gU2V0dXBzIERlYnVnIE1vZGUgZXhlY3V0aW9uCi0gLy8gLSBQcm92aWRlcyBzdGF0dXMgaW5mb3JtYXRpb24gYWJvdXQgRGVidWcgTW9kZSBleGVjdXRpb24KLSAvLyAtIFByb3ZpZGVzIFByb2dyYW0gQnVmZmVyIGZ1bmN0aW9uYWxpdHkgKGEgZmV3IGluc3RydWN0aW9ucyBleGVjdXRpb24gd2hpbGUKLSAvLyAgIGluIERlYnVnIE1vZGUpCi0gLy8gLSBQcm92aWRlcyBhY2Nlc3MgdG8gRGVidWcgQ1NScwotIC8vCi0gLy8gU3RydWN0dXJlOgotIC8vIC0gRGVidWcgc3RhdGUgRlNNCi0gLy8gLSBIQVJUIENvbnRyb2wgbG9naWMKLSAvLyAtIEhBUlQgU3RhdHVzIGxvZ2ljCi0gLy8gLSBQcm9ncmFtIEJ1ZmZlcgotIC8vIC0gRGVidWcgQ1NScwotIC8vIC0gSERVIDwtPiBETSBpbnRlcmZhY2UKLSAvLyAtIEhEVSA8LT4gRVhVIGludGVyZmFjZQotIC8vIC0gSERVIDwtPiBJRlUgaW50ZXJmYWNlCi0gLy8gLSBIRFUgPC0+IENTUiBpbnRlcmZhY2UKLSAvLyAtIEhEVSA8LT4gVERVIGludGVyZmFjZQotIC8vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1gaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKLQotYGlmZGVmIFNDUjFfREJHX0VOCi1gaW5jbHVkZSAic2NyMV9hcmNoX3R5cGVzLnN2aCIKLWBpbmNsdWRlICJzY3IxX3Jpc2N2X2lzYV9kZWNvZGluZy5zdmgiCi1gaW5jbHVkZSAic2NyMV9oZHUuc3ZoIgotCi1tb2R1bGUgc2NyMV9waXBlX2hkdSAjKHBhcmFtZXRlciBIQVJUX1BCVUZfSU5TVFJfUkVHT1VUX0VOID0gMSdiMSkgKAotICAgIC8vIENvbW1vbiBzaWduYWxzCi0gICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLCAgICAgICAgICAgICAgICAgICAgICAvLyBIRFUgcmVzZXQKLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhEVSBjbG9jawotICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGtfZW4sICAgICAgICAgICAgICAgICAgICAgLy8gSERVIGNsb2NrIGVuYWJsZQotYGlmZGVmIFNDUjFfQ0xLQ1RSTF9FTgotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGtfcGlwZV9lbiwgICAgICAgICAgICAgICAgLy8gUGlwZWxpbmUgY2xvY2sgZW5hYmxlCi1gZW5kaWYgLy8gU0NSMV9DTEtDVFJMX0VOCi0gICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUyaGR1X3JkY19xbGZ5X2ksICAgICAgICAvLyBQaXBlbGluZSBSREMgcXVhbGlmaWVyCi0KLSAgICAvLyBIRFUgPC0+IENTUiBpL2YKLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMmhkdV9yZXFfaSwgICAgICAgICAgICAgIC8vIENTUiBpL2YgcmVxdWVzdAotICAgIGlucHV0ICB0eXBlX3NjcjFfY3NyX2NtZF9zZWxfZSAgICAgICAgICAgICAgICAgICAgICBjc3IyaGR1X2NtZF9pLCAgICAgICAgICAgICAgLy8gQ1NSIGkvZiBjb21tYW5kCi0gICAgaW5wdXQgIGxvZ2ljIFtTQ1IxX0hEVV9ERUJVR0NTUl9BRERSX1dJRFRILTE6MF0gICAgIGNzcjJoZHVfYWRkcl9pLCAgICAgICAgICAgICAvLyBDU1IgaS9mIGFkZHJlc3MKLSAgICBpbnB1dCAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgY3NyMmhkdV93ZGF0YV9pLCAgICAgICAgICAgIC8vIENTUiBpL2Ygd3JpdGUgZGF0YQotICAgIG91dHB1dCB0eXBlX3NjcjFfY3NyX3Jlc3BfZSAgICAgICAgICAgICAgICAgICAgICAgICBoZHUyY3NyX3Jlc3BfbywgICAgICAgICAgICAgLy8gQ1NSIGkvZiByZXNwb25zZQotICAgIG91dHB1dCBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICBoZHUyY3NyX3JkYXRhX28sICAgICAgICAgICAgLy8gQ1NSIGkvZiByZWFkIGRhdGEKLQotICAgIC8vIEhEVSA8LT4gRE0gaS9mCi0gICAgLy8gSEFSVCBSdW4gQ29udHJvbCBpL2YKLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG0yaGR1X2NtZF9yZXFfaSwgICAgICAgICAgIC8vIERNLUhBUlQgQ29tbWFuZCByZXF1ZXN0Ci0gICAgaW5wdXQgIHR5cGVfc2NyMV9oZHVfZGJnc3RhdGVzX2UgICAgICAgICAgICAgICAgICAgIGRtMmhkdV9jbWRfaSwgICAgICAgICAgICAgICAvLyBETS1IQVJUIENvbW1hbmQKLSAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1MmRtX2NtZF9yZXNwX28sICAgICAgICAgIC8vIERNLUhBUlQgQ29tbWFuZCByZXNwb25zZQotICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHUyZG1fY21kX3Jjb2RlX28sICAgICAgICAgLy8gRE0tSEFSVCBDb21tYW5kIHJldHVybiBjb2RlOiAwIC0gT2s7IDEgLSBFcnJvcgotICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHUyZG1faGFydF9ldmVudF9vLCAgICAgICAgLy8gRE0tSEFSVCBFdmVudDogMSBpZiBIQVJUIGRlYnVnIHN0YXRlIGNoYW5nZWQKLSAgICBvdXRwdXQgdHlwZV9zY3IxX2hkdV9oYXJ0c3RhdHVzX3MgICAgICAgICAgICAgICAgICAgaGR1MmRtX2hhcnRfc3RhdHVzX28sICAgICAgIC8vIERNLUhBUlQgU3RhdHVzCi0KLSAgICAvLyBQcm9ncmFtIEJ1ZmZlciBpL2YKLSAgICBvdXRwdXQgbG9naWMgW1NDUjFfSERVX1BCVUZfQUREUl9XSURUSC0xOjBdICAgICAgICAgaGR1MmRtX3BidWZfYWRkcl9vLCAgICAgICAgIC8vIFByb2dyYW0gQnVmZmVyIGFkZHJlc3MgLSBzbyBmYXIgcmVxdWVzdCBvbmx5IGZvciAxIGluc3RydWN0aW9uCi0gICAgaW5wdXQgIGxvZ2ljIFtTQ1IxX0hEVV9DT1JFX0lOU1RSX1dJRFRILTE6MF0gICAgICAgIGRtMmhkdV9wYnVmX2luc3RyX2ksICAgICAgICAvLyBQcm9ncmFtIEJ1ZmZlciBpbnN0cnVjdGlvbgotCi0gICAgLy8gSEFSVCBBYnN0cmFjdCBEYXRhIHJlZ3MgaS9mCi0gICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJkbV9kcmVnX3JlcV9vLCAgICAgICAgICAvLyBBYnN0cmFjdCBEYXRhIFJlZ2lzdGVyIHJlcXVlc3QKLSAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1MmRtX2RyZWdfd3JfbywgICAgICAgICAgIC8vIEFic3RyYWN0IERhdGEgUmVnaXN0ZXIgd3JpdGUKLSAgICBvdXRwdXQgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgaGR1MmRtX2RyZWdfd2RhdGFfbywgICAgICAgIC8vIEFic3RyYWN0IERhdGEgUmVnaXN0ZXIgd3JpdGUgZGF0YQotICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbTJoZHVfZHJlZ19yZXNwX2ksICAgICAgICAgLy8gQWJzdHJhY3QgRGF0YSBSZWdpc3RlciByZXNwb25zZQotICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbTJoZHVfZHJlZ19mYWlsX2ksICAgICAgICAgLy8gQWJzdHJhY3QgRGF0YSBSZWdpc3RlciBmYWlsCi0gICAgaW5wdXQgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgIGRtMmhkdV9kcmVnX3JkYXRhX2ksICAgICAgICAvLyBBYnN0cmFjdCBEYXRhIFJlZ2lzdGVyIHJlYWQgZGF0YQotCi1gaWZkZWYgU0NSMV9URFVfRU4KLSAgICAvLyBIRFUgPC0+IFREVSBpbnRlcmZhY2UKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1MnRkdV9od2Jya19kc2JsX28sICAgICAgIC8vIERpc2FibGVzIEJSS00KLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmhkdV9kbW9kZV9yZXFfaSwgICAgICAgIC8vIFRyaWdnZXIgTW9kdWxlIHJlcXVlc3RzIHRyYW5zaXRpb24gdG8gZGVidWcgbW9kZQotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUyaGR1X2licmtwdF9od19pLCAgICAgICAgLy8gSGFyZHdhcmUgYnJlYWtwb2ludCBvbiBjdXJyZW50IGluc3RydWN0aW9uCi1gZW5kaWYgLy8gU0NSMV9URFVfRU4KLQotICAgIC8vIEhBUlQgUnVuIFN0YXR1cwotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlMmhkdV9leHVfYnVzeV9pLCAgICAgICAgLy8gRVhVIGJ1c3kKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZTJoZHVfaW5zdHJldF9pLCAgICAgICAgIC8vIEluc3RydWN0aW9uIHJldGlyZWQgKHdpdGggb3Igd2l0aG91dCBleGNlcHRpb24pCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUyaGR1X2luaXRfcGNfaSwgICAgICAgICAvLyBSZXNldCBleGl0Ci0KLSAgICAvLyBIQVJUIEhhbHQgU3RhdHVzCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUyaGR1X2V4dV9leGNfcmVxX2ksICAgICAvLyBFeGNlcHRpb24gcmVxdWVzdAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlMmhkdV9icmtwdF9pLCAgICAgICAgICAgLy8gU29mdHdhcmUgQnJlYWtwb2ludCAoRUJSRUFLKQotCi0gICAgLy8gSERVIDwtPiBFWFUgaS9mCi0gICAgLy8gSEFSVCBSdW4gQ29udHJvbAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHUyZXh1X3BidWZfZmV0Y2hfbywgICAgICAgLy8gRmV0Y2ggaW5zdHJ1Y3Rpb24gZnJvbSBQcm9ncmFtIEJ1ZmZlcgotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHUyZXh1X25vX2NvbW1pdF9vLCAgICAgICAgLy8gRm9yYmlkIGluc3RydWN0aW9uIGNvbW1pdG1lbnQKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1MmV4dV9pcnFfZHNibF9vLCAgICAgICAgIC8vIERpc2FibGUgSVJRCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJleHVfcGNfYWR2bXRfZHNibF9vLCAgICAvLyBGb3JiaWQgUEMgYWR2YW5jZW1lbnQKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1MmV4dV9kbW9kZV9zc3RlcF9lbl9vLCAgIC8vIEVuYWJsZSBzaW5nbGUtc3RlcAotCi0gICAgLy8gSEFSVCBzdGF0ZQotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHUyZXh1X2RiZ19oYWx0ZWRfbywgICAgICAgLy8gRGVidWcgaGFsdGVkIHN0YXRlCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJleHVfZGJnX3J1bjJoYWx0X28sICAgICAvLyBUcmFuc2l0aW9uIHRvIGRlYnVnIGhhbHRlZCBzdGF0ZQotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHUyZXh1X2RiZ19oYWx0MnJ1bl9vLCAgICAgLy8gVHJhbnNpdGlvbiB0byBydW4gc3RhdGUKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1MmV4dV9kYmdfcnVuX3N0YXJ0X28sICAgIC8vIEZpcnN0IGN5Y2xlIG9mIHJ1biBzdGF0ZQotCi0gICAgLy8gUEMgaW50ZXJmYWNlCi0gICAgaW5wdXQgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgIHBpcGUyaGR1X3BjX2N1cnJfaSwgICAgICAgICAvLyBDdXJyZW50IFBDCi0gICAgb3V0cHV0IGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgIGhkdTJleHVfZGJnX25ld19wY19vLCAgICAgICAvLyBOZXcgUEMgZm9yIHJlc3VtZQotCi0gICAgLy8gSERVIDwtPiBJRlUgaS9mCi0gICAgLy8gUHJvZ3JhbSBCdWZmZXIgSW5zdHJ1Y3Rpb24gaW50ZXJmYWNlCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmdTJoZHVfcGJ1Zl9pbnN0cl9yZHlfaSwgICAvLyBQcm9ncmFtIEJ1ZmZlciBJbnN0cnVjdGlvbiBpL2YgcmVhZHkKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1MmlmdV9wYnVmX2luc3RyX3ZkX28sICAgIC8vIFByb2dyYW0gQnVmZmVyIEluc3RydWN0aW9uIHZhbGlkCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJpZnVfcGJ1Zl9pbnN0cl9lcnJfbywgICAvLyBQcm9ncmFtIEJ1ZmZlciBJbnN0cnVjdGlvbiBpL2YgZXJyb3IKLSAgICBvdXRwdXQgIGxvZ2ljIFtTQ1IxX0hEVV9DT1JFX0lOU1RSX1dJRFRILTE6MF0gICAgICAgaGR1MmlmdV9wYnVmX2luc3RyX28gICAgICAgIC8vIFByb2dyYW0gQnVmZmVyIEluc3RydWN0aW9uIGl0c2VsZgotKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIFBhcmFtZXRlcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWxvY2FscGFyYW0gaW50IHVuc2lnbmVkIFNDUjFfSERVX1RJTUVPVVQgICAgICAgPSA2NDsgICAgICAgLy8gbXVzdCBiZSBwb3dlciBvZiAyCi1sb2NhbHBhcmFtIGludCB1bnNpZ25lZCBTQ1IxX0hEVV9USU1FT1VUX1dJRFRIID0gJGNsb2cyKFNDUjFfSERVX1RJTUVPVVQpOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgU2lnbmFscwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gRGVidWcgRlNNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBGU00gY29udHJvbCBzaWduYWxzCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1fZGhhbHRfcmVxOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtX3J1bl9yZXE7Ci0KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbV9jbWRfcnVuOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtX2NtZF9kaGFsdGVkOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtX2NtZF9kcnVuOwotCi0vLyBEZWJ1ZyBzdGF0ZSBGU00gc2lnbmFscwotdHlwZV9zY3IxX2hkdV9kYmdzdGF0ZXNfZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiZ19zdGF0ZTsKLXR5cGVfc2NyMV9oZHVfZGJnc3RhdGVzX2UgICAgICAgICAgICAgICAgICAgICAgICAgICBkYmdfc3RhdGVfbmV4dDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYmdfc3RhdGVfZGhhbHRlZDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYmdfc3RhdGVfZHJ1bjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYmdfc3RhdGVfcnVuOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiZ19zdGF0ZV9yZXNldDsKLQotLy8gRlNNIHRyYW5zaXRpb24sIHVwZGF0ZSBhbmQgZXZlbnQgcmVnaXN0ZXJzCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGZzbV90cmFuczsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZnNtX3RyYW5zX25leHQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGZzbV91cGRhdGU7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGZzbV91cGRhdGVfbmV4dDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZnNtX2V2ZW50OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmc21fZXZlbnRfbmV4dDsKLQotLy8gSEFSVCBDb250cm9sIHNpZ25hbHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJ0X3Jlc3VtZV9yZXE7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFydF9oYWx0X3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJ0X2NtZF9yZXE7Ci0KLS8vIEhBUlQgUnVuIENvbnRyb2wgcmVnaXN0ZXIKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJ0X3J1bmN0cmxfdXBkOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcnRfcnVuY3RybF9jbHI7Ci10eXBlX3NjcjFfaGR1X3J1bmN0cmxfcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFydF9ydW5jdHJsOwotCi0vLyBIQVJUIGhhbHQgcmVxdWVzdCB0aW1lb3V0IGNvdW50ZXIgc2lnbmFscwotbG9naWMgW1NDUjFfSERVX1RJTUVPVVRfV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgIGhhbHRfcmVxX3RpbWVvdXRfY250OwotbG9naWMgW1NDUjFfSERVX1RJTUVPVVRfV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgIGhhbHRfcmVxX3RpbWVvdXRfY250X25leHQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFsdF9yZXFfdGltZW91dF9jbnRfZW47Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFsdF9yZXFfdGltZW91dF9mbGFnOwotCi0vLyBIQVJUIFN0YXR1cyBzaWduYWxzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi10eXBlX3NjcjFfaGR1X2hhbHRzdGF0dXNfcyAgICAgICAgICAgICAgICAgICAgICAgICAgaGFydF9oYWx0c3RhdHVzOwotdHlwZV9zY3IxX2hkdV9oYWx0Y2F1c2VfZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcnRfaGFsdGNhdXNlOwotCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFydF9oYWx0X3BuZDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJ0X2hhbHRfYWNrOwotCi0vLyBEZWJ1ZyBtb2RlIGNhdXNlIGRlY29kZXIgc2lnbmFscwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtb2RlX2NhdXNlX3NzdGVwOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtb2RlX2NhdXNlX2V4Y2VwdDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbW9kZV9jYXVzZV9lYnJlYWs7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1vZGVfY2F1c2VfYW55OwotYGlmZGVmIFNDUjFfVERVX0VOCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1vZGVfY2F1c2VfdG1yZXE7Ci1gZW5kaWYgLy8gU0NSMV9URFVfRU4KLQotLy8gUHJvZ3JhbSBCdWZmZXIgRlNNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBQQlVGIEZTTSBjb250cm9sIHNpZ25hbHMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZnVfaGFuZHNoYWtlX2RvbmU7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGJ1Zl9leGNfaW5qX3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYnVmX2V4Y19pbmpfZW5kOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBidWZfc3RhcnRfZmV0Y2g7Ci0KLS8vIFBCVUYgRlNNIHNpZ25hbHMKLXR5cGVfc2NyMV9oZHVfcGJ1ZnN0YXRlc19lICAgICAgICAgICAgICAgICAgICAgICAgICBwYnVmX2ZzbV9jdXJyOwotdHlwZV9zY3IxX2hkdV9wYnVmc3RhdGVzX2UgICAgICAgICAgICAgICAgICAgICAgICAgIHBidWZfZnNtX25leHQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGJ1Zl9mc21faWRsZTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYnVmX2ZzbV9mZXRjaDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYnVmX2ZzbV9leGNpbmo7Ci0KLS8vIFBCVUYgYWRkcmVzcyBzaWduYWxzCi1sb2dpYyBbU0NSMV9IRFVfUEJVRl9BRERSX1dJRFRILTE6MF0gICAgICAgICAgICAgICAgcGJ1Zl9hZGRyX2ZmOwotbG9naWMgW1NDUjFfSERVX1BCVUZfQUREUl9XSURUSC0xOjBdICAgICAgICAgICAgICAgIHBidWZfYWRkcl9uZXh0OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBidWZfYWRkcl9lbmQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGJ1Zl9hZGRyX25leHRfdmQ7Ci0KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYnVmX2luc3RyX3dhaXRfbGF0Y2hpbmc7Ci0KLS8vIERlYnVncyBDU1JzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBDU1JzIHdyaXRlL3JlYWQgaW50ZXJmYWNlIHNpZ25hbHMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfdXBkX29uX2hhbHQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX3dyOwotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl93cl9kYXRhOwotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9yZF9kYXRhOwotCi0vLyBEZWJ1ZyBDb250cm9sIGFuZCBTdGF0dXMgcmVnaXN0ZXIgKERDU1IpCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2Rjc3Jfc2VsOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9kY3NyX3dyOwotdHlwZV9zY3IxX2hkdV9kY3NyX3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9kY3NyX2luOwotdHlwZV9zY3IxX2hkdV9kY3NyX3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9kY3NyX291dDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfZGNzcl9lYnJlYWttOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9kY3NyX3N0ZXBpZTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfZGNzcl9zdGVwOwotbG9naWMgW1NDUjFfSERVX0RDU1JfQ0FVU0VfQklUX0wtCi0gICAgICAgU0NSMV9IRFVfRENTUl9DQVVTRV9CSVRfUjowXSAgICAgICAgICAgICAgICAgY3NyX2Rjc3JfY2F1c2U7Ci0KLS8vIERlYnVnIFByb2dyYW0gQ291bnRlciByZWdpc3RlciAoRFBDKQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9kcGNfc2VsOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9kcGNfd3I7Ci1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2RwY19mZjsKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfZHBjX25leHQ7Ci1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2RwY19vdXQ7Ci0KLS8vIERlYnVnIFNjcmF0Y2ggcmVnaXN0ZXIgMCAoRFNDUkFUQ0gwKQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9hZGRyX2RzY3JhdGNoMDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfZHNjcmF0Y2gwX3NlbDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfZHNjcmF0Y2gwX3dyOwotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9kc2NyYXRjaDBfb3V0OwotdHlwZV9zY3IxX2Nzcl9yZXNwX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9kc2NyYXRjaDBfcmVzcDsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIERlYnVnIHN0YXRlIEZTTSBsb2dpYwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0gLy8gRGVidWcgc3RhdGUgRlNNIGxvZ2ljIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25hbCB1bml0czoKLSAvLyAtIEZTTSBjb250cm9sIGxvZ2ljCi0gLy8gLSBEZWJ1ZyBzdGF0ZSBGU00KLSAvLyAtIEZTTSB0cmFuc2l0aW9uLCB1cGRhdGUgYW5kIGV2ZW50IHJlZ2lzdGVycwotLy8KLQotLy8gRlNNIGNvbnRyb2wgbG9naWMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBkbV9jbWRfZGhhbHRlZCA9IChkbTJoZHVfY21kX2kgPT0gU0NSMV9IRFVfREJHU1RBVEVfREhBTFRFRCk7Ci1hc3NpZ24gZG1fY21kX3J1biAgICAgPSAoZG0yaGR1X2NtZF9pID09IFNDUjFfSERVX0RCR1NUQVRFX1JVTik7Ci1hc3NpZ24gZG1fY21kX2RydW4gICAgPSAoZG0yaGR1X2NtZF9pID09IFNDUjFfSERVX0RCR1NUQVRFX0RSVU4pOwotCi1hc3NpZ24gZG1fZGhhbHRfcmVxICAgPSBkbTJoZHVfY21kX3JlcV9pICYgZG1fY21kX2RoYWx0ZWQ7Ci1hc3NpZ24gZG1fcnVuX3JlcSAgICAgPSBkbTJoZHVfY21kX3JlcV9pICYgKGRtX2NtZF9ydW4gfCBkbV9jbWRfZHJ1bik7Ci0KLS8vIERlYnVnIHN0YXRlIEZTTQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgZGJnX3N0YXRlIDw9IFNDUjFfSERVX0RCR1NUQVRFX1JFU0VUOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGRiZ19zdGF0ZSA8PSBkYmdfc3RhdGVfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGlmICh+cGlwZTJoZHVfcmRjX3FsZnlfaSkgYmVnaW4KLSAgICAgICAgZGJnX3N0YXRlX25leHQgPSBTQ1IxX0hEVV9EQkdTVEFURV9SRVNFVDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICBjYXNlIChkYmdfc3RhdGUpCi0gICAgICAgICAgICBTQ1IxX0hEVV9EQkdTVEFURV9SRVNFVDogYmVnaW4KLSAgICAgICAgICAgICAgICBkYmdfc3RhdGVfbmV4dCA9IH5waXBlMmhkdV9pbml0X3BjX2kgPyBTQ1IxX0hEVV9EQkdTVEFURV9SRVNFVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZG1fZGhhbHRfcmVxICAgICAgICA/IFNDUjFfSERVX0RCR1NUQVRFX0RIQUxURUQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTQ1IxX0hEVV9EQkdTVEFURV9SVU47Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIFNDUjFfSERVX0RCR1NUQVRFX1JVTjogYmVnaW4KLSAgICAgICAgICAgICAgICBkYmdfc3RhdGVfbmV4dCA9IGRmc21fdXBkYXRlICAgICAgICAgPyBTQ1IxX0hEVV9EQkdTVEFURV9ESEFMVEVECi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogU0NSMV9IRFVfREJHU1RBVEVfUlVOOwotICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBTQ1IxX0hEVV9EQkdTVEFURV9ESEFMVEVEOiBiZWdpbgotICAgICAgICAgICAgICAgIGRiZ19zdGF0ZV9uZXh0ID0gfmRmc21fdXBkYXRlICAgICAgICA/IFNDUjFfSERVX0RCR1NUQVRFX0RIQUxURUQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGRtX2NtZF9kcnVuICAgICAgICAgPyBTQ1IxX0hEVV9EQkdTVEFURV9EUlVOCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogU0NSMV9IRFVfREJHU1RBVEVfUlVOOwotICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBTQ1IxX0hEVV9EQkdTVEFURV9EUlVOOiBiZWdpbgotICAgICAgICAgICAgICAgIGRiZ19zdGF0ZV9uZXh0ID0gZGZzbV91cGRhdGUgICAgICAgICA/IFNDUjFfSERVX0RCR1NUQVRFX0RIQUxURUQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTQ1IxX0hEVV9EQkdTVEFURV9EUlVOOwotICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBkZWZhdWx0OiBiZWdpbgotYGlmZGVmIFNDUjFfWFBST1BfRU4KLSAgICAgICAgICAgICAgICBkYmdfc3RhdGVfbmV4dCA9IFNDUjFfSERVX0RCR1NUQVRFX1hYWDsKLWBlbHNlIC8vIFNDUjFfWFBST1BfRU4KLSAgICAgICAgICAgICAgICBkYmdfc3RhdGVfbmV4dCA9IGRiZ19zdGF0ZTsKLWBlbmRpZiAvLyBTQ1IxX1hQUk9QX0VOCi0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kY2FzZQotICAgIGVuZAotZW5kCi0KLWFzc2lnbiBkYmdfc3RhdGVfZGhhbHRlZCA9IChkYmdfc3RhdGUgPT0gU0NSMV9IRFVfREJHU1RBVEVfREhBTFRFRCk7Ci1hc3NpZ24gZGJnX3N0YXRlX2RydW4gICAgPSAoZGJnX3N0YXRlID09IFNDUjFfSERVX0RCR1NUQVRFX0RSVU4pOwotYXNzaWduIGRiZ19zdGF0ZV9ydW4gICAgID0gKGRiZ19zdGF0ZSA9PSBTQ1IxX0hEVV9EQkdTVEFURV9SVU4pOwotYXNzaWduIGRiZ19zdGF0ZV9yZXNldCAgID0gKGRiZ19zdGF0ZSA9PSBTQ1IxX0hEVV9EQkdTVEFURV9SRVNFVCk7Ci0KLS8vIEZTTSB0cmFuc2l0aW9uLCB1cGRhdGUgYW5kIGV2ZW50IHJlZ2lzdGVycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgZGZzbV90cmFucyAgPD0gMSdiMDsKLSAgICAgICAgZGZzbV91cGRhdGUgPD0gMSdiMDsKLSAgICAgICAgZGZzbV9ldmVudCAgPD0gMSdiMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICBkZnNtX3RyYW5zICA8PSBkZnNtX3RyYW5zX25leHQ7Ci0gICAgICAgIGRmc21fdXBkYXRlIDw9IGRmc21fdXBkYXRlX25leHQ7Ci0gICAgICAgIGRmc21fZXZlbnQgIDw9IGRmc21fZXZlbnRfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGRmc21fdHJhbnNfbmV4dCAgPSAxJ2IwOwotICAgIGRmc21fdXBkYXRlX25leHQgPSAxJ2IwOwotICAgIGRmc21fZXZlbnRfbmV4dCAgPSAxJ2IwOwotCi0gICAgaWYgKH5waXBlMmhkdV9yZGNfcWxmeV9pKSBiZWdpbgotICAgICAgICBkZnNtX3RyYW5zX25leHQgID0gMSdiMDsKLSAgICAgICAgZGZzbV91cGRhdGVfbmV4dCA9IDEnYjA7Ci0gICAgICAgIGRmc21fZXZlbnRfbmV4dCAgPSAxJ2IxOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGNhc2UgKGRiZ19zdGF0ZSkKLSAgICAgICAgICAgIFNDUjFfSERVX0RCR1NUQVRFX1JFU0VUOiBiZWdpbgotICAgICAgICAgICAgICAgIGRmc21fdHJhbnNfbmV4dCAgPSAxJ2IwOwotICAgICAgICAgICAgICAgIGRmc21fdXBkYXRlX25leHQgPSAxJ2IwOwotICAgICAgICAgICAgICAgIGRmc21fZXZlbnRfbmV4dCAgPSBwaXBlMmhkdV9pbml0X3BjX2kgJiB+ZG0yaGR1X2NtZF9yZXFfaTsKLSAgICAgICAgICAgIGVuZAotCi0gICAgICAgICAgICBTQ1IxX0hEVV9EQkdTVEFURV9SVU4sCi0gICAgICAgICAgICBTQ1IxX0hEVV9EQkdTVEFURV9EUlVOOiBiZWdpbgotICAgICAgICAgICAgICAgIGRmc21fdHJhbnNfbmV4dCAgPSB+ZGZzbV91cGRhdGUgPyBoYXJ0X2hhbHRfcG5kIDogZGZzbV90cmFuczsKLSAgICAgICAgICAgICAgICBkZnNtX3VwZGF0ZV9uZXh0ID0gfmRmc21fdXBkYXRlICYgaGFydF9oYWx0X2FjazsKLSAgICAgICAgICAgICAgICBkZnNtX2V2ZW50X25leHQgID0gZGZzbV91cGRhdGU7Ci0gICAgICAgICAgICBlbmQKLQotICAgICAgICAgICAgU0NSMV9IRFVfREJHU1RBVEVfREhBTFRFRDogYmVnaW4KLSAgICAgICAgICAgICAgICBkZnNtX3RyYW5zX25leHQgID0gfmRmc21fdXBkYXRlID8gfmRmc21fdHJhbnMgJiBkbV9ydW5fcmVxCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGRmc21fdHJhbnM7Ci0gICAgICAgICAgICAgICAgZGZzbV91cGRhdGVfbmV4dCA9IH5kZnNtX3VwZGF0ZSAmIGRmc21fdHJhbnM7Ci0gICAgICAgICAgICAgICAgZGZzbV9ldmVudF9uZXh0ICA9IGRmc21fdXBkYXRlOwotICAgICAgICAgICAgZW5kCi0KLSAgICAgICAgICAgIGRlZmF1bHQgOiBiZWdpbgotICAgICAgICAgICAgICAgIGRmc21fdHJhbnNfbmV4dCAgPSAnWDsKLSAgICAgICAgICAgICAgICBkZnNtX3VwZGF0ZV9uZXh0ID0gJ1g7Ci0gICAgICAgICAgICAgICAgZGZzbV9ldmVudF9uZXh0ICA9ICdYOwotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZGNhc2UKLSAgICBlbmQKLWVuZAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSEFSVCBDb250cm9sIGxvZ2ljCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLSAvLyBIQVJUIENvbnRyb2wgbG9naWMgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbmFsIHVuaXRzOgotIC8vIC0gQ29udHJvbCBzaWduYWxzCi0gLy8gLSBIQVJUIFJ1biBDb250cm9sIHJlZ2lzdGVyCi0gLy8gLSBIQVJUIEhhbHQgUmVxdWVzdCBUaW1lLU91dCBjb3VudGVyCi0vLwotCi0vLyBDb250cm9sIGxvZ2ljCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGhhcnRfY21kX3JlcSA9IDEnYjA7Ci0KLSAgICBpZiAofnBpcGUyaGR1X3JkY19xbGZ5X2kpIGJlZ2luCi0gICAgICAgIGhhcnRfY21kX3JlcSA9IDEnYjA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgY2FzZSAoZGJnX3N0YXRlKQotICAgICAgICAgICAgU0NSMV9IRFVfREJHU1RBVEVfUkVTRVQgIDogaGFydF9jbWRfcmVxID0gZG0yaGR1X2NtZF9yZXFfaTsKLSAgICAgICAgICAgIFNDUjFfSERVX0RCR1NUQVRFX0RIQUxURUQ6IGhhcnRfY21kX3JlcSA9IChkZnNtX3VwZGF0ZSB8IGRmc21fdHJhbnMpOwotICAgICAgICAgICAgU0NSMV9IRFVfREJHU1RBVEVfUlVOLAotICAgICAgICAgICAgU0NSMV9IRFVfREJHU1RBVEVfRFJVTiAgIDogaGFydF9jbWRfcmVxID0gfmRmc21fdXBkYXRlICYgZGZzbV90cmFuczsKLSAgICAgICAgICAgIGRlZmF1bHQgICAgICAgICAgICAgICAgICA6IGhhcnRfY21kX3JlcSA9ICdYOwotICAgICAgICBlbmRjYXNlCi0gICAgZW5kCi1lbmQKLQotYXNzaWduIGhhcnRfaGFsdF9yZXEgICA9IGRtX2NtZF9kaGFsdGVkICYgaGFydF9jbWRfcmVxOwotYXNzaWduIGhhcnRfcmVzdW1lX3JlcSA9IChkbV9jbWRfcnVuIHwgZG1fY21kX2RydW4pICYgaGFydF9jbWRfcmVxOwotCi0vLyBIQVJUIFJ1biBDb250cm9sIHJlZ2lzdGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gaGFydF9ydW5jdHJsX2NsciA9IChkYmdfc3RhdGVfcnVuIHwgZGJnX3N0YXRlX2RydW4pCi0gICAgICAgICAgICAgICAgICAgICAgICAmIChkYmdfc3RhdGVfbmV4dCA9PSBTQ1IxX0hEVV9EQkdTVEFURV9ESEFMVEVEKTsKLWFzc2lnbiBoYXJ0X3J1bmN0cmxfdXBkID0gZGJnX3N0YXRlX2RoYWx0ZWQgJiBkZnNtX3RyYW5zX25leHQ7Ci0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGhhcnRfcnVuY3RybC5pcnFfZHNibCAgICAgIDw9IDEnYjA7Ci0gICAgICAgIGhhcnRfcnVuY3RybC5mZXRjaF9zcmMgICAgIDw9IFNDUjFfSERVX0ZFVENIX1NSQ19OT1JNQUw7Ci0gICAgICAgIGhhcnRfcnVuY3RybC5wY19hZHZtdF9kc2JsIDw9IDEnYjA7Ci0gICAgICAgIGhhcnRfcnVuY3RybC5od2Jya3B0X2RzYmwgIDw9IDEnYjA7Ci0gICAgICAgIGhhcnRfcnVuY3RybC5yZWRpcmVjdCAgICAgIDw9ICcwOwotICAgIGVuZCBlbHNlIGlmKGNsa19lbikgYmVnaW4KLSAgICAgICAgaWYgKGhhcnRfcnVuY3RybF9jbHIpIGJlZ2luCi0gICAgICAgICAgICBoYXJ0X3J1bmN0cmwgICAgICAgICAgIDw9ICcwOwotICAgICAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICAgICAgaWYgKGhhcnRfcnVuY3RybF91cGQpIGJlZ2luCi0gICAgICAgICAgICAgICAgaWYgKH5kbV9jbWRfZHJ1bikgYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgLy8gQ2FzZSA6IHJlc3VtZSB0byBSVU4gc3RhdGUKLSAgICAgICAgICAgICAgICAgICAgaGFydF9ydW5jdHJsLmlycV9kc2JsICAgICAgICA8PSBjc3JfZGNzcl9zdGVwID8gfmNzcl9kY3NyX3N0ZXBpZSA6IDEnYjA7Ci0gICAgICAgICAgICAgICAgICAgIGhhcnRfcnVuY3RybC5mZXRjaF9zcmMgICAgICAgPD0gU0NSMV9IRFVfRkVUQ0hfU1JDX05PUk1BTDsKLSAgICAgICAgICAgICAgICAgICAgaGFydF9ydW5jdHJsLnBjX2Fkdm10X2RzYmwgICA8PSAxJ2IwOwotICAgICAgICAgICAgICAgICAgICBoYXJ0X3J1bmN0cmwuaHdicmtwdF9kc2JsICAgIDw9IDEnYjA7Ci0gICAgICAgICAgICAgICAgICAgIGhhcnRfcnVuY3RybC5yZWRpcmVjdC5zc3RlcCAgPD0gY3NyX2Rjc3Jfc3RlcDsKLSAgICAgICAgICAgICAgICAgICAgaGFydF9ydW5jdHJsLnJlZGlyZWN0LmVicmVhayA8PSBjc3JfZGNzcl9lYnJlYWttOwotICAgICAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgIC8vIENhc2UgOiByZXN1bWUgdG8gRFJVTiBzdGF0ZQotICAgICAgICAgICAgICAgICAgICBoYXJ0X3J1bmN0cmwuaXJxX2RzYmwgICAgICAgIDw9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgIGhhcnRfcnVuY3RybC5mZXRjaF9zcmMgICAgICAgPD0gU0NSMV9IRFVfRkVUQ0hfU1JDX1BCVUY7Ci0gICAgICAgICAgICAgICAgICAgIGhhcnRfcnVuY3RybC5wY19hZHZtdF9kc2JsICAgPD0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgaGFydF9ydW5jdHJsLmh3YnJrcHRfZHNibCAgICA8PSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICBoYXJ0X3J1bmN0cmwucmVkaXJlY3Quc3N0ZXAgIDw9IDEnYjA7Ci0gICAgICAgICAgICAgICAgICAgIGhhcnRfcnVuY3RybC5yZWRpcmVjdC5lYnJlYWsgPD0gMSdiMTsKLSAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmQKLSAgICBlbmQKLWVuZAotCi0vLyBIQVJUIEhhbHQgUmVxdWVzdCBUaW1lLU91dCBjb3VudGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSEFSVCBnb2VzIGludG8gaGFsdCBzdGF0ZSBvbmx5IGlmIHRoZSBoYWx0IHJlcXVlc3QgaXMgcHJlc2VudCBmb3IgdGltZW91dCBwZXJpb2QKLS8vIG9mIHRpbWUKLQotYXNzaWduIGhhbHRfcmVxX3RpbWVvdXRfY250X2VuID0gaGR1MmV4dV9kYmdfaGFsdDJydW5fbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKGhhcnRfaGFsdF9yZXEgJiB+aGR1MmV4dV9kYmdfcnVuMmhhbHRfbyk7Ci0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGhhbHRfcmVxX3RpbWVvdXRfY250IDw9ICcxOwotICAgIGVuZCBlbHNlIGlmIChoYWx0X3JlcV90aW1lb3V0X2NudF9lbikgYmVnaW4KLSAgICAgICAgaGFsdF9yZXFfdGltZW91dF9jbnQgPD0gaGFsdF9yZXFfdGltZW91dF9jbnRfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gaGFsdF9yZXFfdGltZW91dF9jbnRfbmV4dCA9IGhkdTJleHVfZGJnX2hhbHQycnVuX28gICAgICAgICAgICAgICAgICAgID8gJzEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGhhcnRfaGFsdF9yZXEgJiB+aGR1MmV4dV9kYmdfcnVuMmhhbHRfbykgPyBoYWx0X3JlcV90aW1lb3V0X2NudCAtIDEnYjEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBoYWx0X3JlcV90aW1lb3V0X2NudDsKLQotYXNzaWduIGhhbHRfcmVxX3RpbWVvdXRfZmxhZyA9IH58aGFsdF9yZXFfdGltZW91dF9jbnQ7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBIQVJUIFN0YXR1cyBsb2dpYwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0gLy8gSEFSVCBTdGF0dXMgbG9naWMgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbmFsIHVuaXRzOgotIC8vIC0gRGVidWcgbW9kZSBjYXVzZSBkZWNvZGVyCi0gLy8gLSBIYXJ0IGhhbHQgc3RhdHVzIGNhdXNlIGVuY29kZXIKLSAvLyAtIEhhcnQgaGFsdCBzdGF0dXMgcmVnaXN0ZXIKLS8vCi0KLS8vIERlYnVnIG1vZGUgY2F1c2UgZGVjb2RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIGRtb2RlX2NhdXNlX3NzdGVwICA9IGhhcnRfcnVuY3RybC5yZWRpcmVjdC5zc3RlcCAmIHBpcGUyaGR1X2luc3RyZXRfaTsKLWFzc2lnbiBkbW9kZV9jYXVzZV9leGNlcHQgPSBkYmdfc3RhdGVfZHJ1biAmIHBpcGUyaGR1X2V4dV9leGNfcmVxX2kKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJiB+cGlwZTJoZHVfYnJrcHRfaQotYGlmZGVmIFNDUjFfVERVX0VOCi0gICAgICAgICAgICAgICAgICAgICAgICAgICYgfmV4dTJoZHVfaWJya3B0X2h3X2kKLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotICAgICAgICAgICAgICAgICAgICAgICAgICA7Ci1hc3NpZ24gZG1vZGVfY2F1c2VfZWJyZWFrID0gaGFydF9ydW5jdHJsLnJlZGlyZWN0LmVicmVhayAmIHBpcGUyaGR1X2Jya3B0X2k7Ci1gaWZkZWYgU0NSMV9URFVfRU4KLWFzc2lnbiBkbW9kZV9jYXVzZV90bXJlcSAgPSB0ZHUyaGR1X2Rtb2RlX3JlcV9pICYgZXh1MmhkdV9pYnJrcHRfaHdfaTsKLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotCi1hc3NpZ24gZG1vZGVfY2F1c2VfYW55ID0gZG1vZGVfY2F1c2Vfc3N0ZXAgfCBkbW9kZV9jYXVzZV9lYnJlYWsgfCBkbW9kZV9jYXVzZV9leGNlcHQKLSAgICAgICAgICAgICAgICAgICAgICAgfCBoYXJ0X2hhbHRfcmVxCi1gaWZkZWYgU0NSMV9URFVfRU4KLSAgICAgICAgICAgICAgICAgICAgICAgfCBkbW9kZV9jYXVzZV90bXJlcQotYGVuZGlmIC8vIFNDUjFfVERVX0VOCi0gICAgICAgICAgICAgICAgICAgICAgIDsKLQotLy8gSEFSVCBoYWx0IGNhdXNlIGVuY29kZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgY2FzZSAoMSdiMSkKLWBpZmRlZiBTQ1IxX1REVV9FTgotICAgICAgICBkbW9kZV9jYXVzZV90bXJlcSAgIDogaGFydF9oYWx0Y2F1c2UgPSBTQ1IxX0hEVV9IQUxUQ0FVU0VfVE1SRVE7Ci1gZW5kaWYgLy8gU0NSMV9URFVfRU4KLSAgICAgICAgZG1vZGVfY2F1c2VfZWJyZWFrICA6IGhhcnRfaGFsdGNhdXNlID0gU0NSMV9IRFVfSEFMVENBVVNFX0VCUkVBSzsKLSAgICAgICAgaGFydF9oYWx0X3JlcSAgICAgICA6IGhhcnRfaGFsdGNhdXNlID0gU0NSMV9IRFVfSEFMVENBVVNFX0RNUkVROwotICAgICAgICBkbW9kZV9jYXVzZV9zc3RlcCAgIDogaGFydF9oYWx0Y2F1c2UgPSBTQ1IxX0hEVV9IQUxUQ0FVU0VfU1NURVA7Ci0gICAgICAgIGRlZmF1bHQgICAgICAgICAgICAgOiBoYXJ0X2hhbHRjYXVzZSA9IFNDUjFfSERVX0hBTFRDQVVTRV9OT05FOwotICAgIGVuZGNhc2UKLWVuZAotCi0vLyBIQVJUIGhhbHQgc3RhdHVzIHJlZ2lzdGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICBoYXJ0X2hhbHRzdGF0dXMgICAgICAgIDw9ICcwOwotICAgIGVuZCBlbHNlIGlmIChoYXJ0X2hhbHRfYWNrKSBiZWdpbgotICAgICAgICBoYXJ0X2hhbHRzdGF0dXMuZXhjZXB0IDw9IGRtb2RlX2NhdXNlX2V4Y2VwdDsKLSAgICAgICAgaGFydF9oYWx0c3RhdHVzLmNhdXNlICA8PSBoYXJ0X2hhbHRjYXVzZTsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gaGFydF9oYWx0X3BuZCA9IChkZnNtX3RyYW5zIHwgZG1fZGhhbHRfcmVxKSAmIH5oYXJ0X2hhbHRfYWNrOwotYXNzaWduIGhhcnRfaGFsdF9hY2sgPSB+aGR1MmV4dV9kYmdfaGFsdGVkX28KLSAgICAgICAgICAgICAgICAgICAgICYgKGhhbHRfcmVxX3RpbWVvdXRfZmxhZyB8ICh+cGlwZTJoZHVfZXh1X2J1c3lfaSAmIGRtb2RlX2NhdXNlX2FueSkpOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUHJvZ3JhbSBCdWZmZXIgKFBCVUYpIGxvZ2ljCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLSAvLyBQcm9ncmFtIEJ1ZmZlciBhbGxvd3MgdG8gZXhlY3V0ZSBzbWFsbCBwcm9ncmFtcyBpbiBkZWJ1ZyBtb2RlCi0vLwotCi0vLyBUbyB0ZXJtaW5hdGUgUHJvZ3JhbSBCdWZmZXIgZXhlY3V0aW9uIGV4Y2VwdGlvbiBzaG91bGQgYmUgcmFpc2VkLiBUaGVyZSBhcmUgMgotLy8gY2FzZXM6Ci0vLyAtIE9uZSBvZiBQQlVGIGluc3RydWN0aW9ucyByYWlzZSBhbiBleGNlcHRpb24KLS8vIC0gTm8gUEJVRiBpbnN0cnVjdGlvbiByYWlzZSBhbiBleGNlcHRpb24gYmVmb3JlIHRoZSBsYXN0IFBCVUYgaW5zdHJ1Y3Rpb24gaGFzCi0vLyBiZWVuIGlzc3VlZC4gSW4gdGhpcyBjYXNlIEZTTSBnb2VzIGludG8gRVhDSU5KRUNUIHN0YXRlIGFuZCBhbiAiSW5zdHJ1Y3Rpb24KLS8vIGZldGNoIGFjY2VzcyBmYXVsdCIgZXhjZXB0aW9uIGlzIGluamVjdGVkCi0KLS8vIFBCVUYgRlNNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gaWZ1X2hhbmRzaGFrZV9kb25lID0gaGR1MmlmdV9wYnVmX2luc3RyX3ZkX28gJiBpZnUyaGR1X3BidWZfaW5zdHJfcmR5X2k7Ci1hc3NpZ24gcGJ1Zl9hZGRyX2VuZCAgICAgID0gKHBidWZfYWRkcl9mZiA9PSAoU0NSMV9IRFVfUEJVRl9BRERSX1NQQU4tMSkpOwotCi1hc3NpZ24gcGJ1Zl9zdGFydF9mZXRjaCA9IGRiZ19zdGF0ZV9kaGFsdGVkICAgICAgJiAoZGJnX3N0YXRlX25leHQgPT0gU0NSMV9IRFVfREJHU1RBVEVfRFJVTik7Ci1hc3NpZ24gcGJ1Zl9leGNfaW5qX3JlcSA9IGlmdV9oYW5kc2hha2VfZG9uZSAgICAgJiBwYnVmX2FkZHJfZW5kOwotYXNzaWduIHBidWZfZXhjX2lual9lbmQgPSBwaXBlMmhkdV9leHVfZXhjX3JlcV9pIHwgaWZ1X2hhbmRzaGFrZV9kb25lOwotCi1hbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICBwYnVmX2ZzbV9jdXJyIDw9IFNDUjFfSERVX1BCVUZTVEFURV9JRExFOwotICAgIGVuZCBlbHNlIGlmKGNsa19lbikgYmVnaW4KLSAgICAgICAgcGJ1Zl9mc21fY3VyciA8PSBwYnVmX2ZzbV9uZXh0OwotICAgIGVuZAotZW5kCi0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgY2FzZSAocGJ1Zl9mc21fY3VycikKLSAgICAgICAgU0NSMV9IRFVfUEJVRlNUQVRFX0lETEU6IGJlZ2luCi0gICAgICAgICAgICBwYnVmX2ZzbV9uZXh0ID0gcGJ1Zl9zdGFydF9mZXRjaCAgICAgICA/IFNDUjFfSERVX1BCVUZTVEFURV9GRVRDSAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTQ1IxX0hEVV9QQlVGU1RBVEVfSURMRTsKLSAgICAgICAgZW5kCi0gICAgICAgIFNDUjFfSERVX1BCVUZTVEFURV9GRVRDSDogYmVnaW4KLSAgICAgICAgICAgIHBidWZfZnNtX25leHQgPSBwaXBlMmhkdV9leHVfZXhjX3JlcV9pID8gU0NSMV9IRFVfUEJVRlNUQVRFX1dBSVQ0RU5ECi0gICAgICAgICAgICAgICAgICAgICAgICAgIDogcGJ1Zl9leGNfaW5qX3JlcSAgICAgICA/IFNDUjFfSERVX1BCVUZTVEFURV9FWENJTkpFQ1QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogU0NSMV9IRFVfUEJVRlNUQVRFX0ZFVENIOwotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9IRFVfUEJVRlNUQVRFX0VYQ0lOSkVDVDogYmVnaW4KLSAgICAgICAgICAgIHBidWZfZnNtX25leHQgPSBwYnVmX2V4Y19pbmpfZW5kICAgICAgID8gU0NSMV9IRFVfUEJVRlNUQVRFX1dBSVQ0RU5ECi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfSERVX1BCVUZTVEFURV9FWENJTkpFQ1Q7Ci0gICAgICAgIGVuZAotICAgICAgICBTQ1IxX0hEVV9QQlVGU1RBVEVfV0FJVDRFTkQ6IGJlZ2luCi0gICAgICAgICAgICBwYnVmX2ZzbV9uZXh0ID0gaGR1MmV4dV9kYmdfaGFsdGVkX28gICA/IFNDUjFfSERVX1BCVUZTVEFURV9JRExFCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfSERVX1BCVUZTVEFURV9XQUlUNEVORDsKLSAgICAgICAgZW5kCi0gICAgZW5kY2FzZQotZW5kCi0KLWFzc2lnbiBwYnVmX2ZzbV9pZGxlICAgPSAocGJ1Zl9mc21fY3VyciA9PSBTQ1IxX0hEVV9QQlVGU1RBVEVfSURMRSk7Ci1hc3NpZ24gcGJ1Zl9mc21fZmV0Y2ggID0gKHBidWZfZnNtX2N1cnIgPT0gU0NSMV9IRFVfUEJVRlNUQVRFX0ZFVENIKTsKLWFzc2lnbiBwYnVmX2ZzbV9leGNpbmogPSAocGJ1Zl9mc21fY3VyciA9PSBTQ1IxX0hEVV9QQlVGU1RBVEVfRVhDSU5KRUNUKTsKLQotLy8gUHJvZ3JhbSBCdWZmZXIgYWRkcmVzcyByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIHBidWZfYWRkcl9uZXh0X3ZkID0gcGJ1Zl9mc21fZmV0Y2ggICAgICAgICAgJiBpZnVfaGFuZHNoYWtlX2RvbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAmIH5waXBlMmhkdV9leHVfZXhjX3JlcV9pICYgfnBidWZfYWRkcl9lbmQ7Ci0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIHBidWZfYWRkcl9mZiA8PSAnMDsKLSAgICBlbmQgZWxzZSBpZihjbGtfZW4pIGJlZ2luCi0gICAgICAgIHBidWZfYWRkcl9mZiA8PSBwYnVmX2FkZHJfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gcGJ1Zl9hZGRyX25leHQgPSBwYnVmX2ZzbV9pZGxlICAgICA/ICcwCi0gICAgICAgICAgICAgICAgICAgICAgOiBwYnVmX2FkZHJfbmV4dF92ZCA/IHBidWZfYWRkcl9mZiArIDEnYjEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcGJ1Zl9hZGRyX2ZmOwotCi0vLyBQYXNzIGluc3RydWN0aW9uIGZyb20gZGVidWcgcHJvZ3JhbSBidWZmZXIgdG8gY3B1IHBpcGVsaW5lIHdpdGggdHdvIG9wdGlvbnM6Ci0vLyAtIHRocm91Z2ggcmVnaXN0ZXIsIGJldHRlciBmb3IgZnJlcXVlbmN5Ci0vLyAtIHRocm91Z2ggd2lyZXMsIGJldHRlciBmb3IgYXJlYQotZ2VuZXJhdGUgaWYgKEhBUlRfUEJVRl9JTlNUUl9SRUdPVVRfRU4pIGJlZ2luCi0gICAgYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24pIGJlZ2luCi0gICAgICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgICAgICBwYnVmX2luc3RyX3dhaXRfbGF0Y2hpbmcgPD0gMSdiMDsKLSAgICAgICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgICAgIHBidWZfaW5zdHJfd2FpdF9sYXRjaGluZyA8PSBpZnVfaGFuZHNoYWtlX2RvbmU7Ci0gICAgICAgIGVuZAotICAgIGVuZAotZW5kIGVsc2UgYmVnaW4KLSAgICBhc3NpZ24gcGJ1Zl9pbnN0cl93YWl0X2xhdGNoaW5nID0gMSdiMDsKLWVuZCBlbmRnZW5lcmF0ZQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRGVidWcgQ1NScwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIGNzcl91cGRfb25faGFsdCA9IChkYmdfc3RhdGVfcmVzZXQgfCBkYmdfc3RhdGVfcnVuKQotICAgICAgICAgICAgICAgICAgICAgICAmIChkYmdfc3RhdGVfbmV4dCA9PSBTQ1IxX0hEVV9EQkdTVEFURV9ESEFMVEVEKTsKLQotLy8gQ1NScyBzZWxlY3QgbG9naWMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19jb21iIGJlZ2luIDogY3NyX2lmX3JlZ3NlbAotICAgIGNzcl9kY3NyX3NlbCAgICAgICAgPSAxJ2IwOwotICAgIGNzcl9kcGNfc2VsICAgICAgICAgPSAxJ2IwOwotICAgIGNzcl9kc2NyYXRjaDBfc2VsICAgPSAxJ2IwOwotICAgIC8vY3NyX2RzY3JhdGNoMV9zZWwgICA9IDEnYjA7Ci0KLSAgICBpZiAoY3NyMmhkdV9yZXFfaSkgYmVnaW4KLSAgICAgICAgY2FzZSAoY3NyMmhkdV9hZGRyX2kpCi0gICAgICAgICAgICBTQ1IxX0hEVV9EQkdDU1JfT0ZGU19EQ1NSICAgICA6IGNzcl9kY3NyX3NlbCAgICAgID0gMSdiMTsKLSAgICAgICAgICAgIFNDUjFfSERVX0RCR0NTUl9PRkZTX0RQQyAgICAgIDogY3NyX2RwY19zZWwgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgU0NSMV9IRFVfREJHQ1NSX09GRlNfRFNDUkFUQ0gwOiBjc3JfZHNjcmF0Y2gwX3NlbCA9IDEnYjE7Ci0gICAgICAgICAgICBkZWZhdWx0IDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2Rjc3Jfc2VsICAgICAgPSAxJ2JYOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfZHBjX3NlbCAgICAgICA9IDEnYlg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9kc2NyYXRjaDBfc2VsID0gMSdiWDsKLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmRjYXNlCi0gICAgZW5kCi1lbmQgOiBjc3JfaWZfcmVnc2VsCi0KLS8vIENTUnMgcmVhZCBpbnRlcmZhY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBjc3JfcmRfZGF0YSA9IGNzcl9kY3NyX291dCB8IGNzcl9kcGNfb3V0IHwgY3NyX2RzY3JhdGNoMF9vdXQ7Ci0KLS8vIENTUnMgd3JpdGUgaW50ZXJmYWNlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gY3NyX3dyID0gY3NyMmhkdV9yZXFfaTsKLQotYWx3YXlzX2NvbWIgYmVnaW4gOiBjc3JfaWZfd3JpdGUKLSAgICBjc3Jfd3JfZGF0YSAgICAgPSAnMDsKLQotICAgIGlmIChjc3IyaGR1X3JlcV9pKSBiZWdpbgotICAgICAgICBjYXNlIChjc3IyaGR1X2NtZF9pKQotICAgICAgICAgICAgU0NSMV9DU1JfQ01EX1dSSVRFIDogY3NyX3dyX2RhdGEgPSBjc3IyaGR1X3dkYXRhX2k7Ci0gICAgICAgICAgICBTQ1IxX0NTUl9DTURfU0VUICAgOiBjc3Jfd3JfZGF0YSA9IGNzcl9yZF9kYXRhIHwgY3NyMmhkdV93ZGF0YV9pOwotICAgICAgICAgICAgU0NSMV9DU1JfQ01EX0NMRUFSIDogY3NyX3dyX2RhdGEgPSBjc3JfcmRfZGF0YSAmICh+Y3NyMmhkdV93ZGF0YV9pKTsKLSAgICAgICAgICAgIGRlZmF1bHQgICAgICAgICAgICA6IGNzcl93cl9kYXRhID0gJ1g7Ci0gICAgICAgIGVuZGNhc2UKLSAgICBlbmQKLWVuZCA6IGNzcl9pZl93cml0ZQotCi0vLyBEZWJ1ZyBDb250cm9sIGFuZCBTdGF0dXMgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBTZXR1cHMgdGhlIEhBUlQgYmVoYXZpb3VyIGluIERlYnVnIE1vZGUgYW5kIGhvbGRzIERlYnVnIHN0YXR1cyBpbmZvcm1hdGlvbgotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGNzcl9kY3NyX2luICAgICAgICAgICAgICAgICA9IGNzcl93cl9kYXRhOwotICAgIGNzcl9kY3NyX3dyICAgICAgICAgICAgICAgICA9IGNzcl93ciAmIGNzcl9kY3NyX3NlbDsKLQotICAgIGNzcl9kY3NyX291dCAgICAgICAgICAgICAgICA9ICcwOwotICAgIGlmIChjc3JfZGNzcl9zZWwpIGJlZ2luCi0gICAgICAgIGNzcl9kY3NyX291dC54ZGVidWd2ZXIgID0gU0NSMV9IRFVfREVCVUdDU1JfRENTUl9YREVCVUdWRVI7Ci0gICAgICAgIGNzcl9kY3NyX291dC5lYnJlYWttICAgID0gY3NyX2Rjc3JfZWJyZWFrbTsKLSAgICAgICAgY3NyX2Rjc3Jfb3V0LnN0ZXBpZSAgICAgPSBjc3JfZGNzcl9zdGVwaWU7Ci0gICAgICAgIGNzcl9kY3NyX291dC5zdGVwICAgICAgID0gY3NyX2Rjc3Jfc3RlcDsKLSAgICAgICAgY3NyX2Rjc3Jfb3V0LnBydiAgICAgICAgPSAyJ2IxMTsKLSAgICAgICAgY3NyX2Rjc3Jfb3V0LmNhdXNlICAgICAgPSBjc3JfZGNzcl9jYXVzZTsKLSAgICBlbmQKLWVuZAotCi1hbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICBjc3JfZGNzcl9lYnJlYWttICAgICAgICA8PSAxJ2IwOwotICAgICAgICBjc3JfZGNzcl9zdGVwaWUgICAgICAgICA8PSAxJ2IwOwotICAgICAgICBjc3JfZGNzcl9zdGVwICAgICAgICAgICA8PSAxJ2IwOwotICAgIGVuZCBlbHNlIGlmKGNsa19lbikgYmVnaW4KLSAgICAgICAgaWYgKGNzcl9kY3NyX3dyKSBiZWdpbgotICAgICAgICAgICAgY3NyX2Rjc3JfZWJyZWFrbSAgICA8PSBjc3JfZGNzcl9pbi5lYnJlYWttOwotICAgICAgICAgICAgY3NyX2Rjc3Jfc3RlcGllICAgICA8PSBjc3JfZGNzcl9pbi5zdGVwaWU7Ci0gICAgICAgICAgICBjc3JfZGNzcl9zdGVwICAgICAgIDw9IGNzcl9kY3NyX2luLnN0ZXA7Ci0gICAgICAgIGVuZAotICAgIGVuZAotZW5kCi0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGNzcl9kY3NyX2NhdXNlIDw9IDEnYjA7Ci0gICAgZW5kIGVsc2UgaWYoY2xrX2VuKSBiZWdpbgotICAgICAgICBpZihjc3JfdXBkX29uX2hhbHQpIGJlZ2luCi0gICAgICAgICAgICBjc3JfZGNzcl9jYXVzZSA8PSBoYXJ0X2hhbHRzdGF0dXMuY2F1c2U7Ci0gICAgICAgIGVuZAotICAgIGVuZAotZW5kCi0KLS8vIERlYnVnIFBDIHJlZ2lzdGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gU2F2ZXMgdGhlIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgbmV4dCBpbnN0cnVjdGlvbiB0byBiZSBleGVjdXRlZCB3aGVuIERlYnVnCi0vLyBNb2RlIGlzIGVudGVyZWQuIENvdWxkIGJlIGNoYW5nZWQgYnkgZGVidWdnZXIKLQotYXNzaWduIGNzcl9kcGNfd3IgICA9IGNzcl93ciAmIGNzcl9kcGNfc2VsOwotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICBjc3JfZHBjX2ZmIDw9ICcwOwotICAgIGVuZCBlbHNlIGlmKGNsa19lbikgYmVnaW4KLSAgICAgICAgY3NyX2RwY19mZiA8PSBjc3JfZHBjX25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIGNzcl9kcGNfbmV4dCA9IGNzcl91cGRfb25faGFsdCA/IHBpcGUyaGR1X3BjX2N1cnJfaQotICAgICAgICAgICAgICAgICAgICA6IGNzcl9kcGNfd3IgICAgICA/IGNzcl93cl9kYXRhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3NyX2RwY19mZjsKLWFzc2lnbiBjc3JfZHBjX291dCAgPSBjc3JfZHBjX3NlbCAgICAgPyBjc3JfZHBjX2ZmIDogJzA7Ci0KLS8vIERlYnVnIFNjcmF0Y2ggMCByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIGNzcl9kc2NyYXRjaDBfcmVzcCA9ICh+ZG0yaGR1X2RyZWdfcmVzcF9pIHwgZG0yaGR1X2RyZWdfZmFpbF9pKQotICAgICAgICAgICAgICAgICAgICAgICAgICA/IFNDUjFfQ1NSX1JFU1BfRVIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTQ1IxX0NTUl9SRVNQX09LOwotYXNzaWduIGNzcl9kc2NyYXRjaDBfb3V0ICA9IGNzcl9kc2NyYXRjaDBfc2VsID8gZG0yaGR1X2RyZWdfcmRhdGFfaSA6ICcwOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSERVIDwtPiBETSBpbnRlcmZhY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBoZHUyZG1faGFydF9ldmVudF9vID0gZGZzbV9ldmVudDsKLQotLy8gSEFSVCBzdGF0dXMKLWFsd2F5c19jb21iIGJlZ2luCi0gICAgaGR1MmRtX2hhcnRfc3RhdHVzX28gICAgICAgICAgID0gJzA7Ci0gICAgaGR1MmRtX2hhcnRfc3RhdHVzX28uZGJnX3N0YXRlID0gZGJnX3N0YXRlOwotICAgIGhkdTJkbV9oYXJ0X3N0YXR1c19vLmV4Y2VwdCAgICA9IGRiZ19zdGF0ZV9kaGFsdGVkICYgaGFydF9oYWx0c3RhdHVzLmV4Y2VwdDsKLSAgICBoZHUyZG1faGFydF9zdGF0dXNfby5lYnJlYWsgICAgPSBkYmdfc3RhdGVfZGhhbHRlZCAmIChoYXJ0X2hhbHRzdGF0dXMuY2F1c2UgPT0gU0NSMV9IRFVfSEFMVENBVVNFX0VCUkVBSyk7Ci1lbmQKLQotYXNzaWduIGhkdTJkbV9jbWRfcmNvZGVfbyA9IGRiZ19zdGF0ZV9yZXNldAotICAgICAgICAgICAgICAgICAgICAgICAgICA/IH5waXBlMmhkdV9yZGNfcWxmeV9pIHwgfnBpcGUyaGR1X2luaXRfcGNfaSB8IH5kbTJoZHVfY21kX3JlcV9pCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDogfnBpcGUyaGR1X3JkY19xbGZ5X2kgfCB+ZGZzbV91cGRhdGU7Ci0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgaGR1MmRtX2NtZF9yZXNwX28gICA9IDEnYjA7Ci0KLSAgICBjYXNlIChkYmdfc3RhdGUpCi0gICAgICAgIFNDUjFfSERVX0RCR1NUQVRFX1JFU0VUOiBiZWdpbgotICAgICAgICAgICAgaGR1MmRtX2NtZF9yZXNwX28gID0gcGlwZTJoZHVfcmRjX3FsZnlfaSAmIHBpcGUyaGR1X2luaXRfcGNfaSAmIGRtMmhkdV9jbWRfcmVxX2k7Ci0gICAgICAgIGVuZAotCi0gICAgICAgIFNDUjFfSERVX0RCR1NUQVRFX1JVTjogYmVnaW4KLSAgICAgICAgICAgIGhkdTJkbV9jbWRfcmVzcF9vICA9IHBpcGUyaGR1X3JkY19xbGZ5X2kgJiBkZnNtX3VwZGF0ZSAmIGRtMmhkdV9jbWRfcmVxX2k7Ci0gICAgICAgIGVuZAotCi0gICAgICAgIFNDUjFfSERVX0RCR1NUQVRFX0RIQUxURUQ6IGJlZ2luCi0gICAgICAgICAgICBoZHUyZG1fY21kX3Jlc3BfbyAgPSBwaXBlMmhkdV9yZGNfcWxmeV9pID8gZGZzbV91cGRhdGUgOiBkbTJoZHVfY21kX3JlcV9pOwotICAgICAgICBlbmQKLQotICAgICAgICBTQ1IxX0hEVV9EQkdTVEFURV9EUlVOOiBiZWdpbgotICAgICAgICAgICAgaGR1MmRtX2NtZF9yZXNwX28gID0gKH5waXBlMmhkdV9yZGNfcWxmeV9pIHwgZGZzbV91cGRhdGUpICYgZG0yaGR1X2NtZF9yZXFfaTsKLSAgICAgICAgZW5kCi0KLSAgICAgICAgZGVmYXVsdDogYmVnaW4KLSAgICAgICAgICAgIGhkdTJkbV9jbWRfcmVzcF9vICA9ICdYOwotICAgICAgICBlbmQKLSAgICBlbmRjYXNlCi1lbmQKLQotYXNzaWduIGhkdTJkbV9wYnVmX2FkZHJfbyAgPSBwYnVmX2FkZHJfZmY7Ci1hc3NpZ24gaGR1MmRtX2RyZWdfcmVxX28gICA9IGNzcl9kc2NyYXRjaDBfc2VsOwotYXNzaWduIGhkdTJkbV9kcmVnX3dyX28gICAgPSBjc3Jfd3IgJiBjc3JfZHNjcmF0Y2gwX3NlbDsKLWFzc2lnbiBoZHUyZG1fZHJlZ193ZGF0YV9vID0gY3NyX3dyX2RhdGE7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBIRFUgPC0+IEVYVSBpbnRlcmZhY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBoZHUyZXh1X2RiZ19oYWx0ZWRfbyAgICA9IChkYmdfc3RhdGVfbmV4dCA9PSBTQ1IxX0hEVV9EQkdTVEFURV9ESEFMVEVEKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKH5waXBlMmhkdV9yZGNfcWxmeV9pICYgfmRiZ19zdGF0ZV9ydW4pOwotYXNzaWduIGhkdTJleHVfZGJnX3J1bl9zdGFydF9vID0gZGJnX3N0YXRlX2RoYWx0ZWQgJiBwaXBlMmhkdV9yZGNfcWxmeV9pICYgZGZzbV91cGRhdGU7Ci1hc3NpZ24gaGR1MmV4dV9kYmdfaGFsdDJydW5fbyAgPSBoZHUyZXh1X2RiZ19oYWx0ZWRfbyAmIGhhcnRfcmVzdW1lX3JlcQotYGlmZGVmIFNDUjFfQ0xLQ1RSTF9FTgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgY2xrX3BpcGVfZW4KLWBlbmRpZiAvLyBTQ1IxX0NMS0NUUkxfRU4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Ci1hc3NpZ24gaGR1MmV4dV9kYmdfcnVuMmhhbHRfbyAgPSBoYXJ0X2hhbHRfYWNrOwotCi1hc3NpZ24gaGR1MmV4dV9wYnVmX2ZldGNoX28gICAgPSBoYXJ0X3J1bmN0cmwuZmV0Y2hfc3JjOwotYXNzaWduIGhkdTJleHVfaXJxX2RzYmxfbyAgICAgID0gaGFydF9ydW5jdHJsLmlycV9kc2JsOwotYXNzaWduIGhkdTJleHVfcGNfYWR2bXRfZHNibF9vID0gaGFydF9ydW5jdHJsLnBjX2Fkdm10X2RzYmw7Ci0vLyBObyBjaGFuZ2UgaW4gYXJjaC4gc3RhdGUgaWYgZG1vZGUgY2F1c2VkIGJ5IGJyZWFrcG9pbnQKLWFzc2lnbiBoZHUyZXh1X25vX2NvbW1pdF9vICAgICA9IGRtb2RlX2NhdXNlX2VicmVhawotYGlmZGVmIFNDUjFfVERVX0VOCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkbW9kZV9jYXVzZV90bXJlcQotYGVuZGlmIC8vIFNDUjFfVERVX0VOCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwotYXNzaWduIGhkdTJleHVfZG1vZGVfc3N0ZXBfZW5fbyA9IGhhcnRfcnVuY3RybC5yZWRpcmVjdC5zc3RlcDsKLWFzc2lnbiBoZHUyZXh1X2RiZ19uZXdfcGNfbyAgICAgPSBjc3JfZHBjX2ZmOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSERVIDwtPiBJRlUgaW50ZXJmYWNlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gaGR1MmlmdV9wYnVmX2luc3RyX3ZkX28gID0gKHBidWZfZnNtX2ZldGNoIHwgcGJ1Zl9mc21fZXhjaW5qKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIH5wYnVmX2luc3RyX3dhaXRfbGF0Y2hpbmc7Ci1hc3NpZ24gaGR1MmlmdV9wYnVmX2luc3RyX2Vycl9vID0gcGJ1Zl9mc21fZXhjaW5qOwotCi1nZW5lcmF0ZSBpZiAoSEFSVF9QQlVGX0lOU1RSX1JFR09VVF9FTikgYmVnaW4KLSAgICBhbHdheXNfZmYgQChwb3NlZGdlIGNsaykgYmVnaW4KLSAgICAgICAgaGR1MmlmdV9wYnVmX2luc3RyX28gPD0gZG0yaGR1X3BidWZfaW5zdHJfaTsKLSAgICBlbmQKLWVuZCBlbHNlIGJlZ2luCi0gICAgYXNzaWduIGhkdTJpZnVfcGJ1Zl9pbnN0cl9vID0gZG0yaGR1X3BidWZfaW5zdHJfaTsKLWVuZCBlbmRnZW5lcmF0ZQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSERVIDwtPiBDU1IgaW50ZXJmYWNlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gY3NyX2FkZHJfZHNjcmF0Y2gwID0gKGNzcjJoZHVfYWRkcl9pID09IFNDUjFfSERVX0RCR0NTUl9PRkZTX0RTQ1JBVENIMCk7Ci0KLWFzc2lnbiBoZHUyY3NyX3Jlc3BfbyAgPSB+ZGJnX3N0YXRlX2RydW4gICAgPyBTQ1IxX0NTUl9SRVNQX0VSCi0gICAgICAgICAgICAgICAgICAgICAgIDogY3NyX2FkZHJfZHNjcmF0Y2gwID8gY3NyX2RzY3JhdGNoMF9yZXNwCi0gICAgICAgICAgICAgICAgICAgICAgIDogY3NyMmhkdV9yZXFfaSAgICAgID8gU0NSMV9DU1JfUkVTUF9PSwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfQ1NSX1JFU1BfRVI7Ci1hc3NpZ24gaGR1MmNzcl9yZGF0YV9vID0gY3NyX3JkX2RhdGE7Ci0KLWBpZmRlZiBTQ1IxX1REVV9FTgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEhEVSA8LT4gVERVIGludGVyZmFjZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIGhkdTJ0ZHVfaHdicmtfZHNibF9vID0gaGFydF9ydW5jdHJsLmh3YnJrcHRfZHNibDsKLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotCi1gaWZkZWYgU0NSMV9UUkdUX1NJTVVMQVRJT04KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQXNzZXJ0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotU1ZBX0hEVV9YQ0hFQ0tfQ09NTU9OIDoKLSAgICBhc3NlcnQgcHJvcGVydHkgKAotICAgICAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgICAgICAhJGlzdW5rbm93bigge3JzdF9uLGNsayxjbGtfZW4sY3NyMmhkdV9yZXFfaSxwaXBlMmhkdV9yZGNfcWxmeV9pfSApCi0gICAgKQotICAgIGVsc2UgJGVycm9yKCJIRFUgRXJyb3I6IGNvbW1vbiBzaWduYWxzIGFyZSBpbiBYIHN0YXRlIik7Ci0KLVNWQV9IRFVfWENIRUNLX0NTUl9JTlRGIDoKLSAgICBhc3NlcnQgcHJvcGVydHkgKAotICAgICAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgICAgICBjc3IyaGR1X3JlcV9pIHwtPiAhJGlzdW5rbm93bigge2NzcjJoZHVfY21kX2ksY3NyMmhkdV9hZGRyX2ksY3NyMmhkdV93ZGF0YV9pfSApCi0gICAgKQotICAgIGVsc2UgJGVycm9yKCJIRFUgRXJyb3I6IENTUiBpL2YgaXMgaW4gWCBzdGF0ZSIpOwotCi1TVkFfSERVX1hDSEVDS19ETV9JTlRGIDoKLSAgICBhc3NlcnQgcHJvcGVydHkgKAotICAgICAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgICAgICAhJGlzdW5rbm93bigge2RtMmhkdV9jbWRfcmVxX2ksZG0yaGR1X2NtZF9pLGRtMmhkdV9kcmVnX3Jlc3BfaSwKLSAgICAgICAgZG0yaGR1X2RyZWdfZmFpbF9pfSApCi0gICAgKQotICAgIGVsc2UgJGVycm9yKCJIRFUgRXJyb3I6IERNIGkvZiBpcyBpbiBYIHN0YXRlIik7Ci0KLVNWQV9IRFVfWENIRUNLX1REVV9JTlRGIDoKLSAgICBhc3NlcnQgcHJvcGVydHkgKAotICAgICAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgICAgICAhJGlzdW5rbm93bigge3RkdTJoZHVfZG1vZGVfcmVxX2ksZXh1MmhkdV9pYnJrcHRfaHdfaX0gKQotICAgICkKLSAgICBlbHNlICRlcnJvcigiSERVIEVycm9yOiBURFUgaS9mIGlzIGluIFggc3RhdGUiKTsKLQotU1ZBX0hEVV9YQ0hFQ0tfSEFSVF9JTlRGIDoKLSAgICBhc3NlcnQgcHJvcGVydHkgKAotICAgICAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgICAgICAhJGlzdW5rbm93bigge3BpcGUyaGR1X2V4dV9idXN5X2kscGlwZTJoZHVfaW5zdHJldF9pLHBpcGUyaGR1X2luaXRfcGNfaSxwaXBlMmhkdV9leHVfZXhjX3JlcV9pLHBpcGUyaGR1X2Jya3B0X2ksCi0gICAgICAgIHBpcGUyaGR1X3BjX2N1cnJfaSxpZnUyaGR1X3BidWZfaW5zdHJfcmR5X2l9ICkKLSAgICApCi0gICAgZWxzZSAkZXJyb3IoIkhEVSBFcnJvcjogSEFSVCBpL2YgaXMgaW4gWCBzdGF0ZSIpOwotCi1gZW5kaWYgLy8gU0NSMV9UUkdUX1NJTVVMQVRJT04KLQotZW5kbW9kdWxlIDogc2NyMV9waXBlX2hkdQotCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9pYWx1LnN2IGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2lhbHUuc3YKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0MmFkZjQuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2lhbHUuc3YKKysrIC9kZXYvbnVsbApAQCAtMSw1NDggKzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiBTeW50YWNvcmUgTExDIMKpIDIwMTYtMjAyMQotLy8gCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAotLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IFN5bnRhY29yZSBMTEMKLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8gQGZpbGUgICAgICAgPHNjcjFfcGlwZV9pYWx1LnN2PgotLy8vIEBicmllZiAgICAgIEludGVnZXIgQXJpdGhtZXRpYyBMb2dpYyBVbml0IChJQUxVKQotLy8vLyAgICAgVmVyIDAuMSAtIDE4dGggSnVseSAyMDIxLCBEaW5lc2ggQSwgcHJvamVjdDogeWlmaXZlCi0vLy8vICAgICAgICAgICBBLiBGb3IgVGltaW5nIFJlYXNvbiwgSW5wdXQgYW5kIE91dHB1dCBhcmUgcmVnaXN0ZXJlZAotLy8vLyAgICAgICAgICAgICAgQWRkZWQgU0NSMV9HT0xERU4gZGVmaW5lIHRvIHByZXNlcnZlIHRoZSBQcmV2aW91cyBMb2dpYwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAvLwotIC8vIEZ1bmN0aW9uYWxpdHk6Ci0gLy8gLSBQZXJmb3JtcyBhZGRpdGlvbi9zdWJ0cmFjdGlvbiBhbmQgYXJpdGhtZXRpYyBhbmQgYnJhbmNoIGNvbXBhcmlzb25zCi0gLy8gLSBQZXJmb3JtcyBsb2dpY2FsIG9wZXJhdGlvbnMgKEFORChJKSwgT1IoSSksIFhPUihJKSkKLSAvLyAtIFBlcmZvcm1zIGFkZHJlc3MgY2FsY3VsYXRpb24gZm9yIGJyYW5jaCwganVtcCwgRE1FTSBsb2FkIGFuZCBzdG9yZSBhbmQgQVVJUEMKLSAvLyAgIGluc3RydWN0aW9ucwotIC8vIC0gUGVyZm9ybXMgc2hpZnQgb3BlcmF0aW9ucwotIC8vIC0gUGVyZm9ybXMgTVVML0RJViBvcGVyYXRpb25zCi0gLy8KLSAvLyBTdHJ1Y3R1cmU6Ci0gLy8gLSBNYWluIGFkZGVyCi0gLy8gLSBBZGRyZXNzIGFkZGVyCi0gLy8gLSBTaGlmdCBsb2dpYwotIC8vIC0gTVVML0RJViBsb2dpYwotIC8vIC0gT3V0cHV0IHJlc3VsdCBtdWx0aXBsZXhlcgotIC8vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYGluY2x1ZGUgInNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgiCi1gaW5jbHVkZSAic2NyMV9yaXNjdl9pc2FfZGVjb2Rpbmcuc3ZoIgotYGluY2x1ZGUgInNjcjFfc2VhcmNoX21zMS5zdmgiCi0KLQotbW9kdWxlIHNjcjFfcGlwZV9pYWx1ICgKLWBpZmRlZiBTQ1IxX1JWTV9FWFQKLSAgICAvLyBDb21tb24KLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIElBTFUgY2xvY2sKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgcnN0X24sICAgICAgICAgICAgICAgICAgICAgIC8vIElBTFUgcmVzZXQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MmlhbHVfcnZtX2NtZF92ZF9pLCAgICAgIC8vIE1VTC9ESVYgY29tbWFuZCB2YWxpZAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBpYWx1MmV4dV9ydm1fcmVzX3JkeV9vLCAgICAgLy8gTVVML0RJViByZXN1bHQgcmVhZHkKLWBlbmRpZiAvLyBTQ1IxX1JWTV9FWFQKLQotICAgIC8vIE1haW4gYWRkZXIKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgZXh1MmlhbHVfbWFpbl9vcDFfaSwgICAgICAgIC8vIG1haW4gQUxVIDFzdCBvcGVyYW5kCi0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgIGV4dTJpYWx1X21haW5fb3AyX2ksICAgICAgICAvLyBtYWluIEFMVSAybmQgb3BlcmFuZAotICAgIGlucHV0ICAgdHlwZV9zY3IxX2lhbHVfY21kX3NlbF9lICAgICAgICBleHUyaWFsdV9jbWRfaSwgICAgICAgICAgICAgLy8gSUFMVSBjb21tYW5kCi0gICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgIGlhbHUyZXh1X21haW5fcmVzX28sICAgICAgICAvLyBtYWluIEFMVSByZXN1bHQKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgaWFsdTJleHVfY21wX3Jlc19vLCAgICAgICAgIC8vIElBTFUgY29tcGFyaXNvbiByZXN1bHQKLQotICAgIC8vIEFkZHJlc3MgYWRkZXIKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgZXh1MmlhbHVfYWRkcl9vcDFfaSwgICAgICAgIC8vIEFkZHJlc3MgYWRkZXIgMXN0IG9wZXJhbmQKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgZXh1MmlhbHVfYWRkcl9vcDJfaSwgICAgICAgIC8vIEFkZHJlc3MgYWRkZXIgMm5kIG9wZXJhbmQKLSAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgaWFsdTJleHVfYWRkcl9yZXNfbyAgICAgICAgIC8vIEFkZHJlc3MgYWRkZXIgcmVzdWx0Ci0pOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHBhcmFtZXRlcnMgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1gaWZkZWYgU0NSMV9SVk1fRVhUCi1sb2NhbHBhcmFtIFNDUjFfTVVMX1dJRFRIICAgICA9IGBTQ1IxX1hMRU47Ci1sb2NhbHBhcmFtIFNDUjFfTVVMX1JFU19XSURUSCA9IDIgKiBgU0NSMV9YTEVOOwotbG9jYWxwYXJhbSBTQ1IxX01EVV9TVU1fV0lEVEggPSBgU0NSMV9YTEVOICsgMTsKLQotbG9jYWxwYXJhbSBTQ1IxX0RJVl9XSURUSCAgICAgPSAxOwotbG9jYWxwYXJhbSBTQ1IxX0RJVl9DTlRfSU5JVCAgPSAzMidiMSA8PCAoYFNDUjFfWExFTi9TQ1IxX0RJVl9XSURUSCAtIDIpOwotYGVuZGlmIC8vIFNDUjFfUlZNX0VYVAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHR5cGVzIGRlY2xhcmF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdHlwZWRlZiBzdHJ1Y3QgcGFja2VkIHsKLSAgICBsb2dpYyAgICAgICB6OyAgICAgIC8vIFplcm8KLSAgICBsb2dpYyAgICAgICBzOyAgICAgIC8vIFNpZ24KLSAgICBsb2dpYyAgICAgICBvOyAgICAgIC8vIE92ZXJmbG93Ci0gICAgbG9naWMgICAgICAgYzsgICAgICAvLyBDYXJyeQotfSB0eXBlX3NjcjFfaWFsdV9mbGFnc19zOwotCi0gYGlmZGVmIFNDUjFfUlZNX0VYVAotLy90eXBlZGVmIGVudW0gbG9naWMgWzE6MF0gewotcGFyYW1ldGVyICAgIFNDUjFfSUFMVV9NRFVfRlNNX0lETEUgID0gMidiMDA7Ci1wYXJhbWV0ZXIgICAgU0NSMV9JQUxVX01EVV9GU01fSVRFUiAgPSAyJ2IwMTsKLXBhcmFtZXRlciAgICBTQ1IxX0lBTFVfTURVX0ZTTV9DT1JSICA9IDInYjEwOwotLy99IHR5cGVfc2NyMV9pYWx1X2ZzbV9zdGF0ZTsKLQotLy90eXBlZGVmIGVudW0gbG9naWMgWzE6MF0gewotcGFyYW1ldGVyICAgU0NSMV9JQUxVX01EVV9OT05FICAgICAgID0gMidiMDA7Ci1wYXJhbWV0ZXIgICBTQ1IxX0lBTFVfTURVX01VTCAgICAgICAgPSAyJ2IwMTsKLXBhcmFtZXRlciAgIFNDUjFfSUFMVV9NRFVfRElWICAgICAgICA9IDInYjEwOwotLy99IHR5cGVfc2NyMV9pYWx1X21kdV9jbWQ7Ci0gYGVuZGlmIC8vIFNDUjFfUlZNX0VYVAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHNpZ25hbHMgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBNYWluIGFkZGVyIHNpZ25hbHMKLWxvZ2ljICAgICAgICBbYFNDUjFfWExFTjowXSAgICAgICAgICAgICAgICAgbWFpbl9zdW1fcmVzOyAgICAgICAvLyBNYWluIGFkZGVyIHJlc3VsdAotdHlwZV9zY3IxX2lhbHVfZmxhZ3NfcyAgICAgICAgICAgICAgICAgICAgICBtYWluX3N1bV9mbGFnczsgICAgIC8vIE1haW4gYWRkZXIgZmxhZ3MKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbl9zdW1fcG9zX292Zmx3OyAvLyBNYWluIGFkZGVyIHBvc2l0aXZlIG92ZXJmbG93Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5fc3VtX25lZ19vdmZsdzsgLy8gTWFpbiBhZGRlciBuZWdhdGl2ZSBvdmVyZmxvdwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluX29wc19kaWZmX3NnbjsgIC8vIE1haW4gYWRkZXIgb3BlcmFuZHMgaGF2ZSBkaWZmZXJlbnQgc2lnbnMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbl9vcHNfbm9uX3plcm87ICAvLyBCb3RoIG1haW4gYWRkZXIgb3BlcmFuZHMgYXJlIE5PVCAwCi0KLS8vIFNoaWZ0ZXIgc2lnbmFscwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpYWx1X2NtZF9zaGZ0OyAgICAgIC8vIElBTFUgY29tbWFuZCBpcyBzaGlmdAotbG9naWMgc2lnbmVkIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICBzaGZ0X29wMTsgICAgICAgICAgIC8vIFNISUZUIG9wZXJhbmQgMQotbG9naWMgICAgICAgIFs0OjBdICAgICAgICAgICAgICAgICAgICAgICAgICBzaGZ0X29wMjsgICAgICAgICAgIC8vIFNISUZUIG9wZXJhbmQgMgotbG9naWMgICAgICAgIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICBzaGZ0X2NtZDsgICAgICAgICAgIC8vIFNISUZUIGNvbW1hbmQ6IDAwIC0gbG9naWNhbCBsZWZ0LCAxMCAtIGxvZ2ljYWwgcmlnaHQsIDExIC0gYXJpdGhtZXRpY2FsIHJpZ2h0Ci1sb2dpYyAgICAgICAgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgIHNoZnRfcmVzOyAgICAgICAgICAgLy8gU0hJRlQgcmVzdWx0Ci0KLS8vIE1VTC9ESVYgc2lnbmFscwotYGlmZGVmIFNDUjFfUlZNX0VYVAotCi0vLyBNRFUgY29tbWFuZCBzaWduYWxzCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kdV9jbWRfbXVsOyAgICAgICAgLy8gTURVIGNvbW1hbmQgaXMgTVVMKEhTVSkKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWR1X2NtZF9kaXY7ICAgICAgICAvLyBNRFUgY29tbWFuZCBpcyBESVYoVSkvUkVNKFUpCi1sb2dpYyAgICAgICAgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgIG11bF9jbWQ7ICAgICAgICAgICAgLy8gTVVMIGNvbW1hbmQ6IDAwIC0gTVVMLCAgMDEgLSBNVUxILCAxMCAtIE1VTEhTVSwgMTEgLSBNVUxIVQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWxfY21kX2hpOyAgICAgICAgIC8vIEhpZ2ggcGFydCBvZiBNVUwgcmVzdWx0IGlzIHJlcXVlc3RlZAotbG9naWMgICAgICAgIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZfY21kOyAgICAgICAgICAgIC8vIERJViBjb21tYW5kOiAwMCAtIERJViwgIDAxIC0gRElWVSwgMTAgLSBSRU0sICAgIDExIC0gUkVNVQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZfY21kX3JlbTsgICAgICAgIC8vIERJViBjb21tYW5kIGlzIFJFTShVKQotCi0vLyBNdWx0aXBsaWVyIHNpZ25hbHMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsX29wMV9pc19zZ247ICAgICAvLyBGaXJzdCBNVUwgb3BlcmFuZCBpcyBzaWduZWQKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsX29wMl9pc19zZ247ICAgICAvLyBTZWNvbmQgTVVMIG9wZXJhbmQgaXMgc2lnbmVkCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bF9vcDFfc2duOyAgICAgICAgLy8gRmlyc3QgTVVMIG9wZXJhbmQgaXMgbmVnYXRpdmUKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsX29wMl9zZ247ICAgICAgICAvLyBTZWNvbmQgTVVMIG9wZXJhbmQgaXMgbmVnYXRpdmUKLWxvZ2ljIHNpZ25lZCBbYFNDUjFfWExFTjowXSAgICAgICAgICAgICAgICAgbXVsX29wMTsgICAgICAgICAgICAvLyBNVUwgb3BlcmFuZCAxCi1sb2dpYyBzaWduZWQgW1NDUjFfTVVMX1dJRFRIOjBdICAgICAgICAgICAgIG11bF9vcDI7ICAgICAgICAgICAgLy8gTVVMIG9wZXJhbmQgMQotbG9naWMgc2lnbmVkIFtTQ1IxX01VTF9SRVNfV0lEVEgtMTowXSAgICAgICBtdWxfcmVzOyAgICAgICAgICAgIC8vIE1VTCByZXN1bHQKLQotLy8gRGl2aXNvciBzaWduYWxzCi1sb2dpYyBzaWduZWQgW2BTQ1IxX1hMRU46MF0gICAgICAgICAgICAgICAgIGRpdl9vcDE7ICAgICAgICAgICAgLy8gRElWIG9wZXJhbmQgMQotbG9naWMgc2lnbmVkIFtTQ1IxX01VTF9XSURUSDowXSAgICAgICAgICAgICBkaXZfb3AyOyAgICAgICAgICAgIC8vIERJViBvcGVyYW5kIDIKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2X29wc19hcmVfc2duOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZfb3AxX2lzX25lZzsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2X29wMl9pc19uZWc7Ci1sb2dpYyAgICAgICAgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgIGRpdl9yZXNfcmVtOwotbG9naWMgICAgICAgIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICBkaXZfcmVzX3F1bzsKLQotCi1gZW5kaWYgLy8gU0NSMV9SVk1fRVhUCi0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBBZGRpbmcgSW5wdXQgUmVnaXN0ZXIgdG8gYnJlYWsgVGltaW5nIFBhdGggCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgZXh1MmlhbHVfbWFpbl9vcDFfZmY7ICAgICAgICAvLyBtYWluIEFMVSAxc3Qgb3BlcmFuZAotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICBleHUyaWFsdV9tYWluX29wMl9mZjsgICAgICAgIC8vIG1haW4gQUxVIDJuZCBvcGVyYW5kCi10eXBlX3NjcjFfaWFsdV9jbWRfc2VsX2UgICAgICAgIGV4dTJpYWx1X2NtZF9mZjsgICAgICAgICAgICAgLy8gSUFMVSBjb21tYW5kCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJpYWx1X3J2bV9jbWRfdmRfZmY7ICAgICAgLy8gTVVML0RJViBjb21tYW5kIHZhbGlkCi1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgIGlhbHUyZXh1X21haW5fcmVzX2k7ICAgICAgICAvLyBtYWluIEFMVSByZXN1bHQKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgaWFsdTJleHVfY21wX3Jlc19pOyAgICAgICAgIC8vIElBTFUgY29tcGFyaXNvbiByZXN1bHQKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgaWFsdTJleHVfcnZtX3Jlc19yZHlfaTsgICAgIC8vIE1VTC9ESVYgcmVzdWx0IHJlYWR5Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlhbHVfcmR5ICAgICAgICA7ICAgICAgICAgICAvLyBpYWx1IHJlYWR5Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlhbHVfZGF0YV9wZG9uZSA7ICAgICAgICAgICAvLyBpYWx1IGRhdGEgcHJvY2VzcyBkb25lCi0KLQotYGlmZGVmIFNDUjFfR09MREVOCi1hc3NpZ24JZXh1MmlhbHVfbWFpbl9vcDFfZmYgPSBleHUyaWFsdV9tYWluX29wMV9pOwotYXNzaWduICBleHUyaWFsdV9tYWluX29wMl9mZiA9IGV4dTJpYWx1X21haW5fb3AyX2k7Ci1hc3NpZ24gIGV4dTJpYWx1X2NtZF9mZiAgICAgID0gZXh1MmlhbHVfY21kX2k7Ci1hc3NpZ24JZXh1MmlhbHVfcnZtX2NtZF92ZF9mZiA9IGV4dTJpYWx1X3J2bV9jbWRfdmRfaTsKLQotYXNzaWduCWlhbHUyZXh1X21haW5fcmVzX28gICAgID0gaWFsdTJleHVfbWFpbl9yZXNfaTsKLWFzc2lnbiAgaWFsdTJleHVfY21wX3Jlc19vICAgICAgPSBpYWx1MmV4dV9jbXBfcmVzX2k7Ci1hc3NpZ24gIGlhbHUyZXh1X3J2bV9yZXNfcmR5X28gID0gaWFsdTJleHVfcnZtX3Jlc19yZHlfaTsKLWFzc2lnbiAgaWFsdV9yZHkgICAgICAgICAgICAgICAgPSAxOyAKLQotYGVsc2UKLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0JZXh1MmlhbHVfbWFpbl9vcDFfZmYgPD0gJzA7Ci0gICAgICAgIGV4dTJpYWx1X21haW5fb3AyX2ZmIDw9ICcwOwotICAgICAgICBleHUyaWFsdV9jbWRfZmYgICAgICA8PSBTQ1IxX0lBTFVfQ01EX05PTkU7Ci0JZXh1MmlhbHVfcnZtX2NtZF92ZF9mZiA8PSAnMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotCWV4dTJpYWx1X21haW5fb3AxX2ZmIDw9IGV4dTJpYWx1X21haW5fb3AxX2k7Ci0gICAgICAgIGV4dTJpYWx1X21haW5fb3AyX2ZmIDw9IGV4dTJpYWx1X21haW5fb3AyX2k7Ci0gICAgICAgIGV4dTJpYWx1X2NtZF9mZiAgICAgIDw9IGV4dTJpYWx1X2NtZF9pOwotCWV4dTJpYWx1X3J2bV9jbWRfdmRfZmYgPD0gZXh1MmlhbHVfcnZtX2NtZF92ZF9pOwotICAgIGVuZAotZW5kCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQWRkaW5nIE91dHB1dCBSZWdpc3RlciB0byBicmVhayBUaW1pbmcgUGF0aCAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotCWlhbHUyZXh1X21haW5fcmVzX28gICAgICAgICA8PSAnMDsKLSAgICAgICAgaWFsdTJleHVfY21wX3Jlc19vICAgICAgICAgIDw9ICcwOwotICAgICAgICBpYWx1MmV4dV9ydm1fcmVzX3JkeV9vICAgICAgPD0gJzA7Ci0JaWFsdV9kYXRhX3Bkb25lICAgICAgICAgICAgIDw9ICcwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0JaWFsdV9kYXRhX3Bkb25lICAgICAgICAgICAgIDw9IGlhbHUyZXh1X3J2bV9yZXNfcmR5X287IC8vIGdlbmVyYXRlIG9uZSBjeWNsZSBkZWxheWVkIHByb2Nlc3MgZG9uZQotCWlhbHUyZXh1X21haW5fcmVzX28gICAgICAgICA8PSBpYWx1MmV4dV9tYWluX3Jlc19pOwotICAgICAgICBpYWx1MmV4dV9jbXBfcmVzX28gICAgICAgICAgPD0gaWFsdTJleHVfY21wX3Jlc19pOwotICAgICAgICBpYWx1MmV4dV9ydm1fcmVzX3JkeV9vICAgICAgPD0gaWFsdTJleHVfcnZtX3Jlc19yZHlfaTsKLSAgICBlbmQKLWVuZAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIENyZWF0aW5nIFR3byBjeWNsZSBMYXRlbmN5IHRvIGJyZWFrIHRpbWluZyBwYXRoCi0vLyBPbmUgQ3ljbGUgZm9yIFJlZ2lzdGVyIElucHV0ICsgT25lIEN5Y2xlIFJlZ2lzdGVyZWQgT3V0cHV0Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbG9naWMgY21kX3ZkX2Q7Ci1hbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotCWNtZF92ZF9kIDw9ICcwOwotICAgICAgICBpYWx1X3JkeSA8PSAnMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotCWNtZF92ZF9kIDw9IGV4dTJpYWx1X3J2bV9jbWRfdmRfaSAmIChpYWx1X3JkeSA9PTApOwotICAgICAgICBpYWx1X3JkeSA8PSBjbWRfdmRfZCAmIGV4dTJpYWx1X3J2bV9jbWRfdmRfaSAmIChpYWx1X3JkeSA9PTApIDsKLSAgICBlbmQKLWVuZAotCi1gZW5kaWYKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBNYWluIGFkZGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0gLy8gTWFpbiBhZGRlciBpcyB1c2VkIGZvciB0aGUgZm9sbG93aW5nIHR5cGVzIG9mIG9wZXJhdGlvbnM6Ci0gLy8gLSBBZGRpdGlvbi9zdWJ0cmFjdGlvbiAgICAgICAgICAoQUREL0FEREkvU1VCKQotIC8vIC0gQnJhbmNoIGNvbXBhcmlzb25zICAgICAgICAgICAgKEJFUS9CTkUvQkxUKFUpL0JHRShVKSkKLSAvLyAtIEFyaXRobWV0aWMgY29tcGFyaXNvbnMgICAgICAgIChTTFQoVSkvU0xUSShVKSkKLS8vCi0KLS8vIENhcnJ5IG91dCAoTVNCIG9mIG1haW5fc3VtX3JlcykgaXMgZXZhbHVhdGVkIGNvcnJlY3RseSBiZWNhdXNlIHRoZSByZXN1bHQKLS8vIHdpZHRoIGVxdWFscyB0byB0aGUgbWF4aW11bSB3aWR0aCBvZiBib3RoIHRoZSByaWdodC1oYW5kIGFuZCBsZWZ0LWhhbmQgc2lkZSB2YXJpYWJsZXMKLWFsd2F5c19jb21iIGJlZ2luCi0gICAgbWFpbl9zdW1fcmVzID0gKGV4dTJpYWx1X2NtZF9mZiAhPSBTQ1IxX0lBTFVfQ01EX0FERCkKLSAgICAgICAgICAgICAgICAgPyAoZXh1MmlhbHVfbWFpbl9vcDFfZmYgLSBleHUyaWFsdV9tYWluX29wMl9mZikgICAvLyBTdWJ0cmFjdGlvbiBhbmQgY29tcGFyaXNvbgotICAgICAgICAgICAgICAgICA6IChleHUyaWFsdV9tYWluX29wMV9mZiArIGV4dTJpYWx1X21haW5fb3AyX2ZmKTsgIC8vIEFkZGl0aW9uCi0KLSAgICBtYWluX3N1bV9wb3Nfb3ZmbHcgPSB+ZXh1MmlhbHVfbWFpbl9vcDFfZmZbYFNDUjFfWExFTi0xXQotICAgICAgICAgICAgICAgICAgICAgICAmICBleHUyaWFsdV9tYWluX29wMl9mZltgU0NSMV9YTEVOLTFdCi0gICAgICAgICAgICAgICAgICAgICAgICYgIG1haW5fc3VtX3Jlc1tgU0NSMV9YTEVOLTFdOwotICAgIG1haW5fc3VtX25lZ19vdmZsdyA9ICBleHUyaWFsdV9tYWluX29wMV9mZltgU0NSMV9YTEVOLTFdCi0gICAgICAgICAgICAgICAgICAgICAgICYgfmV4dTJpYWx1X21haW5fb3AyX2ZmW2BTQ1IxX1hMRU4tMV0KLSAgICAgICAgICAgICAgICAgICAgICAgJiB+bWFpbl9zdW1fcmVzW2BTQ1IxX1hMRU4tMV07Ci0KLSAgICAvLyBGTEFHUzEgLSBmbGFncyBmb3IgY29tcGFyaXNvbiAocmVzdWx0IG9mIHN1YnRyYWN0aW9uKQotICAgIG1haW5fc3VtX2ZsYWdzLmMgPSBtYWluX3N1bV9yZXNbYFNDUjFfWExFTl07Ci0gICAgbWFpbl9zdW1fZmxhZ3MueiA9IH58bWFpbl9zdW1fcmVzW2BTQ1IxX1hMRU4tMTowXTsKLSAgICBtYWluX3N1bV9mbGFncy5zID0gbWFpbl9zdW1fcmVzW2BTQ1IxX1hMRU4tMV07Ci0gICAgbWFpbl9zdW1fZmxhZ3MubyA9IG1haW5fc3VtX3Bvc19vdmZsdyB8IG1haW5fc3VtX25lZ19vdmZsdzsKLWVuZAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEFkZHJlc3MgYWRkZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLSAvLyBBZGRpdGlvbmFsIGFkZGVyIGlzIHVzZWQgZm9yIHRoZSBmb2xsb3dpbmcgdHlwZXMgb2Ygb3BlcmF0aW9uczoKLSAvLyAtIFBDLWJhc2VkIGFkZHJlc3MgY2FsY3VsYXRpb24gICAgICAgICAgKEFVSVBDKQotIC8vIC0gSU1FTSBicmFuY2ggYWRkcmVzcyBjYWxjdWxhdGlvbiAgICAgICAoQkVRL0JORS9CTFQoVSkvQkdFKFUpKQotIC8vIC0gSU1FTSBqdW1wIGFkZHJlc3MgY2FsY3VsYXRpb24gICAgICAgICAoSkFML0pBTFIpCi0gLy8gLSBETUVNIGxvYWQgYWRkcmVzcyBjYWxjdWxhdGlvbiAgICAgICAgIChMQihVKS9MSChVKS9MVykKLSAvLyAtIERNRU0gc3RvcmUgYWRkcmVzcyBjYWxjdWxhdGlvbiAgICAgICAgKFNCL1NIL1NXKQotLy8KLQotYXNzaWduIGlhbHUyZXh1X2FkZHJfcmVzX28gPSBleHUyaWFsdV9hZGRyX29wMV9pICsgZXh1MmlhbHVfYWRkcl9vcDJfaTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBTaGlmdCBsb2dpYwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gLy8KLSAvLyBTaGlmdCBsb2dpYyBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHR5cGVzIG9mIHNoaWZ0IG9wZXJhdGlvbnM6Ci0gLy8gLSBMb2dpY2FsIGxlZnQgc2hpZnQgICAgICAoU0xMSS9TTEwpCi0gLy8gLSBMb2dpY2FsIHJpZ2h0IHNoaWZ0ICAgICAoU1JMSS9TUkwpCi0gLy8gLSBBcml0aG1ldGljIHJpZ2h0IHNoaWZ0ICAoU1JBSS9TUkEpCi0vLwotCi1hc3NpZ24gaWFsdV9jbWRfc2hmdCA9IChleHUyaWFsdV9jbWRfZmYgPT0gU0NSMV9JQUxVX0NNRF9TTEwpCi0gICAgICAgICAgICAgICAgICAgICB8IChleHUyaWFsdV9jbWRfZmYgPT0gU0NSMV9JQUxVX0NNRF9TUkwpCi0gICAgICAgICAgICAgICAgICAgICB8IChleHUyaWFsdV9jbWRfZmYgPT0gU0NSMV9JQUxVX0NNRF9TUkEpOwotYXNzaWduIHNoZnRfY21kICAgICAgPSBpYWx1X2NtZF9zaGZ0Ci0gICAgICAgICAgICAgICAgICAgICA/IHsoZXh1MmlhbHVfY21kX2ZmICE9IFNDUjFfSUFMVV9DTURfU0xMKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIChleHUyaWFsdV9jbWRfZmYgPT0gU0NSMV9JQUxVX0NNRF9TUkEpfQotICAgICAgICAgICAgICAgICAgICAgOiAyJ2IwMDsKLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBzaGZ0X29wMSA9IGV4dTJpYWx1X21haW5fb3AxX2ZmOwotICAgIHNoZnRfb3AyID0gZXh1MmlhbHVfbWFpbl9vcDJfZmZbNDowXTsKLSAgICBjYXNlIChzaGZ0X2NtZCkKLSAgICAgICAgMidiMTAgICA6IHNoZnRfcmVzID0gc2hmdF9vcDEgID4+IHNoZnRfb3AyOwotICAgICAgICAyJ2IxMSAgIDogc2hmdF9yZXMgPSBzaGZ0X29wMSA+Pj4gc2hmdF9vcDI7Ci0gICAgICAgIGRlZmF1bHQgOiBzaGZ0X3JlcyA9IHNoZnRfb3AxICA8PCBzaGZ0X29wMjsKLSAgICBlbmRjYXNlCi1lbmQKLQotYGlmZGVmIFNDUjFfUlZNX0VYVAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBNVUwvRElWIGxvZ2ljCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0gLy8gTVVML0RJViBpbnN0cnVjdGlvbnMgdXNlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25hbCB1bml0czoKLSAvLyAtIE1VTC9ESVYgRlNNIGNvbnRyb2wgbG9naWMsIGluY2x1ZGluZyBpdGVyYXRpb24gbnVtYmVyIGNvdW50ZXIKLSAvLyAtIE1VTC9ESVYgRlNNCi0gLy8gLSBNVUwgbG9naWMKLSAvLyAtIERJViBsb2dpYwotIC8vIC0gTURVIGFkZGVyIHRvIHByb2R1Y2UgYW4gaW50ZXJtZWRpYXRlIHJlc3VsdAotIC8vIC0gMiByZWdpc3RlcnMgdG8gc2F2ZSB0aGUgaW50ZXJtZWRpYXRlIHJlc3VsdCAoc2hhcmVkIGJldHdlZW4gTVVMIGFuZCBESVYKLSAvLyAgIG9wZXJhdGlvbnMpCi0vLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIE1VTC9ESVYgRlNNIENvbnRyb2wgbG9naWMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gbWR1X2NtZF9kaXYgPSAoKGV4dTJpYWx1X2NtZF9mZiA9PSBTQ1IxX0lBTFVfQ01EX0RJVikKLSAgICAgICAgICAgICAgICAgICB8IChleHUyaWFsdV9jbWRfZmYgPT0gU0NSMV9JQUxVX0NNRF9ESVZVKQotICAgICAgICAgICAgICAgICAgIHwgKGV4dTJpYWx1X2NtZF9mZiA9PSBTQ1IxX0lBTFVfQ01EX1JFTSkKLSAgICAgICAgICAgICAgICAgICB8IChleHUyaWFsdV9jbWRfZmYgPT0gU0NSMV9JQUxVX0NNRF9SRU1VKSkgJiBleHUyaWFsdV9ydm1fY21kX3ZkX2ZmOwotYXNzaWduIG1kdV9jbWRfbXVsID0gKChleHUyaWFsdV9jbWRfZmYgPT0gU0NSMV9JQUxVX0NNRF9NVUwpCi0gICAgICAgICAgICAgICAgICAgfCAoZXh1MmlhbHVfY21kX2ZmID09IFNDUjFfSUFMVV9DTURfTVVMSCkKLSAgICAgICAgICAgICAgICAgICB8IChleHUyaWFsdV9jbWRfZmYgPT0gU0NSMV9JQUxVX0NNRF9NVUxIVSkKLSAgICAgICAgICAgICAgICAgICB8IChleHUyaWFsdV9jbWRfZmYgPT0gU0NSMV9JQUxVX0NNRF9NVUxIU1UpKSAmIGV4dTJpYWx1X3J2bV9jbWRfdmRfZmY7Ci0KLQotYXNzaWduIG1haW5fb3BzX25vbl96ZXJvID0gfGV4dTJpYWx1X21haW5fb3AxX2ZmICYgfGV4dTJpYWx1X21haW5fb3AyX2ZmOwotYXNzaWduIG1haW5fb3BzX2RpZmZfc2duID0gZXh1MmlhbHVfbWFpbl9vcDFfZmZbYFNDUjFfWExFTi0xXQotICAgICAgICAgICAgICAgICAgICAgICAgIF4gZXh1MmlhbHVfbWFpbl9vcDJfZmZbYFNDUjFfWExFTi0xXTsKLQotCi0KLWFzc2lnbiBkaXZfY21kX3JlbSA9IGRpdl9jbWRbMV07Ci0KLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIE11bHRpcGxpZXIgbG9naWMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLSAvLyBNdWx0aXBsaWNhdGlvbiBoYXMgMiBvcHRpb25zOiBmYXN0ICgxIGN5Y2xlKSBhbmQgUmFkaXgtMiAoOCBjeWNsZXMpIG11bHRpcGxpY2F0aW9uLgotIC8vCi0gLy8gMS4gRmFzdCBtdWx0aXBsaWNhdGlvbiB1c2VzIHRoZSBzdHJhaWdodGZvcndhcmQgYXBwcm9hY2ggd2hlbiAyIG9wZXJhbmRzIGFyZQotIC8vIG11bHRpcGxpZWQgaW4gb25lIGN5Y2xlCi0gLy8KLSAvLyAyLiBSYWRpeC0yIG11bHRpcGxpY2F0aW9uIGRvZXMgNGJpdCBtdWx0aWNhdGlvbiBhdCB0aW1lCi0gLy8KLSAvLwotLy8KLQotYXNzaWduIG11bF9jbWQgID0geygoZXh1MmlhbHVfY21kX2ZmID09IFNDUjFfSUFMVV9DTURfTVVMSFUpIHwgKGV4dTJpYWx1X2NtZF9mZiA9PSBTQ1IxX0lBTFVfQ01EX01VTEhTVSkpLAotICAgICAgICAgICAgICAgICAgICgoZXh1MmlhbHVfY21kX2ZmID09IFNDUjFfSUFMVV9DTURfTVVMSFUpIHwgKGV4dTJpYWx1X2NtZF9mZiA9PSBTQ1IxX0lBTFVfQ01EX01VTEgpKX07Ci0KLWFzc2lnbiBtdWxfY21kX2hpICAgICA9IHxtdWxfY21kOwotYXNzaWduIG11bF9vcDFfaXNfc2duID0gfiZtdWxfY21kOwotYXNzaWduIG11bF9vcDJfaXNfc2duID0gfm11bF9jbWRbMV07Ci1hc3NpZ24gbXVsX29wMV9zZ24gICAgPSBtdWxfb3AxX2lzX3NnbiAmIGV4dTJpYWx1X21haW5fb3AxX2ZmW2BTQ1IxX1hMRU4tMV07Ci1hc3NpZ24gbXVsX29wMl9zZ24gICAgPSBtdWxfb3AyX2lzX3NnbiAmIGV4dTJpYWx1X21haW5fb3AyX2ZmW2BTQ1IxX1hMRU4tMV07Ci0KLWBpZmRlZiBTQ1IxX0ZBU1RfTVVMCi1hc3NpZ24gbXVsX29wMSA9IG1kdV9jbWRfbXVsID8gJHNpZ25lZCh7bXVsX29wMV9zZ24sIGV4dTJpYWx1X21haW5fb3AxX2ZmfSkgOiAnMDsKLWFzc2lnbiBtdWxfb3AyID0gbWR1X2NtZF9tdWwgPyAkc2lnbmVkKHttdWxfb3AyX3NnbiwgZXh1MmlhbHVfbWFpbl9vcDJfZmZ9KSA6ICcwOwotYXNzaWduIG11bF9yZXMgPSBtZHVfY21kX211bCA/IG11bF9vcDEgKiBtdWxfb3AyICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnc2IwOwotYGVsc2UgLy8gflNDUjFfRkFTVF9NVUwKLQotYXNzaWduIG11bF9vcDEgPSBtZHVfY21kX211bCA/ICRzaWduZWQoe211bF9vcDFfc2duLCBleHUyaWFsdV9tYWluX29wMV9mZn0pIDogJzA7Ci1hc3NpZ24gbXVsX29wMiA9IG1kdV9jbWRfbXVsID8gJHNpZ25lZCh7bXVsX29wMl9zZ24sIGV4dTJpYWx1X21haW5fb3AyX2ZmfSkgOiAnMDsKLQotbG9naWMgbXVsX3JkeTsKLQotc2NyMV9waXBlX211bCB1X211bCgKLQkuY2xrICAgICAgICAgIChjbGspLCAKLQkucnN0biAgICAgICAgIChyc3RfbiksIAotCS5kYXRhX3ZhbGlkICAgKG1kdV9jbWRfbXVsKSwgICAvLyBpbnB1dCB2YWxpZAotCS5EaW4xICAgICAgICAgKG11bF9vcDEpLCAgICAgICAvLyBmaXJzdCBvcGVyYW5kCi0JLkRpbjIgICAgICAgICAobXVsX29wMiksICAgICAgIC8vIHNlY29uZCBvcGVyYW5kCi0JLmRlc19oaWcgICAgICAobXVsX3Jlc1tTQ1IxX01VTF9SRVNfV0lEVEgtMTpgU0NSMV9YTEVOXSksICAgIC8vIGZpcnN0IHJlc3VsdAotCS5kZXNfbG93ICAgICAgKG11bF9yZXNbYFNDUjFfWExFTi0xOjBdKSwgICAgLy8gc2Vjb25kIHJlc3VsdAotCS5tdWxfcmR5X28gICAgKG11bF9yZHkpLCAgICAgIC8vIE11bHRpcGx5IHJlc3VsdCByZWFkeQotCS5kYXRhX2RvbmUgICAgKGlhbHVfZGF0YV9wZG9uZSkgICAgLy8gZGF0YV9wcm9jZXNzX2RvbmUKLSAgICApOwotCi0KLWBlbmRpZiAvLyB+U0NSMV9GQVNUX01VTAotCi0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBEaXZpZGVyIGxvZ2ljCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIGRpdl9jbWQgID0geygoZXh1MmlhbHVfY21kX2ZmID09IFNDUjFfSUFMVV9DTURfUkVNKSAgIHwgKGV4dTJpYWx1X2NtZF9mZiA9PSBTQ1IxX0lBTFVfQ01EX1JFTVUpKSwKLSAgICAgICAgICAgICAgICAgICAoKGV4dTJpYWx1X2NtZF9mZiA9PSBTQ1IxX0lBTFVfQ01EX1JFTVUpICB8IChleHUyaWFsdV9jbWRfZmYgPT0gU0NSMV9JQUxVX0NNRF9ESVZVKSl9OwotCi1hc3NpZ24gZGl2X29wc19hcmVfc2duID0gfmRpdl9jbWRbMF07Ci1hc3NpZ24gZGl2X29wMV9pc19uZWcgID0gZGl2X29wc19hcmVfc2duICYgZXh1MmlhbHVfbWFpbl9vcDFfZmZbYFNDUjFfWExFTi0xXTsKLWFzc2lnbiBkaXZfb3AyX2lzX25lZyAgPSBkaXZfb3BzX2FyZV9zZ24gJiBleHUyaWFsdV9tYWluX29wMl9mZltgU0NSMV9YTEVOLTFdOwotCi1hc3NpZ24gZGl2X29wMSA9IG1kdV9jbWRfZGl2ID8gJHNpZ25lZCh7ZGl2X29wMV9pc19uZWcsIGV4dTJpYWx1X21haW5fb3AxX2ZmfSkgOiAnMDsKLWFzc2lnbiBkaXZfb3AyID0gbWR1X2NtZF9kaXYgPyAkc2lnbmVkKHtkaXZfb3AyX2lzX25lZywgZXh1MmlhbHVfbWFpbl9vcDJfZmZ9KSA6ICcwOwotCi1sb2dpYyBkaXZfcmR5OwotCi1zY3IxX3BpcGVfZGl2IHVfZGl2KAotCS5jbGsgICAgICAgICAgKGNsayksIAotCS5yc3RuICAgICAgICAgKHJzdF9uKSwgCi0JLmRhdGFfdmFsaWQgICAobWR1X2NtZF9kaXYpLCAgIC8vIGlucHV0IHZhbGlkCi0JLkRpbjEgICAgICAgICAoZGl2X29wMSksICAgICAgIC8vIGZpcnN0IG9wZXJhbmQKLQkuRGluMiAgICAgICAgIChkaXZfb3AyKSwgICAgICAgLy8gc2Vjb25kIG9wZXJhbmQKLQkucXVvdGllbnQgICAgIChkaXZfcmVzX3F1byksICAgLy8gUmVtYWluZGVyCi0JLnJlbWFpbmRlciAgICAoZGl2X3Jlc19yZW0pLCAgIC8vIFF1b3RpZW50Ci0JLmRpdl9yZHlfbyAgICAoZGl2X3JkeSksICAgICAgIC8vIERpdmlkZSByZXN1bHQgcmVhZHkKLQkuZGF0YV9kb25lICAgIChpYWx1X2RhdGFfcGRvbmUpICAgICAvLyBkYXRhX3Byb2Nlc3NfZG9uZQotICAgICk7Ci0KLQotYGVuZGlmIC8vIFNDUjFfUlZNX0VYVAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIE9wZXJhdGlvbiByZXN1bHQgZm9ybWluZwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgaWFsdTJleHVfbWFpbl9yZXNfaSAgICA9ICcwOwotICAgIGlhbHUyZXh1X2NtcF9yZXNfaSAgICAgPSAxJ2IwOwotICAgIGlhbHUyZXh1X3J2bV9yZXNfcmR5X2kgPSAxJ2IwOwotCi0gICAgY2FzZSAoZXh1MmlhbHVfY21kX2ZmKQotICAgICAgICBTQ1IxX0lBTFVfQ01EX0FORCA6IGJlZ2luCi0gICAgICAgICAgICBpYWx1MmV4dV9ydm1fcmVzX3JkeV9pID0gaWFsdV9yZHk7Ci0gICAgICAgICAgICBpYWx1MmV4dV9tYWluX3Jlc19pID0gZXh1MmlhbHVfbWFpbl9vcDFfZmYgJiBleHUyaWFsdV9tYWluX29wMl9mZjsKLSAgICAgICAgZW5kCi0gICAgICAgIFNDUjFfSUFMVV9DTURfT1IgOiBiZWdpbgotICAgICAgICAgICAgaWFsdTJleHVfcnZtX3Jlc19yZHlfaSA9IGlhbHVfcmR5OwotICAgICAgICAgICAgaWFsdTJleHVfbWFpbl9yZXNfaSA9IGV4dTJpYWx1X21haW5fb3AxX2ZmIHwgZXh1MmlhbHVfbWFpbl9vcDJfZmY7Ci0gICAgICAgIGVuZAotICAgICAgICBTQ1IxX0lBTFVfQ01EX1hPUiA6IGJlZ2luCi0gICAgICAgICAgICBpYWx1MmV4dV9ydm1fcmVzX3JkeV9pID0gaWFsdV9yZHk7Ci0gICAgICAgICAgICBpYWx1MmV4dV9tYWluX3Jlc19pID0gZXh1MmlhbHVfbWFpbl9vcDFfZmYgXiBleHUyaWFsdV9tYWluX29wMl9mZjsKLSAgICAgICAgZW5kCi0gICAgICAgIFNDUjFfSUFMVV9DTURfQUREIDogYmVnaW4KLSAgICAgICAgICAgIGlhbHUyZXh1X3J2bV9yZXNfcmR5X2kgPSBpYWx1X3JkeTsKLSAgICAgICAgICAgIGlhbHUyZXh1X21haW5fcmVzX2kgPSBtYWluX3N1bV9yZXNbYFNDUjFfWExFTi0xOjBdOwotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9JQUxVX0NNRF9TVUIgOiBiZWdpbgotICAgICAgICAgICAgaWFsdTJleHVfcnZtX3Jlc19yZHlfaSA9IGlhbHVfcmR5OwotICAgICAgICAgICAgaWFsdTJleHVfbWFpbl9yZXNfaSA9IG1haW5fc3VtX3Jlc1tgU0NSMV9YTEVOLTE6MF07Ci0gICAgICAgIGVuZAotICAgICAgICBTQ1IxX0lBTFVfQ01EX1NVQl9MVCA6IGJlZ2luCi0gICAgICAgICAgICBpYWx1MmV4dV9ydm1fcmVzX3JkeV9pID0gaWFsdV9yZHk7Ci0gICAgICAgICAgICBpYWx1MmV4dV9tYWluX3Jlc19pID0gYFNDUjFfWExFTicobWFpbl9zdW1fZmxhZ3MucyBeIG1haW5fc3VtX2ZsYWdzLm8pOwotICAgICAgICAgICAgaWFsdTJleHVfY21wX3Jlc19pICA9IG1haW5fc3VtX2ZsYWdzLnMgXiBtYWluX3N1bV9mbGFncy5vOwotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9JQUxVX0NNRF9TVUJfTFRVIDogYmVnaW4KLSAgICAgICAgICAgIGlhbHUyZXh1X3J2bV9yZXNfcmR5X2kgPSBpYWx1X3JkeTsKLSAgICAgICAgICAgIGlhbHUyZXh1X21haW5fcmVzX2kgPSBgU0NSMV9YTEVOJyhtYWluX3N1bV9mbGFncy5jKTsKLSAgICAgICAgICAgIGlhbHUyZXh1X2NtcF9yZXNfaSAgPSBtYWluX3N1bV9mbGFncy5jOwotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9JQUxVX0NNRF9TVUJfRVEgOiBiZWdpbgotICAgICAgICAgICAgaWFsdTJleHVfcnZtX3Jlc19yZHlfaSA9IGlhbHVfcmR5OwotICAgICAgICAgICAgaWFsdTJleHVfbWFpbl9yZXNfaSA9IGBTQ1IxX1hMRU4nKG1haW5fc3VtX2ZsYWdzLnopOwotICAgICAgICAgICAgaWFsdTJleHVfY21wX3Jlc19pICA9IG1haW5fc3VtX2ZsYWdzLno7Ci0gICAgICAgIGVuZAotICAgICAgICBTQ1IxX0lBTFVfQ01EX1NVQl9ORSA6IGJlZ2luCi0gICAgICAgICAgICBpYWx1MmV4dV9ydm1fcmVzX3JkeV9pID0gaWFsdV9yZHk7Ci0gICAgICAgICAgICBpYWx1MmV4dV9tYWluX3Jlc19pID0gYFNDUjFfWExFTicofm1haW5fc3VtX2ZsYWdzLnopOwotICAgICAgICAgICAgaWFsdTJleHVfY21wX3Jlc19pICA9IH5tYWluX3N1bV9mbGFncy56OwotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9JQUxVX0NNRF9TVUJfR0UgOiBiZWdpbgotICAgICAgICAgICAgaWFsdTJleHVfcnZtX3Jlc19yZHlfaSA9IGlhbHVfcmR5OwotICAgICAgICAgICAgaWFsdTJleHVfbWFpbl9yZXNfaSA9IGBTQ1IxX1hMRU4nKH4obWFpbl9zdW1fZmxhZ3MucyBeIG1haW5fc3VtX2ZsYWdzLm8pKTsKLSAgICAgICAgICAgIGlhbHUyZXh1X2NtcF9yZXNfaSAgPSB+KG1haW5fc3VtX2ZsYWdzLnMgXiBtYWluX3N1bV9mbGFncy5vKTsKLSAgICAgICAgZW5kCi0gICAgICAgIFNDUjFfSUFMVV9DTURfU1VCX0dFVSA6IGJlZ2luCi0gICAgICAgICAgICBpYWx1MmV4dV9ydm1fcmVzX3JkeV9pID0gaWFsdV9yZHk7Ci0gICAgICAgICAgICBpYWx1MmV4dV9tYWluX3Jlc19pID0gYFNDUjFfWExFTicofm1haW5fc3VtX2ZsYWdzLmMpOwotICAgICAgICAgICAgaWFsdTJleHVfY21wX3Jlc19pICA9IH5tYWluX3N1bV9mbGFncy5jOwotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9JQUxVX0NNRF9TTEwsCi0gICAgICAgIFNDUjFfSUFMVV9DTURfU1JMLAotICAgICAgICBTQ1IxX0lBTFVfQ01EX1NSQTogYmVnaW4KLSAgICAgICAgICAgIGlhbHUyZXh1X3J2bV9yZXNfcmR5X2kgPSBpYWx1X3JkeTsKLSAgICAgICAgICAgIGlhbHUyZXh1X21haW5fcmVzX2kgPSBzaGZ0X3JlczsKLSAgICAgICAgZW5kCi1gaWZkZWYgU0NSMV9SVk1fRVhUCi0gICAgICAgIFNDUjFfSUFMVV9DTURfTVVMLAotICAgICAgICBTQ1IxX0lBTFVfQ01EX01VTEhVLAotICAgICAgICBTQ1IxX0lBTFVfQ01EX01VTEhTVSwKLSAgICAgICAgU0NSMV9JQUxVX0NNRF9NVUxIIDogYmVnaW4KLSBgaWZkZWYgU0NSMV9GQVNUX01VTAotICAgICAgICAgICAgaWFsdTJleHVfcnZtX3Jlc19yZHlfaSA9IGlhbHVfcmR5OwotICAgICAgICAgICAgaWFsdTJleHVfbWFpbl9yZXNfaSA9IG11bF9jbWRfaGkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBtdWxfcmVzW1NDUjFfTVVMX1JFU19XSURUSC0xOmBTQ1IxX1hMRU5dCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbXVsX3Jlc1tgU0NSMV9YTEVOLTE6MF07Ci0gYGVsc2UgLy8gflNDUjFfRkFTVF9NVUwKLSAgICAgICAgICAgIGlhbHUyZXh1X3J2bV9yZXNfcmR5X2kgPSBtdWxfcmR5OwotICAgICAgICAgICAgaWFsdTJleHVfbWFpbl9yZXNfaSA9IG11bF9jbWRfaGkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBtdWxfcmVzW1NDUjFfTVVMX1JFU19XSURUSC0xOmBTQ1IxX1hMRU5dCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbXVsX3Jlc1tgU0NSMV9YTEVOLTE6MF07Ci0gYGVuZGlmIC8vIH5TQ1IxX0ZBU1RfTVVMCi0gICAgICAgIGVuZAotICAgICAgICBTQ1IxX0lBTFVfQ01EX0RJViwKLSAgICAgICAgU0NSMV9JQUxVX0NNRF9ESVZVLAotICAgICAgICBTQ1IxX0lBTFVfQ01EX1JFTSwKLSAgICAgICAgU0NSMV9JQUxVX0NNRF9SRU1VIDogYmVnaW4KLSAgICAgICAgICAgIGlhbHUyZXh1X21haW5fcmVzX2kgICAgPSBkaXZfY21kX3JlbSA/IGRpdl9yZXNfcmVtIDogZGl2X3Jlc19xdW87Ci0gICAgICAgICAgICBpYWx1MmV4dV9ydm1fcmVzX3JkeV9pID0gZGl2X3JkeTsKLSAgICAgICAgZW5kCi1gZW5kaWYgLy8gU0NSMV9SVk1fRVhUCi0gICAgICAgIGRlZmF1bHQgOiBiZWdpbiBlbmQKLSAgICBlbmRjYXNlCi1lbmQKLQotCi1gaWZkZWYgU0NSMV9UUkdUX1NJTVVMQVRJT04KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQXNzZXJ0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYGlmZGVmIFNDUjFfUlZNX0VYVAotCi0vLyBYIGNoZWNrcwotCi1TQ1IxX1NWQV9JQUxVX1hDSEVDS19RVUVVRSA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICBleHUyaWFsdV9ydm1fY21kX3ZkX2ZmIHwtPgotICAgICEkaXN1bmtub3duKHtleHUyaWFsdV9tYWluX29wMV9mZiwgZXh1MmlhbHVfbWFpbl9vcDJfZmYsIGV4dTJpYWx1X2NtZF9mZn0pCi0gICAgKSBlbHNlICRlcnJvcigiSUFMVSBFcnJvcjogdW5rbm93biB2YWx1ZXMgaW4gcXVldWUiKTsKLQotLy8gQmVoYXZpb3IgY2hlY2tzCi0KLQotYGVuZGlmIC8vIFNDUjFfUlZNX0VYVAotCi1gZW5kaWYgLy8gU0NSMV9UUkdUX1NJTVVMQVRJT04KLQotZW5kbW9kdWxlIDogc2NyMV9waXBlX2lhbHUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9pZHUuc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfaWR1LnN2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWM0YjlkLi4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9pZHUuc3YKKysrIC9kZXYvbnVsbApAQCAtMSw4OTIgKzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiBTeW50YWNvcmUgTExDIMKpIDIwMTYtMjAyMQotLy8gCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAotLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IFN5bnRhY29yZSBMTEMKLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8gQGZpbGUgICAgICAgPHNjcjFfcGlwZV9pZHUuc3Y+Ci0vLy8gQGJyaWVmICAgICAgSW5zdHJ1Y3Rpb24gRGVjb2RlciBVbml0IChJRFUpCi0vLy8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAvLwotIC8vIEZ1bmN0aW9uYWxpdHk6Ci0gLy8gLSBEZWNvZGVzIHRoZSBpbnN0cnVjdGlvbiBhbmQgY3JlYXRlcyB0aGUgYXBwcm9wcmlhdGUgY29udHJvbCBzaWduYWxzIGZvciBFWFUKLSAvLwotIC8vIFN0cnVjdHVyZToKLSAvLyAtIEluc3RydWN0aW9uIGRlY29kZXIKLSAvLyAtIElEVSA8LT4gSUZVIGkvZgotIC8vIC0gSURVIDwtPiBFWFUgaS9mCi0gLy8KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWBpbmNsdWRlICJzY3IxX21lbWlmLnN2aCIKLWBpbmNsdWRlICJzY3IxX2FyY2hfdHlwZXMuc3ZoIgotYGluY2x1ZGUgInNjcjFfcmlzY3ZfaXNhX2RlY29kaW5nLnN2aCIKLWBpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgotCi1tb2R1bGUgc2NyMV9waXBlX2lkdQotKAotYGlmZGVmIFNDUjFfVFJHVF9TSU1VTEFUSU9OCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLCAgICAgICAgICAgICAgICAgIC8vIElEVSByZXNldAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGssICAgICAgICAgICAgICAgICAgICAvLyBJRFUgY2xvY2sKLWBlbmRpZiAvLyBTQ1IxX1RSR1RfU0lNVUxBVElPTgotCi0gICAgLy8gSUZVIDwtPiBJRFUgaW50ZXJmYWNlCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJpZnVfcmR5X28sICAgICAgICAgIC8vIElEVSByZWFkeSBmb3IgbmV3IGRhdGEKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9JTUVNX0RXSURUSC0xOjBdICAgaWZ1MmlkdV9pbnN0cl9pLCAgICAgICAgLy8gSUZVIGluc3RydWN0aW9uCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmdTJpZHVfaW1lbV9lcnJfaSwgICAgIC8vIEluc3RydWN0aW9uIGFjY2VzcyBmYXVsdCBleGNlcHRpb24KLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZ1MmlkdV9lcnJfcnZpX2hpX2ksICAgLy8gMSAtIGltZW0gZmF1bHQgd2hlbiB0cnlpbmcgdG8gZmV0Y2ggc2Vjb25kIGhhbGYgb2YgYW4gdW5hbGlnbmVkIFJWSSBpbnN0cnVjdGlvbgotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBpZnUyaWR1X3ZkX2ksICAgICAgICAgICAvLyBJRlUgcmVxdWVzdAotCi0gICAgLy8gSURVIDwtPiBFWFUgaW50ZXJmYWNlCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfcmVxX28sICAgICAgICAgIC8vIElEVSByZXF1ZXN0Ci0gICAgb3V0cHV0ICB0eXBlX3NjcjFfZXh1X2NtZF9zICAgICAgICAgICAgIGlkdTJleHVfY21kX28sICAgICAgICAgIC8vIElEVSBjb21tYW5kCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMV9vLCAgICAgIC8vIEluc3RydWN0aW9uIHVzZXMgcnMxCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMl9vLCAgICAgIC8vIEluc3RydWN0aW9uIHVzZXMgcnMyCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JkX28sICAgICAgIC8vIEluc3RydWN0aW9uIHVzZXMgcmQKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfaW1tX28sICAgICAgLy8gSW5zdHJ1Y3Rpb24gdXNlcyBpbW1lZGlhdGUKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MmlkdV9yZHlfaSAgICAgICAgICAgLy8gRVhVIHJlYWR5IGZvciBuZXcgZGF0YQotKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCBwYXJhbWV0ZXJzIGRlY2xhcmF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbG9jYWxwYXJhbSBbU0NSMV9HUFJfRklFTERfV0lEVEgtMTowXSBTQ1IxX01QUkZfWkVST19BRERSICAgPSA1J2QwOwotbG9jYWxwYXJhbSBbU0NSMV9HUFJfRklFTERfV0lEVEgtMTowXSBTQ1IxX01QUkZfUkFfQUREUiAgICAgPSA1J2QxOwotbG9jYWxwYXJhbSBbU0NSMV9HUFJfRklFTERfV0lEVEgtMTowXSBTQ1IxX01QUkZfU1BfQUREUiAgICAgPSA1J2QyOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHNpZ25hbHMgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1sb2dpYyBbYFNDUjFfSU1FTV9EV0lEVEgtMTowXSAgICAgICBpbnN0cjsKLWxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RyX3R5cGU7Ci1sb2dpYyBbNjoyXSAgICAgICAgICAgICAgICAgICAgICAgICBydmlfb3Bjb2RlOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnZpX2lsbGVnYWw7Ci1sb2dpYyBbMjowXSAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdDM7Ci1sb2dpYyBbNjowXSAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdDc7Ci1sb2dpYyBbMTE6MF0gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdDEyOwotbG9naWMgWzQ6MF0gICAgICAgICAgICAgICAgICAgICAgICAgc2hhbXQ7Ci1gaWZkZWYgU0NSMV9SVkNfRVhUCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydmNfaWxsZWdhbDsKLWBlbmRpZiAgLy8gU0NSMV9SVkNfRVhUCi1gaWZkZWYgU0NSMV9SVkVfRVhUCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydmVfaWxsZWdhbDsKLWBlbmRpZiAgLy8gU0NSMV9SVkVfRVhUCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSW5zdHJ1Y3Rpb24gZGVjb2RpbmcKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gaWR1MmlmdV9yZHlfbyAgPSBleHUyaWR1X3JkeV9pOwotYXNzaWduIGlkdTJleHVfcmVxX28gID0gaWZ1MmlkdV92ZF9pOwotYXNzaWduIGluc3RyICAgICAgICAgID0gaWZ1MmlkdV9pbnN0cl9pOwotCi0vLyBSVkkgLyBSVkMKLWFzc2lnbiBpbnN0cl90eXBlICAgPSBpbnN0clsxOjBdOwotCi0vLyBSVkkgLyBSVkMgZmllbGRzCi1hc3NpZ24gcnZpX29wY29kZSAgID0gaW5zdHJbNjoyXTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJWSQotYXNzaWduIGZ1bmN0MyAgICAgICA9IChpbnN0cl90eXBlID09IFNDUjFfSU5TVFJfUlZJKSA/IGluc3RyWzE0OjEyXSA6IGluc3RyWzE1OjEzXTsgLy8gUlZJIC8gUlZDCi1hc3NpZ24gZnVuY3Q3ICAgICAgID0gaW5zdHJbMzE6MjVdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSVkkKLWFzc2lnbiBmdW5jdDEyICAgICAgPSBpbnN0clszMToyMF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJWSSAoU1lTVEVNKQotYXNzaWduIHNoYW10ICAgICAgICA9IGluc3RyWzI0OjIwXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUlZJCi0KLS8vIFJWMzJJKE1DKSBkZWNvZGUKLWFsd2F5c19jb21iIGJlZ2luCi0gICAgLy8gRGVmYXVsdHMKLSAgICBpZHUyZXh1X2NtZF9vLmluc3RyX3J2YyAgID0gMSdiMDsKLSAgICBpZHUyZXh1X2NtZF9vLmlhbHVfb3AgICAgID0gU0NSMV9JQUxVX09QX1JFR19SRUc7Ci0gICAgaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgICA9IFNDUjFfSUFMVV9DTURfTk9ORTsKLSAgICBpZHUyZXh1X2NtZF9vLnN1bTJfb3AgICAgID0gU0NSMV9TVU0yX09QX1BDX0lNTTsKLSAgICBpZHUyZXh1X2NtZF9vLmxzdV9jbWQgICAgID0gU0NSMV9MU1VfQ01EX05PTkU7Ci0gICAgaWR1MmV4dV9jbWRfby5jc3Jfb3AgICAgICA9IFNDUjFfQ1NSX09QX1JFRzsKLSAgICBpZHUyZXh1X2NtZF9vLmNzcl9jbWQgICAgID0gU0NSMV9DU1JfQ01EX05PTkU7Ci0gICAgaWR1MmV4dV9jbWRfby5yZF93Yl9zZWwgICA9IFNDUjFfUkRfV0JfTk9ORTsKLSAgICBpZHUyZXh1X2NtZF9vLmp1bXBfcmVxICAgID0gMSdiMDsKLSAgICBpZHUyZXh1X2NtZF9vLmJyYW5jaF9yZXEgID0gMSdiMDsKLSAgICBpZHUyZXh1X2NtZF9vLm1yZXRfcmVxICAgID0gMSdiMDsKLSAgICBpZHUyZXh1X2NtZF9vLmZlbmNlaV9yZXEgID0gMSdiMDsKLSAgICBpZHUyZXh1X2NtZF9vLndmaV9yZXEgICAgID0gMSdiMDsKLSAgICBpZHUyZXh1X2NtZF9vLnJzMV9hZGRyICAgID0gJzA7Ci0gICAgaWR1MmV4dV9jbWRfby5yczJfYWRkciAgICA9ICcwOwotICAgIGlkdTJleHVfY21kX28ucmRfYWRkciAgICAgPSAnMDsKLSAgICBpZHUyZXh1X2NtZF9vLmltbSAgICAgICAgID0gJzA7Ci0gICAgaWR1MmV4dV9jbWRfby5leGNfcmVxICAgICA9IDEnYjA7Ci0gICAgaWR1MmV4dV9jbWRfby5leGNfY29kZSAgICA9IFNDUjFfRVhDX0NPREVfSU5TVFJfTUlTQUxJR047Ci0KLSAgICAvLyBDbG9jayBnYXRpbmcKLSAgICBpZHUyZXh1X3VzZV9yczFfbyAgICAgICAgID0gMSdiMDsKLSAgICBpZHUyZXh1X3VzZV9yczJfbyAgICAgICAgID0gMSdiMDsKLSAgICBpZHUyZXh1X3VzZV9yZF9vICAgICAgICAgID0gMSdiMDsKLSAgICBpZHUyZXh1X3VzZV9pbW1fbyAgICAgICAgID0gMSdiMDsKLQotICAgIHJ2aV9pbGxlZ2FsICAgICAgICAgICAgID0gMSdiMDsKLWBpZmRlZiBTQ1IxX1JWRV9FWFQKLSAgICBydmVfaWxsZWdhbCAgICAgICAgICAgICA9IDEnYjA7Ci1gZW5kaWYgIC8vIFNDUjFfUlZFX0VYVAotYGlmZGVmIFNDUjFfUlZDX0VYVAotICAgIHJ2Y19pbGxlZ2FsICAgICAgICAgICAgID0gMSdiMDsKLWBlbmRpZiAgLy8gU0NSMV9SVkNfRVhUCi0KLSAgICAvLyBDaGVjayBmb3IgSU1FTSBhY2Nlc3MgZmF1bHQKLSAgICBpZiAoaWZ1MmlkdV9pbWVtX2Vycl9pKSBiZWdpbgotICAgICAgICBpZHUyZXh1X2NtZF9vLmV4Y19yZXEgICAgID0gMSdiMTsKLSAgICAgICAgaWR1MmV4dV9jbWRfby5leGNfY29kZSAgICA9IFNDUjFfRVhDX0NPREVfSU5TVFJfQUNDRVNTX0ZBVUxUOwotICAgICAgICBpZHUyZXh1X2NtZF9vLmluc3RyX3J2YyAgID0gaWZ1MmlkdV9lcnJfcnZpX2hpX2k7Ci0gICAgZW5kIGVsc2UgYmVnaW4gIC8vIG5vIGltZW0gZmF1bHQKLSAgICAgICAgY2FzZSAoaW5zdHJfdHlwZSkKLSAgICAgICAgICAgIFNDUjFfSU5TVFJfUlZJICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yczFfYWRkciAgICA9IGluc3RyWzE5OjE1XTsKLSAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJzMl9hZGRyICAgID0gaW5zdHJbMjQ6MjBdOwotICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfYWRkciAgICAgPSBpbnN0clsxMTo3XTsKLSAgICAgICAgICAgICAgICBjYXNlIChydmlfb3Bjb2RlKQotICAgICAgICAgICAgICAgICAgICBTQ1IxX09QQ09ERV9BVUlQQyAgICAgICAgICAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcmRfbyAgICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9pbW1fbyAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uc3VtMl9vcCAgICAgPSBTQ1IxX1NVTTJfT1BfUENfSU1NOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF93Yl9zZWwgICA9IFNDUjFfUkRfV0JfU1VNMjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgICAgPSB7aW5zdHJbMzE6MTJdLCAxMidiMH07Ci1gaWZkZWYgU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbMTFdKSAgICAgICAgICBydmVfaWxsZWdhbCA9IDEnYjE7Ci1gZW5kaWYgIC8vIFNDUjFfUlZFX0VYVAotICAgICAgICAgICAgICAgICAgICBlbmQgLy8gU0NSMV9PUENPREVfQVVJUEMKLQotICAgICAgICAgICAgICAgICAgICBTQ1IxX09QQ09ERV9MVUkgICAgICAgICAgICAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcmRfbyAgICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9pbW1fbyAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgPSBTQ1IxX1JEX1dCX0lNTTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgICAgPSB7aW5zdHJbMzE6MTJdLCAxMidiMH07Ci1gaWZkZWYgU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbMTFdKSAgICAgICAgICBydmVfaWxsZWdhbCA9IDEnYjE7Ci1gZW5kaWYgIC8vIFNDUjFfUlZFX0VYVAotICAgICAgICAgICAgICAgICAgICBlbmQgLy8gU0NSMV9PUENPREVfTFVJCi0KLSAgICAgICAgICAgICAgICAgICAgU0NSMV9PUENPREVfSkFMICAgICAgICAgICAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JkX28gICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfaW1tX28gICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnN1bTJfb3AgICAgID0gU0NSMV9TVU0yX09QX1BDX0lNTTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgPSBTQ1IxX1JEX1dCX0lOQ19QQzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uanVtcF9yZXEgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pbW0gICAgICAgICA9IHt7MTJ7aW5zdHJbMzFdfX0sIGluc3RyWzE5OjEyXSwgaW5zdHJbMjBdLCBpbnN0clszMDoyMV0sIDEnYjB9OwotYGlmZGVmIFNDUjFfUlZFX0VYVAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RyWzExXSkgICAgICAgICAgcnZlX2lsbGVnYWwgPSAxJ2IxOwotYGVuZGlmICAvLyBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgZW5kIC8vIFNDUjFfT1BDT0RFX0pBTAotCi0gICAgICAgICAgICAgICAgICAgIFNDUjFfT1BDT0RFX0xPQUQgICAgICAgICAgICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yczFfbyAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JkX28gICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfaW1tX28gICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnN1bTJfb3AgICAgID0gU0NSMV9TVU0yX09QX1JFR19JTU07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX3diX3NlbCAgID0gU0NSMV9SRF9XQl9MU1U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmltbSAgICAgICAgID0ge3syMXtpbnN0clszMV19fSwgaW5zdHJbMzA6MjBdfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKGZ1bmN0MykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMDAgIDogaWR1MmV4dV9jbWRfby5sc3VfY21kID0gU0NSMV9MU1VfQ01EX0xCOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjAwMSAgOiBpZHUyZXh1X2NtZF9vLmxzdV9jbWQgPSBTQ1IxX0xTVV9DTURfTEg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMDEwICA6IGlkdTJleHVfY21kX28ubHN1X2NtZCA9IFNDUjFfTFNVX0NNRF9MVzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IxMDAgIDogaWR1MmV4dV9jbWRfby5sc3VfY21kID0gU0NSMV9MU1VfQ01EX0xCVTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IxMDEgIDogaWR1MmV4dV9jbWRfby5sc3VfY21kID0gU0NSMV9MU1VfQ01EX0xIVTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IDogcnZpX2lsbGVnYWwgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgZW5kY2FzZSAvLyBmdW5jdDMKLWBpZmRlZiBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0clsxMV0gfCBpbnN0clsxOV0pICBydmVfaWxsZWdhbCA9IDEnYjE7Ci1gZW5kaWYgIC8vIFNDUjFfUlZFX0VYVAotICAgICAgICAgICAgICAgICAgICBlbmQgLy8gU0NSMV9PUENPREVfTE9BRAotCi0gICAgICAgICAgICAgICAgICAgIFNDUjFfT1BDT0RFX1NUT1JFICAgICAgICAgICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yczFfbyAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMl9vICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfaW1tX28gICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnN1bTJfb3AgICAgID0gU0NSMV9TVU0yX09QX1JFR19JTU07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmltbSAgICAgICAgID0ge3syMXtpbnN0clszMV19fSwgaW5zdHJbMzA6MjVdLCBpbnN0clsxMTo3XX07Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIChmdW5jdDMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMDAwICA6IGlkdTJleHVfY21kX28ubHN1X2NtZCA9IFNDUjFfTFNVX0NNRF9TQjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMDEgIDogaWR1MmV4dV9jbWRfby5sc3VfY21kID0gU0NSMV9MU1VfQ01EX1NIOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjAxMCAgOiBpZHUyZXh1X2NtZF9vLmxzdV9jbWQgPSBTQ1IxX0xTVV9DTURfU1c7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA6IHJ2aV9pbGxlZ2FsID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuZGNhc2UgLy8gZnVuY3QzCi1gaWZkZWYgU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbMTldIHwgaW5zdHJbMjRdKSAgcnZlX2lsbGVnYWwgPSAxJ2IxOwotYGVuZGlmICAvLyBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgZW5kIC8vIFNDUjFfT1BDT0RFX1NUT1JFCi0KLSAgICAgICAgICAgICAgICAgICAgU0NSMV9PUENPREVfT1AgICAgICAgICAgICAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMV9vICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMyX28gICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yZF9vICAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9vcCAgICAgPSBTQ1IxX0lBTFVfT1BfUkVHX1JFRzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgPSBTQ1IxX1JEX1dCX0lBTFU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIChmdW5jdDcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgNydiMDAwMDAwMCA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKGZ1bmN0MykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjAwMCAgOiBpZHUyZXh1X2NtZF9vLmlhbHVfY21kICA9IFNDUjFfSUFMVV9DTURfQUREOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMDAxICA6IGlkdTJleHVfY21kX28uaWFsdV9jbWQgID0gU0NSMV9JQUxVX0NNRF9TTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMTAgIDogaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgPSBTQ1IxX0lBTFVfQ01EX1NVQl9MVDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjAxMSAgOiBpZHUyZXh1X2NtZF9vLmlhbHVfY21kICA9IFNDUjFfSUFMVV9DTURfU1VCX0xUVTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjEwMCAgOiBpZHUyZXh1X2NtZF9vLmlhbHVfY21kICA9IFNDUjFfSUFMVV9DTURfWE9SOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMTAxICA6IGlkdTJleHVfY21kX28uaWFsdV9jbWQgID0gU0NSMV9JQUxVX0NNRF9TUkw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IxMTAgIDogaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgPSBTQ1IxX0lBTFVfQ01EX09SOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMTExICA6IGlkdTJleHVfY21kX28uaWFsdV9jbWQgID0gU0NSMV9JQUxVX0NNRF9BTkQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZGNhc2UgLy8gZnVuY3QzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kIC8vIDcnYjAwMDAwMDAKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcnYjAxMDAwMDAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIChmdW5jdDMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMDAgIDogaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgPSBTQ1IxX0lBTFVfQ01EX1NVQjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjEwMSAgOiBpZHUyZXh1X2NtZF9vLmlhbHVfY21kICA9IFNDUjFfSUFMVV9DTURfU1JBOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA6IHJ2aV9pbGxlZ2FsID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kY2FzZSAvLyBmdW5jdDMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgLy8gNydiMDEwMDAwMAotYGlmZGVmIFNDUjFfUlZNX0VYVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcnYjAwMDAwMDEgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIChmdW5jdDMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMDAgIDogaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgPSBTQ1IxX0lBTFVfQ01EX01VTDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjAwMSAgOiBpZHUyZXh1X2NtZF9vLmlhbHVfY21kICA9IFNDUjFfSUFMVV9DTURfTVVMSDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjAxMCAgOiBpZHUyZXh1X2NtZF9vLmlhbHVfY21kICA9IFNDUjFfSUFMVV9DTURfTVVMSFNVOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMDExICA6IGlkdTJleHVfY21kX28uaWFsdV9jbWQgID0gU0NSMV9JQUxVX0NNRF9NVUxIVTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjEwMCAgOiBpZHUyZXh1X2NtZF9vLmlhbHVfY21kICA9IFNDUjFfSUFMVV9DTURfRElWOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMTAxICA6IGlkdTJleHVfY21kX28uaWFsdV9jbWQgID0gU0NSMV9JQUxVX0NNRF9ESVZVOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMTEwICA6IGlkdTJleHVfY21kX28uaWFsdV9jbWQgID0gU0NSMV9JQUxVX0NNRF9SRU07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IxMTEgIDogaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgPSBTQ1IxX0lBTFVfQ01EX1JFTVU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZGNhc2UgLy8gZnVuY3QzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kIC8vIDcnYjAwMDAwMDEKLWBlbmRpZiAgLy8gU0NSMV9SVk1fRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA6IHJ2aV9pbGxlZ2FsID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuZGNhc2UgLy8gZnVuY3Q3Ci1gaWZkZWYgU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbMTFdIHwgaW5zdHJbMTldIHwgaW5zdHJbMjRdKSAgcnZlX2lsbGVnYWwgPSAxJ2IxOwotYGVuZGlmICAvLyBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgZW5kIC8vIFNDUjFfT1BDT0RFX09QCi0KLSAgICAgICAgICAgICAgICAgICAgU0NSMV9PUENPREVfT1BfSU1NICAgICAgICAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMV9vICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcmRfbyAgICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9pbW1fbyAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgICAgPSB7ezIxe2luc3RyWzMxXX19LCBpbnN0clszMDoyMF19OwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X29wICAgICA9IFNDUjFfSUFMVV9PUF9SRUdfSU1NOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF93Yl9zZWwgICA9IFNDUjFfUkRfV0JfSUFMVTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKGZ1bmN0MykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMDAgIDogaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgPSBTQ1IxX0lBTFVfQ01EX0FERDsgICAgICAgIC8vIEFEREkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMTAgIDogaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgPSBTQ1IxX0lBTFVfQ01EX1NVQl9MVDsgICAgIC8vIFNMVEkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMTEgIDogaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgPSBTQ1IxX0lBTFVfQ01EX1NVQl9MVFU7ICAgIC8vIFNMVElVCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMTAwICA6IGlkdTJleHVfY21kX28uaWFsdV9jbWQgID0gU0NSMV9JQUxVX0NNRF9YT1I7ICAgICAgICAvLyBYT1JJCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMTEwICA6IGlkdTJleHVfY21kX28uaWFsdV9jbWQgID0gU0NSMV9JQUxVX0NNRF9PUjsgICAgICAgICAvLyBPUkkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IxMTEgIDogaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgPSBTQ1IxX0lBTFVfQ01EX0FORDsgICAgICAgIC8vIEFOREkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMDEgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAoZnVuY3Q3KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNydiMDAwMDAwMCAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNMTEkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmltbSAgICAgICAgID0gYFNDUjFfWExFTicoc2hhbXQpOyAgIC8vIHplcm8tZXh0ZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgICA9IFNDUjFfSUFMVV9DTURfU0xMOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ICAgICA6IHJ2aV9pbGxlZ2FsICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRjYXNlIC8vIGZ1bmN0NwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjEwMSAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIChmdW5jdDcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3J2IwMDAwMDAwICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU1JMSQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgICAgPSBgU0NSMV9YTEVOJyhzaGFtdCk7ICAgLy8gemVyby1leHRlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmlhbHVfY21kICAgID0gU0NSMV9JQUxVX0NNRF9TUkw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcnYjAxMDAwMDAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTUkFJCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pbW0gICAgICAgICA9IGBTQ1IxX1hMRU4nKHNoYW10KTsgICAvLyB6ZXJvLWV4dGVuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9jbWQgICAgPSBTQ1IxX0lBTFVfQ01EX1NSQTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCAgICAgOiBydmlfaWxsZWdhbCAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kY2FzZSAvLyBmdW5jdDcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuZGNhc2UgLy8gZnVuY3QzCi1gaWZkZWYgU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbMTFdIHwgaW5zdHJbMTldKSAgcnZlX2lsbGVnYWwgPSAxJ2IxOwotYGVuZGlmICAvLyBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgZW5kIC8vIFNDUjFfT1BDT0RFX09QX0lNTQotCi0gICAgICAgICAgICAgICAgICAgIFNDUjFfT1BDT0RFX01JU0NfTUVNICAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKGZ1bmN0MykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMDAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKH58e2luc3RyWzMxOjI4XSwgaW5zdHJbMTk6MTVdLCBpbnN0clsxMTo3XX0pIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGRU5DRSA9IE5PUAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBydmlfaWxsZWdhbCA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMDAxICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh+fHtpbnN0clszMToxNV0sIGluc3RyWzExOjddfSkgYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZFTkNFLkkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uZmVuY2VpX3JlcSAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHJ2aV9pbGxlZ2FsID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IDogcnZpX2lsbGVnYWwgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgZW5kY2FzZSAvLyBmdW5jdDMKLSAgICAgICAgICAgICAgICAgICAgZW5kIC8vIFNDUjFfT1BDT0RFX01JU0NfTUVNCi0KLSAgICAgICAgICAgICAgICAgICAgU0NSMV9PUENPREVfQlJBTkNIICAgICAgICAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMV9vICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMyX28gICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9pbW1fbyAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgICAgPSB7ezIwe2luc3RyWzMxXX19LCBpbnN0cls3XSwgaW5zdHJbMzA6MjVdLCBpbnN0clsxMTo4XSwgMSdiMH07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmJyYW5jaF9yZXEgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uc3VtMl9vcCAgICAgPSBTQ1IxX1NVTTJfT1BfUENfSU1NOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X29wICAgICA9IFNDUjFfSUFMVV9PUF9SRUdfUkVHOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAoZnVuY3QzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjAwMCAgOiBpZHUyZXh1X2NtZF9vLmlhbHVfY21kID0gU0NSMV9JQUxVX0NNRF9TVUJfRVE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMDAxICA6IGlkdTJleHVfY21kX28uaWFsdV9jbWQgPSBTQ1IxX0lBTFVfQ01EX1NVQl9ORTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IxMDAgIDogaWR1MmV4dV9jbWRfby5pYWx1X2NtZCA9IFNDUjFfSUFMVV9DTURfU1VCX0xUOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjEwMSAgOiBpZHUyZXh1X2NtZF9vLmlhbHVfY21kID0gU0NSMV9JQUxVX0NNRF9TVUJfR0U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMTEwICA6IGlkdTJleHVfY21kX28uaWFsdV9jbWQgPSBTQ1IxX0lBTFVfQ01EX1NVQl9MVFU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMTExICA6IGlkdTJleHVfY21kX28uaWFsdV9jbWQgPSBTQ1IxX0lBTFVfQ01EX1NVQl9HRVU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA6IHJ2aV9pbGxlZ2FsID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuZGNhc2UgLy8gZnVuY3QzCi1gaWZkZWYgU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbMTldIHwgaW5zdHJbMjRdKSAgcnZlX2lsbGVnYWwgPSAxJ2IxOwotYGVuZGlmICAvLyBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgZW5kIC8vIFNDUjFfT1BDT0RFX0JSQU5DSAotCi0gICAgICAgICAgICAgICAgICAgIFNDUjFfT1BDT0RFX0pBTFIgICAgICAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMV9vICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yZF9vICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfaW1tX28gICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKGZ1bmN0MykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMDAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSkFMUgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnN1bTJfb3AgICA9IFNDUjFfU1VNMl9PUF9SRUdfSU1NOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX3diX3NlbCA9IFNDUjFfUkRfV0JfSU5DX1BDOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmp1bXBfcmVxICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgID0ge3syMXtpbnN0clszMV19fSwgaW5zdHJbMzA6MjBdfTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IDogcnZpX2lsbGVnYWwgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgZW5kY2FzZQotYGlmZGVmIFNDUjFfUlZFX0VYVAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RyWzExXSB8IGluc3RyWzE5XSkgIHJ2ZV9pbGxlZ2FsID0gMSdiMTsKLWBlbmRpZiAgLy8gU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgIGVuZCAvLyBTQ1IxX09QQ09ERV9KQUxSCi0KLSAgICAgICAgICAgICAgICAgICAgU0NSMV9PUENPREVfU1lTVEVNICAgICAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcmRfbyAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX2ltbV9vICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmltbSAgICAgPSBgU0NSMV9YTEVOJyh7ZnVuY3QzLCBpbnN0clszMToyMF19KTsgICAgICAvLyB7ZnVuY3QzLCBDU1IgYWRkcmVzc30KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKGZ1bmN0MykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMDAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcmRfbyAgICA9IDEnYjA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX2ltbV9vICAgPSAxJ2IwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICh7aW5zdHJbMTk6MTVdLCBpbnN0clsxMTo3XX0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMCdkMCA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAoZnVuY3QxMikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTInaDAwMCA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFQ0FMTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5leGNfcmVxICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmV4Y19jb2RlICAgID0gU0NSMV9FWENfQ09ERV9FQ0FMTF9NOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTInaDAwMSA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFQlJFQUsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uZXhjX3JlcSAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5leGNfY29kZSAgICA9IFNDUjFfRVhDX0NPREVfQlJFQUtQT0lOVDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyJ2gzMDIgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTVJFVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5tcmV0X3JlcSAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMidoMTA1IDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdGSQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby53ZmlfcmVxICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IDogcnZpX2lsbGVnYWwgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZGNhc2UgLy8gZnVuY3QxMgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IDogcnZpX2lsbGVnYWwgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRjYXNlIC8vIHtpbnN0clsxOToxNV0sIGluc3RyWzExOjddfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjAwMSAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDU1JSVwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yczFfbyAgICAgICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgICAgID0gU0NSMV9SRF9XQl9DU1I7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uY3NyX2NtZCAgICAgICAgID0gU0NSMV9DU1JfQ01EX1dSSVRFOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmNzcl9vcCAgICAgICAgICA9IFNDUjFfQ1NSX09QX1JFRzsKLWBpZmRlZiBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RyWzExXSB8IGluc3RyWzE5XSkgIHJ2ZV9pbGxlZ2FsID0gMSdiMTsKLWBlbmRpZiAgLy8gU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMDEwICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENTUlJTCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMV9vICAgICAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF93Yl9zZWwgICAgICAgPSBTQ1IxX1JEX1dCX0NTUjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5jc3JfY21kICAgICAgICAgPSBTQ1IxX0NTUl9DTURfU0VUOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmNzcl9vcCAgICAgICAgICA9IFNDUjFfQ1NSX09QX1JFRzsKLWBpZmRlZiBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RyWzExXSB8IGluc3RyWzE5XSkgIHJ2ZV9pbGxlZ2FsID0gMSdiMTsKLWBlbmRpZiAgLy8gU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMDExICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENTUlJDCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMV9vICAgICAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF93Yl9zZWwgICAgICAgPSBTQ1IxX1JEX1dCX0NTUjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5jc3JfY21kICAgICAgICAgPSBTQ1IxX0NTUl9DTURfQ0xFQVI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uY3NyX29wICAgICAgICAgID0gU0NSMV9DU1JfT1BfUkVHOwotYGlmZGVmIFNDUjFfUlZFX0VYVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbMTFdIHwgaW5zdHJbMTldKSAgcnZlX2lsbGVnYWwgPSAxJ2IxOwotYGVuZGlmICAvLyBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IxMDEgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ1NSUldJCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMV9vICAgICAgICAgICAgID0gMSdiMTsgICAgICAgICAgICAgLy8gemltbQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX3diX3NlbCAgICAgICA9IFNDUjFfUkRfV0JfQ1NSOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmNzcl9jbWQgICAgICAgICA9IFNDUjFfQ1NSX0NNRF9XUklURTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5jc3Jfb3AgICAgICAgICAgPSBTQ1IxX0NTUl9PUF9JTU07Ci1gaWZkZWYgU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0clsxMV0pICAgICAgICAgICAgICBydmVfaWxsZWdhbCA9IDEnYjE7Ci1gZW5kaWYgIC8vIFNDUjFfUlZFX0VYVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjExMCAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDU1JSU0kKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMxX28gICAgICAgICAgICAgPSAxJ2IxOyAgICAgICAgICAgICAvLyB6aW1tCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgICAgID0gU0NSMV9SRF9XQl9DU1I7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uY3NyX2NtZCAgICAgICAgID0gU0NSMV9DU1JfQ01EX1NFVDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5jc3Jfb3AgICAgICAgICAgPSBTQ1IxX0NTUl9PUF9JTU07Ci1gaWZkZWYgU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0clsxMV0pICAgICAgICAgICAgICBydmVfaWxsZWdhbCA9IDEnYjE7Ci1gZW5kaWYgIC8vIFNDUjFfUlZFX0VYVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjExMSAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDU1JSQ0kKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMxX28gICAgICAgICAgICAgPSAxJ2IxOyAgICAgICAgICAgICAvLyB6aW1tCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgICAgID0gU0NSMV9SRF9XQl9DU1I7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uY3NyX2NtZCAgICAgICAgID0gU0NSMV9DU1JfQ01EX0NMRUFSOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmNzcl9vcCAgICAgICAgICA9IFNDUjFfQ1NSX09QX0lNTTsKLWBpZmRlZiBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RyWzExXSkgICAgICAgICAgICAgIHJ2ZV9pbGxlZ2FsID0gMSdiMTsKLWBlbmRpZiAgLy8gU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA6IHJ2aV9pbGxlZ2FsID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuZGNhc2UgLy8gZnVuY3QzCi0gICAgICAgICAgICAgICAgICAgIGVuZCAvLyBTQ1IxX09QQ09ERV9TWVNURU0KLQotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIHJ2aV9pbGxlZ2FsID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgZW5kY2FzZSAvLyBydmlfb3Bjb2RlCi0gICAgICAgICAgICBlbmQgLy8gU0NSMV9JTlNUUl9SVkkKLQotYGlmZGVmIFNDUjFfUlZDX0VYVAotCi0gICAgICAgICAgICAvLyBRdWFkcmFudCAwCi0gICAgICAgICAgICBTQ1IxX0lOU1RSX1JWQzAgOiBiZWdpbgotICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW5zdHJfcnZjICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMV9vICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX2ltbV9vICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgIGNhc2UgKGZ1bmN0MykKLSAgICAgICAgICAgICAgICAgICAgMydiMDAwICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAofnxpbnN0clsxMjo1XSkgICAgICBydmNfaWxsZWdhbCA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDLkFEREk0U1BOCi0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yZF9vICAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9jbWQgICAgPSBTQ1IxX0lBTFVfQ01EX0FERDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9vcCAgICAgPSBTQ1IxX0lBTFVfT1BfUkVHX0lNTTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgPSBTQ1IxX1JEX1dCX0lBTFU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJzMV9hZGRyICAgID0gU0NSMV9NUFJGX1NQX0FERFI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX2FkZHIgICAgID0gezInYjAxLCBpbnN0cls0OjJdfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgICAgPSB7MjInZDAsIGluc3RyWzEwOjddLCBpbnN0clsxMjoxMV0sIGluc3RyWzVdLCBpbnN0cls2XSwgMidiMDB9OwotICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgMydiMDEwICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDLkxXCi0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yZF9vICAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uc3VtMl9vcCAgICAgPSBTQ1IxX1NVTTJfT1BfUkVHX0lNTTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ubHN1X2NtZCAgICAgPSBTQ1IxX0xTVV9DTURfTFc7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX3diX3NlbCAgID0gU0NSMV9SRF9XQl9MU1U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJzMV9hZGRyICAgID0gezInYjAxLCBpbnN0cls5OjddfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfYWRkciAgICAgPSB7MidiMDEsIGluc3RyWzQ6Ml19OwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pbW0gICAgICAgICA9IHsyNSdkMCwgaW5zdHJbNV0sIGluc3RyWzEyOjEwXSwgaW5zdHJbNl0sIDInYjAwfTsKLSAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgICAgIDMnYjExMCAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQy5TVwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMyX28gICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnN1bTJfb3AgICAgID0gU0NSMV9TVU0yX09QX1JFR19JTU07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmxzdV9jbWQgICAgID0gU0NSMV9MU1VfQ01EX1NXOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yczFfYWRkciAgICA9IHsyJ2IwMSwgaW5zdHJbOTo3XX07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJzMl9hZGRyICAgID0gezInYjAxLCBpbnN0cls0OjJdfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgICAgPSB7MjUnZDAsIGluc3RyWzVdLCBpbnN0clsxMjoxMF0sIGluc3RyWzZdLCAyJ2IwMH07Ci0gICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIHJ2Y19pbGxlZ2FsID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgZW5kY2FzZSAvLyBmdW5jdDMKLSAgICAgICAgICAgIGVuZCAvLyBRdWFkcmFudCAwCi0KLSAgICAgICAgICAgIC8vIFF1YWRyYW50IDEKLSAgICAgICAgICAgIFNDUjFfSU5TVFJfUlZDMSA6IGJlZ2luCi0gICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pbnN0cl9ydmMgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcmRfbyAgICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfaW1tX28gICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgY2FzZSAoZnVuY3QzKQotICAgICAgICAgICAgICAgICAgICAzJ2IwMDAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEMuQURESSAvIEMuTk9QCi0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yczFfbyAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9jbWQgICAgPSBTQ1IxX0lBTFVfQ01EX0FERDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9vcCAgICAgPSBTQ1IxX0lBTFVfT1BfUkVHX0lNTTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgPSBTQ1IxX1JEX1dCX0lBTFU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJzMV9hZGRyICAgID0gaW5zdHJbMTE6N107Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX2FkZHIgICAgID0gaW5zdHJbMTE6N107Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmltbSAgICAgICAgID0ge3syN3tpbnN0clsxMl19fSwgaW5zdHJbNjoyXX07Ci1gaWZkZWYgU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbMTFdKSAgICAgICAgICBydmVfaWxsZWdhbCA9IDEnYjE7Ci1gZW5kaWYgIC8vIFNDUjFfUlZFX0VYVAotICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgMydiMDAxICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDLkpBTAotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5zdW0yX29wICAgICA9IFNDUjFfU1VNMl9PUF9QQ19JTU07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX3diX3NlbCAgID0gU0NSMV9SRF9XQl9JTkNfUEM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmp1bXBfcmVxICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfYWRkciAgICAgPSBTQ1IxX01QUkZfUkFfQUREUjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgICAgPSB7ezIxe2luc3RyWzEyXX19LCBpbnN0cls4XSwgaW5zdHJbMTA6OV0sIGluc3RyWzZdLCBpbnN0cls3XSwgaW5zdHJbMl0sIGluc3RyWzExXSwgaW5zdHJbNTozXSwgMSdiMH07Ci0gICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICAzJ2IwMTAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEMuTEkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgPSBTQ1IxX1JEX1dCX0lNTTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfYWRkciAgICAgPSBpbnN0clsxMTo3XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgICAgPSB7ezI3e2luc3RyWzEyXX19LCBpbnN0cls2OjJdfTsKLWBpZmRlZiBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0clsxMV0pICAgICAgICAgIHJ2ZV9pbGxlZ2FsID0gMSdiMTsKLWBlbmRpZiAgLy8gU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICAzJ2IwMTEgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh+fHtpbnN0clsxMl0sIGluc3RyWzY6Ml19KSBydmNfaWxsZWdhbCA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbMTE6N10gPT0gU0NSMV9NUFJGX1NQX0FERFIpIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQy5BRERJMTZTUAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMV9vICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9jbWQgICAgPSBTQ1IxX0lBTFVfQ01EX0FERDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmlhbHVfb3AgICAgID0gU0NSMV9JQUxVX09QX1JFR19JTU07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF93Yl9zZWwgICA9IFNDUjFfUkRfV0JfSUFMVTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJzMV9hZGRyICAgID0gU0NSMV9NUFJGX1NQX0FERFI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF9hZGRyICAgICA9IFNDUjFfTVBSRl9TUF9BRERSOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgICAgPSB7ezIze2luc3RyWzEyXX19LCBpbnN0cls0OjNdLCBpbnN0cls1XSwgaW5zdHJbMl0sIGluc3RyWzZdLCA0J2QwfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQy5MVUkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX3diX3NlbCAgID0gU0NSMV9SRF9XQl9JTU07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF9hZGRyICAgICA9IGluc3RyWzExOjddOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgICAgPSB7ezE1e2luc3RyWzEyXX19LCBpbnN0cls2OjJdLCAxMidkMH07Ci1gaWZkZWYgU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RyWzExXSkgICAgICAgICAgcnZlX2lsbGVnYWwgPSAxJ2IxOwotYGVuZGlmICAvLyBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgMydiMTAwICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJzMV9hZGRyICAgID0gezInYjAxLCBpbnN0cls5OjddfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfYWRkciAgICAgPSB7MidiMDEsIGluc3RyWzk6N119OwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yczJfYWRkciAgICA9IHsyJ2IwMSwgaW5zdHJbNDoyXX07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yczFfbyAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JkX28gICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAoaW5zdHJbMTE6MTBdKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDInYjAwICAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbMTJdKSAgICAgICAgICBydmNfaWxsZWdhbCA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEMuU1JMSQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9pbW1fbyAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pbW0gICAgICAgICA9IHsyNydkMCwgaW5zdHJbNjoyXX07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9jbWQgICAgPSBTQ1IxX0lBTFVfQ01EX1NSTDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X29wICAgICA9IFNDUjFfSUFMVV9PUF9SRUdfSU1NOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX3diX3NlbCAgID0gU0NSMV9SRF9XQl9JQUxVOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDInYjAxICAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbMTJdKSAgICAgICAgICBydmNfaWxsZWdhbCA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEMuU1JBSQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9pbW1fbyAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pbW0gICAgICAgICA9IHsyNydkMCwgaW5zdHJbNjoyXX07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9jbWQgICAgPSBTQ1IxX0lBTFVfQ01EX1NSQTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X29wICAgICA9IFNDUjFfSUFMVV9PUF9SRUdfSU1NOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX3diX3NlbCAgID0gU0NSMV9SRF9XQl9JQUxVOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDInYjEwICAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDLkFOREkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfaW1tX28gICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9jbWQgICAgPSBTQ1IxX0lBTFVfQ01EX0FORDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X29wICAgICA9IFNDUjFfSUFMVV9PUF9SRUdfSU1NOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX3diX3NlbCAgID0gU0NSMV9SRF9XQl9JQUxVOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmltbSAgICAgICAgID0ge3syN3tpbnN0clsxMl19fSwgaW5zdHJbNjoyXX07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMidiMTEgICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMl9vICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICh7aW5zdHJbMTJdLCBpbnN0cls2OjVdfSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjAwMCAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEMuU1VCCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgICA9IFNDUjFfSUFMVV9DTURfU1VCOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9vcCAgICAgPSBTQ1IxX0lBTFVfT1BfUkVHX1JFRzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX3diX3NlbCAgID0gU0NSMV9SRF9XQl9JQUxVOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMDEgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDLlhPUgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9jbWQgICAgPSBTQ1IxX0lBTFVfQ01EX1hPUjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmlhbHVfb3AgICAgID0gU0NSMV9JQUxVX09QX1JFR19SRUc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF93Yl9zZWwgICA9IFNDUjFfUkRfV0JfSUFMVTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMDEwICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQy5PUgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9jbWQgICAgPSBTQ1IxX0lBTFVfQ01EX09SOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9vcCAgICAgPSBTQ1IxX0lBTFVfT1BfUkVHX1JFRzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX3diX3NlbCAgID0gU0NSMV9SRF9XQl9JQUxVOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMTEgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDLkFORAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9jbWQgICAgPSBTQ1IxX0lBTFVfQ01EX0FORDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmlhbHVfb3AgICAgID0gU0NSMV9JQUxVX09QX1JFR19SRUc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF93Yl9zZWwgICA9IFNDUjFfUkRfV0JfSUFMVTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnZjX2lsbGVnYWwgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZGNhc2UgLy8ge2luc3RyWzEyXSwgaW5zdHJbNjo1XX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuZGNhc2UgLy8gaW5zdHJbMTE6MTBdCi0gICAgICAgICAgICAgICAgICAgIGVuZCAvLyBmdW5jdDMgPT0gMydiMTAwCi0gICAgICAgICAgICAgICAgICAgIDMnYjEwMSAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQy5KCi0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9pbW1fbyAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uc3VtMl9vcCAgICAgPSBTQ1IxX1NVTTJfT1BfUENfSU1NOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5qdW1wX3JlcSAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmltbSAgICAgICAgID0ge3syMXtpbnN0clsxMl19fSwgaW5zdHJbOF0sIGluc3RyWzEwOjldLCBpbnN0cls2XSwgaW5zdHJbN10sIGluc3RyWzJdLCBpbnN0clsxMV0sIGluc3RyWzU6M10sIDEnYjB9OwotICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgMydiMTEwICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDLkJFUVoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMV9vICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMyX28gICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9pbW1fbyAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9jbWQgICAgPSBTQ1IxX0lBTFVfQ01EX1NVQl9FUTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9vcCAgICAgPSBTQ1IxX0lBTFVfT1BfUkVHX1JFRzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uc3VtMl9vcCAgICAgPSBTQ1IxX1NVTTJfT1BfUENfSU1NOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5icmFuY2hfcmVxICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJzMV9hZGRyICAgID0gezInYjAxLCBpbnN0cls5OjddfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucnMyX2FkZHIgICAgPSBTQ1IxX01QUkZfWkVST19BRERSOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pbW0gICAgICAgICA9IHt7MjR7aW5zdHJbMTJdfX0sIGluc3RyWzY6NV0sIGluc3RyWzJdLCBpbnN0clsxMToxMF0sIGluc3RyWzQ6M10sIDEnYjB9OwotICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgMydiMTExICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDLkJORVoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMV9vICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMyX28gICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9pbW1fbyAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9jbWQgICAgPSBTQ1IxX0lBTFVfQ01EX1NVQl9ORTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9vcCAgICAgPSBTQ1IxX0lBTFVfT1BfUkVHX1JFRzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uc3VtMl9vcCAgICAgPSBTQ1IxX1NVTTJfT1BfUENfSU1NOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5icmFuY2hfcmVxICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJzMV9hZGRyICAgID0gezInYjAxLCBpbnN0cls5OjddfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucnMyX2FkZHIgICAgPSBTQ1IxX01QUkZfWkVST19BRERSOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pbW0gICAgICAgICA9IHt7MjR7aW5zdHJbMTJdfX0sIGluc3RyWzY6NV0sIGluc3RyWzJdLCBpbnN0clsxMToxMF0sIGluc3RyWzQ6M10sIDEnYjB9OwotICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICBlbmRjYXNlIC8vIGZ1bmN0MwotICAgICAgICAgICAgZW5kIC8vIFF1YWRyYW50IDEKLQotICAgICAgICAgICAgLy8gUXVhZHJhbnQgMgotICAgICAgICAgICAgU0NSMV9JTlNUUl9SVkMyIDogYmVnaW4KLSAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmluc3RyX3J2YyAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yczFfbyAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICBjYXNlIChmdW5jdDMpCi0gICAgICAgICAgICAgICAgICAgIDMnYjAwMCAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RyWzEyXSkgICAgICAgICAgcnZjX2lsbGVnYWwgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQy5TTExJCi0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yZF9vICAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX2ltbV9vICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yczFfYWRkciAgICA9IGluc3RyWzExOjddOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF9hZGRyICAgICA9IGluc3RyWzExOjddOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pbW0gICAgICAgICA9IHsyNydkMCwgaW5zdHJbNjoyXX07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmlhbHVfY21kICAgID0gU0NSMV9JQUxVX0NNRF9TTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmlhbHVfb3AgICAgID0gU0NSMV9JQUxVX09QX1JFR19JTU07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX3diX3NlbCAgID0gU0NSMV9SRF9XQl9JQUxVOwotYGlmZGVmIFNDUjFfUlZFX0VYVAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RyWzExXSkgICAgICAgICAgcnZlX2lsbGVnYWwgPSAxJ2IxOwotYGVuZGlmICAvLyBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgICAgIDMnYjAxMCAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKH58aW5zdHJbMTE6N10pICAgICAgcnZjX2lsbGVnYWwgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQy5MV1NQCi0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yZF9vICAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX2ltbV9vICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5zdW0yX29wICAgICA9IFNDUjFfU1VNMl9PUF9SRUdfSU1NOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5sc3VfY21kICAgICA9IFNDUjFfTFNVX0NNRF9MVzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgPSBTQ1IxX1JEX1dCX0xTVTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucnMxX2FkZHIgICAgPSBTQ1IxX01QUkZfU1BfQUREUjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfYWRkciAgICAgPSBpbnN0clsxMTo3XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgICAgPSB7MjQnZDAsIGluc3RyWzM6Ml0sIGluc3RyWzEyXSwgaW5zdHJbNjo0XSwgMidiMDB9OwotYGlmZGVmIFNDUjFfUlZFX0VYVAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RyWzExXSkgICAgICAgICAgcnZlX2lsbGVnYWwgPSAxJ2IxOwotYGVuZGlmICAvLyBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgICAgIDMnYjEwMCAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKH5pbnN0clsxMl0pIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHxpbnN0cls2OjJdKSBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDLk1WCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMl9vICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yZF9vICAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgICA9IFNDUjFfSUFMVV9DTURfQUREOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmlhbHVfb3AgICAgID0gU0NSMV9JQUxVX09QX1JFR19SRUc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgPSBTQ1IxX1JEX1dCX0lBTFU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucnMxX2FkZHIgICAgPSBTQ1IxX01QUkZfWkVST19BRERSOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJzMl9hZGRyICAgID0gaW5zdHJbNjoyXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF9hZGRyICAgICA9IGluc3RyWzExOjddOwotYGlmZGVmIFNDUjFfUlZFX0VYVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbMTFdfGluc3RyWzZdKSBydmVfaWxsZWdhbCA9IDEnYjE7Ci1gZW5kaWYgIC8vIFNDUjFfUlZFX0VYVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh+fGluc3RyWzExOjddKSAgICAgIHJ2Y19pbGxlZ2FsID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQy5KUgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9pbW1fbyAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5zdW0yX29wICAgICA9IFNDUjFfU1VNMl9PUF9SRUdfSU1NOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmp1bXBfcmVxICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yczFfYWRkciAgICA9IGluc3RyWzExOjddOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmltbSAgICAgICAgID0gMDsKLWBpZmRlZiBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RyWzExXSkgICAgICAgICAgcnZlX2lsbGVnYWwgPSAxJ2IxOwotYGVuZGlmICAvLyBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luICAvLyBpbnN0clsxMl0gPT0gMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh+fGluc3RyWzExOjJdKSBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDLkVCUkVBSwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmV4Y19yZXEgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5leGNfY29kZSAgICA9IFNDUjFfRVhDX0NPREVfQlJFQUtQT0lOVDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgZWxzZSBpZiAofnxpbnN0cls2OjJdKSBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDLkpBTFIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMxX28gICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JkX28gICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9pbW1fbyAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5zdW0yX29wICAgICA9IFNDUjFfU1VNMl9PUF9SRUdfSU1NOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX3diX3NlbCAgID0gU0NSMV9SRF9XQl9JTkNfUEM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uanVtcF9yZXEgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJzMV9hZGRyICAgID0gaW5zdHJbMTE6N107Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfYWRkciAgICAgPSBTQ1IxX01QUkZfUkFfQUREUjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pbW0gICAgICAgICA9IDA7Ci1gaWZkZWYgU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0clsxMV0pICAgICAgICAgIHJ2ZV9pbGxlZ2FsID0gMSdiMTsKLWBlbmRpZiAgLy8gU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQy5BREQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMxX28gICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMl9vICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yZF9vICAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgICA9IFNDUjFfSUFMVV9DTURfQUREOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmlhbHVfb3AgICAgID0gU0NSMV9JQUxVX09QX1JFR19SRUc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgPSBTQ1IxX1JEX1dCX0lBTFU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucnMxX2FkZHIgICAgPSBpbnN0clsxMTo3XTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yczJfYWRkciAgICA9IGluc3RyWzY6Ml07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfYWRkciAgICAgPSBpbnN0clsxMTo3XTsKLWBpZmRlZiBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RyWzExXXxpbnN0cls2XSkgcnZlX2lsbGVnYWwgPSAxJ2IxOwotYGVuZGlmICAvLyBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuZCAvLyBpbnN0clsxMl0gPT0gMQotICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgMydiMTEwICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDLlNXU1AKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMV9vICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMyX28gICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9pbW1fbyAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uc3VtMl9vcCAgICAgPSBTQ1IxX1NVTTJfT1BfUkVHX0lNTTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ubHN1X2NtZCAgICAgPSBTQ1IxX0xTVV9DTURfU1c7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJzMV9hZGRyICAgID0gU0NSMV9NUFJGX1NQX0FERFI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJzMl9hZGRyICAgID0gaW5zdHJbNjoyXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgICAgPSB7MjQnZDAsIGluc3RyWzg6N10sIGluc3RyWzEyOjldLCAyJ2IwMH07Ci1gaWZkZWYgU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbNl0pICAgICAgICAgICBydmVfaWxsZWdhbCA9IDEnYjE7Ci1gZW5kaWYgIC8vIFNDUjFfUlZFX0VYVAotICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICBydmNfaWxsZWdhbCA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgIGVuZGNhc2UgLy8gZnVuY3QzCi0gICAgICAgICAgICBlbmQgLy8gUXVhZHJhbnQgMgotCi0gICAgICAgICAgICBkZWZhdWx0ICAgICAgICAgOiBiZWdpbgotICAgICAgICAgICAgZW5kCi1gZWxzZSAgIC8vIFNDUjFfUlZDX0VYVAotICAgICAgICAgICAgZGVmYXVsdCAgICAgICAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmluc3RyX3J2YyAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICBydmlfaWxsZWdhbCAgICAgICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICBlbmQKLWBlbmRpZiAgLy8gU0NSMV9SVkNfRVhUCi0gICAgICAgIGVuZGNhc2UgLy8gaW5zdHJfdHlwZQotICAgIGVuZCAvLyBubyBpbWVtIGZhdWx0Ci0KLSAgICAvLyBBdCB0aGlzIHBvaW50IHRoZSBpbnN0cnVjdGlvbiBpcyBmdWxseSBkZWNvZGVkCi0gICAgLy8gZ2l2ZW4gdGhhdCBubyBpbWVtIGZhdWx0IGhhcyBoYXBwZW5lZAotCi0gICAgLy8gQ2hlY2sgaWxsZWdhbCBpbnN0cnVjdGlvbgotICAgIGlmICgKLSAgICBydmlfaWxsZWdhbAotYGlmZGVmIFNDUjFfUlZDX0VYVAotICAgIHwgcnZjX2lsbGVnYWwKLWBlbmRpZgotYGlmZGVmIFNDUjFfUlZFX0VYVAotICAgIHwgcnZlX2lsbGVnYWwKLWBlbmRpZgotICAgICkgYmVnaW4KLSAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgICAgICAgPSBTQ1IxX0lBTFVfQ01EX05PTkU7Ci0gICAgICAgIGlkdTJleHVfY21kX28ubHN1X2NtZCAgICAgICAgID0gU0NSMV9MU1VfQ01EX05PTkU7Ci0gICAgICAgIGlkdTJleHVfY21kX28uY3NyX2NtZCAgICAgICAgID0gU0NSMV9DU1JfQ01EX05PTkU7Ci0gICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgICAgID0gU0NSMV9SRF9XQl9OT05FOwotICAgICAgICBpZHUyZXh1X2NtZF9vLmp1bXBfcmVxICAgICAgICA9IDEnYjA7Ci0gICAgICAgIGlkdTJleHVfY21kX28uYnJhbmNoX3JlcSAgICAgID0gMSdiMDsKLSAgICAgICAgaWR1MmV4dV9jbWRfby5tcmV0X3JlcSAgICAgICAgPSAxJ2IwOwotICAgICAgICBpZHUyZXh1X2NtZF9vLmZlbmNlaV9yZXEgICAgICA9IDEnYjA7Ci0gICAgICAgIGlkdTJleHVfY21kX28ud2ZpX3JlcSAgICAgICAgID0gMSdiMDsKLQotICAgICAgICBpZHUyZXh1X3VzZV9yczFfbyAgICAgICAgICAgICA9IDEnYjA7Ci0gICAgICAgIGlkdTJleHVfdXNlX3JzMl9vICAgICAgICAgICAgID0gMSdiMDsKLSAgICAgICAgaWR1MmV4dV91c2VfcmRfbyAgICAgICAgICAgICAgPSAxJ2IwOwotCi1gaWZuZGVmIFNDUjFfTVRWQUxfSUxMRUdBTF9JTlNUUl9FTgotICAgICAgICBpZHUyZXh1X3VzZV9pbW1fbyAgICAgICAgICAgICA9IDEnYjA7Ci1gZWxzZSAvLyBTQ1IxX01UVkFMX0lMTEVHQUxfSU5TVFJfRU4KLSAgICAgICAgaWR1MmV4dV91c2VfaW1tX28gICAgICAgICAgICAgPSAxJ2IxOwotICAgICAgICBpZHUyZXh1X2NtZF9vLmltbSAgICAgICAgICAgICA9IGluc3RyOwotYGVuZGlmIC8vIFNDUjFfTVRWQUxfSUxMRUdBTF9JTlNUUl9FTgotCi0gICAgICAgIGlkdTJleHVfY21kX28uZXhjX3JlcSAgICAgICAgID0gMSdiMTsKLSAgICAgICAgaWR1MmV4dV9jbWRfby5leGNfY29kZSAgICAgICAgPSBTQ1IxX0VYQ19DT0RFX0lMTEVHQUxfSU5TVFI7Ci0gICAgZW5kCi0KLWVuZCAvLyBSVjMySShNQykgZGVjb2RlCi0KLWBpZmRlZiBTQ1IxX1RSR1RfU0lNVUxBVElPTgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBBc3NlcnRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBYIGNoZWNrcwotCi1TQ1IxX1NWQV9JRFVfWENIRUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgICEkaXN1bmtub3duKHtpZnUyaWR1X3ZkX2ksIGV4dTJpZHVfcmR5X2l9KQotICAgICkgZWxzZSAkZXJyb3IoIklEVSBFcnJvcjogdW5rbm93biB2YWx1ZXMiKTsKLQotU0NSMV9TVkFfSURVX1hDSEVDSzIgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgaWZ1MmlkdV92ZF9pIHwtPiAhJGlzdW5rbm93bih7aWZ1MmlkdV9pbWVtX2Vycl9pLCAoaWZ1MmlkdV9pbWVtX2Vycl9pID8gMCA6IGlmdTJpZHVfaW5zdHJfaSl9KQotICAgICkgZWxzZSAkZXJyb3IoIklEVSBFcnJvcjogdW5rbm93biB2YWx1ZXMiKTsKLQotLy8gQmVoYXZpb3IgY2hlY2tzCi0KLVNDUjFfU1ZBX0lEVV9JQUxVX0NNRF9SQU5HRSA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICAoaWZ1MmlkdV92ZF9pICYgfmlmdTJpZHVfaW1lbV9lcnJfaSkgfC0+Ci0gICAgKChpZHUyZXh1X2NtZF9vLmlhbHVfY21kID49IFNDUjFfSUFMVV9DTURfTk9ORSkgJgotICAgIChpZHUyZXh1X2NtZF9vLmlhbHVfY21kIDw9Ci1gaWZkZWYgU0NSMV9SVk1fRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9JQUxVX0NNRF9SRU1VCi1gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfSUFMVV9DTURfU1JBCi1gZW5kaWYgLy8gU0NSMV9SVk1fRVhUCi0gICAgICAgICkpCi0gICAgKSBlbHNlICRlcnJvcigiSURVIEVycm9yOiBJQUxVX0NNRCBvdXQgb2YgcmFuZ2UiKTsKLQotYGVuZGlmIC8vIFNDUjFfVFJHVF9TSU1VTEFUSU9OCi0KLWVuZG1vZHVsZSA6IHNjcjFfcGlwZV9pZHUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9pZnUuc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfaWZ1LnN2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2UyZWYxLi4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9pZnUuc3YKKysrIC9kZXYvbnVsbApAQCAtMSw4NDYgKzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiBTeW50YWNvcmUgTExDIMKpIDIwMTYtMjAyMQotLy8gCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAotLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IFN5bnRhY29yZSBMTEMKLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8gQGZpbGUgICAgICAgPHNjcjFfcGlwZV9pZnUuc3Y+Ci0vLy8gQGJyaWVmICAgICAgSW5zdHJ1Y3Rpb24gRmV0Y2ggVW5pdCAoSUZVKQotLy8vCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gLy8KLSAvLyBGdW5jdGlvbmFsaXR5OgotIC8vIC0gQ29udHJvbHMgaW5zdHJ1Y3Rpb24gZmV0Y2hpbmcgcHJvY2VzczoKLSAvLyAgIC0gRmV0Y2hlcyBpbnN0cnVjdGlvbnMgZWl0aGVyIGZyb20gSU1FTSBvciBmcm9tIFByb2dyYW0gQnVmZmVyLCBzdXBwb3J0aW5nCi0gLy8gICAgIHBlbmRpbmcgSU1FTSBpbnN0cnVjdGlvbnMgaGFuZGxpbmcKLSAvLyAgIC0gSGFuZGxlcyBuZXcgUEMgbWlzYWxpZ25tZW50IGFuZCBjb25zdHJ1Y3RzIHRoZSBjb3JyZWN0IGluc3RydWN0aW9uIChzdXBwb3J0cwotIC8vICAgICBSVkkgYW5kIFJWQyBpbnN0cnVjdGlvbnMpCi0gLy8gICAtIEVpdGhlciBzdG9yZXMgaW5zdHJ1Y3Rpb25zIGluIHRoZSBpbnN0cnVjdGlvbiBxdWV1ZSBvciBieXBhc3NlcyB0byB0aGUKLSAvLyAgICAgSURVIGlmIHRoZSBjb3JyZXNwb25kaW5nIG9wdGlvbiBpcyB1c2VkCi0gLy8gICAtIEZsdXNoZXMgaW5zdHJ1Y3Rpb24gcXVldWUgaWYgcmVxdWVzdGVkCi0gLy8KLSAvLyBTdHJ1Y3R1cmU6Ci0gLy8gLSBJbnN0cnVjdGlvbiBxdWV1ZQotIC8vIC0gSUZVIEZTTQotIC8vIC0gSUZVIDwtPiBJTUVNIGkvZgotIC8vIC0gSUZVIDwtPiBJRFUgaS9mCi0gLy8gLSBJRlUgPC0+IEhEVSBpL2YKLSAvLwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYGluY2x1ZGUgInNjcjFfbWVtaWYuc3ZoIgotYGluY2x1ZGUgInNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgiCi1gaWZkZWYgU0NSMV9EQkdfRU4KLWBpbmNsdWRlICJzY3IxX2hkdS5zdmgiCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotbW9kdWxlIHNjcjFfcGlwZV9pZnUKLSgKLSAgICAvLyBDb250cm9sIHNpZ25hbHMKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByc3RfbiwgICAgICAgICAgICAgICAgICAgICAgLy8gSUZVIHJlc2V0Ci0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIElGVSBjbG9jawotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUyaWZ1X3N0b3BfZmV0Y2hfaSwgICAgICAvLyBTdG9wIGluc3RydWN0aW9uIGZldGNoCi0KLSAgICAvLyBJRlUgPC0+IElNRU0gaW50ZXJmYWNlCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1lbTJpZnVfcmVxX2Fja19pLCAgICAgICAgIC8vIEluc3RydWN0aW9uIG1lbW9yeSByZXF1ZXN0IGFja25vd2xlZGdlbWVudAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmdTJpbWVtX3JlcV9vLCAgICAgICAgICAgICAvLyBJbnN0cnVjdGlvbiBtZW1vcnkgcmVxdWVzdAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmdTJpbWVtX2NtZF9vLCAgICAgICAgICAgICAvLyBJbnN0cnVjdGlvbiBtZW1vcnkgY29tbWFuZCAoUkVBRC9XUklURSkKLSAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9JTUVNX0FXSURUSC0xOjBdICAgICAgICAgICBpZnUyaW1lbV9hZGRyX28sICAgICAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gbWVtb3J5IGFkZHJlc3MKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9JTUVNX0RXSURUSC0xOjBdICAgICAgICAgICBpbWVtMmlmdV9yZGF0YV9pLCAgICAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gbWVtb3J5IHJlYWQgZGF0YQotICAgIGlucHV0ICAgbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW0yaWZ1X3Jlc3BfaSwgICAgICAgICAgICAvLyBJbnN0cnVjdGlvbiBtZW1vcnkgcmVzcG9uc2UKLQotICAgIC8vIElGVSA8LT4gRVhVIE5ldyBQQyBpbnRlcmZhY2UKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUyaWZ1X3BjX25ld19yZXFfaSwgICAgICAgLy8gTmV3IFBDIHJlcXVlc3QgKGp1bXBzLCBicmFuY2hlcywgdHJhcHMgZXRjKQotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgIGV4dTJpZnVfcGNfbmV3X2ksICAgICAgICAgICAvLyBOZXcgUEMKLQotYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgLy8gSUZVIDwtPiBIRFUgUHJvZ3JhbSBCdWZmZXIgaW50ZXJmYWNlCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1MmlmdV9wYnVmX2ZldGNoX2ksICAgICAgIC8vIEZldGNoIGluc3RydWN0aW9ucyBwcm92aWRlZCBieSBQcm9ncmFtIEJ1ZmZlcgotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmdTJoZHVfcGJ1Zl9yZHlfbywgICAgICAgICAvLyBQcm9ncmFtIEJ1ZmZlciBJbnN0cnVjdGlvbiBpL2YgcmVhZHkKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHUyaWZ1X3BidWZfdmRfaSwgICAgICAgICAgLy8gUHJvZ3JhbSBCdWZmZXIgSW5zdHJ1Y3Rpb24gdmFsaWQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHUyaWZ1X3BidWZfZXJyX2ksICAgICAgICAgLy8gUHJvZ3JhbSBCdWZmZXIgSW5zdHJ1Y3Rpb24gaS9mIGVycm9yCi0gICAgaW5wdXQgICBsb2dpYyBbU0NSMV9IRFVfQ09SRV9JTlNUUl9XSURUSC0xOjBdICAgaGR1MmlmdV9wYnVmX2luc3RyX2ksICAgICAgIC8vIFByb2dyYW0gQnVmZmVyIEluc3RydWN0aW9uIGl0c2VsZgotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KLWBpZmRlZiBTQ1IxX0NMS0NUUkxfRU4KLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZnUycGlwZV9pbWVtX3R4bnNfcG5kX28sICAgLy8gVGhlcmUgYXJlIHBlbmRpbmcgaW1lbSB0cmFuc2FjdGlvbnMKLWBlbmRpZiAvLyBTQ1IxX0NMS0NUUkxfRU4KLQotICAgIC8vIElGVSA8LT4gSURVIGludGVyZmFjZQotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJpZnVfcmR5X2ksICAgICAgICAgICAgICAvLyBJRFUgcmVhZHkgZm9yIG5ldyBkYXRhCi0gICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfSU1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgaWZ1MmlkdV9pbnN0cl9vLCAgICAgICAgICAgIC8vIElGVSBpbnN0cnVjdGlvbgotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmdTJpZHVfaW1lbV9lcnJfbywgICAgICAgICAvLyBJbnN0cnVjdGlvbiBhY2Nlc3MgZmF1bHQgZXhjZXB0aW9uCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZ1MmlkdV9lcnJfcnZpX2hpX28sICAgICAgIC8vIDEgLSBpbWVtIGZhdWx0IHdoZW4gdHJ5aW5nIHRvIGZldGNoIHNlY29uZCBoYWxmIG9mIGFuIHVuYWxpZ25lZCBSVkkgaW5zdHJ1Y3Rpb24KLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZnUyaWR1X3ZkX28gICAgICAgICAgICAgICAgLy8gSUZVIHJlcXVlc3QKLSk7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCBwYXJhbWV0ZXJzIGRlY2xhcmF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1sb2NhbHBhcmFtIFNDUjFfSUZVX1FfU0laRV9XT1JEICAgICA9IDI7Ci1sb2NhbHBhcmFtIFNDUjFfSUZVX1FfU0laRV9IQUxGICAgICA9IFNDUjFfSUZVX1FfU0laRV9XT1JEICogMjsKLWxvY2FscGFyYW0gU0NSMV9UWE5fQ05UX1cgICAgICAgICAgID0gMzsKLQotbG9jYWxwYXJhbSBTQ1IxX0lGVV9RVUVVRV9BRFJfVyAgICAgPSAkY2xvZzIoU0NSMV9JRlVfUV9TSVpFX0hBTEYpOwotbG9jYWxwYXJhbSBTQ1IxX0lGVV9RVUVVRV9QVFJfVyAgICAgPSBTQ1IxX0lGVV9RVUVVRV9BRFJfVyArIDE7Ci0KLWxvY2FscGFyYW0gU0NSMV9JRlVfUV9GUkVFX0hfVyAgICAgID0gJGNsb2cyKFNDUjFfSUZVX1FfU0laRV9IQUxGICsgMSk7Ci1sb2NhbHBhcmFtIFNDUjFfSUZVX1FfRlJFRV9XX1cgICAgICA9ICRjbG9nMihTQ1IxX0lGVV9RX1NJWkVfV09SRCArIDEpOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgdHlwZXMgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vdHlwZWRlZiBlbnVtIGxvZ2ljIHsKLXBhcmFtZXRlciAgICBTQ1IxX0lGVV9GU01fSURMRSAgICA9IDEnYjA7Ci1wYXJhbWV0ZXIgICAgU0NSMV9JRlVfRlNNX0ZFVENIICAgPSAxJ2IxOwotLy99IHR5cGVfc2NyMV9pZnVfZnNtX2U7Ci0KLS8vdHlwZWRlZiBlbnVtIGxvZ2ljWzE6MF0gewotcGFyYW1ldGVyICAgIFNDUjFfSUZVX1FVRVVFX1dSX05PTkUgPSAyJ2IwMDsgIC8vIE5vIHdyaXRlIHRvIHF1ZXVlCi1wYXJhbWV0ZXIgICAgU0NSMV9JRlVfUVVFVUVfV1JfRlVMTCA9IDInYjAxOyAgLy8gV3JpdGUgMzIgcmRhdGEgYml0cyB0byBxdWV1ZQotcGFyYW1ldGVyICAgIFNDUjFfSUZVX1FVRVVFX1dSX0hJICAgPSAyJ2IxMDsgIC8vIFdyaXRlIDE2IHVwcGVyIHJkYXRhIGJpdHMgdG8gcXVldWUKLS8vfSB0eXBlX3NjcjFfaWZ1X3F1ZXVlX3dyX2U7Ci0KLS8vdHlwZWRlZiBlbnVtIGxvZ2ljWzE6MF0gewotcGFyYW1ldGVyICAgIFNDUjFfSUZVX1FVRVVFX1JEX05PTkUgID0gMidiMDA7IC8vIE5vIHF1ZXVlIHJlYWQKLXBhcmFtZXRlciAgICBTQ1IxX0lGVV9RVUVVRV9SRF9IV09SRCA9IDInYjAxOyAvLyBSZWFkIGhhbGZ3b3JkCi1wYXJhbWV0ZXIgICAgU0NSMV9JRlVfUVVFVUVfUkRfV09SRCAgPSAyJ2IxMDsgLy8gUmVhZCB3b3JkCi0vL30gdHlwZV9zY3IxX2lmdV9xdWV1ZV9yZF9lOwotCi1gaWZkZWYgU0NSMV9OT19ERUNfU1RBR0UKLXR5cGVkZWYgZW51bSBsb2dpY1sxOjBdIHsKLSAgICBTQ1IxX0JZUEFTU19OT05FLCAgICAgICAgICAgICAgIC8vIE5vIGJ5cGFzcwotICAgIFNDUjFfQllQQVNTX1JWQywgICAgICAgICAgICAgICAgLy8gQnlwYXNzIFJWQwotICAgIFNDUjFfQllQQVNTX1JWSV9SREFUQV9RVUVVRSwgICAgLy8gQnlwYXNzIFJWSSwgcmRhdGErcXVldWUKLSAgICBTQ1IxX0JZUEFTU19SVklfUkRBVEEgICAgICAgICAgIC8vIEJ5cGFzcyBSVkksIHJkYXRhIG9ubHkKLX0gdHlwZV9zY3IxX2J5cGFzc19lOwotYGVuZGlmIC8vIFNDUjFfTk9fREVDX1NUQUdFCi0KLS8vdHlwZWRlZiBlbnVtIGxvZ2ljIFsyOjBdIHsKLSAgICAvLyBTQ1IxX0lGVV9JTlNUUl88VVBQRVJfMTZfQklUUz5fPExPV0VSXzE2X0JJVFM+Ci1wYXJhbWV0ZXIgICAgIFNDUjFfSUZVX0lOU1RSX05PTkUgICAgICAgICAgID0gMydiMDAwIDsgLy8gTm8gdmFsaWQgaW5zdHJ1Y3Rpb24KLXBhcmFtZXRlciAgICAgU0NSMV9JRlVfSU5TVFJfUlZJX0hJX1JWSV9MTyAgPSAzJ2IwMDEgOyAvLyBGdWxsIFJWMzJJIGluc3RydWN0aW9uCi1wYXJhbWV0ZXIgICAgIFNDUjFfSUZVX0lOU1RSX1JWQ19SVkMgICAgICAgID0gMydiMDEwIDsKLXBhcmFtZXRlciAgICAgU0NSMV9JRlVfSU5TVFJfUlZJX0xPX1JWQyAgICAgPSAzJ2IwMTEgOwotcGFyYW1ldGVyICAgICBTQ1IxX0lGVV9JTlNUUl9SVkNfUlZJX0hJICAgICA9IDMnYjEwMCA7Ci1wYXJhbWV0ZXIgICAgIFNDUjFfSUZVX0lOU1RSX1JWSV9MT19SVklfSEkgID0gMydiMTAxIDsKLXBhcmFtZXRlciAgICAgU0NSMV9JRlVfSU5TVFJfUlZDX05WICAgICAgICAgPSAzJ2IxMTAgOyAgLy8gSW5zdHJ1Y3Rpb24gYWZ0ZXIgdW5hbGlnbmVkIG5ld19wYwotcGFyYW1ldGVyICAgICBTQ1IxX0lGVV9JTlNUUl9SVklfTE9fTlYgICAgICA9IDMnYjExMSA7ICAvLyBJbnN0cnVjdGlvbiBhZnRlciB1bmFsaWduZWQgbmV3X3BjCi0vL30gdHlwZV9zY3IxX2lmdV9pbnN0cl9lOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgc2lnbmFscyBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gSW5zdHJ1Y3Rpb24gcXVldWUgc2lnbmFscwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gTmV3IFBDIHVuYWxpZ25lZCBmbGFnIHJlZ2lzdGVyCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfcGNfdW5hbGlnbmVkX2ZmOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3BjX3VuYWxpZ25lZF9uZXh0OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3BjX3VuYWxpZ25lZF91cGQ7Ci0KLS8vIElNRU0gaW5zdHJ1Y3Rpb24gdHlwZSBkZWNvZGVyCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0cl9oaV9pc19ydmk7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0cl9sb19pc19ydmk7Ci1sb2dpYyBbMjowXSAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0cl90eXBlOwotCi0vLyBSZWdpc3RlciB0byBzdG9yZSBpZiB0aGUgcHJldmlvdXMgSU1FTSBpbnN0cnVjdGlvbiBoYWQgbG93IHBhcnQgb2YgUlZJIGluc3RydWN0aW9uCi0vLyBpbiBpdHMgaGlnaCBwYXJ0Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0cl9oaV9ydmlfbG9fZmY7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0cl9oaV9ydmlfbG9fbmV4dDsKLQotLy8gUXVldWUgcmVhZC93cml0ZSBzaXplIGRlY29kZXJzCi1sb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICBxX3JkX3NpemU7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxX3JkX3ZkOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcV9yZF9ub25lOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcV9yZF9od29yZDsKLWxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgIHFfd3Jfc2l6ZTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFfd3Jfbm9uZTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFfd3JfZnVsbDsKLQotLy8gV3JpdGUvcmVhZCBwb2ludGVyIHJlZ2lzdGVycwotbG9naWMgW1NDUjFfSUZVX1FVRVVFX1BUUl9XLTE6MF0gICAgcV9ycHRyOwotbG9naWMgW1NDUjFfSUZVX1FVRVVFX1BUUl9XLTE6MF0gICAgcV9ycHRyX25leHQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxX3JwdHJfdXBkOwotbG9naWMgW1NDUjFfSUZVX1FVRVVFX1BUUl9XLTE6MF0gICAgcV93cHRyOwotbG9naWMgW1NDUjFfSUZVX1FVRVVFX1BUUl9XLTE6MF0gICAgcV93cHRyX25leHQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxX3dwdHJfdXBkOwotCi0vLyBJbnN0cnVjdGlvbiBxdWV1ZSBjb250cm9sIHNpZ25hbHMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFfd3JfZW47Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxX2ZsdXNoX3JlcTsKLQotLy8gUXVldWUgZGF0YSByZWdpc3RlcnMKLWxvZ2ljIFtgU0NSMV9JTUVNX0RXSURUSC8yLTE6MF0gICAgIHFfZGF0YSAgW1NDUjFfSUZVX1FfU0laRV9IQUxGXTsKLWxvZ2ljIFtgU0NSMV9JTUVNX0RXSURUSC8yLTE6MF0gICAgIHFfZGF0YV9oZWFkOwotbG9naWMgW2BTQ1IxX0lNRU1fRFdJRFRILzItMTowXSAgICAgcV9kYXRhX25leHQ7Ci0KLS8vIFF1ZXVlIGVycm9yIGZsYWdzIHJlZ2lzdGVycwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcV9lcnIgICBbU0NSMV9JRlVfUV9TSVpFX0hBTEZdOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcV9lcnJfaGVhZDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFfZXJyX25leHQ7Ci0KLS8vIEluc3RydWN0aW9uIHF1ZXVlIHN0YXR1cyBzaWduYWxzCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxX2lzX2VtcHR5OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcV9oYXNfZnJlZV9zbG90czsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFfaGFzXzFfb2NwZF9odzsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFfaGVhZF9pc19ydmM7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxX2hlYWRfaXNfcnZpOwotbG9naWMgW1NDUjFfSUZVX1FfRlJFRV9IX1ctMTowXSAgICAgcV9vY3BkX2g7Ci1sb2dpYyBbU0NSMV9JRlVfUV9GUkVFX0hfVy0xOjBdICAgICBxX2ZyZWVfaF9uZXh0OwotbG9naWMgW1NDUjFfSUZVX1FfRlJFRV9XX1ctMTowXSAgICAgcV9mcmVlX3dfbmV4dDsKLQotLy8gSUZVIEZTTSBzaWduYWxzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBJRlUgRlNNIGNvbnRyb2wgc2lnbmFscwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZ1X2ZldGNoX3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmdV9zdG9wX3JlcTsKLQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZ1X2ZzbV9jdXJyOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZ1X2ZzbV9uZXh0OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZ1X2ZzbV9mZXRjaDsKLQotLy8gSU1FTSBzaWduYWxzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBJTUVNIHJlc3BvbnNlIHNpZ25hbHMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW1fcmVzcF9vazsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW1fcmVzcF9lcjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW1fcmVzcF9lcl9kaXNjYXJkX3BuZDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW1fcmVzcF9kaXNjYXJkX3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW1fcmVzcF9yZWNlaXZlZDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW1fcmVzcF92ZDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW1faGFuZHNoYWtlX2RvbmU7Ci0KLWxvZ2ljIFsxNTowXSAgICAgICAgICAgICAgICAgICAgICAgIGltZW1fcmRhdGFfbG87Ci1sb2dpYyBbMzE6MTZdICAgICAgICAgICAgICAgICAgICAgICBpbWVtX3JkYXRhX2hpOwotCi0vLyBJTUVNIGFkZHJlc3Mgc2lnbmFscwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1lbV9hZGRyX3VwZDsKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6Ml0gICAgICAgICAgICAgIGltZW1fYWRkcl9mZjsKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6Ml0gICAgICAgICAgICAgIGltZW1fYWRkcl9uZXh0OwotCi0vLyBJTUVNIHBlbmRpbmcgdHJhbnNhY3Rpb25zIGNvdW50ZXIKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW1fcG5kX3R4bnNfY250X3VwZDsKLWxvZ2ljIFtTQ1IxX1RYTl9DTlRfVy0xOjBdICAgICAgICAgIGltZW1fcG5kX3R4bnNfY250OwotbG9naWMgW1NDUjFfVFhOX0NOVF9XLTE6MF0gICAgICAgICAgaW1lbV9wbmRfdHhuc19jbnRfbmV4dDsKLWxvZ2ljIFtTQ1IxX1RYTl9DTlRfVy0xOjBdICAgICAgICAgIGltZW1fdmRfcG5kX3R4bnNfY250OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1lbV9wbmRfdHhuc19xX2Z1bGw7Ci0KLS8vIElNRU0gcmVzcG9uc2VzIGRpc2NhcmQgY291bnRlcgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1lbV9yZXNwX2Rpc2NhcmRfY250X3VwZDsKLWxvZ2ljIFtTQ1IxX1RYTl9DTlRfVy0xOjBdICAgICAgICAgIGltZW1fcmVzcF9kaXNjYXJkX2NudDsKLWxvZ2ljIFtTQ1IxX1RYTl9DTlRfVy0xOjBdICAgICAgICAgIGltZW1fcmVzcF9kaXNjYXJkX2NudF9uZXh0OwotCi1gaWZkZWYgU0NSMV9ORVdfUENfUkVHCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfcGNfcmVxX2ZmOwotYGVuZGlmIC8vIFNDUjFfTkVXX1BDX1JFRwotCi0vLyBJbnN0cnVjdGlvbiBieXBhc3Mgc2lnbmFscwotYGlmZGVmIFNDUjFfTk9fREVDX1NUQUdFCi10eXBlX3NjcjFfYnlwYXNzX2UgICAgICAgICAgICAgICAgICBpbnN0cl9ieXBhc3NfdHlwZTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RyX2J5cGFzc192ZDsKLWBlbmRpZiAvLyBTQ1IxX05PX0RFQ19TVEFHRQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSW5zdHJ1Y3Rpb24gcXVldWUKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotIC8vIEluc3RydWN0aW9uIHF1ZXVlIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25hbCB1bml0czoKLSAvLyAtIE5ldyBQQyB1bmFsaWduZWQgZmxhZyByZWdpc3RlcgotIC8vIC0gSW5zdHJ1Y3Rpb24gdHlwZSBkZWNvZGVyLCBpbmNsdWRpbmcgcmVnaXN0ZXIgdG8gc3RvcmUgaWYgdGhlIHByZXZpb3VzCi0gLy8gICBJTUVNIGluc3RydWN0aW9uIGhhZCBsb3cgcGFydCBvZiBSVkkgaW5zdHJ1Y3Rpb24gaW4gaXRzIGhpZ2ggcGFydAotIC8vIC0gUmVhZC93cml0ZSBzaXplIGRlY29kZXJzCi0gLy8gLSBSZWFkL3dyaXRlIHBvaW50ZXIgcmVnaXN0ZXJzCi0gLy8gLSBEYXRhIGFuZCBlcnJvciBmbGFnIHJlZ2lzdGVycwotIC8vIC0gU3RhdHVzIGxvZ2ljCi0vLwotCi0vLyBOZXcgUEMgdW5hbGlnbmVkIGZsYWcgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBuZXdfcGNfdW5hbGlnbmVkX3VwZCA9IGV4dTJpZnVfcGNfbmV3X3JlcV9pIHwgaW1lbV9yZXNwX3ZkOwotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICBuZXdfcGNfdW5hbGlnbmVkX2ZmIDw9IDEnYjA7Ci0gICAgZW5kIGVsc2UgaWYgKG5ld19wY191bmFsaWduZWRfdXBkKSBiZWdpbgotICAgICAgICBuZXdfcGNfdW5hbGlnbmVkX2ZmIDw9IG5ld19wY191bmFsaWduZWRfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gbmV3X3BjX3VuYWxpZ25lZF9uZXh0ID0gZXh1MmlmdV9wY19uZXdfcmVxX2kgPyBleHUyaWZ1X3BjX25ld19pWzFdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogfmltZW1fcmVzcF92ZCAgICAgICAgPyBuZXdfcGNfdW5hbGlnbmVkX2ZmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAxJ2IwOwotCi0vLyBJbnN0cnVjdGlvbiB0eXBlIGRlY29kZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBpbnN0cl9oaV9pc19ydmkgPSAmaW1lbTJpZnVfcmRhdGFfaVsxNzoxNl07Ci1hc3NpZ24gaW5zdHJfbG9faXNfcnZpID0gJmltZW0yaWZ1X3JkYXRhX2lbMTowXTsKLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBpbnN0cl90eXBlID0gU0NSMV9JRlVfSU5TVFJfTk9ORTsKLQotICAgIGlmIChpbWVtX3Jlc3Bfb2sgJiB+aW1lbV9yZXNwX2Rpc2NhcmRfcmVxKSBiZWdpbgotICAgICAgICBpZiAobmV3X3BjX3VuYWxpZ25lZF9mZikgYmVnaW4KLSAgICAgICAgICAgIGluc3RyX3R5cGUgPSBpbnN0cl9oaV9pc19ydmkgPyBTQ1IxX0lGVV9JTlNUUl9SVklfTE9fTlYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTQ1IxX0lGVV9JTlNUUl9SVkNfTlY7Ci0gICAgICAgIGVuZCBlbHNlIGJlZ2luIC8vIH5uZXdfcGNfdW5hbGlnbmVkX2ZmCi0gICAgICAgICAgICBpZiAoaW5zdHJfaGlfcnZpX2xvX2ZmKSBiZWdpbgotICAgICAgICAgICAgICAgIGluc3RyX3R5cGUgPSBpbnN0cl9oaV9pc19ydmkgPyBTQ1IxX0lGVV9JTlNUUl9SVklfTE9fUlZJX0hJCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfSUZVX0lOU1RSX1JWQ19SVklfSEk7Ci0gICAgICAgICAgICBlbmQgZWxzZSBiZWdpbiAvLyBTQ1IxX09USEVSCi0gICAgICAgICAgICAgICAgY2FzZXogKHtpbnN0cl9oaV9pc19ydmksIGluc3RyX2xvX2lzX3J2aX0pCi0gICAgICAgICAgICAgICAgICAgIDInYj8xICAgOiBpbnN0cl90eXBlICAgPSBTQ1IxX0lGVV9JTlNUUl9SVklfSElfUlZJX0xPOwotICAgICAgICAgICAgICAgICAgICAyJ2IwMCAgIDogaW5zdHJfdHlwZSAgID0gU0NSMV9JRlVfSU5TVFJfUlZDX1JWQzsKLSAgICAgICAgICAgICAgICAgICAgMidiMTAgICA6IGluc3RyX3R5cGUgICA9IFNDUjFfSUZVX0lOU1RSX1JWSV9MT19SVkM7Ci0gICAgICAgICAgICAgICAgZW5kY2FzZQotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZAotICAgIGVuZAotZW5kCi0KLS8vIFJlZ2lzdGVyIHRvIHN0b3JlIGlmIHRoZSBwcmV2aW91cyBJTUVNIGluc3RydWN0aW9uIGhhZCBsb3cgcGFydCBvZiBSVkkKLS8vIGluc3RydWN0aW9uIGluIGl0cyBoaWdoIHBhcnQKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGluc3RyX2hpX3J2aV9sb19mZiA8PSAxJ2IwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGlmIChleHUyaWZ1X3BjX25ld19yZXFfaSkgYmVnaW4KLSAgICAgICAgICAgIGluc3RyX2hpX3J2aV9sb19mZiA8PSAxJ2IwOwotICAgICAgICBlbmQgZWxzZSBpZiAoaW1lbV9yZXNwX3ZkKSBiZWdpbgotICAgICAgICAgICAgaW5zdHJfaGlfcnZpX2xvX2ZmIDw9IGluc3RyX2hpX3J2aV9sb19uZXh0OwotICAgICAgICBlbmQKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gaW5zdHJfaGlfcnZpX2xvX25leHQgPSAoaW5zdHJfdHlwZSA9PSBTQ1IxX0lGVV9JTlNUUl9SVklfTE9fTlYpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoaW5zdHJfdHlwZSA9PSBTQ1IxX0lGVV9JTlNUUl9SVklfTE9fUlZJX0hJKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKGluc3RyX3R5cGUgPT0gU0NSMV9JRlVfSU5TVFJfUlZJX0xPX1JWQyk7Ci0KLS8vIFF1ZXVlIHdyaXRlL3JlYWQgc2l6ZSBkZWNvZGVycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gUXVldWUgcmVhZCBzaXplIGRlY29kZXIKLWFzc2lnbiBxX3JkX3ZkICAgID0gfnFfaXNfZW1wdHkgJiBpZnUyaWR1X3ZkX28gJiBpZHUyaWZ1X3JkeV9pOwotYXNzaWduIHFfcmRfaHdvcmQgPSBxX2hlYWRfaXNfcnZjIHwgcV9lcnJfaGVhZAotYGlmZGVmIFNDUjFfTk9fREVDX1NUQUdFCi0gICAgICAgICAgICAgICAgICB8IChxX2hlYWRfaXNfcnZpICYgaW5zdHJfYnlwYXNzX3ZkKQotYGVuZGlmIC8vIFNDUjFfTk9fREVDX1NUQUdFCi0gICAgICAgICAgICAgICAgICA7Ci1hc3NpZ24gcV9yZF9zaXplICA9IH5xX3JkX3ZkICAgPyBTQ1IxX0lGVV9RVUVVRV9SRF9OT05FCi0gICAgICAgICAgICAgICAgICA6IHFfcmRfaHdvcmQgPyBTQ1IxX0lGVV9RVUVVRV9SRF9IV09SRAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogU0NSMV9JRlVfUVVFVUVfUkRfV09SRDsKLWFzc2lnbiBxX3JkX25vbmUgID0gKHFfcmRfc2l6ZSA9PSBTQ1IxX0lGVV9RVUVVRV9SRF9OT05FKTsKLQotLy8gUXVldWUgd3JpdGUgc2l6ZSBkZWNvZGVyCi1hbHdheXNfY29tYiBiZWdpbgotICAgIHFfd3Jfc2l6ZSA9IFNDUjFfSUZVX1FVRVVFX1dSX05PTkU7Ci0gICAgaWYgKH5pbWVtX3Jlc3BfZGlzY2FyZF9yZXEpIGJlZ2luCi0gICAgICAgIGlmIChpbWVtX3Jlc3Bfb2spIGJlZ2luCi1gaWZkZWYgU0NSMV9OT19ERUNfU1RBR0UKLSAgICAgICAgICAgIGNhc2UgKGluc3RyX3R5cGUpCi0gICAgICAgICAgICAgICAgU0NSMV9JRlVfSU5TVFJfTk9ORSAgICAgICAgIDogcV93cl9zaXplID0gU0NSMV9JRlVfUVVFVUVfV1JfTk9ORTsKLSAgICAgICAgICAgICAgICBTQ1IxX0lGVV9JTlNUUl9SVklfTE9fTlYgICAgOiBxX3dyX3NpemUgPSBTQ1IxX0lGVV9RVUVVRV9XUl9ISTsKLSAgICAgICAgICAgICAgICBTQ1IxX0lGVV9JTlNUUl9SVkNfTlYgICAgICAgOiBxX3dyX3NpemUgPSAoaW5zdHJfYnlwYXNzX3ZkICYgaWR1MmlmdV9yZHlfaSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBTQ1IxX0lGVV9RVUVVRV9XUl9OT05FCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogU0NSMV9JRlVfUVVFVUVfV1JfSEk7Ci0gICAgICAgICAgICAgICAgU0NSMV9JRlVfSU5TVFJfUlZJX0hJX1JWSV9MTzogcV93cl9zaXplID0gKGluc3RyX2J5cGFzc192ZCAmIGlkdTJpZnVfcmR5X2kpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gU0NSMV9JRlVfUVVFVUVfV1JfTk9ORQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfSUZVX1FVRVVFX1dSX0ZVTEw7Ci0gICAgICAgICAgICAgICAgU0NSMV9JRlVfSU5TVFJfUlZDX1JWQywKLSAgICAgICAgICAgICAgICBTQ1IxX0lGVV9JTlNUUl9SVklfTE9fUlZDLAotICAgICAgICAgICAgICAgIFNDUjFfSUZVX0lOU1RSX1JWQ19SVklfSEksCi0gICAgICAgICAgICAgICAgU0NSMV9JRlVfSU5TVFJfUlZJX0xPX1JWSV9ISTogcV93cl9zaXplID0gKGluc3RyX2J5cGFzc192ZCAmIGlkdTJpZnVfcmR5X2kpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gU0NSMV9JRlVfUVVFVUVfV1JfSEkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTQ1IxX0lGVV9RVUVVRV9XUl9GVUxMOwotICAgICAgICAgICAgZW5kY2FzZSAvLyBpbnN0cl90eXBlCi1gZWxzZSAvLyBTQ1IxX05PX0RFQ19TVEFHRQotICAgICAgICAgICAgY2FzZSAoaW5zdHJfdHlwZSkKLSAgICAgICAgICAgICAgICBTQ1IxX0lGVV9JTlNUUl9OT05FICAgICAgICAgOiBxX3dyX3NpemUgPSBTQ1IxX0lGVV9RVUVVRV9XUl9OT05FOwotICAgICAgICAgICAgICAgIFNDUjFfSUZVX0lOU1RSX1JWQ19OViwKLSAgICAgICAgICAgICAgICBTQ1IxX0lGVV9JTlNUUl9SVklfTE9fTlYgICAgOiBxX3dyX3NpemUgPSBTQ1IxX0lGVV9RVUVVRV9XUl9ISTsKLSAgICAgICAgICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgICAgICAgICAgOiBxX3dyX3NpemUgPSBTQ1IxX0lGVV9RVUVVRV9XUl9GVUxMOwotICAgICAgICAgICAgZW5kY2FzZSAvLyBpbnN0cl90eXBlCi1gZW5kaWYgLy8gU0NSMV9OT19ERUNfU1RBR0UKLSAgICAgICAgZW5kIGVsc2UgaWYgKGltZW1fcmVzcF9lcikgYmVnaW4KLSAgICAgICAgICAgIHFfd3Jfc2l6ZSA9IFNDUjFfSUZVX1FVRVVFX1dSX0ZVTEw7Ci0gICAgICAgIGVuZCAvLyBpbWVtX3Jlc3BfZXIKLSAgICBlbmQgLy8gfmltZW1fcmVzcF9kaXNjYXJkX3JlcQotZW5kCi0KLWFzc2lnbiBxX3dyX25vbmUgICA9IChxX3dyX3NpemUgPT0gU0NSMV9JRlVfUVVFVUVfV1JfTk9ORSk7Ci1hc3NpZ24gcV93cl9mdWxsICAgPSAocV93cl9zaXplID09IFNDUjFfSUZVX1FVRVVFX1dSX0ZVTEwpOwotCi0vLyBXcml0ZS9yZWFkIHBvaW50ZXIgcmVnaXN0ZXJzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gcV9mbHVzaF9yZXEgPSBleHUyaWZ1X3BjX25ld19yZXFfaSB8IHBpcGUyaWZ1X3N0b3BfZmV0Y2hfaTsKLQotLy8gUXVldWUgd3JpdGUgcG9pbnRlciByZWdpc3RlcgotYXNzaWduIHFfd3B0cl91cGQgID0gcV9mbHVzaF9yZXEgfCB+cV93cl9ub25lOwotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICBxX3dwdHIgPD0gJzA7Ci0gICAgZW5kIGVsc2UgaWYgKHFfd3B0cl91cGQpIGJlZ2luCi0gICAgICAgIHFfd3B0ciA8PSBxX3dwdHJfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gcV93cHRyX25leHQgPSBxX2ZsdXNoX3JlcSA/ICcwCi0gICAgICAgICAgICAgICAgICAgOiB+cV93cl9ub25lICA/IHFfd3B0ciArIChxX3dyX2Z1bGwgPyAyJ2QyIDogMSdiMSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcV93cHRyOwotCi0vLyBRdWV1ZSByZWFkIHBvaW50ZXIgcmVnaXN0ZXIKLWFzc2lnbiBxX3JwdHJfdXBkICA9IHFfZmx1c2hfcmVxIHwgfnFfcmRfbm9uZTsKLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24pIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgcV9ycHRyIDw9ICcwOwotICAgIGVuZCBlbHNlIGlmIChxX3JwdHJfdXBkKSBiZWdpbgotICAgICAgICBxX3JwdHIgPD0gcV9ycHRyX25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIHFfcnB0cl9uZXh0ID0gcV9mbHVzaF9yZXEgPyAnMAotICAgICAgICAgICAgICAgICAgIDogfnFfcmRfbm9uZSAgPyBxX3JwdHIgKyAocV9yZF9od29yZCA/IDEnYjEgOiAyJ2QyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBxX3JwdHI7Ci0KLS8vIFF1ZXVlIGRhdGEgYW5kIGVycm9yIGZsYWcgcmVnaXN0ZXJzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gaW1lbV9yZGF0YV9oaSA9IGltZW0yaWZ1X3JkYXRhX2lbMzE6MTZdOwotYXNzaWduIGltZW1fcmRhdGFfbG8gPSBpbWVtMmlmdV9yZGF0YV9pWzE1OjBdOwotCi1hc3NpZ24gcV93cl9lbiA9IGltZW1fcmVzcF92ZCAmIH5xX2ZsdXNoX3JlcTsKLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24pIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgYGlmZGVmIFNDUjFfTVBSRl9SU1RfRU4gLy8gVHdvIGRpbWVuc2lvbmFsIGFycmF5IGluaXQgbm90IGFsbG93ZWQgaW4gWU9TWVMgLSBjcC4xMwotICAgICAgICBxX2RhdGEgIDw9ICd7U0NSMV9JRlVfUV9TSVpFX0hBTEZ7JzB9fTsKLSAgICAgICAgcV9lcnIgICA8PSAne1NDUjFfSUZVX1FfU0laRV9IQUxGezEnYjB9fTsKLSAgICAgYGVuZGlmCi0gICAgZW5kIGVsc2UgaWYgKHFfd3JfZW4pIGJlZ2luCi0gICAgICAgIGNhc2UgKHFfd3Jfc2l6ZSkKLSAgICAgICAgICAgIFNDUjFfSUZVX1FVRVVFX1dSX0hJICAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICBxX2RhdGFbU0NSMV9JRlVfUVVFVUVfQURSX1cnKHFfd3B0cildICAgICAgICAgPD0gaW1lbV9yZGF0YV9oaTsKLSAgICAgICAgICAgICAgICBxX2VyciBbU0NSMV9JRlVfUVVFVUVfQURSX1cnKHFfd3B0cildICAgICAgICAgPD0gaW1lbV9yZXNwX2VyOwotICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBTQ1IxX0lGVV9RVUVVRV9XUl9GVUxMICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgcV9kYXRhW1NDUjFfSUZVX1FVRVVFX0FEUl9XJyhxX3dwdHIpXSAgICAgICAgIDw9IGltZW1fcmRhdGFfbG87Ci0gICAgICAgICAgICAgICAgcV9lcnIgW1NDUjFfSUZVX1FVRVVFX0FEUl9XJyhxX3dwdHIpXSAgICAgICAgIDw9IGltZW1fcmVzcF9lcjsKLSAgICAgICAgICAgICAgICBxX2RhdGFbU0NSMV9JRlVfUVVFVUVfQURSX1cnKHFfd3B0ciArIDEnYjEpXSAgPD0gaW1lbV9yZGF0YV9oaTsKLSAgICAgICAgICAgICAgICBxX2VyciBbU0NSMV9JRlVfUVVFVUVfQURSX1cnKHFfd3B0ciArIDEnYjEpXSAgPD0gaW1lbV9yZXNwX2VyOwotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZGNhc2UKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gcV9kYXRhX2hlYWQgPSBxX2RhdGEgW1NDUjFfSUZVX1FVRVVFX0FEUl9XJyhxX3JwdHIpXTsKLWFzc2lnbiBxX2RhdGFfbmV4dCA9IHFfZGF0YSBbU0NSMV9JRlVfUVVFVUVfQURSX1cnKHFfcnB0ciArIDEnYjEpXTsKLWFzc2lnbiBxX2Vycl9oZWFkICA9IHFfZXJyICBbU0NSMV9JRlVfUVVFVUVfQURSX1cnKHFfcnB0cildOwotYXNzaWduIHFfZXJyX25leHQgID0gcV9lcnIgIFtTQ1IxX0lGVV9RVUVVRV9BRFJfVycocV9ycHRyICsgMSdiMSldOwotCi0vLyBRdWV1ZSBzdGF0dXMgbG9naWMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBxX29jcGRfaCAgICAgICAgID0gU0NSMV9JRlVfUV9GUkVFX0hfVycocV93cHRyIC0gcV9ycHRyKTsKLWFzc2lnbiBxX2ZyZWVfaF9uZXh0ICAgID0gU0NSMV9JRlVfUV9GUkVFX0hfVycoU0NSMV9JRlVfUV9TSVpFX0hBTEYgLSAocV93cHRyIC0gcV9ycHRyX25leHQpKTsKLWFzc2lnbiBxX2ZyZWVfd19uZXh0ICAgID0gU0NSMV9JRlVfUV9GUkVFX1dfVycocV9mcmVlX2hfbmV4dCA+PiAxJ2IxKTsKLQotYXNzaWduIHFfaXNfZW1wdHkgICAgICAgPSAocV9ycHRyID09IHFfd3B0cik7Ci1hc3NpZ24gcV9oYXNfZnJlZV9zbG90cyA9IChTQ1IxX1RYTl9DTlRfVycocV9mcmVlX3dfbmV4dCkgPiBpbWVtX3ZkX3BuZF90eG5zX2NudCk7Ci1hc3NpZ24gcV9oYXNfMV9vY3BkX2h3ICA9IChxX29jcGRfaCA9PSBTQ1IxX0lGVV9RX0ZSRUVfSF9XJygxKSk7Ci0KLWFzc2lnbiBxX2hlYWRfaXNfcnZpICAgID0gJihxX2RhdGFfaGVhZFsxOjBdKTsKLWFzc2lnbiBxX2hlYWRfaXNfcnZjICAgID0gfnFfaGVhZF9pc19ydmk7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBJRlUgRlNNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBJRlUgRlNNIGNvbnRyb2wgc2lnbmFscwotYXNzaWduIGlmdV9mZXRjaF9yZXEgPSBleHUyaWZ1X3BjX25ld19yZXFfaSAmIH5waXBlMmlmdV9zdG9wX2ZldGNoX2k7Ci1hc3NpZ24gaWZ1X3N0b3BfcmVxICA9IHBpcGUyaWZ1X3N0b3BfZmV0Y2hfaQotICAgICAgICAgICAgICAgICAgICAgfCAoaW1lbV9yZXNwX2VyX2Rpc2NhcmRfcG5kICYgfmV4dTJpZnVfcGNfbmV3X3JlcV9pKTsKLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24pIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgaWZ1X2ZzbV9jdXJyIDw9IFNDUjFfSUZVX0ZTTV9JRExFOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGlmdV9mc21fY3VyciA8PSBpZnVfZnNtX25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBjYXNlIChpZnVfZnNtX2N1cnIpCi0gICAgICAgIFNDUjFfSUZVX0ZTTV9JRExFICAgOiBiZWdpbgotICAgICAgICAgICAgaWZ1X2ZzbV9uZXh0ID0gaWZ1X2ZldGNoX3JlcSA/IFNDUjFfSUZVX0ZTTV9GRVRDSAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfSUZVX0ZTTV9JRExFOwotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9JRlVfRlNNX0ZFVENIICA6IGJlZ2luCi0gICAgICAgICAgICBpZnVfZnNtX25leHQgPSBpZnVfc3RvcF9yZXEgID8gU0NSMV9JRlVfRlNNX0lETEUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTQ1IxX0lGVV9GU01fRkVUQ0g7Ci0gICAgICAgIGVuZAotICAgIGVuZGNhc2UKLWVuZAotCi1hc3NpZ24gaWZ1X2ZzbV9mZXRjaCA9IChpZnVfZnNtX2N1cnIgPT0gU0NSMV9JRlVfRlNNX0ZFVENIKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIElGVSA8LT4gSU1FTSBpbnRlcmZhY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotIC8vIElGVSA8LT4gSU1FTSBpbnRlcmZhY2UgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbmFsIHVuaXRzOgotIC8vIC0gSU1FTSByZXNwb25zZSBsb2dpYwotIC8vIC0gSU1FTSBhZGRyZXNzIHJlZ2lzdGVyCi0gLy8gLSBQZW5kaW5nIElNRU0gdHJhbnNhY3Rpb25zIGNvdW50ZXIKLSAvLyAtIElNRU0gZGlzY2FyZCByZXNwb25zZXMgY291bnRlcgotIC8vIC0gSUZVIDwtPiBJTUVNIGludGVyZmFjZSBvdXRwdXQgc2lnbmFscwotLy8KLQotLy8gSU1FTSByZXNwb25zZSBsb2dpYwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIGltZW1fcmVzcF9lciAgICAgICAgICAgICA9IChpbWVtMmlmdV9yZXNwX2kgPT0gU0NSMV9NRU1fUkVTUF9SRFlfRVIpOwotYXNzaWduIGltZW1fcmVzcF9vayAgICAgICAgICAgICA9IChpbWVtMmlmdV9yZXNwX2kgPT0gU0NSMV9NRU1fUkVTUF9SRFlfT0spOwotYXNzaWduIGltZW1fcmVzcF9yZWNlaXZlZCAgICAgICA9IGltZW1fcmVzcF9vayB8IGltZW1fcmVzcF9lcjsKLWFzc2lnbiBpbWVtX3Jlc3BfdmQgICAgICAgICAgICAgPSBpbWVtX3Jlc3BfcmVjZWl2ZWQgJiB+aW1lbV9yZXNwX2Rpc2NhcmRfcmVxOwotYXNzaWduIGltZW1fcmVzcF9lcl9kaXNjYXJkX3BuZCA9IGltZW1fcmVzcF9lciAmIH5pbWVtX3Jlc3BfZGlzY2FyZF9yZXE7Ci0KLWFzc2lnbiBpbWVtX2hhbmRzaGFrZV9kb25lID0gaWZ1MmltZW1fcmVxX28gJiBpbWVtMmlmdV9yZXFfYWNrX2k7Ci0KLS8vIElNRU0gYWRkcmVzcyByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIGltZW1fYWRkcl91cGQgPSBpbWVtX2hhbmRzaGFrZV9kb25lIHwgZXh1MmlmdV9wY19uZXdfcmVxX2k7Ci0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGltZW1fYWRkcl9mZiA8PSAnMDsKLSAgICBlbmQgZWxzZSBpZiAoaW1lbV9hZGRyX3VwZCkgYmVnaW4KLSAgICAgICAgaW1lbV9hZGRyX2ZmIDw9IGltZW1fYWRkcl9uZXh0OwotICAgIGVuZAotZW5kCi0KLWBpZm5kZWYgU0NSMV9ORVdfUENfUkVHCi1hc3NpZ24gaW1lbV9hZGRyX25leHQgPSBleHUyaWZ1X3BjX25ld19yZXFfaSA/IGV4dTJpZnVfcGNfbmV3X2lbYFNDUjFfWExFTi0xOjJdICAgICAgICAgICAgICAgICArIGltZW1faGFuZHNoYWtlX2RvbmUKLSAgICAgICAgICAgICAgICAgICAgICA6ICZpbWVtX2FkZHJfZmZbNToyXSAgID8gaW1lbV9hZGRyX2ZmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaW1lbV9oYW5kc2hha2VfZG9uZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7aW1lbV9hZGRyX2ZmW2BTQ1IxX1hMRU4tMTo2XSwgaW1lbV9hZGRyX2ZmWzU6Ml0gKyBpbWVtX2hhbmRzaGFrZV9kb25lfTsKLWBlbHNlIC8vIFNDUjFfTkVXX1BDX1JFRwotYXNzaWduIGltZW1fYWRkcl9uZXh0ID0gZXh1MmlmdV9wY19uZXdfcmVxX2kgPyBleHUyaWZ1X3BjX25ld19pW2BTQ1IxX1hMRU4tMToyXQotICAgICAgICAgICAgICAgICAgICAgIDogJmltZW1fYWRkcl9mZls1OjJdICAgPyBpbWVtX2FkZHJfZmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBpbWVtX2hhbmRzaGFrZV9kb25lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHtpbWVtX2FkZHJfZmZbYFNDUjFfWExFTi0xOjZdLCBpbWVtX2FkZHJfZmZbNToyXSArIGltZW1faGFuZHNoYWtlX2RvbmV9OwotYGVuZGlmIC8vIFNDUjFfTkVXX1BDX1JFRwotCi0vLyBQZW5kaW5nIElNRU0gdHJhbnNhY3Rpb25zIGNvdW50ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBQZW5kaW5nIElNRU0gdHJhbnNhY3Rpb25zIG9jY3VyIGlmIElGVSByZXF1ZXN0IGhhcyBiZWVuIGFja25vd2xlZGdlZCwgYnV0Ci0vLyByZXNwb25zZSBjb21lcyBpbiB0aGUgbmV4dCBjeWNsZSBvciBsYXRlcgotCi1hc3NpZ24gaW1lbV9wbmRfdHhuc19jbnRfdXBkICA9IGltZW1faGFuZHNoYWtlX2RvbmUgXiBpbWVtX3Jlc3BfcmVjZWl2ZWQ7Ci0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGltZW1fcG5kX3R4bnNfY250IDw9ICcwOwotICAgIGVuZCBlbHNlIGlmIChpbWVtX3BuZF90eG5zX2NudF91cGQpIGJlZ2luCi0gICAgICAgIGltZW1fcG5kX3R4bnNfY250IDw9IGltZW1fcG5kX3R4bnNfY250X25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIGltZW1fcG5kX3R4bnNfY250X25leHQgPSBpbWVtX3BuZF90eG5zX2NudCArIChpbWVtX2hhbmRzaGFrZV9kb25lIC0gaW1lbV9yZXNwX3JlY2VpdmVkKTsKLWFzc2lnbiBpbWVtX3BuZF90eG5zX3FfZnVsbCAgID0gJmltZW1fcG5kX3R4bnNfY250OwotCi0vLyBJTUVNIGRpc2NhcmQgcmVzcG9uc2VzIGNvdW50ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBJTUVNIGluc3RydWN0aW9ucyBzaG91bGQgYmUgZGlzY2FyZGVkIGluIHRoZSBmb2xsb3dpbmcgMiBjYXNlczoKLS8vIDEuIE5ldyBQQyBpcyByZXF1ZXN0ZWQgYnkganVtcCwgYnJhbmNoLCBtcmV0IG9yIG90aGVyIGluc3RydWN0aW9uCi0vLyAyLiBJTUVNIHJlc3BvbnNlIHdhcyBlcnJvbmVvdXMgYW5kIG5vdCBkaXNjYXJkZWQKLS8vCi0vLyBJbiBib3RoIGNhc2VzIHRoZSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIHRvIGJlIGRpc2NhcmRlZCBlcXVhbHMgdG8gdGhlIG51bWJlcgotLy8gb2YgcGVuZGluZyBpbnN0cnVjdGlvbnMuCi0vLyBJbiB0aGUgMXN0IGNhc2Ugd2UgZG9uJ3QgbmVlZCBhbGwgdGhlIGluc3RydWN0aW9ucyB0aGF0IGhhdmVuJ3QgYmVlbiBmZXRjaGVkCi0vLyB5ZXQsIHNpbmNlIHRoZSBQQyBoYXMgY2hhbmdlZC4KLS8vIEluIHRoZSAybmQgY2FzZSwgc2luY2UgdGhlIElNRU0gcmVzcG9uY2Ugd2FzIGVycm9uZW91cyB0aGVyZSBpcyBubyBndWFyYW50ZWUKLS8vIHRoYXQgc3Vic2VxdWVudCBJTUVNIGluc3RydWN0aW9ucyB3b3VsZCBiZSB2YWxpZC4KLQotYXNzaWduIGltZW1fcmVzcF9kaXNjYXJkX2NudF91cGQgPSBleHUyaWZ1X3BjX25ld19yZXFfaSB8IGltZW1fcmVzcF9lcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoaW1lbV9yZXNwX29rICYgaW1lbV9yZXNwX2Rpc2NhcmRfcmVxKTsKLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24pIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgaW1lbV9yZXNwX2Rpc2NhcmRfY250IDw9ICcwOwotICAgIGVuZCBlbHNlIGlmIChpbWVtX3Jlc3BfZGlzY2FyZF9jbnRfdXBkKSBiZWdpbgotICAgICAgICBpbWVtX3Jlc3BfZGlzY2FyZF9jbnQgPD0gaW1lbV9yZXNwX2Rpc2NhcmRfY250X25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYGlmbmRlZiBTQ1IxX05FV19QQ19SRUcKLWFzc2lnbiBpbWVtX3Jlc3BfZGlzY2FyZF9jbnRfbmV4dCA9IGV4dTJpZnVfcGNfbmV3X3JlcV9pICAgICA/IGltZW1fcG5kX3R4bnNfY250X25leHQgLSBpbWVtX2hhbmRzaGFrZV9kb25lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpbWVtX3Jlc3BfZXJfZGlzY2FyZF9wbmQgPyBpbWVtX3BuZF90eG5zX2NudF9uZXh0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpbWVtX3Jlc3BfZGlzY2FyZF9jbnQgLSAxJ2IxOwotYGVsc2UgLy8gU0NSMV9ORVdfUENfUkVHCi1hc3NpZ24gaW1lbV9yZXNwX2Rpc2NhcmRfY250X25leHQgPSBleHUyaWZ1X3BjX25ld19yZXFfaSB8IGltZW1fcmVzcF9lcl9kaXNjYXJkX3BuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaW1lbV9wbmRfdHhuc19jbnRfbmV4dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaW1lbV9yZXNwX2Rpc2NhcmRfY250IC0gMSdiMTsKLWBlbmRpZiAvLyBTQ1IxX05FV19QQ19SRUcKLQotYXNzaWduIGltZW1fdmRfcG5kX3R4bnNfY250ICA9IGltZW1fcG5kX3R4bnNfY250IC0gaW1lbV9yZXNwX2Rpc2NhcmRfY250OwotYXNzaWduIGltZW1fcmVzcF9kaXNjYXJkX3JlcSA9IHxpbWVtX3Jlc3BfZGlzY2FyZF9jbnQ7Ci0KLS8vIElGVSA8LT4gSU1FTSBpbnRlcmZhY2Ugb3V0cHV0IHNpZ25hbHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWBpZm5kZWYgU0NSMV9ORVdfUENfUkVHCi1hc3NpZ24gaWZ1MmltZW1fcmVxX28gID0gKGV4dTJpZnVfcGNfbmV3X3JlcV9pICYgfmltZW1fcG5kX3R4bnNfcV9mdWxsICYgfnBpcGUyaWZ1X3N0b3BfZmV0Y2hfaSkKLSAgICAgICAgICAgICAgICAgICAgICAgfCAoaWZ1X2ZzbV9mZXRjaCAgICAgICAgJiB+aW1lbV9wbmRfdHhuc19xX2Z1bGwgJiBxX2hhc19mcmVlX3Nsb3RzKTsKLWFzc2lnbiBpZnUyaW1lbV9hZGRyX28gPSBleHUyaWZ1X3BjX25ld19yZXFfaQotICAgICAgICAgICAgICAgICAgICAgICA/IHtleHUyaWZ1X3BjX25ld19pW2BTQ1IxX1hMRU4tMToyXSwgMidiMDB9Ci0gICAgICAgICAgICAgICAgICAgICAgIDoge2ltZW1fYWRkcl9mZiwgMidiMDB9OwotYGVsc2UgLy8gU0NSMV9ORVdfUENfUkVHCi1hc3NpZ24gaWZ1MmltZW1fcmVxX28gID0gaWZ1X2ZzbV9mZXRjaCAmIH5pbWVtX3BuZF90eG5zX3FfZnVsbCAmIHFfaGFzX2ZyZWVfc2xvdHM7Ci1hc3NpZ24gaWZ1MmltZW1fYWRkcl9vID0ge2ltZW1fYWRkcl9mZiwgMidiMDB9OwotYGVuZGlmIC8vIFNDUjFfTkVXX1BDX1JFRwotCi1hc3NpZ24gaWZ1MmltZW1fY21kX28gID0gU0NSMV9NRU1fQ01EX1JEOwotCi1gaWZkZWYgU0NSMV9DTEtDVFJMX0VOCi1hc3NpZ24gaWZ1MnBpcGVfaW1lbV90eG5zX3BuZF9vID0gfGltZW1fcG5kX3R4bnNfY250OwotYGVuZGlmIC8vIFNDUjFfQ0xLQ1RSTF9FTgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSUZVIDwtPiBJRFUgaW50ZXJmYWNlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLSAvLyBJRlUgPC0+IElEVSBpbnRlcmZhY2UgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbmFsIHVuaXRzOgotIC8vIC0gSW5zdHJ1Y3Rpb24gYnlwYXNzIHR5cGUgZGVjb2RlcgotIC8vIC0gSUZVIDwtPiBJRFUgc3RhdHVzIHNpZ25hbHMKLSAvLyAtIE91dHB1dCBpbnN0cnVjdGlvbiBtdWx0aXBsZXhlcgotLy8KLQotYGlmZGVmIFNDUjFfTk9fREVDX1NUQUdFCi0KLS8vIEluc3RydWN0aW9uIGJ5cGFzcyB0eXBlIGRlY29kZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBpbnN0cl9ieXBhc3NfdmQgID0gKGluc3RyX2J5cGFzc190eXBlICE9IFNDUjFfQllQQVNTX05PTkUpOwotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGluc3RyX2J5cGFzc190eXBlICAgID0gU0NSMV9CWVBBU1NfTk9ORTsKLQotICAgIGlmIChpbWVtX3Jlc3BfdmQpIGJlZ2luCi0gICAgICAgIGlmIChxX2lzX2VtcHR5KSBiZWdpbgotICAgICAgICAgICAgY2FzZSAoaW5zdHJfdHlwZSkKLSAgICAgICAgICAgICAgICBTQ1IxX0lGVV9JTlNUUl9SVkNfTlYsCi0gICAgICAgICAgICAgICAgU0NSMV9JRlVfSU5TVFJfUlZDX1JWQywKLSAgICAgICAgICAgICAgICBTQ1IxX0lGVV9JTlNUUl9SVklfTE9fUlZDICAgICAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgaW5zdHJfYnlwYXNzX3R5cGUgPSBTQ1IxX0JZUEFTU19SVkM7Ci0gICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgU0NSMV9JRlVfSU5TVFJfUlZJX0hJX1JWSV9MTyAgICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgIGluc3RyX2J5cGFzc190eXBlID0gU0NSMV9CWVBBU1NfUlZJX1JEQVRBOwotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgIGRlZmF1bHQgOiBiZWdpbiBlbmQKLSAgICAgICAgICAgIGVuZGNhc2UgLy8gaW5zdHJfdHlwZQotICAgICAgICBlbmQgZWxzZSBpZiAocV9oYXNfMV9vY3BkX2h3ICYgcV9oZWFkX2lzX3J2aSkgYmVnaW4KLSAgICAgICAgICAgIGlmIChpbnN0cl9oaV9ydmlfbG9fZmYpIGJlZ2luCi0gICAgICAgICAgICAgICAgaW5zdHJfYnlwYXNzX3R5cGUgPSBTQ1IxX0JZUEFTU19SVklfUkRBVEFfUVVFVUU7Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kCi0gICAgZW5kIC8vIGltZW1fcmVzcF92ZAotZW5kCi0KLS8vIElGVSA8LT4gSURVIGludGVyZmFjZSBzdGF0dXMgc2lnbmFscwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBpZnUyaWR1X3ZkX28gICAgICAgICA9IDEnYjA7Ci0gICAgaWZ1MmlkdV9pbWVtX2Vycl9vICAgPSAxJ2IwOwotICAgIGlmdTJpZHVfZXJyX3J2aV9oaV9vID0gMSdiMDsKLQotICAgIGlmIChpZnVfZnNtX2ZldGNoIHwgfnFfaXNfZW1wdHkpIGJlZ2luCi0gICAgICAgIGlmIChpbnN0cl9ieXBhc3NfdmQpIGJlZ2luCi0gICAgICAgICAgICBpZnUyaWR1X3ZkX28gICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgaWZ1MmlkdV9pbWVtX2Vycl9vICAgID0gKGluc3RyX2J5cGFzc190eXBlID09IFNDUjFfQllQQVNTX1JWSV9SREFUQV9RVUVVRSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IChpbWVtX3Jlc3BfZXIgfCBxX2Vycl9oZWFkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaW1lbV9yZXNwX2VyOwotICAgICAgICAgICAgaWZ1MmlkdV9lcnJfcnZpX2hpX28gID0gKGluc3RyX2J5cGFzc190eXBlID09IFNDUjFfQllQQVNTX1JWSV9SREFUQV9RVUVVRSkgJiBpbWVtX3Jlc3BfZXI7Ci0gICAgICAgIGVuZCBlbHNlIGlmICh+cV9pc19lbXB0eSkgYmVnaW4KLSAgICAgICAgICAgIGlmIChxX2hhc18xX29jcGRfaHcpIGJlZ2luCi0gICAgICAgICAgICAgICAgaWZ1MmlkdV92ZF9vICAgICAgICAgPSBxX2hlYWRfaXNfcnZjIHwgcV9lcnJfaGVhZDsKLSAgICAgICAgICAgICAgICBpZnUyaWR1X2ltZW1fZXJyX28gICA9IHFfZXJyX2hlYWQ7Ci0gICAgICAgICAgICAgICAgaWZ1MmlkdV9lcnJfcnZpX2hpX28gPSB+cV9lcnJfaGVhZCAmIHFfaGVhZF9pc19ydmkgJiBxX2Vycl9uZXh0OwotICAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgICAgICAgICBpZnUyaWR1X3ZkX28gICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgaWZ1MmlkdV9pbWVtX2Vycl9vICAgPSBxX2Vycl9oZWFkID8gMSdiMSA6IChxX2hlYWRfaXNfcnZpICYgcV9lcnJfbmV4dCk7Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kIC8vIH5xX2lzX2VtcHR5Ci0gICAgZW5kCi1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICBpZiAoaGR1MmlmdV9wYnVmX2ZldGNoX2kpIGJlZ2luCi0gICAgICAgIGlmdTJpZHVfdmRfbyAgICAgICAgICA9IGhkdTJpZnVfcGJ1Zl92ZF9pOwotICAgICAgICBpZnUyaWR1X2ltZW1fZXJyX28gICAgPSBoZHUyaWZ1X3BidWZfZXJyX2k7Ci0gICAgZW5kCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLWVuZAotCi0vLyBPdXRwdXQgaW5zdHJ1Y3Rpb24gbXVsdGlwbGV4ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgY2FzZSAoaW5zdHJfYnlwYXNzX3R5cGUpCi0gICAgICAgIFNDUjFfQllQQVNTX1JWQyAgICAgICAgICAgIDogYmVnaW4KLSAgICAgICAgICAgIGlmdTJpZHVfaW5zdHJfbyA9IGBTQ1IxX0lNRU1fRFdJRFRIJyhuZXdfcGNfdW5hbGlnbmVkX2ZmID8gaW1lbV9yZGF0YV9oaQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpbWVtX3JkYXRhX2xvKTsKLSAgICAgICAgZW5kCi0gICAgICAgIFNDUjFfQllQQVNTX1JWSV9SREFUQSAgICAgIDogYmVnaW4KLSAgICAgICAgICAgIGlmdTJpZHVfaW5zdHJfbyA9IGltZW0yaWZ1X3JkYXRhX2k7Ci0gICAgICAgIGVuZAotICAgICAgICBTQ1IxX0JZUEFTU19SVklfUkRBVEFfUVVFVUU6IGJlZ2luCi0gICAgICAgICAgICBpZnUyaWR1X2luc3RyX28gPSB7aW1lbV9yZGF0YV9sbywgcV9kYXRhX2hlYWR9OwotICAgICAgICBlbmQKLSAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICAgICAgICAgOiBiZWdpbgotICAgICAgICAgICAgaWZ1MmlkdV9pbnN0cl9vID0gYFNDUjFfSU1FTV9EV0lEVEgnKHFfaGVhZF9pc19ydmMgPyBxX2RhdGFfaGVhZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7cV9kYXRhX25leHQsIHFfZGF0YV9oZWFkfSk7Ci0gICAgICAgIGVuZAotICAgIGVuZGNhc2UgLy8gaW5zdHJfYnlwYXNzX3R5cGUKLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgIGlmIChoZHUyaWZ1X3BidWZfZmV0Y2hfaSkgYmVnaW4KLSAgICAgICAgaWZ1MmlkdV9pbnN0cl9vID0gYFNDUjFfSU1FTV9EV0lEVEgnKHsnMCwgaGR1MmlmdV9wYnVmX2luc3RyX2l9KTsKLSAgICBlbmQKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotZW5kCi0KLWBlbHNlICAgLy8gU0NSMV9OT19ERUNfU1RBR0UKLQotLy8gSUZVIDwtPiBJRFUgaW50ZXJmYWNlIHN0YXR1cyBzaWduYWxzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGlmdTJpZHVfdmRfbyAgICAgICAgICA9IDEnYjA7Ci0gICAgaWZ1MmlkdV9pbWVtX2Vycl9vICAgID0gMSdiMDsKLSAgICBpZnUyaWR1X2Vycl9ydmlfaGlfbyAgPSAxJ2IwOwotICAgIGlmICh+cV9pc19lbXB0eSkgYmVnaW4KLSAgICAgICAgaWYgKHFfaGFzXzFfb2NwZF9odykgYmVnaW4KLSAgICAgICAgICAgIGlmdTJpZHVfdmRfbyAgICAgICAgICA9IHFfaGVhZF9pc19ydmMgfCBxX2Vycl9oZWFkOwotICAgICAgICAgICAgaWZ1MmlkdV9pbWVtX2Vycl9vICAgID0gcV9lcnJfaGVhZDsKLSAgICAgICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgICAgIGlmdTJpZHVfdmRfbyAgICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICBpZnUyaWR1X2ltZW1fZXJyX28gICAgPSBxX2Vycl9oZWFkID8gMSdiMSA6IChxX2hlYWRfaXNfcnZpICYgcV9lcnJfbmV4dCk7Ci0gICAgICAgICAgICBpZnUyaWR1X2Vycl9ydmlfaGlfbyAgPSB+cV9lcnJfaGVhZCAmIHFfaGVhZF9pc19ydmkgJiBxX2Vycl9uZXh0OwotICAgICAgICBlbmQKLSAgICBlbmQgLy8gfnFfaXNfZW1wdHkKLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgIGlmIChoZHUyaWZ1X3BidWZfZmV0Y2hfaSkgYmVnaW4KLSAgICAgICAgaWZ1MmlkdV92ZF9vICAgICAgICAgID0gaGR1MmlmdV9wYnVmX3ZkX2k7Ci0gICAgICAgIGlmdTJpZHVfaW1lbV9lcnJfbyAgICA9IGhkdTJpZnVfcGJ1Zl9lcnJfaTsKLSAgICBlbmQKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotZW5kCi0KLS8vIE91dHB1dCBpbnN0cnVjdGlvbiBtdWx0aXBsZXhlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBpZnUyaWR1X2luc3RyX28gPSBxX2hlYWRfaXNfcnZjID8gYFNDUjFfSU1FTV9EV0lEVEgnKHFfZGF0YV9oZWFkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7cV9kYXRhX25leHQsIHFfZGF0YV9oZWFkfTsKLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgIGlmIChoZHUyaWZ1X3BidWZfZmV0Y2hfaSkgYmVnaW4KLSAgICAgICAgaWZ1MmlkdV9pbnN0cl9vID0gYFNDUjFfSU1FTV9EV0lEVEgnKHsnMCwgaGR1MmlmdV9wYnVmX2luc3RyX2l9KTsKLSAgICBlbmQKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotZW5kCi0KLWBlbmRpZiAgLy8gU0NSMV9OT19ERUNfU1RBR0UKLQotYGlmZGVmIFNDUjFfREJHX0VOCi1hc3NpZ24gaWZ1MmhkdV9wYnVmX3JkeV9vID0gaWR1MmlmdV9yZHlfaTsKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi1gaWZkZWYgU0NSMV9UUkdUX1NJTVVMQVRJT04KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEFzc2VydGlvbnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFggY2hlY2tzCi0KLVNDUjFfU1ZBX0lGVV9YQ0hFQ0sgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgISRpc3Vua25vd24oe2ltZW0yaWZ1X3JlcV9hY2tfaSwgaWR1MmlmdV9yZHlfaSwgZXh1MmlmdV9wY19uZXdfcmVxX2l9KQotICAgICkgZWxzZSAkZXJyb3IoIklGVSBFcnJvcjogdW5rbm93biB2YWx1ZXMiKTsKLQotU0NSMV9TVkFfSUZVX1hDSEVDS19SRVEgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgaWZ1MmltZW1fcmVxX28gfC0+ICEkaXN1bmtub3duKHtpZnUyaW1lbV9hZGRyX28sIGlmdTJpbWVtX2NtZF9vfSkKLSAgICApIGVsc2UgJGVycm9yKCJJRlUgRXJyb3I6IHVua25vd24ge2lmdTJpbWVtX2FkZHJfbywgaWZ1MmltZW1fY21kX299Iik7Ci0KLS8vIEJlaGF2aW9yIGNoZWNrcwotYGlmbmRlZiBWRVJJTEFUT1IKLVNDUjFfU1ZBX0lGVV9EUkNfVU5ERVJGTE9XIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgIH5pbWVtX3Jlc3BfZGlzY2FyZF9yZXEgfD0+IH4oaW1lbV9yZXNwX2Rpc2NhcmRfY250ID09IFNDUjFfVFhOX0NOVF9XJygnMSkpCi0gICAgKSBlbHNlICRlcnJvcigiSUZVIEVycm9yOiBpbWVtX3Jlc3BfZGlzY2FyZF9jbnQgdW5kZXJmbG93Iik7Ci1gZW5kaWYgLy8gVkVSSUxBVE9SCi1TQ1IxX1NWQV9JRlVfRFJDX1JBTkdFIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgIChpbWVtX3Jlc3BfZGlzY2FyZF9jbnQgPj0gMCkgJiAoaW1lbV9yZXNwX2Rpc2NhcmRfY250IDw9IGltZW1fcG5kX3R4bnNfY250KQotICAgICkgZWxzZSAkZXJyb3IoIklGVSBFcnJvcjogaW1lbV9yZXNwX2Rpc2NhcmRfY250IG91dCBvZiByYW5nZSIpOwotCi1TQ1IxX1NWQV9JRlVfUVVFVUVfT1ZGIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgIChxX29jcGRfaCA+PSBTQ1IxX0lGVV9RX0ZSRUVfSF9XJyhTQ1IxX0lGVV9RX1NJWkVfSEFMRi0xKSkgfC0+Ci0gICAgKChxX29jcGRfaCA9PSBTQ1IxX0lGVV9RX0ZSRUVfSF9XJyhTQ1IxX0lGVV9RX1NJWkVfSEFMRi0xKSkgPyAocV93cl9zaXplICE9IFNDUjFfSUZVX1FVRVVFX1dSX0ZVTEwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAocV93cl9zaXplID09IFNDUjFfSUZVX1FVRVVFX1dSX05PTkUpKQotICAgICkgZWxzZSAkZXJyb3IoIklGVSBFcnJvcjogcXVldWUgb3ZlcmZsb3ciKTsKLQotYGlmbmRlZiBWRVJJTEFUT1IKLVNDUjFfU1ZBX0lGVV9JTUVNX0VSUl9CRUggOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgKGltZW1fcmVzcF9lciAmIH5pbWVtX3Jlc3BfZGlzY2FyZF9yZXEgJiB+ZXh1MmlmdV9wY19uZXdfcmVxX2kpIHw9PgotICAgIChpZnVfZnNtX2N1cnIgPT0gU0NSMV9JRlVfRlNNX0lETEUpICYgKGltZW1fcmVzcF9kaXNjYXJkX2NudCA9PSBpbWVtX3BuZF90eG5zX2NudCkKLSAgICApIGVsc2UgJGVycm9yKCJJRlUgRXJyb3I6IGluY29ycmVjdCBiZWhhdmlvciBhZnRlciBtZW1vcnkgZXJyb3IiKTsKLQotU0NSMV9TVkFfSUZVX05FV19QQ19SRVFfQkVIIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgIGV4dTJpZnVfcGNfbmV3X3JlcV9pIHw9PiBxX2lzX2VtcHR5Ci0gICAgKSBlbHNlICRlcnJvcigiSUZVIEVycm9yOiBpbmNvcnJlY3QgYmVoYXZpb3IgYWZ0ZXIgZXh1MmlmdV9wY19uZXdfcmVxX2kiKTsKLWBlbmRpZiAvLyBWRVJJTEFUT1IKLVNDUjFfU1ZBX0lGVV9JTUVNX0FERFJfQUxJR05FRCA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICBpZnUyaW1lbV9yZXFfbyB8LT4gfnxpZnUyaW1lbV9hZGRyX29bMTowXQotICAgICkgZWxzZSAkZXJyb3IoIklGVSBFcnJvcjogdW5hbGlnbmVkIElNRU0gYWNjZXNzIik7Ci0KLWBpZm5kZWYgVkVSSUxBVE9SCi1TQ1IxX1NWQV9JRlVfU1RPUF9GRVRDSCA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICBwaXBlMmlmdV9zdG9wX2ZldGNoX2kgfD0+IChpZnVfZnNtX2N1cnIgPT0gU0NSMV9JRlVfRlNNX0lETEUpCi0gICAgKSBlbHNlICRlcnJvcigiSUZVIEVycm9yOiBmZXRjaCBub3Qgc3RvcHBlZCIpOwotYGVuZGlmIC8vIFZFUklMQVRPUgotU0NSMV9TVkFfSUZVX0lNRU1fRkFVTFRfUlZJX0hJIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgIGlmdTJpZHVfZXJyX3J2aV9oaV9vIHwtPiBpZnUyaWR1X2ltZW1fZXJyX28KLSAgICApIGVsc2UgJGVycm9yKCJJRlUgRXJyb3I6IGlmdTJpZHVfaW1lbV9lcnJfbyA9PSAwIik7Ci0KLWBlbmRpZiAvLyBTQ1IxX1RSR1RfU0lNVUxBVElPTgotCi1lbmRtb2R1bGUgOiBzY3IxX3BpcGVfaWZ1CmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfbHN1LnN2IGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2xzdS5zdgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTlmNDU3NC4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfbHN1LnN2CisrKyAvZGV2L251bGwKQEAgLTEsMzcwICswLDAgQEAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjEKLS8vIAotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKLS8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBTeW50YWNvcmUgTExDCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vIEBmaWxlICAgICAgIDxzY3IxX3BpcGVfbHN1LnN2PgotLy8vIEBicmllZiAgICAgIExvYWQvU3RvcmUgVW5pdCAoTFNVKQotLy8vCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gLy8KLSAvLyBGdW5jdGlvbmFsaXR5OgotIC8vIC0gUGVyZm9ybXMgbG9hZCBhbmQgc3RvcmUgb3BlcmF0aW9ucyBpbiBEYXRhIE1lbW9yeQotIC8vIC0gR2VuZXJhdGVzIERNRU0gYWRkcmVzcyBtaXNhbGlnbiBhbmQgYWNjZXNzIGZhdWx0IGV4Y2VwdGlvbnMKLSAvLyAtIFBhc3NlcyBETUVNIG9wZXJhdGlvbnMgaW5mb3JtYXRpb24gdG8gVERVIGFuZCBnZW5lcmF0ZXMgTFNVIGJyZWFrcG9pbnQgZXhjZXB0aW9uCi0gLy8KLSAvLyBTdHJ1Y3R1cmU6Ci0gLy8gLSBGU00KLSAvLyAtIEV4Y2VwdGlvbnMgbG9naWMKLSAvLyAtIExTVSA8LT4gRVhVIGludGVyZmFjZQotIC8vIC0gTFNVIDwtPiBETUVNIGludGVyZmFjZQotIC8vIC0gTFNVIDwtPiBURFUgaW50ZXJmYWNlCi0gLy8KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWBpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgotYGluY2x1ZGUgInNjcjFfYXJjaF90eXBlcy5zdmgiCi1gaW5jbHVkZSAic2NyMV9tZW1pZi5zdmgiCi1gaW5jbHVkZSAic2NyMV9yaXNjdl9pc2FfZGVjb2Rpbmcuc3ZoIgotYGlmZGVmIFNDUjFfVERVX0VOCi1gaW5jbHVkZSAic2NyMV90ZHUuc3ZoIgotYGVuZGlmIC8vIFNDUjFfVERVX0VOCi0KLW1vZHVsZSBzY3IxX3BpcGVfbHN1ICgKLSAgICAvLyBDb21tb24KLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLCAgICAgICAgICAgICAgICAgICAgICAvLyBMU1UgcmVzZXQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaywgICAgICAgICAgICAgICAgICAgICAgICAvLyBMU1UgY2xvY2sKLQotICAgIC8vIExTVSA8LT4gRVhVIGludGVyZmFjZQotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MmxzdV9yZXFfaSwgICAgICAgICAgICAgIC8vIFJlcXVlc3QgdG8gTFNVCi0gICAgaW5wdXQgICB0eXBlX3NjcjFfbHN1X2NtZF9zZWxfZSAgICAgICAgICAgICBleHUybHN1X2NtZF9pLCAgICAgICAgICAgICAgLy8gTFNVIGNvbW1hbmQKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgIGV4dTJsc3VfYWRkcl9pLCAgICAgICAgICAgICAvLyBBZGRyZXNzIG9mIERNRU0KLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgIGV4dTJsc3Vfc2RhdGFfaSwgICAgICAgICAgICAvLyBEYXRhIGZvciBzdG9yZQotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHN1MmV4dV9yZHlfbywgICAgICAgICAgICAgIC8vIExTVSByZWNlaXZlZCBETUVNIHJlc3BvbnNlCi0gICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICBsc3UyZXh1X2xkYXRhX28sICAgICAgICAgICAgLy8gTG9hZCBkYXRhCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsc3UyZXh1X2V4Y19vLCAgICAgICAgICAgICAgLy8gRXhjZXB0aW9uIGZyb20gTFNVCi0gICAgb3V0cHV0ICB0eXBlX3NjcjFfZXhjX2NvZGVfZSAgICAgICAgICAgICAgICBsc3UyZXh1X2V4Y19jb2RlX28sICAgICAgICAgLy8gRXhjZXB0aW9uIGNvZGUKLQotYGlmZGVmIFNDUjFfVERVX0VOCi0gICAgLy8gTFNVIDwtPiBURFUgaW50ZXJmYWNlCi0gICAgb3V0cHV0ICB0eXBlX3NjcjFfYnJrbV9sc3VfbW9uX3MgICAgICAgICAgICBsc3UydGR1X2Rtb25fbywgICAgICAgICAgICAgLy8gRGF0YSBhZGRyZXNzIHN0cmVhbSBtb25pdG9yaW5nCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZHUybHN1X2licmtwdF9leGNfcmVxX2ksICAgLy8gSW5zdHJ1Y3Rpb24gQlAgZXhjZXB0aW9uIHJlcXVlc3QKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkdTJsc3VfZGJya3B0X2V4Y19yZXFfaSwgICAvLyBEYXRhIEJQIGV4Y2VwdGlvbiByZXF1ZXN0Ci1gZW5kaWYgLy8gU0NSMV9URFVfRU4KLQotICAgIC8vIExTVSA8LT4gRE1FTSBpbnRlcmZhY2UKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzdTJkbWVtX3JlcV9vLCAgICAgICAgICAgICAvLyBEYXRhIG1lbW9yeSByZXF1ZXN0Ci0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsc3UyZG1lbV9jbWRfbywgICAgICAgICAgICAgLy8gRGF0YSBtZW1vcnkgY29tbWFuZCAoUkVBRC9XUklURSkKLSAgICBvdXRwdXQgIGxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgIGxzdTJkbWVtX3dpZHRoX28sICAgICAgICAgICAvLyBEYXRhIG1lbW9yeSBkYXRhIHdpZHRoCi0gICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfRE1FTV9BV0lEVEgtMTowXSAgICAgICBsc3UyZG1lbV9hZGRyX28sICAgICAgICAgICAgLy8gRGF0YSBtZW1vcnkgYWRkcmVzcwotICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICAgICAgbHN1MmRtZW1fd2RhdGFfbywgICAgICAgICAgIC8vIERhdGEgbWVtb3J5IHdyaXRlIGRhdGEKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW0ybHN1X3JlcV9hY2tfaSwgICAgICAgICAvLyBEYXRhIG1lbW9yeSByZXF1ZXN0IGFja25vd2xlZGdlCi0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICBkbWVtMmxzdV9yZGF0YV9pLCAgICAgICAgICAgLy8gRGF0YSBtZW1vcnkgcmVhZCBkYXRhCi0gICAgaW5wdXQgICBsb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICBkbWVtMmxzdV9yZXNwX2kgICAgICAgICAgICAgLy8gRGF0YSBtZW1vcnkgcmVzcG9uc2UKLSk7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCB0eXBlcyBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy90eXBlZGVmIGVudW0gbG9naWMgewotcGFyYW1ldGVyICBTQ1IxX0xTVV9GU01fSURMRSA9IDEnYjA7Ci1wYXJhbWV0ZXIgIFNDUjFfTFNVX0ZTTV9CVVNZID0gMSdiMTsKLS8vfSB0eXBlX3NjcjFfbHN1X2ZzbV9lOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgc2lnbmFscyBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gTFNVIEZTTSBzaWduYWxzCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgbHN1X2ZzbV9jdXJyOyAgICAgICAvLyBMU1UgRlNNIGN1cnJlbnQgc3RhdGUKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICBsc3VfZnNtX25leHQ7ICAgICAgIC8vIExTVSBGU00gbmV4dCBzdGF0ZQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgIGxzdV9mc21faWRsZTsgICAgICAgLy8gTFNVIEZTTSBpcyBpbiBJRExFIHN0YXRlCi0KLS8vIExTVSBDb21tYW5kIHJlZ2lzdGVyIHNpZ25hbHMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICBsc3VfY21kX3VwZDsgICAgICAgIC8vIExTVSBDb21tYW5kIHJlZ2lzdGVyIHVwZGF0ZQotdHlwZV9zY3IxX2xzdV9jbWRfc2VsX2UgICAgIGxzdV9jbWRfZmY7ICAgICAgICAgLy8gTFNVIENvbW1hbmQgcmVnaXN0ZXIgdmFsdWUKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICBsc3VfY21kX2ZmX2xvYWQ7ICAgIC8vIFJlZ2lzdGVyZWQgTFNVIENvbW1hbmQgaXMgbG9hZAotbG9naWMgICAgICAgICAgICAgICAgICAgICAgIGxzdV9jbWRfZmZfc3RvcmU7ICAgLy8gUmVnaXN0ZXJlZCBMU1UgQ29tbWFuZCBpcyBzdG9yZQotCi0vLyBETUVNIGNvbW1hbmQgYW5kIHdpZHRoIGZsYWdzCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgZG1lbV9jbWRfbG9hZDsgICAgICAvLyBETUVNIGNvbW1hbmQgaXMgbG9hZAotbG9naWMgICAgICAgICAgICAgICAgICAgICAgIGRtZW1fY21kX3N0b3JlOyAgICAgLy8gRE1FTSBDb21tYW5kIGlzIHN0b3JlCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgZG1lbV93ZHRoX3dvcmQ7ICAgICAvLyBETUVNIGRhdGEgd2lkdGggaXMgV09SRAotbG9naWMgICAgICAgICAgICAgICAgICAgICAgIGRtZW1fd2R0aF9od29yZDsgICAgLy8gRE1FTSBkYXRhIHdpZHRoIGlzIEhBTEZXT1JECi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgZG1lbV93ZHRoX2J5dGU7ICAgICAvLyBETUVNIGRhdGEgd2lkdGggaXMgQllURQotCi0vLyBETUVNIHJlc3BvbnNlIGFuZCByZXF1ZXN0IGNvbnRyb2wgc2lnbmFscwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgIGRtZW1fcmVzcF9vazsgICAgICAgLy8gRE1FTSByZXNwb25zZSBpcyBPSwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgIGRtZW1fcmVzcF9lcjsgICAgICAgLy8gRE1FTSByZXNwb25zZSBpcyBlcnJvbmVvdXMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICBkbWVtX3Jlc3BfcmVjZWl2ZWQ7IC8vIERNRU0gcmVzcG9uc2UgaXMgcmVjZWl2ZWQKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICBkbWVtX3JlcV92ZDsgICAgICAgIC8vIERNRU0gcmVxdWVzdCBpcyB2YWxpZCAocmVxX2FjayByZWNlaXZlZCkKLQotLy8gRXhjZXB0aW9ucyBzaWduYWxzCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgbHN1X2V4Y19yZXE7ICAgICAgICAvLyBMU1UgZXhjZXB0aW9uIHJlcXVlc3QKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICBkbWVtX2FkZHJfbXNsZ247ICAgIC8vIERNRU0gYWRkcmVzcyBpcyBtaXNhbGlnbmVkCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgZG1lbV9hZGRyX21zbGduX2w7ICAvLyBETUVNIGxvYWQgYWRkcmVzcyBpcyBtaXNhbGlnbmVkCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgZG1lbV9hZGRyX21zbGduX3M7ICAvLyBETUVNIHN0b3JlIGFkZHJlc3MgaXMgbWlzYWxpZ25lZAotYGlmZGVmIFNDUjFfVERVX0VOCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgbHN1X2V4Y19od2JyazsgICAgICAvLyBMU1UgaGFyZHdhcmUgYnJlYWtwb2ludCBleGNlcHRpb24KLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQ29udHJvbCBsb2dpYwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gRE1FTSByZXNwb25zZSBhbmQgcmVxdWVzdCBjb250cm9sIHNpZ25hbHMKLWFzc2lnbiBkbWVtX3Jlc3Bfb2sgICAgICAgPSAoZG1lbTJsc3VfcmVzcF9pID09IFNDUjFfTUVNX1JFU1BfUkRZX09LKTsKLWFzc2lnbiBkbWVtX3Jlc3BfZXIgICAgICAgPSAoZG1lbTJsc3VfcmVzcF9pID09IFNDUjFfTUVNX1JFU1BfUkRZX0VSKTsKLWFzc2lnbiBkbWVtX3Jlc3BfcmVjZWl2ZWQgPSBkbWVtX3Jlc3Bfb2sgfCBkbWVtX3Jlc3BfZXI7Ci1hc3NpZ24gZG1lbV9yZXFfdmQgICAgICAgID0gZXh1MmxzdV9yZXFfaSAmIGRtZW0ybHN1X3JlcV9hY2tfaSAmIH5sc3VfZXhjX3JlcTsKLQotLy8gTFNVIGxvYWQgYW5kIHN0b3JlIGNvbW1hbmQgZmxhZ3MKLWFzc2lnbiBkbWVtX2NtZF9sb2FkICA9IChleHUybHN1X2NtZF9pID09IFNDUjFfTFNVX0NNRF9MQiApCi0gICAgICAgICAgICAgICAgICAgICAgfCAoZXh1MmxzdV9jbWRfaSA9PSBTQ1IxX0xTVV9DTURfTEJVKQotICAgICAgICAgICAgICAgICAgICAgIHwgKGV4dTJsc3VfY21kX2kgPT0gU0NSMV9MU1VfQ01EX0xIICkKLSAgICAgICAgICAgICAgICAgICAgICB8IChleHUybHN1X2NtZF9pID09IFNDUjFfTFNVX0NNRF9MSFUpCi0gICAgICAgICAgICAgICAgICAgICAgfCAoZXh1MmxzdV9jbWRfaSA9PSBTQ1IxX0xTVV9DTURfTFcgKTsKLWFzc2lnbiBkbWVtX2NtZF9zdG9yZSA9IChleHUybHN1X2NtZF9pID09IFNDUjFfTFNVX0NNRF9TQiApCi0gICAgICAgICAgICAgICAgICAgICAgfCAoZXh1MmxzdV9jbWRfaSA9PSBTQ1IxX0xTVV9DTURfU0ggKQotICAgICAgICAgICAgICAgICAgICAgIHwgKGV4dTJsc3VfY21kX2kgPT0gU0NSMV9MU1VfQ01EX1NXICk7Ci0KLS8vIExTVSBkYXRhIHdpZHRoIGZsYWdzCi1hc3NpZ24gZG1lbV93ZHRoX3dvcmQgID0gKGV4dTJsc3VfY21kX2kgPT0gU0NSMV9MU1VfQ01EX0xXICkKLSAgICAgICAgICAgICAgICAgICAgICAgfCAoZXh1MmxzdV9jbWRfaSA9PSBTQ1IxX0xTVV9DTURfU1cgKTsKLWFzc2lnbiBkbWVtX3dkdGhfaHdvcmQgPSAoZXh1MmxzdV9jbWRfaSA9PSBTQ1IxX0xTVV9DTURfTEggKQotICAgICAgICAgICAgICAgICAgICAgICB8IChleHUybHN1X2NtZF9pID09IFNDUjFfTFNVX0NNRF9MSFUpCi0gICAgICAgICAgICAgICAgICAgICAgIHwgKGV4dTJsc3VfY21kX2kgPT0gU0NSMV9MU1VfQ01EX1NIICk7Ci1hc3NpZ24gZG1lbV93ZHRoX2J5dGUgID0gKGV4dTJsc3VfY21kX2kgPT0gU0NSMV9MU1VfQ01EX0xCICkKLSAgICAgICAgICAgICAgICAgICAgICAgfCAoZXh1MmxzdV9jbWRfaSA9PSBTQ1IxX0xTVV9DTURfTEJVKQotICAgICAgICAgICAgICAgICAgICAgICB8IChleHUybHN1X2NtZF9pID09IFNDUjFfTFNVX0NNRF9TQiApOwotCi0vLyBMU1UgY29tbWFuZCByZWdpc3RlcgotYXNzaWduIGxzdV9jbWRfdXBkID0gbHN1X2ZzbV9pZGxlICYgZG1lbV9yZXFfdmQ7Ci0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGxzdV9jbWRfZmYgPD0gU0NSMV9MU1VfQ01EX05PTkU7Ci0gICAgZW5kIGVsc2UgaWYgKGxzdV9jbWRfdXBkKSBiZWdpbgotICAgICAgICBsc3VfY21kX2ZmIDw9IGV4dTJsc3VfY21kX2k7Ci0gICAgZW5kCi1lbmQKLQotLy8gTFNVIHJlZ2lzdGVyZWQgbG9hZCBhbmQgc3RvcmUgY29tbWFuZCBmbGFncwotYXNzaWduIGxzdV9jbWRfZmZfbG9hZCAgPSAobHN1X2NtZF9mZiA9PSBTQ1IxX0xTVV9DTURfTEIgKQotICAgICAgICAgICAgICAgICAgICAgICAgfCAobHN1X2NtZF9mZiA9PSBTQ1IxX0xTVV9DTURfTEJVKQotICAgICAgICAgICAgICAgICAgICAgICAgfCAobHN1X2NtZF9mZiA9PSBTQ1IxX0xTVV9DTURfTEggKQotICAgICAgICAgICAgICAgICAgICAgICAgfCAobHN1X2NtZF9mZiA9PSBTQ1IxX0xTVV9DTURfTEhVKQotICAgICAgICAgICAgICAgICAgICAgICAgfCAobHN1X2NtZF9mZiA9PSBTQ1IxX0xTVV9DTURfTFcgKTsKLWFzc2lnbiBsc3VfY21kX2ZmX3N0b3JlID0gKGxzdV9jbWRfZmYgPT0gU0NSMV9MU1VfQ01EX1NCICkKLSAgICAgICAgICAgICAgICAgICAgICAgIHwgKGxzdV9jbWRfZmYgPT0gU0NSMV9MU1VfQ01EX1NIICkKLSAgICAgICAgICAgICAgICAgICAgICAgIHwgKGxzdV9jbWRfZmYgPT0gU0NSMV9MU1VfQ01EX1NXICk7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMU1UgRlNNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIC8vCi0gLy8gTFNVIEZTTSBpcyB1c2VkIHRvIGNvbnRyb2wgdGhlIExTVSA8LT4gRE1FTSBpbnRlcmZhY2UKLSAvLwotLy8KLQotLy8gVXBkYXRpbmcgTFNVIEZTTSBzdGF0ZQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24pIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgbHN1X2ZzbV9jdXJyIDw9IFNDUjFfTFNVX0ZTTV9JRExFOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGxzdV9mc21fY3VyciA8PSBsc3VfZnNtX25leHQ7Ci0gICAgZW5kCi1lbmQKLQotLy8gTFNVIEZTTSBuZXh0IHN0YXRlIGxvZ2ljCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGNhc2UgKGxzdV9mc21fY3VycikKLSAgICAgICAgU0NSMV9MU1VfRlNNX0lETEU6IGJlZ2luCi0gICAgICAgICAgICBsc3VfZnNtX25leHQgPSBkbWVtX3JlcV92ZCAgICAgICAgPyBTQ1IxX0xTVV9GU01fQlVTWQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogU0NSMV9MU1VfRlNNX0lETEU7Ci0gICAgICAgIGVuZAotICAgICAgICBTQ1IxX0xTVV9GU01fQlVTWTogYmVnaW4KLSAgICAgICAgICAgIGxzdV9mc21fbmV4dCA9IGRtZW1fcmVzcF9yZWNlaXZlZCA/IFNDUjFfTFNVX0ZTTV9JRExFCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTQ1IxX0xTVV9GU01fQlVTWTsKLSAgICAgICAgZW5kCi0gICAgZW5kY2FzZQotZW5kCi0KLWFzc2lnbiBsc3VfZnNtX2lkbGUgPSAobHN1X2ZzbV9jdXJyID09IFNDUjFfTFNVX0ZTTV9JRExFKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEV4Y2VwdGlvbnMgbG9naWMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gLy8KLSAvLyBUaGUgZm9sbG93aW5nIHR5cGVzIG9mIGV4Y2VwdGlvbnMgYXJlIHN1cHBvcnRlZDoKLSAvLyAtIExvYWQgYWRkcmVzcyBtaXNhbGlnbgotIC8vIC0gTG9hZCBhY2Nlc3MgZmF1bHQKLSAvLyAtIFN0b3JlIGFkZHJlc3MgbWlzYWxpZ24KLSAvLyAtIFN0b3JlIGFjY2VzcyBmYXVsdAotIC8vIC0gTFNVIGJyZWFrcG9pbnQgZXhjZXB0aW9uCi0vLwotCi0vLyBETUVNIGFkZHIgbWlzYWxpZ24gbG9naWMKLWFzc2lnbiBkbWVtX2FkZHJfbXNsZ24gICA9IGV4dTJsc3VfcmVxX2kgJiAoIChkbWVtX3dkdGhfaHdvcmQgJiBleHUybHN1X2FkZHJfaVswXSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChkbWVtX3dkdGhfd29yZCAgJiB8ZXh1MmxzdV9hZGRyX2lbMTowXSkpOwotYXNzaWduIGRtZW1fYWRkcl9tc2xnbl9sID0gZG1lbV9hZGRyX21zbGduICYgZG1lbV9jbWRfbG9hZDsKLWFzc2lnbiBkbWVtX2FkZHJfbXNsZ25fcyA9IGRtZW1fYWRkcl9tc2xnbiAmIGRtZW1fY21kX3N0b3JlOwotCi0vLyBFeGNlcHRpb24gY29kZSBsb2dpYwotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBjYXNlICgxJ2IxKQotICAgICAgICBkbWVtX3Jlc3BfZXIgICAgIDogaWYobHN1X2NtZF9mZl9sb2FkKQotCQkgICAgICAgICAgICAgICBsc3UyZXh1X2V4Y19jb2RlX28gPSBTQ1IxX0VYQ19DT0RFX0xEX0FDQ0VTU19GQVVMVDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYobHN1X2NtZF9mZl9zdG9yZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsc3UyZXh1X2V4Y19jb2RlX28gPSAgU0NSMV9FWENfQ09ERV9TVF9BQ0NFU1NfRkFVTFQ7Ci0JCQkgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHN1MmV4dV9leGNfY29kZV9vID0gIFNDUjFfRVhDX0NPREVfSU5TVFJfTUlTQUxJR047Ci1gaWZkZWYgU0NSMV9URFVfRU4KLSAgICAgICAgbHN1X2V4Y19od2JyayAgICA6IGxzdTJleHVfZXhjX2NvZGVfbyA9IFNDUjFfRVhDX0NPREVfQlJFQUtQT0lOVDsKLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotICAgICAgICBkbWVtX2FkZHJfbXNsZ25fbDogbHN1MmV4dV9leGNfY29kZV9vID0gU0NSMV9FWENfQ09ERV9MRF9BRERSX01JU0FMSUdOOwotICAgICAgICBkbWVtX2FkZHJfbXNsZ25fczogbHN1MmV4dV9leGNfY29kZV9vID0gU0NSMV9FWENfQ09ERV9TVF9BRERSX01JU0FMSUdOOwotICAgICAgICBkZWZhdWx0ICAgICAgICAgIDogbHN1MmV4dV9leGNfY29kZV9vID0gU0NSMV9FWENfQ09ERV9JTlNUUl9NSVNBTElHTjsKLSAgICBlbmRjYXNlIC8vIDEnYjEKLWVuZAotCi1hc3NpZ24gbHN1X2V4Y19yZXEgPSBkbWVtX2FkZHJfbXNsZ25fbCB8IGRtZW1fYWRkcl9tc2xnbl9zCi1gaWZkZWYgU0NSMV9URFVfRU4KLSAgICAgICAgICAgICAgICAgICB8IGxzdV9leGNfaHdicmsKLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTFNVIDwtPiBFWFUgaW50ZXJmYWNlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gbHN1MmV4dV9yZHlfbyA9IGRtZW1fcmVzcF9yZWNlaXZlZDsKLWFzc2lnbiBsc3UyZXh1X2V4Y19vID0gZG1lbV9yZXNwX2VyIHwgbHN1X2V4Y19yZXE7Ci0KLS8vIFNpZ24tIG9yIHplcm8tZXh0ZW5kaW5nIGRhdGEgcmVjZWl2ZWQgZnJvbSBETUVNCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGNhc2UgKGxzdV9jbWRfZmYpCi0gICAgICAgIFNDUjFfTFNVX0NNRF9MSCA6IGxzdTJleHVfbGRhdGFfbyA9IHt7MTZ7ZG1lbTJsc3VfcmRhdGFfaVsxNV19fSwgZG1lbTJsc3VfcmRhdGFfaVsxNTowXX07Ci0gICAgICAgIFNDUjFfTFNVX0NNRF9MSFU6IGxzdTJleHVfbGRhdGFfbyA9IHsgMTYnYjAsICAgICAgICAgICAgICAgICAgICAgZG1lbTJsc3VfcmRhdGFfaVsxNTowXX07Ci0gICAgICAgIFNDUjFfTFNVX0NNRF9MQiA6IGxzdTJleHVfbGRhdGFfbyA9IHt7MjR7ZG1lbTJsc3VfcmRhdGFfaVs3XX19LCAgZG1lbTJsc3VfcmRhdGFfaVs3OjBdfTsKLSAgICAgICAgU0NSMV9MU1VfQ01EX0xCVTogbHN1MmV4dV9sZGF0YV9vID0geyAyNCdiMCwgICAgICAgICAgICAgICAgICAgICBkbWVtMmxzdV9yZGF0YV9pWzc6MF19OwotICAgICAgICBkZWZhdWx0ICAgICAgICAgOiBsc3UyZXh1X2xkYXRhX28gPSBkbWVtMmxzdV9yZGF0YV9pOwotICAgIGVuZGNhc2UgLy8gbHN1X2NtZF9mZgotZW5kCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMU1UgPC0+IERNRU0gaW50ZXJmYWNlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gbHN1MmRtZW1fcmVxX28gICA9IGV4dTJsc3VfcmVxX2kgJiB+bHN1X2V4Y19yZXEgJiBsc3VfZnNtX2lkbGU7Ci1hc3NpZ24gbHN1MmRtZW1fYWRkcl9vICA9IGV4dTJsc3VfYWRkcl9pOwotYXNzaWduIGxzdTJkbWVtX3dkYXRhX28gPSBleHUybHN1X3NkYXRhX2k7Ci1hc3NpZ24gbHN1MmRtZW1fY21kX28gICA9IGRtZW1fY21kX3N0b3JlICA/IFNDUjFfTUVNX0NNRF9XUiA6IFNDUjFfTUVNX0NNRF9SRDsKLWFzc2lnbiBsc3UyZG1lbV93aWR0aF9vID0gZG1lbV93ZHRoX2J5dGUgID8gU0NSMV9NRU1fV0lEVEhfQllURQotICAgICAgICAgICAgICAgICAgICAgICAgOiBkbWVtX3dkdGhfaHdvcmQgPyBTQ1IxX01FTV9XSURUSF9IV09SRAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTQ1IxX01FTV9XSURUSF9XT1JEOwotCi1gaWZkZWYgU0NSMV9URFVfRU4KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMU1UgPC0+IFREVSBpbnRlcmZhY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBsc3UydGR1X2Rtb25fby52ZCAgICA9IGV4dTJsc3VfcmVxX2kgJiBsc3VfZnNtX2lkbGUgJiB+dGR1MmxzdV9pYnJrcHRfZXhjX3JlcV9pOwotYXNzaWduIGxzdTJ0ZHVfZG1vbl9vLmFkZHIgID0gZXh1MmxzdV9hZGRyX2k7Ci1hc3NpZ24gbHN1MnRkdV9kbW9uX28ubG9hZCAgPSBkbWVtX2NtZF9sb2FkOwotYXNzaWduIGxzdTJ0ZHVfZG1vbl9vLnN0b3JlID0gZG1lbV9jbWRfc3RvcmU7Ci0KLWFzc2lnbiBsc3VfZXhjX2h3YnJrID0gKGV4dTJsc3VfcmVxX2kgJiB0ZHUybHN1X2licmtwdF9leGNfcmVxX2kpCi0gICAgICAgICAgICAgICAgICAgICB8IHRkdTJsc3VfZGJya3B0X2V4Y19yZXFfaTsKLQotYGVuZGlmIC8vIFNDUjFfVERVX0VOCi0KLWBpZmRlZiBTQ1IxX1RSR1RfU0lNVUxBVElPTgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEFzc2VydGlvbnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFggY2hlY2tzCi0KLVNDUjFfU1ZBX0xTVV9YQ0hFQ0tfQ1RSTCA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICAhJGlzdW5rbm93bih7ZXh1MmxzdV9yZXFfaSwgbHN1X2ZzbV9jdXJyCi1gaWZkZWYgU0NSMV9URFVfRU4KLSAgICAgICAgLCB0ZHUybHN1X2licmtwdF9leGNfcmVxX2ksIHRkdTJsc3VfZGJya3B0X2V4Y19yZXFfaQotYGVuZGlmIC8vIFNDUjFfVERVX0VOCi0gICAgfSkKLSAgICApIGVsc2UgJGVycm9yKCJMU1UgRXJyb3I6IHVua25vd24gY29udHJvbCB2YWx1ZSIpOwotCi1TQ1IxX1NWQV9MU1VfWENIRUNLX0NNRCA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICBleHUybHN1X3JlcV9pIHwtPiAhJGlzdW5rbm93bih7ZXh1MmxzdV9jbWRfaSwgZXh1MmxzdV9hZGRyX2l9KQotICAgICkgZWxzZSAkZXJyb3IoIkxTVSBFcnJvcjogdW5kZWZpbmVkIENNRCBvciBhZGRyZXNzIik7Ci0KLVNDUjFfU1ZBX0xTVV9YQ0hFQ0tfU0RBVEEgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgKGV4dTJsc3VfcmVxX2kgJiAobHN1MmRtZW1fY21kX28gPT0gU0NSMV9NRU1fQ01EX1dSKSkgfC0+ICEkaXN1bmtub3duKHtleHUybHN1X3NkYXRhX2l9KQotICAgICkgZWxzZSAkZXJyb3IoIkxTVSBFcnJvcjogdW5kZWZpbmVkIHN0b3JlIGRhdGEiKTsKLQotU0NSMV9TVkFfTFNVX1hDSEVDS19FWEMgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgbHN1MmV4dV9leGNfbyB8LT4gISRpc3Vua25vd24obHN1MmV4dV9leGNfY29kZV9vKQotICAgICkgZWxzZSAkZXJyb3IoIkxTVSBFcnJvcjogZXhjZXB0aW9uIGNvZGUgdW5kZWZpbmVkIik7Ci0KLVNDUjFfU1ZBX0xTVV9JTUVNX0NUUkwgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgbHN1MmRtZW1fcmVxX28gfC0+ICEkaXN1bmtub3duKHtsc3UyZG1lbV9jbWRfbywgbHN1MmRtZW1fd2lkdGhfbywgbHN1MmRtZW1fYWRkcl9vfSkKLSAgICApIGVsc2UgJGVycm9yKCJMU1UgRXJyb3I6IHVuZGVmaW5lZCBkbWVtIGNvbnRyb2wiKTsKLQotU0NSMV9TVkFfTFNVX0lNRU1fQUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgIGxzdTJkbWVtX3JlcV9vIHwtPiAhJGlzdW5rbm93bihkbWVtMmxzdV9yZXFfYWNrX2kpCi0gICAgKSBlbHNlICRlcnJvcigiTFNVIEVycm9yOiB1bmRlZmluZWQgZG1lbSBhY2siKTsKLQotU0NSMV9TVkFfTFNVX0lNRU1fV0RBVEEgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgbHN1MmRtZW1fcmVxX28gJiAobHN1MmRtZW1fY21kX28gPT0gU0NSMV9NRU1fQ01EX1dSKQotICAgIHwtPiAhJGlzdW5rbm93bihsc3UyZG1lbV93ZGF0YV9vWzg6MF0pCi0gICAgKSBlbHNlICRlcnJvcigiTFNVIEVycm9yOiB1bmRlZmluZWQgZG1lbSB3ZGF0YSIpOwotCi0vLyBCZWhhdmlvciBjaGVja3MKLQotU0NSMV9TVkFfTFNVX0VYQ19PTkVIT1QgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgJG9uZWhvdDAoe2RtZW1fcmVzcF9lciwgZG1lbV9hZGRyX21zbGduX2wsIGRtZW1fYWRkcl9tc2xnbl9zfSkKLSAgICApIGVsc2UgJGVycm9yKCJMU1UgRXJyb3I6IG1vcmUgdGhhbiBvbmUgZXhjZXB0aW9uIGF0IGEgdGltZSIpOwotCi1TQ1IxX1NWQV9MU1VfVU5FWFBFQ1RFRF9ETUVNX1JFU1AgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgbHN1X2ZzbV9pZGxlIHwtPiB+ZG1lbV9yZXNwX3JlY2VpdmVkCi0gICAgKSBlbHNlICRlcnJvcigiTFNVIEVycm9yOiBub3QgZXhwZWN0aW5nIG1lbW9yeSByZXNwb25zZSIpOwotCi1TQ1IxX1NWQV9MU1VfUkVRX0VYQyA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICBsc3UyZXh1X2V4Y19vIHwtPiBleHUybHN1X3JlcV9pCi0gICAgKSBlbHNlICRlcnJvcigiTFNVIEVycm9yOiBpbXBvc3NpYmxlIGV4Y2VwdGlvbiIpOwotCi1gaWZkZWYgU0NSMV9URFVfRU4KLQotU0NSMV9DT1ZfTFNVX01JU0FMSUdOX0JSS1BUIDogY292ZXIgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgKGRtZW1fYWRkcl9tc2xnbl9sIHwgZG1lbV9hZGRyX21zbGduX3MpICYgbHN1X2V4Y19od2JyawotKTsKLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotCi1gZW5kaWYgLy8gU0NSMV9UUkdUX1NJTVVMQVRJT04KLQotZW5kbW9kdWxlIDogc2NyMV9waXBlX2xzdQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX21wcmYuc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfbXByZi5zdgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2I3ZjQ5My4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfbXByZi5zdgorKysgL2Rldi9udWxsCkBAIC0xLDI0MCArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIxCi0vLyAKLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0vLyBTUERYLUZpbGVDb250cmlidXRvcjogU3ludGFjb3JlIExMQwotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLyBDb3B5cmlnaHQgYnkgU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjAuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzCi0vLy8gQGZpbGUgICAgICAgPHNjcjFfcGlwZV9tcHJmLnN2PgotLy8vIEBicmllZiAgICAgIE11bHRpIFBvcnQgUmVnaXN0ZXIgRmlsZSAoTVBSRikKLS8vLwotLy8vICAgVmVyc2lvbiAxLjAgLSBEaW5lc2ggQSAtIFByb2plY3Q6IHlpZml2ZQotLy8vICAgICAgICAgICAgICAgIGFkZGVkIGFkZGl0aW9uYWwgc3RhZ2UgRkYgdG8gYnJlYWsgdGltaW5nIHBhdGgKLS8vLyAgICAgICAgICAgICAgICBhZGRpdGlvbmFsIGRlZmluZSBTQ1JDMV9NUFJGX1NUQUdFIGFkZGVkCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLWBpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgotYGluY2x1ZGUgInNjcjFfYXJjaF90eXBlcy5zdmgiCi0KLW1vZHVsZSBzY3IxX3BpcGVfbXByZiAoCi0gICAgLy8gQ29tbW9uCi1gaWZkZWYgU0NSMV9NUFJGX1JTVF9FTgotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnN0X24sICAgICAgICAgICAgICAgICAgICAgIC8vIE1QUkYgcmVzZXQKLWBlbmRpZiAvLyBTQ1IxX01QUkZfUlNUX0VOCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGssICAgICAgICAgICAgICAgICAgICAgICAgLy8gTVBSRiBjbG9jawotCi0gICAgLy8gRVhVIDwtPiBNUFJGIGludGVyZmFjZQotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX01QUkZfQVdJRFRILTE6MF0gICAgICAgZXh1Mm1wcmZfcnMxX2FkZHJfaSwgICAgICAgIC8vIE1QUkYgcnMxIHJlYWQgYWRkcmVzcwotICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgbXByZjJleHVfcnMxX2RhdGFfbywgICAgICAgIC8vIE1QUkYgcnMxIHJlYWQgZGF0YQotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX01QUkZfQVdJRFRILTE6MF0gICAgICAgZXh1Mm1wcmZfcnMyX2FkZHJfaSwgICAgICAgIC8vIE1QUkYgcnMyIHJlYWQgYWRkcmVzcwotICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgbXByZjJleHVfcnMyX2RhdGFfbywgICAgICAgIC8vIE1QUkYgcnMyIHJlYWQgZGF0YQotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1Mm1wcmZfd19yZXFfaSwgICAgICAgICAgIC8vIE1QUkYgd3JpdGUgcmVxdWVzdAotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX01QUkZfQVdJRFRILTE6MF0gICAgICAgZXh1Mm1wcmZfcmRfYWRkcl9pLCAgICAgICAgIC8vIE1QUkYgcmQgd3JpdGUgYWRkcmVzcwotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgZXh1Mm1wcmZfcmRfZGF0YV9pICAgICAgICAgIC8vIE1QUkYgcmQgd3JpdGUgZGF0YQotKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCB0eXBlcyBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgd3JfcmVxX3ZkOwotCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIHJzMV9hZGRyX3ZkOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICByczJfYWRkcl92ZDsKLQotYGlmZGVmIFNDUkMxX01QUkZfU1RBR0UKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgcnMxX2FkZHJfdmRfZmY7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIHJzMl9hZGRyX3ZkX2ZmOwotCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIHJzMV9uZXdfZGF0YV9yZXE7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIHJzMl9uZXdfZGF0YV9yZXE7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIHJzMV9uZXdfZGF0YV9yZXFfZmY7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIHJzMl9uZXdfZGF0YV9yZXFfZmY7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfbmV3X2RhdGFfcmVxOwotCi1sb2dpYyAgICBbYFNDUjFfWExFTi0xOjBdICAgIHJkX2RhdGFfZmY7Ci0KLWxvZ2ljICAgIFtgU0NSMV9YTEVOLTE6MF0gICAgcnMxX2RhdGFfZmY7Ci1sb2dpYyAgICBbYFNDUjFfWExFTi0xOjBdICAgIHJzMl9kYXRhX2ZmOwotCi0KLWBlbmRpZgotCi1gaWZkZWYgIFNDUjFfTVBSRl9SQU0KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgcnMxX2FkZHJfdmRfZmY7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIHJzMl9hZGRyX3ZkX2ZmOwotCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIHJzMV9uZXdfZGF0YV9yZXE7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIHJzMl9uZXdfZGF0YV9yZXE7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIHJzMV9uZXdfZGF0YV9yZXFfZmY7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIHJzMl9uZXdfZGF0YV9yZXFfZmY7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfbmV3X2RhdGFfcmVxOwotCi1sb2dpYyAgICBbYFNDUjFfWExFTi0xOjBdICAgIHJkX2RhdGFfZmY7Ci0KLWxvZ2ljICAgIFtgU0NSMV9YTEVOLTE6MF0gICAgcnMxX2RhdGFfZmY7Ci1sb2dpYyAgICBbYFNDUjFfWExFTi0xOjBdICAgIHJzMl9kYXRhX2ZmOwotCi0vLyB3aGVuIHVzaW5nIFJBTSwgMiBtZW1vcmllcyBhcmUgbmVlZGVkIGJlY2F1c2UgMyBzaW11bHRhbmVvdXMgaW5kZXBlbmRlbnQKLS8vIHdyaXRlL3JlYWQgb3BlcmF0aW9ucyBjYW4gb2NjdXIKLSBgaWZkZWYgU0NSMV9UUkdUX0ZQR0FfSU5URUxfTUFYMTAKLSgqIHJhbXN0eWxlID0gIk05SyIgKikgICAgICBsb2dpYyAgIFtgU0NSMV9YTEVOLTE6MF0gICAgbXByZl9pbnQgICBbMTpgU0NSMV9NUFJGX1NJWkUtMV07Ci0oKiByYW1zdHlsZSA9ICJNOUsiICopICAgICAgbG9naWMgICBbYFNDUjFfWExFTi0xOjBdICAgIG1wcmZfaW50MiAgWzE6YFNDUjFfTVBSRl9TSVpFLTFdOwotIGBlbHNpZiBTQ1IxX1RSR1RfRlBHQV9JTlRFTF9BUlJJQVYKLSgqIHJhbXN0eWxlID0gIk0xMEsiICopICAgICBsb2dpYyAgIFtgU0NSMV9YTEVOLTE6MF0gICAgbXByZl9pbnQgICBbMTpgU0NSMV9NUFJGX1NJWkUtMV07Ci0oKiByYW1zdHlsZSA9ICJNMTBLIiAqKSAgICAgbG9naWMgICBbYFNDUjFfWExFTi0xOjBdICAgIG1wcmZfaW50MiAgWzE6YFNDUjFfTVBSRl9TSVpFLTFdOwotIGBlbHNlCi1sb2dpYyAgIFtgU0NSMV9YTEVOLTE6MF0gICAgbXByZl9pbnQgICBbMTpgU0NSMV9NUFJGX1NJWkUtMV07Ci1sb2dpYyAgIFtgU0NSMV9YTEVOLTE6MF0gICAgbXByZl9pbnQyICBbMTpgU0NSMV9NUFJGX1NJWkUtMV07Ci0gYGVuZGlmCi1gZWxzZSAgLy8gZGlzdHJpYnV0ZWQgbG9naWMgaW1wbGVtZW50YXRpb24KLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICBtcHJmX2ludCBbMTpgU0NSMV9NUFJGX1NJWkUtMV07Ci1gZW5kaWYKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIE1QUkYgY29udHJvbCBsb2dpYwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gY29udHJvbCBzaWduYWxzIGNvbW1vbiBmb3IgZGlzdHJpYnV0ZWQgbG9naWMgYW5kIFJBTSBpbXBsZW1lbnRhdGlvbnMKLWFzc2lnbiAgcnMxX2FkZHJfdmQgID0gICB8ZXh1Mm1wcmZfcnMxX2FkZHJfaTsKLWFzc2lnbiAgcnMyX2FkZHJfdmQgID0gICB8ZXh1Mm1wcmZfcnMyX2FkZHJfaTsKLQotYXNzaWduICB3cl9yZXFfdmQgID0gICBleHUybXByZl93X3JlcV9pICYgfGV4dTJtcHJmX3JkX2FkZHJfaTsKLQotLy8gUkFNIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIGNvbnRyb2wgc2lnbmFscwotYGlmZGVmIFNDUjFfTVBSRl9SQU0KLWFzc2lnbiAgcnMxX25ld19kYXRhX3JlcSAgICA9ICAgd3JfcmVxX3ZkICYgKCBleHUybXByZl9yczFfYWRkcl9pID09IGV4dTJtcHJmX3JkX2FkZHJfaSApOwotYXNzaWduICByczJfbmV3X2RhdGFfcmVxICAgID0gICB3cl9yZXFfdmQgJiAoIGV4dTJtcHJmX3JzMl9hZGRyX2kgPT0gZXh1Mm1wcmZfcmRfYWRkcl9pICk7Ci1hc3NpZ24gIHJlYWRfbmV3X2RhdGFfcmVxICAgPSAgIHJzMV9uZXdfZGF0YV9yZXEgfCByczJfbmV3X2RhdGFfcmVxOwotCi1hbHdheXNfZmYgQCggcG9zZWRnZSBjbGsgKSBiZWdpbgotICAgIHJzMV9hZGRyX3ZkX2ZmICAgICAgICAgIDw9ICByczFfYWRkcl92ZDsKLSAgICByczJfYWRkcl92ZF9mZiAgICAgICAgICA8PSAgcnMyX2FkZHJfdmQ7Ci0gICAgcnMxX25ld19kYXRhX3JlcV9mZiAgICAgPD0gIHJzMV9uZXdfZGF0YV9yZXE7Ci0gICAgcnMyX25ld19kYXRhX3JlcV9mZiAgICAgPD0gIHJzMl9uZXdfZGF0YV9yZXE7Ci1lbmQKLWBlbmRpZiAvLyBTQ1IxX01QUkZfUkFNCi0KLWBpZmRlZiAgU0NSMV9NUFJGX1JBTQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSQU0gaW1wbGVtZW50YXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBSQU0gaXMgaW1wbGVtZW50ZWQgd2l0aCAyIHNpbXBsZSBkdWFsLXBvcnQgbWVtb3JpZXMgd2l0aCBzeW5jIHJlYWQgb3BlcmF0aW9uOwotLy8gbG9naWMgZm9yICJ3cml0ZS1maXJzdCIgUkRXIGJlaGF2aW9yIGlzIGltcGxlbWVudGVkIGV4dGVybmFsbHkgdG8gdGhlIGVtYmVkZGVkCi0vLyBtZW1vcnkgYmxvY2tzCi0KLS8vIGJ5cGFzcyBuZXcgd3JfZGF0YSB0byB0aGUgcmVhZCBvdXRwdXQgaWYgd3JpdGUvcmVhZCBjb2xsaXNpb24gb2NjdXJzCi1hc3NpZ24gIG1wcmYyZXh1X3JzMV9kYXRhX28gICA9ICAgKCByczFfbmV3X2RhdGFfcmVxX2ZmICkgPyByZF9kYXRhX2ZmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKCggcnMxX2FkZHJfdmRfZmYgKSAgID8gcnMxX2RhdGFfZmYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnMCApOwotCi1hc3NpZ24gIG1wcmYyZXh1X3JzMl9kYXRhX28gICA9ICAgKCByczJfbmV3X2RhdGFfcmVxX2ZmICkgPyByZF9kYXRhX2ZmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKCggcnMyX2FkZHJfdmRfZmYgKSAgID8gcnMyX2RhdGFfZmYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnMCApOwotCi1hbHdheXNfZmYgQCggcG9zZWRnZSBjbGsgKSBiZWdpbgotICAgIGlmICggcmVhZF9uZXdfZGF0YV9yZXEgKSBiZWdpbgotICAgICAgICByZF9kYXRhX2ZmICAgICA8PSAgZXh1Mm1wcmZfcmRfZGF0YV9pOwotICAgIGVuZAotZW5kCi0KLS8vIHN5bmNocm9ub3VzIHJlYWQgb3BlcmF0aW9uCi1hbHdheXNfZmYgQCggcG9zZWRnZSBjbGsgKSBiZWdpbgotICAgIHJzMV9kYXRhX2ZmICAgPD0gICBtcHJmX2ludFtleHUybXByZl9yczFfYWRkcl9pXTsKLSAgICByczJfZGF0YV9mZiAgIDw9ICAgbXByZl9pbnQyW2V4dTJtcHJmX3JzMl9hZGRyX2ldOwotZW5kCi0KLS8vIHdyaXRlIG9wZXJhdGlvbgotYWx3YXlzX2ZmIEAoIHBvc2VkZ2UgY2xrICkgYmVnaW4KLSAgICBpZiAoIHdyX3JlcV92ZCApIGJlZ2luCi0gICAgICAgIG1wcmZfaW50W2V4dTJtcHJmX3JkX2FkZHJfaV0gIDw9IGV4dTJtcHJmX3JkX2RhdGFfaTsKLSAgICAgICAgbXByZl9pbnQyW2V4dTJtcHJmX3JkX2FkZHJfaV0gPD0gZXh1Mm1wcmZfcmRfZGF0YV9pOwotICAgIGVuZAotZW5kCi1gZWxzZSAgIC8vIGRpc3RyaWJ1dGVkIGxvZ2ljIGltcGxlbWVudGF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZGlzdHJpYnV0ZWQgbG9naWMgaW1wbGVtZW50YXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIGFzeW5jaHJvbm91cyByZWFkIG9wZXJhdGlvbgotLy8KLWBpZmRlZiBTQ1JDMV9NUFJGX1NUQUdFCi0gICBhc3NpZ24gIHJzMV9uZXdfZGF0YV9yZXEgICAgPSAgIHdyX3JlcV92ZCAmICggZXh1Mm1wcmZfcnMxX2FkZHJfaSA9PSBleHUybXByZl9yZF9hZGRyX2kgKTsKLSAgIGFzc2lnbiAgcnMyX25ld19kYXRhX3JlcSAgICA9ICAgd3JfcmVxX3ZkICYgKCBleHUybXByZl9yczJfYWRkcl9pID09IGV4dTJtcHJmX3JkX2FkZHJfaSApOwotICAgYXNzaWduICByZWFkX25ld19kYXRhX3JlcSAgID0gICByczFfbmV3X2RhdGFfcmVxIHwgcnMyX25ld19kYXRhX3JlcTsKLQotLy8gYnlwYXNzIG5ldyB3cl9kYXRhIHRvIHRoZSByZWFkIG91dHB1dCBpZiB3cml0ZS9yZWFkIGNvbGxpc2lvbiBvY2N1cnMKLSAgIGFzc2lnbiAgbXByZjJleHVfcnMxX2RhdGFfbyAgID0gICAoIHJzMV9uZXdfZGF0YV9yZXFfZmYgKSA/IHJkX2RhdGFfZmYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoKCByczFfYWRkcl92ZF9mZiApICAgICA/IHJzMV9kYXRhX2ZmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcwICk7Ci0gICAKLSAgIGFzc2lnbiAgbXByZjJleHVfcnMyX2RhdGFfbyAgID0gICAoIHJzMl9uZXdfZGF0YV9yZXFfZmYgKSA/IHJkX2RhdGFfZmYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoKCByczJfYWRkcl92ZF9mZiApICAgICA/IHJzMl9kYXRhX2ZmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcwICk7Ci0KLSAgIAotICAgYWx3YXlzX2ZmIEAoIHBvc2VkZ2UgY2xrICkgYmVnaW4KLSAgICAgIGlmICggcmVhZF9uZXdfZGF0YV9yZXEgKSBiZWdpbgotICAgICAgICAgIHJkX2RhdGFfZmYgICAgIDw9ICBleHUybXByZl9yZF9kYXRhX2k7Ci0gICAgICBlbmQKLSAgIGVuZAotCi0gICBhbHdheXNfZmYgQCggcG9zZWRnZSBjbGsgKSBiZWdpbgotICAgICAgIHJzMV9hZGRyX3ZkX2ZmICAgICAgICAgIDw9ICByczFfYWRkcl92ZDsKLSAgICAgICByczJfYWRkcl92ZF9mZiAgICAgICAgICA8PSAgcnMyX2FkZHJfdmQ7Ci0gICAgICAgcnMxX25ld19kYXRhX3JlcV9mZiAgICAgPD0gIHJzMV9uZXdfZGF0YV9yZXE7Ci0gICAgICAgcnMyX25ld19kYXRhX3JlcV9mZiAgICAgPD0gIHJzMl9uZXdfZGF0YV9yZXE7Ci0gICBlbmQKLSAgIGFsd2F5c19mZiBAKCBwb3NlZGdlIGNsayApIGJlZ2luCi0gICAgICByczFfZGF0YV9mZiAgIDw9ICAgbXByZl9pbnRbZXh1Mm1wcmZfcnMxX2FkZHJfaV07Ci0gICAgICByczJfZGF0YV9mZiAgIDw9ICAgbXByZl9pbnRbZXh1Mm1wcmZfcnMyX2FkZHJfaV07Ci0gICBlbmQKLQotYGVsc2UgCi0gICAgYXNzaWduICBtcHJmMmV4dV9yczFfZGF0YV9vID0gKCByczFfYWRkcl92ZCApID8gbXByZl9pbnRbZXh1Mm1wcmZfcnMxX2FkZHJfaV0gOiAnMDsKLSAgICBhc3NpZ24gIG1wcmYyZXh1X3JzMl9kYXRhX28gPSAoIHJzMl9hZGRyX3ZkICkgPyBtcHJmX2ludFtleHUybXByZl9yczJfYWRkcl9pXSA6ICcwOwotYGVuZGlmCi0KLS8vIHdyaXRlIG9wZXJhdGlvbgotIGBpZmRlZiBTQ1IxX01QUkZfUlNUX0VOCi1hbHdheXNfZmYgQCggcG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24gKSBiZWdpbgotICAgIGlmICggfnJzdF9uICkgYmVnaW4KLSAgICAgICAgbXByZl9pbnQgPD0gJ3tkZWZhdWx0OiAnMH07Ci0gICAgZW5kIGVsc2UgaWYgKCB3cl9yZXFfdmQgKSBiZWdpbgotICAgICAgICBtcHJmX2ludFtleHUybXByZl9yZF9hZGRyX2ldIDw9IGV4dTJtcHJmX3JkX2RhdGFfaTsKLSAgICBlbmQKLWVuZAotIGBlbHNlIC8vIH5TQ1IxX01QUkZfUlNUX0VOCi1hbHdheXNfZmYgQCggcG9zZWRnZSBjbGsgKSBiZWdpbgotICAgIGlmICggd3JfcmVxX3ZkICkgYmVnaW4KLSAgICAgICAgbXByZl9pbnRbZXh1Mm1wcmZfcmRfYWRkcl9pXSA8PSBleHUybXByZl9yZF9kYXRhX2k7Ci0gICAgZW5kCi1lbmQKLSBgZW5kaWYgLy8gflNDUjFfTVBSRl9SU1RfRU4KLWBlbmRpZgotCi1gaWZkZWYgU0NSMV9UUkdUX1NJTVVMQVRJT04KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQXNzZXJ0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWBpZmRlZiBTQ1IxX01QUkZfUlNUX0VOCi1TQ1IxX1NWQV9NUFJGX1dSSVRFWCA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICBleHUybXByZl93X3JlcV9pIHwtPiAhJGlzdW5rbm93bih7ZXh1Mm1wcmZfcmRfYWRkcl9pLCAofGV4dTJtcHJmX3JkX2FkZHJfaSA/IGV4dTJtcHJmX3JkX2RhdGFfaSA6IGBTQ1IxX1hMRU4nZDApfSkKLSAgICApIGVsc2UgJGVycm9yKCJNUFJGIGVycm9yOiB1bmtub3duIHZhbHVlcyIpOwotYGVuZGlmIC8vIFNDUjFfTVBSRl9SU1RfRU4KLQotYGVuZGlmIC8vIFNDUjFfVFJHVF9TSU1VTEFUSU9OCi0KLWVuZG1vZHVsZSA6IHNjcjFfcGlwZV9tcHJmCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfbXVsLnN2IGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX211bC5zdgpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNTI0ZTUyZC4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfbXVsLnN2CisrKyAvZGV2L251bGwKQEAgLTEsMTc2ICswLDAgQEAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEKLS8vIAotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKLS8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gIDMyeDMyIE11bHRpcGxpZXIgd2l0aCA4IHN0YWdlIHBpcGUgbGluZSAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB5aWZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgICAgICAgICAgICAgIC8vLy8KLS8vLy8gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy95aWZpdmUvICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gIERlc2NyaXB0aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgMzJ4MzIgTXVsdGlwbGllciB3aXRoIDggc3RhZ2UgcGlwZSBsaW5lIGZvciB0aW1pbmcgcmVhc29uIC8vLy8KLS8vLy8gICAgU3VwcG9ydCBzaWduZWQgbXVsdGlwbGljYXRpb24sIGJpdFszMl0gaW5kaWNhdGUgc2lnbiAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgMC4xIC0gMjV0aCBKdWx5IDIwMjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgIEJyZWFraW5nIHR3bydzIGNvbXBsZXRlbWVudCBpbnRvIHR3byBzdGFnZSBmb3IgIC8vLy8KLS8vLy8gICAgICAgICAgICAgIHRpbWluZyByZWFzb24sIFdoZW4gYWxsIGxvd2VyIDMyIGJpdCB6ZXJvIGFuZCAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgIGl0J3MgY29tcGxlbWVudCB3aWxsIGJlICcxJywgdGhpcyB3aWxsIGNhdXNlICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgIGluY3JlbWVudCBpbiBoaWdlciBiaXRzICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KLS8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KLS8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KLS8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KLS8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KLS8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KLS8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KLS8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KLS8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KLS8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KLS8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KLS8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KLS8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KLS8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLW1vZHVsZSBzY3IxX3BpcGVfbXVsICgKLQlpbnB1dCAgIGxvZ2ljICAgICAgICBjbGssIAotCWlucHV0ICAgbG9naWMgICAgICAgIHJzdG4sIAotCWlucHV0ICAgbG9naWMgICAgICAgIGRhdGFfdmFsaWQsICAgLy8gaW5wdXQgdmFsaWQKLQlpbnB1dCAgIGxvZ2ljIFszMjowXSBEaW4xLCAgICAgICAgIC8vIGZpcnN0IG9wZXJhbmQKLQlpbnB1dCAgIGxvZ2ljIFszMjowXSBEaW4yLCAgICAgICAgIC8vIHNlY29uZCBvcGVyYW5kCi0Jb3V0cHV0ICBsb2dpYyBbMzE6MF0gZGVzX2hpZywgICAgICAvLyBmaXJzdCByZXN1bHQKLQlvdXRwdXQgIGxvZ2ljIFszMTowXSBkZXNfbG93LCAgICAgIC8vIHNlY29uZCByZXN1bHQKLQlvdXRwdXQgIGxvZ2ljICAgICAgICBtdWxfcmR5X28sICAgIC8vIE11bHRpcGx5IHJlc3VsdCByZWFkeQotCWlucHV0ICAgbG9naWMgICAgICAgIGRhdGFfZG9uZSAgICAgLy8gUmVzdWx0IHByb2Nlc3NpbmcgY29tcGxldGUgaW5kaWNhdGlvbgotICAgICk7Ci0KLXBhcmFtZXRlciBXQUlUX0NNRCAgICAgID0gMidiMDA7IC8vIEFjY2VwdCBjb21tYW5kIGFuZCBEbyBTaWduZWQgdG8gdW5zaWduZWQKLXBhcmFtZXRlciBXQUlUX0NPTVAgICAgID0gMidiMDE7IC8vIFdhaXQgZm9yIENPTVBVVEFUSU9OCi1wYXJhbWV0ZXIgV0FJVF9ET05FICAgICA9IDInYjEwOyAvLyBEbyBTaWduZWQgdG8gVW5zaWduZWQgY29udmVyc2lvbiAKLXBhcmFtZXRlciBXQUlUX0VYSVQgICAgID0gMidiMTE7IC8vIFdhaXQgZm9yIERhdGEgQ29tcGxldGlvbgotCi0vLyB3aXJlcwotbG9naWMgWzM1OjBdIHRtcF9tdWwxOwotbG9naWMgWzY0OjBdIHRtcF9tdWwsIHNoaWZ0ZWQ7Ci1sb2dpYyBbMzE6MF0gc3JjMSxzcmMyOyAvLyBVbnNpZ25lZCBudW1iZXIKLQotLy8gcmVhbCByZWdpc3RlcnMKLWxvZ2ljIFsyOjBdICBjeWNsZSxuZXh0X2N5Y2xlOwotbG9naWMgWzYzOjBdIG11bF9yZXN1bHQsbXVsX25leHQ7Ci1sb2dpYyBbMTowXSAgIHN0YXRlLCBuZXh0X3N0YXRlOwotbG9naWMgIG11bF9yZHlfaTsKLWxvZ2ljICBtdWxfMzJiX3plcm9fYjsKLQotYXNzaWduIHRtcF9tdWwxID0gc3JjMSAqIHNyYzJbMzE6MjhdOwotLy9hc3NpZ24gc2hpZnRlZCA9IChjeWNsZSA9PSAzJ2gwID8gNjQnaDAgOiB7bXVsX3Jlc3VsdFs1OTowXSwgNCdiMDAwMH0pOwotYXNzaWduIHRtcF9tdWwgPSB0bXBfbXVsMSArIHNoaWZ0ZWQ7Ci1hc3NpZ24gZGVzX2hpZyA9IG11bF9yZXN1bHRbNjM6MzJdOwotYXNzaWduIGRlc19sb3cgPSBtdWxfcmVzdWx0WzMxOjBdOwotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdG4pCi1iZWdpbgotICAgaWYgKCFyc3RuKSBiZWdpbgotICAgICAgc3RhdGUgICAgICAgICAgIDw9IFdBSVRfQ01EOwotICAgICAgY3ljbGUgICAgICAgICAgIDw9IDMnYjA7Ci0gICAgICBtdWxfcmVzdWx0ICAgICAgPD0gNjUnYjA7Ci0gICAgICBtdWxfcmR5X28gICAgICAgPD0gMSdiMDsKLSAgICAgIHNyYzEgICAgICAgICAgICA8PSAzMidoMDsKLSAgICAgIHNyYzIgICAgICAgICAgICA8PSAzMidoMDsKLSAgICAgIHNoaWZ0ZWQgICAgICAgICA8PSAnaDA7Ci0gICAgICBtdWxfMzJiX3plcm9fYiAgPD0gJzA7Ci0gICBlbmQgZWxzZSBiZWdpbgotICAgICBjeWNsZSAgICAgICAgPD0gbmV4dF9jeWNsZTsKLSAgICAgc3RhdGUgICAgICAgIDw9IG5leHRfc3RhdGU7Ci0gICAgIHNoaWZ0ZWQgICAgICA8PSB7bXVsX25leHRbNTk6MF0sIDQnYjAwMDB9OwotCi0gICAgIG11bF9yZHlfbyAgICA8PSBtdWxfcmR5X2k7Ci0gICAgIGlmKGRhdGFfdmFsaWQgJiYgc3RhdGU9PSBXQUlUX0NNRCApIGJlZ2luCi0gICAgICAgIHNyYzEgICA8PSAoRGluMVszMl0gPT0gMSdiMSkgPyAoMzInaEZGRkZfRkZGRiBeIERpbjFbMzE6MF0pKzEgOiBEaW4xWzMxOjBdOwotICAgICAgICBzcmMyICAgPD0gKERpbjJbMzJdID09IDEnYjEpID8gKDMyJ2hGRkZGX0ZGRkYgXiBEaW4yWzMxOjBdKSsxIDogRGluMlszMTowXTsKLSAgICAgZW5kIGVsc2UgYmVnaW4KLQlzcmMyICAgPD0gc3JjMiA8PCA0OwotICAgICBlbmQKLSAgICAgaWYoc3RhdGU9PSBXQUlUX0RPTkUgKSBiZWdpbgotCS8vIElmIE51bWJlciBpcyBuZWdhdGl2ZSwgdGhlbiBkbyAyJ3MgY29tcGxlbWVudAotCS8vIEJyZWFraW5nIDIncyBjb21wbGVtZW50IHRvIHRpbWluZyByZWFzb24KLSAgICAgICAgaWYoRGluMVszMl0gXiBEaW4yWzMyXSkgYmVnaW4gCi0gICAgICAgICAgIG11bF9yZXN1bHRbMzE6MF0gPD0gKDMyJ2hGRkZGX0ZGRkYgXiBtdWxfcmVzdWx0WzMxOjBdKSArIDE7Ci0gICAgICAgICAgIG11bF9yZXN1bHRbNjM6MzJdIDw9IChtdWxfMzJiX3plcm9fYiA9PSAxJ2IwKSA/ICgzMidoRkZGRl9GRkZGIF4gbXVsX3Jlc3VsdFs2MzozMl0pICsgMSA6ICgzMidoRkZGRl9GRkZGIF4gbXVsX3Jlc3VsdFs2MzozMl0pIDsKLQllbmQKLSAgICAgZW5kIGVsc2UgYmVnaW4KLQltdWxfcmVzdWx0ICAgPD0gbXVsX25leHQ7Ci0JbXVsXzMyYl96ZXJvX2IgIDw9IHxtdWxfbmV4dFszMTowXTsgLy8gY2hlY2sgYWxsIGJpdCBhcmUgemVybwotICAgICBlbmQKLSAgIGVuZAotZW5kCi0KLWFsd2F5c19jb21iCi1iZWdpbgotICAgICBtdWxfcmR5X2kgPSAwOwotICAgICBuZXh0X2N5Y2xlICAgPSBjeWNsZTsKLSAgICAgbmV4dF9zdGF0ZSAgID0gc3RhdGU7Ci0gICAgIG11bF9uZXh0ICAgICA9IG11bF9yZXN1bHQ7Ci0gICAgIGNhc2Uoc3RhdGUpCi0gICAgIFdBSVRfQ01EOiBpZihkYXRhX3ZhbGlkKSAgYmVnaW4gLy8gU3RhcnQgb25seSBvbiBhY3RpdmUgSGlnaCBFZGdlCi0JICAgICBtdWxfbmV4dCAgID0gMDsKLQkgICAgIG5leHRfY3ljbGUgPSAwOwotCSAgICAgbmV4dF9zdGF0ZSA9IFdBSVRfQ09NUDsKLQkgZW5kCi0gICAgIC8vIFdBSVQgZm9yIENvbXB1dGF0aW9uCi0gICAgIFdBSVRfQ09NUDogIAotCWJlZ2luCi0JICAgbXVsX25leHQgICA9IHRtcF9tdWw7Ci0JICAgbmV4dF9jeWNsZSA9IGN5Y2xlICsxOwotCSAgIGlmKGN5Y2xlID09IDcpIGJlZ2luCi0JICAgICAgbmV4dF9zdGF0ZSAgPSBXQUlUX0RPTkU7Ci0gICAgICAgICAgIGVuZCBlbHNlIGJlZ2luCi0JICAgICAgbmV4dF9jeWNsZSA9IGN5Y2xlICsxOwotCSAgIGVuZAotCWVuZAotICAgICBXQUlUX0RPTkU6ICBiZWdpbgotICAgICAgICAgICBtdWxfcmR5X2kgPSAxJ2IxOwotCSAgIG5leHRfc3RhdGUgID0gV0FJVF9FWElUOwotCWVuZAotCVdBSVRfRVhJVDogYmVnaW4KLQkgICAgaWYoZGF0YV9kb25lKSAvLyBXYWl0IGZvciBkYXRhIGNvbXBsZXRpb24gY29tbWFuZAotCSAgICAgICBuZXh0X3N0YXRlICA9IFdBSVRfQ01EOwotCWVuZAkKLSAgICBlbmRjYXNlCi1lbmQKLQotZW5kbW9kdWxlCi0KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV90ZHUuc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfdGR1LnN2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODhhMzEzLi4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV90ZHUuc3YKKysrIC9kZXYvbnVsbApAQCAtMSw2MjggKzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiBTeW50YWNvcmUgTExDIMKpIDIwMTYtMjAyMQotLy8gCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAotLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IFN5bnRhY29yZSBMTEMKLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8gQGZpbGUgICAgICAgPHNjcjFfcGlwZV90ZHUuc3Y+Ci0vLy8gQGJyaWVmICAgICAgVHJpZ2dlciBEZWJ1ZyBVbml0IChURFUpCi0vLy8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAvLwotIC8vIEZ1bmN0aW9uYWxpdHk6Ci0gLy8gLSBQcm92aWRlcyByZWFkL3dyaXRlIGludGVyZmFjZSBmb3IgVERVIENTUnMKLSAvLyAtIFByb3ZpZGVzIHRyaWdnZXJzIGZ1bmN0aW9uYWxpdHk6Ci0gLy8gICAtIFN1cHBvcnRzIHRyaWdnZXJzIGVpdGhlciBpbiBib3RoIERlYnVnIGFuZCBNIG1vZGVzIG9yIGluIERlYnVnIG1vZGUgb25seQotIC8vICAgLSBTdXBwb3J0cyB2aXJ0dWFsIGFkZHJlc3MgbWF0Y2hpbmcgKGxvYWQsIHN0b3JlLCBleGVjKSB0cmlnZ2VycwotIC8vICAgLSBTdXBwb3J0cyBpbnN0cnVjdGlvbiBjb3VudCB0cmlnZ2VycwotIC8vICAgLSBTdXBwb3J0cyB0aGUgZm9sbG93aW5nIGFjdGlvbnMgb24gdHJpZ2dlciBmaXJpbmc6Ci0gLy8gICAgIC0gQnJlYWtwb2ludCBleGNlcHRpb24gcmFpc2luZwotIC8vICAgICAtIERlYnVnIE1vZGUgZW50ZXJpbmcKLSAvLyAgIC0gU3VwcG9ydHMgdHJpZ2dlcnMgY2hhaW5pbmcKLSAvLwotIC8vIFN0cnVjdHVyZToKLSAvLyAtIENTUiByZWFkL3dyaXRlIGkvZgotIC8vIC0gVERVIENTUnM6Ci0gLy8gICAtIFRTRUxFQ1QKLSAvLyAgIC0gVERBVEExL01DT05UUk9ML0lDT1VOVAotIC8vICAgLSBUREFUQTIKLSAvLyAgIC0gVElORk8KLSAvLyAtIFREVSA8LT4gRVhVIGkvZgotIC8vIC0gVERVIDwtPiBMU1UgaS9mCi0gLy8gLSBURFUgPC0+IEhEVSBpL2YKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWBpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgotCi1gaWZkZWYgU0NSMV9URFVfRU4KLWBpbmNsdWRlICJzY3IxX3Jpc2N2X2lzYV9kZWNvZGluZy5zdmgiCi1gaW5jbHVkZSAic2NyMV90ZHUuc3ZoIgotCi1tb2R1bGUgc2NyMV9waXBlX3RkdSAoCi0gICAgLy8gQ29tbW9uIHNpZ25hbHMKLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLCAgICAgICAgICAgICAgICAgICAgICAvLyBURFUgcmVzZXQKLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaywgICAgICAgICAgICAgICAgICAgICAgICAvLyBURFUgY2xvY2sKLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsa19lbiwgICAgICAgICAgICAgICAgICAgICAvLyBURFUgY2xvY2sgZW5hYmxlCi0gICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZHVfZHNibF9pLCAgICAgICAgICAgICAgICAgLy8gVERVIERpc2FibGUKLQotICAgIC8vIFREVSA8LT4gQ1NSIGludGVyZmFjZQotICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMnRkdV9yZXFfaSwgICAgICAgICAgICAgIC8vIENTUi1URFUgaS9mIHJlcXVlc3QKLSAgICBpbnB1dCAgdHlwZV9zY3IxX2Nzcl9jbWRfc2VsX2UgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJ0ZHVfY21kX2ksICAgICAgICAgICAgICAvLyBDU1ItVERVIGkvZiBjb21tYW5kCi0gICAgaW5wdXQgIGxvZ2ljIFtTQ1IxX0NTUl9BRERSX1REVV9PRkZTX1ctMTowXSAgICAgICAgICAgICBjc3IydGR1X2FkZHJfaSwgICAgICAgICAgICAgLy8gQ1NSLVREVSBpL2YgYWRkcmVzcwotICAgIGlucHV0ICBsb2dpYyBbU0NSMV9URFVfREFUQV9XLTE6MF0gICAgICAgICAgICAgICAgICAgICAgY3NyMnRkdV93ZGF0YV9pLCAgICAgICAgICAgIC8vIENTUi1URFUgaS9mIHdyaXRlIGRhdGEKLSAgICBvdXRwdXQgbG9naWMgW1NDUjFfVERVX0RBVEFfVy0xOjBdICAgICAgICAgICAgICAgICAgICAgIHRkdTJjc3JfcmRhdGFfbywgICAgICAgICAgICAvLyBDU1ItVERVIGkvZiByZWFkIGRhdGEKLSAgICBvdXRwdXQgdHlwZV9zY3IxX2Nzcl9yZXNwX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkdTJjc3JfcmVzcF9vLCAgICAgICAgICAgICAvLyBDU1ItVERVIGkvZiByZXNwb25zZQotCi0gICAgLy8gVERVIDwtPiBFWFUgaW50ZXJmYWNlCi0gICAgaW5wdXQgIHR5cGVfc2NyMV9icmttX2luc3RyX21vbl9zICAgICAgICAgICAgICAgICAgICAgICBleHUydGR1X2ltb25faSwgICAgICAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gc3RyZWFtIG1vbml0b3JpbmcKLSAgICBvdXRwdXQgbG9naWMgW1NDUjFfVERVX0FMTFRSSUdfTlVNLTEgOiAwXSAgICAgICAgICAgICAgIHRkdTJleHVfaWJya3B0X21hdGNoX28sICAgICAvLyBJbnN0cnVjdGlvbiBCUCBtYXRjaAotICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmV4dV9pYnJrcHRfZXhjX3JlcV9vLCAgIC8vIEluc3RydWN0aW9uIEJQIGV4Y2VwdGlvbiByZXF1ZXN0Ci0gICAgaW5wdXQgIGxvZ2ljIFtTQ1IxX1REVV9BTExUUklHX05VTS0xIDogMF0gICAgICAgICAgICAgICBleHUydGR1X2JwX3JldGlyZV9pLCAgICAgICAgLy8gTWFwIG9mIEJQcyBiZWluZyByZXRpcmVkCi0KLSAgICAvLyBURFUgPC0+IExTVSBpbnRlcmZhY2UKLWBpZm5kZWYgU0NSMV9URFVfRU4KLSAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkdTJsc3VfYnJrX2VuX28sICAgICAgICAgICAvLyBURFUtTFNVIEJyZWFrcG9pbnQgZW5hYmxlCi1gZW5kaWYgLy8gU0NSMV9URFVfRU4KLSAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkdTJsc3VfaWJya3B0X2V4Y19yZXFfbywgICAvLyBURFUtTFNVIEluc3RydWN0aW9uIEJQIGV4Y2VwdGlvbiByZXF1ZXN0Ci0gICAgaW5wdXQgIHR5cGVfc2NyMV9icmttX2xzdV9tb25fcyAgICAgICAgICAgICAgICAgICAgICAgICBsc3UydGR1X2Rtb25faSwgICAgICAgICAgICAgLy8gVERVLUxTVSBEYXRhIGFkZHJlc3Mgc3RyZWFtIG1vbml0b3JpbmcKLSAgICBvdXRwdXQgbG9naWMgW1NDUjFfVERVX01UUklHX05VTS0xIDogMF0gICAgICAgICAgICAgICAgIHRkdTJsc3VfZGJya3B0X21hdGNoX28sICAgICAvLyBURFUtTFNVIERhdGEgQlAgbWF0Y2gKLSAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkdTJsc3VfZGJya3B0X2V4Y19yZXFfbywgICAvLyBURFUtTFNVIERhdGEgQlAgZXhjZXB0aW9uIHJlcXVlc3QKLQotICAgIC8vIFREVSA8LT4gSERVIGludGVyZmFjZQotICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmhkdV9kbW9kZV9yZXFfbyAgICAgICAgIC8vIERlYnVnIE1vZGUgcmVkaXJlY3Rpb24gcmVxdWVzdAotKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHBhcmFtZXRlcnMgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWxvY2FscGFyYW0gaW50IHVuc2lnbmVkIE1UUklHX05VTSAgID0gU0NSMV9URFVfTVRSSUdfTlVNOwotbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgQUxMVFJJR19OVU0gPSBTQ1IxX1REVV9BTExUUklHX05VTTsKLWxvY2FscGFyYW0gaW50IHVuc2lnbmVkIEFMTFRSSUdfVyAgID0gJGNsb2cyKEFMTFRSSUdfTlVNKzEpOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgc2lnbmFscyBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gVERVIENTUnMgcmVhZC93cml0ZSBpL2Ygc2lnbmFscwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gV3JpdGUgc2lnbmFscwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX3dyX3JlcTsKLWxvZ2ljIFtTQ1IxX1REVV9EQVRBX1ctMTowXSAgICAgICAgICAgICAgICAgICAgIGNzcl93cl9kYXRhOwotCi0vLyBSZWdpc3RlciBzZWxlY3QKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9hZGRyX3RzZWxlY3Q7Ci1sb2dpYyBbTVRSSUdfTlVNLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfYWRkcl9tY29udHJvbDsKLWxvZ2ljIFtNVFJJR19OVU0tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9hZGRyX3RkYXRhMjsKLWBpZmRlZiBTQ1IxX1REVV9JQ09VTlRfRU4KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9hZGRyX2ljb3VudDsKLWBlbmRpZiAvLyBTQ1IxX1REVV9JQ09VTlRfRU4KLQotLy8gVERVIENTUnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFRTRUxFQ1QgcmVnaXN0ZXIKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl90c2VsZWN0X3VwZDsKLWxvZ2ljIFtBTExUUklHX1ctMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl90c2VsZWN0X2ZmOwotCi0vLyBNQ09OVFJPTCByZWdpc3RlcgotbG9naWMgW01UUklHX05VTS0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21jb250cm9sX3dyX3JlcTsKLWxvZ2ljIFtNVFJJR19OVU0tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY29udHJvbF9jbGtfZW47Ci1sb2dpYyBbTVRSSUdfTlVNLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWNvbnRyb2xfdXBkOwotCi1sb2dpYyBbTVRSSUdfTlVNLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWNvbnRyb2xfZG1vZGVfZmY7Ci1sb2dpYyBbTVRSSUdfTlVNLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWNvbnRyb2xfZG1vZGVfbmV4dDsKLWxvZ2ljIFtNVFJJR19OVU0tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY29udHJvbF9tX2ZmOwotbG9naWMgW01UUklHX05VTS0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21jb250cm9sX21fbmV4dDsKLWxvZ2ljIFtNVFJJR19OVU0tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY29udHJvbF9leGVjX2ZmOwotbG9naWMgW01UUklHX05VTS0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21jb250cm9sX2V4ZWNfbmV4dDsKLWxvZ2ljIFtNVFJJR19OVU0tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY29udHJvbF9sb2FkX2ZmOwotbG9naWMgW01UUklHX05VTS0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21jb250cm9sX2xvYWRfbmV4dDsKLWxvZ2ljIFtNVFJJR19OVU0tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY29udHJvbF9zdG9yZV9mZjsKLWxvZ2ljIFtNVFJJR19OVU0tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY29udHJvbF9zdG9yZV9uZXh0OwotbG9naWMgW01UUklHX05VTS0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21jb250cm9sX2FjdGlvbl9mZjsKLWxvZ2ljIFtNVFJJR19OVU0tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY29udHJvbF9hY3Rpb25fbmV4dDsKLWxvZ2ljIFtNVFJJR19OVU0tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY29udHJvbF9oaXRfZmY7Ci1sb2dpYyBbTVRSSUdfTlVNLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWNvbnRyb2xfaGl0X25leHQ7Ci0KLWxvZ2ljIFtNVFJJR19OVU0tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY29udHJvbF9leGVjX2hpdDsKLWxvZ2ljIFtNVFJJR19OVU0tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY29udHJvbF9sZHN0X2hpdDsKLQotLy8gSUNPVU5UIHJlZ2lzdGVyCi1gaWZkZWYgU0NSMV9URFVfSUNPVU5UX0VOCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfaWNvdW50X3dyX3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9pY291bnRfY2xrX2VuOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2ljb3VudF91cGQ7Ci0KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9pY291bnRfZG1vZGVfZmY7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfaWNvdW50X2Rtb2RlX25leHQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfaWNvdW50X21fZmY7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfaWNvdW50X21fbmV4dDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9pY291bnRfYWN0aW9uX2ZmOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2ljb3VudF9hY3Rpb25fbmV4dDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9pY291bnRfaGl0X2ZmOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2ljb3VudF9oaXRfbmV4dDsKLWxvZ2ljIFtTQ1IxX1REVV9JQ09VTlRfQ09VTlRfSEktU0NSMV9URFVfSUNPVU5UX0NPVU5UX0xPOjBdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfaWNvdW50X2NvdW50X2ZmOwotbG9naWMgW1NDUjFfVERVX0lDT1VOVF9DT1VOVF9ISS1TQ1IxX1REVV9JQ09VTlRfQ09VTlRfTE86MF0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9pY291bnRfY291bnRfbmV4dDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9pY291bnRfc2tpcF9mZjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9pY291bnRfc2tpcF9uZXh0OwotCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfaWNvdW50X2RlY3JfZW47Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfaWNvdW50X2NvdW50X2RlY3I7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfaWNvdW50X3NraXBfZHNibDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9pY291bnRfaGl0OwotYGVuZGlmIC8vIFNDUjFfVERVX0lDT1VOVF9FTgotCi0vLyBUREFUQTIgcmVnaXN0ZXIKLWxvZ2ljIFtNVFJJR19OVU0tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl90ZGF0YTJfdXBkOwotbG9naWMgW01UUklHX05VTS0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX3RkYXRhMl9mZiBbU0NSMV9URFVfREFUQV9XLTE6MF07Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDU1IgcmVhZC93cml0ZSBpbnRlcmZhY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFJlYWQgbG9naWMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiB0ZHUyY3NyX3Jlc3BfbyA9IGNzcjJ0ZHVfcmVxX2kgPyBTQ1IxX0NTUl9SRVNQX09LIDogU0NSMV9DU1JfUkVTUF9FUjsKLWludGVnZXIgaTsKLWFsd2F5c19jb21iIGJlZ2luCi0gICAgaSA9IDA7IC8vIHlvc3lzIGxhdGNoIHdhcm5pbmcgZml4Ci0gICAgdGR1MmNzcl9yZGF0YV9vID0gJzA7Ci0gICAgaWYgKGNzcjJ0ZHVfcmVxX2kpIGJlZ2luCi0gICAgICAgIGNhc2UgKGNzcjJ0ZHVfYWRkcl9pKQotICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9URFVfT0ZGU19UU0VMRUNUOiBiZWdpbgotICAgICAgICAgICAgICAgIHRkdTJjc3JfcmRhdGFfbyA9IHsnMCwgY3NyX3RzZWxlY3RfZmZ9OwotICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBTQ1IxX0NTUl9BRERSX1REVV9PRkZTX1REQVRBMiA6IGJlZ2luCi0gICAgICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgTVRSSUdfTlVNOyBpPWkrMSkgYmVnaW4gLy8gY3AuNAotICAgICAgICAgICAgICAgICAgICBpZihjc3JfdHNlbGVjdF9mZiA9PSBBTExUUklHX1cnKGkpKSBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vID0gY3NyX3RkYXRhMl9mZltpXTsKLSAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIFNDUjFfQ1NSX0FERFJfVERVX09GRlNfVERBVEExIDogYmVnaW4KLSAgICAgICAgICAgICAgICBmb3IoaSA9IDA7IGkgPCBNVFJJR19OVU07IGk9aSsxKSBiZWdpbiAvLyBjcC40Ci0gICAgICAgICAgICAgICAgICAgIGlmKGNzcl90c2VsZWN0X2ZmID09IEFMTFRSSUdfVycoaSkpIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZHUyY3NyX3JkYXRhX29bU0NSMV9URFVfVERBVEExX1RZUEVfSEk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX1REVV9UREFUQTFfVFlQRV9MT10gICAgICA9IFNDUjFfVERVX01DT05UUk9MX1RZUEVfVkFMOwotICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vW1NDUjFfVERVX1REQVRBMV9ETU9ERV0gICAgICAgPSBjc3JfbWNvbnRyb2xfZG1vZGVfZmZbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZHUyY3NyX3JkYXRhX29bU0NSMV9URFVfTUNPTlRST0xfTUFTS01BWF9ISToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfVERVX01DT05UUk9MX01BU0tNQVhfTE9dID0gU0NSMV9URFVfTUNPTlRST0xfTUFTS01BWF9WQUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZHUyY3NyX3JkYXRhX29bU0NSMV9URFVfTUNPTlRST0xfSElUXSAgICAgICA9IGNzcl9tY29udHJvbF9oaXRfZmZbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZHUyY3NyX3JkYXRhX29bU0NSMV9URFVfTUNPTlRST0xfU0VMRUNUXSAgICA9IFNDUjFfVERVX01DT05UUk9MX1NFTEVDVF9WQUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZHUyY3NyX3JkYXRhX29bU0NSMV9URFVfTUNPTlRST0xfVElNSU5HXSAgICA9IFNDUjFfVERVX01DT05UUk9MX1RJTUlOR19WQUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZHUyY3NyX3JkYXRhX29bU0NSMV9URFVfTUNPTlRST0xfQUNUSU9OX0hJOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9URFVfTUNPTlRST0xfQUNUSU9OX0xPXSAgPSB7NSdiMCwgY3NyX21jb250cm9sX2FjdGlvbl9mZltpXX07Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZHUyY3NyX3JkYXRhX29bU0NSMV9URFVfTUNPTlRST0xfQ0hBSU5dICAgICA9IDEnYjA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZHUyY3NyX3JkYXRhX29bU0NSMV9URFVfTUNPTlRST0xfTUFUQ0hfSEk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX1REVV9NQ09OVFJPTF9NQVRDSF9MT10gICA9IDQnYjA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZHUyY3NyX3JkYXRhX29bU0NSMV9URFVfTUNPTlRST0xfTV0gICAgICAgICA9IGNzcl9tY29udHJvbF9tX2ZmW2ldOwotICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vW1NDUjFfVERVX01DT05UUk9MX1JFU0VSVkVEQV0gPSBTQ1IxX1REVV9NQ09OVFJPTF9SRVNFUlZFREFfVkFMOwotICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vW1NDUjFfVERVX01DT05UUk9MX1NdICAgICAgICAgPSAxJ2IwOwotICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vW1NDUjFfVERVX01DT05UUk9MX1VdICAgICAgICAgPSAxJ2IwOwotICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vW1NDUjFfVERVX01DT05UUk9MX0VYRUNVVEVdICAgPSBjc3JfbWNvbnRyb2xfZXhlY19mZiBbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZHUyY3NyX3JkYXRhX29bU0NSMV9URFVfTUNPTlRST0xfU1RPUkVdICAgICA9IGNzcl9tY29udHJvbF9zdG9yZV9mZltpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRkdTJjc3JfcmRhdGFfb1tTQ1IxX1REVV9NQ09OVFJPTF9MT0FEXSAgICAgID0gY3NyX21jb250cm9sX2xvYWRfZmYgW2ldOwotICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICBlbmQKLWBpZmRlZiBTQ1IxX1REVV9JQ09VTlRfRU4KLSAgICAgICAgICAgICAgICBpZihjc3JfdHNlbGVjdF9mZiA9PSBBTExUUklHX1cnKFNDUjFfVERVX0FMTFRSSUdfTlVNIC0gMSdiMSkpIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgIHRkdTJjc3JfcmRhdGFfb1tTQ1IxX1REVV9UREFUQTFfVFlQRV9ISToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9URFVfVERBVEExX1RZUEVfTE9dICAgID0gU0NSMV9URFVfSUNPVU5UX1RZUEVfVkFMOwotICAgICAgICAgICAgICAgICAgICB0ZHUyY3NyX3JkYXRhX29bU0NSMV9URFVfVERBVEExX0RNT0RFXSAgICAgPSBjc3JfaWNvdW50X2Rtb2RlX2ZmOwotICAgICAgICAgICAgICAgICAgICB0ZHUyY3NyX3JkYXRhX29bU0NSMV9URFVfSUNPVU5UX0hJVF0gICAgICAgPSBjc3JfaWNvdW50X2hpdF9mZjsKLSAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vW1NDUjFfVERVX0lDT1VOVF9DT1VOVF9ISToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9URFVfSUNPVU5UX0NPVU5UX0xPXSAgID0gY3NyX2ljb3VudF9jb3VudF9mZjsKLSAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vW1NDUjFfVERVX0lDT1VOVF9VXSAgICAgICAgID0gMSdiMDsKLSAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vW1NDUjFfVERVX0lDT1VOVF9TXSAgICAgICAgID0gMSdiMDsKLSAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vW1NDUjFfVERVX0lDT1VOVF9NXSAgICAgICAgID0gY3NyX2ljb3VudF9tX2ZmOwotICAgICAgICAgICAgICAgICAgICB0ZHUyY3NyX3JkYXRhX29bU0NSMV9URFVfSUNPVU5UX0FDVElPTl9ISToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9URFVfSUNPVU5UX0FDVElPTl9MT10gID0gezUnYjAsIGNzcl9pY291bnRfYWN0aW9uX2ZmfTsKLSAgICAgICAgICAgICAgICBlbmQKLWBlbmRpZiAvLyBTQ1IxX1REVV9JQ09VTlRfRU4KLSAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9URFVfT0ZGU19USU5GTyA6IGJlZ2luCi0gICAgICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgTVRSSUdfTlVNOyBpPWkrMSkgYmVnaW4gLy8gY3AuNAotICAgICAgICAgICAgICAgICAgICBpZihjc3JfdHNlbGVjdF9mZiA9PSBBTExUUklHX1cnKGkpKSBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vW1NDUjFfVERVX01DT05UUk9MX1RZUEVfVkFMXSA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgIGVuZAotYGlmZGVmIFNDUjFfVERVX0lDT1VOVF9FTgotICAgICAgICAgICAgICAgIGlmKGNzcl90c2VsZWN0X2ZmID09IEFMTFRSSUdfVycoU0NSMV9URFVfQUxMVFJJR19OVU0gLSAxJ2IxKSkgYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vW1NDUjFfVERVX0lDT1VOVF9UWVBFX1ZBTF0gPSAxJ2IxOwotICAgICAgICAgICAgICAgIGVuZAotYGVuZGlmIC8vIFNDUjFfVERVX0lDT1VOVF9FTgotICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBkZWZhdWx0IDogYmVnaW4KLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmRjYXNlCi0gICAgZW5kCi1lbmQKLQotLy8gV3JpdGUgbG9naWMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgY3NyX3dyX3JlcSAgPSAxJ2IwOwotICAgIGNzcl93cl9kYXRhID0gJzA7Ci0KLSAgICBjYXNlIChjc3IydGR1X2NtZF9pKQotICAgICAgICBTQ1IxX0NTUl9DTURfV1JJVEU6IGJlZ2luCi0gICAgICAgICAgICBjc3Jfd3JfcmVxICA9IDEnYjE7Ci0gICAgICAgICAgICBjc3Jfd3JfZGF0YSA9IGNzcjJ0ZHVfd2RhdGFfaTsKLSAgICAgICAgZW5kCi0gICAgICAgIFNDUjFfQ1NSX0NNRF9TRVQgIDogYmVnaW4KLSAgICAgICAgICAgIGNzcl93cl9yZXEgID0gfGNzcjJ0ZHVfd2RhdGFfaTsKLSAgICAgICAgICAgIGNzcl93cl9kYXRhID0gdGR1MmNzcl9yZGF0YV9vIHwgY3NyMnRkdV93ZGF0YV9pOwotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9DU1JfQ01EX0NMRUFSOiBiZWdpbgotICAgICAgICAgICAgY3NyX3dyX3JlcSAgPSB8Y3NyMnRkdV93ZGF0YV9pOwotICAgICAgICAgICAgY3NyX3dyX2RhdGEgPSB0ZHUyY3NyX3JkYXRhX28gJiB+Y3NyMnRkdV93ZGF0YV9pOwotICAgICAgICBlbmQKLSAgICAgICAgZGVmYXVsdCA6IGJlZ2luCi0gICAgICAgIGVuZAotICAgIGVuZGNhc2UKLWVuZAotCi0vLyBSZWdpc3RlciBzZWxlY3Rpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1pbnRlZ2VyIGs7Ci1hbHdheXNfY29tYiBiZWdpbgotICAgIGsgPSAwOyAvLyB5b3N5cyBsYXRjaCB3YXJuaW5nIGZpeAotICAgIGNzcl9hZGRyX3RzZWxlY3QgID0gMSdiMDsKLSAgICBjc3JfYWRkcl90ZGF0YTIgICA9ICcwOwotICAgIGNzcl9hZGRyX21jb250cm9sID0gJzA7Ci1gaWZkZWYgU0NSMV9URFVfSUNPVU5UX0VOCi0gICAgY3NyX2FkZHJfaWNvdW50ICAgPSAnMDsKLWBlbmRpZiAvLyBTQ1IxX1REVV9JQ09VTlRfRU4KLQotICAgIGlmIChjc3IydGR1X3JlcV9pKSBiZWdpbgotICAgICAgICBjYXNlIChjc3IydGR1X2FkZHJfaSkKLSAgICAgICAgICAgIFNDUjFfQ1NSX0FERFJfVERVX09GRlNfVFNFTEVDVDogYmVnaW4KLSAgICAgICAgICAgICAgICBjc3JfYWRkcl90c2VsZWN0ID0gMSdiMTsKLSAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9URFVfT0ZGU19UREFUQTEgOiBiZWdpbgotICAgICAgICAgICAgICAgIGZvcihrID0gMDsgayA8IE1UUklHX05VTTsgaz1rKzEpIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgIGlmKGNzcl90c2VsZWN0X2ZmID09IEFMTFRSSUdfVycoaykpIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICBjc3JfYWRkcl9tY29udHJvbFtrXSA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgIGVuZAotYGlmZGVmIFNDUjFfVERVX0lDT1VOVF9FTgotICAgICAgICAgICAgICAgIGlmKGNzcl90c2VsZWN0X2ZmID09IEFMTFRSSUdfVycoU0NSMV9URFVfQUxMVFJJR19OVU0gLSAxJ2IxKSkgYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgY3NyX2FkZHJfaWNvdW50ID0gMSdiMTsKLSAgICAgICAgICAgICAgICBlbmQKLWBlbmRpZiAvLyBTQ1IxX1REVV9JQ09VTlRfRU4KLSAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9URFVfT0ZGU19UREFUQTIgOiBiZWdpbgotICAgICAgICAgICAgICAgIGZvcihrID0gMDsgayA8IE1UUklHX05VTTsgaz1rKzEpIGJlZ2luIC8vIGNwLjQKLSAgICAgICAgICAgICAgICAgICAgaWYoY3NyX3RzZWxlY3RfZmYgPT0gQUxMVFJJR19XJyhrKSApIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICBjc3JfYWRkcl90ZGF0YTJba10gPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZGVmYXVsdCA6IGJlZ2luCi0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kY2FzZQotICAgIGVuZAotZW5kCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBURFUgQ1NScwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0gLy8gVERVIENTUnMgY29uc2lzdCBvZiB0aGUgZm9sbG93aW5nIHJlZ2lzdGVyczoKLSAvLyAtIFRTRUxFQ1QKLSAvLyAtIFREQVRBMS9NQ09OVFJPTC9JQ09VTlQgKGRlcGVuZGluZyBvbiB0aGUgdHlwZSBmaWVsZCB2YWx1ZSkKLSAvLyAtIFREQVRBMgotLy8KLQotLy8gVFNFTEVDVCByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIERldGVybWluZXMgd2hpY2ggdHJpZ2dlciBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIG90aGVyIHRyaWdnZXIgcmVnaXN0ZXJzCi0KLWFzc2lnbiBjc3JfdHNlbGVjdF91cGQgPSBjbGtfZW4gJiBjc3JfYWRkcl90c2VsZWN0ICYgY3NyX3dyX3JlcQotICAgICAgICAgICAgICAgICAgICAgICAmIChjc3Jfd3JfZGF0YVtBTExUUklHX1ctMTowXSA8IEFMTFRSSUdfVycoQUxMVFJJR19OVU0pKTsKLQotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYofnJzdF9uKSBiZWdpbgotICAgICAgICBjc3JfdHNlbGVjdF9mZiA8PSAnMDsKLSAgICBlbmQgZWxzZSBpZihjc3JfdHNlbGVjdF91cGQpIGJlZ2luCi0gICAgICAgIGNzcl90c2VsZWN0X2ZmIDw9IGNzcl93cl9kYXRhW0FMTFRSSUdfVy0xOjBdOwotICAgIGVuZAotZW5kCi0KLWBpZmRlZiBTQ1IxX1REVV9JQ09VTlRfRU4KLS8vIElDT1VOVCByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFByb3ZpZGVzIGEgdHJpZ2dlciB0aGF0IGZpcmVzIHdoZW4gdGhlIGNlcnRhaW4gbnVtYmVyIG9mIGluc3RydWN0aW9ucyBoYXMgcmV0aXJlZAotLy8gSXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBhcyBhIHNpbmdsZSBzdGVwIHRyaWdnZXIgKGluIHRoaXMgY2FzZSBjb3VudCBtdXN0IGJlIDEpCi0KLWFzc2lnbiBjc3JfaWNvdW50X3dyX3JlcSA9IGNzcl9hZGRyX2ljb3VudCAmIGNzcl93cl9yZXE7Ci1hc3NpZ24gY3NyX2ljb3VudF9jbGtfZW4gPSBjbGtfZW4gJiAoY3NyX2ljb3VudF93cl9yZXEgfCBjc3JfaWNvdW50X21fZmYpOwotYXNzaWduIGNzcl9pY291bnRfdXBkICAgID0gfmNzcl9pY291bnRfZG1vZGVfZmYKLSAgICAgICAgICAgICAgICAgICAgICAgICA/IGNzcl9pY291bnRfd3JfcmVxCi0gICAgICAgICAgICAgICAgICAgICAgICAgOiB0ZHVfZHNibF9pICYgY3NyX2ljb3VudF93cl9yZXE7Ci0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmKH5yc3RfbikgYmVnaW4KLSAgICAgICAgY3NyX2ljb3VudF9kbW9kZV9mZiAgPD0gMSdiMDsKLSAgICAgICAgY3NyX2ljb3VudF9tX2ZmICAgICAgPD0gMSdiMDsKLSAgICAgICAgY3NyX2ljb3VudF9hY3Rpb25fZmYgPD0gMSdiMDsKLSAgICAgICAgY3NyX2ljb3VudF9oaXRfZmYgICAgPD0gMSdiMDsKLSAgICAgICAgY3NyX2ljb3VudF9jb3VudF9mZiAgPD0gJzA7Ci0gICAgICAgIGNzcl9pY291bnRfc2tpcF9mZiAgIDw9IDEnYjA7Ci0gICAgZW5kIGVsc2UgaWYgKGNzcl9pY291bnRfY2xrX2VuKSBiZWdpbgotICAgICAgICBjc3JfaWNvdW50X2Rtb2RlX2ZmICA8PSBjc3JfaWNvdW50X2Rtb2RlX25leHQ7Ci0gICAgICAgIGNzcl9pY291bnRfbV9mZiAgICAgIDw9IGNzcl9pY291bnRfbV9uZXh0OwotICAgICAgICBjc3JfaWNvdW50X2FjdGlvbl9mZiA8PSBjc3JfaWNvdW50X2FjdGlvbl9uZXh0OwotICAgICAgICBjc3JfaWNvdW50X2hpdF9mZiAgICA8PSBjc3JfaWNvdW50X2hpdF9uZXh0OwotICAgICAgICBjc3JfaWNvdW50X2NvdW50X2ZmICA8PSBjc3JfaWNvdW50X2NvdW50X25leHQ7Ci0gICAgICAgIGNzcl9pY291bnRfc2tpcF9mZiAgIDw9IGNzcl9pY291bnRfc2tpcF9uZXh0OwotICAgIGVuZAotZW5kCi0KLWFzc2lnbiBjc3JfaWNvdW50X2RlY3JfZW4gICAgPSAofnRkdV9kc2JsX2kgJiBjc3JfaWNvdW50X21fZmYpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZXh1MnRkdV9pbW9uX2kudmQgJiAoY3NyX2ljb3VudF9jb3VudF9mZiAhPSAxNCdiMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAxJ2IwOwotYXNzaWduIGNzcl9pY291bnRfY291bnRfZGVjciA9IGV4dTJ0ZHVfaW1vbl9pLnJlcSAmIGNzcl9pY291bnRfZGVjcl9lbiAmIH5jc3JfaWNvdW50X3NraXBfZmY7Ci1hc3NpZ24gY3NyX2ljb3VudF9za2lwX2RzYmwgID0gZXh1MnRkdV9pbW9uX2kucmVxICYgY3NyX2ljb3VudF9kZWNyX2VuICYgY3NyX2ljb3VudF9za2lwX2ZmOwotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGlmIChjc3JfaWNvdW50X3VwZCkgYmVnaW4KLSAgICAgICAgY3NyX2ljb3VudF9kbW9kZV9uZXh0ICA9IGNzcl93cl9kYXRhW1NDUjFfVERVX1REQVRBMV9ETU9ERV07Ci0gICAgICAgIGNzcl9pY291bnRfbV9uZXh0ICAgICAgPSBjc3Jfd3JfZGF0YVtTQ1IxX1REVV9JQ09VTlRfTV07Ci0gICAgICAgIGNzcl9pY291bnRfYWN0aW9uX25leHQgPSAoY3NyX3dyX2RhdGFbU0NSMV9URFVfSUNPVU5UX0FDVElPTl9ISQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOlNDUjFfVERVX0lDT1VOVF9BQ1RJT05fTE9dID09ICdiMSk7Ci0gICAgICAgIGNzcl9pY291bnRfaGl0X25leHQgICAgPSBjc3Jfd3JfZGF0YVtTQ1IxX1REVV9JQ09VTlRfSElUXTsKLSAgICAgICAgY3NyX2ljb3VudF9jb3VudF9uZXh0ICA9IGNzcl93cl9kYXRhW1NDUjFfVERVX0lDT1VOVF9DT1VOVF9ISTpTQ1IxX1REVV9JQ09VTlRfQ09VTlRfTE9dOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGNzcl9pY291bnRfZG1vZGVfbmV4dCAgPSBjc3JfaWNvdW50X2Rtb2RlX2ZmOwotICAgICAgICBjc3JfaWNvdW50X21fbmV4dCAgICAgID0gY3NyX2ljb3VudF9tX2ZmOwotICAgICAgICBjc3JfaWNvdW50X2FjdGlvbl9uZXh0ID0gY3NyX2ljb3VudF9hY3Rpb25fZmY7Ci0gICAgICAgIGNzcl9pY291bnRfaGl0X25leHQgICAgPSBleHUydGR1X2JwX3JldGlyZV9pW0FMTFRSSUdfTlVNIC0gMSdiMV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDEnYjEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNzcl9pY291bnRfaGl0X2ZmOwotICAgICAgICBjc3JfaWNvdW50X2NvdW50X25leHQgID0gY3NyX2ljb3VudF9jb3VudF9kZWNyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjc3JfaWNvdW50X2NvdW50X2ZmIC0gMSdiMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3NyX2ljb3VudF9jb3VudF9mZjsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gY3NyX2ljb3VudF9za2lwX25leHQgPSBjc3JfaWNvdW50X3dyX3JlcSAgICA/IGNzcl93cl9kYXRhW1NDUjFfVERVX0lDT1VOVF9NXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3NyX2ljb3VudF9za2lwX2RzYmwgPyAxJ2IwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNzcl9pY291bnRfc2tpcF9mZjsKLWBlbmRpZiAvLyBTQ1IxX1REVV9JQ09VTlRfRU4KLQotLy8gTUNPTlRST0wgcmVnaXN0ZXJzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUHJvdmlkZXMgYSB0cmlnZ2VyIHRoYXQgZmlyZXMgb24gdGhlIHZpcnR1YWwgYWRkcmVzcyAoc3RvcmVkIGluIFREQVRBMikgbWF0Y2gKLS8vIChsb2FkLCBzdG9yZSwgZXhlYyBvcHRpb25zIHN1cHBvcnRlZCkuIFRyaWdnZXJzIGNoYWluaW5nIHN1cHBvcnRlZAotCi1nZW52YXIgdHJpZzsKLWdlbmVyYXRlCi1mb3IgKHRyaWcgPSAwOyAkdW5zaWduZWQodHJpZykgPCBNVFJJR19OVU07IHRyaWc9dHJpZysxKSBiZWdpbiA6IGdibG9ja19tdHJpZwotCi1hc3NpZ24gY3NyX21jb250cm9sX3dyX3JlcVt0cmlnXSA9IGNzcl9hZGRyX21jb250cm9sW3RyaWddICYgY3NyX3dyX3JlcTsKLWFzc2lnbiBjc3JfbWNvbnRyb2xfY2xrX2VuW3RyaWddID0gY2xrX2VuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIChjc3JfbWNvbnRyb2xfd3JfcmVxW3RyaWddIHwgY3NyX21jb250cm9sX21fZmZbdHJpZ10pOwotYXNzaWduIGNzcl9tY29udHJvbF91cGQgICBbdHJpZ10gPSB+Y3NyX21jb250cm9sX2Rtb2RlX2ZmW3RyaWddCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGNzcl9tY29udHJvbF93cl9yZXFbdHJpZ10KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGR1X2RzYmxfaSAmIGNzcl9tY29udHJvbF93cl9yZXFbdHJpZ107Ci0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmKH5yc3RfbikgYmVnaW4KLSAgICAgICAgY3NyX21jb250cm9sX2Rtb2RlX2ZmIFt0cmlnXSA8PSAxJ2IwOwotICAgICAgICBjc3JfbWNvbnRyb2xfbV9mZiAgICAgW3RyaWddIDw9IDEnYjA7Ci0gICAgICAgIGNzcl9tY29udHJvbF9leGVjX2ZmICBbdHJpZ10gPD0gMSdiMDsKLSAgICAgICAgY3NyX21jb250cm9sX2xvYWRfZmYgIFt0cmlnXSA8PSAxJ2IwOwotICAgICAgICBjc3JfbWNvbnRyb2xfc3RvcmVfZmYgW3RyaWddIDw9IDEnYjA7Ci0gICAgICAgIGNzcl9tY29udHJvbF9hY3Rpb25fZmZbdHJpZ10gPD0gMSdiMDsKLSAgICAgICAgY3NyX21jb250cm9sX2hpdF9mZiAgIFt0cmlnXSA8PSAxJ2IwOwotICAgIGVuZCBlbHNlIGlmKGNzcl9tY29udHJvbF9jbGtfZW5bdHJpZ10pIGJlZ2luCi0gICAgICAgIGNzcl9tY29udHJvbF9kbW9kZV9mZiBbdHJpZ10gPD0gY3NyX21jb250cm9sX2Rtb2RlX25leHRbdHJpZ107Ci0gICAgICAgIGNzcl9tY29udHJvbF9tX2ZmICAgICBbdHJpZ10gPD0gY3NyX21jb250cm9sX21fbmV4dFt0cmlnXTsKLSAgICAgICAgY3NyX21jb250cm9sX2V4ZWNfZmYgIFt0cmlnXSA8PSBjc3JfbWNvbnRyb2xfZXhlY19uZXh0W3RyaWddOwotICAgICAgICBjc3JfbWNvbnRyb2xfbG9hZF9mZiAgW3RyaWddIDw9IGNzcl9tY29udHJvbF9sb2FkX25leHRbdHJpZ107Ci0gICAgICAgIGNzcl9tY29udHJvbF9zdG9yZV9mZiBbdHJpZ10gPD0gY3NyX21jb250cm9sX3N0b3JlX25leHRbdHJpZ107Ci0gICAgICAgIGNzcl9tY29udHJvbF9hY3Rpb25fZmZbdHJpZ10gPD0gY3NyX21jb250cm9sX2FjdGlvbl9uZXh0W3RyaWddOwotICAgICAgICBjc3JfbWNvbnRyb2xfaGl0X2ZmICAgW3RyaWddIDw9IGNzcl9tY29udHJvbF9oaXRfbmV4dFt0cmlnXTsKLSAgICBlbmQKLWVuZAotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGlmIChjc3JfbWNvbnRyb2xfdXBkW3RyaWddKSBiZWdpbgotICAgICAgICBjc3JfbWNvbnRyb2xfZG1vZGVfbmV4dCBbdHJpZ10gPSBjc3Jfd3JfZGF0YVtTQ1IxX1REVV9UREFUQTFfRE1PREVdOwotICAgICAgICBjc3JfbWNvbnRyb2xfbV9uZXh0ICAgICBbdHJpZ10gPSBjc3Jfd3JfZGF0YVtTQ1IxX1REVV9NQ09OVFJPTF9NXTsKLSAgICAgICAgY3NyX21jb250cm9sX2V4ZWNfbmV4dCAgW3RyaWddID0gY3NyX3dyX2RhdGFbU0NSMV9URFVfTUNPTlRST0xfRVhFQ1VURV07Ci0gICAgICAgIGNzcl9tY29udHJvbF9sb2FkX25leHQgIFt0cmlnXSA9IGNzcl93cl9kYXRhW1NDUjFfVERVX01DT05UUk9MX0xPQURdOwotICAgICAgICBjc3JfbWNvbnRyb2xfc3RvcmVfbmV4dCBbdHJpZ10gPSBjc3Jfd3JfZGF0YVtTQ1IxX1REVV9NQ09OVFJPTF9TVE9SRV07Ci0gICAgICAgIGNzcl9tY29udHJvbF9hY3Rpb25fbmV4dFt0cmlnXSA9IChjc3Jfd3JfZGF0YVtTQ1IxX1REVV9NQ09OVFJPTF9BQ1RJT05fSEkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOlNDUjFfVERVX01DT05UUk9MX0FDVElPTl9MT10gPT0gJ2IxKTsKLSAgICAgICAgY3NyX21jb250cm9sX2hpdF9uZXh0ICAgW3RyaWddID0gY3NyX3dyX2RhdGFbU0NSMV9URFVfTUNPTlRST0xfSElUXTsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICBjc3JfbWNvbnRyb2xfZG1vZGVfbmV4dCBbdHJpZ10gPSBjc3JfbWNvbnRyb2xfZG1vZGVfZmYgW3RyaWddOwotICAgICAgICBjc3JfbWNvbnRyb2xfbV9uZXh0ICAgICBbdHJpZ10gPSBjc3JfbWNvbnRyb2xfbV9mZiAgICAgW3RyaWddOwotICAgICAgICBjc3JfbWNvbnRyb2xfZXhlY19uZXh0ICBbdHJpZ10gPSBjc3JfbWNvbnRyb2xfZXhlY19mZiAgW3RyaWddOwotICAgICAgICBjc3JfbWNvbnRyb2xfbG9hZF9uZXh0ICBbdHJpZ10gPSBjc3JfbWNvbnRyb2xfbG9hZF9mZiAgW3RyaWddOwotICAgICAgICBjc3JfbWNvbnRyb2xfc3RvcmVfbmV4dCBbdHJpZ10gPSBjc3JfbWNvbnRyb2xfc3RvcmVfZmYgW3RyaWddOwotICAgICAgICBjc3JfbWNvbnRyb2xfYWN0aW9uX25leHRbdHJpZ10gPSBjc3JfbWNvbnRyb2xfYWN0aW9uX2ZmW3RyaWddOwotICAgICAgICBjc3JfbWNvbnRyb2xfaGl0X25leHQgICBbdHJpZ10gPSBleHUydGR1X2JwX3JldGlyZV9pW3RyaWddCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDEnYjEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3NyX21jb250cm9sX2hpdF9mZlt0cmlnXTsKLSAgICBlbmQKLWVuZAotCi0vLyBUREFUQTIgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBjc3JfdGRhdGEyX3VwZFt0cmlnXSA9IH5jc3JfbWNvbnRyb2xfZG1vZGVfZmZbdHJpZ10KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGNsa19lbiAmIGNzcl9hZGRyX3RkYXRhMlt0cmlnXSAmIGNzcl93cl9yZXEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNsa19lbiAmIGNzcl9hZGRyX3RkYXRhMlt0cmlnXSAmIGNzcl93cl9yZXEgJiB0ZHVfZHNibF9pOwotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAoY3NyX3RkYXRhMl91cGRbdHJpZ10pIGJlZ2luCi0gICAgICAgIGNzcl90ZGF0YTJfZmZbdHJpZ10gPD0gY3NyX3dyX2RhdGE7Ci0gICAgZW5kCi1lbmQKLQotZW5kCi1lbmRnZW5lcmF0ZSAvLyBnYmxvY2tfbXRyaWcKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFREVSA8LT4gRVhVIGludGVyZmFjZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIGNzcl9pY291bnRfaGl0ID0gfnRkdV9kc2JsX2kgJiBjc3JfaWNvdW50X21fZmYKLSAgICAgICAgICAgICAgICAgICAgICA/IGV4dTJ0ZHVfaW1vbl9pLnZkICYgKGNzcl9pY291bnRfY291bnRfZmYgPT0gMTQnYjEpICYgfmNzcl9pY291bnRfc2tpcF9mZgotICAgICAgICAgICAgICAgICAgICAgIDogMSdiMDsKLQotYGlmbmRlZiBTQ1IxX1REVV9JQ09VTlRfRU4KLWFzc2lnbiB0ZHUyZXh1X2licmtwdF9tYXRjaF9vICAgPSBjc3JfbWNvbnRyb2xfZXhlY19oaXQ7Ci1hc3NpZ24gdGR1MmV4dV9pYnJrcHRfZXhjX3JlcV9vID0gfGNzcl9tY29udHJvbF9leGVjX2hpdDsKLWBlbHNlCi1hc3NpZ24gdGR1MmV4dV9pYnJrcHRfbWF0Y2hfbyAgID0ge2Nzcl9pY291bnRfaGl0LCBjc3JfbWNvbnRyb2xfZXhlY19oaXR9OwotYXNzaWduIHRkdTJleHVfaWJya3B0X2V4Y19yZXFfbyA9IHxjc3JfbWNvbnRyb2xfZXhlY19oaXQgfCBjc3JfaWNvdW50X2hpdDsKLWBlbmRpZiAvLyBTQ1IxX1REVV9JQ09VTlRfRU4KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFREVSA8LT4gTFNVIGludGVyZmFjZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gQnJlYWtwb2ludCBsb2dpYwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotZ2VuZXJhdGUKLWZvciAodHJpZyA9IDA7ICR1bnNpZ25lZCh0cmlnKSA8IE1UUklHX05VTTsgdHJpZz10cmlnKzEpIGJlZ2luIDogZ2Jsb2NrX2JyZWFrX3RyaWcKLWFzc2lnbiBjc3JfbWNvbnRyb2xfZXhlY19oaXRbdHJpZ10gPSB+dGR1X2RzYmxfaQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIGNzcl9tY29udHJvbF9tX2ZmW3RyaWddCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgY3NyX21jb250cm9sX2V4ZWNfZmZbdHJpZ10KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBleHUydGR1X2ltb25faS52ZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIGV4dTJ0ZHVfaW1vbl9pLmFkZHIgPT0gY3NyX3RkYXRhMl9mZlt0cmlnXTsKLWVuZAotZW5kZ2VuZXJhdGUKLQotYGlmbmRlZiBTQ1IxX1REVV9JQ09VTlRfRU4KLWFzc2lnbiB0ZHUybHN1X2licmtwdF9leGNfcmVxX28gPSB8Y3NyX21jb250cm9sX2V4ZWNfaGl0OwotYGVsc2UKLWFzc2lnbiB0ZHUybHN1X2licmtwdF9leGNfcmVxX28gPSB8Y3NyX21jb250cm9sX2V4ZWNfaGl0IHwgY3NyX2ljb3VudF9oaXQ7Ci1gZW5kaWYgLy8gU0NSMV9URFVfSUNPVU5UX0VOCi0KLS8vIFdhdGNocG9pbnQgbG9naWMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWdlbmVyYXRlCi1mb3IoIHRyaWcgPSAwOyAkdW5zaWduZWQodHJpZykgPCBNVFJJR19OVU07IHRyaWc9dHJpZysxICkgYmVnaW4gOiBnYmxvY2tfd2F0Y2hfdHJpZwotYXNzaWduIGNzcl9tY29udHJvbF9sZHN0X2hpdFt0cmlnXSA9IH50ZHVfZHNibF9pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgY3NyX21jb250cm9sX21fZmZbdHJpZ10KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBsc3UydGR1X2Rtb25faS52ZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmICggKGNzcl9tY29udHJvbF9sb2FkX2ZmIFt0cmlnXSAmIGxzdTJ0ZHVfZG1vbl9pLmxvYWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoY3NyX21jb250cm9sX3N0b3JlX2ZmW3RyaWddICYgbHN1MnRkdV9kbW9uX2kuc3RvcmUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIGxzdTJ0ZHVfZG1vbl9pLmFkZHIgPT0gY3NyX3RkYXRhMl9mZlt0cmlnXTsKLWVuZAotZW5kZ2VuZXJhdGUKLQotYXNzaWduIHRkdTJsc3VfZGJya3B0X21hdGNoX28gICA9IGNzcl9tY29udHJvbF9sZHN0X2hpdDsKLWFzc2lnbiB0ZHUybHN1X2RicmtwdF9leGNfcmVxX28gPSB8Y3NyX21jb250cm9sX2xkc3RfaGl0OwotCi1gaWZuZGVmIFNDUjFfVERVX0VOCi1hc3NpZ24gdGR1MmxzdV9icmtfZW5fbyA9IHxjc3JfbWNvbnRyb2xfbV9mZiB8IGNzcl9pY291bnRfbV9mZjsKLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gVERVIDwtPiBIRFUgaW50ZXJmYWNlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotaW50ZWdlciBqOwotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICB0ZHUyaGR1X2Rtb2RlX3JlcV9vID0gMSdiMDsKLQotICAgIGZvcihqID0gMDsgaiA8IE1UUklHX05VTTsgaj1qKzEpIGJlZ2luCi0gICAgICAgIHRkdTJoZHVfZG1vZGVfcmVxX28gfD0gKGNzcl9tY29udHJvbF9hY3Rpb25fZmZbal0gJiBleHUydGR1X2JwX3JldGlyZV9pW2pdKTsKLSAgICBlbmQKLWBpZmRlZiBTQ1IxX1REVV9JQ09VTlRfRU4KLSAgICB0ZHUyaGR1X2Rtb2RlX3JlcV9vIHw9IChjc3JfaWNvdW50X2FjdGlvbl9mZiAmIGV4dTJ0ZHVfYnBfcmV0aXJlX2lbQUxMVFJJR19OVU0tMV0pOwotYGVuZGlmIC8vIFNDUjFfVERVX0lDT1VOVF9FTgotZW5kCi0KLWBpZmRlZiBTQ1IxX1RSR1RfU0lNVUxBVElPTgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEFzc2VydGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotU1ZBX1REVV9YX0NPTlRST0wgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgISRpc3Vua25vd24oe2Nsa19lbiwgdGR1X2RzYmxfaSwgY3NyMnRkdV9yZXFfaSwKLSAgICAgICAgICAgICAgICAgZXh1MnRkdV9pbW9uX2kudmQsIGxzdTJ0ZHVfZG1vbl9pLnZkLCBleHUydGR1X2JwX3JldGlyZV9pfSkKLSAgICApIGVsc2UgJGVycm9yKCJURFUgRXJyb3I6IGNvbnRyb2wgc2lnbmFscyBpcyBYIC0gJTBiIiwge2Nsa19lbiwKLSAgICB0ZHVfZHNibF9pLCBjc3IydGR1X3JlcV9pLCBleHUydGR1X2ltb25faS52ZCwgbHN1MnRkdV9kbW9uX2kudmQsIGV4dTJ0ZHVfYnBfcmV0aXJlX2l9KTsKLQotU1ZBX0RNX1hfQ0xLX0VOIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgICEkaXN1bmtub3duKGNsa19lbikKLSAgICApIGVsc2UgJGVycm9yKCJURFUgRXJyb3I6IGNsa19lbiBjb250cm9sIHNpZ25hbHMgaXMgWCIpOwotCi1TVkFfRE1fWF9EU0JMIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgICEkaXN1bmtub3duKHRkdV9kc2JsX2kpCi0gICAgKSBlbHNlICRlcnJvcigiVERVIEVycm9yOiB0ZHVfZHNibF9pIGNvbnRyb2wgc2lnbmFscyBpcyBYIik7Ci0KLVNWQV9ETV9YX0NTUjJURFVfUkVRIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgICEkaXN1bmtub3duKGNzcjJ0ZHVfcmVxX2kpCi0gICAgKSBlbHNlICRlcnJvcigiVERVIEVycm9yOiBjc3IydGR1X3JlcV9pIGNvbnRyb2wgc2lnbmFscyBpcyBYIik7Ci0KLVNWQV9ETV9YX0lfTU9OX1ZEIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgICEkaXN1bmtub3duKGV4dTJ0ZHVfaW1vbl9pLnZkKQotICAgICkgZWxzZSAkZXJyb3IoIlREVSBFcnJvcjogZXh1MnRkdV9pbW9uX2kudmQgY29udHJvbCBzaWduYWxzIGlzIFgiKTsKLQotU1ZBX0RNX1hfRF9NT05fVkQgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgISRpc3Vua25vd24obHN1MnRkdV9kbW9uX2kudmQpCi0gICAgKSBlbHNlICRlcnJvcigiVERVIEVycm9yOiBsc3UydGR1X2Rtb25faS52ZCBjb250cm9sIHNpZ25hbHMgaXMgWCIpOwotCi1TVkFfRE1fWF9CUF9SRVRJUkUgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgISRpc3Vua25vd24oZXh1MnRkdV9icF9yZXRpcmVfaSkKLSAgICApIGVsc2UgJGVycm9yKCJURFUgRXJyb3I6IGV4dTJ0ZHVfYnBfcmV0aXJlX2kgY29udHJvbCBzaWduYWxzIGlzIFgiKTsKLQotU1ZBX1REVV9YX0NTUiA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICBjc3IydGR1X3JlcV9pIHwtPiAhJGlzdW5rbm93bih7Y3NyMnRkdV9jbWRfaSxjc3IydGR1X2FkZHJfaX0pCi0gICAgKSBlbHNlICRlcnJvcigiVERVIEVycm9yOiBjc3IgaXMgWCIpOwotCi1TVkFfVERVX1hXX0NTUiA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICAoY3NyMnRkdV9yZXFfaSAmIGNzcl93cl9yZXEpIHwtPiAhJGlzdW5rbm93bihjc3IydGR1X3dkYXRhX2kpCi0gICAgKSBlbHNlICRlcnJvcigiVERVIEVycm9yOiBjc3Igd2RhdGEgaXMgWCAiKTsKLQotU1ZBX1REVV9YX0lNT04gOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgZXh1MnRkdV9pbW9uX2kudmQgfC0+ICEkaXN1bmtub3duKHtleHUydGR1X2ltb25faS5yZXEsZXh1MnRkdV9pbW9uX2kuYWRkcn0pCi0gICAgKSBlbHNlICRlcnJvcigiVERVIEVycm9yOiBpbW9uaXRvciBpcyBYIik7Ci0KLVNWQV9URFVfWF9ETU9OIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgIGxzdTJ0ZHVfZG1vbl9pLnZkIHwtPiAhJGlzdW5rbm93bih7bHN1MnRkdV9kbW9uX2l9KQotICAgICkgZWxzZSAkZXJyb3IoIlREVSBFcnJvcjogZG1vbml0b3IgaXMgWCIpOwotCi1gZW5kaWYgLy8gU0NSMV9UUkdUX1NJTVVMQVRJT04KLQotZW5kbW9kdWxlIDogc2NyMV9waXBlX3RkdQotCi1gZW5kaWYgLy8gU0NSMV9URFVfRU4KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV90b3Auc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfdG9wLnN2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjdkZDEwLi4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV90b3Auc3YKKysrIC9kZXYvbnVsbApAQCAtMSw4MzggKzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiBTeW50YWNvcmUgTExDIMKpIDIwMTYtMjAyMQotLy8gCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAotLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IFN5bnRhY29yZSBMTEMKLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8gQGZpbGUgICAgICAgPHNjcjFfcGlwZV90b3Auc3Y+Ci0vLy8gQGJyaWVmICAgICAgU0NSMSBwaXBlbGluZSB0b3AKLS8vLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBwcm9qZWN0IDogWWlGaXZlCi0vLyBSZXY6IEp1bmUgMTAsIDIwMjEsIERpbmVzaCBBCi0vLyAgICAgICAgICAgQnVnZml4LSByZXNldCBjb3JyZWN0aW9uIGZvciBzY3IxX3BpcGVfdGR1IHdoZW4gZGVidWcgaXMgbm90IGVuYWJsZWQKLS8vICAgICAgICAgICBOb3RlOiBwcmV2aW91c2x5IHJlc2V0IHJzdF9uIGlzIGZsb2F0aW5nIGF0IHNpbXVsYXRpb24gaXMgZmFpbGluZwotLy8gICAgICAgICAgIHdoZW4gU0NSMV9EQkdfRU4gaXMgZGlzYWJsZWQKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWBpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgotYGluY2x1ZGUgInNjcjFfbWVtaWYuc3ZoIgotYGluY2x1ZGUgInNjcjFfcmlzY3ZfaXNhX2RlY29kaW5nLnN2aCIKLWBpbmNsdWRlICJzY3IxX2Nzci5zdmgiCi0KLWBpZmRlZiBTQ1IxX0lQSUNfRU4KLWBpbmNsdWRlICJzY3IxX2lwaWMuc3ZoIgotYGVuZGlmIC8vIFNDUjFfSVBJQ19FTgotCi1gaWZkZWYgU0NSMV9EQkdfRU4KLWBpbmNsdWRlICJzY3IxX2hkdS5zdmgiCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotYGlmZGVmIFNDUjFfVERVX0VOCi1gaW5jbHVkZSAic2NyMV90ZHUuc3ZoIgotYGVuZGlmIC8vIFNDUjFfVERVX0VOCi0KLW1vZHVsZSBzY3IxX3BpcGVfdG9wICgKLSAgICAvLyBDb21tb24KLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZV9yc3RfbiwgICAgICAgICAgICAgICAgIC8vIFBpcGUgcmVzZXQKLSAgICBvdXRwdXQgIGxvZ2ljIFs0ODowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZV9kZWJ1ZywKLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlMmhkdV9yZGNfcWxmeV9pLCAgICAgICAgLy8gUGlwZSBSREMgcXVhbGlmaWVyCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiZ19yc3RfbiwgICAgICAgICAgICAgICAgICAvLyBEZWJ1ZyByZXNldAotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaywgICAgICAgICAgICAgICAgICAgICAgICAvLyBQaXBlIGNsb2NrCi0KLSAgICAvLyBJbnN0cnVjdGlvbiBNZW1vcnkgSW50ZXJmYWNlCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUyaW1lbV9yZXFfbywgICAgICAgICAgICAvLyBJTUVNIHJlcXVlc3QKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZTJpbWVtX2NtZF9vLCAgICAgICAgICAgIC8vIElNRU0gY29tbWFuZAotICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX0lNRU1fQVdJRFRILTE6MF0gICAgICAgICAgICAgICBwaXBlMmltZW1fYWRkcl9vLCAgICAgICAgICAgLy8gSU1FTSBhZGRyZXNzCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW0ycGlwZV9yZXFfYWNrX2ksICAgICAgICAvLyBJTUVNIHJlcXVlc3QgYWNrbm93bGVkZ2UKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9JTUVNX0RXSURUSC0xOjBdICAgICAgICAgICAgICAgaW1lbTJwaXBlX3JkYXRhX2ksICAgICAgICAgIC8vIElNRU0gcmVhZCBkYXRhCi0gICAgaW5wdXQgICBsb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW0ycGlwZV9yZXNwX2ksICAgICAgICAgICAvLyBJTUVNIHJlc3BvbnNlCi0KLSAgICAvLyBEYXRhIE1lbW9yeSBJbnRlcmZhY2UKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZTJkbWVtX3JlcV9vLCAgICAgICAgICAgIC8vIERNRU0gcmVxdWVzdAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlMmRtZW1fY21kX28sICAgICAgICAgICAgLy8gRE1FTSBjb21tYW5kCi0gICAgb3V0cHV0ICBsb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUyZG1lbV93aWR0aF9vLCAgICAgICAgICAvLyBETUVNIGRhdGEgd2lkdGgKLSAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9ETUVNX0FXSURUSC0xOjBdICAgICAgICAgICAgICAgcGlwZTJkbWVtX2FkZHJfbywgICAgICAgICAgIC8vIERNRU0gYWRkcmVzcwotICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICBwaXBlMmRtZW1fd2RhdGFfbywgICAgICAgICAgLy8gRE1FTSB3cml0ZSBkYXRhCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW0ycGlwZV9yZXFfYWNrX2ksICAgICAgICAvLyBETUVNIHJlcXVlc3QgYWNrbm93bGVkZ2UKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgICAgICAgICAgICAgZG1lbTJwaXBlX3JkYXRhX2ksICAgICAgICAgIC8vIERNRU0gcmVhZCBkYXRhCi0gICAgaW5wdXQgICBsb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW0ycGlwZV9yZXNwX2ksICAgICAgICAgICAvLyBETUVNIHJlc3BvbnNlCi0KLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgIC8vIERlYnVnIGludGVyZmFjZToKLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJnX2VuLCAgICAgICAgICAgICAgICAgICAgIC8vIDEgLSBkZWJ1ZyBvcGVyYXRpb25zIGVuYWJsZWQKLSAgICAvLyBETSA8LT4gUGlwZWxpbmU6IEhBUlQgUnVuIENvbnRyb2wgaS9mCi0gICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtMnBpcGVfYWN0aXZlX2ksICAgICAgICAgICAvLyBEZWJ1ZyBNb2R1bGUgYWN0aXZlIGZsYWcKLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG0ycGlwZV9jbWRfcmVxX2ksICAgICAgICAgIC8vIFJlcXVlc3QgZnJvbSBEZWJ1ZyBNb2R1bGUKLSAgICBpbnB1dCAgdHlwZV9zY3IxX2hkdV9kYmdzdGF0ZXNfZSAgICAgICAgICAgICAgICAgICAgZG0ycGlwZV9jbWRfaSwgICAgICAgICAgICAgIC8vIENvbW1hbmQgZnJvbSBEZWJ1ZyBNb2R1bGUKLSAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZTJkbV9jbWRfcmVzcF9vLCAgICAgICAgIC8vIFJlc3BvbnNlIHRvIERlYnVnIE1vZHVsZQotICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlMmRtX2NtZF9yY29kZV9vLCAgICAgICAgLy8gRGVidWcgTW9kdWxlIHJldHVybiBjb2RlOiAwIC0gT2s7IDEgLSBFcnJvcgotICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlMmRtX2hhcnRfZXZlbnRfbywgICAgICAgLy8gSEFSVCBldmVudCBmbGFnCi0gICAgb3V0cHV0IHR5cGVfc2NyMV9oZHVfaGFydHN0YXR1c19zICAgICAgICAgICAgICAgICAgIHBpcGUyZG1faGFydF9zdGF0dXNfbywgICAgICAvLyBIQVJUIHN0YXR1cwotCi0gICAgLy8gRE0gPC0+IFBpcGVsaW5lOiBQcm9ncmFtIEJ1ZmZlciAtIEhBUlQgaW5zdHJ1Y3Rpb24gZXhlY3V0aW9uIGkvZgotICAgIG91dHB1dCBsb2dpYyBbU0NSMV9IRFVfUEJVRl9BRERSX1dJRFRILTE6MF0gICAgICAgICBwaXBlMmRtX3BidWZfYWRkcl9vLCAgICAgICAgLy8gUHJvZ3JhbSBCdWZmZXIgYWRkcmVzcwotICAgIGlucHV0ICBsb2dpYyBbU0NSMV9IRFVfQ09SRV9JTlNUUl9XSURUSC0xOjBdICAgICAgICBkbTJwaXBlX3BidWZfaW5zdHJfaSwgICAgICAgLy8gUHJvZ3JhbSBCdWZmZXIgaW5zdHJ1Y3Rpb24KLQotICAgIC8vIERNIDwtPiBQaXBlbGluZTogSEFSVCBBYnN0cmFjdCBEYXRhIHJlZ3MgaS9mCi0gICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUyZG1fZHJlZ19yZXFfbywgICAgICAgICAvLyBBYnN0cmFjdCBEYXRhIFJlZ2lzdGVyIHJlcXVlc3QKLSAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZTJkbV9kcmVnX3dyX28sICAgICAgICAgIC8vIEFic3RyYWN0IERhdGEgUmVnaXN0ZXIgd3JpdGUKLSAgICBvdXRwdXQgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgcGlwZTJkbV9kcmVnX3dkYXRhX28sICAgICAgIC8vIEFic3RyYWN0IERhdGEgUmVnaXN0ZXIgd3JpdGUgZGF0YQotICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbTJwaXBlX2RyZWdfcmVzcF9pLCAgICAgICAgLy8gQWJzdHJhY3QgRGF0YSBSZWdpc3RlciByZXNwb25zZQotICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbTJwaXBlX2RyZWdfZmFpbF9pLCAgICAgICAgLy8gQWJzdHJhY3QgRGF0YSBSZWdpc3RlciBmYWlsIC0gcG9zc2libHkgbm90IG5lZWRlZD8KLSAgICBpbnB1dCAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgZG0ycGlwZV9kcmVnX3JkYXRhX2ksICAgICAgIC8vIEFic3RyYWN0IERhdGEgUmVnaXN0ZXIgcmVhZCBkYXRhCi0KLSAgICAvLyBETSA8LT4gUGlwZWxpbmc6IFBDIGkvZgotICAgIG91dHB1dCBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICBwaXBlMmRtX3BjX3NhbXBsZV9vLCAgICAgICAgLy8gQ3VycmVudCBQQyBmb3Igc2FtcGxpbmcKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi0gICAgLy8gSVJRCi1gaWZkZWYgU0NSMV9JUElDX0VOCi0gICAgaW5wdXQgICBsb2dpYyBbU0NSMV9JUlFfTElORVNfTlVNLTE6MF0gICAgICAgICAgICAgIHNvYzJwaXBlX2lycV9saW5lc19pLCAgICAgICAvLyBFeHRlcm5hbCBpbnRlcnJ1cHQgcmVxdWVzdCBsaW5lcwotYGVsc2UgLy8gU0NSMV9JUElDX0VOCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvYzJwaXBlX2lycV9leHRfaSwgICAgICAgICAvLyBFeHRlcm5hbCBpbnRlcnJ1cHQgcmVxdWVzdAotYGVuZGlmIC8vIFNDUjFfSVBJQ19FTgotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2MycGlwZV9pcnFfc29mdF9pLCAgICAgICAgLy8gU29mdHdhcmUgZ2VuZXJhdGVkIGludGVycnVwdCByZXF1ZXN0Ci0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvYzJwaXBlX2lycV9tdGltZXJfaSwgICAgICAvLyBNYWNoaW5lIHRpbWVyIGludGVycnVwdCByZXF1ZXN0Ci0KLSAgICAvLyBNZW1vcnktbWFwcGVkIGV4dGVybmFsIHRpbWVyCi0gICAgaW5wdXQgICBsb2dpYyBbNjM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvYzJwaXBlX210aW1lcl92YWxfaSwgICAgICAvLyBNYWNoaW5lIHRpbWVyIHZhbHVlCi0KLWBpZmRlZiBTQ1IxX0NMS0NUUkxfRU4KLSAgICAvLyBDTEtfQ1RSTCBpbnRlcmZhY2UKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZTJjbGtjdGxfc2xlZXBfcmVxX28sICAgIC8vIENMSyBkaXNhYmxlIHJlcXVlc3QgdG8gQ0xLIGdhdGluZyBjaXJjdWl0Ci0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUyY2xrY3RsX3dha2VfcmVxX28sICAgICAvLyBDTEsgZW5hYmxlIHJlcXVlc3QgdG8gQ0xLIGdhdGluZyBjaXJjdWl0Ci0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsa2N0bDJwaXBlX2Nsa19hbHdfb25faSwgICAvLyBOb3QgZ2F0ZWQgQ0xLCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsa2N0bDJwaXBlX2Nsa19kYmdjX2ksICAgICAvLyBDTEsgZm9yIEhEVSAobm90IGdhdGVkIGZvciBub3cpCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsa2N0bDJwaXBlX2Nsa19lbl9pLCAgICAgICAvLyBDTEsgZW5hYmxlZCBmbGFnCi1gZW5kaWYgLy8gU0NSMV9DTEtDVFJMX0VOCi0KLSAgICAvLyBGdXNlCi0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgIHNvYzJwaXBlX2Z1c2VfbWhhcnRpZF9pICAgICAvLyBGdXNlIE1IQVJUSUQgdmFsdWUKLSk7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgc2lnbmFscyBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFBpcGVsaW5lIGNvbnRyb2wKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgY3Vycl9wYzsgICAgICAgICAgICAgICAgLy8gQ3VycmVudCBQQwotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICBuZXh0X3BjOyAgICAgICAgICAgICAgICAvLyBJcyB3cml0dGVuIHRvIE1FUEMgb24gaW50ZXJydXB0IHRyYXAKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3BjX3JlcTsgICAgICAgICAgICAgLy8gTmV3IFBDIHJlcXVlc3QgKGp1bXBzLCBicmFuY2hlcywgdHJhcHMgZXRjKQotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICBuZXdfcGM7ICAgICAgICAgICAgICAgICAvLyBOZXcgUEMKLQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wX2ZldGNoOyAgICAgICAgICAgICAvLyBTdG9wIElGVQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHVfZXhjX3JlcTsgICAgICAgICAgICAvLyBFeGNlcHRpb24gcmVxdWVzdAotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmtwdDsgICAgICAgICAgICAgICAgICAvLyBCcmVha3BvaW50IChzdykgb24gY3VycmVudCBpbnN0cnVjdGlvbgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHVfaW5pdF9wYzsgICAgICAgICAgICAvLyBSZXNldCBleGl0Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdmaV9ydW4yaGFsdDsgICAgICAgICAgIC8vIFRyYW5zaXRpb24gdG8gV0ZJIGhhbHRlZCBzdGF0ZQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0cmV0OyAgICAgICAgICAgICAgICAvLyBJbnN0cnVjdGlvbiByZXRpcmVtZW50ICh3aXRoIG9yIHdpdGhvdXQgZXhjZXB0aW9uKQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0cmV0X25leGM7ICAgICAgICAgICAvLyBJbnN0cnVjdGlvbiByZXRpcmVtZW50ICh3aXRob3V0IGV4Y2VwdGlvbikKLWBpZmRlZiBTQ1IxX0lQSUNfRU4KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBpYzJjc3JfaXJxOyAgICAgICAgICAgLy8gSVJRIHJlcXVlc3QgZnJvbSBJUElDCi1gZW5kaWYgLy8gU0NSMV9JUElDX0VOCi1gaWZkZWYgU0NSMV9URFVfRU4KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJrcHRfaHc7ICAgICAgICAgICAgICAgLy8gSGFyZHdhcmUgYnJlYWtwb2ludCBvbiBjdXJyZW50IGluc3RydWN0aW9uCi1gZW5kaWYgLy8gU0NSMV9URFVfRU4KLWBpZmRlZiBTQ1IxX0NMS0NUUkxfRU4KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1lbV90eG5zX3BlbmRpbmc7ICAgICAgLy8gVGhlcmUgYXJlIHBlbmRpbmcgaW1lbSB0cmFuc2FjdGlvbnMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ZpX2hhbHRlZDsgICAgICAgICAgICAgLy8gV0ZJIGhhbHRlZCBzdGF0ZQotYGVuZGlmIC8vIFNDUjFfQ0xLQ1RSTF9FTgotCi0vLyBJRlUgPC0+IElEVQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZnUyaWR1X3ZkOyAgICAgICAgICAgICAvLyBJRlUgcmVxdWVzdAotbG9naWMgW2BTQ1IxX0lNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICBpZnUyaWR1X2luc3RyOyAgICAgICAgICAvLyBJRlUgaW5zdHJ1Y3Rpb24KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZ1MmlkdV9pbWVtX2VycjsgICAgICAgLy8gSUZVIGluc3RydWN0aW9uIGFjY2VzcyBmYXVsdAotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZnUyaWR1X2Vycl9ydmlfaGk7ICAgICAvLyAxIC0gaW1lbSBmYXVsdCB3aGVuIHRyeWluZyB0byBmZXRjaCBzZWNvbmQgaGFsZiBvZiBhbiB1bmFsaWduZWQgUlZJIGluc3RydWN0aW9uCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJpZnVfcmR5OyAgICAgICAgICAgIC8vIElEVSByZWFkeSBmb3IgbmV3IGRhdGEKLQotLy8gSURVIDwtPiBFWFUKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9yZXE7ICAgICAgICAgICAgLy8gSURVIHJlcXVlc3QKLXR5cGVfc2NyMV9leHVfY21kX3MgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWQ7ICAgICAgICAgICAgLy8gSURVIGNvbW1hbmQgKHNlZSBzY3IxX3Jpc2N2X2lzYV9kZWNvZGluZy5zdmgpCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMTsgICAgICAgIC8vIEluc3RydWN0aW9uIHVzZXMgcnMxCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMjsgICAgICAgIC8vIEluc3RydWN0aW9uIHVzZXMgcnMyCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JkOyAgICAgICAgIC8vIEluc3RydWN0aW9uIHVzZXMgcmQKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfaW1tOyAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gdXNlcyBpbW1lZGlhdGUKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MmlkdV9yZHk7ICAgICAgICAgICAgLy8gRVhVIHJlYWR5IGZvciBuZXcgZGF0YQotCi0vLyBFWFUgPC0+IE1QUkYKLWxvZ2ljIFtgU0NSMV9NUFJGX0FXSURUSC0xOjBdICAgICAgICAgICAgICAgZXh1Mm1wcmZfcnMxX2FkZHI7ICAgICAgLy8gTVBSRiByczEgcmVhZCBhZGRyZXNzCi1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgIG1wcmYyZXh1X3JzMV9kYXRhOyAgICAgIC8vIE1QUkYgcnMxIHJlYWQgZGF0YQotbG9naWMgW2BTQ1IxX01QUkZfQVdJRFRILTE6MF0gICAgICAgICAgICAgICBleHUybXByZl9yczJfYWRkcjsgICAgICAvLyBNUFJGIHJzMiByZWFkIGFkZHJlc3MKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgbXByZjJleHVfcnMyX2RhdGE7ICAgICAgLy8gTVBSRiByczIgcmVhZCBkYXRhCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJtcHJmX3dfcmVxOyAgICAgICAgIC8vIE1QUkYgd3JpdGUgcmVxdWVzdAotbG9naWMgW2BTQ1IxX01QUkZfQVdJRFRILTE6MF0gICAgICAgICAgICAgICBleHUybXByZl9yZF9hZGRyOyAgICAgICAvLyBNUFJGIHJkIHdyaXRlIGFkZHJlc3MKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgZXh1Mm1wcmZfcmRfZGF0YTsgICAgICAgLy8gTVBSRiByZCB3cml0ZSBkYXRhCi0KLS8vIEVYVSA8LT4gQ1NSCi1sb2dpYyBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdICAgICAgICAgICAgIGV4dTJjc3JfcndfYWRkcjsgICAgICAgIC8vIENTUiByZWFkL3dyaXRlIGFkZHJlc3MKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MmNzcl9yX3JlcTsgICAgICAgICAgLy8gQ1NSIHJlYWQgcmVxdWVzdAotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICBjc3IyZXh1X3JfZGF0YTsgICAgICAgICAvLyBDU1IgcmVhZCBkYXRhCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJjc3Jfd19yZXE7ICAgICAgICAgIC8vIENTUiB3cml0ZSByZXF1ZXN0Ci10eXBlX3NjcjFfY3NyX2NtZF9zZWxfZSAgICAgICAgICAgICAgICAgICAgIGV4dTJjc3Jfd19jbWQ7ICAgICAgICAgIC8vIENTUiB3cml0ZSBjb21tYW5kCi1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgIGV4dTJjc3Jfd19kYXRhOyAgICAgICAgIC8vIENTUiB3cml0ZSBkYXRhCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJleHVfcndfZXhjOyAgICAgICAgIC8vIENTUiByZWFkL3dyaXRlIGFjY2VzcyBleGNlcHRpb24KLQotLy8gRVhVIDwtPiBDU1IgZXZlbnQgaW50ZXJmYWNlCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJjc3JfdGFrZV9pcnE7ICAgICAgIC8vIFRha2UgSVJRIHRyYXAKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MmNzcl90YWtlX2V4YzsgICAgICAgLy8gVGFrZSBleGNlcHRpb24gdHJhcAotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUyY3NyX21yZXRfdXBkYXRlOyAgICAvLyBNUkVUIHVwZGF0ZSBDU1IKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MmNzcl9tcmV0X2luc3RyOyAgICAgLy8gTVJFVCBpbnN0cnVjdGlvbgotbG9naWMgW1NDUjFfRVhDX0NPREVfV0lEVEhfRS0xOjBdICAgICAgICAgICBleHUyY3NyX2V4Y19jb2RlOyAgICAgICAvLyBFeGNlcHRpb24gY29kZSAoc2VlIHNjcjFfYXJjaF90eXBlcy5zdmgpCi1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgIGV4dTJjc3JfdHJhcF92YWw7ICAgICAgIC8vIFRyYXAgdmFsdWUKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgY3NyMmV4dV9uZXdfcGM7ICAgICAgICAgLy8gRXhjZXB0aW9uL0lSUS9NUkVUIG5ldyBQQwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IyZXh1X2lycTsgICAgICAgICAgICAvLyBJUlEgcmVxdWVzdAotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IyZXh1X2lwX2llOyAgICAgICAgICAvLyBTb21lIElSUSBwZW5kaW5nIGFuZCBsb2NhbGx5IGVuYWJsZWQKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMmV4dV9tc3RhdHVzX21pZV91cDsgLy8gTVNUQVRVUyBvciBNSUUgdXBkYXRlIGluIHRoZSBjdXJyZW50IGN5Y2xlCi0KLWBpZmRlZiBTQ1IxX0lQSUNfRU4KLS8vIENTUiA8LT4gSVBJQwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IyaXBpY19yX3JlcTsgICAgICAgICAvLyBJUElDIHJlYWQgcmVxdWVzdAotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IyaXBpY193X3JlcTsgICAgICAgICAvLyBJUElDIHdyaXRlIHJlcXVlc3QKLWxvZ2ljIFsyOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMmlwaWNfYWRkcjsgICAgICAgICAgLy8gSVBJQyBhZGRyZXNzCi1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgIGNzcjJpcGljX3dkYXRhOyAgICAgICAgIC8vIElQSUMgd3JpdGUgZGF0YQotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICBpcGljMmNzcl9yZGF0YTsgICAgICAgICAvLyBJUElDIHJlYWQgZGF0YQotYGVuZGlmIC8vIFNDUjFfSVBJQ19FTgotCi1gaWZkZWYgU0NSMV9URFVfRU4KLS8vIENTUiA8LT4gVERVCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJ0ZHVfcmVxOyAgICAgICAgICAgLy8gUmVxdWVzdCB0byBURFUKLXR5cGVfc2NyMV9jc3JfY21kX3NlbF9lICAgICAgICAgICAgICAgICAgICAgY3NyMnRkdV9jbWQ7ICAgICAgICAgICAvLyBURFUgY29tbWFuZAotbG9naWMgW1NDUjFfQ1NSX0FERFJfVERVX09GRlNfVy0xOjBdICAgICAgICBjc3IydGR1X2FkZHI7ICAgICAgICAgIC8vIFREVSBhZGRyZXNzCi1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgIGNzcjJ0ZHVfd2RhdGE7ICAgICAgICAgLy8gVERVIHdyaXRlIGRhdGEKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YTsgICAgICAgICAvLyBURFUgcmVhZCBkYXRhCi10eXBlX3NjcjFfY3NyX3Jlc3BfZSAgICAgICAgICAgICAgICAgICAgICAgIHRkdTJjc3JfcmVzcDsgICAgICAgICAgLy8gVERVIHJlc3BvbnNlCi0gYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFF1YWxpZmllZCBURFUgaW5wdXQgc2lnbmFscyBmcm9tIHBpcGVfcnN0X24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzZXQgZG9tYWluOgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IydGR1X3JlcV9xbGZ5OyAgICAgIC8vICAgICBSZXF1ZXN0IHRvIFREVQotIGBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi0vLyBFWFUvTFNVIDwtPiBURFUKLXR5cGVfc2NyMV9icmttX2luc3RyX21vbl9zICAgICAgICAgICAgICAgICAgZXh1MnRkdV9pX21vbjsgICAgICAgICAvLyBJbnN0cnVjdGlvbiBtb25pdG9yCi10eXBlX3NjcjFfYnJrbV9sc3VfbW9uX3MgICAgICAgICAgICAgICAgICAgIGxzdTJ0ZHVfZF9tb247ICAgICAgICAgLy8gRGF0YSBtb25pdG9yCi1sb2dpYyBbU0NSMV9URFVfQUxMVFJJR19OVU0tMTowXSAgICAgICAgICAgIHRkdTJleHVfaV9tYXRjaDsgICAgICAgLy8gSW5zdHJ1Y3Rpb24gYnJlYWtwb2ludChzKSBtYXRjaAotbG9naWMgW1NDUjFfVERVX01UUklHX05VTS0xOjBdICAgICAgICAgICAgICB0ZHUybHN1X2RfbWF0Y2g7ICAgICAgIC8vIERhdGEgYnJlYWtwb2ludChzKSBtYXRjaAotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZHUyZXh1X2lfeF9yZXE7ICAgICAgIC8vIEluc3RydWN0aW9uIGJyZWFrcG9pbnQgZXhjZXB0aW9uCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkdTJsc3VfaV94X3JlcTsgICAgICAgLy8gSW5zdHJ1Y3Rpb24gYnJlYWtwb2ludCBleGNlcHRpb24KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmxzdV9kX3hfcmVxOyAgICAgICAvLyBEYXRhIGJyZWFrcG9pbnQgZXhjZXB0aW9uCi1sb2dpYyBbU0NSMV9URFVfQUxMVFJJR19OVU0tMTowXSAgICAgICAgICAgIGV4dTJ0ZHVfYnBfcmV0aXJlOyAgICAgLy8gSW5zdHJ1Y3Rpb24gd2l0aCBicmVha3BvaW50IGZsYWcgcmV0aXJlCi0gYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFF1YWxpZmllZCBURFUgaW5wdXQgc2lnbmFscyBmcm9tIHBpcGVfcnN0X24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzZXQgZG9tYWluOgotdHlwZV9zY3IxX2Jya21faW5zdHJfbW9uX3MgICAgICAgICAgICAgICAgICBleHUydGR1X2lfbW9uX3FsZnk7ICAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gbW9uaXRvcgotdHlwZV9zY3IxX2Jya21fbHN1X21vbl9zICAgICAgICAgICAgICAgICAgICBsc3UydGR1X2RfbW9uX3FsZnk7ICAgICAgICAgLy8gRGF0YSBtb25pdG9yCi1sb2dpYyBbU0NSMV9URFVfQUxMVFJJR19OVU0tMTowXSAgICAgICAgICAgIGV4dTJ0ZHVfYnBfcmV0aXJlX3FsZnk7ICAgICAvLyBJbnN0cnVjdGlvbiB3aXRoIGJyZWFrcG9pbnQgZmxhZyByZXRpcmUKLSBgZW5kaWYgLy8gU0NSMV9EQkdfRU4KLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotCi1gaWZkZWYgU0NSMV9EQkdfRU4KLS8vIERlYnVnIHNpZ25hbHM6Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoX3BidWY7ICAgICAgICAgICAgIC8vIEZldGNoIGluc3RydWN0aW9ucyBwcm92aWRlZCBieSBQcm9ncmFtIEJ1ZmZlciAodmlhIEhEVSkKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMmhkdV9yZXE7ICAgICAgICAgICAgLy8gUmVxdWVzdCB0byBIRFUKLXR5cGVfc2NyMV9jc3JfY21kX3NlbF9lICAgICAgICAgICAgICAgICAgICAgY3NyMmhkdV9jbWQ7ICAgICAgICAgICAgLy8gSERVIGNvbW1hbmQKLWxvZ2ljIFtTQ1IxX0hEVV9ERUJVR0NTUl9BRERSX1dJRFRILTE6MF0gICAgY3NyMmhkdV9hZGRyOyAgICAgICAgICAgLy8gSERVIGFkZHJlc3MKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgY3NyMmhkdV93ZGF0YTsgICAgICAgICAgLy8gSERVIHdyaXRlIGRhdGEKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgaGR1MmNzcl9yZGF0YTsgICAgICAgICAgLy8gSERVIHJlYWQgZGF0YQotdHlwZV9zY3IxX2Nzcl9yZXNwX2UgICAgICAgICAgICAgICAgICAgICAgICBoZHUyY3NyX3Jlc3A7ICAgICAgICAgICAvLyBIRFUgcmVzcG9uc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUXVhbGlmaWVkIEhEVSBpbnB1dCBzaWduYWxzIGZyb20gcGlwZV9yc3RfbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXNldCBkb21haW46Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJoZHVfcmVxX3FsZnk7ICAgICAgIC8vICAgICBSZXF1ZXN0IHRvIEhEVQotCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3YnJrX2RzYmw7ICAgICAgICAgICAgIC8vIERpc2FibGVzIFREVQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHVfaHdicmtfZHNibDsgICAgICAgICAvLyBEaXNhYmxlcyBURFUKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmhkdV9kbW9kZV9yZXE7ICAgICAgLy8gVERVIHJlcXVlc3RzIHRyYW5zaXRpb24gdG8gZGVidWcgbW9kZQotCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dV9ub19jb21taXQ7ICAgICAgICAgIC8vIEZvcmJpZCBpbnN0cnVjdGlvbiBjb21taXRtZW50Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dV9pcnFfZHNibDsgICAgICAgICAgIC8vIERpc2FibGUgSVJRCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dV9wY19hZHZtdF9kc2JsOyAgICAgIC8vIEZvcmJpZCBQQyBhZHZhbmNlbWVudAotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHVfZG1vZGVfc3N0ZXBfZW47ICAgICAvLyBFbmFibGUgc2luZ2xlLXN0ZXAKLQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYmdfaGFsdGVkOyAgICAgICAgICAgICAvLyBEZWJ1ZyBoYWx0ZWQgc3RhdGUKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJnX3J1bjJoYWx0OyAgICAgICAgICAgLy8gVHJhbnNpdGlvbiB0byBkZWJ1ZyBoYWx0ZWQgc3RhdGUKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJnX2hhbHQycnVuOyAgICAgICAgICAgLy8gVHJhbnNpdGlvbiB0byBydW4gc3RhdGUKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJnX3J1bl9zdGFydDsgICAgICAgICAgLy8gRmlyc3QgY3ljbGUgb2YgcnVuIHN0YXRlCi1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgIGRiZ19uZXdfcGM7ICAgICAgICAgICAgIC8vIE5ldyBQQyBhcyBzdGFydGluZyBwb2ludCBmb3IgSEFSVCBSZXN1bWUKLQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZnUyaGR1X3BidWZfcmR5OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHUyaWZ1X3BidWZfdmQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJpZnVfcGJ1Zl9lcnI7Ci1sb2dpYyBbU0NSMV9IRFVfQ09SRV9JTlNUUl9XSURUSC0xOjBdICAgICAgIGhkdTJpZnVfcGJ1Zl9pbnN0cjsKLQotLy8gUXVhbGlmaWVkIEhEVSBpbnB1dCBzaWduYWxzIGZyb20gcGlwZV9yc3RfbiByZXNldCBkb21haW46Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmdTJoZHVfcGJ1Zl9yZHlfcWxmeTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1X2J1c3lfcWxmeTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdHJldF9xbGZ5OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHVfaW5pdF9wY19xbGZ5OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHVfZXhjX3JlcV9xbGZ5OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmtwdF9xbGZ5OwotCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHVfYnVzeTsKLQotCi1gaWZuZGVmIFNDUjFfQ0xLQ1RSTF9FTgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlMmNsa2N0bF93YWtlX3JlcV9vOwotYGVuZGlmIC8vIFNDUjFfQ0xLQ1RSTF9FTgotCi0KLWFzc2lnbiBwaXBlX2RlYnVnID0ge2N1cnJfcGNbMzE6MF0sbmV3X3BjX3JlcSxzdG9wX2ZldGNoLCBleHVfZXhjX3JlcSxicmtwdCxleHVfaW5pdF9wYyx3ZmlfcnVuMmhhbHQsaW5zdHJldCwKLQkgICAgICAgICAgICAgaWZ1MmlkdV92ZCxpZHUyaWZ1X3JkeSxpZHUyZXh1X3JlcSxleHUyaWR1X3JkeSxleHUybXByZl93X3JlcSxleHUyY3NyX3JfcmVxLGNzcjJleHVfcndfZXhjLAotCSAgICAgICAgICAgICBleHUyY3NyX21yZXRfdXBkYXRlLGNzcjJleHVfaXJxLGNzcjJleHVfbXN0YXR1c19taWVfdXB9OwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBQaXBlbGluZSBsb2dpYwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1hc3NpZ24gc3RvcF9mZXRjaCAgID0gd2ZpX3J1bjJoYWx0Ci1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICAgICAgICAgICAgICAgICAgfCBmZXRjaF9wYnVmCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLSAgICAgICAgICAgICAgICAgICAgOwotCi1gaWZkZWYgU0NSMV9DTEtDVFJMX0VOCi1hc3NpZ24gcGlwZTJjbGtjdGxfc2xlZXBfcmVxX28gPSB3ZmlfaGFsdGVkICYgfmltZW1fdHhuc19wZW5kaW5nOwotYXNzaWduIHBpcGUyY2xrY3RsX3dha2VfcmVxX28gID0gY3NyMmV4dV9pcF9pZQotYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgICAgICAgICAgICAgICAgIHwgZG0ycGlwZV9hY3RpdmVfaQotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0gICAgICAgICAgICAgICAgICAgIDsKLWBlbmRpZiAvLyBTQ1IxX0NMS0NUUkxfRU4KLQotYGlmZGVmIFNDUjFfREJHX0VOCi1hc3NpZ24gcGlwZTJkbV9wY19zYW1wbGVfbyA9IGN1cnJfcGM7Ci1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBJbnN0cnVjdGlvbiBmZXRjaCB1bml0Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXNjcjFfcGlwZV9pZnUgaV9waXBlX2lmdSAoCi0gICAgLnJzdF9uICAgICAgICAgICAgICAgICAgICAocGlwZV9yc3RfbiAgICAgICAgICksCi0gICAgLmNsayAgICAgICAgICAgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICAgICksCi0KLSAgICAvLyBJbnN0cnVjdGlvbiBtZW1vcnkgaW50ZXJmYWNlCi0gICAgLmltZW0yaWZ1X3JlcV9hY2tfaSAgICAgICAoaW1lbTJwaXBlX3JlcV9hY2tfaSksCi0gICAgLmlmdTJpbWVtX3JlcV9vICAgICAgICAgICAocGlwZTJpbWVtX3JlcV9vICAgICksCi0gICAgLmlmdTJpbWVtX2NtZF9vICAgICAgICAgICAocGlwZTJpbWVtX2NtZF9vICAgICksCi0gICAgLmlmdTJpbWVtX2FkZHJfbyAgICAgICAgICAocGlwZTJpbWVtX2FkZHJfbyAgICksCi0gICAgLmltZW0yaWZ1X3JkYXRhX2kgICAgICAgICAoaW1lbTJwaXBlX3JkYXRhX2kgICksCi0gICAgLmltZW0yaWZ1X3Jlc3BfaSAgICAgICAgICAoaW1lbTJwaXBlX3Jlc3BfaSAgICksCi0KLSAgICAvLyBOZXcgUEMgaW50ZXJmYWNlCi0gICAgLmV4dTJpZnVfcGNfbmV3X3JlcV9pICAgICAobmV3X3BjX3JlcSAgICAgICAgICksCi0gICAgLmV4dTJpZnVfcGNfbmV3X2kgICAgICAgICAobmV3X3BjICAgICAgICAgICAgICksCi0gICAgLnBpcGUyaWZ1X3N0b3BfZmV0Y2hfaSAgICAoc3RvcF9mZXRjaCAgICAgICAgICksCi0KLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgIC8vIElGVSA8LT4gSERVIFByb2dyYW0gQnVmZmVyIGludGVyZmFjZQotICAgIC5oZHUyaWZ1X3BidWZfZmV0Y2hfaSAgICAgKGZldGNoX3BidWYgICAgICAgICApLAotICAgIC5pZnUyaGR1X3BidWZfcmR5X28gICAgICAgKGlmdTJoZHVfcGJ1Zl9yZHkgICApLAotICAgIC5oZHUyaWZ1X3BidWZfdmRfaSAgICAgICAgKGhkdTJpZnVfcGJ1Zl92ZCAgICApLAotICAgIC5oZHUyaWZ1X3BidWZfZXJyX2kgICAgICAgKGhkdTJpZnVfcGJ1Zl9lcnIgICApLAotICAgIC5oZHUyaWZ1X3BidWZfaW5zdHJfaSAgICAgKGhkdTJpZnVfcGJ1Zl9pbnN0ciApLAotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi1gaWZkZWYgU0NSMV9DTEtDVFJMX0VOCi0gICAgLmlmdTJwaXBlX2ltZW1fdHhuc19wbmRfbyAoaW1lbV90eG5zX3BlbmRpbmcgICksCi1gZW5kaWYgLy8gU0NSMV9DTEtDVFJMX0VOCi0KLSAgICAvLyBJRlUgPC0+IElEVSBpbnRlcmZhY2UKLSAgICAuaWR1MmlmdV9yZHlfaSAgICAgICAgICAgIChpZHUyaWZ1X3JkeSAgICAgICAgKSwKLSAgICAuaWZ1MmlkdV9pbnN0cl9vICAgICAgICAgIChpZnUyaWR1X2luc3RyICAgICAgKSwKLSAgICAuaWZ1MmlkdV9pbWVtX2Vycl9vICAgICAgIChpZnUyaWR1X2ltZW1fZXJyICAgKSwKLSAgICAuaWZ1MmlkdV9lcnJfcnZpX2hpX28gICAgIChpZnUyaWR1X2Vycl9ydmlfaGkgKSwKLSAgICAuaWZ1MmlkdV92ZF9vICAgICAgICAgICAgIChpZnUyaWR1X3ZkICAgICAgICAgKQotKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBJbnN0cnVjdGlvbiBkZWNvZGUgdW5pdAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zY3IxX3BpcGVfaWR1IGlfcGlwZV9pZHUgKAotYGlmZGVmIFNDUjFfVFJHVF9TSU1VTEFUSU9OCi0gICAgLnJzdF9uICAgICAgICAgICAgICAgICAgKHBpcGVfcnN0X24gICAgICAgICksCi0gICAgLmNsayAgICAgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICksCi1gZW5kaWYgLy8gU0NSMV9UUkdUX1NJTVVMQVRJT04KLSAgICAuaWR1MmlmdV9yZHlfbyAgICAgICAgICAoaWR1MmlmdV9yZHkgICAgICAgKSwKLSAgICAuaWZ1MmlkdV9pbnN0cl9pICAgICAgICAoaWZ1MmlkdV9pbnN0ciAgICAgKSwKLSAgICAuaWZ1MmlkdV9pbWVtX2Vycl9pICAgICAoaWZ1MmlkdV9pbWVtX2VyciAgKSwKLSAgICAuaWZ1MmlkdV9lcnJfcnZpX2hpX2kgICAoaWZ1MmlkdV9lcnJfcnZpX2hpKSwKLSAgICAuaWZ1MmlkdV92ZF9pICAgICAgICAgICAoaWZ1MmlkdV92ZCAgICAgICAgKSwKLQotICAgIC5pZHUyZXh1X3JlcV9vICAgICAgICAgIChpZHUyZXh1X3JlcSAgICAgICApLAotICAgIC5pZHUyZXh1X2NtZF9vICAgICAgICAgIChpZHUyZXh1X2NtZCAgICAgICApLAotICAgIC5pZHUyZXh1X3VzZV9yczFfbyAgICAgIChpZHUyZXh1X3VzZV9yczEgICApLAotICAgIC5pZHUyZXh1X3VzZV9yczJfbyAgICAgIChpZHUyZXh1X3VzZV9yczIgICApLAotICAgIC5pZHUyZXh1X3VzZV9yZF9vICAgICAgIChpZHUyZXh1X3VzZV9yZCAgICApLAotICAgIC5pZHUyZXh1X3VzZV9pbW1fbyAgICAgIChpZHUyZXh1X3VzZV9pbW0gICApLAotICAgIC5leHUyaWR1X3JkeV9pICAgICAgICAgIChleHUyaWR1X3JkeSAgICAgICApCi0pOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEV4ZWN1dGlvbiB1bml0Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXNjcjFfcGlwZV9leHUgaV9waXBlX2V4dSAoCi0gICAgLnJzdF9uICAgICAgICAgICAgICAgICAgICAgICAgICAocGlwZV9yc3RfbiAgICAgICAgICAgICAgKSwKLSAgICAuY2xrICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICAgICAgICApLAotYGlmZGVmIFNDUjFfQ0xLQ1RSTF9FTgotICAgIC5jbGtfYWx3X29uICAgICAgICAgICAgICAgICAgICAgKGNsa2N0bDJwaXBlX2Nsa19hbHdfb25faSksCi0gICAgLmNsa19waXBlX2VuICAgICAgICAgICAgICAgICAgICAoY2xrY3RsMnBpcGVfY2xrX2VuX2kpLAotYGVuZGlmIC8vIFNDUjFfQ0xLQ1RSTF9FTgotCi0gICAgLy8gSURVIDwtPiBFWFUgaW50ZXJmYWNlCi0gICAgLmlkdTJleHVfcmVxX2kgICAgICAgICAgICAgICAgICAoaWR1MmV4dV9yZXEgICAgICAgICAgICAgKSwKLSAgICAuZXh1MmlkdV9yZHlfbyAgICAgICAgICAgICAgICAgIChleHUyaWR1X3JkeSAgICAgICAgICAgICApLAotICAgIC5pZHUyZXh1X2NtZF9pICAgICAgICAgICAgICAgICAgKGlkdTJleHVfY21kICAgICAgICAgICAgICksCi0gICAgLmlkdTJleHVfdXNlX3JzMV9pICAgICAgICAgICAgICAoaWR1MmV4dV91c2VfcnMxICAgICAgICAgKSwKLSAgICAuaWR1MmV4dV91c2VfcnMyX2kgICAgICAgICAgICAgIChpZHUyZXh1X3VzZV9yczIgICAgICAgICApLAotYGlmbmRlZiBTQ1IxX05PX0VYRV9TVEFHRQotICAgIC5pZHUyZXh1X3VzZV9yZF9pICAgICAgICAgICAgICAgKGlkdTJleHVfdXNlX3JkICAgICAgICAgICksCi0gICAgLmlkdTJleHVfdXNlX2ltbV9pICAgICAgICAgICAgICAoaWR1MmV4dV91c2VfaW1tICAgICAgICAgKSwKLWBlbmRpZiAvLyBTQ1IxX05PX0VYRV9TVEFHRQotCi0gICAgLy8gRVhVIDwtPiBNUFJGIGludGVyZmFjZQotICAgIC5leHUybXByZl9yczFfYWRkcl9vICAgICAgICAgICAgKGV4dTJtcHJmX3JzMV9hZGRyICAgICAgICksCi0gICAgLm1wcmYyZXh1X3JzMV9kYXRhX2kgICAgICAgICAgICAobXByZjJleHVfcnMxX2RhdGEgICAgICAgKSwKLSAgICAuZXh1Mm1wcmZfcnMyX2FkZHJfbyAgICAgICAgICAgIChleHUybXByZl9yczJfYWRkciAgICAgICApLAotICAgIC5tcHJmMmV4dV9yczJfZGF0YV9pICAgICAgICAgICAgKG1wcmYyZXh1X3JzMl9kYXRhICAgICAgICksCi0gICAgLmV4dTJtcHJmX3dfcmVxX28gICAgICAgICAgICAgICAoZXh1Mm1wcmZfd19yZXEgICAgICAgICAgKSwKLSAgICAuZXh1Mm1wcmZfcmRfYWRkcl9vICAgICAgICAgICAgIChleHUybXByZl9yZF9hZGRyICAgICAgICApLAotICAgIC5leHUybXByZl9yZF9kYXRhX28gICAgICAgICAgICAgKGV4dTJtcHJmX3JkX2RhdGEgICAgICAgICksCi0KLSAgICAvLyBFWFUgPC0+IENTUiByZWFkL3dyaXRlIGludGVyZmFjZQotICAgIC5leHUyY3NyX3J3X2FkZHJfbyAgICAgICAgICAgICAgKGV4dTJjc3JfcndfYWRkciAgICAgICAgICksCi0gICAgLmV4dTJjc3Jfcl9yZXFfbyAgICAgICAgICAgICAgICAoZXh1MmNzcl9yX3JlcSAgICAgICAgICAgKSwKLSAgICAuY3NyMmV4dV9yX2RhdGFfaSAgICAgICAgICAgICAgIChjc3IyZXh1X3JfZGF0YSAgICAgICAgICApLAotICAgIC5leHUyY3NyX3dfcmVxX28gICAgICAgICAgICAgICAgKGV4dTJjc3Jfd19yZXEgICAgICAgICAgICksCi0gICAgLmV4dTJjc3Jfd19jbWRfbyAgICAgICAgICAgICAgICAoZXh1MmNzcl93X2NtZCAgICAgICAgICAgKSwKLSAgICAuZXh1MmNzcl93X2RhdGFfbyAgICAgICAgICAgICAgIChleHUyY3NyX3dfZGF0YSAgICAgICAgICApLAotICAgIC5jc3IyZXh1X3J3X2V4Y19pICAgICAgICAgICAgICAgKGNzcjJleHVfcndfZXhjICAgICAgICAgICksCi0KLSAgICAvLyBFWFUgPC0+IENTUiBldmVudCBpbnRlcmZhY2UKLSAgICAuZXh1MmNzcl90YWtlX2lycV9vICAgICAgICAgICAgIChleHUyY3NyX3Rha2VfaXJxICAgICAgICApLAotICAgIC5leHUyY3NyX3Rha2VfZXhjX28gICAgICAgICAgICAgKGV4dTJjc3JfdGFrZV9leGMgICAgICAgICksCi0gICAgLmV4dTJjc3JfbXJldF91cGRhdGVfbyAgICAgICAgICAoZXh1MmNzcl9tcmV0X3VwZGF0ZSAgICAgKSwKLSAgICAuZXh1MmNzcl9tcmV0X2luc3RyX28gICAgICAgICAgIChleHUyY3NyX21yZXRfaW5zdHIgICAgICApLAotICAgIC5leHUyY3NyX2V4Y19jb2RlX28gICAgICAgICAgICAgKGV4dTJjc3JfZXhjX2NvZGUgICAgICAgICksCi0gICAgLmV4dTJjc3JfdHJhcF92YWxfbyAgICAgICAgICAgICAoZXh1MmNzcl90cmFwX3ZhbCAgICAgICAgKSwKLSAgICAuY3NyMmV4dV9uZXdfcGNfaSAgICAgICAgICAgICAgIChjc3IyZXh1X25ld19wYyAgICAgICAgICApLAotICAgIC5jc3IyZXh1X2lycV9pICAgICAgICAgICAgICAgICAgKGNzcjJleHVfaXJxICAgICAgICAgICAgICksCi0gICAgLmNzcjJleHVfaXBfaWVfaSAgICAgICAgICAgICAgICAoY3NyMmV4dV9pcF9pZSAgICAgICAgICAgKSwKLSAgICAuY3NyMmV4dV9tc3RhdHVzX21pZV91cF9pICAgICAgIChjc3IyZXh1X21zdGF0dXNfbWllX3VwICApLAotCi0gICAgLy8gRVhVIDwtPiBETUVNIGludGVyZmFjZQotICAgIC5leHUyZG1lbV9yZXFfbyAgICAgICAgICAgICAgICAgKHBpcGUyZG1lbV9yZXFfbyAgICAgICAgICksCi0gICAgLmV4dTJkbWVtX2NtZF9vICAgICAgICAgICAgICAgICAocGlwZTJkbWVtX2NtZF9vICAgICAgICAgKSwKLSAgICAuZXh1MmRtZW1fd2lkdGhfbyAgICAgICAgICAgICAgIChwaXBlMmRtZW1fd2lkdGhfbyAgICAgICApLAotICAgIC5leHUyZG1lbV9hZGRyX28gICAgICAgICAgICAgICAgKHBpcGUyZG1lbV9hZGRyX28gICAgICAgICksCi0gICAgLmV4dTJkbWVtX3dkYXRhX28gICAgICAgICAgICAgICAocGlwZTJkbWVtX3dkYXRhX28gICAgICAgKSwKLSAgICAuZG1lbTJleHVfcmVxX2Fja19pICAgICAgICAgICAgIChkbWVtMnBpcGVfcmVxX2Fja19pICAgICApLAotICAgIC5kbWVtMmV4dV9yZGF0YV9pICAgICAgICAgICAgICAgKGRtZW0ycGlwZV9yZGF0YV9pICAgICAgICksCi0gICAgLmRtZW0yZXh1X3Jlc3BfaSAgICAgICAgICAgICAgICAoZG1lbTJwaXBlX3Jlc3BfaSAgICAgICAgKSwKLQotYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgLy8gRVhVIDwtPiBIRFUgaW50ZXJmYWNlCi0gICAgLmhkdTJleHVfbm9fY29tbWl0X2kgICAgICAgICAgICAoZXh1X25vX2NvbW1pdCAgICAgICAgICAgKSwKLSAgICAuaGR1MmV4dV9pcnFfZHNibF9pICAgICAgICAgICAgIChleHVfaXJxX2RzYmwgICAgICAgICAgICApLAotICAgIC5oZHUyZXh1X3BjX2Fkdm10X2RzYmxfaSAgICAgICAgKGV4dV9wY19hZHZtdF9kc2JsICAgICAgICksCi0gICAgLmhkdTJleHVfZG1vZGVfc3N0ZXBfZW5faSAgICAgICAoZXh1X2Rtb2RlX3NzdGVwX2VuICAgICAgKSwKLSAgICAuaGR1MmV4dV9wYnVmX2ZldGNoX2kgICAgICAgICAgIChmZXRjaF9wYnVmICAgICAgICAgICAgICApLAotICAgIC5oZHUyZXh1X2RiZ19oYWx0ZWRfaSAgICAgICAgICAgKGRiZ19oYWx0ZWQgICAgICAgICAgICAgICksCi0gICAgLmhkdTJleHVfZGJnX3J1bjJoYWx0X2kgICAgICAgICAoZGJnX3J1bjJoYWx0ICAgICAgICAgICAgKSwKLSAgICAuaGR1MmV4dV9kYmdfaGFsdDJydW5faSAgICAgICAgIChkYmdfaGFsdDJydW4gICAgICAgICAgICApLAotICAgIC5oZHUyZXh1X2RiZ19ydW5fc3RhcnRfaSAgICAgICAgKGRiZ19ydW5fc3RhcnQgICAgICAgICAgICksCi0gICAgLmhkdTJleHVfZGJnX25ld19wY19pICAgICAgICAgICAoZGJnX25ld19wYyAgICAgICAgICAgICAgKSwKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi1gaWZkZWYgU0NSMV9URFVfRU4KLSAgICAvLyBFWFUgPC0+IFREVSBpbnRlcmZhY2UKLSAgICAuZXh1MnRkdV9pbW9uX28gICAgICAgICAgICAgICAgIChleHUydGR1X2lfbW9uICAgICAgICAgICApLAotICAgIC50ZHUyZXh1X2licmtwdF9tYXRjaF9pICAgICAgICAgKHRkdTJleHVfaV9tYXRjaCAgICAgICAgICksCi0gICAgLnRkdTJleHVfaWJya3B0X2V4Y19yZXFfaSAgICAgICAodGR1MmV4dV9pX3hfcmVxICAgICAgICAgKSwKLSAgICAubHN1MnRkdV9kbW9uX28gICAgICAgICAgICAgICAgIChsc3UydGR1X2RfbW9uICAgICAgICAgICApLAotICAgIC50ZHUybHN1X2licmtwdF9leGNfcmVxX2kgICAgICAgKHRkdTJsc3VfaV94X3JlcSAgICAgICAgICksCi0gICAgLnRkdTJsc3VfZGJya3B0X21hdGNoX2kgICAgICAgICAodGR1MmxzdV9kX21hdGNoICAgICAgICAgKSwKLSAgICAudGR1MmxzdV9kYnJrcHRfZXhjX3JlcV9pICAgICAgICh0ZHUybHN1X2RfeF9yZXEgICAgICAgICApLAotICAgIC5leHUydGR1X2licmtwdF9yZXRfbyAgICAgICAgICAgKGV4dTJ0ZHVfYnBfcmV0aXJlICAgICAgICksCi0gICAgLmV4dTJoZHVfaWJya3B0X2h3X28gICAgICAgICAgICAoYnJrcHRfaHcgICAgICAgICAgICAgICAgKSwKLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotCi0gICAgLy8gRVhVIGNvbnRyb2wKLSAgICAuZXh1MnBpcGVfZXhjX3JlcV9vICAgICAgICAgICAgIChleHVfZXhjX3JlcSAgICAgICAgICAgICApLAotICAgIC5leHUycGlwZV9icmtwdF9vICAgICAgICAgICAgICAgKGJya3B0ICAgICAgICAgICAgICAgICAgICksCi0gICAgLmV4dTJwaXBlX2luaXRfcGNfbyAgICAgICAgICAgICAoZXh1X2luaXRfcGMgICAgICAgICAgICAgKSwKLSAgICAuZXh1MnBpcGVfd2ZpX3J1bjJoYWx0X28gICAgICAgICh3ZmlfcnVuMmhhbHQgICAgICAgICAgICApLAotICAgIC5leHUycGlwZV9pbnN0cmV0X28gICAgICAgICAgICAgKGluc3RyZXQgICAgICAgICAgICAgICAgICksCi0gICAgLmV4dTJjc3JfaW5zdHJldF9ub19leGNfbyAgICAgICAoaW5zdHJldF9uZXhjICAgICAgICAgICAgKSwKLSAgICAuZXh1MnBpcGVfZXh1X2J1c3lfbyAgICAgICAgICAgIChleHVfYnVzeSAgICAgICAgICAgICAgICApLAotCi0gICAgLy8gUEMgaW50ZXJmYWNlCi1gaWZkZWYgU0NSMV9DTEtDVFJMX0VOCi0gICAgLmV4dTJwaXBlX3dmaV9oYWx0ZWRfbyAgICAgICAgICAod2ZpX2hhbHRlZCAgICAgICAgICAgICAgKSwKLWBlbmRpZiAvLyBTQ1IxX0NMS0NUUkxfRU4KLSAgICAuZXh1MnBpcGVfcGNfY3Vycl9vICAgICAgICAgICAgIChjdXJyX3BjICAgICAgICAgICAgICAgICApLAotICAgIC5leHUyY3NyX3BjX25leHRfbyAgICAgICAgICAgICAgKG5leHRfcGMgICAgICAgICAgICAgICAgICksCi0gICAgLmV4dTJpZnVfcGNfbmV3X3JlcV9vICAgICAgICAgICAobmV3X3BjX3JlcSAgICAgICAgICAgICAgKSwKLSAgICAuZXh1MmlmdV9wY19uZXdfbyAgICAgICAgICAgICAgIChuZXdfcGMgICAgICAgICAgICAgICAgICApCi0pOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIE11bHRpLXBvcnQgcmVnaXN0ZXIgZmlsZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zY3IxX3BpcGVfbXByZiBpX3BpcGVfbXByZiAoCi1gaWZkZWYgU0NSMV9NUFJGX1JTVF9FTgotICAgIC5yc3RfbiAgICAgICAgICAgICAgICAgIChwaXBlX3JzdF9uICAgICAgICksCi1gZW5kaWYgLy8gU0NSMV9NUFJGX1JTVF9FTgotICAgIC5jbGsgICAgICAgICAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICksCi0KLSAgICAvLyBFWFUgPC0+IE1QUkYgaW50ZXJmYWNlCi0gICAgLmV4dTJtcHJmX3JzMV9hZGRyX2kgICAgKGV4dTJtcHJmX3JzMV9hZGRyKSwKLSAgICAubXByZjJleHVfcnMxX2RhdGFfbyAgICAobXByZjJleHVfcnMxX2RhdGEpLAotICAgIC5leHUybXByZl9yczJfYWRkcl9pICAgIChleHUybXByZl9yczJfYWRkciksCi0gICAgLm1wcmYyZXh1X3JzMl9kYXRhX28gICAgKG1wcmYyZXh1X3JzMl9kYXRhKSwKLSAgICAuZXh1Mm1wcmZfd19yZXFfaSAgICAgICAoZXh1Mm1wcmZfd19yZXEgICApLAotICAgIC5leHUybXByZl9yZF9hZGRyX2kgICAgIChleHUybXByZl9yZF9hZGRyICksCi0gICAgLmV4dTJtcHJmX3JkX2RhdGFfaSAgICAgKGV4dTJtcHJmX3JkX2RhdGEgKQotKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDb250cm9sIGFuZCBzdGF0dXMgcmVnaXN0ZXJzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXNjcjFfcGlwZV9jc3IgaV9waXBlX2NzciAoCi0gICAgLnJzdF9uICAgICAgICAgICAgICAgICAgICAgIChwaXBlX3JzdF9uICAgICAgICAgICAgICApLAotICAgIC5jbGsgICAgICAgICAgICAgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICAgICAgICAgKSwKLWBpZmRlZiBTQ1IxX0NMS0NUUkxfRU4KLSAgICAuY2xrX2Fsd19vbiAgICAgICAgICAgICAgICAgKGNsa2N0bDJwaXBlX2Nsa19hbHdfb25faSksCi1gZW5kaWYgLy8gU0NSMV9DTEtDVFJMX0VOCi0KLSAgICAvLyBFWFUgPC0+IENTUiByZWFkL3dyaXRlIGludGVyZmFjZQotICAgIC5leHUyY3NyX3JfcmVxX2kgICAgICAgICAgICAoZXh1MmNzcl9yX3JlcSAgICAgICAgICAgKSwKLSAgICAuZXh1MmNzcl9yd19hZGRyX2kgICAgICAgICAgKGV4dTJjc3JfcndfYWRkciAgICAgICAgICksCi0gICAgLmNzcjJleHVfcl9kYXRhX28gICAgICAgICAgIChjc3IyZXh1X3JfZGF0YSAgICAgICAgICApLAotICAgIC5leHUyY3NyX3dfcmVxX2kgICAgICAgICAgICAoZXh1MmNzcl93X3JlcSAgICAgICAgICAgKSwKLSAgICAuZXh1MmNzcl93X2NtZF9pICAgICAgICAgICAgKGV4dTJjc3Jfd19jbWQgICAgICAgICAgICksCi0gICAgLmV4dTJjc3Jfd19kYXRhX2kgICAgICAgICAgIChleHUyY3NyX3dfZGF0YSAgICAgICAgICApLAotICAgIC5jc3IyZXh1X3J3X2V4Y19vICAgICAgICAgICAoY3NyMmV4dV9yd19leGMgICAgICAgICAgKSwKLQotICAgIC8vIEVYVSA8LT4gQ1NSIGV2ZW50IGludGVyZmFjZQotICAgIC5leHUyY3NyX3Rha2VfaXJxX2kgICAgICAgICAoZXh1MmNzcl90YWtlX2lycSAgICAgICAgKSwKLSAgICAuZXh1MmNzcl90YWtlX2V4Y19pICAgICAgICAgKGV4dTJjc3JfdGFrZV9leGMgICAgICAgICksCi0gICAgLmV4dTJjc3JfbXJldF91cGRhdGVfaSAgICAgIChleHUyY3NyX21yZXRfdXBkYXRlICAgICApLAotICAgIC5leHUyY3NyX21yZXRfaW5zdHJfaSAgICAgICAoZXh1MmNzcl9tcmV0X2luc3RyICAgICAgKSwKLSAgICAuZXh1MmNzcl9leGNfY29kZV9pICAgICAgICAgKGV4dTJjc3JfZXhjX2NvZGUgICAgICAgICksCi0gICAgLmV4dTJjc3JfdHJhcF92YWxfaSAgICAgICAgIChleHUyY3NyX3RyYXBfdmFsICAgICAgICApLAotICAgIC5jc3IyZXh1X25ld19wY19vICAgICAgICAgICAoY3NyMmV4dV9uZXdfcGMgICAgICAgICAgKSwKLSAgICAuY3NyMmV4dV9pcnFfbyAgICAgICAgICAgICAgKGNzcjJleHVfaXJxICAgICAgICAgICAgICksCi0gICAgLmNzcjJleHVfaXBfaWVfbyAgICAgICAgICAgIChjc3IyZXh1X2lwX2llICAgICAgICAgICApLAotICAgIC5jc3IyZXh1X21zdGF0dXNfbWllX3VwX28gICAoY3NyMmV4dV9tc3RhdHVzX21pZV91cCAgKSwKLQotYGlmZGVmIFNDUjFfSVBJQ19FTgotICAgIC8vIENTUiA8LT4gSVBJQyBpbnRlcmZhY2UKLSAgICAuY3NyMmlwaWNfcl9yZXFfbyAgICAgICAgICAgKGNzcjJpcGljX3JfcmVxICAgICAgICAgICksCi0gICAgLmNzcjJpcGljX3dfcmVxX28gICAgICAgICAgIChjc3IyaXBpY193X3JlcSAgICAgICAgICApLAotICAgIC5jc3IyaXBpY19hZGRyX28gICAgICAgICAgICAoY3NyMmlwaWNfYWRkciAgICAgICAgICAgKSwKLSAgICAuY3NyMmlwaWNfd2RhdGFfbyAgICAgICAgICAgKGNzcjJpcGljX3dkYXRhICAgICAgICAgICksCi0gICAgLmlwaWMyY3NyX3JkYXRhX2kgICAgICAgICAgIChpcGljMmNzcl9yZGF0YSAgICAgICAgICApLAotYGVuZGlmIC8vIFNDUjFfSVBJQ19FTgotCi0gICAgLy8gQ1NSIDwtPiBQQyBpbnRlcmZhY2UKLSAgICAuZXh1MmNzcl9wY19jdXJyX2kgICAgICAgICAgKGN1cnJfcGMgICAgICAgICAgICAgICAgICksCi0gICAgLmV4dTJjc3JfcGNfbmV4dF9pICAgICAgICAgIChuZXh0X3BjICAgICAgICAgICAgICAgICApLAotYGlmbmRlZiBTQ1IxX0NTUl9SRURVQ0VEX0NOVAotICAgIC5leHUyY3NyX2luc3RyZXRfbm9fZXhjX2kgICAoaW5zdHJldF9uZXhjICAgICAgICAgICAgKSwKLWBlbmRpZiAvLyBTQ1IxX0NTUl9SRURVQ0VEX0NOVAotCi0gICAgLy8gSVJRCi1gaWZkZWYgU0NSMV9JUElDX0VOCi0gICAgLnNvYzJjc3JfaXJxX2V4dF9pICAgICAgICAgIChpcGljMmNzcl9pcnEgICAgICAgICAgICApLAotYGVsc2UgLy8gU0NSMV9JUElDX0VOCi0gICAgLnNvYzJjc3JfaXJxX2V4dF9pICAgICAgICAgIChzb2MycGlwZV9pcnFfZXh0X2kgICAgICApLAotYGVuZGlmIC8vIFNDUjFfSVBJQ19FTgotICAgIC5zb2MyY3NyX2lycV9zb2Z0X2kgICAgICAgICAoc29jMnBpcGVfaXJxX3NvZnRfaSAgICAgKSwKLSAgICAuc29jMmNzcl9pcnFfbXRpbWVyX2kgICAgICAgKHNvYzJwaXBlX2lycV9tdGltZXJfaSAgICksCi0KLSAgICAvLyBNZW1vcnktbWFwcGVkIGV4dGVybmFsIHRpbWVyCi0gICAgLnNvYzJjc3JfbXRpbWVyX3ZhbF9pICAgICAgIChzb2MycGlwZV9tdGltZXJfdmFsX2kgICApLAotCi1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICAvLyBDU1IgPC0+IEhEVSBpbnRlcmZhY2UKLSAgICAuY3NyMmhkdV9yZXFfbyAgICAgICAgICAgICAgKGNzcjJoZHVfcmVxICAgICAgICAgICAgICksCi0gICAgLmNzcjJoZHVfY21kX28gICAgICAgICAgICAgIChjc3IyaGR1X2NtZCAgICAgICAgICAgICApLAotICAgIC5jc3IyaGR1X2FkZHJfbyAgICAgICAgICAgICAoY3NyMmhkdV9hZGRyICAgICAgICAgICAgKSwKLSAgICAuY3NyMmhkdV93ZGF0YV9vICAgICAgICAgICAgKGNzcjJoZHVfd2RhdGEgICAgICAgICAgICksCi0gICAgLmhkdTJjc3JfcmRhdGFfaSAgICAgICAgICAgIChoZHUyY3NyX3JkYXRhICAgICAgICAgICApLAotICAgIC5oZHUyY3NyX3Jlc3BfaSAgICAgICAgICAgICAoaGR1MmNzcl9yZXNwICAgICAgICAgICAgKSwKLSAgICAuaGR1MmNzcl9ub19jb21taXRfaSAgICAgICAgKGV4dV9ub19jb21taXQgICAgICAgICAgICksCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotYGlmZGVmIFNDUjFfVERVX0VOCi0gICAgLy8gQ1NSIDwtPiBURFUgaW50ZXJmYWNlCi0gICAgLmNzcjJ0ZHVfcmVxX28gICAgICAgICAgICAgIChjc3IydGR1X3JlcSAgICAgICAgICAgICApLAotICAgIC5jc3IydGR1X2NtZF9vICAgICAgICAgICAgICAoY3NyMnRkdV9jbWQgICAgICAgICAgICAgKSwKLSAgICAuY3NyMnRkdV9hZGRyX28gICAgICAgICAgICAgKGNzcjJ0ZHVfYWRkciAgICAgICAgICAgICksCi0gICAgLmNzcjJ0ZHVfd2RhdGFfbyAgICAgICAgICAgIChjc3IydGR1X3dkYXRhICAgICAgICAgICApLAotICAgIC50ZHUyY3NyX3JkYXRhX2kgICAgICAgICAgICAodGR1MmNzcl9yZGF0YSAgICAgICAgICAgKSwKLSAgICAudGR1MmNzcl9yZXNwX2kgICAgICAgICAgICAgKHRkdTJjc3JfcmVzcCAgICAgICAgICAgICksCi1gZW5kaWYgLy8gU0NSMV9URFVfRU4KLSAgICAuc29jMmNzcl9mdXNlX21oYXJ0aWRfaSAgICAgKHNvYzJwaXBlX2Z1c2VfbWhhcnRpZF9pICkKLSk7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSW50ZWdyYXRlZCBwcm9ncmFtbWFibGUgaW50ZXJydXB0IGNvbnRyb2xsZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotYGlmZGVmIFNDUjFfSVBJQ19FTgotc2NyMV9pcGljIGlfcGlwZV9pcGljICgKLSAgICAucnN0X24gICAgICAgICAgICAgICAgICAocGlwZV9yc3RfbiAgICAgICAgICAgICAgKSwKLWBpZmRlZiBTQ1IxX0NMS0NUUkxfRU4KLSAgICAuY2xrICAgICAgICAgICAgICAgICAgICAoY2xrY3RsMnBpcGVfY2xrX2Fsd19vbl9pKSwKLWBlbHNlIC8vIFNDUjFfQ0xLQ1RSTF9FTgotICAgIC5jbGsgICAgICAgICAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICAgICAgICApLAotYGVuZGlmIC8vIFNDUjFfQ0xLQ1RSTF9FTgotICAgIC5zb2MyaXBpY19pcnFfbGluZXNfaSAgIChzb2MycGlwZV9pcnFfbGluZXNfaSAgICApLAotICAgIC5jc3IyaXBpY19yX3JlcV9pICAgICAgIChjc3IyaXBpY19yX3JlcSAgICAgICAgICApLAotICAgIC5jc3IyaXBpY193X3JlcV9pICAgICAgIChjc3IyaXBpY193X3JlcSAgICAgICAgICApLAotICAgIC5jc3IyaXBpY19hZGRyX2kgICAgICAgIChjc3IyaXBpY19hZGRyICAgICAgICAgICApLAotICAgIC5jc3IyaXBpY193ZGF0YV9pICAgICAgIChjc3IyaXBpY193ZGF0YSAgICAgICAgICApLAotICAgIC5pcGljMmNzcl9yZGF0YV9vICAgICAgIChpcGljMmNzcl9yZGF0YSAgICAgICAgICApLAotICAgIC5pcGljMmNzcl9pcnFfbV9yZXFfbyAgIChpcGljMmNzcl9pcnEgICAgICAgICAgICApCi0pOwotYGVuZGlmIC8vIFNDUjFfSVBJQ19FTgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEJyZWFrcG9pbnQgbW9kdWxlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWBpZmRlZiBTQ1IxX1REVV9FTgotc2NyMV9waXBlX3RkdSBpX3BpcGVfdGR1ICgKLSAgICAvLyBDb21tb24gc2lnbmFscwotIGBpZmRlZiBTQ1IxX0RCR19FTgotICAgIC5yc3RfbiAgICAgICAgICAgICAgICAgICAgICAoZGJnX3JzdF9uICAgICAgICAgICAgICksCi0gYGVsc2UKLSAgICAucnN0X24gICAgICAgICAgICAgICAgICAgICAgKHBpcGVfcnN0X24gICAgICAgICAgICApLAotIGBlbmRpZiAvLyBTQ1IxX0RCR19FTgotICAgIC5jbGsgICAgICAgICAgICAgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICAgICAgICksCi0gICAgLmNsa19lbiAgICAgICAgICAgICAgICAgICAgICgxJ2IxICAgICAgICAgICAgICAgICAgKSwKLSBgaWZkZWYgU0NSMV9EQkdfRU4KLSAgICAudGR1X2RzYmxfaSAgICAgICAgICAgICAgICAgKGh3YnJrX2RzYmwgICAgICAgICAgICApLAotIGBlbHNlIC8vIFNDUjFfREJHX0VOCi0gICAgLnRkdV9kc2JsX2kgICAgICAgICAgICAgICAgICgxJ2IwICAgICAgICAgICAgICAgICAgKSwKLSBgZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotICAgIC8vIFREVSA8LT4gQ1NSIGludGVyZmFjZQotIGBpZmRlZiBTQ1IxX0RCR19FTgotICAgIC5jc3IydGR1X3JlcV9pICAgICAgICAgICAgICAoY3NyMnRkdV9yZXFfcWxmeSAgICAgICksCi0gICAgLmNzcjJ0ZHVfY21kX2kgICAgICAgICAgICAgIChjc3IydGR1X2NtZCAgICAgICAgICAgKSwKLSAgICAuY3NyMnRkdV9hZGRyX2kgICAgICAgICAgICAgKGNzcjJ0ZHVfYWRkciAgICAgICAgICApLAotICAgIC5jc3IydGR1X3dkYXRhX2kgICAgICAgICAgICAoY3NyMnRkdV93ZGF0YSAgICAgICAgICksCi0gYGVsc2UgLy8gU0NSMV9EQkdfRU4KLSAgICAuY3NyMnRkdV9yZXFfaSAgICAgICAgICAgICAgKGNzcjJ0ZHVfcmVxICAgICAgICAgICApLAotICAgIC5jc3IydGR1X2NtZF9pICAgICAgICAgICAgICAoY3NyMnRkdV9jbWQgICAgICAgICAgICksCi0gICAgLmNzcjJ0ZHVfYWRkcl9pICAgICAgICAgICAgIChjc3IydGR1X2FkZHIgICAgICAgICAgKSwKLSAgICAuY3NyMnRkdV93ZGF0YV9pICAgICAgICAgICAgKGNzcjJ0ZHVfd2RhdGEgICAgICAgICApLAotIGBlbmRpZiAvLyBTQ1IxX0RCR19FTgotICAgIC50ZHUyY3NyX3JkYXRhX28gICAgICAgICAgICAodGR1MmNzcl9yZGF0YSAgICAgICAgICksCi0gICAgLnRkdTJjc3JfcmVzcF9vICAgICAgICAgICAgICh0ZHUyY3NyX3Jlc3AgICAgICAgICAgKSwKLQotICAgIC8vIFREVSA8LT4gRVhVIGludGVyZmFjZQotIGBpZmRlZiBTQ1IxX0RCR19FTgotICAgIC5leHUydGR1X2ltb25faSAgICAgICAgICAgICAoZXh1MnRkdV9pX21vbl9xbGZ5ICAgICksCi0gYGVsc2UgLy8gU0NSMV9EQkdfRU4KLSAgICAuZXh1MnRkdV9pbW9uX2kgICAgICAgICAgICAgKGV4dTJ0ZHVfaV9tb24gICAgICAgICApLAotIGBlbmRpZiAvLyBTQ1IxX0RCR19FTgotICAgIC50ZHUyZXh1X2licmtwdF9tYXRjaF9vICAgICAodGR1MmV4dV9pX21hdGNoICAgICAgICksCi0gICAgLnRkdTJleHVfaWJya3B0X2V4Y19yZXFfbyAgICh0ZHUyZXh1X2lfeF9yZXEgICAgICAgKSwKLSBgaWZkZWYgU0NSMV9EQkdfRU4KLSAgICAuZXh1MnRkdV9icF9yZXRpcmVfaSAgICAgICAgKGV4dTJ0ZHVfYnBfcmV0aXJlX3FsZnkpLAotIGBlbHNlIC8vIFNDUjFfREJHX0VOCi0gICAgLmV4dTJ0ZHVfYnBfcmV0aXJlX2kgICAgICAgIChleHUydGR1X2JwX3JldGlyZSAgICAgKSwKLSBgZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotICAgIC8vIFREVSA8LT4gTFNVIGludGVyZmFjZQotICAgIC50ZHUybHN1X2licmtwdF9leGNfcmVxX28gICAodGR1MmxzdV9pX3hfcmVxICAgICAgICksCi0gYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgLmxzdTJ0ZHVfZG1vbl9pICAgICAgICAgICAgIChsc3UydGR1X2RfbW9uX3FsZnkgICAgKSwKLSBgZWxzZSAvLyBTQ1IxX0RCR19FTgotICAgIC5sc3UydGR1X2Rtb25faSAgICAgICAgICAgICAobHN1MnRkdV9kX21vbiAgICAgICAgICksCi0gYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0gICAgLnRkdTJsc3VfZGJya3B0X21hdGNoX28gICAgICh0ZHUybHN1X2RfbWF0Y2ggICAgICAgKSwKLSAgICAudGR1MmxzdV9kYnJrcHRfZXhjX3JlcV9vICAgKHRkdTJsc3VfZF94X3JlcSAgICAgICApLAotICAgIC8vIEVQVSBJL0YKLSBgaWZkZWYgU0NSMV9EQkdfRU4KLSAgICAudGR1MmhkdV9kbW9kZV9yZXFfbyAgICAgICAgKHRkdTJoZHVfZG1vZGVfcmVxICAgICApCi0gYGVsc2UgLy8gU0NSMV9EQkdfRU4KLSAgICAudGR1MmhkdV9kbW9kZV9yZXFfbyAgICAgICAgKCAgICAgICAgICAgICAgICAgICAgICApCi0gYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0pOwotCi0gYGlmZGVmIFNDUjFfREJHX0VOCi1hc3NpZ24gaHdicmtfZHNibCAgICAgICAgICAgICAgID0gKH5kYmdfZW4pIHwgaGR1X2h3YnJrX2RzYmw7Ci0vLwotYXNzaWduIGNzcjJ0ZHVfcmVxX3FsZnkgICAgICAgICA9IGRiZ19lbiAmIGNzcjJ0ZHVfcmVxICYgcGlwZTJoZHVfcmRjX3FsZnlfaTsKLS8vCi1hc3NpZ24gZXh1MnRkdV9pX21vbl9xbGZ5LnZkICAgID0gZXh1MnRkdV9pX21vbi52ZCAmIHBpcGUyaGR1X3JkY19xbGZ5X2k7Ci1hc3NpZ24gZXh1MnRkdV9pX21vbl9xbGZ5LnJlcSAgID0gZXh1MnRkdV9pX21vbi5yZXE7Ci1hc3NpZ24gZXh1MnRkdV9pX21vbl9xbGZ5LmFkZHIgID0gZXh1MnRkdV9pX21vbi5hZGRyOwotYXNzaWduIGxzdTJ0ZHVfZF9tb25fcWxmeS52ZCAgICA9IGxzdTJ0ZHVfZF9tb24udmQgJiBwaXBlMmhkdV9yZGNfcWxmeV9pOwotYXNzaWduIGxzdTJ0ZHVfZF9tb25fcWxmeS5sb2FkICA9IGxzdTJ0ZHVfZF9tb24ubG9hZDsKLWFzc2lnbiBsc3UydGR1X2RfbW9uX3FsZnkuc3RvcmUgPSBsc3UydGR1X2RfbW9uLnN0b3JlOwotYXNzaWduIGxzdTJ0ZHVfZF9tb25fcWxmeS5hZGRyICA9IGxzdTJ0ZHVfZF9tb24uYWRkcjsKLWFzc2lnbiBleHUydGR1X2JwX3JldGlyZV9xbGZ5ICAgPSBleHUydGR1X2JwX3JldGlyZSAmIHskYml0cyhleHUydGR1X2JwX3JldGlyZSl7cGlwZTJoZHVfcmRjX3FsZnlfaX19OwotIGBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi1gZW5kaWYgLy8gU0NSMV9URFVfRU4KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBIQVJUIERlYnVnIFVuaXQgKEhEVSkKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotYGlmZGVmIFNDUjFfREJHX0VOCi1zY3IxX3BpcGVfaGR1IGlfcGlwZV9oZHUgKAotICAgIC8vIENvbW1vbiBzaWduYWxzCi0gICAgLnJzdF9uICAgICAgICAgICAgICAgICAgICAgIChkYmdfcnN0X24gICAgICAgICAgICAgKSwKLSAgICAuY2xrX2VuICAgICAgICAgICAgICAgICAgICAgKGRtMnBpcGVfYWN0aXZlX2kgICAgICApLAotYGlmZGVmIFNDUjFfQ0xLQ1RSTF9FTgotICAgIC5jbGtfcGlwZV9lbiAgICAgICAgICAgICAgICAoY2xrY3RsMnBpcGVfY2xrX2VuX2kgICksCi0gICAgLmNsayAgICAgICAgICAgICAgICAgICAgICAgIChjbGtjdGwycGlwZV9jbGtfZGJnY19pKSwKLWBlbHNlCi0gICAgLmNsayAgICAgICAgICAgICAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICAgICAgKSwKLWBlbmRpZiAvLyBTQ1IxX0NMS0NUUkxfRU4KLQotICAgIC8vIENvbnRyb2wvc3RhdHVzIHJlZ2lzdGVycyBpL2YKLSAgICAuY3NyMmhkdV9yZXFfaSAgICAgICAgICAgICAgKGNzcjJoZHVfcmVxX3FsZnkgICAgICApLAotICAgIC5jc3IyaGR1X2NtZF9pICAgICAgICAgICAgICAoY3NyMmhkdV9jbWQgICAgICAgICAgICksCi0gICAgLmNzcjJoZHVfYWRkcl9pICAgICAgICAgICAgIChjc3IyaGR1X2FkZHIgICAgICAgICAgKSwKLSAgICAuY3NyMmhkdV93ZGF0YV9pICAgICAgICAgICAgKGNzcjJoZHVfd2RhdGEgICAgICAgICApLAotICAgIC5oZHUyY3NyX3Jlc3BfbyAgICAgICAgICAgICAoaGR1MmNzcl9yZXNwICAgICAgICAgICksCi0gICAgLmhkdTJjc3JfcmRhdGFfbyAgICAgICAgICAgIChoZHUyY3NyX3JkYXRhICAgICAgICAgKSwKLQotICAgIC8vIEhBUlQgUnVuIENvbnRyb2wgaS9mCi0gICAgLnBpcGUyaGR1X3JkY19xbGZ5X2kgICAgICAgIChwaXBlMmhkdV9yZGNfcWxmeV9pICAgKSwKLSAgICAuZG0yaGR1X2NtZF9yZXFfaSAgICAgICAgICAgKGRtMnBpcGVfY21kX3JlcV9pICAgICApLAotICAgIC5kbTJoZHVfY21kX2kgICAgICAgICAgICAgICAoZG0ycGlwZV9jbWRfaSAgICAgICAgICksCi0gICAgLmhkdTJkbV9jbWRfcmVzcF9vICAgICAgICAgIChwaXBlMmRtX2NtZF9yZXNwX28gICAgKSwKLSAgICAuaGR1MmRtX2NtZF9yY29kZV9vICAgICAgICAgKHBpcGUyZG1fY21kX3Jjb2RlX28gICApLAotICAgIC5oZHUyZG1faGFydF9ldmVudF9vICAgICAgICAocGlwZTJkbV9oYXJ0X2V2ZW50X28gICksCi0gICAgLmhkdTJkbV9oYXJ0X3N0YXR1c19vICAgICAgIChwaXBlMmRtX2hhcnRfc3RhdHVzX28gKSwKLQotICAgIC8vIFByb2dyYW0gQnVmZmVyIC0gSEFSVCBpbnN0cnVjdGlvbiBleGVjdXRpb24gaS9mCi0gICAgLmhkdTJkbV9wYnVmX2FkZHJfbyAgICAgICAgIChwaXBlMmRtX3BidWZfYWRkcl9vICAgKSwKLSAgICAuZG0yaGR1X3BidWZfaW5zdHJfaSAgICAgICAgKGRtMnBpcGVfcGJ1Zl9pbnN0cl9pICApLAotCi0gICAgLy8gSEFSVCBBYnN0cmFjdCBEYXRhIHJlZ3MgaS9mCi0gICAgLmhkdTJkbV9kcmVnX3JlcV9vICAgICAgICAgIChwaXBlMmRtX2RyZWdfcmVxX28gICAgKSwKLSAgICAuaGR1MmRtX2RyZWdfd3JfbyAgICAgICAgICAgKHBpcGUyZG1fZHJlZ193cl9vICAgICApLAotICAgIC5oZHUyZG1fZHJlZ193ZGF0YV9vICAgICAgICAocGlwZTJkbV9kcmVnX3dkYXRhX28gICksCi0gICAgLmRtMmhkdV9kcmVnX3Jlc3BfaSAgICAgICAgIChkbTJwaXBlX2RyZWdfcmVzcF9pICAgKSwKLSAgICAuZG0yaGR1X2RyZWdfZmFpbF9pICAgICAgICAgKGRtMnBpcGVfZHJlZ19mYWlsX2kgICApLAotICAgIC5kbTJoZHVfZHJlZ19yZGF0YV9pICAgICAgICAoZG0ycGlwZV9kcmVnX3JkYXRhX2kgICksCi0gICAgLy8KLWBpZmRlZiBTQ1IxX1REVV9FTgotICAgIC8vIEhEVSA8LT4gVERVIGludGVyZmFjZQotICAgIC5oZHUydGR1X2h3YnJrX2RzYmxfbyAgICAgICAoaGR1X2h3YnJrX2RzYmwgICAgICAgICksCi0gICAgLnRkdTJoZHVfZG1vZGVfcmVxX2kgICAgICAgICh0ZHUyaGR1X2Rtb2RlX3JlcSAgICAgKSwKLSAgICAuZXh1MmhkdV9pYnJrcHRfaHdfaSAgICAgICAgKGJya3B0X2h3ICAgICAgICAgICAgICApLAotYGVuZGlmIC8vIFNDUjFfVERVX0VOCi0KLSAgICAvLyBIQVJUIFJ1biBTdGF0dXMKLSAgICAucGlwZTJoZHVfZXh1X2J1c3lfaSAgICAgICAgKGV4dV9idXN5X3FsZnkgICAgICAgICApLAotICAgIC5waXBlMmhkdV9pbnN0cmV0X2kgICAgICAgICAoaW5zdHJldF9xbGZ5ICAgICAgICAgICksCi0gICAgLnBpcGUyaGR1X2luaXRfcGNfaSAgICAgICAgIChleHVfaW5pdF9wY19xbGZ5ICAgICAgKSwKLQotICAgIC8vIEhBUlQgSGFsdCBTdGF0dXMKLSAgICAucGlwZTJoZHVfZXh1X2V4Y19yZXFfaSAgICAgKGV4dV9leGNfcmVxX3FsZnkgICAgICApLAotICAgIC5waXBlMmhkdV9icmtwdF9pICAgICAgICAgICAoYnJrcHRfcWxmeSAgICAgICAgICAgICksCi0KLSAgICAvLyBIQVJUIFJ1biBDb250cm9sCi0gICAgLmhkdTJleHVfcGJ1Zl9mZXRjaF9vICAgICAgIChmZXRjaF9wYnVmICAgICAgICAgICAgKSwKLSAgICAuaGR1MmV4dV9ub19jb21taXRfbyAgICAgICAgKGV4dV9ub19jb21taXQgICAgICAgICApLAotICAgIC5oZHUyZXh1X2lycV9kc2JsX28gICAgICAgICAoZXh1X2lycV9kc2JsICAgICAgICAgICksCi0gICAgLmhkdTJleHVfcGNfYWR2bXRfZHNibF9vICAgIChleHVfcGNfYWR2bXRfZHNibCAgICAgKSwKLSAgICAuaGR1MmV4dV9kbW9kZV9zc3RlcF9lbl9vICAgKGV4dV9kbW9kZV9zc3RlcF9lbiAgICApLAotCi0gICAgLy8gSEFSVCBzdGF0ZQotICAgIC5oZHUyZXh1X2RiZ19oYWx0ZWRfbyAgICAgICAoZGJnX2hhbHRlZCAgICAgICAgICAgICksCi0gICAgLmhkdTJleHVfZGJnX3J1bjJoYWx0X28gICAgIChkYmdfcnVuMmhhbHQgICAgICAgICAgKSwKLSAgICAuaGR1MmV4dV9kYmdfaGFsdDJydW5fbyAgICAgKGRiZ19oYWx0MnJ1biAgICAgICAgICApLAotICAgIC5oZHUyZXh1X2RiZ19ydW5fc3RhcnRfbyAgICAoZGJnX3J1bl9zdGFydCAgICAgICAgICksCi0KLSAgICAvLyBQQyBpbnRlcmZhY2UKLSAgICAucGlwZTJoZHVfcGNfY3Vycl9pICAgICAgICAgKGN1cnJfcGMgICAgICAgICAgICAgICApLAotICAgIC5oZHUyZXh1X2RiZ19uZXdfcGNfbyAgICAgICAoZGJnX25ld19wYyAgICAgICAgICAgICksCi0KLSAgICAvLyBQcmdyYW0gQnVmZmVyIEluc3RydWN0aW9uIGludGVyZmFjZQotICAgIC5pZnUyaGR1X3BidWZfaW5zdHJfcmR5X2kgICAoaWZ1MmhkdV9wYnVmX3JkeV9xbGZ5ICksCi0gICAgLmhkdTJpZnVfcGJ1Zl9pbnN0cl92ZF9vICAgIChoZHUyaWZ1X3BidWZfdmQgICAgICAgKSwKLSAgICAuaGR1MmlmdV9wYnVmX2luc3RyX2Vycl9vICAgKGhkdTJpZnVfcGJ1Zl9lcnIgICAgICApLAotICAgIC5oZHUyaWZ1X3BidWZfaW5zdHJfbyAgICAgICAoaGR1MmlmdV9wYnVmX2luc3RyICAgICkKLSk7Ci0KLWFzc2lnbiBjc3IyaGR1X3JlcV9xbGZ5ICAgICAgICAgPSBjc3IyaGR1X3JlcSAmIGRiZ19lbiAmIHBpcGUyaGR1X3JkY19xbGZ5X2k7Ci0vLwotYXNzaWduIGV4dV9idXN5X3FsZnkgICAgICAgICAgICA9IGV4dV9idXN5ICAgICAgICAgICYgeyRiaXRzKGV4dV9idXN5KXtwaXBlMmhkdV9yZGNfcWxmeV9pfX07Ci1hc3NpZ24gaW5zdHJldF9xbGZ5ICAgICAgICAgICAgID0gaW5zdHJldCAgICAgICAgICAgJiB7JGJpdHMoaW5zdHJldCl7cGlwZTJoZHVfcmRjX3FsZnlfaX19OwotYXNzaWduIGV4dV9pbml0X3BjX3FsZnkgICAgICAgICA9IGV4dV9pbml0X3BjICAgICAgICYgeyRiaXRzKGV4dV9pbml0X3BjKXtwaXBlMmhkdV9yZGNfcWxmeV9pfX07Ci1hc3NpZ24gZXh1X2V4Y19yZXFfcWxmeSAgICAgICAgID0gZXh1X2V4Y19yZXEgICAgICAgJiB7JGJpdHMoZXh1X2V4Y19yZXEpe3BpcGUyaGR1X3JkY19xbGZ5X2l9fTsKLWFzc2lnbiBicmtwdF9xbGZ5ICAgICAgICAgICAgICAgPSBicmtwdCAgICAgICAgICAgICAmIHskYml0cyhicmtwdCl7cGlwZTJoZHVfcmRjX3FsZnlfaX19OwotYXNzaWduIGlmdTJoZHVfcGJ1Zl9yZHlfcWxmeSAgICA9IGlmdTJoZHVfcGJ1Zl9yZHkgICYgeyRiaXRzKGlmdTJoZHVfcGJ1Zl9yZHkpe3BpcGUyaGR1X3JkY19xbGZ5X2l9fTsKLQotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KLWBpZmRlZiBTQ1IxX1RSR1RfU0lNVUxBVElPTgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBUcmFjZWxvZwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXNjcjFfdHJhY2Vsb2cgaV90cmFjZWxvZyAoCi0gICAgLnJzdF9uICAgICAgICAgICAgICAgICAgICAgICAgICAocGlwZV9yc3RfbiAgICAgICAgICAgICAgICAgICAgICAgICApLAotICAgIC5jbGsgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKLSAgICAuc29jMnBpcGVfZnVzZV9taGFydGlkX2kgICAgICAgIChzb2MycGlwZV9mdXNlX21oYXJ0aWRfaSAgICAgICAgICAgICksCi0KLSAgICAvLyBNUFJGCi0gICAgLm1wcmYydHJhY2VfaW50X2kgICAgICAgICAgICAgICAoaV9waXBlX21wcmYubXByZl9pbnQgICAgICAgICAgICAgICApLAotICAgIC5tcHJmMnRyYWNlX3dyX2VuX2kgICAgICAgICAgICAgKGlfcGlwZV9tcHJmLmV4dTJtcHJmX3dfcmVxX2kgICAgICAgKSwKLSAgICAubXByZjJ0cmFjZV93cl9hZGRyX2kgICAgICAgICAgIChpX3BpcGVfbXByZi5leHUybXByZl9yZF9hZGRyX2kgICAgICksCi0gICAgLm1wcmYydHJhY2Vfd3JfZGF0YV9pICAgICAgICAgICAoaV9waXBlX21wcmYuZXh1Mm1wcmZfcmRfZGF0YV9pICAgICApLAotCi0gICAgLy8gRVhVCi0gICAgLmV4dTJ0cmFjZV91cGRhdGVfcGNfZW5faSAgICAgICAoaV9waXBlX2V4dS51cGRhdGVfcGNfZW4gICAgICAgICAgICApLAotICAgIC5leHUydHJhY2VfdXBkYXRlX3BjX2kgICAgICAgICAgKGlfcGlwZV9leHUudXBkYXRlX3BjICAgICAgICAgICAgICAgKSwKLQotICAgIC8vIElGVQotICAgIC5pZnUydHJhY2VfaW5zdHJfaSAgICAgICAgICAgICAgKGlfcGlwZV9pZnUuaWZ1MmlkdV9pbnN0cl9vICAgICAgICAgKSwKLQotICAgIC8vIENTUgotICAgIC5jc3IydHJhY2VfbXN0YXR1c19taWVfaSAgICAgICAgKGlfcGlwZV9jc3IuY3NyX21zdGF0dXNfbWllX2ZmICAgICAgKSwKLSAgICAuY3NyMnRyYWNlX21zdGF0dXNfbXBpZV9pICAgICAgIChpX3BpcGVfY3NyLmNzcl9tc3RhdHVzX21waWVfZmYgICAgICksCi0gICAgLmNzcjJ0cmFjZV9tdHZlY19iYXNlX2kgICAgICAgICAoaV9waXBlX2Nzci5jc3JfbXR2ZWNfYmFzZSAgICAgICAgICApLAotICAgIC5jc3IydHJhY2VfbXR2ZWNfbW9kZV9pICAgICAgICAgKGlfcGlwZV9jc3IuY3NyX210dmVjX21vZGUgICAgICAgICAgKSwKLSAgICAuY3NyMnRyYWNlX21pZV9tZWllX2kgICAgICAgICAgIChpX3BpcGVfY3NyLmNzcl9taWVfbWVpZV9mZiAgICAgICAgICksCi0gICAgLmNzcjJ0cmFjZV9taWVfbXRpZV9pICAgICAgICAgICAoaV9waXBlX2Nzci5jc3JfbWllX210aWVfZmYgICAgICAgICApLAotICAgIC5jc3IydHJhY2VfbWllX21zaWVfaSAgICAgICAgICAgKGlfcGlwZV9jc3IuY3NyX21pZV9tc2llX2ZmICAgICAgICAgKSwKLSAgICAuY3NyMnRyYWNlX21pcF9tZWlwX2kgICAgICAgICAgIChpX3BpcGVfY3NyLmNzcl9taXBfbWVpcCAgICAgICAgICAgICksCi0gICAgLmNzcjJ0cmFjZV9taXBfbXRpcF9pICAgICAgICAgICAoaV9waXBlX2Nzci5jc3JfbWlwX210aXAgICAgICAgICAgICApLAotICAgIC5jc3IydHJhY2VfbWlwX21zaXBfaSAgICAgICAgICAgKGlfcGlwZV9jc3IuY3NyX21pcF9tc2lwICAgICAgICAgICAgKSwKLSAgICAuY3NyMnRyYWNlX21lcGNfaSAgICAgICAgICAgICAgIChpX3BpcGVfY3NyLmNzcl9tZXBjX2ZmICAgICAgICAgICAgICksCi0gICAgLmNzcjJ0cmFjZV9tY2F1c2VfaXJxX2kgICAgICAgICAoaV9waXBlX2Nzci5jc3JfbWNhdXNlX2lfZmYgICAgICAgICApLAotICAgIC5jc3IydHJhY2VfbWNhdXNlX2VjX2kgICAgICAgICAgKGlfcGlwZV9jc3IuY3NyX21jYXVzZV9lY19mZiAgICAgICAgKSwKLSAgICAuY3NyMnRyYWNlX210dmFsX2kgICAgICAgICAgICAgIChpX3BpcGVfY3NyLmNzcl9tdHZhbF9mZiAgICAgICAgICAgICksCi0gICAgLmNzcjJ0cmFjZV9tc3RhdHVzX21pZV91cF9pICAgICAoaV9waXBlX2Nzci5jc3IyZXh1X21zdGF0dXNfbWllX3VwX28pLAotCi0gICAgLy8gRXZlbnRzCi0gICAgLmNzcjJ0cmFjZV9lX2V4Y19pICAgICAgICAgICAgICAoaV9waXBlX2Nzci5lX2V4YyAgICAgICAgICAgICAgICAgICApLAotICAgIC5jc3IydHJhY2VfZV9pcnFfaSAgICAgICAgICAgICAgKGlfcGlwZV9jc3IuZV9pcnEgICAgICAgICAgICAgICAgICAgKSwKLSAgICAucGlwZTJ0cmFjZV9lX3dha2VfaSAgICAgICAgICAgIChwaXBlMmNsa2N0bF93YWtlX3JlcV9vICAgICAgICAgICAgICksCi0gICAgLmNzcjJ0cmFjZV9lX21yZXRfaSAgICAgICAgICAgICAoaV9waXBlX2Nzci5lX21yZXQgICAgICAgICAgICAgICAgICApCi0pOwotCi1gZW5kaWYgLy8gU0NSMV9UUkdUX1NJTVVMQVRJT04KLQotZW5kbW9kdWxlIDogc2NyMV9waXBlX3RvcApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV90cmFjZWxvZy5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfdHJhY2Vsb2cuc3YKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiODQ1ZDguLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV90cmFjZWxvZy5zdgorKysgL2Rldi9udWxsCkBAIC0xLDQ3MSArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIxCi0vLyAKLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0vLyBTUERYLUZpbGVDb250cmlidXRvcjogU3ludGFjb3JlIExMQwotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLyBAZmlsZSAgICAgICA8c2NyMV90cmFjZWxvZy5zdj4KLS8vLyBAYnJpZWYgICAgICBDb3JlIHRyYWNlbG9nIG1vZHVsZQotLy8vCi0KLWBpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgotYGluY2x1ZGUgInNjcjFfYXJjaF90eXBlcy5zdmgiCi1gaW5jbHVkZSAic2NyMV9jc3Iuc3ZoIgotCi1gaWZkZWYgU0NSMV9UUkdUX1NJTVVMQVRJT04KLQotbW9kdWxlIHNjcjFfdHJhY2Vsb2cgKAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByc3RfbiwgICAgICAgICAgICAgICAgICAgICAgICAvLyBUcmFjZWxvZyByZXNldAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGssICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUcmFjZWxvZyBjbG9jawotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICBzb2MycGlwZV9mdXNlX21oYXJ0aWRfaSwgICAgICAvLyBGdXNlIE1IQVJUSUQKLQotICAgIC8vIE1QUkYKLWBpZmRlZiAgU0NSMV9NUFJGX1JBTQotICAgIGlucHV0ICAgbG9naWMgICBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgbXByZjJ0cmFjZV9pbnRfaSAgIFsxOmBTQ1IxX01QUkZfU0laRS0xXSwgLy8gTVBSRiByZWdpc3RlcnMgY29udGVudAotYGVsc2UgLy8gU0NSMV9NUFJGX1JBTQotICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgbXByZjJ0cmFjZV9pbnRfaVsxOmBTQ1IxX01QUkZfU0laRS0xXSwgICAgICAgICAgICAgLy8gTVBSRiByZWdpc3RlcnMgY29udGVudAotYGVuZGlmIC8vIFNDUjFfTVBSRl9SQU0KLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXByZjJ0cmFjZV93cl9lbl9pLCAgICAgICAgICAgLy8gTVBSRiB3cml0ZSBlbmFibGUKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9NUFJGX0FXSURUSC0xOjBdICAgICAgICAgbXByZjJ0cmFjZV93cl9hZGRyX2ksICAgICAgICAgLy8gTVBSRiB3cml0ZSBhZGRyZXNzCi0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgIG1wcmYydHJhY2Vfd3JfZGF0YV9pLCAgICAgICAgIC8vIE1QUkYgd3JpdGUgZGF0YQotCi0gICAgLy8gRVhVCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJ0cmFjZV91cGRhdGVfcGNfZW5faSwgICAgIC8vIFBDIHVwZGF0ZWQgZmxhZwotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICBleHUydHJhY2VfdXBkYXRlX3BjX2ksICAgICAgICAvLyBOZXh0IFBDIHZhbHVlCi0KLSAgICAvLyBJRlUKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9JTUVNX0RXSURUSC0xOjBdICAgICAgICAgaWZ1MnRyYWNlX2luc3RyX2ksICAgICAgICAgICAgLy8gQ3VycmVudCBpbnN0cnVjdGlvbiBmcm9tIElGVSBzdGFnZQotCi0gICAgLy8gQ1NSCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJ0cmFjZV9tc3RhdHVzX21pZV9pLCAgICAgIC8vIENTUiBNU1RBVFVTLm1pZSBiaXQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMnRyYWNlX21zdGF0dXNfbXBpZV9pLCAgICAgLy8gQ1NSIE1TVEFUVVMubXBpZSBiaXQKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6Nl0gICAgICAgICAgICAgICAgY3NyMnRyYWNlX210dmVjX2Jhc2VfaSwgICAgICAgLy8gQ1NSIE1UVkVDLgotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IydHJhY2VfbXR2ZWNfbW9kZV9pLCAgICAgICAvLyBDU1IgTVRWRUMuCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJ0cmFjZV9taWVfbWVpZV9pLCAgICAgICAgIC8vIENTUiBNSUUubWVpZSBiaXQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMnRyYWNlX21pZV9tdGllX2ksICAgICAgICAgLy8gQ1NSIE1JRS5tdGllIGJpdAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IydHJhY2VfbWllX21zaWVfaSwgICAgICAgICAvLyBDU1IgTUlFLm1zaWUgYml0Ci0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJ0cmFjZV9taXBfbWVpcF9pLCAgICAgICAgIC8vIENTUiBNSVAubWVpcCBiaXQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMnRyYWNlX21pcF9tdGlwX2ksICAgICAgICAgLy8gQ1NSIE1JUC5tdGlwIGJpdAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IydHJhY2VfbWlwX21zaXBfaSwgICAgICAgICAvLyBDU1IgTUlQLm1zaXAgYml0Ci0gYGlmZGVmIFNDUjFfUlZDX0VYVAotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX1hMRU4tMToxXSAgICAgICAgICAgICAgICBjc3IydHJhY2VfbWVwY19pLCAgICAgICAgICAgICAvLyBDU1IgTUVQQyByZWdpc3RlcgotIGBlbHNlIC8vIFNDUjFfUlZDX0VYVAotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX1hMRU4tMToyXSAgICAgICAgICAgICAgICBjc3IydHJhY2VfbWVwY19pLCAgICAgICAgICAgICAvLyBDU1IgTUVQQyByZWdpc3RlcgotIGBlbmRpZiAvLyBTQ1IxX1JWQ19FWFQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMnRyYWNlX21jYXVzZV9pcnFfaSwgICAgICAgLy8gQ1NSIE1DQVVTRS5pbnRlcnJ1cHQgYml0Ci0gICAgaW5wdXQgICBbU0NSMV9FWENfQ09ERV9XSURUSF9FLTE6MF0gICAgICAgICAgIGNzcjJ0cmFjZV9tY2F1c2VfZWNfaSwgICAgICAgIC8vIENTUiBNQ0FVU0UuZXhjZXB0aW9uX2NvZGUgYml0Ci0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgIGNzcjJ0cmFjZV9tdHZhbF9pLCAgICAgICAgICAgIC8vIENTUiBNVFZBTCByZWdpc3RlcgotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IydHJhY2VfbXN0YXR1c19taWVfdXBfaSwgICAvLyBDU1IgTVNUQVRVUy5taWUgdXBkYXRlIGZsYWcKLQotICAgIC8vIEV2ZW50cwotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IydHJhY2VfZV9leGNfaSwgICAgICAgICAgICAvLyBleGNlcHRpb24gZXZlbnQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMnRyYWNlX2VfaXJxX2ksICAgICAgICAgICAgLy8gaW50ZXJydXB0IGV2ZW50Ci0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUydHJhY2VfZV93YWtlX2ksICAgICAgICAgIC8vIHBpcGUgd2FrZXVwIGV2ZW50Ci0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJ0cmFjZV9lX21yZXRfaSAgICAgICAgICAgIC8vIE1SRVQgaW5zdHJ1Y3Rpb24KLSk7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgdHlwZXMgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICBJTlRfMDBfWkVSTyA7Ci0gICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgIElOVF8wMV9SQSAgIDsKLSAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgSU5UXzAyX1NQICAgOwotICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICBJTlRfMDNfR1AgICA7Ci0gICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgIElOVF8wNF9UUCAgIDsKLSAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgSU5UXzA1X1QwICAgOwotICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICBJTlRfMDZfVDEgICA7Ci0gICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgIElOVF8wN19UMiAgIDsKLSAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgSU5UXzA4X1MwICAgOwotICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICBJTlRfMDlfUzEgICA7Ci0gICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgIElOVF8xMF9BMCAgIDsKLSAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgSU5UXzExX0ExICAgOwotICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICBJTlRfMTJfQTIgICA7Ci0gICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgIElOVF8xM19BMyAgIDsKLSAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgSU5UXzE0X0E0ICAgOwotICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICBJTlRfMTVfQTUgICA7Ci1gaWZuZGVmIFNDUjFfUlZFX0VYVAotICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICBJTlRfMTZfQTYgICA7Ci0gICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgIElOVF8xN19BNyAgIDsKLSAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgSU5UXzE4X1MyICAgOwotICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICBJTlRfMTlfUzMgICA7Ci0gICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgIElOVF8yMF9TNCAgIDsKLSAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgSU5UXzIxX1M1ICAgOwotICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICBJTlRfMjJfUzYgICA7Ci0gICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgIElOVF8yM19TNyAgIDsKLSAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgSU5UXzI0X1M4ICAgOwotICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICBJTlRfMjVfUzkgICA7Ci0gICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgIElOVF8yNl9TMTAgIDsKLSAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgSU5UXzI3X1MxMSAgOwotICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICBJTlRfMjhfVDMgICA7Ci0gICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgIElOVF8yOV9UNCAgIDsKLSAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgSU5UXzMwX1Q1ICAgOwotICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICBJTlRfMzFfVDYgICA7Ci1gZW5kaWYgLy8gU0NSMV9SVkVfRVhUCi19IHR5cGVfc2NyMV9pcmVnX25hbWVfczsKLQotdHlwZWRlZiBzdHJ1Y3QgcGFja2VkIHsKLSAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICBtc3RhdHVzOwotICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gIG10dmVjOwotICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gIG1pZTsKLSAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICBtaXA7Ci0gICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgbWVwYzsKLSAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICBtY2F1c2U7Ci0gICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgbXR2YWw7Ci19IHR5cGVfc2NyMV9jc3JfdHJhY2VfczsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCBTaWduYWwgRGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi10eXBlX3NjcjFfaXJlZ19uYW1lX3MgICAgICAgICAgICAgICBtcHJmX2ludF9hbGlhczsKLQotYGlmZGVmIFNDUjFfVFJBQ0VfTE9HX0VOCi0KLXRpbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfdGltZTsKLQotLy8gVHJhY2Vsb2cgY29udHJvbCBzaWduYWxzCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZV9mbGFnOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2VfdXBkYXRlOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2VfdXBkYXRlX3I7Ci1ieXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF90eXBlOwotCi1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICB0cmFjZV9wYzsKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgIHRyYWNlX25wYzsKLWxvZ2ljIFtgU0NSMV9JTUVNX0RXSURUSC0xOjBdICAgICAgIHRyYWNlX2luc3RyOwotCi10eXBlX3NjcjFfY3NyX3RyYWNlX3MgICAgICAgICAgICAgICBjc3JfdHJhY2UxOwotCi0vLyBGaWxlIGhhbmRsZXJzCi1pbnQgdW5zaWduZWQgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZV9maGFuZGxlcl9jb3JlOwotCi0vLyBNUFJGIHNpZ25hbHMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wcmZfdXA7Ci1sb2dpYyBbYFNDUjFfTVBSRl9BV0lEVEgtMTowXSAgICAgICBtcHJmX2FkZHI7Ci1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICBtcHJmX3dkYXRhOwotCi1zdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJ0Owotc3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9uYW1lOwotCi1gZW5kaWYgLy8gU0NSMV9UUkFDRV9MT0dfRU4KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCB0YXNrcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWBpZmRlZiBTQ1IxX1RSQUNFX0xPR19FTgotCi10YXNrIHRyYWNlX3dyaXRlX2NvbW1vbjsKLSAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIlMTZkICAiLCBjdXJyZW50X3RpbWUpOwotICAgIC8vICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiAwICAiKTsKLSAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgJXMgICIsICBldmVudF90eXBlKTsKLSAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgJTh4ICAiLCB0cmFjZV9wYyk7Ci0gICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiICU4eCAgIiwgdHJhY2VfaW5zdHIpOwotICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiAlOHggICIsIHRyYWNlX25wYyk7Ci1lbmR0YXNrIC8vIHRyYWNlX3dyaXRlX2NvbW1vbgotCi10YXNrIHRyYWNlX3dyaXRlX2ludF93YWxpYXM7Ci0gICAgY2FzZSAobXByZl9hZGRyKQotICAgICAgICAwICA6ICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgeDAwX3plcm8gICIpOwotICAgICAgICAxICA6ICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgeDAxX3JhICAgICIpOwotICAgICAgICAyICA6ICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgeDAyX3NwICAgICIpOwotICAgICAgICAzICA6ICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgeDAzX2dwICAgICIpOwotICAgICAgICA0ICA6ICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgeDA0X3RwICAgICIpOwotICAgICAgICA1ICA6ICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgeDA1X3QwICAgICIpOwotICAgICAgICA2ICA6ICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgeDA2X3QxICAgICIpOwotICAgICAgICA3ICA6ICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgeDA3X3QyICAgICIpOwotICAgICAgICA4ICA6ICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgeDA4X3MwICAgICIpOwotICAgICAgICA5ICA6ICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgeDA5X3MxICAgICIpOwotICAgICAgICAxMCA6ICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgeDEwX2EwICAgICIpOwotICAgICAgICAxMSA6ICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgeDExX2ExICAgICIpOwotICAgICAgICAxMiA6ICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgeDEyX2EyICAgICIpOwotICAgICAgICAxMyA6ICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgeDEzX2EzICAgICIpOwotICAgICAgICAxNCA6ICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgeDE0X2E0ICAgICIpOwotICAgICAgICAxNSA6ICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgeDE1X2E1ICAgICIpOwotYGlmbmRlZiBTQ1IxX1JWRV9FWFQKLSAgICAgICAgMTYgOiAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIHgxNl9hNiAgICAiKTsKLSAgICAgICAgMTcgOiAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIHgxN19hNyAgICAiKTsKLSAgICAgICAgMTggOiAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIHgxOF9zMiAgICAiKTsKLSAgICAgICAgMTkgOiAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIHgxOV9zMyAgICAiKTsKLSAgICAgICAgMjAgOiAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIHgyMF9zNCAgICAiKTsKLSAgICAgICAgMjEgOiAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIHgyMV9zNSAgICAiKTsKLSAgICAgICAgMjIgOiAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIHgyMl9zNiAgICAiKTsKLSAgICAgICAgMjMgOiAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIHgyM19zNyAgICAiKTsKLSAgICAgICAgMjQgOiAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIHgyNF9zOCAgICAiKTsKLSAgICAgICAgMjUgOiAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIHgyNV9zOSAgICAiKTsKLSAgICAgICAgMjYgOiAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIHgyNl9zMTAgICAiKTsKLSAgICAgICAgMjcgOiAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIHgyN19zMTEgICAiKTsKLSAgICAgICAgMjggOiAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIHgyOF90MyAgICAiKTsKLSAgICAgICAgMjkgOiAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIHgyOV90NCAgICAiKTsKLSAgICAgICAgMzAgOiAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIHgzMF90NSAgICAiKTsKLSAgICAgICAgMzEgOiAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIHgzMV90NiAgICAiKTsKLWBlbmRpZiAvLyBTQ1IxX1JWRV9FWFQKLSAgICAgICAgZGVmYXVsdDogYmVnaW4KLSAgICAgICAgICAgICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIHh4eCAgICAgICAiKTsKLSAgICAgICAgZW5kCi0gICAgZW5kY2FzZQotZW5kdGFzawotCi1gZW5kaWYgLy8gU0NSMV9UUkFDRV9MT0dfRU4KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBNUFJGIFJlZ2lzdGVycyBhc3NpZ25tZW50Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWFzc2lnbiBtcHJmX2ludF9hbGlhcy5JTlRfMDBfWkVSTyAgID0gJzA7Ci1hc3NpZ24gbXByZl9pbnRfYWxpYXMuSU5UXzAxX1JBICAgICA9IG1wcmYydHJhY2VfaW50X2lbMV07Ci1hc3NpZ24gbXByZl9pbnRfYWxpYXMuSU5UXzAyX1NQICAgICA9IG1wcmYydHJhY2VfaW50X2lbMl07Ci1hc3NpZ24gbXByZl9pbnRfYWxpYXMuSU5UXzAzX0dQICAgICA9IG1wcmYydHJhY2VfaW50X2lbM107Ci1hc3NpZ24gbXByZl9pbnRfYWxpYXMuSU5UXzA0X1RQICAgICA9IG1wcmYydHJhY2VfaW50X2lbNF07Ci1hc3NpZ24gbXByZl9pbnRfYWxpYXMuSU5UXzA1X1QwICAgICA9IG1wcmYydHJhY2VfaW50X2lbNV07Ci1hc3NpZ24gbXByZl9pbnRfYWxpYXMuSU5UXzA2X1QxICAgICA9IG1wcmYydHJhY2VfaW50X2lbNl07Ci1hc3NpZ24gbXByZl9pbnRfYWxpYXMuSU5UXzA3X1QyICAgICA9IG1wcmYydHJhY2VfaW50X2lbN107Ci1hc3NpZ24gbXByZl9pbnRfYWxpYXMuSU5UXzA4X1MwICAgICA9IG1wcmYydHJhY2VfaW50X2lbOF07Ci1hc3NpZ24gbXByZl9pbnRfYWxpYXMuSU5UXzA5X1MxICAgICA9IG1wcmYydHJhY2VfaW50X2lbOV07Ci1hc3NpZ24gbXByZl9pbnRfYWxpYXMuSU5UXzEwX0EwICAgICA9IG1wcmYydHJhY2VfaW50X2lbMTBdOwotYXNzaWduIG1wcmZfaW50X2FsaWFzLklOVF8xMV9BMSAgICAgPSBtcHJmMnRyYWNlX2ludF9pWzExXTsKLWFzc2lnbiBtcHJmX2ludF9hbGlhcy5JTlRfMTJfQTIgICAgID0gbXByZjJ0cmFjZV9pbnRfaVsxMl07Ci1hc3NpZ24gbXByZl9pbnRfYWxpYXMuSU5UXzEzX0EzICAgICA9IG1wcmYydHJhY2VfaW50X2lbMTNdOwotYXNzaWduIG1wcmZfaW50X2FsaWFzLklOVF8xNF9BNCAgICAgPSBtcHJmMnRyYWNlX2ludF9pWzE0XTsKLWFzc2lnbiBtcHJmX2ludF9hbGlhcy5JTlRfMTVfQTUgICAgID0gbXByZjJ0cmFjZV9pbnRfaVsxNV07Ci1gaWZuZGVmIFNDUjFfUlZFX0VYVAotYXNzaWduIG1wcmZfaW50X2FsaWFzLklOVF8xNl9BNiAgICAgPSBtcHJmMnRyYWNlX2ludF9pWzE2XTsKLWFzc2lnbiBtcHJmX2ludF9hbGlhcy5JTlRfMTdfQTcgICAgID0gbXByZjJ0cmFjZV9pbnRfaVsxN107Ci1hc3NpZ24gbXByZl9pbnRfYWxpYXMuSU5UXzE4X1MyICAgICA9IG1wcmYydHJhY2VfaW50X2lbMThdOwotYXNzaWduIG1wcmZfaW50X2FsaWFzLklOVF8xOV9TMyAgICAgPSBtcHJmMnRyYWNlX2ludF9pWzE5XTsKLWFzc2lnbiBtcHJmX2ludF9hbGlhcy5JTlRfMjBfUzQgICAgID0gbXByZjJ0cmFjZV9pbnRfaVsyMF07Ci1hc3NpZ24gbXByZl9pbnRfYWxpYXMuSU5UXzIxX1M1ICAgICA9IG1wcmYydHJhY2VfaW50X2lbMjFdOwotYXNzaWduIG1wcmZfaW50X2FsaWFzLklOVF8yMl9TNiAgICAgPSBtcHJmMnRyYWNlX2ludF9pWzIyXTsKLWFzc2lnbiBtcHJmX2ludF9hbGlhcy5JTlRfMjNfUzcgICAgID0gbXByZjJ0cmFjZV9pbnRfaVsyM107Ci1hc3NpZ24gbXByZl9pbnRfYWxpYXMuSU5UXzI0X1M4ICAgICA9IG1wcmYydHJhY2VfaW50X2lbMjRdOwotYXNzaWduIG1wcmZfaW50X2FsaWFzLklOVF8yNV9TOSAgICAgPSBtcHJmMnRyYWNlX2ludF9pWzI1XTsKLWFzc2lnbiBtcHJmX2ludF9hbGlhcy5JTlRfMjZfUzEwICAgID0gbXByZjJ0cmFjZV9pbnRfaVsyNl07Ci1hc3NpZ24gbXByZl9pbnRfYWxpYXMuSU5UXzI3X1MxMSAgICA9IG1wcmYydHJhY2VfaW50X2lbMjddOwotYXNzaWduIG1wcmZfaW50X2FsaWFzLklOVF8yOF9UMyAgICAgPSBtcHJmMnRyYWNlX2ludF9pWzI4XTsKLWFzc2lnbiBtcHJmX2ludF9hbGlhcy5JTlRfMjlfVDQgICAgID0gbXByZjJ0cmFjZV9pbnRfaVsyOV07Ci1hc3NpZ24gbXByZl9pbnRfYWxpYXMuSU5UXzMwX1Q1ICAgICA9IG1wcmYydHJhY2VfaW50X2lbMzBdOwotYXNzaWduIG1wcmZfaW50X2FsaWFzLklOVF8zMV9UNiAgICAgPSBtcHJmMnRyYWNlX2ludF9pWzMxXTsKLWBlbmRpZiAvLyBTQ1IxX1JWRV9FWFQKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMZWdhY3kgdGltZSBjb3VudGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFRoZSBjb3VudGVyIGlzIGxlZnQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgY3VycmVudCBVVk0gZW52aXJvbm1lbnQKLQotaW50ICAgICB0aW1lX2NudDsKLQotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgdGltZV9jbnQgICAgPD0gMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICB0aW1lX2NudCAgICA8PSB0aW1lX2NudCArIDE7Ci0gICAgZW5kCi1lbmQKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBJbml0aWFsIHBhcnQgcGlwZWxpbmUgdHJhY2Vsb2cKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1gaWZkZWYgU0NSMV9UUkFDRV9MT0dfRU4KLS8vIEZpbGVzIG9wZW5pbmcgYW5kIHdyaXRpbmcgaW5pdGlhbCBoZWFkZXIKLWluaXRpYWwgYmVnaW4KLSAgICAkdGltZWZvcm1hdCgtOSwgMCwgIiBucyIsIDEwKTsKLSAgICAjMSBoYXJ0LmhleHRvYShzb2MycGlwZV9mdXNlX21oYXJ0aWRfaSk7Ci0KLSAgICB0cmFjZV9maGFuZGxlcl9jb3JlID0gJGZvcGVuKHsidHJhY2Vsb2dfY29yZV8iLCBoYXJ0LCAiLmxvZyJ9LCAidyIpOwotCi0gICAgLy8gV3JpdGluZyBpbml0aWFsIGhlYWRlcgotICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgICIjIFJUTF9JRCAlaFxuIiwgU0NSMV9DU1JfTUlNUElEKTsKLSAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICAiI1xuIik7Ci0gICAgLy8gJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAgIiMgUiAtIHJldHVybiBmcm9tIHRyYXA6XG4iKTsKLSAgICAvLyAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICAiIyAgICAxIC0gTVJFVFxuIik7Ci0gICAgLy8gJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAgIiMgICAgMCAtIG5vIHJldHVyblxuIik7Ci0gICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAgIiMgRXZlbnRzOlxuIik7Ci0gICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAgIiMgICAgTiAtIG5vIGV2ZW50XG4iKTsKLSAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICAiIyAgICBFIC0gZXhjZXB0aW9uXG4iKTsKLSAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICAiIyAgICBJIC0gaW50ZXJydXB0XG4iKTsKLSAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICAiIyAgICBXIC0gd2FrZXVwXG4iKTsKLWVuZAotCi0vLyBDb3JlIHJlc2V0IGxvZ2dpbmcgYW5kIGhlYWRlciBwcmludGluZwotYWx3YXlzIEAocG9zZWRnZSByc3RfbikgYmVnaW4KLSAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOwotYGlmbmRlZiBWRVJJTEFUT1IKLSAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIjICUxNHQgOiBDb3JlIFJlc2V0XG4iLCAkdGltZSgpKTsKLWBlbHNlCi0gICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIyA6IENvcmUgUmVzZXRcbiIpOwotYGVuZGlmCi0gICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKLSAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICAiIyBUZXN0OiAlc1xuIiwgdGVzdF9uYW1lKTsKLSAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICAiIyAgICAgICAgICAgVGltZSAgIik7Ci0gICAgLy8gJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAgIiBSICAiKTsKLSAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICAiIEV2ICIpOwotICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgICIgQ3Vycl9QQyAgICIpOwotICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgICIgSW5zdHIgICAgICIpOwotICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgICIgTmV4dF9QQyAgICIpOwotICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgICIgUmVnICAgICAgICIpOwotICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgICIgVmFsdWUgICAgICIpOwotICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIlxuIik7Ci0gICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKLWVuZAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIENvbW1vbiB0cmFjZSBwYXJ0Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIHRyYWNlX2ZsYWcgICA9IDEnYjE7Ci1hc3NpZ24gdHJhY2VfdXBkYXRlID0gKGV4dTJ0cmFjZV91cGRhdGVfcGNfZW5faSB8IG1wcmYydHJhY2Vfd3JfZW5faSkgJiB0cmFjZV9mbGFnOwotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICBjdXJyZW50X3RpbWUgICAgPD0gMDsKLSAgICAgICAgZXZlbnRfdHlwZSAgICAgIDw9ICJOIjsKLQotICAgICAgICB0cmFjZV9wYyAgICAgICAgPD0gJ3g7Ci0gICAgICAgIHRyYWNlX25wYyAgICAgICA8PSAneDsKLSAgICAgICAgdHJhY2VfaW5zdHIgICAgIDw9ICd4OwotCi0gICAgICAgIHRyYWNlX3VwZGF0ZV9yICA8PSAxJ2IwOwotCi0gICAgICAgIG1wcmZfdXAgICAgICAgICA8PSAnMDsKLSAgICAgICAgbXByZl9hZGRyICAgICAgIDw9ICcwOwotICAgICAgICBtcHJmX3dkYXRhICAgICAgPD0gJzA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgdHJhY2VfdXBkYXRlX3IgPD0gdHJhY2VfdXBkYXRlOwotICAgICAgICBpZiAodHJhY2VfdXBkYXRlKSBiZWdpbgotYGlmZGVmIFZFUklMQVRPUgotICAgICAgICAgICAgY3VycmVudF90aW1lICA8PSB0aW1lX2NudDsKLWBlbHNlCi0gICAgICAgICAgICBjdXJyZW50X3RpbWUgIDw9ICR0aW1lKCk7Ci1gZW5kaWYKLSAgICAgICAgICAgIHRyYWNlX3BjICAgICAgPD0gdHJhY2VfbnBjOwotICAgICAgICAgICAgdHJhY2VfbnBjICAgICA8PSBleHUydHJhY2VfdXBkYXRlX3BjX2k7Ci0gICAgICAgICAgICB0cmFjZV9pbnN0ciAgIDw9IGlmdTJ0cmFjZV9pbnN0cl9pOwotCi0gICAgICAgICAgICBpZiAoY3NyMnRyYWNlX2VfZXhjX2kpIGJlZ2luCi0gICAgICAgICAgICAgICAgLy8gRXhjZXB0aW9uCi0gICAgICAgICAgICAgICAgZXZlbnRfdHlwZSAgPD0gIkUiOwotICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBlbHNlIGlmIChjc3IydHJhY2VfZV9pcnFfaSkgYmVnaW4KLSAgICAgICAgICAgICAgICAvLyBJUlEKLSAgICAgICAgICAgICAgICBldmVudF90eXBlICA8PSAiSSI7Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIGVsc2UgaWYgKHBpcGUydHJhY2VfZV93YWtlX2kpIGJlZ2luCi0gICAgICAgICAgICAgICAgLy8gV2FrZQotICAgICAgICAgICAgICAgIGV2ZW50X3R5cGUgPD0gIlciOwotICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAvLyBpZiAoY3NyMnRyYWNlX2VfbXJldF9pKSBiZWdpbgotICAgICAgICAgICAgLy8gICAgIC8vIE1SRVQKLSAgICAgICAgICAgIC8vICAgICBldmVudF90eXBlICA8PSAiUiI7Ci0gICAgICAgICAgICAvLyBlbmQKLSAgICAgICAgICAgIGVsc2UgYmVnaW4KLSAgICAgICAgICAgICAgICAvLyBObyBldmVudAotICAgICAgICAgICAgICAgIGV2ZW50X3R5cGUgPD0gIk4iOwotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZAotCi0gICAgICAgIC8vIFdyaXRlIGxvZyBzaWduYWxzCi0gICAgICAgIG1wcmZfdXAgICAgPD0gbXByZjJ0cmFjZV93cl9lbl9pOwotICAgICAgICBtcHJmX2FkZHIgIDw9IG1wcmYydHJhY2Vfd3JfZW5faSA/IG1wcmYydHJhY2Vfd3JfYWRkcl9pIDogJ3g7Ci0gICAgICAgIG1wcmZfd2RhdGEgPD0gbXByZjJ0cmFjZV93cl9lbl9pID8gbXByZjJ0cmFjZV93cl9kYXRhX2kgOiAneDsKLSAgICBlbmQKLWVuZAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIENvcmUgTVBSRiBsb2dnaW5nCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICBpZiAodHJhY2VfdXBkYXRlX3IpIGJlZ2luCi0KLSAgICAgICAgICAgIHRyYWNlX3dyaXRlX2NvbW1vbigpOwotCi0gICAgICAgICAgICBjYXNlIChldmVudF90eXBlKQotICAgICAgICAgICAgICAgICJXIiAgICAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAvLyBXYWtldXAKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNzcl90cmFjZTEubWlwICYgY3NyX3RyYWNlMS5taWUpIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgbWlwICAgICAgICAlMDh4XG4iLCBjc3JfdHJhY2UxLm1pcCApOwotICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2Vfd3JpdGVfY29tbW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgbWllICAgICAgICAlMDh4IiwgY3NyX3RyYWNlMS5taWUgKTsKLSAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgIk4iICAgICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgIC8vIFJlZ3VsYXIKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1wcmZfdXAgJiYgbXByZl9hZGRyICE9IDApIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgeCUyZCAgICAgICUwOHgiLCBtcHJmX2FkZHIsIG1wcmZfd2RhdGEpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2Vfd3JpdGVfaW50X3dhbGlhcygpOwotICAgICAgICAgICAgICAgICAgICAgICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiICUwOHgiLCBtcHJmX3dkYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiAtLS0gICAgICAgIC0tLS0tLS0tIik7Ci0gICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICJSIiAgICAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAvLyBNUkVUCi0gICAgICAgICAgICAgICAgICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiBtc3RhdHVzICAgICUwOHgiLCBjc3JfdHJhY2UxLm1zdGF0dXMpOwotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICJFIiwgIkkiOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAvLyBJUlEvRXhjZXB0aW9uCi0gICAgICAgICAgICAgICAgICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiBtc3RhdHVzICAgICUwOHhcbiIsIGNzcl90cmFjZTEubXN0YXR1cyk7Ci0gICAgICAgICAgICAgICAgICAgIHRyYWNlX3dyaXRlX2NvbW1vbigpOwotICAgICAgICAgICAgICAgICAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgbWVwYyAgICAgICAlMDh4XG4iLCBjc3JfdHJhY2UxLm1lcGMpOwotICAgICAgICAgICAgICAgICAgICB0cmFjZV93cml0ZV9jb21tb24oKTsKLSAgICAgICAgICAgICAgICAgICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIG1jYXVzZSAgICAgJTA4eFxuIiwgY3NyX3RyYWNlMS5tY2F1c2UpOwotICAgICAgICAgICAgICAgICAgICB0cmFjZV93cml0ZV9jb21tb24oKTsKLSAgICAgICAgICAgICAgICAgICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIG10dmFsICAgICAgJTA4eCIsICAgY3NyX3RyYWNlMS5tdHZhbCk7Ci0gICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgZGVmYXVsdCA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgICJcbiIpOwotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZW5kY2FzZQotICAgICAgICAgICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAgIlxuIik7Ci0gICAgICAgIGVuZAotICAgIGVuZAotZW5kCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQ29yZSBDU1IgbG9nZ2luZwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgY3NyX3RyYWNlMS5tdHZlYyAgICAgICAgPSB7Y3NyMnRyYWNlX210dmVjX2Jhc2VfaSwgNCdkMCwgMicoY3NyMnRyYWNlX210dmVjX21vZGVfaSl9OwotICAgIGNzcl90cmFjZTEubWVwYyAgICAgICAgID0KLWBpZmRlZiBTQ1IxX1JWQ19FWFQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjc3IydHJhY2VfbWVwY19pLCAxJ2IwfTsKLWBlbHNlIC8vIFNDUjFfUlZDX0VYVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NzcjJ0cmFjZV9tZXBjX2ksIDInYjAwfTsKLWBlbmRpZiAvLyBTQ1IxX1JWQ19FWFQKLSAgICBjc3JfdHJhY2UxLm1jYXVzZSAgICAgICA9IHtjc3IydHJhY2VfbWNhdXNlX2lycV9pLCBjc3IydHJhY2VfbWNhdXNlX2VjX2l9OwotICAgIGNzcl90cmFjZTEubXR2YWwgICAgICAgID0gY3NyMnRyYWNlX210dmFsX2k7Ci0KLSAgICBjc3JfdHJhY2UxLm1zdGF0dXMgICAgICA9ICcwOwotICAgIGNzcl90cmFjZTEubWllICAgICAgICAgID0gJzA7Ci0gICAgY3NyX3RyYWNlMS5taXAgICAgICAgICAgPSAnMDsKLQotICAgIGNzcl90cmFjZTEubXN0YXR1c1tTQ1IxX0NTUl9NU1RBVFVTX01JRV9PRkZTRVRdICAgICA9IGNzcjJ0cmFjZV9tc3RhdHVzX21pZV9pOwotICAgIGNzcl90cmFjZTEubXN0YXR1c1tTQ1IxX0NTUl9NU1RBVFVTX01QSUVfT0ZGU0VUXSAgICA9IGNzcjJ0cmFjZV9tc3RhdHVzX21waWVfaTsKLSAgICBjc3JfdHJhY2UxLm1zdGF0dXNbU0NSMV9DU1JfTVNUQVRVU19NUFBfT0ZGU0VUKzE6U0NSMV9DU1JfTVNUQVRVU19NUFBfT0ZGU0VUXSAgID0gU0NSMV9DU1JfTVNUQVRVU19NUFA7Ci0gICAgY3NyX3RyYWNlMS5taWVbU0NSMV9DU1JfTUlFX01TSUVfT0ZGU0VUXSAgICAgICAgICAgID0gY3NyMnRyYWNlX21pZV9tc2llX2k7Ci0gICAgY3NyX3RyYWNlMS5taWVbU0NSMV9DU1JfTUlFX01USUVfT0ZGU0VUXSAgICAgICAgICAgID0gY3NyMnRyYWNlX21pZV9tdGllX2k7Ci0gICAgY3NyX3RyYWNlMS5taWVbU0NSMV9DU1JfTUlFX01FSUVfT0ZGU0VUXSAgICAgICAgICAgID0gY3NyMnRyYWNlX21pZV9tZWllX2k7Ci0gICAgY3NyX3RyYWNlMS5taXBbU0NSMV9DU1JfTUlFX01TSUVfT0ZGU0VUXSAgICAgICAgICAgID0gY3NyMnRyYWNlX21pcF9tc2lwX2k7Ci0gICAgY3NyX3RyYWNlMS5taXBbU0NSMV9DU1JfTUlFX01USUVfT0ZGU0VUXSAgICAgICAgICAgID0gY3NyMnRyYWNlX21pcF9tdGlwX2k7Ci0gICAgY3NyX3RyYWNlMS5taXBbU0NSMV9DU1JfTUlFX01FSUVfT0ZGU0VUXSAgICAgICAgICAgID0gY3NyMnRyYWNlX21pcF9tZWlwX2k7Ci1lbmQKLQotYGVuZGlmIC8vIFNDUjFfVFJBQ0VfTE9HX0VOCi0KLWVuZG1vZHVsZSA6IHNjcjFfdHJhY2Vsb2cKLQotYGVuZGlmIC8vIFNDUjFfVFJHVF9TSU1VTEFUSU9OCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9wcmltaXRpdmVzL3NjcjFfY2cuc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9wcmltaXRpdmVzL3NjcjFfY2cuc3YKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkYzUxM2IuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvcHJpbWl0aXZlcy9zY3IxX2NnLnN2CisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiBTeW50YWNvcmUgTExDIMKpIDIwMTYtMjAyMQotLy8gCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAotLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IFN5bnRhY29yZSBMTEMKLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8gQGZpbGUgICAgICAgPHNjcjFfY2cuc3Y+Ci0vLy8gQGJyaWVmICAgICAgU0NSMSBjbG9jayBnYXRlIHByaW1pdGl2ZQotLy8vCi0KLWBpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgotCi1gaWZkZWYgU0NSMV9DTEtDVFJMX0VOCi1tb2R1bGUgc2NyMV9jZyAoCi0gICAgaW5wdXQgICBsb2dpYyAgIGNsaywKLSAgICBpbnB1dCAgIGxvZ2ljICAgY2xrX2VuLAotICAgIGlucHV0ICAgbG9naWMgICB0ZXN0X21vZGUsCi0gICAgb3V0cHV0ICBsb2dpYyAgIGNsa19vdXQKLSk7Ci0KLS8vIFRoZSBjb2RlIGJlbG93IGlzIGEgY2xvY2sgZ2F0ZSBtb2RlbCBmb3Igc2ltdWxhdGlvbi4KLS8vIEZvciBzeW50aGVzaXMsIGl0IHNob3VsZCBiZSByZXBsYWNlZCBieSBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYwotLy8gY2xvY2sgZ2F0ZSBjb2RlLgotCi1sb2dpYyBsYXRjaF9lbjsKLQotYWx3YXlzX2xhdGNoIGJlZ2luCi0gICAgaWYgKH5jbGspIGJlZ2luCi0gICAgICAgIGxhdGNoX2VuIDw9IHRlc3RfbW9kZSB8IGNsa19lbjsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gY2xrX291dCAgPSBsYXRjaF9lbiAmIGNsazsKLQotZW5kbW9kdWxlIDogc2NyMV9jZwotCi1gZW5kaWYgLy8gU0NSMV9DTEtDVFJMX0VOCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9wcmltaXRpdmVzL3NjcjFfcmVzZXRfY2VsbHMuc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9wcmltaXRpdmVzL3NjcjFfcmVzZXRfY2VsbHMuc3YKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3ZWFkZmEuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvcHJpbWl0aXZlcy9zY3IxX3Jlc2V0X2NlbGxzLnN2CisrKyAvZGV2L251bGwKQEAgLTEsMjQ3ICswLDAgQEAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjEKLS8vIAotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKLS8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBTeW50YWNvcmUgTExDCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vIEBmaWxlICAgICAgIDxzY3IxX3N5bmNfcnN0bi5zdj4KLS8vLyBAYnJpZWYgICAgICBDZWxscyBmb3IgcmVzZXQgaGFuZGxpbmcKLS8vLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSZXNldCBCdWZmZXIgQ2VsbAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbW9kdWxlIHNjcjFfcmVzZXRfYnVmX2NlbGwgKAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgIHJzdF9uLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgIGNsaywKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICB0ZXN0X21vZGUsCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgdGVzdF9yc3RfbiwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICByZXNldF9uX2luLAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgIHJlc2V0X25fb3V0LAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgIHJlc2V0X25fc3RhdHVzCi0pOwotCi1sb2dpYyAgICAgICByZXNldF9uX2ZmOwotbG9naWMgICAgICAgcmVzZXRfbl9zdGF0dXNfZmY7Ci1sb2dpYyAgICAgICByc3Rfbl9tdXg7Ci0KLWFzc2lnbiByc3Rfbl9tdXggPSAodGVzdF9tb2RlID09IDEnYjEpID8gdGVzdF9yc3RfbiA6IHJzdF9uOwotCi1hbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uX211eCwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKH5yc3Rfbl9tdXgpIGJlZ2luCi0gICAgICAgIHJlc2V0X25fZmYgPD0gMSdiMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICByZXNldF9uX2ZmIDw9IHJlc2V0X25faW47Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIHJlc2V0X25fb3V0ID0gKHRlc3RfbW9kZSA9PSAxJ2IxKSA/IHRlc3RfcnN0X24gOiByZXNldF9uX2ZmOwotCi1hbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uX211eCwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKH5yc3Rfbl9tdXgpIGJlZ2luCi0gICAgICAgIHJlc2V0X25fc3RhdHVzX2ZmIDw9IDEnYjA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgcmVzZXRfbl9zdGF0dXNfZmYgPD0gcmVzZXRfbl9pbjsKLSAgICBlbmQKLWVuZAotYXNzaWduIHJlc2V0X25fc3RhdHVzID0gcmVzZXRfbl9zdGF0dXNfZmY7Ci0KLWVuZG1vZHVsZSA6IHNjcjFfcmVzZXRfYnVmX2NlbGwKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUmVzZXQgQ0RDIFN5bmNocm9uaXphdGlvbiBDZWxsCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1tb2R1bGUgc2NyMV9yZXNldF9zeW5jX2NlbGwgIygKLSAgICBwYXJhbWV0ZXIgaW50IHVuc2lnbmVkIFNUQUdFU19BTU9VTlQgPSAyCi0pICgKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICByc3RfbiwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICBjbGssCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgdGVzdF9yc3RfbiwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICB0ZXN0X21vZGUsCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgcnN0X25faW4sCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgcnN0X25fb3V0Ci0pOwotCi1sb2dpYyBbU1RBR0VTX0FNT1VOVC0xOjBdICAgcnN0X25fZGZmOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX3JzdF9uX2luOwotCi1hc3NpZ24gbG9jYWxfcnN0X25faW4gPSAodGVzdF9tb2RlID09IDEnYjEpID8gdGVzdF9yc3RfbiA6IHJzdF9uOwotCi1nZW5lcmF0ZQotCi1pZiAoU1RBR0VTX0FNT1VOVCA9PSAxKQotCi1iZWdpbiA6IGdlbl9yZXNldF9zeW5jX2NlbGxfc2luZ2xlCi0gICAgYWx3YXlzX2ZmIEAobmVnZWRnZSBsb2NhbF9yc3Rfbl9pbiwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgICAgIGlmICh+bG9jYWxfcnN0X25faW4pIGJlZ2luCi0gICAgICAgICAgICByc3Rfbl9kZmYgPD0gMSdiMDsKLSAgICAgICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgICAgIHJzdF9uX2RmZiA8PSByc3Rfbl9pbjsKLSAgICAgICAgZW5kCi0gICAgZW5kCi1lbmQgOiBnZW5fcmVzZXRfc3luY19jZWxsX3NpbmdsZQotCi1lbHNlIC8vIFNUQUdFU19BTU9VTlQgPiAxCi0KLWJlZ2luIDogZ2VuX3Jlc2V0X3N5bmNfY2VsbF9tdWx0aQotICAgIGFsd2F5c19mZiBAKG5lZ2VkZ2UgbG9jYWxfcnN0X25faW4sIHBvc2VkZ2UgY2xrKQotICAgIGJlZ2luCi0gICAgICAgIGlmICh+bG9jYWxfcnN0X25faW4pIGJlZ2luCi0gICAgICAgICAgICByc3Rfbl9kZmYgPD0gJzA7Ci0gICAgICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgICAgICByc3Rfbl9kZmYgPD0ge3JzdF9uX2RmZltTVEFHRVNfQU1PVU5ULTI6MF0sIHJzdF9uX2lufTsKLSAgICAgICAgZW5kCi0gICAgZW5kCi1lbmQgOiBnZW5fcmVzZXRfc3luY19jZWxsX211bHRpCi0KLWVuZGdlbmVyYXRlCi0KLWFzc2lnbiByc3Rfbl9vdXQgPSAodGVzdF9tb2RlID09IDEnYjEpID8gdGVzdF9yc3RfbiA6IHJzdF9uX2RmZltTVEFHRVNfQU1PVU5ULTFdOwotCi1lbmRtb2R1bGUgOiBzY3IxX3Jlc2V0X3N5bmNfY2VsbAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBEYXRhIENEQy9SREMgU3luY2hyb25pemF0aW9uIENlbGwKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLW1vZHVsZSBzY3IxX2RhdGFfc3luY19jZWxsICMoCi0gICAgcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU1RBR0VTX0FNT1VOVCA9IDEKLSkgKAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgIHJzdF9uLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgIGNsaywKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICBkYXRhX2luLAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgIGRhdGFfb3V0Ci0pOwotCi1sb2dpYyBbU1RBR0VTX0FNT1VOVC0xOjBdIGRhdGFfZGZmOwotCi1nZW5lcmF0ZQotCi1pZiAoU1RBR0VTX0FNT1VOVCA9PSAxKQotCi1iZWdpbiA6IGdlbl9kYXRhX3N5bmNfY2VsbF9zaW5nbGUKLSAgICBhbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykKLSAgICBiZWdpbgotICAgICAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICAgICAgZGF0YV9kZmYgPD0gMSdiMDsKLSAgICAgICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgICAgIGRhdGFfZGZmIDw9IGRhdGFfaW47Ci0gICAgICAgIGVuZAotICAgIGVuZAotZW5kIDogZ2VuX2RhdGFfc3luY19jZWxsX3NpbmdsZQotCi1lbHNlIC8vIFNUQUdFU19BTU9VTlQgPiAxCi0KLWJlZ2luIDogZ2VuX2RhdGFfc3luY19jZWxsX211bHRpCi0gICAgYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspCi0gICAgYmVnaW4KLSAgICAgICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgICAgIGRhdGFfZGZmIDw9ICcwOwotICAgICAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICAgICAgZGF0YV9kZmYgPD0ge2RhdGFfZGZmW1NUQUdFU19BTU9VTlQtMjowXSwgZGF0YV9pbn07Ci0gICAgICAgIGVuZAotICAgIGVuZAotZW5kIDogZ2VuX2RhdGFfc3luY19jZWxsX211bHRpCi0KLWVuZGdlbmVyYXRlCi0KLWFzc2lnbiBkYXRhX291dCA9IGRhdGFfZGZmW1NUQUdFU19BTU9VTlQtMV07Ci0KLWVuZG1vZHVsZSA6IHNjcjFfZGF0YV9zeW5jX2NlbGwKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUmVzZXQgLyBSREMgUXVhbGlmeWVyIEFkYXB0ZXIgQ2VsbAotLy8gICAoUmVzZXQgR2VuZXJhdGlvbiBDZWxsIHcvIFJEQyBRdWFsaWZ5ZXIgQWRhcHRhdGlvbiBjaXJjdWl0cnkpCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBUb3RhbCBzdGFnZXMgYW1vdW50ID0KLS8vICAgIDEgRnJvbnQgU3luYyBzdGFnZSBcCi0vLyAgKyAxIChkZWxheSBpbnRyb2R1Y2VkIGJ5IHRoZSByZXNldCBvdXRwdXQgYnVmZmVyIHJlZ2lzdGVyKQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbW9kdWxlIHNjcjFfcmVzZXRfcWxmeV9hZGFwdGVyX2NlbGxfc3luYyAoCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgcnN0X24sCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgY2xrLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgIHRlc3RfcnN0X24sCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgdGVzdF9tb2RlLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgIHJlc2V0X25faW5fc3luYywKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICByZXNldF9uX291dF9xbGZ5LAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgIHJlc2V0X25fb3V0LAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgIHJlc2V0X25fc3RhdHVzCi0pOwotCi1sb2dpYyByc3Rfbl9tdXg7Ci1sb2dpYyByZXNldF9uX2Zyb250X2ZmOwotCi0vLyBGcm9udCBzeW5jIHN0YWdlCi1hc3NpZ24gcnN0X25fbXV4ID0gKHRlc3RfbW9kZSA9PSAxJ2IxKSA/IHRlc3RfcnN0X24gOiByc3RfbjsKLQotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3Rfbl9tdXgsIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X25fbXV4KSBiZWdpbgotICAgICAgICByZXNldF9uX2Zyb250X2ZmICAgIDw9IDEnYjA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgcmVzZXRfbl9mcm9udF9mZiAgICA8PSByZXNldF9uX2luX3N5bmM7Ci0gICAgZW5kCi1lbmQKLQotLy8gICBTeW5jIHJlc2V0IG91dHB1dCBmb3IgYWxsIHJlc2V0IHF1YWxpZmllciBjaGFpbnMgdGFyZ2V0aW5nIHRoaXMgcmVzZXQgZG9tYWluCi0vLyAoZm9yIHJlc2V0LWRvbWFpbi1jcm9zc2luZ3Mgd2l0aCB0aGUgZ2l2ZW4gcmVzZXQgZG9tYWluIGFzIGEgZGVzdGluYXRpb24pLgotYXNzaWduIHJlc2V0X25fb3V0X3FsZnkgPSByZXNldF9uX2Zyb250X2ZmOwotCi0vLyBSZXNldCBvdXRwdXQgYnVmZmVyCi1zY3IxX3Jlc2V0X2J1Zl9jZWxsCi1pX3Jlc2V0X291dHB1dF9idWYgKAotICAgIC5yc3RfbiAgICAgICAgICAgICAgKHJzdF9uKSwKLSAgICAuY2xrICAgICAgICAgICAgICAgIChjbGspLAotICAgIC50ZXN0X21vZGUgICAgICAgICAgKHRlc3RfbW9kZSksCi0gICAgLnRlc3RfcnN0X24gICAgICAgICAodGVzdF9yc3RfbiksCi0gICAgLnJlc2V0X25faW4gICAgICAgICAocmVzZXRfbl9mcm9udF9mZiksCi0gICAgLnJlc2V0X25fb3V0ICAgICAgICAocmVzZXRfbl9vdXQpLAotICAgIC5yZXNldF9uX3N0YXR1cyAgICAgKHJlc2V0X25fc3RhdHVzKQotKTsKLQotZW5kbW9kdWxlIDogc2NyMV9yZXNldF9xbGZ5X2FkYXB0ZXJfY2VsbF9zeW5jCi0KLW1vZHVsZSBzY3IxX3Jlc2V0X2FuZDJfY2VsbCAoCi0gICAgaW5wdXQgICBsb2dpYyBbMTowXSAgICAgcnN0X25faW4sCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgdGVzdF9yc3RfbiwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICB0ZXN0X21vZGUsCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgcnN0X25fb3V0Ci0pOwotCi1hc3NpZ24gcnN0X25fb3V0ID0gKHRlc3RfbW9kZSA9PSAxJ2IxKSA/IHRlc3RfcnN0X24gOiAoJnJzdF9uX2luKTsKLQotZW5kbW9kdWxlIDogc2NyMV9yZXNldF9hbmQyX2NlbGwKLQotCi1tb2R1bGUgc2NyMV9yZXNldF9hbmQzX2NlbGwgKAotICAgIGlucHV0ICAgbG9naWMgWzI6MF0gICAgIHJzdF9uX2luLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgIHRlc3RfcnN0X24sCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgdGVzdF9tb2RlLAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgIHJzdF9uX291dAotKTsKLQotYXNzaWduIHJzdF9uX291dCA9ICh0ZXN0X21vZGUgPT0gMSdiMSkgPyB0ZXN0X3JzdF9uIDogKCZyc3Rfbl9pbik7Ci0KLWVuZG1vZHVsZSA6IHNjcjFfcmVzZXRfYW5kM19jZWxsCi0KLQotbW9kdWxlIHNjcjFfcmVzZXRfbXV4Ml9jZWxsICgKLSAgICBpbnB1dCAgIGxvZ2ljIFsxOjBdICAgICByc3Rfbl9pbiwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICBzZWxlY3QsCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgdGVzdF9yc3RfbiwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICB0ZXN0X21vZGUsCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgcnN0X25fb3V0Ci0pOwotCi1hc3NpZ24gcnN0X25fb3V0ID0gKHRlc3RfbW9kZSA9PSAxJ2IxKSA/IHRlc3RfcnN0X24gOiByc3Rfbl9pbltzZWxlY3RdOwotCi1lbmRtb2R1bGUgOiBzY3IxX3Jlc2V0X211eDJfY2VsbApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvc2NyMV9jbGtfY3RybC5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3NjcjFfY2xrX2N0cmwuc3YKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyZmM4MzcuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvc2NyMV9jbGtfY3RybC5zdgorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjEKLS8vIAotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKLS8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBTeW50YWNvcmUgTExDCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vIEBmaWxlICAgICAgIDxzY3IxX2Nsa19jdHJsLnN2PgotLy8vIEBicmllZiAgICAgIFNDUjEgY2xvY2sgY29udHJvbAotLy8vCi0KLWBpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgotCi1gaWZkZWYgU0NSMV9DTEtDVFJMX0VOCi1tb2R1bGUgc2NyMV9jbGtfY3RybCAoCi0gICAgaW5wdXQgICBsb2dpYyAgIGNsaywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2xvY2sgY29udHJvbCBtb2R1bGUgY2xvY2sKLSAgICBpbnB1dCAgIGxvZ2ljICAgcnN0X24sICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDbG9jayBjb250cm9sIG1vZHVsZSByZXNldAotICAgIGlucHV0ICAgbG9naWMgICB0ZXN0X21vZGUsICAgICAgICAgICAgICAgICAgICAgIC8vIERGVCBUZXN0IE1vZGUKLSAgICBpbnB1dCAgIGxvZ2ljICAgdGVzdF9yc3RfbiwgICAgICAgICAgICAgICAgICAgICAvLyBERlQgVGVzdCByZXNldAotCi0gICAgaW5wdXQgICBsb2dpYyAgIHBpcGUyY2xrY3RsX3NsZWVwX3JlcV9pLCAgICAgICAgLy8gQ0xLIGRpc2FibGUgcmVxdWVzdCBmcm9tIHBpcGUKLSAgICBpbnB1dCAgIGxvZ2ljICAgcGlwZTJjbGtjdGxfd2FrZV9yZXFfaSwgICAgICAgICAvLyBDTEsgZW5hYmxlIHJlcXVlc3QgZnJvbSBwaXBlCi0KLSAgICBvdXRwdXQgIGxvZ2ljICAgY2xrY3RsMnBpcGVfY2xrX2Fsd19vbl9vLCAgICAgICAvLyBOb3QgZ2F0ZWQgcGlwZSBDTEsKLSAgICBvdXRwdXQgIGxvZ2ljICAgY2xrY3RsMnBpcGVfY2xrX28sICAgICAgICAgICAgICAvLyBHYXRlZCBwaXBlCi0gICAgb3V0cHV0ICBsb2dpYyAgIGNsa2N0bDJwaXBlX2Nsa19lbl9vLCAgICAgICAgICAgLy8gQ0xLIGVuYWJsZWQgZmxhZwotICAgIG91dHB1dCAgbG9naWMgICBjbGtjdGwycGlwZV9jbGtfZGJnY19vICAgICAgICAgIC8vIENMSyBmb3IgcGlwZSBkZWJ1ZyBzdWJzeXN0ZW0KLSk7Ci0KLWxvZ2ljIGN0cmxfcnN0X247Ci0KLWFzc2lnbiBjbGtjdGwycGlwZV9jbGtfYWx3X29uX28gPSBjbGs7Ci1hc3NpZ24gY2xrY3RsMnBpcGVfY2xrX2RiZ2NfbyAgID0gY2xrOwotYXNzaWduIGN0cmxfcnN0X24gICA9ICh0ZXN0X21vZGUpID8gdGVzdF9yc3RfbiA6IHJzdF9uOwotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSBjdHJsX3JzdF9uKSBiZWdpbgotICAgIGlmICh+Y3RybF9yc3RfbikgYmVnaW4KLSAgICAgICAgY2xrY3RsMnBpcGVfY2xrX2VuX28gPD0gMSdiMTsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICBpZiAoY2xrY3RsMnBpcGVfY2xrX2VuX28pIGJlZ2luCi0gICAgICAgICAgICBpZiAocGlwZTJjbGtjdGxfc2xlZXBfcmVxX2kgJiB+cGlwZTJjbGtjdGxfd2FrZV9yZXFfaSkgYmVnaW4KLSAgICAgICAgICAgICAgICBjbGtjdGwycGlwZV9jbGtfZW5fbyA8PSAxJ2IwOwotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZCBlbHNlIGJlZ2luIC8vIH5jbGtjdGwycGlwZV9jbGtfZW5fbwotICAgICAgICAgICAgaWYgKHBpcGUyY2xrY3RsX3dha2VfcmVxX2kpIGJlZ2luCi0gICAgICAgICAgICAgICAgY2xrY3RsMnBpcGVfY2xrX2VuX28gPD0gMSdiMTsKLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmQgLy8gcGlwZWxpbmUKLSAgICBlbmQKLWVuZAotCi1zY3IxX2NnIGlfc2NyMV9jZ19waXBlICgKLSAgICAuY2xrICAgICAgICAoY2xrICAgICAgICAgICAgICAgICApLAotICAgIC5jbGtfZW4gICAgIChjbGtjdGwycGlwZV9jbGtfZW5fbyksCi0gICAgLnRlc3RfbW9kZSAgKHRlc3RfbW9kZSAgICAgICAgICAgKSwKLSAgICAuY2xrX291dCAgICAoY2xrY3RsMnBpcGVfY2xrX28gICApCi0pOwotCi1lbmRtb2R1bGUgOiBzY3IxX2Nsa19jdHJsCi0KLWBlbmRpZiAvLyBTQ1IxX0NMS0NUUkxfRU4KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3NjcjFfY29yZV90b3Auc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9zY3IxX2NvcmVfdG9wLnN2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmJiYjEwLi4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3NjcjFfY29yZV90b3Auc3YKKysrIC9kZXYvbnVsbApAQCAtMSw1MzcgKzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjEKLS8vIAotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKLS8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBTeW50YWNvcmUgTExDCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vIEBmaWxlICAgICAgIDxzY3IxX2NvcmVfdG9wLnN2PgotLy8vIEBicmllZiAgICAgIFNDUjEgY29yZSB0b3AKLS8vLwotCi1gaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKLWBpbmNsdWRlICJzY3IxX2FyY2hfdHlwZXMuc3ZoIgotYGluY2x1ZGUgInNjcjFfbWVtaWYuc3ZoIgotCi1gaWZkZWYgU0NSMV9EQkdfRU4KLWBpbmNsdWRlICJzY3IxX3RhcGMuc3ZoIgotYGluY2x1ZGUgInNjcjFfZG0uc3ZoIgotYGluY2x1ZGUgInNjcjFfaGR1LnN2aCIKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi1gaWZkZWYgU0NSMV9JUElDX0VOCi1gaW5jbHVkZSAic2NyMV9pcGljLnN2aCIKLWBlbmRpZiAvLyBTQ1IxX0lQSUNfRU4KLQotbW9kdWxlIHNjcjFfY29yZV90b3AgKAotICAgIC8vIENvbW1vbgotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB3cnVwX3JzdF9uLCAgICAgICAgICAgICAgICAvLyBQb3dlci1VcCByZXNldAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLCAgICAgICAgICAgICAgICAgICAgICAvLyBSZWd1bGFyIHJlc2V0Ci0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1X3JzdF9uLCAgICAgICAgICAgICAgICAgIC8vIENQVSByZXNldAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfbW9kZSwgICAgICAgICAgICAgICAgICAvLyBERlQgVGVzdCBNb2RlCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9yc3RfbiwgICAgICAgICAgICAgICAgIC8vIERGVCBUZXN0IFJlc2V0Ci0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvcmUgY2xvY2sKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX3JzdF9uX28sICAgICAgICAgICAgICAgLy8gQ29yZSByZXNldAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfcmRjX3FsZnlfbywgICAgICAgICAgICAvLyBDb3JlIFJEQyBxdWFsaWZpZXIKLSAgICBvdXRwdXQgIGxvZ2ljICAgWzQ4OjBdICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2RlYnVnICAsCi1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNfcnN0X25fbywgICAgICAgICAgICAgICAgLy8gU3lzdGVtIHJlc2V0Ci0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzX3JkY19xbGZ5X28sICAgICAgICAgICAgIC8vIFN5c3RlbSBSREMgcXVhbGlmaWVyCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotICAgIC8vIEZ1c2VzCi0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgY29yZV9mdXNlX21oYXJ0aWRfaSwgICAgICAgIC8vIEZ1c2UgTUhBUlRJRCB2YWx1ZQotYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgaW5wdXQgICBsb2dpYyBbMzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY19mdXNlX2lkY29kZV9pLCAgICAgICAgIC8vIEZ1c2UgSURDT0RFIHZhbHVlCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotICAgIC8vIElSUQotYGlmZGVmIFNDUjFfSVBJQ19FTgotICAgIGlucHV0ICAgbG9naWMgW1NDUjFfSVJRX0xJTkVTX05VTS0xOjBdICAgICAgICAgIGNvcmVfaXJxX2xpbmVzX2ksICAgICAgICAgICAvLyBFeHRlcm5hbCBpbnRlcnJ1cHQgcmVxdWVzdCBsaW5lcwotYGVsc2UKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2lycV9leHRfaSwgICAgICAgICAgICAgLy8gRXh0ZXJuYWwgaW50ZXJydXB0IHJlcXVlc3QKLWBlbmRpZiAvLyBTQ1IxX0lQSUNfRU4KLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2lycV9zb2Z0X2ksICAgICAgICAgICAgLy8gU29mdHdhcmUgZ2VuZXJhdGVkIGludGVycnVwdCByZXF1ZXN0Ci0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9pcnFfbXRpbWVyX2ksICAgICAgICAgIC8vIE1hY2hpbmUgdGltZXIgaW50ZXJydXB0IHJlcXVlc3QKLQotICAgIC8vIE1lbW9yeS1tYXBwZWQgZXh0ZXJuYWwgdGltZXIKLSAgICBpbnB1dCAgIGxvZ2ljIFs2MzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX210aW1lcl92YWxfaSwgICAgICAgICAgLy8gTWFjaGluZSB0aW1lciB2YWx1ZQotCi1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICAvLyBEZWJ1ZyBJbnRlcmZhY2UKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX3Ryc3RfbiwgICAgICAgICAgICAgICAgLy8gVGVzdCBSZXNldCAoVFJTVG4pCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY190Y2ssICAgICAgICAgICAgICAgICAgIC8vIFRlc3QgQ2xvY2sgKFRDSykKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX3RtcywgICAgICAgICAgICAgICAgICAgLy8gVGVzdCBNb2RlIFNlbGVjdCAoVE1TKQotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNfdGRpLCAgICAgICAgICAgICAgICAgICAvLyBUZXN0IERhdGEgSW5wdXQgKFRESSkKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX3RkbywgICAgICAgICAgICAgICAgICAgLy8gVGVzdCBEYXRhIE91dHB1dCAoVERPKQotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNfdGRvX2VuLCAgICAgICAgICAgICAgICAvLyBURE8gRW5hYmxlLCBzaWduYWwgZm9yIFRETyBidWZmZXIgY29udHJvbAotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KLSAgICAvLyBJbnN0cnVjdGlvbiBNZW1vcnkgSW50ZXJmYWNlCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1lbTJjb3JlX3JlcV9hY2tfaSwgICAgICAgIC8vIElNRU0gcmVxdWVzdCBhY2tub3dsZWRnZQotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUyaW1lbV9yZXFfbywgICAgICAgICAgICAvLyBJTUVNIHJlcXVlc3QKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlMmltZW1fY21kX28sICAgICAgICAgICAgLy8gSU1FTSBjb21tYW5kCi0gICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfSU1FTV9BV0lEVEgtMTowXSAgICAgICAgICAgY29yZTJpbWVtX2FkZHJfbywgICAgICAgICAgIC8vIElNRU0gYWRkcmVzcwotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX0lNRU1fRFdJRFRILTE6MF0gICAgICAgICAgIGltZW0yY29yZV9yZGF0YV9pLCAgICAgICAgICAvLyBJTUVNIHJlYWQgZGF0YQotICAgIGlucHV0ICAgbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW0yY29yZV9yZXNwX2ksICAgICAgICAgICAvLyBJTUVNIHJlc3BvbnNlCi0KLSAgICAvLyBEYXRhIE1lbW9yeSBJbnRlcmZhY2UKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWVtMmNvcmVfcmVxX2Fja19pLCAgICAgICAgLy8gRE1FTSByZXF1ZXN0IGFja25vd2xlZGdlCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZTJkbWVtX3JlcV9vLCAgICAgICAgICAgIC8vIERNRU0gcmVxdWVzdAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUyZG1lbV9jbWRfbywgICAgICAgICAgICAvLyBETUVNIGNvbW1hbmQKLSAgICBvdXRwdXQgIGxvZ2ljWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUyZG1lbV93aWR0aF9vLCAgICAgICAgICAvLyBETUVNIGRhdGEgd2lkdGgKLSAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9ETUVNX0FXSURUSC0xOjBdICAgICAgICAgICBjb3JlMmRtZW1fYWRkcl9vLCAgICAgICAgICAgLy8gRE1FTSBhZGRyZXNzCi0gICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgY29yZTJkbWVtX3dkYXRhX28sICAgICAgICAgIC8vIERNRU0gd3JpdGUgZGF0YQotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICAgICAgICAgIGRtZW0yY29yZV9yZGF0YV9pLCAgICAgICAgICAvLyBETUVNIHJlYWQgZGF0YQotICAgIGlucHV0ICAgbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW0yY29yZV9yZXNwX2kgICAgICAgICAgICAvLyBETUVNIHJlc3BvbnNlCi0pOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHBhcmFtZXRlcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgU0NSMV9DT1JFX1RPUF9SU1RfU1lOQ19TVEFHRVNfTlVNICAgICAgICAgICAgICAgPSAyOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHNpZ25hbHMgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBSZXNldCBMb2dpYwotYGlmZGVmIFNDUjFfREJHX0VOCi1gZWxzZSAvLyBTQ1IxX0RCR19FTgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9yc3Rfbl9pbl9zeW5jOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9yc3Rfbl9xbGZ5OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9yc3Rfbl9zdGF0dXM7Ci1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfcnN0X247Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX3JzdF9uX3N0YXR1c19zeW5jOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9yc3Rfc3RhdHVzOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZTJoZHVfcmRjX3FsZnk7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlMmRtX3JkY19xbGZ5OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHdydXBfcnN0X25fc3luYzsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uX3N5bmM7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHVfcnN0X25fc3luYzsKLQotYGlmZGVmIFNDUjFfREJHX0VOCi0vLyBUQVBDLURNIEludGVyZmFjZQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY19kbWlfY2hfc2VsOwotbG9naWMgW1NDUjFfREJHX0RNSV9DSF9JRF9XSURUSC0xOjBdICAgICAgICAgICAgdGFwY19kbWlfY2hfaWQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX2RtaV9jaF9jYXB0dXJlOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY19kbWlfY2hfc2hpZnQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX2RtaV9jaF91cGRhdGU7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX2RtaV9jaF90ZGk7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX2RtaV9jaF90ZG87Ci0vLwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY19kbWlfY2hfc2VsX3RhcG91dDsKLWxvZ2ljIFtTQ1IxX0RCR19ETUlfQ0hfSURfV0lEVEgtMTowXSAgICAgICAgICAgIHRhcGNfZG1pX2NoX2lkX3RhcG91dDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNfZG1pX2NoX2NhcHR1cmVfdGFwb3V0OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY19kbWlfY2hfc2hpZnRfdGFwb3V0OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY19kbWlfY2hfdXBkYXRlX3RhcG91dDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNfZG1pX2NoX3RkaV90YXBvdXQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX2RtaV9jaF90ZG9fdGFwaW47Ci0vLwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1pX3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtaV93cjsKLWxvZ2ljIFtTQ1IxX0RCR19ETUlfQUREUl9XSURUSC0xOjBdICAgICAgICAgICAgIGRtaV9hZGRyOwotbG9naWMgW1NDUjFfREJHX0RNSV9EQVRBX1dJRFRILTE6MF0gICAgICAgICAgICAgZG1pX3dkYXRhOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1pX3Jlc3A7Ci1sb2dpYyBbU0NSMV9EQkdfRE1JX0RBVEFfV0lEVEgtMTowXSAgICAgICAgICAgICBkbWlfcmRhdGE7Ci0vLyBUQVBDLVNDVSBJbnRlcmZhY2UKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNfc2N1X2NoX3NlbDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNfc2N1X2NoX3NlbF90YXBvdXQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX3NjdV9jaF90ZG87Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX2NoX3RkbzsKLS8vIFNDVSBuZXRzCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNfcnN0X247Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNfcnN0X3N0YXR1czsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdV9yc3RfbjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJkbV9yZGNfcWxmeTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5kbV9yc3RfbjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtX3JzdF9uOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFydF9yc3RfbjsKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi1gaWZkZWYgU0NSMV9EQkdfRU4KLS8vIERNLVBpcGVsaW5lIEludGVyZmFjZQotLy8gSEFSVCBSdW4gQ29udHJvbCBpL2YKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtX2FjdGl2ZTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtX2NtZF9yZXE7Ci10eXBlX3NjcjFfaGR1X2RiZ3N0YXRlc19lICAgICAgICAgICAgICAgICAgICAgICBkbV9jbWQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbV9jbWRfcmVzcDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtX2NtZF9yZXNwX3FsZnk7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbV9jbWRfcmNvZGU7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbV9oYXJ0X2V2ZW50OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1faGFydF9ldmVudF9xbGZ5OwotdHlwZV9zY3IxX2hkdV9oYXJ0c3RhdHVzX3MgICAgICAgICAgICAgICAgICAgICAgZG1faGFydF9zdGF0dXM7Ci10eXBlX3NjcjFfaGR1X2hhcnRzdGF0dXNfcyAgICAgICAgICAgICAgICAgICAgICBkbV9oYXJ0X3N0YXR1c19xbGZ5OwotLy8gUHJvZ3JhbSBCdWZmZXIgLSBIQVJUIGluc3RydWN0aW9uIGV4ZWN1dGlvbiBpL2YKLWxvZ2ljIFtTQ1IxX0hEVV9QQlVGX0FERFJfV0lEVEgtMTowXSAgICAgICAgICAgIGRtX3BidWZfYWRkcjsKLWxvZ2ljIFtTQ1IxX0hEVV9QQlVGX0FERFJfV0lEVEgtMTowXSAgICAgICAgICAgIGRtX3BidWZfYWRkcl9xbGZ5OwotbG9naWMgW1NDUjFfSERVX0NPUkVfSU5TVFJfV0lEVEgtMTowXSAgICAgICAgICAgZG1fcGJ1Zl9pbnN0cjsKLS8vIEhBUlQgQWJzdHJhY3QgRGF0YSByZWdzIGkvZgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1fZHJlZ19yZXE7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbV9kcmVnX3JlcV9xbGZ5OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1fZHJlZ193cjsKLWxvZ2ljIFtTQ1IxX0hEVV9EQVRBX1JFR19XSURUSC0xOjBdICAgICAgICAgICAgIGRtX2RyZWdfd2RhdGE7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbV9kcmVnX3Jlc3A7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbV9kcmVnX2ZhaWw7Ci1sb2dpYyBbU0NSMV9IRFVfREFUQV9SRUdfV0lEVEgtMTowXSAgICAgICAgICAgICBkbV9kcmVnX3JkYXRhOwotCi1sb2dpYyBbYFNDUjFfWExFTi0xIDogMF0gICAgICAgICAgICAgICAgICAgICAgICBkbV9wY19zYW1wbGU7Ci1sb2dpYyBbYFNDUjFfWExFTi0xIDogMF0gICAgICAgICAgICAgICAgICAgICAgICBkbV9wY19zYW1wbGVfcWxmeTsKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi1gaWZkZWYgU0NSMV9DTEtDVFJMX0VOCi0vLyBHbG9iYWwgY2xvY2sgZ2F0aW5nIGxvZ2ljCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGVlcF9waXBlOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FrZV9waXBlOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrX3BpcGU7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGtfcGlwZV9lbjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsa19kYmdjOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrX2Fsd19vbjsKLWBlbmRpZiAvLyBTQ1IxX0NMS0NUUkxfRU4KLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJlc2V0IExvZ2ljCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWBpZmRlZiBTQ1IxX0RCR19FTgotc2NyMV9zY3UgICAgaV9zY3UgKAotICAgIC8vIEdsb2JhbCBzaWduYWxzCi0gICAgLnB3cnVwX3JzdF9uICAgICAgICAgICAgICAgIChwd3J1cF9yc3RfbiAgICAgICAgKSwKLSAgICAucnN0X24gICAgICAgICAgICAgICAgICAgICAgKHJzdF9uICAgICAgICAgICAgICApLAotICAgIC5jcHVfcnN0X24gICAgICAgICAgICAgICAgICAoY3B1X3JzdF9uICAgICAgICAgICksCi0gICAgLnRlc3RfbW9kZSAgICAgICAgICAgICAgICAgICh0ZXN0X21vZGUgICAgICAgICAgKSwKLSAgICAudGVzdF9yc3RfbiAgICAgICAgICAgICAgICAgKHRlc3RfcnN0X24gICAgICAgICApLAotICAgIC5jbGsgICAgICAgICAgICAgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICAgICksCi0KLSAgICAvLyBUQVBDIHNjYW4tY2hhaW5zCi0gICAgLnRhcGNzeW5jMnNjdV9jaF9zZWxfaSAgICAgICh0YXBjX3NjdV9jaF9zZWwgICAgKSwKLSAgICAudGFwY3N5bmMyc2N1X2NoX2lkX2kgICAgICAgKCcwICAgICAgICAgICAgICAgICApLAotICAgIC50YXBjc3luYzJzY3VfY2hfY2FwdHVyZV9pICAodGFwY19kbWlfY2hfY2FwdHVyZSksCi0gICAgLnRhcGNzeW5jMnNjdV9jaF9zaGlmdF9pICAgICh0YXBjX2RtaV9jaF9zaGlmdCAgKSwKLSAgICAudGFwY3N5bmMyc2N1X2NoX3VwZGF0ZV9pICAgKHRhcGNfZG1pX2NoX3VwZGF0ZSApLAotICAgIC50YXBjc3luYzJzY3VfY2hfdGRpX2kgICAgICAodGFwY19kbWlfY2hfdGRpICAgICksCi0gICAgLnNjdTJ0YXBjc3luY19jaF90ZG9fbyAgICAgICh0YXBjX3NjdV9jaF90ZG8gICAgKSwKLQotICAgIC8vIElucHV0IHN5bmMgcmVzZXRzOgotICAgIC5uZG1fcnN0X25faSAgICAgICAgICAgICAgICAobmRtX3JzdF9uICAgICAgICAgICksCi0gICAgLmhhcnRfcnN0X25faSAgICAgICAgICAgICAgIChoYXJ0X3JzdF9uICAgICAgICAgKSwKLQotICAgIC8vIEdlbmVyYXRlZCByZXNldHMKLSAgICAuc3lzX3JzdF9uX28gICAgICAgICAgICAgICAgKHN5c19yc3RfbiAgICAgICAgICApLAotICAgIC5jb3JlX3JzdF9uX28gICAgICAgICAgICAgICAoY29yZV9yc3RfbiAgICAgICAgICksCi0gICAgLmRtX3JzdF9uX28gICAgICAgICAgICAgICAgIChkbV9yc3RfbiAgICAgICAgICAgKSwKLSAgICAuaGR1X3JzdF9uX28gICAgICAgICAgICAgICAgKGhkdV9yc3RfbiAgICAgICAgICApLAotCi0gICAgLy8gUmVzZXRzIHN0YXR1c2VzCi0gICAgLnN5c19yc3Rfc3RhdHVzX28gICAgICAgICAgIChzeXNfcnN0X3N0YXR1cyAgICAgKSwKLSAgICAuY29yZV9yc3Rfc3RhdHVzX28gICAgICAgICAgKGNvcmVfcnN0X3N0YXR1cyAgICApLAotCi0gICAgLy8gUmVzZXQgRG9tYWluIENyb3NzaW5nIChSREMpIHF1YWxpZmllcnMKLSAgICAuc3lzX3JkY19xbGZ5X28gICAgICAgICAgICAgKHN5c19yZGNfcWxmeV9vICAgICApLAotICAgIC5jb3JlX3JkY19xbGZ5X28gICAgICAgICAgICAoY29yZV9yZGNfcWxmeV9vICAgICksCi0gICAgLmNvcmUyaGR1X3JkY19xbGZ5X28gICAgICAgIChjb3JlMmhkdV9yZGNfcWxmeSAgKSwKLSAgICAuY29yZTJkbV9yZGNfcWxmeV9vICAgICAgICAgKGNvcmUyZG1fcmRjX3FsZnkgICApLAotICAgIC5oZHUyZG1fcmRjX3FsZnlfbyAgICAgICAgICAoaGR1MmRtX3JkY19xbGZ5ICAgICkKLSk7Ci0KLWFzc2lnbiBzeXNfcnN0X25fbyAgICAgID0gc3lzX3JzdF9uOwotCi0vLyBSZXNldCBpbnB1dHMgYXJlIGFzc3VtZWQgc3luY2hyb25vdXMKLWFzc2lnbiBwd3J1cF9yc3Rfbl9zeW5jID0gcHdydXBfcnN0X247Ci0KLWBlbHNlIC8vIFNDUjFfREJHX0VOCi0KLS8vIFJlc2V0IGlucHV0cyBhcmUgYXNzdW1lZCBzeW5jaHJvbm91cwotYXNzaWduIHB3cnVwX3JzdF9uX3N5bmMgICA9IHB3cnVwX3JzdF9uOwotYXNzaWduIHJzdF9uX3N5bmMgICAgICAgICA9IHJzdF9uOwotYXNzaWduIGNwdV9yc3Rfbl9zeW5jICAgICA9IGNwdV9yc3RfbjsKLWFzc2lnbiBjb3JlX3JzdF9uX2luX3N5bmMgPSByc3Rfbl9zeW5jICYgY3B1X3JzdF9uX3N5bmM7Ci0KLS8vIENvcmUgUmVzZXQ6IGNvcmVfcnN0X24KLXNjcjFfcmVzZXRfcWxmeV9hZGFwdGVyX2NlbGxfc3luYyBpX2NvcmVfcnN0bl9xbGZ5X2FkYXB0ZXJfY2VsbF9zeW5jICgKLSAgICAucnN0X24gICAgICAgICAgICAgIChwd3J1cF9yc3Rfbl9zeW5jICApLAotICAgIC5jbGsgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICksCi0gICAgLnRlc3RfcnN0X24gICAgICAgICAodGVzdF9yc3RfbiAgICAgICAgKSwKLSAgICAudGVzdF9tb2RlICAgICAgICAgICh0ZXN0X21vZGUgICAgICAgICApLAotICAgIC5yZXNldF9uX2luX3N5bmMgICAgKGNvcmVfcnN0X25faW5fc3luYyksCi0gICAgLnJlc2V0X25fb3V0X3FsZnkgICAoY29yZV9yc3Rfbl9xbGZ5ICAgKSwKLSAgICAucmVzZXRfbl9vdXQgICAgICAgIChjb3JlX3JzdF9uICAgICAgICApLAotICAgIC5yZXNldF9uX3N0YXR1cyAgICAgKGNvcmVfcnN0X25fc3RhdHVzICkKLSk7Ci0KLXNjcjFfZGF0YV9zeW5jX2NlbGwgIygKLSAgICAuU1RBR0VTX0FNT1VOVCAgICAgIChTQ1IxX0NPUkVfVE9QX1JTVF9TWU5DX1NUQUdFU19OVU0pCi0pIGlfY29yZV9yc3RuX3N0YXR1c19zeW5jICgKLSAgICAucnN0X24gICAgICAgICAgICAgICAocHdydXBfcnN0X25fc3luYyAgICAgICksCi0gICAgLmNsayAgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICAgICApLAotICAgIC5kYXRhX2luICAgICAgICAgICAgIChjb3JlX3JzdF9uX3N0YXR1cyAgICAgKSwKLSAgICAuZGF0YV9vdXQgICAgICAgICAgICAoY29yZV9yc3Rfbl9zdGF0dXNfc3luYykKLSk7Ci0KLWFzc2lnbiBjb3JlX3JzdF9zdGF0dXMgICAgICA9IH5jb3JlX3JzdF9uX3N0YXR1c19zeW5jOwotYXNzaWduIGNvcmVfcmRjX3FsZnlfbyAgICAgID0gY29yZV9yc3Rfbl9xbGZ5OwotCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLWFzc2lnbiBjb3JlX3JzdF9uX28gICAgICAgICA9IGNvcmVfcnN0X247Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gU0NSMSBwaXBlbGluZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zY3IxX3BpcGVfdG9wIGlfcGlwZV90b3AgKAotICAgIC8vIENvbnRyb2wKLSAgICAucGlwZV9yc3RfbiAgICAgICAgICAgICAgICAgICAgIChjb3JlX3JzdF9uICAgICAgICAgICAgICksCi0gICAgLnBpcGVfZGVidWcgICAgICAgICAgICAgICAgICAgICAoY29yZV9kZWJ1ZyAgICAgICAgICAgICApLAotYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgLnBpcGUyaGR1X3JkY19xbGZ5X2kgICAgICAgICAgICAoY29yZTJoZHVfcmRjX3FsZnkgICAgICApLAotICAgIC5kYmdfcnN0X24gICAgICAgICAgICAgICAgICAgICAgKGhkdV9yc3RfbiAgICAgICAgICAgICAgKSwKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotYGlmbmRlZiBTQ1IxX0NMS0NUUkxfRU4KLSAgICAuY2xrICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICAgICAgICksCi1gZWxzZSAvLyBTQ1IxX0NMS0NUUkxfRU4KLSAgICAuY2xrICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGtfcGlwZSAgICAgICAgICAgICAgICksCi0gICAgLnBpcGUyY2xrY3RsX3NsZWVwX3JlcV9vICAgICAgICAoc2xlZXBfcGlwZSAgICAgICAgICAgICApLAotICAgIC5waXBlMmNsa2N0bF93YWtlX3JlcV9vICAgICAgICAgKHdha2VfcGlwZSAgICAgICAgICAgICAgKSwKLSAgICAuY2xrY3RsMnBpcGVfY2xrX2Fsd19vbl9pICAgICAgIChjbGtfYWx3X29uICAgICAgICAgICAgICksCi0gICAgLmNsa2N0bDJwaXBlX2Nsa19kYmdjX2kgICAgICAgICAoY2xrX2RiZ2MgICAgICAgICAgICAgICApLAotICAgIC5jbGtjdGwycGlwZV9jbGtfZW5faSAgICAgICAgICAgKGNsa19waXBlX2VuICAgICAgICAgICAgKSwKLWBlbmRpZiAvLyBTQ1IxX0NMS0NUUkxfRU4KLQotICAgIC8vIEluc3RydWN0aW9uIG1lbW9yeSBpbnRlcmZhY2UKLSAgICAucGlwZTJpbWVtX3JlcV9vICAgICAgICAgICAgICAgIChjb3JlMmltZW1fcmVxX28gICAgICAgICksCi0gICAgLnBpcGUyaW1lbV9jbWRfbyAgICAgICAgICAgICAgICAoY29yZTJpbWVtX2NtZF9vICAgICAgICApLAotICAgIC5waXBlMmltZW1fYWRkcl9vICAgICAgICAgICAgICAgKGNvcmUyaW1lbV9hZGRyX28gICAgICAgKSwKLSAgICAuaW1lbTJwaXBlX3JlcV9hY2tfaSAgICAgICAgICAgIChpbWVtMmNvcmVfcmVxX2Fja19pICAgICksCi0gICAgLmltZW0ycGlwZV9yZGF0YV9pICAgICAgICAgICAgICAoaW1lbTJjb3JlX3JkYXRhX2kgICAgICApLAotICAgIC5pbWVtMnBpcGVfcmVzcF9pICAgICAgICAgICAgICAgKGltZW0yY29yZV9yZXNwX2kgICAgICAgKSwKLQotICAgIC8vIERhdGEgbWVtb3J5IGludGVyZmFjZQotICAgIC5waXBlMmRtZW1fcmVxX28gICAgICAgICAgICAgICAgKGNvcmUyZG1lbV9yZXFfbyAgICAgICAgKSwKLSAgICAucGlwZTJkbWVtX2NtZF9vICAgICAgICAgICAgICAgIChjb3JlMmRtZW1fY21kX28gICAgICAgICksCi0gICAgLnBpcGUyZG1lbV93aWR0aF9vICAgICAgICAgICAgICAoY29yZTJkbWVtX3dpZHRoX28gICAgICApLAotICAgIC5waXBlMmRtZW1fYWRkcl9vICAgICAgICAgICAgICAgKGNvcmUyZG1lbV9hZGRyX28gICAgICAgKSwKLSAgICAucGlwZTJkbWVtX3dkYXRhX28gICAgICAgICAgICAgIChjb3JlMmRtZW1fd2RhdGFfbyAgICAgICksCi0gICAgLmRtZW0ycGlwZV9yZXFfYWNrX2kgICAgICAgICAgICAoZG1lbTJjb3JlX3JlcV9hY2tfaSAgICApLAotICAgIC5kbWVtMnBpcGVfcmRhdGFfaSAgICAgICAgICAgICAgKGRtZW0yY29yZV9yZGF0YV9pICAgICAgKSwKLSAgICAuZG1lbTJwaXBlX3Jlc3BfaSAgICAgICAgICAgICAgIChkbWVtMmNvcmVfcmVzcF9pICAgICAgICksCi0KLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgIC8vIERlYnVnIGludGVyZmFjZToKLSAgICAuZGJnX2VuICAgICAgICAgICAgICAgICAgICAgICAgICgxJ2IxICAgICAgICAgICAgICAgICAgICksCi0gICAgLy8gRGVidWcgaW50ZXJmYWNlOgotICAgIC8vIERNIDwtPiBQaXBlbGluZTogSEFSVCBSdW4gQ29udHJvbCBpL2YKLSAgICAuZG0ycGlwZV9hY3RpdmVfaSAgICAgICAgICAgICAgIChkbV9hY3RpdmUgICAgICAgICAgICAgICksCi0gICAgLmRtMnBpcGVfY21kX3JlcV9pICAgICAgICAgICAgICAoZG1fY21kX3JlcSAgICAgICAgICAgICApLAotICAgIC5kbTJwaXBlX2NtZF9pICAgICAgICAgICAgICAgICAgKGRtX2NtZCAgICAgICAgICAgICAgICAgKSwKLSAgICAucGlwZTJkbV9jbWRfcmVzcF9vICAgICAgICAgICAgIChkbV9jbWRfcmVzcCAgICAgICAgICAgICksCi0gICAgLnBpcGUyZG1fY21kX3Jjb2RlX28gICAgICAgICAgICAoZG1fY21kX3Jjb2RlICAgICAgICAgICApLAotICAgIC5waXBlMmRtX2hhcnRfZXZlbnRfbyAgICAgICAgICAgKGRtX2hhcnRfZXZlbnQgICAgICAgICAgKSwKLSAgICAucGlwZTJkbV9oYXJ0X3N0YXR1c19vICAgICAgICAgIChkbV9oYXJ0X3N0YXR1cyAgICAgICAgICksCi0KLSAgICAvLyBETSA8LT4gUGlwZWxpbmU6IFByb2dyYW0gQnVmZmVyIC0gSEFSVCBpbnN0cnVjdGlvbiBleGVjdXRpb24gaS9mCi0gICAgLnBpcGUyZG1fcGJ1Zl9hZGRyX28gICAgICAgICAgICAoZG1fcGJ1Zl9hZGRyICAgICAgICAgICApLAotICAgIC5kbTJwaXBlX3BidWZfaW5zdHJfaSAgICAgICAgICAgKGRtX3BidWZfaW5zdHIgICAgICAgICAgKSwKLQotICAgIC8vIERNIDwtPiBQaXBlbGluZTogSEFSVCBBYnN0cmFjdCBEYXRhIHJlZ3MgaS9mCi0gICAgLnBpcGUyZG1fZHJlZ19yZXFfbyAgICAgICAgICAgICAoZG1fZHJlZ19yZXEgICAgICAgICAgICApLAotICAgIC5waXBlMmRtX2RyZWdfd3JfbyAgICAgICAgICAgICAgKGRtX2RyZWdfd3IgICAgICAgICAgICAgKSwKLSAgICAucGlwZTJkbV9kcmVnX3dkYXRhX28gICAgICAgICAgIChkbV9kcmVnX3dkYXRhICAgICAgICAgICksCi0gICAgLmRtMnBpcGVfZHJlZ19yZXNwX2kgICAgICAgICAgICAoZG1fZHJlZ19yZXNwICAgICAgICAgICApLAotICAgIC5kbTJwaXBlX2RyZWdfZmFpbF9pICAgICAgICAgICAgKGRtX2RyZWdfZmFpbCAgICAgICAgICAgKSwKLSAgICAuZG0ycGlwZV9kcmVnX3JkYXRhX2kgICAgICAgICAgIChkbV9kcmVnX3JkYXRhICAgICAgICAgICksCi0KLSAgICAvLyBETSA8LT4gUGlwZWxpbmU6IFBDIGkvZgotICAgIC5waXBlMmRtX3BjX3NhbXBsZV9vICAgICAgICAgICAgKGRtX3BjX3NhbXBsZSAgICAgICAgICAgKSwKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi0gICAgLy8gSVJRCi1gaWZkZWYgU0NSMV9JUElDX0VOCi0gICAgLnNvYzJwaXBlX2lycV9saW5lc19pICAgICAgICAgICAoY29yZV9pcnFfbGluZXNfaSAgICAgICApLAotYGVsc2UgLy8gU0NSMV9JUElDX0VOCi0gICAgLnNvYzJwaXBlX2lycV9leHRfaSAgICAgICAgICAgICAoY29yZV9pcnFfZXh0X2kgICAgICAgICApLAotYGVuZGlmIC8vIFNDUjFfSVBJQ19FTgotICAgIC5zb2MycGlwZV9pcnFfc29mdF9pICAgICAgICAgICAgKGNvcmVfaXJxX3NvZnRfaSAgICAgICAgKSwKLSAgICAuc29jMnBpcGVfaXJxX210aW1lcl9pICAgICAgICAgIChjb3JlX2lycV9tdGltZXJfaSAgICAgICksCi0KLSAgICAvLyBNZW1vcnktbWFwcGVkIGV4dGVybmFsIHRpbWVyCi0gICAgLnNvYzJwaXBlX210aW1lcl92YWxfaSAgICAgICAgICAoY29yZV9tdGltZXJfdmFsX2kgICAgICApLAotCi0gICAgLy8gRnVzZQotICAgIC5zb2MycGlwZV9mdXNlX21oYXJ0aWRfaSAgICAgICAgKGNvcmVfZnVzZV9taGFydGlkX2kgICAgKQotKTsKLQotCi1gaWZkZWYgU0NSMV9EQkdfRU4KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gVEFQIENvbnRyb2xsZXIgKFRBUEMpCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXNjcjFfdGFwYyBpX3RhcGMgKAotICAgIC8vIEpUQUcgc2lnbmFscwotICAgIC50YXBjX3Ryc3RfbiAgICAgICAgICAgICAgICAgICAgKHRhcGNfdHJzdF9uICAgICAgICAgICAgICAgKSwKLSAgICAudGFwY190Y2sgICAgICAgICAgICAgICAgICAgICAgICh0YXBjX3RjayAgICAgICAgICAgICAgICAgICksCi0gICAgLnRhcGNfdG1zICAgICAgICAgICAgICAgICAgICAgICAodGFwY190bXMgICAgICAgICAgICAgICAgICApLAotICAgIC50YXBjX3RkaSAgICAgICAgICAgICAgICAgICAgICAgKHRhcGNfdGRpICAgICAgICAgICAgICAgICAgKSwKLSAgICAudGFwY190ZG8gICAgICAgICAgICAgICAgICAgICAgICh0YXBjX3RkbyAgICAgICAgICAgICAgICAgICksCi0gICAgLnRhcGNfdGRvX2VuICAgICAgICAgICAgICAgICAgICAodGFwY190ZG9fZW4gICAgICAgICAgICAgICApLAotCi0gICAgLy8gRnVzZXMKLSAgICAuc29jMnRhcGNfZnVzZV9pZGNvZGVfaSAgICAgICAgICh0YXBjX2Z1c2VfaWRjb2RlX2kgICAgICAgICksCi0KLSAgICAvLyBETUkvU0NVIHNjYW4tY2hhaW5zCi0gICAgLnRhcGMydGFwY3N5bmNfc2N1X2NoX3NlbF9vICAgICAodGFwY19zY3VfY2hfc2VsX3RhcG91dCAgICApLAotICAgIC50YXBjMnRhcGNzeW5jX2RtaV9jaF9zZWxfbyAgICAgKHRhcGNfZG1pX2NoX3NlbF90YXBvdXQgICAgKSwKLSAgICAudGFwYzJ0YXBjc3luY19jaF9pZF9vICAgICAgICAgICh0YXBjX2RtaV9jaF9pZF90YXBvdXQgICAgICksCi0gICAgLnRhcGMydGFwY3N5bmNfY2hfY2FwdHVyZV9vICAgICAodGFwY19kbWlfY2hfY2FwdHVyZV90YXBvdXQpLAotICAgIC50YXBjMnRhcGNzeW5jX2NoX3NoaWZ0X28gICAgICAgKHRhcGNfZG1pX2NoX3NoaWZ0X3RhcG91dCAgKSwKLSAgICAudGFwYzJ0YXBjc3luY19jaF91cGRhdGVfbyAgICAgICh0YXBjX2RtaV9jaF91cGRhdGVfdGFwb3V0ICksCi0gICAgLnRhcGMydGFwY3N5bmNfY2hfdGRpX28gICAgICAgICAodGFwY19kbWlfY2hfdGRpX3RhcG91dCAgICApLAotICAgIC50YXBjc3luYzJ0YXBjX2NoX3Rkb19pICAgICAgICAgKHRhcGNfZG1pX2NoX3Rkb190YXBpbiAgICAgKQotKTsKLQotc2NyMV90YXBjX3N5bmNocm9uaXplciBpX3RhcGNfc3luY2hyb25pemVyICgKLSAgICAvLyBTeXN0ZW0gY29tbW9uIHNpZ25hbHMKLSAgICAucHdydXBfcnN0X24gICAgICAgICAgICAgICAgICAgIChwd3J1cF9yc3Rfbl9zeW5jICAgICAgICAgICksCi0gICAgLmRtX3JzdF9uICAgICAgICAgICAgICAgICAgICAgICAoZG1fcnN0X24gICAgICAgICAgICAgICAgICApLAotICAgIC5jbGsgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICAgICAgICAgKSwKLQotICAgIC8vIEpUQUcgY29tbW9uIHNpZ25hbHMKLSAgICAudGFwY190cnN0X24gICAgICAgICAgICAgICAgICAgICh0YXBjX3Ryc3RfbiAgICAgICAgICAgICAgICksCi0gICAgLnRhcGNfdGNrICAgICAgICAgICAgICAgICAgICAgICAodGFwY190Y2sgICAgICAgICAgICAgICAgICApLAotCi0gICAgLy8gRE1JL1NDVSBzY2FuLWNoYWlucwotICAgIC50YXBjMnRhcGNzeW5jX3NjdV9jaF9zZWxfaSAgICAgKHRhcGNfc2N1X2NoX3NlbF90YXBvdXQgICAgKSwKLSAgICAudGFwY3N5bmMyc2N1X2NoX3NlbF9vICAgICAgICAgICh0YXBjX3NjdV9jaF9zZWwgICAgICAgICAgICksCi0gICAgLnRhcGMydGFwY3N5bmNfZG1pX2NoX3NlbF9pICAgICAodGFwY19kbWlfY2hfc2VsX3RhcG91dCAgICApLAotICAgIC50YXBjc3luYzJkbWlfY2hfc2VsX28gICAgICAgICAgKHRhcGNfZG1pX2NoX3NlbCAgICAgICAgICAgKSwKLQotICAgIC50YXBjMnRhcGNzeW5jX2NoX2lkX2kgICAgICAgICAgKHRhcGNfZG1pX2NoX2lkX3RhcG91dCAgICAgKSwKLSAgICAudGFwY3N5bmMyY29yZV9jaF9pZF9vICAgICAgICAgICh0YXBjX2RtaV9jaF9pZCAgICAgICAgICAgICksCi0gICAgLnRhcGMydGFwY3N5bmNfY2hfY2FwdHVyZV9pICAgICAodGFwY19kbWlfY2hfY2FwdHVyZV90YXBvdXQpLAotICAgIC50YXBjc3luYzJjb3JlX2NoX2NhcHR1cmVfbyAgICAgKHRhcGNfZG1pX2NoX2NhcHR1cmUgICAgICAgKSwKLSAgICAudGFwYzJ0YXBjc3luY19jaF9zaGlmdF9pICAgICAgICh0YXBjX2RtaV9jaF9zaGlmdF90YXBvdXQgICksCi0gICAgLnRhcGNzeW5jMmNvcmVfY2hfc2hpZnRfbyAgICAgICAodGFwY19kbWlfY2hfc2hpZnQgICAgICAgICApLAotICAgIC50YXBjMnRhcGNzeW5jX2NoX3VwZGF0ZV9pICAgICAgKHRhcGNfZG1pX2NoX3VwZGF0ZV90YXBvdXQgKSwKLSAgICAudGFwY3N5bmMyY29yZV9jaF91cGRhdGVfbyAgICAgICh0YXBjX2RtaV9jaF91cGRhdGUgICAgICAgICksCi0gICAgLnRhcGMydGFwY3N5bmNfY2hfdGRpX2kgICAgICAgICAodGFwY19kbWlfY2hfdGRpX3RhcG91dCAgICApLAotICAgIC50YXBjc3luYzJjb3JlX2NoX3RkaV9vICAgICAgICAgKHRhcGNfZG1pX2NoX3RkaSAgICAgICAgICAgKSwKLSAgICAudGFwYzJ0YXBjc3luY19jaF90ZG9faSAgICAgICAgICh0YXBjX2RtaV9jaF90ZG9fdGFwaW4gICAgICksCi0gICAgLnRhcGNzeW5jMmNvcmVfY2hfdGRvX28gICAgICAgICAodGFwY19jaF90ZG8gICAgICAgICAgICAgICApCi0pOwotYXNzaWduIHRhcGNfY2hfdGRvID0gKHRhcGNfc2N1X2NoX3RkbyAmIHRhcGNfc2N1X2NoX3NlbCkKLSAgICAgICAgICAgICAgICAgICB8ICh0YXBjX2RtaV9jaF90ZG8gJiB0YXBjX2RtaV9jaF9zZWwpOwotCi1zY3IxX2RtaSBpX2RtaSAoCi0gICAgLnJzdF9uICAgICAgICAgICAgICAgICAgICAgIChkbV9yc3RfbiAgICAgICAgICAgKSwKLSAgICAuY2xrICAgICAgICAgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICApLAotCi0gICAgLy8gVEFQIHNjYW4tY2hhaW5zCi0gICAgLnRhcGNzeW5jMmRtaV9jaF9zZWxfaSAgICAgICh0YXBjX2RtaV9jaF9zZWwgICAgKSwKLSAgICAudGFwY3N5bmMyZG1pX2NoX2lkX2kgICAgICAgKHRhcGNfZG1pX2NoX2lkICAgICApLAotICAgIC50YXBjc3luYzJkbWlfY2hfY2FwdHVyZV9pICAodGFwY19kbWlfY2hfY2FwdHVyZSksCi0gICAgLnRhcGNzeW5jMmRtaV9jaF9zaGlmdF9pICAgICh0YXBjX2RtaV9jaF9zaGlmdCAgKSwKLSAgICAudGFwY3N5bmMyZG1pX2NoX3VwZGF0ZV9pICAgKHRhcGNfZG1pX2NoX3VwZGF0ZSApLAotICAgIC50YXBjc3luYzJkbWlfY2hfdGRpX2kgICAgICAodGFwY19kbWlfY2hfdGRpICAgICksCi0gICAgLmRtaTJ0YXBjc3luY19jaF90ZG9fbyAgICAgICh0YXBjX2RtaV9jaF90ZG8gICAgKSwKLQotICAgIC8vIERNSQotICAgIC5kbTJkbWlfcmVzcF9pICAgICAgICAgICAgICAoZG1pX3Jlc3AgICAgICAgICAgICksCi0gICAgLmRtMmRtaV9yZGF0YV9pICAgICAgICAgICAgIChkbWlfcmRhdGEgICAgICAgICAgKSwKLSAgICAuZG1pMmRtX3JlcV9vICAgICAgICAgICAgICAgKGRtaV9yZXEgICAgICAgICAgICApLAotICAgIC5kbWkyZG1fd3JfbyAgICAgICAgICAgICAgICAoZG1pX3dyICAgICAgICAgICAgICksCi0gICAgLmRtaTJkbV9hZGRyX28gICAgICAgICAgICAgIChkbWlfYWRkciAgICAgICAgICAgKSwKLSAgICAuZG1pMmRtX3dkYXRhX28gICAgICAgICAgICAgKGRtaV93ZGF0YSAgICAgICAgICApCi0pOwotCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotCi1gaWZkZWYgU0NSMV9EQkdfRU4KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBEZWJ1ZyBNb2R1bGUgKERNKQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1hc3NpZ24gZG1fY21kX3Jlc3BfcWxmeSAgICA9IGRtX2NtZF9yZXNwICAgJiB7JGJpdHMoZG1fY21kX3Jlc3Ape2hkdTJkbV9yZGNfcWxmeX19OwotYXNzaWduIGRtX2hhcnRfZXZlbnRfcWxmeSAgPSBkbV9oYXJ0X2V2ZW50ICYgeyRiaXRzKGRtX2hhcnRfZXZlbnQpe2hkdTJkbV9yZGNfcWxmeX19OwotYXNzaWduIGRtX2hhcnRfc3RhdHVzX3FsZnkuZGJnX3N0YXRlID0gaGR1MmRtX3JkY19xbGZ5ID8gZG1faGFydF9zdGF0dXMuZGJnX3N0YXRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTQ1IxX0hEVV9EQkdTVEFURV9SRVNFVDsKLWFzc2lnbiBkbV9oYXJ0X3N0YXR1c19xbGZ5LmV4Y2VwdCAgICA9IGRtX2hhcnRfc3RhdHVzLmV4Y2VwdDsKLWFzc2lnbiBkbV9oYXJ0X3N0YXR1c19xbGZ5LmVicmVhayAgICA9IGRtX2hhcnRfc3RhdHVzLmVicmVhazsKLWFzc2lnbiBkbV9wYnVmX2FkZHJfcWxmeSAgID0gZG1fcGJ1Zl9hZGRyICAmIHskYml0cyhkbV9wYnVmX2FkZHIpe2hkdTJkbV9yZGNfcWxmeX19OwotYXNzaWduIGRtX2RyZWdfcmVxX3FsZnkgICAgPSBkbV9kcmVnX3JlcSAgICYgeyRiaXRzKGRtX2RyZWdfcmVxKXtoZHUyZG1fcmRjX3FsZnl9fTsKLWFzc2lnbiBkbV9wY19zYW1wbGVfcWxmeSAgID0gZG1fcGNfc2FtcGxlICAmIHskYml0cyhkbV9wY19zYW1wbGUpe2NvcmUyZG1fcmRjX3FsZnl9fTsKLQotc2NyMV9kbSBpX2RtICgKLSAgICAvLyBDb21tb24gc2lnbmFscwotICAgIC5yc3RfbiAgICAgICAgICAgICAgICAgICAgICAoZG1fcnN0X24gICAgICAgICAgICAgICApLAotICAgIC5jbGsgICAgICAgICAgICAgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICAgICAgICApLAotCi0gICAgLy8gRE0gaW50ZXJuYWwgaW50ZXJmYWNlCi0gICAgLmRtaTJkbV9yZXFfaSAgICAgICAgICAgICAgIChkbWlfcmVxICAgICAgICAgICAgICAgICksCi0gICAgLmRtaTJkbV93cl9pICAgICAgICAgICAgICAgIChkbWlfd3IgICAgICAgICAgICAgICAgICksCi0gICAgLmRtaTJkbV9hZGRyX2kgICAgICAgICAgICAgIChkbWlfYWRkciAgICAgICAgICAgICAgICksCi0gICAgLmRtaTJkbV93ZGF0YV9pICAgICAgICAgICAgIChkbWlfd2RhdGEgICAgICAgICAgICAgICksCi0gICAgLmRtMmRtaV9yZXNwX28gICAgICAgICAgICAgIChkbWlfcmVzcCAgICAgICAgICAgICAgICksCi0gICAgLmRtMmRtaV9yZGF0YV9vICAgICAgICAgICAgIChkbWlfcmRhdGEgICAgICAgICAgICAgICksCi0KLSAgICAvLyBETSA8LT4gUGlwZWxpbmU6IEhBUlQgUnVuIENvbnRyb2wgaS9mCi0gICAgLm5kbV9yc3Rfbl9vICAgICAgICAgICAgICAgIChuZG1fcnN0X24gICAgICAgICAgICAgICksCi0gICAgLmhhcnRfcnN0X25fbyAgICAgICAgICAgICAgIChoYXJ0X3JzdF9uICAgICAgICAgICAgICksCi0gICAgLmRtMnBpcGVfYWN0aXZlX28gICAgICAgICAgIChkbV9hY3RpdmUgICAgICAgICAgICAgICksCi0gICAgLmRtMnBpcGVfY21kX3JlcV9vICAgICAgICAgIChkbV9jbWRfcmVxICAgICAgICAgICAgICksCi0gICAgLmRtMnBpcGVfY21kX28gICAgICAgICAgICAgIChkbV9jbWQgICAgICAgICAgICAgICAgICksCi0gICAgLnBpcGUyZG1fY21kX3Jlc3BfaSAgICAgICAgIChkbV9jbWRfcmVzcF9xbGZ5ICAgICAgICksCi0gICAgLnBpcGUyZG1fY21kX3Jjb2RlX2kgICAgICAgIChkbV9jbWRfcmNvZGUgICAgICAgICAgICksCi0gICAgLnBpcGUyZG1faGFydF9ldmVudF9pICAgICAgIChkbV9oYXJ0X2V2ZW50X3FsZnkgICAgICksCi0gICAgLnBpcGUyZG1faGFydF9zdGF0dXNfaSAgICAgIChkbV9oYXJ0X3N0YXR1c19xbGZ5ICAgICksCi0KLSAgICAuc29jMmRtX2Z1c2VfbWhhcnRpZF9pICAgICAgKGNvcmVfZnVzZV9taGFydGlkX2kgICAgKSwKLSAgICAucGlwZTJkbV9wY19zYW1wbGVfaSAgICAgICAgKGRtX3BjX3NhbXBsZV9xbGZ5ICAgICAgKSwKLQotICAgIC8vIERNIDwtPiBQaXBlbGluZTogSEFSVCBBYnN0cmFjdCBDb21tYW5kIC8gUHJvZ3JhbSBCdWZmZXIgaS9mCi0gICAgLnBpcGUyZG1fcGJ1Zl9hZGRyX2kgICAgICAgIChkbV9wYnVmX2FkZHJfcWxmeSAgICAgICksCi0gICAgLmRtMnBpcGVfcGJ1Zl9pbnN0cl9vICAgICAgIChkbV9wYnVmX2luc3RyICAgICAgICAgICksCi0KLSAgICAvLyBETSA8LT4gUGlwZWxpbmU6IEhBUlQgQWJzdHJhY3QgRGF0YSByZWdzIGkvZgotICAgIC5waXBlMmRtX2RyZWdfcmVxX2kgICAgICAgICAoZG1fZHJlZ19yZXFfcWxmeSAgICAgICApLAotICAgIC5waXBlMmRtX2RyZWdfd3JfaSAgICAgICAgICAoZG1fZHJlZ193ciAgICAgICAgICAgICApLAotICAgIC5waXBlMmRtX2RyZWdfd2RhdGFfaSAgICAgICAoZG1fZHJlZ193ZGF0YSAgICAgICAgICApLAotICAgIC5kbTJwaXBlX2RyZWdfcmVzcF9vICAgICAgICAoZG1fZHJlZ19yZXNwICAgICAgICAgICApLAotICAgIC5kbTJwaXBlX2RyZWdfZmFpbF9vICAgICAgICAoZG1fZHJlZ19mYWlsICAgICAgICAgICApLAotICAgIC5kbTJwaXBlX2RyZWdfcmRhdGFfbyAgICAgICAoZG1fZHJlZ19yZGF0YSAgICAgICAgICApCi0pOwotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KLQotYGlmZGVmIFNDUjFfQ0xLQ1RSTF9FTgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBHbG9iYWwgY2xvY2sgZ2F0aW5nIGxvZ2ljCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXNjcjFfY2xrX2N0cmwgaV9jbGtfY3RybCAoCi0gICAgLmNsayAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xrICAgICAgICApLAotICAgIC5yc3RfbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvcmVfcnN0X24gKSwKLSAgICAudGVzdF9tb2RlICAgICAgICAgICAgICAgICAgICAgICh0ZXN0X21vZGUgICksCi0gICAgLnRlc3RfcnN0X24gICAgICAgICAgICAgICAgICAgICAodGVzdF9yc3RfbiApLAotCi0gICAgLy8gU2xlZXAvd2FrZSBpbnRlcmZhY2UKLSAgICAucGlwZTJjbGtjdGxfc2xlZXBfcmVxX2kgICAgICAgIChzbGVlcF9waXBlICksCi0gICAgLnBpcGUyY2xrY3RsX3dha2VfcmVxX2kgICAgICAgICAod2FrZV9waXBlICApLAotCi0gICAgLy8gQ2xvY2tzCi0gICAgLmNsa2N0bDJwaXBlX2Nsa19hbHdfb25fbyAgICAgICAoY2xrX2Fsd19vbiApLAotICAgIC5jbGtjdGwycGlwZV9jbGtfbyAgICAgICAgICAgICAgKGNsa19waXBlICAgKSwKLSAgICAuY2xrY3RsMnBpcGVfY2xrX2VuX28gICAgICAgICAgIChjbGtfcGlwZV9lbiksCi0gICAgLmNsa2N0bDJwaXBlX2Nsa19kYmdjX28gICAgICAgICAoY2xrX2RiZ2MgICApCi0pOwotYGVuZGlmIC8vIFNDUjFfQ0xLQ1RSTF9FTgotCi1lbmRtb2R1bGUgOiBzY3IxX2NvcmVfdG9wCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9zY3IxX2RtLnN2IGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvc2NyMV9kbS5zdgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmViZWFlZS4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9zY3IxX2RtLnN2CisrKyAvZGV2L251bGwKQEAgLTEsMTQ0MyArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIxCi0vLyAKLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0vLyBTUERYLUZpbGVDb250cmlidXRvcjogU3ludGFjb3JlIExMQwotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLyBAZmlsZSAgICAgICA8c2NyMV9kbS5zdj4KLS8vLyBAYnJpZWYgICAgICBEZWJ1ZyBNb2R1bGUgKERNKQotLy8vCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gLy8KLSAvLyBGdW5jdGlvbmFsaXR5OgotIC8vIC0gQWxsb3dzIGRlYnVnZ2VyIHRvIHBlcmZvcm0gYSBzeXN0ZW0gcmVzZXQgKG5kbV9yc3QpCi0gLy8gLSBBbGxvd3MgZGVidWdnZXIgdG8gY29udHJvbCB0aGUgSEFSVCdzIHN0YXRlCi0gLy8gLSBQcm92aWRlcyBkZWJ1Z2dlciB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IEhBUlQncyBzdGF0ZQotIC8vIC0gUHJvdmlkZXMgZGVidWdnZXIgd2l0aCBBYnN0cmFjdCBDb21tYW5kIGludGVyZmFjZSB0aGF0IGFsbG93cyB0bzoKLSAvLyAgIC0gQWNjZXNzIE1QUkYgcmVnaXN0ZXJzCi0gLy8gICAtIEFjY2VzcyBDU1IgcmVnaXN0ZXJzCi0gLy8gICAtIEFjY2VzcyBtZW1vcnkgd2l0aCB0aGUgc2FtZSB2aWV3IGFuZCBwZXJtaXNzaW9uIGFzIHRoZSBoYXJ0IGhhcwotIC8vIC0gUHJvdmlkZXMgZGVidWdnZXIgd2l0aCBBYnN0cmFjdCBDb21tYW5kIHN0YXR1cyBpbmZvcm1hdGlvbiAoYnVzeSBmbGFnIGFuZCBlcnJvciBjb2RlKQotIC8vIC0gUHJvdmlkZXMgZGVidWdnZXIgd2l0aCBQcm9ncmFtIEJ1ZmZlciBmdW5jdGlvbmFsaXR5IHRoYXQgYWxsb3dzIHRvIGV4ZWN1dGUKLSAvLyAgIHNtYWxsIHByb2dyYW1zIG9uIGEgaGFsdGVkIEhBUlQKLSAvLwotIC8vIFN0cnVjdHVyZToKLSAvLyAtIERNIDwtPiBETUkgaW50ZXJmYWNlCi0gLy8gLSBETSByZWdpc3RlcnM6Ci0gLy8gICAtIERNQ09OVFJPTAotIC8vICAgLSBETVNUQVRVUwotIC8vIC0gQWJzdHJhY3QgQ29tbWFuZCBDb250cm9sIGxvZ2ljCi0gLy8gLSBBYnN0cmFjdCBDb21tYW5kIEZTTQotIC8vIC0gQWJzdHJhY3QgQ29tbWFuZCBTdGF0dXMgbG9naWMKLSAvLyAtIEFic3RyYWN0IEluc3RydWN0aW9uIGxvZ2ljCi0gLy8gLSBBYnN0cmFjdCByZWdpc3RlcnM6Ci0gLy8gICAtIENPTU1BTkQKLSAvLyAgIC0gQUJTVFJBQ1RBVVRPCi0gLy8gICAtIFBST0dCVUYwLi41Ci0gLy8gICAtIERBVEEwLi4xCi0gLy8gLSBESEkgRlNNCi0gLy8gLSBIQVJUIGNvbW1hbmQgcmVnaXN0ZXJzCi0gLy8gLSBESEkgaW50ZXJmYWNlCi0gLy8KLS8vCi0KLWBpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgotCi1gaWZkZWYgU0NSMV9EQkdfRU4KLWBpbmNsdWRlICJzY3IxX2Nzci5zdmgiCi1gaW5jbHVkZSAic2NyMV9kbS5zdmgiCi0KLW1vZHVsZSBzY3IxX2RtICgKLSAgICAvLyBTeXN0ZW0KLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByc3RfbiwgICAgICAgICAgICAgICAgICAgICAgLy8gRE0gcmVzZXQKLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGssICAgICAgICAgICAgICAgICAgICAgICAgLy8gRE0gY2xvY2sKLQotICAgIC8vIERNIGludGVybmFsIGludGVyZmFjZQotICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtaTJkbV9yZXFfaSwgICAgICAgICAgICAgICAvLyBETUkgcmVxdWVzdAotICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtaTJkbV93cl9pLCAgICAgICAgICAgICAgICAvLyBETUkgd3JpdGUKLSAgICBpbnB1dCAgbG9naWMgW1NDUjFfREJHX0RNSV9BRERSX1dJRFRILTE6MF0gICAgICBkbWkyZG1fYWRkcl9pLCAgICAgICAgICAgICAgLy8gRE1JIGFkZHJlc3MKLSAgICBpbnB1dCAgbG9naWMgW1NDUjFfREJHX0RNSV9EQVRBX1dJRFRILTE6MF0gICAgICBkbWkyZG1fd2RhdGFfaSwgICAgICAgICAgICAgLy8gRE1JIHdyaXRlIGRhdGEKLSAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbTJkbWlfcmVzcF9vLCAgICAgICAgICAgICAgLy8gRE1JIHJlc3BvbnNlCi0gICAgb3V0cHV0IGxvZ2ljIFtTQ1IxX0RCR19ETUlfREFUQV9XSURUSC0xOjBdICAgICAgZG0yZG1pX3JkYXRhX28sICAgICAgICAgICAgIC8vIERNSSByZWFkIGRhdGEKLQotICAgIC8vIERNIDwtPiBQaXBlbGluZTogSEFSVCBSdW4gQ29udHJvbCBpL2YKLSAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZG1fcnN0X25fbywgICAgICAgICAgICAgICAgLy8gTm9uLURNIFJlc2V0IG91dHB1dAotICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcnRfcnN0X25fbywgICAgICAgICAgICAgICAvLyBIQVJUIHJlc2V0IG91dHB1dAotICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtMnBpcGVfYWN0aXZlX28sICAgICAgICAgICAvLyBEZWJ1ZyBNb2R1bGUgYWN0aXZlIGZsYWcKLSAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbTJwaXBlX2NtZF9yZXFfbywgICAgICAgICAgLy8gUmVxdWVzdCB0byBwaXBlCi0gICAgb3V0cHV0IHR5cGVfc2NyMV9oZHVfZGJnc3RhdGVzX2UgICAgICAgICAgICAgICAgZG0ycGlwZV9jbWRfbywgICAgICAgICAgICAgIC8vIENvbW1hbmQgdG8gcGlwZQotICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUyZG1fY21kX3Jlc3BfaSwgICAgICAgICAvLyBSZXNwb25zZSB0byBEZWJ1ZyBNb2R1bGUKLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlMmRtX2NtZF9yY29kZV9pLCAgICAgICAgLy8gSEFSVCBDb21tYW5kIHJldHVybiBjb2RlOiAwIC0gT2s7IDEgLSBFcnJvcgotICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUyZG1faGFydF9ldmVudF9pLCAgICAgICAvLyBIQVJUIGV2ZW50IGZsYWcKLSAgICBpbnB1dCAgdHlwZV9zY3IxX2hkdV9oYXJ0c3RhdHVzX3MgICAgICAgICAgICAgICBwaXBlMmRtX2hhcnRfc3RhdHVzX2ksICAgICAgLy8gSEFSVCBTdGF0dXMKLQotICAgIGlucHV0ICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgIHNvYzJkbV9mdXNlX21oYXJ0aWRfaSwgICAgICAvLyBSTyBNSEFSVElEIHZhbHVlCi0gICAgaW5wdXQgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgcGlwZTJkbV9wY19zYW1wbGVfaSwgICAgICAgIC8vIFJPIFBDIHZhbHVlIGZvciBzYW1wbGluZwotCi0gICAgLy8gSEFSVCBBYnN0cmFjdCBDb21tYW5kIC8gUHJvZ3JhbSBCdWZmZXIgaS9mCi0gICAgaW5wdXQgIGxvZ2ljIFtTQ1IxX0hEVV9QQlVGX0FERFJfV0lEVEgtMTowXSAgICAgcGlwZTJkbV9wYnVmX2FkZHJfaSwgICAgICAgIC8vIFByb2dyYW0gQnVmZmVyIGFkZHJlc3MKLSAgICBvdXRwdXQgbG9naWMgW1NDUjFfSERVX0NPUkVfSU5TVFJfV0lEVEgtMTowXSAgICBkbTJwaXBlX3BidWZfaW5zdHJfbywgICAgICAgLy8gUHJvZ3JhbSBCdWZmZXIgaW5zdHJ1Y3Rpb24KLQotICAgIC8vIEhBUlQgQWJzdHJhY3QgRGF0YSByZWdzIGkvZgotICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUyZG1fZHJlZ19yZXFfaSwgICAgICAgICAvLyBBYnN0cmFjdCBEYXRhIFJlZ2lzdGVyIHJlcXVlc3QKLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlMmRtX2RyZWdfd3JfaSwgICAgICAgICAgLy8gQWJzdHJhY3QgRGF0YSBSZWdpc3RlciB3cml0ZQotICAgIGlucHV0ICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgIHBpcGUyZG1fZHJlZ193ZGF0YV9pLCAgICAgICAvLyBBYnN0cmFjdCBEYXRhIFJlZ2lzdGVyIHdyaXRlIGRhdGEKLSAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbTJwaXBlX2RyZWdfcmVzcF9vLCAgICAgICAgLy8gQWJzdHJhY3QgRGF0YSBSZWdpc3RlciByZXNwb25zZQotICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtMnBpcGVfZHJlZ19mYWlsX28sICAgICAgICAvLyBBYnN0cmFjdCBEYXRhIFJlZ2lzdGVyIGZhaWwgLSBwb3NzaWJseSBub3QgbmVlZGVkID8KLSAgICBvdXRwdXQgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICBkbTJwaXBlX2RyZWdfcmRhdGFfbyAgICAgICAgLy8gQWJzdHJhY3QgRGF0YSBSZWdpc3RlciByZWFkIGRhdGEKLSk7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCB0eXBlcyBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdHlwZWRlZiBlbnVtIGxvZ2ljIFszOjBdIHsKLSAgICBBQlNfU1RBVEVfSURMRSwKLSAgICBBQlNfU1RBVEVfRVJSLAotICAgIEFCU19TVEFURV9FWEVDLAotICAgIEFCU19TVEFURV9YUkVHX1JXLAotICAgIEFCU19TVEFURV9NRU1fU0FWRV9YUkVHLAotICAgIEFCU19TVEFURV9NRU1fU0FWRV9YUkVHX0ZPUkFERFIsCi0gICAgQUJTX1NUQVRFX01FTV9SVywKLSAgICBBQlNfU1RBVEVfTUVNX1JFVFVSTl9YUkVHLAotICAgIEFCU19TVEFURV9NRU1fUkVUVVJOX1hSRUdfRk9SQUREUiwKLSAgICBBQlNfU1RBVEVfQ1NSX1JPLAotICAgIEFCU19TVEFURV9DU1JfU0FWRV9YUkVHLAotICAgIEFCU19TVEFURV9DU1JfUlcsCi0gICAgQUJTX1NUQVRFX0NTUl9SRVRVUk5fWFJFRwotfSB0eXBlX3NjcjFfYWJzX2ZzbV9lOwotCi10eXBlZGVmIGVudW0gbG9naWMgWzI6MF0gewotICAgIERISV9TVEFURV9JRExFLAotICAgIERISV9TVEFURV9FWEVDLAotICAgIERISV9TVEFURV9FWEVDX1JVTiwKLSAgICBESElfU1RBVEVfRVhFQ19IQUxULAotICAgIERISV9TVEFURV9IQUxUX1JFUSwKLSAgICBESElfU1RBVEVfUkVTVU1FX1JFUSwKLSAgICBESElfU1RBVEVfUkVTVU1FX1JVTgotfSB0eXBlX3NjcjFfZGhpX2ZzbV9lOwotCi0vL3R5cGVkZWYgZW51bSBsb2dpYyBbU0NSMV9EQkdfQUJTVFJBQ1RDU19DTURFUlJfV0RUSDowXSB7Ci1wYXJhbWV0ZXIgICAgQUJTX0VSUl9OT05FICAgICAgPSAoU0NSMV9EQkdfQUJTVFJBQ1RDU19DTURFUlJfV0RUSCsxKScoJ2QwKTsKLXBhcmFtZXRlciAgICBBQlNfRVJSX0JVU1kgICAgICA9IChTQ1IxX0RCR19BQlNUUkFDVENTX0NNREVSUl9XRFRIKzEpJygnZDEpOwotcGFyYW1ldGVyICAgIEFCU19FUlJfQ01EICAgICAgID0gKFNDUjFfREJHX0FCU1RSQUNUQ1NfQ01ERVJSX1dEVEgrMSknKCdkMik7Ci1wYXJhbWV0ZXIgICAgQUJTX0VSUl9FWENFUFRJT04gPSAoU0NSMV9EQkdfQUJTVFJBQ1RDU19DTURFUlJfV0RUSCsxKScoJ2QzKTsKLXBhcmFtZXRlciAgICBBQlNfRVJSX05PSEFMVCAgICA9IChTQ1IxX0RCR19BQlNUUkFDVENTX0NNREVSUl9XRFRIKzEpJygnZDQpOwotLy99IHR5cGVfc2NyMV9hYnNfZXJyX2U7Ci0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHBhcmFtZXRlcnMgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIEFic3RyYWN0IGluc3RydWN0aW9uIG9wY29kZSBwYXJhbWV0ZXJzCi1sb2NhbHBhcmFtICAgICAgU0NSMV9PUF9TWVNURU0gICAgICA9IDcnYjExMV8wMDExOwotbG9jYWxwYXJhbSAgICAgIFNDUjFfT1BfTE9BRCAgICAgICAgPSA3J2IwMDBfMDAxMTsKLWxvY2FscGFyYW0gICAgICBTQ1IxX09QX1NUT1JFICAgICAgID0gNydiMDEwXzAwMTE7Ci0KLS8vIEFic3RyYWN0IGluc3RydWN0aW9uIGZ1bmN0MyBwYXJhbWV0ZXJzCi1sb2NhbHBhcmFtICAgICAgU0NSMV9GVU5DVDNfQ1NSUlcgICAgICAgPSAzJ2IwMDE7Ci1sb2NhbHBhcmFtICAgICAgU0NSMV9GVU5DVDNfQ1NSUlMgICAgICAgPSAzJ2IwMTA7Ci1sb2NhbHBhcmFtICAgICAgU0NSMV9GVU5DVDNfU0IgICAgICAgICAgPSAzJ2IwMDA7Ci1sb2NhbHBhcmFtICAgICAgU0NSMV9GVU5DVDNfU0ggICAgICAgICAgPSAzJ2IwMDE7Ci1sb2NhbHBhcmFtICAgICAgU0NSMV9GVU5DVDNfU1cgICAgICAgICAgPSAzJ2IwMTA7Ci1sb2NhbHBhcmFtICAgICAgU0NSMV9GVU5DVDNfTFcgICAgICAgICAgPSAzJ2IwMTA7Ci1sb2NhbHBhcmFtICAgICAgU0NSMV9GVU5DVDNfTEJVICAgICAgICAgPSAzJ2IxMDA7Ci1sb2NhbHBhcmFtICAgICAgU0NSMV9GVU5DVDNfTEhVICAgICAgICAgPSAzJ2IxMDE7Ci0KLS8vIERNQ09OVFJPTCBwYXJhbWV0ZXJzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbG9jYWxwYXJhbSAgICAgIERNQ09OVFJPTF9IQVJUUkVTRVQgICAgID0gMSdkMDsKLWxvY2FscGFyYW0gICAgICBETUNPTlRST0xfUkVTRVJWRURCICAgICA9IDEnZDA7Ci1sb2NhbHBhcmFtICAgICAgRE1DT05UUk9MX0hBU0VMICAgICAgICAgPSAxJ2QwOwotbG9jYWxwYXJhbSAgICAgIERNQ09OVFJPTF9IQVJUU0VMTE8gICAgID0gMSdkMDsKLWxvY2FscGFyYW0gICAgICBETUNPTlRST0xfSEFSVFNFTEhJICAgICA9IDEnZDA7Ci1sb2NhbHBhcmFtICAgICAgRE1DT05UUk9MX1JFU0VSVkVEQSAgICAgPSAxJ2QwOwotCi0vLyBETVNUQVRVUyBwYXJhbWV0ZXJzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbG9jYWxwYXJhbSAgICAgIERNU1RBVFVTX1JFU0VSVkVEQyAgICAgID0gMSdkMDsKLWxvY2FscGFyYW0gICAgICBETVNUQVRVU19JTVBFQlJFQUsgICAgICA9IDEnZDE7Ci1sb2NhbHBhcmFtICAgICAgRE1TVEFUVVNfUkVTRVJWRURCICAgICAgPSAxJ2QwOwotbG9jYWxwYXJhbSAgICAgIERNU1RBVFVTX0FMTFVOQVZBSUwgICAgID0gMSdkMDsKLWxvY2FscGFyYW0gICAgICBETVNUQVRVU19BTllVTkFWQUlMICAgICA9IDEnZDA7Ci1sb2NhbHBhcmFtICAgICAgRE1TVEFUVVNfQUxMQU5ZVU5BVkFJTCAgPSAxJ2QwOwotbG9jYWxwYXJhbSAgICAgIERNU1RBVFVTX0FMTEFOWU5PTkVYSVNUID0gMSdiMDsKLWxvY2FscGFyYW0gICAgICBETVNUQVRVU19BVVRIRU5USUNBVEVEICA9IDEnZDE7Ci1sb2NhbHBhcmFtICAgICAgRE1TVEFUVVNfQVVUSEJVU1kgICAgICAgPSAxJ2QwOwotbG9jYWxwYXJhbSAgICAgIERNU1RBVFVTX1JFU0VSVkVEQSAgICAgID0gMSdkMDsKLWxvY2FscGFyYW0gICAgICBETVNUQVRVU19ERVZUUkVFVkFMSUQgICA9IDEnZDA7Ci1sb2NhbHBhcmFtICAgICAgRE1TVEFUVVNfVkVSU0lPTiAgICAgICAgPSAyJ2QyOwotCi0vLyBIQVJUSU5GTyBwYXJhbWV0ZXJzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbG9jYWxwYXJhbSAgICAgIEhBUlRJTkZPX1JFU0VSVkVEQiAgICAgID0gMSdkMDsKLWxvY2FscGFyYW0gICAgICBIQVJUSU5GT19OU0NSQVRDSCAgICAgICA9IDQnZDE7Ci1sb2NhbHBhcmFtICAgICAgSEFSVElORk9fUkVTRVJWRURBICAgICAgPSAxJ2QwOwotbG9jYWxwYXJhbSAgICAgIEhBUlRJTkZPX0RBVEFBQ0NFU1MgICAgID0gMSdkMDsKLWxvY2FscGFyYW0gICAgICBIQVJUSU5GT19EQVRBU0laRSAgICAgICA9IDQnZDE7Ci1sb2NhbHBhcmFtICAgICAgSEFSVElORk9fREFUQUFERFIgICAgICAgPSAxMidoN2IyOwotCi0vLyBBQlNUUkFDVENTIHBhcmFtZXRlcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1sb2NhbHBhcmFtICAgICAgQUJTVFJBQ1RDU19SRVNFUlZFREQgICAgPSAxJ2QwOwotbG9jYWxwYXJhbSAgICAgIEFCU1RSQUNUQ1NfUFJPR0JVRlNJWkUgID0gNSdkNjsKLWxvY2FscGFyYW0gICAgICBBQlNUUkFDVENTX1JFU0VSVkVEQyAgICA9IDEnZDA7Ci1sb2NhbHBhcmFtICAgICAgQUJTVFJBQ1RDU19SRVNFUlZFREIgICAgPSAxJ2QwOwotbG9jYWxwYXJhbSAgICAgIEFCU1RSQUNUQ1NfUkVTRVJWRURBICAgID0gMSdkMDsKLWxvY2FscGFyYW0gICAgICBBQlNUUkFDVENTX0RBVEFDT1VOVCAgICA9IDQnZDI7Ci0KLWxvY2FscGFyYW0gICAgICBBQlNfQ01EX0hBUlRSRUcgICAgICAgICA9IDEnZDA7Ci1sb2NhbHBhcmFtICAgICAgQUJTX0NNRF9IQVJUTUVNICAgICAgICAgPSAyJ2QyOwotbG9jYWxwYXJhbSAgICAgIEFCU19DTURfSEFSVFJFR19DU1IgICAgID0gNCdiMDAwMDsKLWxvY2FscGFyYW0gICAgICBBQlNfQ01EX0hBUlRSRUdfSU5URlBVICA9IDQnYjAwMDE7Ci1sb2NhbHBhcmFtICAgICAgQUJTX0NNRF9IQVJUUkVHX0lOVCAgICAgPSA3J2IwMDBfMDAwMDsKLWxvY2FscGFyYW0gICAgICBBQlNfQ01EX0hBUlRSRUdfRlBVICAgICA9IDcnYjAwMF8wMDAxOwotbG9jYWxwYXJhbSAgICAgIEFCU19FWEVDX0VCUkVBSyAgICAgICAgID0gMzInYjAwMDAwMDAwMDAwMV8wMDAwMF8wMDBfMDAwMDBfMTExMDAxMTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHNpZ25hbHMgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIERNIDwtPiBETUkgaW50ZXJmYWNlIGludGVybmFsIHNpZ25hbHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFJlZ2lzdGVyIHNlbGVjdGlvbiBzaWduYWxzCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtaV9yZXFfZG1jb250cm9sOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWlfcmVxX2Fic3RyYWN0Y3M7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtaV9yZXFfYWJzdHJhY3RhdXRvOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWlfcmVxX2NvbW1hbmQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtaV9ycHRfY29tbWFuZDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1pX3JlcV9kYXRhMDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1pX3JlcV9kYXRhMTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1pX3JlcV9wcm9nYnVmMDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1pX3JlcV9wcm9nYnVmMTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1pX3JlcV9wcm9nYnVmMjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1pX3JlcV9wcm9nYnVmMzsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1pX3JlcV9wcm9nYnVmNDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1pX3JlcV9wcm9nYnVmNTsKLQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWlfcmVxX2FueTsKLQotLy8gUmVnaXN0ZXJzIHdyaXRlIHJlcXVlc3Qgc2lnbmFscwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWNvbnRyb2xfd3JfcmVxOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnN0cmFjdGNzX3dyX3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTBfd3JfcmVxOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhMV93cl9yZXE7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyZWdfd3JfcmVxOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kX3dyX3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2V4ZWNfd3JfcmVxOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9nYnVmMF93cl9yZXE7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2didWYxX3dyX3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ2J1ZjJfd3JfcmVxOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9nYnVmM193cl9yZXE7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2didWY0X3dyX3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ2J1ZjVfd3JfcmVxOwotCi0vLyBETSByZWdpc3RlcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIERNIGNsb2NrIGVuYWJsZSBzaWduYWxzCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsa19lbl9kbTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrX2VuX2RtX2ZmOwotCi0vLyBETUNPTlRST0wgcmVnaXN0ZXIgc2lnbmFscwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWNvbnRyb2xfaGFsdHJlcV9mZjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1jb250cm9sX2hhbHRyZXFfbmV4dDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1jb250cm9sX3Jlc3VtZXJlcV9mZjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1jb250cm9sX3Jlc3VtZXJlcV9uZXh0OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWNvbnRyb2xfYWNraGF2ZXJlc2V0X2ZmOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWNvbnRyb2xfYWNraGF2ZXJlc2V0X25leHQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtY29udHJvbF9uZG1yZXNldF9mZjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1jb250cm9sX25kbXJlc2V0X25leHQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtY29udHJvbF9kbWFjdGl2ZV9mZjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1jb250cm9sX2RtYWN0aXZlX25leHQ7Ci0KLS8vIEF1eGlsYXJ5IFNraXAgUmVzZXQgT24gUG93ZXJ1cCByZWdpc3RlcgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlcmVzZXRfc2tpcF9wd3J1cF9mZjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZXJlc2V0X3NraXBfcHdydXBfbmV4dDsKLQotLy8gRE1TVEFUVVMgcmVnaXN0ZXIgc2lnbmFscwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbXN0YXR1c19hbGxhbnlfaGF2ZXJlc2V0X2ZmOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbXN0YXR1c19hbGxhbnlfaGF2ZXJlc2V0X25leHQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtc3RhdHVzX2FsbGFueV9yZXN1bWVhY2tfZmY7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtc3RhdHVzX2FsbGFueV9yZXN1bWVhY2tfbmV4dDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1zdGF0dXNfYWxsYW55X2hhbHRlZF9mZjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1zdGF0dXNfYWxsYW55X2hhbHRlZF9uZXh0OwotCi0vLyBBYnN0cmFjdCBjb21tYW5kIGNvbnRyb2wgbG9naWMgc2lnbmFscwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbG9naWMgW1NDUjFfREJHX0RNSV9EQVRBX1dJRFRILTE6MF0gICAgICAgICAgICAgICBhYnNfY21kOwotCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRfY3NyX3JvOwotbG9naWMgW1NDUjFfREJHX0NPTU1BTkRfVFlQRV9XRFRIOjBdICAgICAgICAgICAgICBhYnNfY21kX3R5cGU7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRfcmVnYWNzOwotbG9naWMgW1NDUjFfREJHX0NPTU1BTkRfQUNDRVNTUkVHX1JFR05PX0hJLTEyOjBdICBhYnNfY21kX3JlZ3R5cGU7Ci1sb2dpYyBbNjowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRfcmVnZmlsZTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9yZWd3cjsKLWxvZ2ljIFtTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU1JFR19TSVpFX1dEVEg6MF0gICAgYWJzX2NtZF9yZWdzaXplOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kX2V4ZWNwcm9nYnVmOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kX3JlZ3ZhbGlkOwotbG9naWMgWzI6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kX21lbXNpemU7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRfbWVtd3I7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRfbWVtdmFsaWQ7Ci0KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9yZWdzaXplX3ZkOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kX21lbXNpemVfdmQ7Ci0KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF93cl9mZjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF93cl9uZXh0OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kX3Bvc3RleGVjX2ZmOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kX3Bvc3RleGVjX25leHQ7Ci1sb2dpYyBbMTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRfcmVnbm87Ci1sb2dpYyBbMTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRfcmVnbm9fZmY7Ci1sb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRfc2l6ZV9mZjsKLWxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9zaXplX25leHQ7Ci0KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX3JlZ19hY2Nlc3NfY3NyOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfcmVnX2FjY2Vzc19tcHJmOwotCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRfaGFydHJlZ192ZDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9oYXJ0bWVtX3ZkOwotCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRfcmVnX2FjY2Vzc19yZXE7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRfY3NyX2FjY2Vzc19yZXE7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRfbXByZl9hY2Nlc3NfcmVxOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kX2V4ZWNwcm9nYnVmX3JlcTsKLQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kX2Nzcl9yb19hY2Nlc3NfdmQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRfY3NyX3J3X2FjY2Vzc192ZDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9tcHJmX2FjY2Vzc192ZDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9tZW1fYWNjZXNzX3ZkOwotCi0vLyBBYnN0cmFjdCBGU00gc2lnbmFscwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdHlwZV9zY3IxX2Fic19mc21fZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfZnNtX2ZmOwotdHlwZV9zY3IxX2Fic19mc21fZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfZnNtX25leHQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19mc21faWRsZTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2ZzbV9leGVjOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfZnNtX2Nzcl9ybzsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2ZzbV9lcnI7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19mc21fdXNlX2FkZHI7Ci0KLS8vIEFic3RyYWN0IHJlZ2lzdGVycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGtfZW5fYWJzOwotCi0vLyBBQlNUUkFDVENTIHJlZ2lzdGVyIHNpZ25hbHMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzdHJhY3Rjc19idXN5OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnN0cmFjdGNzX3JvX2VuOwotCi0vLyBDT01NQU5EIHJlZ2lzdGVyIHNpZ25hbHMKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NvbW1hbmRfZmY7Ci1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jb21tYW5kX25leHQ7Ci0KLS8vIEFCU1RSQUNUQVVUTyByZWdpc3RlciBzaWduYWxzCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19hdXRvZXhlY19mZjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2F1dG9leGVjX25leHQ7Ci0KLS8vIFByb2dyYW0gYnVmZmVyIHJlZ2lzdGVycwotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfcHJvZ2J1ZjBfZmY7Ci1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19wcm9nYnVmMV9mZjsKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX3Byb2didWYyX2ZmOwotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfcHJvZ2J1ZjNfZmY7Ci1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19wcm9nYnVmNF9mZjsKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX3Byb2didWY1X2ZmOwotCi0vLyBEYXRhIDAvMSByZWdpc3RlcnMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTBfeHJlZ19zYXZlOwotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfZGF0YTBfZmY7Ci1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19kYXRhMF9uZXh0OwotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfZGF0YTFfZmY7Ci1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19kYXRhMV9uZXh0OwotCi0vLyBBYnN0cmFjdCBjb21tYW5kIHN0YXR1cyBsb2dpYyBzaWduYWxzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBBYnN0cmFjdCBlcnJvciBleGNlcHRpb24gZmxhZyByZWdpc3RlcgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfZXJyX2V4Y191cGQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19lcnJfZXhjX2ZmOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfZXJyX2V4Y19uZXh0OwotCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19lcnJfYWNjX2J1c3lfdXBkOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfZXJyX2FjY19idXN5X2ZmOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfZXJyX2FjY19idXN5X25leHQ7Ci0KLWxvZ2ljIFtTQ1IxX0RCR19BQlNUUkFDVENTX0NNREVSUl9XRFRIOjBdICAgICAgICAgYWJzdHJhY3Rjc19jbWRlcnJfZmY7Ci1sb2dpYyBbU0NSMV9EQkdfQUJTVFJBQ1RDU19DTURFUlJfV0RUSDowXSAgICAgICAgIGFic3RyYWN0Y3NfY21kZXJyX25leHQ7Ci0KLS8vIEFic3RyYWN0IGluc3RydWN0aW9uIHNpZ25hbHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIEFic3RyYWN0IGluc3RydWN0aW9uIGV4ZWN1dGlvbiByZXF1ZXN0IHJlZ2lzdGVyCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19leGVjX3JlcV9uZXh0OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfZXhlY19yZXFfZmY7Ci0KLS8vIEFic3RyYWN0IGluc3RydWN0aW9uIHJlZ2lzdGVyCi1sb2dpYyBbNDowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19pbnN0cl9yZDsKLWxvZ2ljIFs0OjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2luc3RyX3JzMTsKLWxvZ2ljIFs0OjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2luc3RyX3JzMjsKLWxvZ2ljIFsyOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2luc3RyX21lbV9mdW5jdDM7Ci1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19leGVjX2luc3RyX25leHQ7Ci1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19leGVjX2luc3RyX2ZmOwotCi0vLyBESEkgRlNNIHNpZ25hbHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXR5cGVfc2NyMV9kaGlfZnNtX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGhpX2ZzbV9uZXh0OwotdHlwZV9zY3IxX2RoaV9mc21fZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaGlfZnNtX2ZmOwotdHlwZV9zY3IxX2RoaV9mc21fZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaGlfcmVxOwotCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRoaV9mc21faWRsZTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGhpX2ZzbV9leGVjOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaGlfZnNtX2V4ZWNfaGFsdDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGhpX2ZzbV9oYWx0X3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGhpX2ZzbV9yZXN1bWVfcmVxOwotCi0vLyBESEkgaW50ZXJmYWNlIHNpZ25hbHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kX3Jlc3Bfb2s7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcnRfcnN0X3VuZXhwOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYWx0X3JlcV92ZDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdW1lX3JlcV92ZDsKLQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaGlfcmVzcDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGhpX3Jlc3BfZXhjOwotCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcnRfcGJ1Zl9lYnJlYWtfZmY7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcnRfcGJ1Zl9lYnJlYWtfbmV4dDsKLQotLy8gSEFSVCBjb21tYW5kIHJlZ2lzdGVycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJ0X2NtZF9yZXFfZmY7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcnRfY21kX3JlcV9uZXh0OwotCi10eXBlX3NjcjFfaGR1X2RiZ3N0YXRlc19lICAgICAgICAgICAgICAgICAgICAgICAgIGhhcnRfY21kX2ZmOwotdHlwZV9zY3IxX2hkdV9kYmdzdGF0ZXNfZSAgICAgICAgICAgICAgICAgICAgICAgICBoYXJ0X2NtZF9uZXh0OwotCi0vLyBIQVJUIHN0YXRlIHNpZ25hbHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFydF9zdGF0ZV9yZXNldDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFydF9zdGF0ZV9ydW47Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcnRfc3RhdGVfZHJ1bjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFydF9zdGF0ZV9kaGFsdDsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIERNIDwtPiBETUkgaW50ZXJmYWNlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBSZWdpc3RlciBzZWxlY3Rpb24gbG9naWMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgZG1pX3JlcV9kbWNvbnRyb2wgICAgPSBkbWkyZG1fcmVxX2kgJiAoZG1pMmRtX2FkZHJfaSA9PSBTQ1IxX0RCR19ETUNPTlRST0wpOwotICAgIGRtaV9yZXFfYWJzdHJhY3RjcyAgID0gZG1pMmRtX3JlcV9pICYgKGRtaTJkbV9hZGRyX2kgPT0gU0NSMV9EQkdfQUJTVFJBQ1RDUyk7Ci0gICAgZG1pX3JlcV9hYnN0cmFjdGF1dG8gPSBkbWkyZG1fcmVxX2kgJiAoZG1pMmRtX2FkZHJfaSA9PSBTQ1IxX0RCR19BQlNUUkFDVEFVVE8pOwotICAgIGRtaV9yZXFfZGF0YTAgICAgICAgID0gZG1pMmRtX3JlcV9pICYgKGRtaTJkbV9hZGRyX2kgPT0gU0NSMV9EQkdfREFUQTApOwotICAgIGRtaV9yZXFfZGF0YTEgICAgICAgID0gZG1pMmRtX3JlcV9pICYgKGRtaTJkbV9hZGRyX2kgPT0gU0NSMV9EQkdfREFUQTEpOwotICAgIGRtaV9yZXFfY29tbWFuZCAgICAgID0gZG1pMmRtX3JlcV9pICYgKGRtaTJkbV9hZGRyX2kgPT0gU0NSMV9EQkdfQ09NTUFORCk7Ci0gICAgZG1pX3JwdF9jb21tYW5kICAgICAgPSAoYWJzX2F1dG9leGVjX2ZmICYgZG1pX3JlcV9kYXRhMCk7Ci0gICAgZG1pX3JlcV9wcm9nYnVmMCAgICAgPSBkbWkyZG1fcmVxX2kgJiAoZG1pMmRtX2FkZHJfaSA9PSBTQ1IxX0RCR19QUk9HQlVGMCk7Ci0gICAgZG1pX3JlcV9wcm9nYnVmMSAgICAgPSBkbWkyZG1fcmVxX2kgJiAoZG1pMmRtX2FkZHJfaSA9PSBTQ1IxX0RCR19QUk9HQlVGMSk7Ci0gICAgZG1pX3JlcV9wcm9nYnVmMiAgICAgPSBkbWkyZG1fcmVxX2kgJiAoZG1pMmRtX2FkZHJfaSA9PSBTQ1IxX0RCR19QUk9HQlVGMik7Ci0gICAgZG1pX3JlcV9wcm9nYnVmMyAgICAgPSBkbWkyZG1fcmVxX2kgJiAoZG1pMmRtX2FkZHJfaSA9PSBTQ1IxX0RCR19QUk9HQlVGMyk7Ci0gICAgZG1pX3JlcV9wcm9nYnVmNCAgICAgPSBkbWkyZG1fcmVxX2kgJiAoZG1pMmRtX2FkZHJfaSA9PSBTQ1IxX0RCR19QUk9HQlVGNCk7Ci0gICAgZG1pX3JlcV9wcm9nYnVmNSAgICAgPSBkbWkyZG1fcmVxX2kgJiAoZG1pMmRtX2FkZHJfaSA9PSBTQ1IxX0RCR19QUk9HQlVGNSk7Ci1lbmQKLQotYXNzaWduIGRtaV9yZXFfYW55ID0gZG1pX3JlcV9jb21tYW5kICB8IGRtaV9ycHRfY29tbWFuZCAgfCBkbWlfcmVxX2Fic3RyYWN0YXV0bwotICAgICAgICAgICAgICAgICAgIHwgZG1pX3JlcV9kYXRhMCAgICB8IGRtaV9yZXFfZGF0YTEgICAgfCBkbWlfcmVxX3Byb2didWYwCi0gICAgICAgICAgICAgICAgICAgfCBkbWlfcmVxX3Byb2didWYxIHwgZG1pX3JlcV9wcm9nYnVmMiB8IGRtaV9yZXFfcHJvZ2J1ZjMKLSAgICAgICAgICAgICAgICAgICB8IGRtaV9yZXFfcHJvZ2J1ZjQgfCBkbWlfcmVxX3Byb2didWY1OwotCi0KLS8vIFJlYWQgZGF0YSBtdWx0aXBsZXhlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBkbTJkbWlfcmRhdGFfbyA9ICcwOwotCi0gICAgY2FzZSAoZG1pMmRtX2FkZHJfaSkKLSAgICAgICAgU0NSMV9EQkdfRE1TVEFUVVM6IGJlZ2luCi0gICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19ETVNUQVRVU19SRVNFUlZFRENfSEk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0RCR19ETVNUQVRVU19SRVNFUlZFRENfTE9dICAgICA9IERNU1RBVFVTX1JFU0VSVkVEQzsKLSAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0RNU1RBVFVTX0lNUEVCUkVBS10gICAgICAgID0gRE1TVEFUVVNfSU1QRUJSRUFLOwotICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfRE1TVEFUVVNfUkVTRVJWRURCX0hJOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9EQkdfRE1TVEFUVVNfUkVTRVJWRURCX0xPXSAgICAgPSBETVNUQVRVU19SRVNFUlZFREI7Ci0gICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19ETVNUQVRVU19BTExIQVZFUkVTRVRdICAgICA9IGRtc3RhdHVzX2FsbGFueV9oYXZlcmVzZXRfZmY7Ci0gICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19ETVNUQVRVU19BTllIQVZFUkVTRVRdICAgICA9IGRtc3RhdHVzX2FsbGFueV9oYXZlcmVzZXRfZmY7Ci0gICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19ETVNUQVRVU19BTExSRVNVTUVBQ0tdICAgICA9IGRtc3RhdHVzX2FsbGFueV9yZXN1bWVhY2tfZmY7Ci0gICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19ETVNUQVRVU19BTllSRVNVTUVBQ0tdICAgICA9IGRtc3RhdHVzX2FsbGFueV9yZXN1bWVhY2tfZmY7Ci0gICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19ETVNUQVRVU19BTExOT05FWElTVEVOVF0gICA9IERNU1RBVFVTX0FMTEFOWU5PTkVYSVNUOwotICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfRE1TVEFUVVNfQU5ZTk9ORVhJU1RFTlRdICAgPSBETVNUQVRVU19BTExBTllOT05FWElTVDsKLSAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0RNU1RBVFVTX0FMTFVOQVZBSUxdICAgICAgID0gRE1TVEFUVVNfQUxMQU5ZVU5BVkFJTDsKLSAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0RNU1RBVFVTX0FOWVVOQVZBSUxdICAgICAgID0gRE1TVEFUVVNfQUxMQU5ZVU5BVkFJTDsKLSAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0RNU1RBVFVTX0FMTFJVTk5JTkddICAgICAgID0gfmRtc3RhdHVzX2FsbGFueV9oYWx0ZWRfZmY7Ci0gICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19ETVNUQVRVU19BTllSVU5OSU5HXSAgICAgICA9IH5kbXN0YXR1c19hbGxhbnlfaGFsdGVkX2ZmOwotICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfRE1TVEFUVVNfQUxMSEFMVEVEXSAgICAgICAgPSBkbXN0YXR1c19hbGxhbnlfaGFsdGVkX2ZmOwotICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfRE1TVEFUVVNfQU5ZSEFMVEVEXSAgICAgICAgPSBkbXN0YXR1c19hbGxhbnlfaGFsdGVkX2ZmOwotICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfRE1TVEFUVVNfQVVUSEVOVElDQVRFRF0gICAgPSBETVNUQVRVU19BVVRIRU5USUNBVEVEOwotICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfRE1TVEFUVVNfQVVUSEJVU1ldICAgICAgICAgPSBETVNUQVRVU19BVVRIQlVTWTsKLSAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0RNU1RBVFVTX1JFU0VSVkVEQV0gICAgICAgID0gRE1TVEFUVVNfUkVTRVJWRURBOwotICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfRE1TVEFUVVNfREVWVFJFRVZBTElEXSAgICAgPSBETVNUQVRVU19ERVZUUkVFVkFMSUQ7Ci0gICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19ETVNUQVRVU19WRVJTSU9OX0hJOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9EQkdfRE1TVEFUVVNfVkVSU0lPTl9MT10gICAgICAgPSBETVNUQVRVU19WRVJTSU9OOzsKLSAgICAgICAgZW5kCi0KLSAgICAgICAgU0NSMV9EQkdfRE1DT05UUk9MOiBiZWdpbgotICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfRE1DT05UUk9MX0hBTFRSRVFdICAgICAgICAgPSBkbWNvbnRyb2xfaGFsdHJlcV9mZjsKLSAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0RNQ09OVFJPTF9SRVNVTUVSRVFdICAgICAgID0gZG1jb250cm9sX3Jlc3VtZXJlcV9mZjsKLSAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0RNQ09OVFJPTF9IQVJUUkVTRVRdICAgICAgID0gRE1DT05UUk9MX0hBUlRSRVNFVDsKLSAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0RNQ09OVFJPTF9BQ0tIQVZFUkVTRVRdICAgID0gZG1jb250cm9sX2Fja2hhdmVyZXNldF9mZjsKLSAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0RNQ09OVFJPTF9SRVNFUlZFREJdICAgICAgID0gRE1DT05UUk9MX1JFU0VSVkVEQjsKLSAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0RNQ09OVFJPTF9IQVNFTF0gICAgICAgICAgID0gRE1DT05UUk9MX0hBU0VMOwotICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfRE1DT05UUk9MX0hBUlRTRUxMT19ISToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfREJHX0RNQ09OVFJPTF9IQVJUU0VMTE9fTE9dICAgID0gRE1DT05UUk9MX0hBUlRTRUxMTzsKLSAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0RNQ09OVFJPTF9IQVJUU0VMSElfSEk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0RCR19ETUNPTlRST0xfSEFSVFNFTEhJX0xPXSAgICA9IERNQ09OVFJPTF9IQVJUU0VMSEk7Ci0gICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19ETUNPTlRST0xfUkVTRVJWRURBX0hJOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9EQkdfRE1DT05UUk9MX1JFU0VSVkVEQV9MT10gICAgPSBETUNPTlRST0xfUkVTRVJWRURBOwotICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfRE1DT05UUk9MX05ETVJFU0VUXSAgICAgICAgPSBkbWNvbnRyb2xfbmRtcmVzZXRfZmY7Ci0gICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19ETUNPTlRST0xfRE1BQ1RJVkVdICAgICAgICA9IGRtY29udHJvbF9kbWFjdGl2ZV9mZjsKLSAgICAgICAgZW5kCi0KLSAgICAgICAgU0NSMV9EQkdfQUJTVFJBQ1RDUzogYmVnaW4KLSAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0FCU1RSQUNUQ1NfUkVTRVJWRUREX0hJOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9EQkdfQUJTVFJBQ1RDU19SRVNFUlZFRERfTE9dICAgPSBBQlNUUkFDVENTX1JFU0VSVkVERDsKLSAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0FCU1RSQUNUQ1NfUFJPR0JVRlNJWkVfSEk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0RCR19BQlNUUkFDVENTX1BST0dCVUZTSVpFX0xPXSA9IEFCU1RSQUNUQ1NfUFJPR0JVRlNJWkU7Ci0gICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19BQlNUUkFDVENTX1JFU0VSVkVEQ19ISToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfREJHX0FCU1RSQUNUQ1NfUkVTRVJWRURDX0xPXSAgID0gQUJTVFJBQ1RDU19SRVNFUlZFREM7Ci0gICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19BQlNUUkFDVENTX0JVU1ldICAgICAgICAgICA9IGFic3RyYWN0Y3NfYnVzeTsKLSAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0FCU1RSQUNUQ1NfUkVTRVJWRURCXSAgICAgID0gQUJTVFJBQ1RDU19SRVNFUlZFREI7Ci0gICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19BQlNUUkFDVENTX0NNREVSUl9ISToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfREJHX0FCU1RSQUNUQ1NfQ01ERVJSX0xPXSAgICAgID0gYWJzdHJhY3Rjc19jbWRlcnJfZmY7Ci0gICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19BQlNUUkFDVENTX1JFU0VSVkVEQV9ISToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfREJHX0FCU1RSQUNUQ1NfUkVTRVJWRURBX0xPXSAgID0gQUJTVFJBQ1RDU19SRVNFUlZFREE7Ci0gICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19BQlNUUkFDVENTX0RBVEFDT1VOVF9ISToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfREJHX0FCU1RSQUNUQ1NfREFUQUNPVU5UX0xPXSAgID0gQUJTVFJBQ1RDU19EQVRBQ09VTlQ7Ci0gICAgICAgIGVuZAotCi0gICAgICAgIFNDUjFfREJHX0hBUlRJTkZPOiBiZWdpbgotICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfSEFSVElORk9fUkVTRVJWRURCX0hJOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9EQkdfSEFSVElORk9fUkVTRVJWRURCX0xPXSAgICAgPSBIQVJUSU5GT19SRVNFUlZFREI7Ci0gICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19IQVJUSU5GT19OU0NSQVRDSF9ISToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfREJHX0hBUlRJTkZPX05TQ1JBVENIX0xPXSAgICAgID0gSEFSVElORk9fTlNDUkFUQ0g7Ci0gICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19IQVJUSU5GT19SRVNFUlZFREFfSEk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0RCR19IQVJUSU5GT19SRVNFUlZFREFfTE9dICAgICA9IEhBUlRJTkZPX1JFU0VSVkVEQTsKLSAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0hBUlRJTkZPX0RBVEFBQ0NFU1NdICAgICAgID0gSEFSVElORk9fREFUQUFDQ0VTUzsKLSAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0hBUlRJTkZPX0RBVEFTSVpFX0hJOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9EQkdfSEFSVElORk9fREFUQVNJWkVfTE9dICAgICAgPSBIQVJUSU5GT19EQVRBU0laRTsKLSAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0hBUlRJTkZPX0RBVEFBRERSX0hJOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9EQkdfSEFSVElORk9fREFUQUFERFJfTE9dICAgICAgPSBIQVJUSU5GT19EQVRBQUREUjsKLSAgICAgICAgZW5kCi0KLSAgICAgICAgU0NSMV9EQkdfQUJTVFJBQ1RBVVRPOiBkbTJkbWlfcmRhdGFfb1swXSA9IGFic19hdXRvZXhlY19mZjsKLSAgICAgICAgU0NSMV9EQkdfREFUQTAgICAgICAgOiBkbTJkbWlfcmRhdGFfbyAgICA9IGFic19kYXRhMF9mZjsKLSAgICAgICAgU0NSMV9EQkdfREFUQTEgICAgICAgOiBkbTJkbWlfcmRhdGFfbyAgICA9IGFic19kYXRhMV9mZjsKLSAgICAgICAgU0NSMV9EQkdfUFJPR0JVRjAgICAgOiBkbTJkbWlfcmRhdGFfbyAgICA9IGFic19wcm9nYnVmMF9mZjsKLSAgICAgICAgU0NSMV9EQkdfUFJPR0JVRjEgICAgOiBkbTJkbWlfcmRhdGFfbyAgICA9IGFic19wcm9nYnVmMV9mZjsKLSAgICAgICAgU0NSMV9EQkdfUFJPR0JVRjIgICAgOiBkbTJkbWlfcmRhdGFfbyAgICA9IGFic19wcm9nYnVmMl9mZjsKLSAgICAgICAgU0NSMV9EQkdfUFJPR0JVRjMgICAgOiBkbTJkbWlfcmRhdGFfbyAgICA9IGFic19wcm9nYnVmM19mZjsKLSAgICAgICAgU0NSMV9EQkdfUFJPR0JVRjQgICAgOiBkbTJkbWlfcmRhdGFfbyAgICA9IGFic19wcm9nYnVmNF9mZjsKLSAgICAgICAgU0NSMV9EQkdfUFJPR0JVRjUgICAgOiBkbTJkbWlfcmRhdGFfbyAgICA9IGFic19wcm9nYnVmNV9mZjsKLSAgICAgICAgU0NSMV9EQkdfSEFMVFNVTTAgICAgOiBkbTJkbWlfcmRhdGFfb1swXSA9IGRtc3RhdHVzX2FsbGFueV9oYWx0ZWRfZmY7Ci0KLSAgICAgICAgZGVmYXVsdDogYmVnaW4KLSAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vID0gJzA7Ci0gICAgICAgIGVuZAotICAgIGVuZGNhc2UKLWVuZAotCi0vLyBSZXNwb25zZQotYXNzaWduIGRtMmRtaV9yZXNwX28gPSAxJ2IxOwotCi0vLyBXcml0ZSByZXF1ZXN0cyBzaWduYWxzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gZG1jb250cm9sX3dyX3JlcSAgPSBkbWlfcmVxX2RtY29udHJvbCAgICAmIGRtaTJkbV93cl9pOwotYXNzaWduIGRhdGEwX3dyX3JlcSAgICAgID0gZG1pX3JlcV9kYXRhMCAgICAgICAgJiBkbWkyZG1fd3JfaTsKLWFzc2lnbiBkYXRhMV93cl9yZXEgICAgICA9IGRtaV9yZXFfZGF0YTEgICAgICAgICYgZG1pMmRtX3dyX2k7Ci1hc3NpZ24gZHJlZ193cl9yZXEgICAgICAgPSBwaXBlMmRtX2RyZWdfcmVxX2kgICAmIHBpcGUyZG1fZHJlZ193cl9pOwotYXNzaWduIGNvbW1hbmRfd3JfcmVxICAgID0gZG1pX3JlcV9jb21tYW5kICAgICAgJiBkbWkyZG1fd3JfaTsKLWFzc2lnbiBhdXRvZXhlY193cl9yZXEgICA9IGRtaV9yZXFfYWJzdHJhY3RhdXRvICYgZG1pMmRtX3dyX2k7Ci1hc3NpZ24gcHJvZ2J1ZjBfd3JfcmVxICAgPSBkbWlfcmVxX3Byb2didWYwICAgICAmIGRtaTJkbV93cl9pOwotYXNzaWduIHByb2didWYxX3dyX3JlcSAgID0gZG1pX3JlcV9wcm9nYnVmMSAgICAgJiBkbWkyZG1fd3JfaTsKLWFzc2lnbiBwcm9nYnVmMl93cl9yZXEgICA9IGRtaV9yZXFfcHJvZ2J1ZjIgICAgICYgZG1pMmRtX3dyX2k7Ci1hc3NpZ24gcHJvZ2J1ZjNfd3JfcmVxICAgPSBkbWlfcmVxX3Byb2didWYzICAgICAmIGRtaTJkbV93cl9pOwotYXNzaWduIHByb2didWY0X3dyX3JlcSAgID0gZG1pX3JlcV9wcm9nYnVmNCAgICAgJiBkbWkyZG1fd3JfaTsKLWFzc2lnbiBwcm9nYnVmNV93cl9yZXEgICA9IGRtaV9yZXFfcHJvZ2J1ZjUgICAgICYgZG1pMmRtX3dyX2k7Ci1hc3NpZ24gYWJzdHJhY3Rjc193cl9yZXEgPSBkbWlfcmVxX2Fic3RyYWN0Y3MgICAmIGRtaTJkbV93cl9pOwotCi0vLyBIQVJUIHN0YXRlIHNpZ25hbHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBoYXJ0X3N0YXRlX3Jlc2V0ID0gKHBpcGUyZG1faGFydF9zdGF0dXNfaS5kYmdfc3RhdGUgPT0gU0NSMV9IRFVfREJHU1RBVEVfUkVTRVQpOwotYXNzaWduIGhhcnRfc3RhdGVfcnVuICAgPSAocGlwZTJkbV9oYXJ0X3N0YXR1c19pLmRiZ19zdGF0ZSA9PSBTQ1IxX0hEVV9EQkdTVEFURV9SVU4pOwotYXNzaWduIGhhcnRfc3RhdGVfZGhhbHQgPSAocGlwZTJkbV9oYXJ0X3N0YXR1c19pLmRiZ19zdGF0ZSA9PSBTQ1IxX0hEVV9EQkdTVEFURV9ESEFMVEVEKTsKLWFzc2lnbiBoYXJ0X3N0YXRlX2RydW4gID0gKHBpcGUyZG1faGFydF9zdGF0dXNfaS5kYmdfc3RhdGUgPT0gU0NSMV9IRFVfREJHU1RBVEVfRFJVTik7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBETSByZWdpc3RlcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotIC8vIFJlZ2lzdGVyczoKLSAvLyAtIERNIGNsb2NrIGVuYWJsZSByZWdpc3RlcgotIC8vIC0gQXV4aWxhcnkgU2tpcCBSZXNldCBPbiBQb3dlcnVwIHJlZ2lzdGVyCi0gLy8gLSBETUNPTlRST0wgcmVnaXN0ZXIKLSAvLyAtIERNU1RBVFVTIHJlZ2lzdGVyCi0KLS8vIERNIGNsb2NrIGVuYWJsZSBsb2dpYwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIGNsa19lbl9kbSA9IGRtY29udHJvbF93cl9yZXEgfCBkbWNvbnRyb2xfZG1hY3RpdmVfZmYgfCBjbGtfZW5fZG1fZmY7Ci0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGNsa19lbl9kbV9mZiA8PSAxJ2IwOwotICAgIGVuZCBlbHNlIGlmIChjbGtfZW5fZG0pIGJlZ2luCi0gICAgICAgIGNsa19lbl9kbV9mZiA8PSBkbWNvbnRyb2xfZG1hY3RpdmVfZmY7Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIGRtMnBpcGVfYWN0aXZlX28gPSBjbGtfZW5fZG1fZmY7Ci0KLS8vIERNQ09OVFJPTCByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24pIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgZG1jb250cm9sX2RtYWN0aXZlX2ZmICAgICA8PSAxJ2IwOwotICAgICAgICBkbWNvbnRyb2xfbmRtcmVzZXRfZmYgICAgIDw9IDEnYjA7Ci0gICAgICAgIGRtY29udHJvbF9hY2toYXZlcmVzZXRfZmYgPD0gMSdiMDsKLSAgICAgICAgZG1jb250cm9sX2hhbHRyZXFfZmYgICAgICA8PSAxJ2IwOwotICAgICAgICBkbWNvbnRyb2xfcmVzdW1lcmVxX2ZmICAgIDw9IDEnYjA7Ci0gICAgZW5kIGVsc2UgaWYgKGNsa19lbl9kbSkgYmVnaW4KLSAgICAgICAgZG1jb250cm9sX2RtYWN0aXZlX2ZmICAgICA8PSBkbWNvbnRyb2xfZG1hY3RpdmVfbmV4dDsKLSAgICAgICAgZG1jb250cm9sX25kbXJlc2V0X2ZmICAgICA8PSBkbWNvbnRyb2xfbmRtcmVzZXRfbmV4dDsKLSAgICAgICAgZG1jb250cm9sX2Fja2hhdmVyZXNldF9mZiA8PSBkbWNvbnRyb2xfYWNraGF2ZXJlc2V0X25leHQ7Ci0gICAgICAgIGRtY29udHJvbF9oYWx0cmVxX2ZmICAgICAgPD0gZG1jb250cm9sX2hhbHRyZXFfbmV4dDsKLSAgICAgICAgZG1jb250cm9sX3Jlc3VtZXJlcV9mZiAgICA8PSBkbWNvbnRyb2xfcmVzdW1lcmVxX25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIGRtY29udHJvbF9kbWFjdGl2ZV9uZXh0ID0gZG1jb250cm9sX3dyX3JlcQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZG1pMmRtX3dkYXRhX2lbU0NSMV9EQkdfRE1DT05UUk9MX0RNQUNUSVZFXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZG1jb250cm9sX2RtYWN0aXZlX2ZmOwotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGRtY29udHJvbF9uZG1yZXNldF9uZXh0ICAgICA9IGRtY29udHJvbF9uZG1yZXNldF9mZjsKLSAgICBkbWNvbnRyb2xfYWNraGF2ZXJlc2V0X25leHQgPSBkbWNvbnRyb2xfYWNraGF2ZXJlc2V0X2ZmOwotICAgIGRtY29udHJvbF9oYWx0cmVxX25leHQgICAgICA9IGRtY29udHJvbF9oYWx0cmVxX2ZmOwotICAgIGRtY29udHJvbF9yZXN1bWVyZXFfbmV4dCAgICA9IGRtY29udHJvbF9yZXN1bWVyZXFfZmY7Ci0gICAgaWYgKH5kbWNvbnRyb2xfZG1hY3RpdmVfZmYpIGJlZ2luCi0gICAgICAgIGRtY29udHJvbF9uZG1yZXNldF9uZXh0ICAgICA9IDEnYjA7Ci0gICAgICAgIGRtY29udHJvbF9hY2toYXZlcmVzZXRfbmV4dCA9IDEnYjA7Ci0gICAgICAgIGRtY29udHJvbF9oYWx0cmVxX25leHQgICAgICA9IDEnYjA7Ci0gICAgICAgIGRtY29udHJvbF9yZXN1bWVyZXFfbmV4dCAgICA9IDEnYjA7Ci0gICAgZW5kIGVsc2UgaWYgKGRtY29udHJvbF93cl9yZXEpIGJlZ2luCi0gICAgICAgIGRtY29udHJvbF9uZG1yZXNldF9uZXh0ICAgICA9IGRtaTJkbV93ZGF0YV9pW1NDUjFfREJHX0RNQ09OVFJPTF9ORE1SRVNFVF07Ci0gICAgICAgIGRtY29udHJvbF9hY2toYXZlcmVzZXRfbmV4dCA9IGRtaTJkbV93ZGF0YV9pW1NDUjFfREJHX0RNQ09OVFJPTF9BQ0tIQVZFUkVTRVRdOwotICAgICAgICBkbWNvbnRyb2xfaGFsdHJlcV9uZXh0ICAgICAgPSBkbWkyZG1fd2RhdGFfaVtTQ1IxX0RCR19ETUNPTlRST0xfSEFMVFJFUV07Ci0gICAgICAgIGRtY29udHJvbF9yZXN1bWVyZXFfbmV4dCAgICA9IGRtaTJkbV93ZGF0YV9pW1NDUjFfREJHX0RNQ09OVFJPTF9SRVNVTUVSRVFdOwotICAgIGVuZAotZW5kCi0KLS8vIFJlc2V0IHNpZ25hbCBmb3Igc3lzdGVtIGNvbnRyb2xsZWQgYnkgRGVidWcgTW9kdWxlCi1hc3NpZ24gaGFydF9yc3Rfbl9vID0gfmRtY29udHJvbF9uZG1yZXNldF9mZjsKLWFzc2lnbiBuZG1fcnN0X25fbyAgPSB+ZG1jb250cm9sX25kbXJlc2V0X2ZmOwotCi0vLyBTa2lwIHJlc2V0IG9uIHBvd2VydXAgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGhhdmVyZXNldF9za2lwX3B3cnVwX2ZmIDw9IDEnYjE7Ci0gICAgZW5kIGVsc2UgaWYgKGNsa19lbl9kbSkgYmVnaW4KLSAgICAgICAgaGF2ZXJlc2V0X3NraXBfcHdydXBfZmYgPD0gaGF2ZXJlc2V0X3NraXBfcHdydXBfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gaGF2ZXJlc2V0X3NraXBfcHdydXBfbmV4dCA9IH5kbWNvbnRyb2xfZG1hY3RpdmVfZmYgID8gMSdiMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBoYXZlcmVzZXRfc2tpcF9wd3J1cF9mZiA/IGhhcnRfc3RhdGVfcmVzZXQgJiBuZG1fcnN0X25fbyAmIGhhcnRfcnN0X25fbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGhhdmVyZXNldF9za2lwX3B3cnVwX2ZmOwotCi0vLyBETVNUQVRVUyByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24pIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgZG1zdGF0dXNfYWxsYW55X2hhdmVyZXNldF9mZiA8PSAxJ2IwOwotICAgICAgICBkbXN0YXR1c19hbGxhbnlfcmVzdW1lYWNrX2ZmIDw9IDEnYjA7Ci0gICAgICAgIGRtc3RhdHVzX2FsbGFueV9oYWx0ZWRfZmYgICAgPD0gMSdiMDsKLSAgICBlbmQgZWxzZSBpZiAoY2xrX2VuX2RtKSBiZWdpbgotICAgICAgICBkbXN0YXR1c19hbGxhbnlfaGF2ZXJlc2V0X2ZmIDw9IGRtc3RhdHVzX2FsbGFueV9oYXZlcmVzZXRfbmV4dDsKLSAgICAgICAgZG1zdGF0dXNfYWxsYW55X3Jlc3VtZWFja19mZiA8PSBkbXN0YXR1c19hbGxhbnlfcmVzdW1lYWNrX25leHQ7Ci0gICAgICAgIGRtc3RhdHVzX2FsbGFueV9oYWx0ZWRfZmYgICAgPD0gZG1zdGF0dXNfYWxsYW55X2hhbHRlZF9uZXh0OwotICAgIGVuZAotZW5kCi0KLWFzc2lnbiBkbXN0YXR1c19hbGxhbnlfaGF2ZXJlc2V0X25leHQgPSB+ZG1jb250cm9sX2RtYWN0aXZlX2ZmICAgICAgICAgICAgICAgICAgICAgID8gMSdiMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IH5oYXZlcmVzZXRfc2tpcF9wd3J1cF9mZiAmIGhhcnRfc3RhdGVfcmVzZXQgPyAxJ2IxCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZG1jb250cm9sX2Fja2hhdmVyZXNldF9mZiAgICAgICAgICAgICAgICAgICA/IDEnYjAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZG1zdGF0dXNfYWxsYW55X2hhdmVyZXNldF9mZjsKLWFzc2lnbiBkbXN0YXR1c19hbGxhbnlfcmVzdW1lYWNrX25leHQgPSB+ZG1jb250cm9sX2RtYWN0aXZlX2ZmICA/IDEnYjAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB+ZG1jb250cm9sX3Jlc3VtZXJlcV9mZiA/IDEnYjAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBoYXJ0X3N0YXRlX3J1biAgICAgICAgICA/IDEnYjEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGRtc3RhdHVzX2FsbGFueV9yZXN1bWVhY2tfZmY7Ci0KLWFzc2lnbiBkbXN0YXR1c19hbGxhbnlfaGFsdGVkX25leHQgICAgPSB+ZG1jb250cm9sX2RtYWN0aXZlX2ZmID8gMSdiMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGhhcnRfc3RhdGVfZGhhbHQgICAgICAgPyAxJ2IxCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaGFydF9zdGF0ZV9ydW4gICAgICAgICA/IDEnYjAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZG1zdGF0dXNfYWxsYW55X2hhbHRlZF9mZjsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEFic3RyYWN0IENvbW1hbmQgY29udHJvbCBsb2dpYwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0gLy8gQ29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbmFsIHVuaXRzOgotIC8vIC0gQWJzdHJhY3QgY29tbWFuZCBkZWNvZGVyCi0gLy8gLSBBYnN0cmFjdCBjb21tYW5kIGFjY2VzcyB2YWxpZCBmbGFncwotIC8vIC0gQWJzdHJhY3QgY29tbWFuZCBjb250cm9sIHJlZ2lzdGVycwotCi1hc3NpZ24gY2xrX2VuX2FicyA9IGNsa19lbl9kbSAmIGRtY29udHJvbF9kbWFjdGl2ZV9mZjsKLQotLy8gQWJzdHJhY3QgY29tbWFuZCBkZWNvZGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gYWJzX2NtZCA9IGRtaV9yZXFfY29tbWFuZCA/IGRtaTJkbV93ZGF0YV9pIDogYWJzX2NvbW1hbmRfZmY7Ci0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgYWJzX2NtZF9yZWdubyAgICAgICA9IGFic19jbWRbU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NSRUdfUkVHTk9fTE8gKzogMTJdOwotCi0gICAgYWJzX2NtZF9jc3Jfcm8gICAgICA9IChhYnNfY21kX3JlZ25vID09IFNDUjFfQ1NSX0FERFJfTUlTQSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHwgKGFic19jbWRfcmVnbm8gPT0gU0NSMV9DU1JfQUREUl9NVkVORE9SSUQpCi0gICAgICAgICAgICAgICAgICAgICAgICB8IChhYnNfY21kX3JlZ25vID09IFNDUjFfQ1NSX0FERFJfTUFSQ0hJRCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHwgKGFic19jbWRfcmVnbm8gPT0gU0NSMV9DU1JfQUREUl9NSU1QSUQpCi0gICAgICAgICAgICAgICAgICAgICAgICB8IChhYnNfY21kX3JlZ25vID09IFNDUjFfQ1NSX0FERFJfTUhBUlRJRCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHwgKGFic19jbWRfcmVnbm8gPT0gU0NSMV9IRFVfREJHQ1NSX0FERFJfRFBDKTsKLQotICAgIGFic19jbWRfdHlwZSAgICAgICAgPSBhYnNfY21kW1NDUjFfREJHX0NPTU1BTkRfVFlQRV9ISTpTQ1IxX0RCR19DT01NQU5EX1RZUEVfTE9dOwotICAgIGFic19jbWRfcmVnYWNzICAgICAgPSBhYnNfY21kW1NDUjFfREJHX0NPTU1BTkRfQUNDRVNTUkVHX1RSQU5TRkVSXTsKLSAgICBhYnNfY21kX3JlZ3R5cGUgICAgID0gYWJzX2NtZFtTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU1JFR19SRUdOT19ISToxMl07Ci0gICAgYWJzX2NtZF9yZWdmaWxlICAgICA9IGFic19jbWRbMTE6NV07Ci0gICAgYWJzX2NtZF9yZWdzaXplICAgICA9IGFic19jbWRbU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NSRUdfU0laRV9ISToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU1JFR19TSVpFX0xPXTsKLSAgICBhYnNfY21kX3JlZ3dyICAgICAgID0gYWJzX2NtZFtTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU1JFR19XUklURV07Ci0gICAgYWJzX2NtZF9leGVjcHJvZ2J1ZiA9IGFic19jbWRbU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NSRUdfUE9TVEVYRUNdOwotCi0gICAgYWJzX2NtZF9yZWd2YWxpZCAgICA9IH4ofHthYnNfY21kW1NDUjFfREJHX0NPTU1BTkRfQUNDRVNTUkVHX1JFU0VSVkVEQl0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kW1NDUjFfREJHX0NPTU1BTkRfQUNDRVNTUkVHX1JFU0VSVkVEQV19KTsKLQotICAgIGFic19jbWRfbWVtc2l6ZSAgICAgPSBhYnNfY21kW1NDUjFfREJHX0NPTU1BTkRfQUNDRVNTTUVNX0FBTVNJWkVfSEk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NNRU1fQUFNU0laRV9MT107Ci0gICAgYWJzX2NtZF9tZW13ciAgICAgICA9IGFic19jbWRbU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NNRU1fV1JJVEVdOwotCi0gICAgYWJzX2NtZF9tZW12YWxpZCAgICA9IH4ofHthYnNfY21kW1NDUjFfREJHX0NPTU1BTkRfQUNDRVNTTUVNX0FBTVZJUlRVQUxdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZFtTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU01FTV9BQU1QT1NUSU5DXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRbU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NNRU1fUkVTRVJWRURCX0hJOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU01FTV9SRVNFUlZFREJfSEldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZFtTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU01FTV9SRVNFUlZFREFfSEk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfREJHX0NPTU1BTkRfQUNDRVNTTUVNX1JFU0VSVkVEQV9ISV19KTsKLWVuZAotCi1hc3NpZ24gYWJzX3JlZ19hY2Nlc3NfY3NyICA9IChhYnNfY21kX3JlZ3R5cGUgPT0gQUJTX0NNRF9IQVJUUkVHX0NTUik7Ci1hc3NpZ24gYWJzX3JlZ19hY2Nlc3NfbXByZiA9IChhYnNfY21kX3JlZ3R5cGUgPT0gQUJTX0NNRF9IQVJUUkVHX0lOVEZQVSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICYgKGFic19jbWRfcmVnZmlsZSA9PSBBQlNfQ01EX0hBUlRSRUdfSU5UKTsKLQotLy8gQWJzdHJhY3QgY29tbWFuZCBhY2Nlc3MgcmVxdWVzdCBhbmQgdmFsaWQgZmxhZ3MKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBhYnNfY21kX3JlZ3NpemVfdmQgICAgICAgPSAoYWJzX2NtZF9yZWdzaXplID09IDMnaDIpOwotYXNzaWduIGFic19jbWRfbWVtc2l6ZV92ZCAgICAgICA9IChhYnNfY21kX21lbXNpemUgPCAzJ2gzKTsKLQotYXNzaWduIGFic19jbWRfaGFydHJlZ192ZCAgICAgICA9IChhYnNfY21kX3R5cGUgPT0gQUJTX0NNRF9IQVJUUkVHKSAmIGFic19jbWRfcmVndmFsaWQ7Ci1hc3NpZ24gYWJzX2NtZF9oYXJ0bWVtX3ZkICAgICAgID0gKGFic19jbWRfdHlwZSA9PSBBQlNfQ01EX0hBUlRNRU0pICYgYWJzX2NtZF9tZW12YWxpZDsKLQotLy8gQWJzdHJhY3QgY29tbWFuZCByZXF1ZXN0cwotYXNzaWduIGFic19jbWRfcmVnX2FjY2Vzc19yZXEgICA9IGFic19jbWRfaGFydHJlZ192ZCAgICAgJiBhYnNfY21kX3JlZ2FjczsKLWFzc2lnbiBhYnNfY21kX2Nzcl9hY2Nlc3NfcmVxICAgPSBhYnNfY21kX3JlZ19hY2Nlc3NfcmVxICYgYWJzX3JlZ19hY2Nlc3NfY3NyOwotYXNzaWduIGFic19jbWRfbXByZl9hY2Nlc3NfcmVxICA9IGFic19jbWRfcmVnX2FjY2Vzc19yZXEgJiBhYnNfcmVnX2FjY2Vzc19tcHJmOwotYXNzaWduIGFic19jbWRfZXhlY3Byb2didWZfcmVxICA9IGFic19jbWRfaGFydHJlZ192ZCAgICAgJiBhYnNfY21kX2V4ZWNwcm9nYnVmOwotCi0vLyBBYnN0cmFjdCBjb21tYW5kIGFjY2VzcyB2YWxpZCBmbGFncwotYXNzaWduIGFic19jbWRfY3NyX3JvX2FjY2Vzc192ZCA9IGFic19jbWRfY3NyX2FjY2Vzc19yZXEgICYgYWJzX2NtZF9yZWdzaXplX3ZkICYgfmFic19jbWRfcmVnd3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiB+YWJzX2NtZF9leGVjcHJvZ2J1ZiAgICAmIGFic19jbWRfY3NyX3JvICAgICAmIGhhcnRfc3RhdGVfcnVuOwotYXNzaWduIGFic19jbWRfY3NyX3J3X2FjY2Vzc192ZCA9IGFic19jbWRfY3NyX2FjY2Vzc19yZXEgICYgYWJzX2NtZF9yZWdzaXplX3ZkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgKGFic19jbWRfcmVnd3IgfCB+YWJzX2NtZF9jc3Jfcm9fYWNjZXNzX3ZkKTsKLWFzc2lnbiBhYnNfY21kX21wcmZfYWNjZXNzX3ZkICAgPSBhYnNfY21kX21wcmZfYWNjZXNzX3JlcSAmIGFic19jbWRfcmVnc2l6ZV92ZDsKLWFzc2lnbiBhYnNfY21kX21lbV9hY2Nlc3NfdmQgICAgPSBhYnNfY21kX2hhcnRtZW1fdmQgJiBhYnNfY21kX21lbXNpemVfdmQ7Ci0KLS8vIEFic3RyYWN0IGNvbW1hbmQgY29udHJvbCByZWdpc3RlcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmIChjbGtfZW5fYWJzICYgYWJzX2ZzbV9pZGxlKSBiZWdpbgotICAgICAgICBhYnNfY21kX3Bvc3RleGVjX2ZmIDw9IGFic19jbWRfcG9zdGV4ZWNfbmV4dDsKLSAgICAgICAgYWJzX2NtZF93cl9mZiAgICAgICA8PSBhYnNfY21kX3dyX25leHQ7Ci0gICAgICAgIGFic19jbWRfcmVnbm9fZmYgICAgPD0gYWJzX2NtZF9yZWdubzsKLSAgICAgICAgYWJzX2NtZF9zaXplX2ZmICAgICA8PSBhYnNfY21kX3NpemVfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGFic19jbWRfd3JfbmV4dCAgICAgICA9IDEnYjA7Ci0gICAgYWJzX2NtZF9wb3N0ZXhlY19uZXh0ID0gMSdiMDsKLSAgICBhYnNfY21kX3NpemVfbmV4dCAgICAgPSBhYnNfY21kX3NpemVfZmY7Ci0gICAgaWYgKChjb21tYW5kX3dyX3JlcSB8IGRtaV9ycHRfY29tbWFuZCkgJiBoYXJ0X3N0YXRlX2RoYWx0ICYgYWJzX2ZzbV9pZGxlKSBiZWdpbgotICAgICAgICBpZiAoYWJzX2NtZF9jc3JfcndfYWNjZXNzX3ZkKSBiZWdpbgotICAgICAgICAgICAgYWJzX2NtZF93cl9uZXh0ICAgICAgID0gYWJzX2NtZF9yZWd3cjsKLSAgICAgICAgICAgIGFic19jbWRfcG9zdGV4ZWNfbmV4dCA9IGFic19jbWRfZXhlY3Byb2didWY7Ci0gICAgICAgIGVuZCBlbHNlIGlmIChhYnNfY21kX21wcmZfYWNjZXNzX3ZkKSBiZWdpbgotICAgICAgICAgICAgYWJzX2NtZF93cl9uZXh0ICAgICAgID0gYWJzX2NtZF9yZWd3cjsKLSAgICAgICAgICAgIGFic19jbWRfc2l6ZV9uZXh0ICAgICA9IGFic19jbWRfcmVnc2l6ZVsxOjBdOwotICAgICAgICAgICAgYWJzX2NtZF9wb3N0ZXhlY19uZXh0ID0gYWJzX2NtZF9leGVjcHJvZ2J1ZjsKLSAgICAgICAgZW5kIGVsc2UgaWYgKGFic19jbWRfbWVtX2FjY2Vzc192ZCkgYmVnaW4KLSAgICAgICAgICAgIGFic19jbWRfd3JfbmV4dCAgICAgICA9IGFic19jbWRfbWVtd3I7Ci0gICAgICAgICAgICBhYnNfY21kX3NpemVfbmV4dCAgICAgPSBhYnNfY21kX21lbXNpemVbMTowXTsKLSAgICAgICAgZW5kCi0gICAgZW5kCi1lbmQKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEFic3RyYWN0IGNvbW1hbmQgRlNNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAoY2xrX2VuX2RtKSBiZWdpbgotICAgICAgICBpZiAofmRtY29udHJvbF9kbWFjdGl2ZV9mZikgYmVnaW4KLSAgICAgICAgICAgIGFic19mc21fZmYgPD0gQUJTX1NUQVRFX0lETEU7Ci0gICAgICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgICAgICBhYnNfZnNtX2ZmIDw9IGFic19mc21fbmV4dDsKLSAgICAgICAgZW5kCi0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBhYnNfZnNtX25leHQgPSBhYnNfZnNtX2ZmOwotCi0gICAgY2FzZSAoYWJzX2ZzbV9mZikKLSAgICAgICAgQUJTX1NUQVRFX0lETEU6IGJlZ2luCi0gICAgICAgICAgICBpZiAoY29tbWFuZF93cl9yZXEgfCBkbWlfcnB0X2NvbW1hbmQpIGJlZ2luCi0gICAgICAgICAgICAgICAgY2FzZSAoMSdiMSkKLSAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9jc3Jfcm9fYWNjZXNzX3ZkOiBhYnNfZnNtX25leHQgPSBBQlNfU1RBVEVfQ1NSX1JPOwotICAgICAgICAgICAgICAgICAgICBhYnNfY21kX2Nzcl9yd19hY2Nlc3NfdmQ6IGFic19mc21fbmV4dCA9IGhhcnRfc3RhdGVfZGhhbHQgPyBBQlNfU1RBVEVfQ1NSX1NBVkVfWFJFRyA6IEFCU19TVEFURV9FUlI7Ci0gICAgICAgICAgICAgICAgICAgIGFic19jbWRfbXByZl9hY2Nlc3NfdmQgIDogYWJzX2ZzbV9uZXh0ID0gaGFydF9zdGF0ZV9kaGFsdCA/IEFCU19TVEFURV9YUkVHX1JXICAgICAgIDogQUJTX1NUQVRFX0VSUjsKLSAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9leGVjcHJvZ2J1Zl9yZXEgOiBhYnNfZnNtX25leHQgPSBBQlNfU1RBVEVfRVhFQzsKLSAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9tZW1fYWNjZXNzX3ZkICAgOiBhYnNfZnNtX25leHQgPSBoYXJ0X3N0YXRlX2RoYWx0ID8gQUJTX1NUQVRFX01FTV9TQVZFX1hSRUcgOiBBQlNfU1RBVEVfRVJSOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgICAgICA6IGFic19mc21fbmV4dCA9IEFCU19TVEFURV9FUlI7Ci0gICAgICAgICAgICAgICAgZW5kY2FzZQotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZAotCi0gICAgICAgIEFCU19TVEFURV9FWEVDOiBiZWdpbgotICAgICAgICAgICAgaWYgKGRoaV9yZXNwKSBiZWdpbgotICAgICAgICAgICAgICAgIGlmIChkaGlfcmVzcF9leGMgfCBhYnNfZXJyX2FjY19idXN5X2ZmKSBiZWdpbgotICAgICAgICAgICAgICAgICAgICBhYnNfZnNtX25leHQgPSBBQlNfU1RBVEVfRVJSOwotICAgICAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgIGFic19mc21fbmV4dCA9IEFCU19TVEFURV9JRExFOwotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZAotCi0gICAgICAgIEFCU19TVEFURV9YUkVHX1JXOiBiZWdpbgotICAgICAgICAgICAgaWYgKGRoaV9yZXNwKSBiZWdpbgotICAgICAgICAgICAgICAgIGNhc2UgKDEnYjEpCi0gICAgICAgICAgICAgICAgICAgIGFic19lcnJfYWNjX2J1c3lfZmY6IGFic19mc21fbmV4dCA9IEFCU19TVEFURV9FUlI7Ci0gICAgICAgICAgICAgICAgICAgIGFic19jbWRfcG9zdGV4ZWNfZmY6IGFic19mc21fbmV4dCA9IEFCU19TVEFURV9FWEVDOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgOiBhYnNfZnNtX25leHQgPSBBQlNfU1RBVEVfSURMRTsKLSAgICAgICAgICAgICAgICBlbmRjYXNlCi0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kCi0KLSAgICAgICAgQUJTX1NUQVRFX0NTUl9STyAgICAgICA6IGFic19mc21fbmV4dCA9IGFic19lcnJfYWNjX2J1c3lfZmYgPyBBQlNfU1RBVEVfRVJSICAgICAgICAgICAgIDogQUJTX1NUQVRFX0lETEU7Ci0gICAgICAgIEFCU19TVEFURV9DU1JfU0FWRV9YUkVHOiBhYnNfZnNtX25leHQgPSBkaGlfcmVzcCAgICAgICAgICAgID8gQUJTX1NUQVRFX0NTUl9SVyAgICAgICAgICA6IEFCU19TVEFURV9DU1JfU0FWRV9YUkVHOwotICAgICAgICBBQlNfU1RBVEVfQ1NSX1JXICAgICAgIDogYWJzX2ZzbV9uZXh0ID0gZGhpX3Jlc3AgICAgICAgICAgICA/IEFCU19TVEFURV9DU1JfUkVUVVJOX1hSRUcgOiBBQlNfU1RBVEVfQ1NSX1JXOwotCi0gICAgICAgIEFCU19TVEFURV9DU1JfUkVUVVJOX1hSRUc6IGJlZ2luCi0gICAgICAgICAgICBpZiAoZGhpX3Jlc3ApIGJlZ2luCi0gICAgICAgICAgICAgICAgY2FzZSAoMSdiMSkKLSAgICAgICAgICAgICAgICAgICAgYWJzX2Vycl9leGNfZmYgICAgICA6IGFic19mc21fbmV4dCA9IEFCU19TVEFURV9FUlI7Ci0gICAgICAgICAgICAgICAgICAgIGFic19lcnJfYWNjX2J1c3lfZmYgOiBhYnNfZnNtX25leHQgPSBBQlNfU1RBVEVfRVJSOwotICAgICAgICAgICAgICAgICAgICBhYnNfY21kX3Bvc3RleGVjX2ZmIDogYWJzX2ZzbV9uZXh0ID0gQUJTX1NUQVRFX0VYRUM7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgICAgICAgICAgICAgOiBhYnNfZnNtX25leHQgPSBBQlNfU1RBVEVfSURMRTsKLSAgICAgICAgICAgICAgICBlbmRjYXNlCi0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kCi0KLSAgICAgICAgQUJTX1NUQVRFX01FTV9TQVZFX1hSRUcgICAgICAgICA6IGFic19mc21fbmV4dCA9IGRoaV9yZXNwID8gQUJTX1NUQVRFX01FTV9TQVZFX1hSRUdfRk9SQUREUiAgIDogQUJTX1NUQVRFX01FTV9TQVZFX1hSRUc7Ci0gICAgICAgIEFCU19TVEFURV9NRU1fU0FWRV9YUkVHX0ZPUkFERFIgOiBhYnNfZnNtX25leHQgPSBkaGlfcmVzcCA/IEFCU19TVEFURV9NRU1fUlcgICAgICAgICAgICAgICAgICA6IEFCU19TVEFURV9NRU1fU0FWRV9YUkVHX0ZPUkFERFI7Ci0gICAgICAgIEFCU19TVEFURV9NRU1fUlcgICAgICAgICAgICAgICAgOiBhYnNfZnNtX25leHQgPSBkaGlfcmVzcCA/IEFCU19TVEFURV9NRU1fUkVUVVJOX1hSRUcgICAgICAgICA6IEFCU19TVEFURV9NRU1fUlc7Ci0gICAgICAgIEFCU19TVEFURV9NRU1fUkVUVVJOX1hSRUcgICAgICAgOiBhYnNfZnNtX25leHQgPSBkaGlfcmVzcCA/IEFCU19TVEFURV9NRU1fUkVUVVJOX1hSRUdfRk9SQUREUiA6IEFCU19TVEFURV9NRU1fUkVUVVJOX1hSRUc7Ci0KLSAgICAgICAgQUJTX1NUQVRFX01FTV9SRVRVUk5fWFJFR19GT1JBRERSOiBiZWdpbgotICAgICAgICAgICAgaWYgKGRoaV9yZXNwKSBiZWdpbgotICAgICAgICAgICAgICAgIGNhc2UgKDEnYjEpCi0gICAgICAgICAgICAgICAgICAgIGFic19lcnJfZXhjX2ZmOiBhYnNfZnNtX25leHQgPSBBQlNfU1RBVEVfRVJSOwotICAgICAgICAgICAgICAgICAgICBhYnNfZXJyX2FjY19idXN5X2ZmIDogYWJzX2ZzbV9uZXh0ID0gQUJTX1NUQVRFX0VSUjsKLSAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9wb3N0ZXhlY19mZiA6IGFic19mc21fbmV4dCA9IEFCU19TVEFURV9FWEVDOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgIDogYWJzX2ZzbV9uZXh0ID0gQUJTX1NUQVRFX0lETEU7Ci0gICAgICAgICAgICAgICAgZW5kY2FzZQotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZAotCi0gICAgICAgIEFCU19TVEFURV9FUlI6IGJlZ2luCi0gICAgICAgICAgICBpZiAoYWJzdHJhY3Rjc193cl9yZXEgJiAoYWJzdHJhY3Rjc19jbWRlcnJfbmV4dCA9PSAzJ2IwKSkgYmVnaW4KLSAgICAgICAgICAgICAgICBhYnNfZnNtX25leHQgPSBBQlNfU1RBVEVfSURMRTsKLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmQKLSAgICBlbmRjYXNlCi0KLSAgICBpZiAofmFic19mc21faWRsZSAmIGhhcnRfc3RhdGVfcmVzZXQpIGJlZ2luCi0gICAgICAgIGFic19mc21fbmV4dCAgICA9IEFCU19TVEFURV9FUlI7Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIGFic19mc21faWRsZSAgICAgPSAoYWJzX2ZzbV9mZiA9PSBBQlNfU1RBVEVfSURMRSk7Ci1hc3NpZ24gYWJzX2ZzbV9leGVjICAgICA9IChhYnNfZnNtX2ZmID09IEFCU19TVEFURV9FWEVDKTsKLWFzc2lnbiBhYnNfZnNtX2Nzcl9ybyAgID0gKGFic19mc21fZmYgPT0gQUJTX1NUQVRFX0NTUl9STyk7Ci1hc3NpZ24gYWJzX2ZzbV9lcnIgICAgICA9IChhYnNfZnNtX2ZmID09IEFCU19TVEFURV9FUlIpOwotYXNzaWduIGFic19mc21fdXNlX2FkZHIgPSAoYWJzX2ZzbV9mZiA9PSBBQlNfU1RBVEVfTUVNX1NBVkVfWFJFR19GT1JBRERSKQotICAgICAgICAgICAgICAgICAgICAgICAgfCAoYWJzX2ZzbV9mZiA9PSBBQlNfU1RBVEVfTUVNX1JFVFVSTl9YUkVHX0ZPUkFERFIpOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQWJzdHJhY3QgY29tbWFuZCBzdGF0dXMgbG9naWMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIEFic3RyYWN0IGNvbW1hbmQgYWNjZXNzIGJ1c3kgZXJyb3IgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBhYnNfZXJyX2FjY19idXN5X3VwZCA9IGNsa19lbl9hYnMgJiAoYWJzX2ZzbV9pZGxlIHwgZG1pX3JlcV9hbnkpOwotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAoYWJzX2Vycl9hY2NfYnVzeV91cGQpIGFic19lcnJfYWNjX2J1c3lfZmYgPD0gYWJzX2Vycl9hY2NfYnVzeV9uZXh0OwotZW5kCi0KLWFzc2lnbiBhYnNfZXJyX2FjY19idXN5X25leHQgPSB+YWJzX2ZzbV9pZGxlICYgZG1pX3JlcV9hbnk7Ci0KLS8vIEFic3RyYWN0IGNvbW1hbmQgYWNjZXNzIGV4Y2VwdGlvbiBlcnJvciByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIGFic19lcnJfZXhjX3VwZCA9IGNsa19lbl9hYnMgJiAoYWJzX2ZzbV9pZGxlIHwgKGRoaV9yZXNwICYgZGhpX3Jlc3BfZXhjKSk7Ci0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmIChhYnNfZXJyX2V4Y191cGQpIGFic19lcnJfZXhjX2ZmIDw9IGFic19lcnJfZXhjX25leHQ7Ci1lbmQKLQotYXNzaWduIGFic19lcnJfZXhjX25leHQgPSB+YWJzX2ZzbV9pZGxlICYgZGhpX3Jlc3AgJiBkaGlfcmVzcF9leGM7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBBYnN0cmFjdCBJbnN0cnVjdGlvbiBsb2dpYwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0gLy8gQ29zaXN0cyBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uYWwgdW5pdHM6Ci0gLy8gLSBJbnN0cnVjdGlvbiBleGVjdXRpb24gcmVxdWVzdCByZWdpc3RlcgotIC8vIC0gSW5zdHJ1Y3Rpb24gbWVtb3J5IEZVTkNUMyBmaWVsZCBtdWx0aXBsZXhlcgotIC8vIC0gSW5zdHJ1Y3Rpb24gUlMxIG11bHRpcGxleGVyCi0gLy8gLSBJbnN0cnVjdGlvbiBSRCBtdWx0aXBsZXhlcgotIC8vIC0gQWJzdHJhY3QgSW5zdHJ1Y3Rpb24gcmVnaXN0ZXIKLQotLy8gQWJzdHJhY3QgaW5zdHJ1Y3Rpb24gZXhlY3V0aW9uIHJlcXVlc3QgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBhYnNfZXhlY19yZXFfbmV4dCA9IH4oYWJzX2ZzbV9pZGxlIHwgYWJzX2ZzbV9jc3Jfcm8gfCBhYnNfZnNtX2VycikgJiB+ZGhpX3Jlc3A7Ci0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmIChjbGtfZW5fZG0pIGJlZ2luCi0gICAgICAgIGlmICh+ZG1jb250cm9sX2RtYWN0aXZlX2ZmKSBiZWdpbgotICAgICAgICAgICAgYWJzX2V4ZWNfcmVxX2ZmIDw9IDEnYjA7Ci0gICAgICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgICAgICBhYnNfZXhlY19yZXFfZmYgPD0gYWJzX2V4ZWNfcmVxX25leHQ7Ci0gICAgICAgIGVuZAotICAgIGVuZAotZW5kCi0KLS8vIEFic3RyYWN0IGluc3RydWN0aW9uIG1lbW9yeSBGVU5DVDMgZmllbGQgbXVsdGlwbGV4ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgY2FzZSAoYWJzX2NtZF9zaXplX2ZmKQotICAgICAgICAyJ2IwMCAgOiBhYnNfaW5zdHJfbWVtX2Z1bmN0MyA9IGFic19jbWRfd3JfZmYgPyBTQ1IxX0ZVTkNUM19TQiA6IFNDUjFfRlVOQ1QzX0xCVTsKLSAgICAgICAgMidiMDEgIDogYWJzX2luc3RyX21lbV9mdW5jdDMgPSBhYnNfY21kX3dyX2ZmID8gU0NSMV9GVU5DVDNfU0ggOiBTQ1IxX0ZVTkNUM19MSFU7Ci0gICAgICAgIDInYjEwICA6IGFic19pbnN0cl9tZW1fZnVuY3QzID0gYWJzX2NtZF93cl9mZiA/IFNDUjFfRlVOQ1QzX1NXIDogU0NSMV9GVU5DVDNfTFc7Ci0gICAgICAgIGRlZmF1bHQ6IGFic19pbnN0cl9tZW1fZnVuY3QzID0gU0NSMV9GVU5DVDNfU0I7Ci0gICAgZW5kY2FzZQotZW5kCi0KLS8vIEFic3RyYWN0IGluc3RydWN0aW9uIFJTMSBtdWx0aXBsZXhlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBhYnNfaW5zdHJfcnMxID0gNSdoMDsKLSAgICBjYXNlIChhYnNfZnNtX2ZmKQotICAgICAgICBBQlNfU1RBVEVfWFJFR19SVyAgICAgICAgICAgICAgICA6IGFic19pbnN0cl9yczEgPSBhYnNfY21kX3dyX2ZmID8gNSdoMCA6IGFic19jbWRfcmVnbm9fZmZbNDowXTsKLSAgICAgICAgQUJTX1NUQVRFX0NTUl9TQVZFX1hSRUcgICAgICAgICAgOiBhYnNfaW5zdHJfcnMxID0gNSdoNTsKLSAgICAgICAgQUJTX1NUQVRFX01FTV9TQVZFX1hSRUcgICAgICAgICAgOiBhYnNfaW5zdHJfcnMxID0gNSdoNTsKLSAgICAgICAgQUJTX1NUQVRFX0NTUl9SRVRVUk5fWFJFRyAgICAgICAgOiBhYnNfaW5zdHJfcnMxID0gNSdoNTsKLSAgICAgICAgQUJTX1NUQVRFX01FTV9SRVRVUk5fWFJFRyAgICAgICAgOiBhYnNfaW5zdHJfcnMxID0gNSdoNTsKLSAgICAgICAgQUJTX1NUQVRFX0NTUl9SVyAgICAgICAgICAgICAgICAgOiBhYnNfaW5zdHJfcnMxID0gYWJzX2NtZF93cl9mZiA/IDUnaDUgOiA1J2gwOwotICAgICAgICBBQlNfU1RBVEVfTUVNX1NBVkVfWFJFR19GT1JBRERSICA6IGFic19pbnN0cl9yczEgPSA1J2g2OwotICAgICAgICBBQlNfU1RBVEVfTUVNX1JFVFVSTl9YUkVHX0ZPUkFERFI6IGFic19pbnN0cl9yczEgPSA1J2g2OwotICAgICAgICBBQlNfU1RBVEVfTUVNX1JXICAgICAgICAgICAgICAgICA6IGFic19pbnN0cl9yczEgPSA1J2g2OwotICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICA6IGJlZ2luIGVuZAotICAgIGVuZGNhc2UKLWVuZAotCi1hc3NpZ24gYWJzX2luc3RyX3JzMiA9IDUnaDU7Ci0KLS8vIEFic3RyYWN0IGluc3RydWN0aW9uIFJEIG11bHRpcGxleGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGFic19pbnN0cl9yZCAgPSA1J2gwOwotICAgIGNhc2UgKGFic19mc21fZmYpCi0gICAgICAgIEFCU19TVEFURV9YUkVHX1JXICAgICAgICAgICAgICAgIDogYWJzX2luc3RyX3JkID0gYWJzX2NtZF93cl9mZiA/IGFic19jbWRfcmVnbm9fZmZbNDowXSA6IDUnaDA7Ci0gICAgICAgIEFCU19TVEFURV9DU1JfU0FWRV9YUkVHICAgICAgICAgIDogYWJzX2luc3RyX3JkID0gYWJzX2NtZF93cl9mZiA/IDUnaDUgOiA1J2gwOwotICAgICAgICBBQlNfU1RBVEVfTUVNX1NBVkVfWFJFRyAgICAgICAgICA6IGFic19pbnN0cl9yZCA9IGFic19jbWRfd3JfZmYgPyA1J2g1IDogNSdoMDsKLSAgICAgICAgQUJTX1NUQVRFX0NTUl9SVyAgICAgICAgICAgICAgICAgOiBhYnNfaW5zdHJfcmQgPSBhYnNfY21kX3dyX2ZmID8gNSdoMCA6IDUnaDU7Ci0gICAgICAgIEFCU19TVEFURV9NRU1fUlcgICAgICAgICAgICAgICAgIDogYWJzX2luc3RyX3JkID0gYWJzX2NtZF93cl9mZiA/IDUnaDAgOiA1J2g1OwotICAgICAgICBBQlNfU1RBVEVfQ1NSX1JFVFVSTl9YUkVHICAgICAgICA6IGFic19pbnN0cl9yZCA9IDUnaDU7Ci0gICAgICAgIEFCU19TVEFURV9NRU1fUkVUVVJOX1hSRUcgICAgICAgIDogYWJzX2luc3RyX3JkID0gNSdoNTsKLSAgICAgICAgQUJTX1NUQVRFX01FTV9TQVZFX1hSRUdfRk9SQUREUiAgOiBhYnNfaW5zdHJfcmQgPSA1J2g2OwotICAgICAgICBBQlNfU1RBVEVfTUVNX1JFVFVSTl9YUkVHX0ZPUkFERFI6IGFic19pbnN0cl9yZCA9IDUnaDY7Ci0gICAgICAgIGRlZmF1bHQgICAgICAgICAgICAgICAgICAgICAgICAgIDogYmVnaW4gZW5kCi0gICAgZW5kY2FzZQotZW5kCi0KLS8vIEFic3RyYWN0IGluc3RydWN0aW9uIHJlZ2lzdGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAoY2xrX2VuX2FicykgYmVnaW4KLSAgICAgICAgYWJzX2V4ZWNfaW5zdHJfZmYgPD0gYWJzX2V4ZWNfaW5zdHJfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGFic19leGVjX2luc3RyX25leHQgPSBhYnNfZXhlY19pbnN0cl9mZjsKLSAgICBjYXNlIChhYnNfZnNtX2ZmKQotICAgICAgICBBQlNfU1RBVEVfWFJFR19SVywKLSAgICAgICAgQUJTX1NUQVRFX0NTUl9TQVZFX1hSRUcsCi0gICAgICAgIEFCU19TVEFURV9DU1JfUkVUVVJOX1hSRUcsCi0gICAgICAgIEFCU19TVEFURV9NRU1fU0FWRV9YUkVHLAotICAgICAgICBBQlNfU1RBVEVfTUVNX1NBVkVfWFJFR19GT1JBRERSLAotICAgICAgICBBQlNfU1RBVEVfTUVNX1JFVFVSTl9YUkVHLAotICAgICAgICBBQlNfU1RBVEVfTUVNX1JFVFVSTl9YUkVHX0ZPUkFERFI6IGJlZ2luCi0gICAgICAgICAgICBhYnNfZXhlY19pbnN0cl9uZXh0ID0ge1NDUjFfSERVX0RCR0NTUl9BRERSX0RTQ1JBVENIMCwgYWJzX2luc3RyX3JzMSwgU0NSMV9GVU5DVDNfQ1NSUlcsIGFic19pbnN0cl9yZCwgU0NSMV9PUF9TWVNURU19OwotICAgICAgICBlbmQKLQotICAgICAgICBBQlNfU1RBVEVfQ1NSX1JXOiBiZWdpbgotICAgICAgICAgICAgYWJzX2V4ZWNfaW5zdHJfbmV4dCA9IGFic19jbWRfd3JfZmYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB7YWJzX2NtZF9yZWdub19mZlsxMTowXSwgYWJzX2luc3RyX3JzMSwgU0NSMV9GVU5DVDNfQ1NSUlcsIGFic19pbnN0cl9yZCwgU0NSMV9PUF9TWVNURU19Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoge2Fic19jbWRfcmVnbm9fZmZbMTE6MF0sIGFic19pbnN0cl9yczEsIFNDUjFfRlVOQ1QzX0NTUlJTLCBhYnNfaW5zdHJfcmQsIFNDUjFfT1BfU1lTVEVNfTsKLSAgICAgICAgZW5kCi0KLSAgICAgICAgQUJTX1NUQVRFX01FTV9SVzogYmVnaW4KLSAgICAgICAgICAgIGFic19leGVjX2luc3RyX25leHQgPSBhYnNfY21kX3dyX2ZmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gezcnaDAsICBhYnNfaW5zdHJfcnMyLCBhYnNfaW5zdHJfcnMxLCBhYnNfaW5zdHJfbWVtX2Z1bmN0MywgNSdoMCwgICAgICAgICBTQ1IxX09QX1NUT1JFfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHsxMidoMCwgICAgICAgICAgICAgICAgYWJzX2luc3RyX3JzMSwgYWJzX2luc3RyX21lbV9mdW5jdDMsIGFic19pbnN0cl9yZCwgU0NSMV9PUF9MT0FEfTsKLSAgICAgICAgZW5kCi0KLSAgICAgICAgZGVmYXVsdDogYmVnaW4gZW5kCi0gICAgZW5kY2FzZQotZW5kCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBBYnN0cmFjdCByZWdpc3RlcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotIC8vIFJlZ2lzdGVyczoKLSAvLyAtIEFCU1RSQUNUQ1MgcmVnaXN0ZXIKLSAvLyAtIENPTU1BTkQgcmVnaXN0ZXIKLSAvLyAtIEFCU1RSQUNUQVVUTyByZWdpc3RlcgotIC8vIC0gUFJPR0JVRjAuLjUgcmVnaXN0ZXJzCi0gLy8gLSBEQVRBMC4uMSByZWdpc3RlcnMKLQotLy8gQUJTVFJBQ1RDUyByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKGNsa19lbl9kbSkgYmVnaW4KLSAgICAgICAgaWYgKH5kbWNvbnRyb2xfZG1hY3RpdmVfZmYpIGJlZ2luCi0gICAgICAgICAgICBhYnN0cmFjdGNzX2NtZGVycl9mZiA8PSBBQlNfRVJSX05PTkU7Ci0gICAgICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgICAgICBhYnN0cmFjdGNzX2NtZGVycl9mZiA8PSBhYnN0cmFjdGNzX2NtZGVycl9uZXh0OwotICAgICAgICBlbmQKLSAgICBlbmQKLWVuZAotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGFic3RyYWN0Y3NfY21kZXJyX25leHQgPSBhYnN0cmFjdGNzX2NtZGVycl9mZjsKLQotICAgIGNhc2UgKGFic19mc21fZmYpCi0gICAgICAgIEFCU19TVEFURV9JRExFOiBiZWdpbgotICAgICAgICAgICAgaWYgKGNvbW1hbmRfd3JfcmVxIHwgZG1pX3JwdF9jb21tYW5kKSBiZWdpbgotICAgICAgICAgICAgICAgIGlmIChhYnNfY21kX2hhcnRyZWdfdmQpIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgKDEnYjEpCi0gICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kX3JlZ19hY2Nlc3NfcmVxIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICgxJ2IxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kX2Nzcl9yd19hY2Nlc3NfdmQ6IGFic3RyYWN0Y3NfY21kZXJyX25leHQgPSBoYXJ0X3N0YXRlX2RoYWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGFic3RyYWN0Y3NfY21kZXJyX2ZmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEFCU19FUlJfTk9IQUxUOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kX21wcmZfYWNjZXNzX3ZkICA6IGFic3RyYWN0Y3NfY21kZXJyX25leHQgPSBoYXJ0X3N0YXRlX2RoYWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGFic3RyYWN0Y3NfY21kZXJyX2ZmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEFCU19FUlJfTk9IQUxUOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kX2Nzcl9yb19hY2Nlc3NfdmQ6IGFic3RyYWN0Y3NfY21kZXJyX25leHQgPSBhYnN0cmFjdGNzX2NtZGVycl9mZjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICAgICAgOiBhYnN0cmFjdGNzX2NtZGVycl9uZXh0ID0gQUJTX0VSUl9DTUQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kY2FzZQotICAgICAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kX2V4ZWNwcm9nYnVmX3JlcSAgICAgICAgIDogYWJzdHJhY3Rjc19jbWRlcnJfbmV4dCA9IGFic3RyYWN0Y3NfY21kZXJyX2ZmOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICAgICAgICAgICAgICA6IGFic3RyYWN0Y3NfY21kZXJyX25leHQgPSBBQlNfRVJSX0NNRDsKLSAgICAgICAgICAgICAgICAgICAgZW5kY2FzZQotICAgICAgICAgICAgICAgIGVuZCBlbHNlIGlmIChhYnNfY21kX2hhcnRtZW1fdmQpIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgIGFic3RyYWN0Y3NfY21kZXJyX25leHQgPSB+YWJzX2NtZF9tZW1zaXplX3ZkID8gQUJTX0VSUl9DTUQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IH5oYXJ0X3N0YXRlX2RoYWx0ICAgPyBBQlNfRVJSX05PSEFMVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFic3RyYWN0Y3NfY21kZXJyX2ZmOwotICAgICAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgIGFic3RyYWN0Y3NfY21kZXJyX25leHQgPSBBQlNfRVJSX0NNRDsKLSAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmQKLQotICAgICAgICBBQlNfU1RBVEVfRVhFQzogYmVnaW4KLSAgICAgICAgICAgIGlmIChkaGlfcmVzcCkgYmVnaW4KLSAgICAgICAgICAgICAgICBpZiAoZGhpX3Jlc3BfZXhjKSBiZWdpbgotICAgICAgICAgICAgICAgICAgICBhYnN0cmFjdGNzX2NtZGVycl9uZXh0ID0gQUJTX0VSUl9FWENFUFRJT047Ci0gICAgICAgICAgICAgICAgZW5kIGVsc2UgaWYgKGFic19lcnJfYWNjX2J1c3lfZmYpIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgIGFic3RyYWN0Y3NfY21kZXJyX25leHQgPSBBQlNfRVJSX0JVU1k7Ci0gICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kCi0KLSAgICAgICAgQUJTX1NUQVRFX1hSRUdfUlcsCi0gICAgICAgIEFCU19TVEFURV9DU1JfUk86IGJlZ2luCi0gICAgICAgICAgICBpZiAoYWJzX2Vycl9hY2NfYnVzeV9mZikgYmVnaW4KLSAgICAgICAgICAgICAgICBhYnN0cmFjdGNzX2NtZGVycl9uZXh0ID0gQUJTX0VSUl9CVVNZOwotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZAotCi0gICAgICAgIEFCU19TVEFURV9DU1JfUkVUVVJOX1hSRUcsCi0gICAgICAgIEFCU19TVEFURV9NRU1fUkVUVVJOX1hSRUdfRk9SQUREUjogYmVnaW4KLSAgICAgICAgICAgIGlmIChkaGlfcmVzcCkgYmVnaW4KLSAgICAgICAgICAgICAgICBjYXNlICgxJ2IxKQotICAgICAgICAgICAgICAgICAgICBhYnNfZXJyX2V4Y19mZiAgICAgOiBhYnN0cmFjdGNzX2NtZGVycl9uZXh0ID0gQUJTX0VSUl9FWENFUFRJT047Ci0gICAgICAgICAgICAgICAgICAgIGFic19lcnJfYWNjX2J1c3lfZmY6IGFic3RyYWN0Y3NfY21kZXJyX25leHQgPSBBQlNfRVJSX0JVU1k7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgIGFic3RyYWN0Y3NfY21kZXJyX25leHQgPSBhYnN0cmFjdGNzX2NtZGVycl9mZjsKLSAgICAgICAgICAgICAgICBlbmRjYXNlCi0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kCi0KLSAgICAgICAgQUJTX1NUQVRFX0VSUjogYmVnaW4KLSAgICAgICAgICAgIGlmIChkbWlfcmVxX2Fic3RyYWN0Y3MgJiBkbWkyZG1fd3JfaSkgYmVnaW4KLSAgICAgICAgICAgICAgICBhYnN0cmFjdGNzX2NtZGVycl9uZXh0ID0gYWJzdHJhY3Rjc19jbWRlcnJfZmYgIC8vIGNwLjcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgKH5kbWkyZG1fd2RhdGFfaVtTQ1IxX0RCR19BQlNUUkFDVENTX0NNREVSUl9ISToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0RCR19BQlNUUkFDVENTX0NNREVSUl9MT10pOwotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZAotCi0gICAgICAgIGRlZmF1bHQ6IGJlZ2luCi0gICAgICAgIGVuZAotICAgIGVuZGNhc2UKLQotICAgIGlmICh+YWJzX2ZzbV9pZGxlICYgaGFydF9zdGF0ZV9yZXNldCkgYmVnaW4KLSAgICAgICAgYWJzdHJhY3Rjc19jbWRlcnJfbmV4dCA9IEFCU19FUlJfRVhDRVBUSU9OOwotICAgIGVuZAotZW5kCi0KLWFzc2lnbiBhYnN0cmFjdGNzX2J1c3kgPSB+YWJzX2ZzbV9pZGxlICYgfmFic19mc21fZXJyOwotCi0vLyBBYnN0cmFjdCBDT01NQU5EIHJlZ2lzdGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAoY2xrX2VuX2RtKSBhYnNfY29tbWFuZF9mZiA8PSBhYnNfY29tbWFuZF9uZXh0OwotZW5kCi0KLWFzc2lnbiBhYnNfY29tbWFuZF9uZXh0ID0gfmRtY29udHJvbF9kbWFjdGl2ZV9mZiAgICAgICAgICA/ICcwCi0gICAgICAgICAgICAgICAgICAgICAgICA6IChjb21tYW5kX3dyX3JlcSAmIGFic19mc21faWRsZSkgPyBkbWkyZG1fd2RhdGFfaQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYWJzX2NvbW1hbmRfZmY7Ci0KLS8vIEFic3RyYWN0IEFCU1RSQUNUQVVUTyByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKGNsa19lbl9kbSkgYWJzX2F1dG9leGVjX2ZmIDw9IGFic19hdXRvZXhlY19uZXh0OwotZW5kCi0KLWFzc2lnbiBhYnNfYXV0b2V4ZWNfbmV4dCA9IH5kbWNvbnRyb2xfZG1hY3RpdmVfZmYgICAgICAgICAgID8gMSdiMAotICAgICAgICAgICAgICAgICAgICAgICAgIDogKGF1dG9leGVjX3dyX3JlcSAmIGFic19mc21faWRsZSkgPyBkbWkyZG1fd2RhdGFfaVswXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhYnNfYXV0b2V4ZWNfZmY7Ci0KLS8vIFByb2dyYW0gQnVmZmVyIHJlZ2lzdGVycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKGNsa19lbl9hYnMgJiBhYnNfZnNtX2lkbGUpIGJlZ2luCi0gICAgICAgIGlmIChwcm9nYnVmMF93cl9yZXEpIGFic19wcm9nYnVmMF9mZiA8PSBkbWkyZG1fd2RhdGFfaTsKLSAgICAgICAgaWYgKHByb2didWYxX3dyX3JlcSkgYWJzX3Byb2didWYxX2ZmIDw9IGRtaTJkbV93ZGF0YV9pOwotICAgICAgICBpZiAocHJvZ2J1ZjJfd3JfcmVxKSBhYnNfcHJvZ2J1ZjJfZmYgPD0gZG1pMmRtX3dkYXRhX2k7Ci0gICAgICAgIGlmIChwcm9nYnVmM193cl9yZXEpIGFic19wcm9nYnVmM19mZiA8PSBkbWkyZG1fd2RhdGFfaTsKLSAgICAgICAgaWYgKHByb2didWY0X3dyX3JlcSkgYWJzX3Byb2didWY0X2ZmIDw9IGRtaTJkbV93ZGF0YV9pOwotICAgICAgICBpZiAocHJvZ2J1ZjVfd3JfcmVxKSBhYnNfcHJvZ2J1ZjVfZmYgPD0gZG1pMmRtX3dkYXRhX2k7Ci0gICAgZW5kCi1lbmQKLQotLy8gRGF0YSAwIHJlZ2lzdGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAoY2xrX2VuX2FicykgYmVnaW4KLSAgICAgICAgYWJzX2RhdGEwX2ZmIDw9IGFic19kYXRhMF9uZXh0OwotICAgIGVuZAotZW5kCi0KLWFzc2lnbiBkYXRhMF94cmVnX3NhdmUgPSBkcmVnX3dyX3JlcSAmIH5hYnNfY21kX3dyX2ZmOwotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGFic19kYXRhMF9uZXh0ID0gYWJzX2RhdGEwX2ZmOwotCi0gICAgY2FzZSAoYWJzX2ZzbV9mZikKLSAgICAgICAgQUJTX1NUQVRFX0lETEUgICAgICAgICAgIDogYWJzX2RhdGEwX25leHQgPSBkYXRhMF93cl9yZXEgICAgPyBkbWkyZG1fd2RhdGFfaSAgICAgICA6IGFic19kYXRhMF9mZjsKLSAgICAgICAgQUJTX1NUQVRFX0VYRUMgICAgICAgICAgIDogYWJzX2RhdGEwX25leHQgPSBkcmVnX3dyX3JlcSAgICAgPyBwaXBlMmRtX2RyZWdfd2RhdGFfaSA6IGFic19kYXRhMF9mZjsKLSAgICAgICAgQUJTX1NUQVRFX0NTUl9TQVZFX1hSRUcgIDogYWJzX2RhdGEwX25leHQgPSBkcmVnX3dyX3JlcSAgICAgPyBwaXBlMmRtX2RyZWdfd2RhdGFfaSA6IGFic19kYXRhMF9mZjsKLSAgICAgICAgQUJTX1NUQVRFX0NTUl9SRVRVUk5fWFJFRzogYWJzX2RhdGEwX25leHQgPSBkcmVnX3dyX3JlcSAgICAgPyBwaXBlMmRtX2RyZWdfd2RhdGFfaSA6IGFic19kYXRhMF9mZjsKLSAgICAgICAgQUJTX1NUQVRFX01FTV9TQVZFX1hSRUcgIDogYWJzX2RhdGEwX25leHQgPSBkcmVnX3dyX3JlcSAgICAgPyBwaXBlMmRtX2RyZWdfd2RhdGFfaSA6IGFic19kYXRhMF9mZjsKLSAgICAgICAgQUJTX1NUQVRFX01FTV9SRVRVUk5fWFJFRzogYWJzX2RhdGEwX25leHQgPSBkcmVnX3dyX3JlcSAgICAgPyBwaXBlMmRtX2RyZWdfd2RhdGFfaSA6IGFic19kYXRhMF9mZjsKLSAgICAgICAgQUJTX1NUQVRFX1hSRUdfUlcgICAgICAgIDogYWJzX2RhdGEwX25leHQgPSBkYXRhMF94cmVnX3NhdmUgPyBwaXBlMmRtX2RyZWdfd2RhdGFfaSA6IGFic19kYXRhMF9mZjsKLQotICAgICAgICBBQlNfU1RBVEVfQ1NSX1JPOiBiZWdpbgotICAgICAgICAgICAgY2FzZSAoYWJzX2NtZF9yZWdub19mZlsxMTowXSkKLSAgICAgICAgICAgICAgICBTQ1IxX0NTUl9BRERSX01JU0EgICAgIDogYWJzX2RhdGEwX25leHQgPSBTQ1IxX0NTUl9NSVNBOwotICAgICAgICAgICAgICAgIFNDUjFfQ1NSX0FERFJfTVZFTkRPUklEOiBhYnNfZGF0YTBfbmV4dCA9IFNDUjFfQ1NSX01WRU5ET1JJRDsKLSAgICAgICAgICAgICAgICBTQ1IxX0NTUl9BRERSX01BUkNISUQgIDogYWJzX2RhdGEwX25leHQgPSBTQ1IxX0NTUl9NQVJDSElEOwotICAgICAgICAgICAgICAgIFNDUjFfQ1NSX0FERFJfTUlNUElEICAgOiBhYnNfZGF0YTBfbmV4dCA9IFNDUjFfQ1NSX01JTVBJRDsKLSAgICAgICAgICAgICAgICBTQ1IxX0NTUl9BRERSX01IQVJUSUQgIDogYWJzX2RhdGEwX25leHQgPSBzb2MyZG1fZnVzZV9taGFydGlkX2k7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICAgICA6IGFic19kYXRhMF9uZXh0ID0gcGlwZTJkbV9wY19zYW1wbGVfaTsKLSAgICAgICAgICAgIGVuZGNhc2UKLSAgICAgICAgZW5kCi0KLSAgICAgICAgZGVmYXVsdCA6IGJlZ2luIGVuZAotICAgIGVuZGNhc2UKLWVuZAotCi0vLyBEYXRhIDEgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmIChjbGtfZW5fYWJzKSBiZWdpbgotICAgICAgICBhYnNfZGF0YTFfZmYgPD0gYWJzX2RhdGExX25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBhYnNfZGF0YTFfbmV4dCA9IGFic19kYXRhMV9mZjsKLSAgICBjYXNlIChhYnNfZnNtX2ZmKQotICAgICAgICBBQlNfU1RBVEVfSURMRSAgICAgICAgICAgICAgICAgICA6IGFic19kYXRhMV9uZXh0ID0gZGF0YTFfd3JfcmVxID8gZG1pMmRtX3dkYXRhX2kgICAgICAgOiBhYnNfZGF0YTFfZmY7Ci0gICAgICAgIEFCU19TVEFURV9NRU1fU0FWRV9YUkVHX0ZPUkFERFIgIDogYWJzX2RhdGExX25leHQgPSBkcmVnX3dyX3JlcSAgPyBwaXBlMmRtX2RyZWdfd2RhdGFfaSA6IGFic19kYXRhMV9mZjsKLSAgICAgICAgQUJTX1NUQVRFX01FTV9SRVRVUk5fWFJFR19GT1JBRERSOiBhYnNfZGF0YTFfbmV4dCA9IGRyZWdfd3JfcmVxICA/IHBpcGUyZG1fZHJlZ193ZGF0YV9pIDogYWJzX2RhdGExX2ZmOwotICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICA6IGJlZ2luIGVuZAotICAgIGVuZGNhc2UKLWVuZAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRGVidWcgSGFydCBJbnRlcmZhY2UgOiBjb250cm9sCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gY21kX3Jlc3Bfb2sgICAgPSBwaXBlMmRtX2NtZF9yZXNwX2kgJiB+cGlwZTJkbV9jbWRfcmNvZGVfaTsKLWFzc2lnbiBoYXJ0X3JzdF91bmV4cCA9IH5kaGlfZnNtX2lkbGUgICAgICAmIH5kaGlfZnNtX2hhbHRfcmVxICYgaGFydF9zdGF0ZV9yZXNldDsKLQotYXNzaWduIGhhbHRfcmVxX3ZkICAgID0gZG1jb250cm9sX2hhbHRyZXFfZmYgICAmIH5oYXJ0X3N0YXRlX2RoYWx0OwotYXNzaWduIHJlc3VtZV9yZXFfdmQgID0gZG1jb250cm9sX3Jlc3VtZXJlcV9mZiAmIH5kbXN0YXR1c19hbGxhbnlfcmVzdW1lYWNrX2ZmCi0gICAgICAgICAgICAgICAgICAgICAgJiBoYXJ0X3N0YXRlX2RoYWx0OwotCi0vLyBESEkgZnNtCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICBkaGlfZnNtX2ZmICAgPD0gREhJX1NUQVRFX0lETEU7Ci0gICAgZW5kIGVsc2UgaWYgKGNsa19lbl9kbSkgYmVnaW4KLSAgICAgICAgZGhpX2ZzbV9mZiA8PSBkaGlfZnNtX25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBkaGlfZnNtX25leHQgPSBkaGlfZnNtX2ZmOwotICAgIGlmICh+aGFydF9yc3RfdW5leHAgJiBkbWNvbnRyb2xfZG1hY3RpdmVfZmYpIGJlZ2luCi0gICAgICAgIC8vIE5vcm1hbCB3b3JrCi0gICAgICAgIGNhc2UgKGRoaV9mc21fZmYpCi0gICAgICAgICAgICBESElfU1RBVEVfSURMRSAgICAgIDogZGhpX2ZzbV9uZXh0ID0gZGhpX3JlcTsKLSAgICAgICAgICAgIERISV9TVEFURV9FWEVDICAgICAgOiBkaGlfZnNtX25leHQgPSBjbWRfcmVzcF9vayAgICAgID8gREhJX1NUQVRFX0VYRUNfUlVOICAgOiBESElfU1RBVEVfRVhFQzsKLSAgICAgICAgICAgIERISV9TVEFURV9FWEVDX1JVTiAgOiBkaGlfZnNtX25leHQgPSBoYXJ0X3N0YXRlX2RydW4gID8gREhJX1NUQVRFX0VYRUNfSEFMVCAgOiBESElfU1RBVEVfRVhFQ19SVU47Ci0gICAgICAgICAgICBESElfU1RBVEVfSEFMVF9SRVEgIDogZGhpX2ZzbV9uZXh0ID0gY21kX3Jlc3Bfb2sgICAgICA/IERISV9TVEFURV9FWEVDX0hBTFQgIDogREhJX1NUQVRFX0hBTFRfUkVROwotICAgICAgICAgICAgREhJX1NUQVRFX0VYRUNfSEFMVCA6IGRoaV9mc21fbmV4dCA9IGhhcnRfc3RhdGVfZGhhbHQgPyBESElfU1RBVEVfSURMRSAgICAgICA6IERISV9TVEFURV9FWEVDX0hBTFQ7Ci0gICAgICAgICAgICBESElfU1RBVEVfUkVTVU1FX1JFUTogZGhpX2ZzbV9uZXh0ID0gY21kX3Jlc3Bfb2sgICAgICA/IERISV9TVEFURV9SRVNVTUVfUlVOIDogREhJX1NUQVRFX1JFU1VNRV9SRVE7Ci0gICAgICAgICAgICBESElfU1RBVEVfUkVTVU1FX1JVTjogZGhpX2ZzbV9uZXh0ID0gaGFydF9zdGF0ZV9ydW4gICA/IERISV9TVEFURV9JRExFICAgICAgIDogREhJX1NUQVRFX1JFU1VNRV9SVU47Ci0gICAgICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgIDogZGhpX2ZzbV9uZXh0ID0gZGhpX2ZzbV9mZjsKLSAgICAgICAgZW5kY2FzZQotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIC8vIEluIGNhc2Ugb2YgRE0gcmVzZXQgb3IgY29yZSB1bmV4cGVjdGVkIHJlc2V0Ci0gICAgICAgIGRoaV9mc21fbmV4dCA9IERISV9TVEFURV9JRExFOwotICAgIGVuZAotZW5kCi0KLWFzc2lnbiBkaGlfZnNtX2lkbGUgICAgICAgPSAoZGhpX2ZzbV9mZiA9PSBESElfU1RBVEVfSURMRSk7Ci1hc3NpZ24gZGhpX2ZzbV9oYWx0X3JlcSAgID0gKGRoaV9mc21fZmYgPT0gREhJX1NUQVRFX0hBTFRfUkVRKTsKLWFzc2lnbiBkaGlfZnNtX2V4ZWMgICAgICAgPSAoZGhpX2ZzbV9mZiA9PSBESElfU1RBVEVfRVhFQyk7Ci1hc3NpZ24gZGhpX2ZzbV9leGVjX2hhbHQgID0gKGRoaV9mc21fZmYgPT0gREhJX1NUQVRFX0VYRUNfSEFMVCk7Ci1hc3NpZ24gZGhpX2ZzbV9yZXN1bWVfcmVxID0gKGRoaV9mc21fZmYgPT0gREhJX1NUQVRFX1JFU1VNRV9SRVEpOwotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGNhc2UgKDEnYjEpCi0gICAgICAgIGFic19leGVjX3JlcV9mZjogZGhpX3JlcSA9IERISV9TVEFURV9FWEVDOwotICAgICAgICBoYWx0X3JlcV92ZCAgICA6IGRoaV9yZXEgPSBESElfU1RBVEVfSEFMVF9SRVE7Ci0gICAgICAgIHJlc3VtZV9yZXFfdmQgIDogZGhpX3JlcSA9IERISV9TVEFURV9SRVNVTUVfUkVROwotICAgICAgICBkZWZhdWx0ICAgICAgICA6IGRoaV9yZXEgPSBESElfU1RBVEVfSURMRTsKLSAgICBlbmRjYXNlCi1lbmQKLQotYXNzaWduIGRoaV9yZXNwICAgICA9IGRoaV9mc21fZXhlY19oYWx0ICAgICYgaGFydF9zdGF0ZV9kaGFsdDsKLWFzc2lnbiBkaGlfcmVzcF9leGMgPSBwaXBlMmRtX2hhcnRfZXZlbnRfaSAmIHBpcGUyZG1faGFydF9zdGF0dXNfaS5leGNlcHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIH5waXBlMmRtX2hhcnRfc3RhdHVzX2kuZWJyZWFrOwotCi0vLyBIQVJUIGNvbW1hbmQgcmVnaXN0ZXJzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBIQVJUIGNvbW1hbmQgcmVxdWVzdCByZWdpc3RlcgotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24pIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgaGFydF9jbWRfcmVxX2ZmIDw9IDEnYjA7Ci0gICAgZW5kIGVsc2UgaWYgKGNsa19lbl9kbSkgYmVnaW4KLSAgICAgICAgaGFydF9jbWRfcmVxX2ZmIDw9IGhhcnRfY21kX3JlcV9uZXh0OwotICAgIGVuZAotZW5kCi0KLWFzc2lnbiBoYXJ0X2NtZF9yZXFfbmV4dCA9IChkaGlfZnNtX2V4ZWMgfCBkaGlfZnNtX2hhbHRfcmVxIHwgZGhpX2ZzbV9yZXN1bWVfcmVxKQotICAgICAgICAgICAgICAgICAgICAgICAgICYgfmNtZF9yZXNwX29rICYgZG1jb250cm9sX2RtYWN0aXZlX2ZmOwotCi0vLyBIQVJUIGNvbW1hbmQgcmVnaXN0ZXIKLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGhhcnRfY21kX2ZmIDw9IFNDUjFfSERVX0RCR1NUQVRFX1JVTjsKLSAgICBlbmQgZWxzZSBpZiAoY2xrX2VuX2RtKSBiZWdpbgotICAgICAgICBoYXJ0X2NtZF9mZiA8PSBoYXJ0X2NtZF9uZXh0OwotICAgIGVuZAotZW5kCi0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgaGFydF9jbWRfbmV4dCA9IFNDUjFfSERVX0RCR1NUQVRFX1JVTjsKLSAgICBpZiAoZG1jb250cm9sX2RtYWN0aXZlX2ZmKSBiZWdpbgotICAgICAgICBjYXNlIChkaGlfZnNtX2ZmKQotICAgICAgICAgICAgREhJX1NUQVRFX0VYRUMgICAgICA6IGhhcnRfY21kX25leHQgPSBTQ1IxX0hEVV9EQkdTVEFURV9EUlVOOwotICAgICAgICAgICAgREhJX1NUQVRFX0hBTFRfUkVRICA6IGhhcnRfY21kX25leHQgPSBTQ1IxX0hEVV9EQkdTVEFURV9ESEFMVEVEOwotICAgICAgICAgICAgREhJX1NUQVRFX1JFU1VNRV9SRVE6IGhhcnRfY21kX25leHQgPSBTQ1IxX0hEVV9EQkdTVEFURV9SVU47Ci0gICAgICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgIDogaGFydF9jbWRfbmV4dCA9IGRtMnBpcGVfY21kX287Ci0gICAgICAgIGVuZGNhc2UKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gZG0ycGlwZV9jbWRfcmVxX28gPSBoYXJ0X2NtZF9yZXFfZmY7Ci1hc3NpZ24gZG0ycGlwZV9jbWRfbyAgICAgPSBoYXJ0X2NtZF9mZjsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIERlYnVnIEhhcnQgSW50ZXJmYWNlIDogcHJvZ3JhbSBidWZmZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFByb2dyYW0gQnVmZmVyIGV4ZWN1dGlvbiBFQlJFQUsgZmxhZwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKGNsa19lbl9kbSkgaGFydF9wYnVmX2VicmVha19mZiA8PSBoYXJ0X3BidWZfZWJyZWFrX25leHQ7Ci1lbmQKLQotYXNzaWduIGhhcnRfcGJ1Zl9lYnJlYWtfbmV4dCA9IGFic19mc21fZXhlYyAmIChkbTJwaXBlX3BidWZfaW5zdHJfbyA9PSBBQlNfRVhFQ19FQlJFQUspOwotCi0vLyBQcm9ncmFtIEJ1ZmZlciBpbnN0cnVjdGlvbiBtdWx0aXBsZXhlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBkbTJwaXBlX3BidWZfaW5zdHJfbyA9IEFCU19FWEVDX0VCUkVBSzsKLQotICAgIGlmIChhYnNfZnNtX2V4ZWMgJiB+aGFydF9wYnVmX2VicmVha19mZikgYmVnaW4KLSAgICAgICAgY2FzZSAocGlwZTJkbV9wYnVmX2FkZHJfaSkKLSAgICAgICAgICAgIDMnaDA6IGRtMnBpcGVfcGJ1Zl9pbnN0cl9vID0gYWJzX3Byb2didWYwX2ZmOwotICAgICAgICAgICAgMydoMTogZG0ycGlwZV9wYnVmX2luc3RyX28gPSBhYnNfcHJvZ2J1ZjFfZmY7Ci0gICAgICAgICAgICAzJ2gyOiBkbTJwaXBlX3BidWZfaW5zdHJfbyA9IGFic19wcm9nYnVmMl9mZjsKLSAgICAgICAgICAgIDMnaDM6IGRtMnBpcGVfcGJ1Zl9pbnN0cl9vID0gYWJzX3Byb2didWYzX2ZmOwotICAgICAgICAgICAgMydoNDogZG0ycGlwZV9wYnVmX2luc3RyX28gPSBhYnNfcHJvZ2J1ZjRfZmY7Ci0gICAgICAgICAgICAzJ2g1OiBkbTJwaXBlX3BidWZfaW5zdHJfbyA9IGFic19wcm9nYnVmNV9mZjsKLSAgICAgICAgICAgIGRlZmF1bHQ6IDsKLSAgICAgICAgZW5kY2FzZQotICAgIGVuZCBlbHNlIGlmIChwaXBlMmRtX3BidWZfYWRkcl9pID09IDMnYjApIGJlZ2luCi0gICAgICAgIGRtMnBpcGVfcGJ1Zl9pbnN0cl9vID0gYWJzX2V4ZWNfaW5zdHJfZmY7Ci0gICAgZW5kCi1lbmQKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIERlYnVnIEhhcnQgSW50ZXJmYWNlIDogYWJzdHJhY3QgY29tbWFuZCBkYXRhCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gZG0ycGlwZV9kcmVnX3Jlc3BfbyAgPSAxJ2IxOwotYXNzaWduIGRtMnBpcGVfZHJlZ19mYWlsX28gID0gMSdiMDsKLWFzc2lnbiBkbTJwaXBlX2RyZWdfcmRhdGFfbyA9IGFic19mc21fdXNlX2FkZHIgPyBhYnNfZGF0YTFfZmYgOiBhYnNfZGF0YTBfZmY7Ci0KLWBpZmRlZiBTQ1IxX1RSR1RfU0lNVUxBVElPTgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEFzc2VydGlvbnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVNWQV9ETV9YX0NPTlRST0wgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgISRpc3Vua25vd24oe2RtaTJkbV9yZXFfaSwgcGlwZTJkbV9kcmVnX3JlcV9pLCBwaXBlMmRtX2NtZF9yZXNwX2ksCi0gICAgICAgICAgICAgICAgIHBpcGUyZG1faGFydF9ldmVudF9pfSkKLSkgZWxzZSAkZXJyb3IoIkRNIGVycm9yOiBjb250cm9sIHNpZ25hbHMgaXMgWCAtICUwYiIsIHtkbWkyZG1fcmVxX2ksCi0gICAgICAgICAgICAgIHBpcGUyZG1fZHJlZ19yZXFfaSwgcGlwZTJkbV9jbWRfcmVzcF9pLCBwaXBlMmRtX2hhcnRfZXZlbnRfaX0pOwotCi1TVkFfRE1fWF9ETUkgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgZG1pMmRtX3JlcV9pIHwtPiAhJGlzdW5rbm93bih7ZG1pMmRtX3dyX2ksIGRtaTJkbV9hZGRyX2ksIGRtaTJkbV93ZGF0YV9pfSkKLSkgZWxzZSAkZXJyb3IoIkRNIGVycm9yOiBkYXRhIHNpZ25hbHMgaXMgWCBvbiBkbWkiKTsKLQotU1ZBX0RNX1hfSEFSVF9QQlVGIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgICEkaXN1bmtub3duIChwaXBlMmRtX3BidWZfYWRkcl9pKQotKSBlbHNlICRlcnJvcigiRE0gZXJyb3I6IGRhdGEgc2lnbmFscyBpcyBYIG9uIGhhcnRfcGJ1ZiIpOwotCi1TVkFfRE1fWF9IQVJUX0RSRUcgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgcGlwZTJkbV9kcmVnX3JlcV9pIHwtPiAhJGlzdW5rbm93bih7cGlwZTJkbV9kcmVnX3dyX2ksIHBpcGUyZG1fZHJlZ193ZGF0YV9pfSkKLSkgZWxzZSAkZXJyb3IoIkRNIGVycm9yOiBkYXRhIHNpZ25hbHMgaXMgWCBvbiBoYXJ0X2RyZWciKTsKLQotU1ZBX0RNX1hfSEFSVF9DTUQgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgcGlwZTJkbV9jbWRfcmVzcF9pIHwtPiAhJGlzdW5rbm93bih7cGlwZTJkbV9jbWRfcmNvZGVfaX0pCi0pIGVsc2UgJGVycm9yKCJETSBlcnJvcjogZGF0YSBzaWduYWxzIGlzIFggb24gZG0ycGlwZV9jbWRfbyIpOwotCi1TVkFfRE1fWF9IQVJUX0VWRU5UIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgIHBpcGUyZG1faGFydF9ldmVudF9pIHwtPiAhJGlzdW5rbm93bihwaXBlMmRtX2hhcnRfc3RhdHVzX2kpCi0pIGVsc2UgJGVycm9yKCJETSBlcnJvcjogZGF0YSBzaWduYWxzIGlzIFggb24gcGlwZTJkbV9oYXJ0X2V2ZW50X2kiKTsKLQotYGVuZGlmIC8vIFNDUjFfVFJHVF9TSU1VTEFUSU9OCi0KLWVuZG1vZHVsZSA6IHNjcjFfZG0KLQotYGVuZGlmIC8vIFNDUjFfREJHX0VOCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9zY3IxX2RtaS5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3NjcjFfZG1pLnN2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGI2MjFlLi4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3NjcjFfZG1pLnN2CisrKyAvZGV2L251bGwKQEAgLTEsMTk4ICswLDAgQEAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjEKLS8vIAotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKLS8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBTeW50YWNvcmUgTExDCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vIEBmaWxlICAgICAgIDxzY3IxX2RtaS5zdj4KLS8vLyBAYnJpZWYgICAgICBEZWJ1ZyBNb2R1bGUgSW50ZXJmYWNlIChETUkpCi0vLy8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAvLwotIC8vIEZ1bmN0aW9uYWxpdHk6Ci0gLy8gLSBQcm92aWRlcyBUQVBDIHdpdGggYWNjZXNzIHRvIERlYnVnIE1vZHVsZSAoRE0pIGFuZCBEVE1DUwotIC8vCi0gLy8gU3RydWN0dXJlOgotIC8vIC0gRE1JIDwtPiBUQVAgaW50ZXJmYWNlCi0gLy8gLSBETUkgPC0+IERNIGludGVyZmFjZQotIC8vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1gaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKLQotYGlmZGVmIFNDUjFfREJHX0VOCi1gaW5jbHVkZSAic2NyMV9kbS5zdmgiCi0KLW1vZHVsZSBzY3IxX2RtaSAoCi0gICAgLy8gU3lzdGVtCi0gICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnN0X24sICAgICAgICAgICAgICAgICAgICAgIC8vIERNSSB1bml0IHJlc2V0Ci0gICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIERNSSB1bml0IGNsb2NrCi0KLSAgICAvLyBUQVAgaW50ZXJmYWNlCi0gICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY3N5bmMyZG1pX2NoX3NlbF9pLCAgICAgIC8vIERlYnVnIFRyYW5zcG9ydCBNb2R1bGUgQ2hhaW4gU2VsZWN0Ci0gICAgaW5wdXQgIGxvZ2ljIFtTQ1IxX0RCR19ETUlfQ0hfSURfV0lEVEgtMTowXSAgICAgdGFwY3N5bmMyZG1pX2NoX2lkX2ksICAgICAgIC8vIERlYnVnIFRyYW5zcG9ydCBNb2R1bGUgQ2hhaW4gSUQKLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjc3luYzJkbWlfY2hfY2FwdHVyZV9pLCAgLy8gRGVidWcgVHJhbnNwb3J0IE1vZHVsZSBDaGFpbiBDYXB0dXJlCi0gICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY3N5bmMyZG1pX2NoX3NoaWZ0X2ksICAgIC8vIERlYnVnIFRyYW5zcG9ydCBNb2R1bGUgQ2hhaW4gU2hpZnQKLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjc3luYzJkbWlfY2hfdXBkYXRlX2ksICAgLy8gRGVidWcgVHJhbnNwb3J0IE1vZHVsZSBDaGFpbiBVcGRhdGUKLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjc3luYzJkbWlfY2hfdGRpX2ksICAgICAgLy8gRGVidWcgVHJhbnNwb3J0IE1vZHVsZSBDaGFpbiBUREkKLSAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWkydGFwY3N5bmNfY2hfdGRvX28sICAgICAgLy8gRGVidWcgVHJhbnNwb3J0IE1vZHVsZSBDaGFpbiBURE8KLQotICAgIC8vIERNIGludGVyZmFjZQotICAgIGlucHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtMmRtaV9yZXNwX2ksICAgICAgICAgICAgICAvLyBETUkgcmVzcG9uc2UKLSAgICBpbnB1dCBsb2dpYyBbU0NSMV9EQkdfRE1JX0RBVEFfV0lEVEgtMTowXSAgICAgICBkbTJkbWlfcmRhdGFfaSwgICAgICAgICAgICAgLy8gRE1JIHJlYWQgZGF0YQotICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtaTJkbV9yZXFfbywgICAgICAgICAgICAgICAvLyBETUkgcmVxdWVzdAotICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtaTJkbV93cl9vLCAgICAgICAgICAgICAgICAvLyBETUkgd3JpdGUKLSAgICBvdXRwdXQgbG9naWMgW1NDUjFfREJHX0RNSV9BRERSX1dJRFRILTE6MF0gICAgICBkbWkyZG1fYWRkcl9vLCAgICAgICAgICAgICAgLy8gRE1JIGFkZHJlc3MKLSAgICBvdXRwdXQgbG9naWMgW1NDUjFfREJHX0RNSV9EQVRBX1dJRFRILTE6MF0gICAgICBkbWkyZG1fd2RhdGFfbyAgICAgICAgICAgICAgLy8gRE1JIHdyaXRlIGRhdGEKLSk7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCBwYXJhbWV0ZXJzIGRlY2xhcmF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBEZWJ1ZyBUcmFuc3BvcnQgTW9kdWxlIFN0YXR1cyBwYXJhbWV0ZXJzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1sb2NhbHBhcmFtICAgIERUTUNTX1JFU0VSVkVEQl9ISSA9IDUnZDMxOwotbG9jYWxwYXJhbSAgICBEVE1DU19SRVNFUlZFREJfTE8gPSA1J2QxODsKLWxvY2FscGFyYW0gICAgRFRNQ1NfRE1JSEFSRFJFU0VUID0gNSdkMTc7Ci1sb2NhbHBhcmFtICAgIERUTUNTX0RNSVJFU0VUICAgICA9IDUnZDE2OwotbG9jYWxwYXJhbSAgICBEVE1DU19SRVNFUlZFREEgICAgPSA1J2QxNTsKLWxvY2FscGFyYW0gICAgRFRNQ1NfSURMRV9ISSAgICAgID0gNSdkMTQ7Ci1sb2NhbHBhcmFtICAgIERUTUNTX0lETEVfTE8gICAgICA9IDUnZDEyOwotbG9jYWxwYXJhbSAgICBEVE1DU19ETUlTVEFUX0hJICAgPSA1J2QxMTsKLWxvY2FscGFyYW0gICAgRFRNQ1NfRE1JU1RBVF9MTyAgID0gNSdkMTA7Ci1sb2NhbHBhcmFtICAgIERUTUNTX0FCSVRTX0hJICAgICA9IDUnZDk7Ci1sb2NhbHBhcmFtICAgIERUTUNTX0FCSVRTX0xPICAgICA9IDUnZDQ7Ci1sb2NhbHBhcmFtICAgIERUTUNTX1ZFUlNJT05fSEkgICA9IDUnZDM7Ci1sb2NhbHBhcmFtICAgIERUTUNTX1ZFUlNJT05fTE8gICA9IDUnZDA7Ci0KLS8vIERlYnVnIE1vZHVsZSBJbnRlcmZhY2UgcGFyYW1ldGVycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbG9jYWxwYXJhbSAgICBETUlfT1BfTE8gICA9IDUnZDA7Ci1sb2NhbHBhcmFtICAgIERNSV9PUF9ISSAgID0gRE1JX09QX0xPICAgKyBTQ1IxX0RCR19ETUlfT1BfV0lEVEggICAtIDE7Ci1sb2NhbHBhcmFtICAgIERNSV9EQVRBX0xPID0gRE1JX09QX0hJICAgKyAxOwotbG9jYWxwYXJhbSAgICBETUlfREFUQV9ISSA9IERNSV9EQVRBX0xPICsgU0NSMV9EQkdfRE1JX0RBVEFfV0lEVEggLSAxOwotbG9jYWxwYXJhbSAgICBETUlfQUREUl9MTyA9IERNSV9EQVRBX0hJICsgMTsKLWxvY2FscGFyYW0gICAgRE1JX0FERFJfSEkgPSBETUlfQUREUl9MTyArIFNDUjFfREJHX0RNSV9BRERSX1dJRFRIIC0gMTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHNpZ25hbHMgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFRBUCBkYXRhIHJlZ2lzdGVyCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwX2RyX3VwZDsKLWxvZ2ljIFtTQ1IxX0RCR19ETUlfRFJfRE1JX0FDQ0VTU19XSURUSC0xOjBdICAgICAgICB0YXBfZHJfZmY7Ci1sb2dpYyBbU0NSMV9EQkdfRE1JX0RSX0RNSV9BQ0NFU1NfV0lEVEgtMTowXSAgICAgICAgdGFwX2RyX3NoaWZ0OwotbG9naWMgW1NDUjFfREJHX0RNSV9EUl9ETUlfQUNDRVNTX1dJRFRILTE6MF0gICAgICAgIHRhcF9kcl9yZGF0YTsKLWxvZ2ljIFtTQ1IxX0RCR19ETUlfRFJfRE1JX0FDQ0VTU19XSURUSC0xOjBdICAgICAgICB0YXBfZHJfbmV4dDsKLQotLy8gRE0gcmVhZCBkYXRhIHJlZ2lzdGVyCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1fcmRhdGFfdXBkOwotbG9naWMgW1NDUjFfREJHX0RNSV9EQVRBX1dJRFRILTE6MF0gICAgICAgICAgICAgICAgIGRtX3JkYXRhX2ZmOwotCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY19kbWlfYWNjZXNzX3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX2R0bWNzX3NlbDsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIERNSSA8LT4gVEFQIGludGVyZmFjZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gVEFQQyByZWFkIGRhdGEgbXVsdGlwbGV4ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiB0YXBjX2R0bWNzX3NlbCA9ICh0YXBjc3luYzJkbWlfY2hfaWRfaSA9PSAxJ2QxKTsKLQotLy8gRE1JIG9wZXJhdGlvbiBpcyBhbHdheXMgc3VjY2Vzc2Z1bCBpbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbgotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICB0YXBfZHJfcmRhdGEgPSAnMDsKLQotICAgIGlmKHRhcGNfZHRtY3Nfc2VsKSBiZWdpbgotICAgICAgICB0YXBfZHJfcmRhdGFbRFRNQ1NfUkVTRVJWRURCX0hJOkRUTUNTX1JFU0VSVkVEQl9MT10gPSAnYjA7Ci0gICAgICAgIHRhcF9kcl9yZGF0YVtEVE1DU19ETUlIQVJEUkVTRVRdICAgICAgICAgICAgICAgICAgICA9ICdiMDsKLSAgICAgICAgdGFwX2RyX3JkYXRhW0RUTUNTX0RNSVJFU0VUXSAgICAgICAgICAgICAgICAgICAgICAgID0gJ2IwOwotICAgICAgICB0YXBfZHJfcmRhdGFbRFRNQ1NfUkVTRVJWRURBXSAgICAgICAgICAgICAgICAgICAgICAgPSAnYjA7Ci0gICAgICAgIHRhcF9kcl9yZGF0YVtEVE1DU19JRExFX0hJOkRUTUNTX0lETEVfTE9dICAgICAgICAgICA9ICdiMDsKLSAgICAgICAgdGFwX2RyX3JkYXRhW0RUTUNTX0RNSVNUQVRfSEk6RFRNQ1NfRE1JU1RBVF9MT10gICAgID0gJ2IwOwotICAgICAgICB0YXBfZHJfcmRhdGFbRFRNQ1NfQUJJVFNfSEkgIDpEVE1DU19BQklUU19MT10gICAgICAgPSBTQ1IxX0RCR19ETUlfQUREUl9XSURUSDsKLSAgICAgICAgdGFwX2RyX3JkYXRhW0RUTUNTX1ZFUlNJT05fTE9dICAgICAgICAgICAgICAgICAgICAgID0gMSdiMTsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICB0YXBfZHJfcmRhdGFbRE1JX0FERFJfSEk6RE1JX0FERFJfTE9dICAgICAgICAgICAgICAgPSAnYjA7Ci0gICAgICAgIHRhcF9kcl9yZGF0YVtETUlfREFUQV9ISTpETUlfREFUQV9MT10gICAgICAgICAgICAgICA9IGRtX3JkYXRhX2ZmOwotICAgICAgICB0YXBfZHJfcmRhdGFbRE1JX09QX0hJICA6RE1JX09QX0xPXSAgICAgICAgICAgICAgICAgPSAnYjA7Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIHRhcF9kcl9zaGlmdCA9IHRhcGNfZHRtY3Nfc2VsCi0gICAgICAgICAgICAgICAgICAgID8gezknYjAsIHRhcGNzeW5jMmRtaV9jaF90ZGlfaSwgdGFwX2RyX2ZmW1NDUjFfREJHX0RNSV9EUl9EVE1DU19XSURUSC0xOjFdfQotICAgICAgICAgICAgICAgICAgICA6IHt0YXBjc3luYzJkbWlfY2hfdGRpX2ksIHRhcF9kcl9mZltTQ1IxX0RCR19ETUlfRFJfRE1JX0FDQ0VTU19XSURUSC0xOjFdfTsKLQotLy8gVEFQIGRhdGEgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiB0YXBfZHJfdXBkID0gdGFwY3N5bmMyZG1pX2NoX2NhcHR1cmVfaSB8IHRhcGNzeW5jMmRtaV9jaF9zaGlmdF9pOwotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICB0YXBfZHJfZmYgPD0gJzA7Ci0gICAgZW5kIGVsc2UgaWYodGFwX2RyX3VwZCkgYmVnaW4KLSAgICAgICAgdGFwX2RyX2ZmIDw9IHRhcF9kcl9uZXh0OwotICAgIGVuZAotZW5kCi0KLWFzc2lnbiB0YXBfZHJfbmV4dCA9IHRhcGNzeW5jMmRtaV9jaF9jYXB0dXJlX2kgPyB0YXBfZHJfcmRhdGEKLSAgICAgICAgICAgICAgICAgICA6IHRhcGNzeW5jMmRtaV9jaF9zaGlmdF9pICAgPyB0YXBfZHJfc2hpZnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0YXBfZHJfZmY7Ci0KLWFzc2lnbiBkbWkydGFwY3N5bmNfY2hfdGRvX28gPSB0YXBfZHJfZmZbMF07Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBETUkgPC0+IERNIGludGVyZmFjZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIHRhcGNfZG1pX2FjY2Vzc19yZXEgPSB0YXBjc3luYzJkbWlfY2hfdXBkYXRlX2kgJiB0YXBjc3luYzJkbWlfY2hfc2VsX2kKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICYgKHRhcGNzeW5jMmRtaV9jaF9pZF9pID09IDInZDIpOwotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGRtaTJkbV9yZXFfbyAgICAgICAgICAgPSAxJ2IwOwotICAgIGRtaTJkbV93cl9vICAgICAgICAgICAgPSAxJ2IwOwotICAgIGRtaTJkbV9hZGRyX28gICAgICAgICAgPSAxJ2IwOwotICAgIGRtaTJkbV93ZGF0YV9vICAgICAgICAgPSAxJ2IwOwotCi0gICAgaWYodGFwY19kbWlfYWNjZXNzX3JlcSkgYmVnaW4KLSAgICAgICAgZG1pMmRtX3JlcV9vICAgPSB0YXBfZHJfZmZbRE1JX09QX0hJICA6RE1JX09QX0xPXSAhPSAyJ2IwMDsKLSAgICAgICAgZG1pMmRtX3dyX28gICAgPSB0YXBfZHJfZmZbRE1JX09QX0hJICA6RE1JX09QX0xPXSA9PSAyJ2IxMDsKLSAgICAgICAgZG1pMmRtX2FkZHJfbyAgPSB0YXBfZHJfZmZbRE1JX0FERFJfSEk6RE1JX0FERFJfTE9dOwotICAgICAgICBkbWkyZG1fd2RhdGFfbyA9IHRhcF9kcl9mZltETUlfREFUQV9ISTpETUlfREFUQV9MT107Ci0gICAgZW5kCi1lbmQKLQotLy8gRE0gcmVhZCBkYXRhIHJlZ2lzdGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gZG1fcmRhdGFfdXBkID0gZG1pMmRtX3JlcV9vICYgZG0yZG1pX3Jlc3BfaSAmIH5kbWkyZG1fd3JfbzsKLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24pIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgZG1fcmRhdGFfZmYgPD0gJzA7Ci0gICAgZW5kIGVsc2UgaWYgKGRtX3JkYXRhX3VwZCkgYmVnaW4KLSAgICAgICAgZG1fcmRhdGFfZmYgPD0gZG0yZG1pX3JkYXRhX2k7Ci0gICAgZW5kCi1lbmQKLQotZW5kbW9kdWxlIDogc2NyMV9kbWkKLQotYGVuZGlmIC8vIFNDUjFfREJHX0VOCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9zY3IxX3NjdS5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3NjcjFfc2N1LnN2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjM5NzJlLi4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3NjcjFfc2N1LnN2CisrKyAvZGV2L251bGwKQEAgLTEsNTMzICswLDAgQEAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjEKLS8vIAotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKLS8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBTeW50YWNvcmUgTExDCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vIEBmaWxlIDxzY3IxX3NjdS5zdj4KLS8vLyBAYnJpZWYgU3lzdGVtIENvbnRyb2wgVW5pdCAoU0NVKQotLy8vCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gLy8KLSAvLyBGdW5jdGlvbmFsaXR5OgotIC8vIC0gR2VuZXJhdGVzIFN5c3RlbSwgQ29yZSwgSERVIGFuZCBETSByZXNldHMgYW5kIHRoZWlyIHF1YWxpZmllciBzaWduYWxzCi0gLy8gLSBQcm92aWRlcyBkZWJ1Z2dlciB3aXRoIHNvZnR3YXJlIFN5c3RlbSBhbmQgQ29yZSByZXNldHMgZ2VuZXJhdGlvbiBmdW5jdGlvbmFsaXR5Ci0gLy8gLSBBbGxvd3MgdG8gc2V0IHRoZSBiZWhhdmlvciBvZiBETSBhbmQgSERVIHJlc2V0cwotIC8vIC0gU2hvd3MgcmVzZXRzIFN0YXR1c2VzIGFuZCBTdGlja3kgU3RhdHVzZXMKLQotIC8vIFN0cnVjdHVyZToKLSAvLyAtIFRBUEMgc2Nhbi1jaGFpbiBpbnRlcmZhY2UKLSAvLyAtIFNDVSBDU1JzIHdyaXRlL3JlYWQgaW50ZXJmYWNlCi0gLy8gLSBTQ1UgQ1NSUzoKLSAvLyAgIC0gQ09OVFJPTCByZWdpc3RlcgotIC8vICAgLSBNT0RFIHJlZ2lzdGVyCi0gLy8gICAtIFNUQVRVUyByZWdpc3RlcgotIC8vICAgLSBTVElDS1lfU1RBVFVTIHJlZ2lzdGVyCi0gLy8gLSBSZXNldCBsb2dpYwotIC8vICAgLSBTeXN0ZW0gUmVzZXQKLSAvLyAgIC0gQ29yZSBSZXNldAotIC8vICAgLSBETSBSZXNldAotIC8vICAgLSBIRFUgUmVzZXQKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWBpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgotYGluY2x1ZGUgInNjcjFfc2N1LnN2aCIKLQotYGlmZGVmIFNDUjFfREJHX0VOCi0KLW1vZHVsZSBzY3IxX3NjdSAoCi0gICAgLy8gR2xvYmFsIHNpZ25hbHMKLSAgICBpbnB1dCAgbG9naWMgICAgICAgIHB3cnVwX3JzdF9uLCAgICAgICAgICAgICAgICAgIC8vIFBvd2VyLVVwIFJlc2V0Ci0gICAgaW5wdXQgIGxvZ2ljICAgICAgICByc3RfbiwgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWd1bGFyIFJlc2V0Ci0gICAgaW5wdXQgIGxvZ2ljICAgICAgICBjcHVfcnN0X24sICAgICAgICAgICAgICAgICAgICAvLyBDUFUgUmVzZXQKLSAgICBpbnB1dCAgbG9naWMgICAgICAgIHRlc3RfbW9kZSwgICAgICAgICAgICAgICAgICAgIC8vIERGVCBUZXN0IE1vZGUKLSAgICBpbnB1dCAgbG9naWMgICAgICAgIHRlc3RfcnN0X24sICAgICAgICAgICAgICAgICAgIC8vIERGVCBUZXN0IFJlc2V0Ci0gICAgaW5wdXQgIGxvZ2ljICAgICAgICBjbGssICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTQ1UgY2xvY2sKLQotICAgIC8vIFRBUEMgc2Nhbi1jaGFpbnMKLSAgICBpbnB1dCAgbG9naWMgICAgICAgIHRhcGNzeW5jMnNjdV9jaF9zZWxfaSwgICAgICAgIC8vIFRBUEMgQ2hhaW4gU2VsZWN0Ci0gICAgaW5wdXQgIGxvZ2ljICAgICAgICB0YXBjc3luYzJzY3VfY2hfaWRfaSwgICAgICAgICAvLyBUQVBDIENoYWluIElECi0gICAgaW5wdXQgIGxvZ2ljICAgICAgICB0YXBjc3luYzJzY3VfY2hfY2FwdHVyZV9pLCAgICAvLyBUQVBDIENoYWluIENhcHR1cmUKLSAgICBpbnB1dCAgbG9naWMgICAgICAgIHRhcGNzeW5jMnNjdV9jaF9zaGlmdF9pLCAgICAgIC8vIFRBUEMgQ2hhaW4gU2hpZnQKLSAgICBpbnB1dCAgbG9naWMgICAgICAgIHRhcGNzeW5jMnNjdV9jaF91cGRhdGVfaSwgICAgIC8vIFRBUEMgQ2hhaW4gVXBkYXRlCi0gICAgaW5wdXQgIGxvZ2ljICAgICAgICB0YXBjc3luYzJzY3VfY2hfdGRpX2ksICAgICAgICAvLyBUQVBDIENoYWluIFRESQotICAgIG91dHB1dCBsb2dpYyAgICAgICAgc2N1MnRhcGNzeW5jX2NoX3Rkb19vLCAgICAgICAgLy8gVEFQQyBDaGFpbiBURE8KLQotICAgIC8vIElucHV0IHN5bmMgcmVzZXRzOgotICAgIGlucHV0ICBsb2dpYyAgICAgICAgbmRtX3JzdF9uX2ksICAgICAgICAgICAgICAgICAgLy8gTm9uLURNIFJlc2V0IGlucHV0IGZyb20gRE0KLSAgICBpbnB1dCAgbG9naWMgICAgICAgIGhhcnRfcnN0X25faSwgICAgICAgICAgICAgICAgIC8vIEhBUlQgUmVzZXQgZnJvbSBETQotCi0gICAgLy8gR2VuZXJhdGVkIHJlc2V0cwotICAgIG91dHB1dCBsb2dpYyAgICAgICAgc3lzX3JzdF9uX28sICAgICAgICAgICAgICAgICAgLy8gU3lzdGVtL0NsdXN0ZXIgUmVzZXQKLSAgICBvdXRwdXQgbG9naWMgICAgICAgIGNvcmVfcnN0X25fbywgICAgICAgICAgICAgICAgIC8vIENvcmUgUmVzZXQKLSAgICBvdXRwdXQgbG9naWMgICAgICAgIGRtX3JzdF9uX28sICAgICAgICAgICAgICAgICAgIC8vIERlYnVnIE1vZHVsZSBSZXNldAotICAgIG91dHB1dCBsb2dpYyAgICAgICAgaGR1X3JzdF9uX28sICAgICAgICAgICAgICAgICAgLy8gSEFSVCBEZWJ1ZyBVbml0IFJlc2V0Ci0KLSAgICAvLyBSZXNldHMgc3RhdHVzZXMKLSAgICBvdXRwdXQgbG9naWMgICAgICAgIHN5c19yc3Rfc3RhdHVzX28sICAgICAgICAgICAgIC8vIFN5c3RlbSBSZXNldCBTdGF0dXMgKHN5bmMnZWQgdG8gUE9SIHJlc2V0IGRvbWFpbikKLSAgICBvdXRwdXQgbG9naWMgICAgICAgIGNvcmVfcnN0X3N0YXR1c19vLCAgICAgICAgICAgIC8vIENvcmUgUmVzZXQgU3RhdHVzIChzeW5jJ2VkIHRvIFBPUiByZXNldCBkb21haW4pCi0KLSAgICAvLyBSZXNldCBEb21haW4gQ3Jvc3NpbmcgKFJEQykgcXVhbGlmaWVycwotICAgIG91dHB1dCBsb2dpYyAgICAgICAgc3lzX3JkY19xbGZ5X28sICAgICAgICAgICAgICAgLy8gU3lzdGVtL0NsdXN0ZXItdG8tRXh0ZXJuYWxTT0MgUmVzZXQgRG9tYWluIENyb3NzaW5nIFF1YWxpZmllcgotICAgIG91dHB1dCBsb2dpYyAgICAgICAgY29yZV9yZGNfcWxmeV9vLCAgICAgICAgICAgICAgLy8gQ29yZS10by1FeHRlcm5hbFNPQyBSZXNldCBEb21haW4gQ3Jvc3NpbmcgUXVhbGlmaWVyCi0gICAgb3V0cHV0IGxvZ2ljICAgICAgICBjb3JlMmhkdV9yZGNfcWxmeV9vLCAgICAgICAgICAvLyBDb3JlLXRvLUhEVSBSZXNldCBEb21haW4gQ3Jvc3NpbmcgUXVhbGlmaWVyCi0gICAgb3V0cHV0IGxvZ2ljICAgICAgICBjb3JlMmRtX3JkY19xbGZ5X28sICAgICAgICAgICAvLyBDb3JlLXRvLURNIFJlc2V0IERvbWFpbiBDcm9zc2luZyBRdWFsaWZpZXIKLSAgICBvdXRwdXQgbG9naWMgICAgICAgIGhkdTJkbV9yZGNfcWxmeV9vICAgICAgICAgICAgIC8vIEhEVS10by1ETSBSZXNldCBEb21haW4gQ3Jvc3NpbmcgUXVhbGlmaWVyCi0pOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgUGFyYW1ldGVycwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1sb2NhbHBhcmFtIGludCB1bnNpZ25lZCBTQ1IxX1NDVV9SU1RfU1lOQ19TVEFHRVNfTlVNICAgICAgICA9IDI7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCBTaWduYWxzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBTQ1UgQ1NSIHdyaXRlL3JlYWQgaS9mCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBUQVBDIHNjYW4tY2hhaW4gY29udHJvbCBsb2dpYwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3VfY3NyX3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY19kcl9jYXBfcmVxOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX2RyX3NoZnRfcmVxOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX2RyX3VwZF9yZXE7Ci0KLS8vIFRBUEMgc2hpZnQgcmVnaXN0ZXIgc2lnbmFscwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX3NoaWZ0X3VwZDsKLXR5cGVfc2NyMV9zY3Vfc3lzY3RybF9kcl9zICAgICAgICAgICAgICAgICAgdGFwY19zaGlmdF9mZjsKLXR5cGVfc2NyMV9zY3Vfc3lzY3RybF9kcl9zICAgICAgICAgICAgICAgICAgdGFwY19zaGlmdF9uZXh0OwotCi0vLyBUQVBDIHNoYWRvdyByZWdpc3RlciBzaWduYWxzCi10eXBlX3NjcjFfc2N1X3N5c2N0cmxfZHJfcyAgICAgICAgICAgICAgICAgIHRhcGNfc2hhZG93X2ZmOwotCi0vLyBTQ1UgQ1NSIHdyaXRlL3JlYWQgaS9mCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1sb2dpYyBbU0NSMV9TQ1VfRFJfU1lTQ1RSTF9EQVRBX1dJRFRILTE6MF0gIHNjdV9jc3Jfd2RhdGE7Ci1sb2dpYyBbU0NSMV9TQ1VfRFJfU1lTQ1RSTF9EQVRBX1dJRFRILTE6MF0gIHNjdV9jc3JfcmRhdGE7Ci0KLS8vIFNDVSBDU1JzIHNpZ25hbHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIENvbnRyb2wgcmVnaXN0ZXIKLXR5cGVfc2NyMV9zY3Vfc3lzY3RybF9jb250cm9sX3JlZ19zICAgICAgICAgc2N1X2NvbnRyb2xfZmY7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjdV9jb250cm9sX3dyX3JlcTsKLQotLy8gTW9kZSByZWdpc3RlcgotdHlwZV9zY3IxX3NjdV9zeXNjdHJsX21vZGVfcmVnX3MgICAgICAgICAgICBzY3VfbW9kZV9mZjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2N1X21vZGVfd3JfcmVxOwotCi0vLyBTdGF0dXMgcmVnaXN0ZXIKLXR5cGVfc2NyMV9zY3Vfc3lzY3RybF9zdGF0dXNfcmVnX3MgICAgICAgICAgc2N1X3N0YXR1c19mZjsKLXR5cGVfc2NyMV9zY3Vfc3lzY3RybF9zdGF0dXNfcmVnX3MgICAgICAgICAgc2N1X3N0YXR1c19mZl9kbHk7Ci10eXBlX3NjcjFfc2N1X3N5c2N0cmxfc3RhdHVzX3JlZ19zICAgICAgICAgIHNjdV9zdGF0dXNfZmZfcG9zZWRnZTsKLQotLy8gU3RpY2t5IFN0YXR1cyByZWdpc3RlcgotdHlwZV9zY3IxX3NjdV9zeXNjdHJsX3N0YXR1c19yZWdfcyAgICAgICAgICBzY3Vfc3RpY2t5X3N0c19mZjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2N1X3N0aWNreV9zdHNfd3JfcmVxOwotCi0vLyBSZXNldCBsb2dpYyBzaWduYWxzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBJbnB1dCByZXNldHMgc3luY2hyb25pemF0aW9uIHNpZ25hbHMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHdydXBfcnN0X25fc3luYzsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnN0X25fc3luYzsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1X3JzdF9uX3N5bmM7Ci0KLS8vIFN5c3RlbSBSZXNldCBzaWduYWxzCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c19yc3Rfbl9pbjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzX3JzdF9uX3N0YXR1czsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzX3JzdF9uX3N0YXR1c19zeW5jOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNfcnN0X25fcWxmeTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzX3Jlc2V0X247Ci0KLS8vIENvcmUgUmVzZXQgc2lnbmFscwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX3JzdF9uX2luX3N5bmM7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfcnN0X25fc3RhdHVzOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX3JzdF9uX3N0YXR1c19zeW5jOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX3JzdF9uX3FsZnk7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfcmVzZXRfbjsKLQotLy8gSERVIFJlc2V0IHNpZ25hbHMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1X3JzdF9uX2luX3N5bmM7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdV9yc3Rfbl9zdGF0dXM7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdV9yc3Rfbl9zdGF0dXNfc3luYzsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1X3JzdF9uX3FsZnk7Ci0KLS8vIERNIFJlc2V0IHNpZ25hbHMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1fcnN0X25faW47Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtX3JzdF9uX3N0YXR1czsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFRBUEMgc2Nhbi1jaGFpbiBpL2YKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotIC8vIENvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25hbCB1bml0czoKLSAvLyAtIFRBUEMgc2Nhbi1jaGFpbiBjb250cm9sIGxvZ2ljCi0gLy8gLSBUQVBDIHNoaWZ0IHJlZ2lzdGVyCi0gLy8gLSBUQVBDIHNoYWRvdyByZWdpc3RlcgotLy8KLQotLy8gVEFQQyBzY2FuLWNoYWluIGNvbnRyb2wgbG9naWMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBzY3VfY3NyX3JlcSAgICAgID0gdGFwY3N5bmMyc2N1X2NoX3NlbF9pICYgKHRhcGNzeW5jMnNjdV9jaF9pZF9pID09ICcwKTsKLWFzc2lnbiB0YXBjX2RyX2NhcF9yZXEgID0gc2N1X2Nzcl9yZXEgJiB0YXBjc3luYzJzY3VfY2hfY2FwdHVyZV9pOwotYXNzaWduIHRhcGNfZHJfc2hmdF9yZXEgPSBzY3VfY3NyX3JlcSAmIHRhcGNzeW5jMnNjdV9jaF9zaGlmdF9pOwotYXNzaWduIHRhcGNfZHJfdXBkX3JlcSAgPSBzY3VfY3NyX3JlcSAmIHRhcGNzeW5jMnNjdV9jaF91cGRhdGVfaTsKLQotLy8gVEFQQyBzaGlmdCByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIHRhcGNfc2hpZnRfdXBkID0gdGFwY19kcl9jYXBfcmVxIHwgdGFwY19kcl9zaGZ0X3JlcTsKLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcHdydXBfcnN0X25fc3luYykgYmVnaW4KLSAgICBpZiAofnB3cnVwX3JzdF9uX3N5bmMpIGJlZ2luCi0gICAgICAgIHRhcGNfc2hpZnRfZmYgPD0gJzA7Ci0gICAgZW5kIGVsc2UgaWYgKHRhcGNfc2hpZnRfdXBkKSBiZWdpbgotICAgICAgICB0YXBjX3NoaWZ0X2ZmIDw9IHRhcGNfc2hpZnRfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gdGFwY19zaGlmdF9uZXh0ID0gdGFwY19kcl9jYXBfcmVxICA/IHRhcGNfc2hhZG93X2ZmCi0gICAgICAgICAgICAgICAgICAgICAgIDogdGFwY19kcl9zaGZ0X3JlcSA/IHt0YXBjc3luYzJzY3VfY2hfdGRpX2ksIHRhcGNfc2hpZnRfZmZbU0NSMV9TQ1VfRFJfU1lTQ1RSTF9XSURUSC0xOjFdfS8vIGNwLjUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGFwY19zaGlmdF9mZjsKLQotLy8gVEFQQyBzaGFkb3cgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHB3cnVwX3JzdF9uX3N5bmMpIGJlZ2luCi0gICAgaWYgKH5wd3J1cF9yc3Rfbl9zeW5jKSBiZWdpbgotICAgICAgICB0YXBjX3NoYWRvd19mZiAgICAgIDw9ICcwOwotICAgIGVuZCBlbHNlIGlmICh0YXBjX2RyX3VwZF9yZXEpIGJlZ2luCi0gICAgICAgIHRhcGNfc2hhZG93X2ZmLm9wICAgPD0gdGFwY19zaGlmdF9mZi5vcDsKLSAgICAgICAgdGFwY19zaGFkb3dfZmYuYWRkciA8PSB0YXBjX3NoaWZ0X2ZmLmFkZHI7Ci0gICAgICAgIHRhcGNfc2hhZG93X2ZmLmRhdGEgPD0gc2N1X2Nzcl93ZGF0YTsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gc2N1MnRhcGNzeW5jX2NoX3Rkb19vID0gdGFwY19zaGlmdF9mZlswXTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFNDVSBDU1JzIHdyaXRlL3JlYWQgaW50ZXJmYWNlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBXcml0ZSBpbnRlcmZhY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFJlZ2lzdGVyIHNlbGVjdGlvbiBsb2dpYwotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBzY3VfY29udHJvbF93cl9yZXEgICAgPSAxJ2IwOwotICAgIHNjdV9tb2RlX3dyX3JlcSAgICAgICA9IDEnYjA7Ci0gICAgc2N1X3N0aWNreV9zdHNfd3JfcmVxID0gMSdiMDsKLQotICAgIGlmICh0YXBjX2RyX3VwZF9yZXEgJiYgKHRhcGNfc2hpZnRfZmYub3AgIT0gU0NSMV9TQ1VfU1lTQ1RSTF9PUF9SRUFEKSkgYmVnaW4KLSAgICAgICAgY2FzZSAodGFwY19zaGlmdF9mZi5hZGRyKQotICAgICAgICAgICAgU0NSMV9TQ1VfU1lTQ1RSTF9BRERSX0NPTlRST0w6IHNjdV9jb250cm9sX3dyX3JlcSAgICA9IDEnYjE7Ci0gICAgICAgICAgICBTQ1IxX1NDVV9TWVNDVFJMX0FERFJfTU9ERSAgIDogc2N1X21vZGVfd3JfcmVxICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgIFNDUjFfU0NVX1NZU0NUUkxfQUREUl9TVElDS1kgOiBzY3Vfc3RpY2t5X3N0c193cl9yZXEgPSAodGFwY19zaGlmdF9mZi5vcCA9PSBTQ1IxX1NDVV9TWVNDVFJMX09QX0NMUkJJVFMpOwotICAgICAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICAgICAgICAgICA6IGJlZ2luIGVuZAotICAgICAgICBlbmRjYXNlCi0gICAgZW5kCi1lbmQKLQotLy8gV3JpdGUgZGF0YSBjb25zdHJ1Y3Rpb24KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgc2N1X2Nzcl93ZGF0YSA9ICcwOwotCi0gICAgaWYgKHRhcGNfZHJfdXBkX3JlcSkgYmVnaW4KLSAgICAgICAgY2FzZSAodGFwY19zaGlmdF9mZi5vcCkKLSAgICAgICAgICAgIFNDUjFfU0NVX1NZU0NUUkxfT1BfV1JJVEUgIDogc2N1X2Nzcl93ZGF0YSA9IHRhcGNfc2hpZnRfZmYuZGF0YTsKLSAgICAgICAgICAgIFNDUjFfU0NVX1NZU0NUUkxfT1BfUkVBRCAgIDogc2N1X2Nzcl93ZGF0YSA9IHNjdV9jc3JfcmRhdGE7Ci0gICAgICAgICAgICBTQ1IxX1NDVV9TWVNDVFJMX09QX1NFVEJJVFM6IHNjdV9jc3Jfd2RhdGEgPSBzY3VfY3NyX3JkYXRhIHwgICB0YXBjX3NoaWZ0X2ZmLmRhdGE7Ci0gICAgICAgICAgICBTQ1IxX1NDVV9TWVNDVFJMX09QX0NMUkJJVFM6IHNjdV9jc3Jfd2RhdGEgPSBzY3VfY3NyX3JkYXRhICYgKH50YXBjX3NoaWZ0X2ZmLmRhdGEpOwotICAgICAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICAgICAgICAgOiBiZWdpbiBlbmQKLSAgICAgICAgZW5kY2FzZQotICAgIGVuZAotZW5kCi0KLS8vIFJlYWQgaW50ZXJmYWNlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBSZWFkIGRhdGEgbXVsdGlwbGV4ZXIKLWFsd2F5c19jb21iIGJlZ2luCi0gICAgc2N1X2Nzcl9yZGF0YSA9ICcwOwotCi0gICAgaWYgKHRhcGNfZHJfdXBkX3JlcSkgYmVnaW4KLSAgICAgICAgY2FzZSAodGFwY19zaGlmdF9mZi5hZGRyKQotICAgICAgICAgICAgU0NSMV9TQ1VfU1lTQ1RSTF9BRERSX0NPTlRST0w6IHNjdV9jc3JfcmRhdGEgPSBzY3VfY29udHJvbF9mZjsKLSAgICAgICAgICAgIFNDUjFfU0NVX1NZU0NUUkxfQUREUl9NT0RFICAgOiBzY3VfY3NyX3JkYXRhID0gc2N1X21vZGVfZmY7Ci0gICAgICAgICAgICBTQ1IxX1NDVV9TWVNDVFJMX0FERFJfU1RBVFVTIDogc2N1X2Nzcl9yZGF0YSA9IHNjdV9zdGF0dXNfZmY7Ci0gICAgICAgICAgICBTQ1IxX1NDVV9TWVNDVFJMX0FERFJfU1RJQ0tZIDogc2N1X2Nzcl9yZGF0YSA9IHNjdV9zdGlja3lfc3RzX2ZmOwotICAgICAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICAgICAgICAgICA6IHNjdV9jc3JfcmRhdGEgPSAneDsKLSAgICAgICAgZW5kY2FzZQotICAgIGVuZAotZW5kCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBTQ1UgQ1NScwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0gLy8gUmVnaXN0ZXJzOgotIC8vIC0gQ09OVFJPTCByZWdpc3RlcgotIC8vIC0gTU9ERSByZWdpc3RlcgotIC8vIC0gU1RBVFVTIHJlZ2lzdGVyCi0gLy8gLSBTVElDS1lfU1RBVFVTIHJlZ2lzdGVyCi0vLwotCi0vLyBDT05UUk9MIHJlZ2lzdGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQWxsb3dzIGRlYnVnZ2VyIHRvIGdlbmVyYXRlIFN5c3RlbSBhbmQgQ29yZSByZXNldHMKLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcHdydXBfcnN0X25fc3luYykgYmVnaW4KLSAgICBpZiAofnB3cnVwX3JzdF9uX3N5bmMpIGJlZ2luCi0gICAgICAgIHNjdV9jb250cm9sX2ZmIDw9ICcwOwotICAgIGVuZCBlbHNlIGlmIChzY3VfY29udHJvbF93cl9yZXEpIGJlZ2luCi0gICAgICAgIHNjdV9jb250cm9sX2ZmIDw9IHNjdV9jc3Jfd2RhdGE7Ci0gICAgZW5kCi1lbmQKLQotLy8gTU9ERSByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFNldHMgcmVzZXQgYmVoYXZpb3IgZm9yIERNIFJlc2V0IGFuZCBIRFUgUmVzZXQgc2lnbmFscwotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSBwd3J1cF9yc3Rfbl9zeW5jKSBiZWdpbgotICAgIGlmICh+cHdydXBfcnN0X25fc3luYykgYmVnaW4KLSAgICAgICAgc2N1X21vZGVfZmYgPD0gJzA7Ci0gICAgZW5kIGVsc2UgaWYgKHNjdV9tb2RlX3dyX3JlcSkgYmVnaW4KLSAgICAgICAgc2N1X21vZGVfZmYgPD0gc2N1X2Nzcl93ZGF0YTsKLSAgICBlbmQKLWVuZAotCi0vLyBTVEFUVVMgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBIb2xkcyB0aGUgc3RhdHVzIG9mIGV2ZXJ5IG91dHB1dCByZXNldCBzaWduYWwgKFN5c3RlbSwgQ29yZSwgRE0gYW5kIEhEVSkKLQotYXNzaWduIHNjdV9zdGF0dXNfZmYuc3lzX3Jlc2V0ICA9IHN5c19yc3Rfc3RhdHVzX28gOwotYXNzaWduIHNjdV9zdGF0dXNfZmYuY29yZV9yZXNldCA9IGNvcmVfcnN0X3N0YXR1c19vOwotYXNzaWduIHNjdV9zdGF0dXNfZmYuZG1fcmVzZXQgICA9IH5kbV9yc3Rfbl9zdGF0dXM7Ci1hc3NpZ24gc2N1X3N0YXR1c19mZi5oZHVfcmVzZXQgID0gfmhkdV9yc3Rfbl9zdGF0dXNfc3luYzsKLQotLy8gU3RhdHVzIFJlZ2lzdGVyIHBvc2l0aXZlIGVkZ2UgZGV0ZWN0aW9uIGxvZ2ljCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSBwd3J1cF9yc3Rfbl9zeW5jKSBiZWdpbgotICAgIGlmICh+cHdydXBfcnN0X25fc3luYykgYmVnaW4KLSAgICAgICAgc2N1X3N0YXR1c19mZl9kbHkgPD0gJzA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgc2N1X3N0YXR1c19mZl9kbHkgPD0gc2N1X3N0YXR1c19mZjsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gc2N1X3N0YXR1c19mZl9wb3NlZGdlID0gc2N1X3N0YXR1c19mZiAmIH5zY3Vfc3RhdHVzX2ZmX2RseTsKLQotLy8gU1RJQ0tZX1NUQVRVUyByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEZvciBldmVyeSBvdXRwdXQgcmVzZXQgc2lnbmFsIHNob3dzIGlmIGl0IHdhcyBhc3NlcnRlZCBzaW5jZSB0aGUgbGFzdCBiaXQgY2xlYXJpbmcKLWludGVnZXIgaTsKLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHB3cnVwX3JzdF9uX3N5bmMpIGJlZ2luCi0gICAgaWYgKH5wd3J1cF9yc3Rfbl9zeW5jKSBiZWdpbgotICAgICAgICBzY3Vfc3RpY2t5X3N0c19mZiA8PSAnMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgU0NSMV9TQ1VfU1lTQ1RSTF9TVEFUVVNfUkVHX1dJRFRIIDsgaT1pKzEpIGJlZ2luIC8vIGNwLjQKLSAgICAgICAgICAgIGlmIChzY3Vfc3RhdHVzX2ZmX3Bvc2VkZ2VbaV0pIGJlZ2luCi0gICAgICAgICAgICAgICAgc2N1X3N0aWNreV9zdHNfZmZbaV0gPD0gMSdiMTsKLSAgICAgICAgICAgIGVuZCBlbHNlIGlmIChzY3Vfc3RpY2t5X3N0c193cl9yZXEpIGJlZ2luCi0gICAgICAgICAgICAgICAgc2N1X3N0aWNreV9zdHNfZmZbaV0gPD0gc2N1X2Nzcl93ZGF0YVtpXTsKLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmQKLSAgICBlbmQKLWVuZAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUmVzZXQgbG9naWMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotIC8vIENvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25hbCB1bml0czoKLSAvLyAtIFN5c3RlbSBSZXNldCBsb2dpYwotIC8vIC0gQ29yZSBSZXNldCBsb2dpYwotIC8vIC0gSGFydCBEZWJ1ZyBVbml0IFJlc2V0IGxvZ2ljCi0gLy8gLSBEZWJ1ZyBNb2R1bGUgUmVzZXQgbG9naWMKLS8vCi0KLS8vIFJlc2V0IGlucHV0cyBhcmUgYXNzdW1lZCBzeW5jaHJvbm91cwotYXNzaWduIHB3cnVwX3JzdF9uX3N5bmMgPSBwd3J1cF9yc3RfbjsKLWFzc2lnbiByc3Rfbl9zeW5jICAgICAgID0gcnN0X247Ci1hc3NpZ24gY3B1X3JzdF9uX3N5bmMgICA9IGNwdV9yc3RfbjsKLQotLy8gSW50ZXJtZWRpYXRlIHJlc2V0czoKLWFzc2lnbiBzeXNfcmVzZXRfbiAgPSB+c2N1X2NvbnRyb2xfZmYuc3lzX3Jlc2V0OwotYXNzaWduIGNvcmVfcmVzZXRfbiA9IH5zY3VfY29udHJvbF9mZi5jb3JlX3Jlc2V0OwotCi0vLyBTeXN0ZW0vQ2x1c3RlciBSZXNldDogc3lzX3JzdF9uX28KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXNjcjFfcmVzZXRfcWxmeV9hZGFwdGVyX2NlbGxfc3luYyAgIGlfc3lzX3JzdG5fcWxmeV9hZGFwdGVyX2NlbGxfc3luYyAoCi0gICAgLnJzdF9uICAgICAgICAgICAgICAgICAgICAgICAgICAocHdydXBfcnN0X25fc3luYyksCi0gICAgLmNsayAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICksCi0gICAgLnRlc3RfcnN0X24gICAgICAgICAgICAgICAgICAgICAodGVzdF9yc3RfbiAgICAgICksCi0gICAgLnRlc3RfbW9kZSAgICAgICAgICAgICAgICAgICAgICAodGVzdF9tb2RlICAgICAgICksCi0gICAgLnJlc2V0X25faW5fc3luYyAgICAgICAgICAgICAgICAoc3lzX3JzdF9uX2luICAgICksCi0gICAgLnJlc2V0X25fb3V0X3FsZnkgICAgICAgICAgICAgICAoc3lzX3JzdF9uX3FsZnkgICksCi0gICAgLnJlc2V0X25fb3V0ICAgICAgICAgICAgICAgICAgICAoc3lzX3JzdF9uX28gICAgICksCi0gICAgLnJlc2V0X25fc3RhdHVzICAgICAgICAgICAgICAgICAoc3lzX3JzdF9uX3N0YXR1cykKLSk7Ci0KLWFzc2lnbiBzeXNfcnN0X25faW4gPSBzeXNfcmVzZXRfbiAmIG5kbV9yc3Rfbl9pICYgcnN0X25fc3luYzsKLQotc2NyMV9kYXRhX3N5bmNfY2VsbCAjKAotICAgIC5TVEFHRVNfQU1PVU5UICAgICAgIChTQ1IxX1NDVV9SU1RfU1lOQ19TVEFHRVNfTlVNKQotKSBpX3N5c19yc3RuX3N0YXR1c19zeW5jICgKLSAgICAucnN0X24gICAgICAgICAgICAgICAocHdydXBfcnN0X25fc3luYyAgICAgKSwKLSAgICAuY2xrICAgICAgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICAgICAgKSwKLSAgICAuZGF0YV9pbiAgICAgICAgICAgICAoc3lzX3JzdF9uX3N0YXR1cyAgICAgKSwKLSAgICAuZGF0YV9vdXQgICAgICAgICAgICAoc3lzX3JzdF9uX3N0YXR1c19zeW5jKQotKTsKLQotYXNzaWduIHN5c19yc3Rfc3RhdHVzX28gPSB+c3lzX3JzdF9uX3N0YXR1c19zeW5jOwotCi0vLyBTeXN0ZW0vQ2x1c3Rlci10by1FeHRlcm5hbFNPQyBSREMgcXVhbGlmaWVyCi1hc3NpZ24gc3lzX3JkY19xbGZ5X28gPSBzeXNfcnN0X25fcWxmeTsKLQotLy8gQ29yZSBSZXNldDogY29yZV9yc3Rfbl9vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1zY3IxX3Jlc2V0X3FsZnlfYWRhcHRlcl9jZWxsX3N5bmMgICBpX2NvcmVfcnN0bl9xbGZ5X2FkYXB0ZXJfY2VsbF9zeW5jICgKLSAgICAucnN0X24gICAgICAgICAgICAgICAgICAgICAgICAgIChwd3J1cF9yc3Rfbl9zeW5jICApLAotICAgIC5jbGsgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICksCi0gICAgLnRlc3RfcnN0X24gICAgICAgICAgICAgICAgICAgICAodGVzdF9yc3RfbiAgICAgICAgKSwKLSAgICAudGVzdF9tb2RlICAgICAgICAgICAgICAgICAgICAgICh0ZXN0X21vZGUgICAgICAgICApLAotICAgIC5yZXNldF9uX2luX3N5bmMgICAgICAgICAgICAgICAgKGNvcmVfcnN0X25faW5fc3luYyksCi0gICAgLnJlc2V0X25fb3V0X3FsZnkgICAgICAgICAgICAgICAoY29yZV9yc3Rfbl9xbGZ5ICAgKSwKLSAgICAucmVzZXRfbl9vdXQgICAgICAgICAgICAgICAgICAgIChjb3JlX3JzdF9uX28gICAgICApLAotICAgIC5yZXNldF9uX3N0YXR1cyAgICAgICAgICAgICAgICAgKGNvcmVfcnN0X25fc3RhdHVzICkKLSk7Ci0KLWFzc2lnbiBjb3JlX3JzdF9uX2luX3N5bmMgICA9IHN5c19yc3Rfbl9pbiAmIGhhcnRfcnN0X25faSAmIGNvcmVfcmVzZXRfbiAmIGNwdV9yc3Rfbl9zeW5jOwotCi1zY3IxX2RhdGFfc3luY19jZWxsICMoCi0gICAgLlNUQUdFU19BTU9VTlQgICAgICAgIChTQ1IxX1NDVV9SU1RfU1lOQ19TVEFHRVNfTlVNKQotKSBpX2NvcmVfcnN0bl9zdGF0dXNfc3luYyAoCi0gICAgLnJzdF9uICAgICAgICAgICAgICAgIChwd3J1cF9yc3Rfbl9zeW5jICAgICAgKSwKLSAgICAuY2xrICAgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICAgICApLAotICAgIC5kYXRhX2luICAgICAgICAgICAgICAoY29yZV9yc3Rfbl9zdGF0dXMgICAgICksCi0gICAgLmRhdGFfb3V0ICAgICAgICAgICAgIChjb3JlX3JzdF9uX3N0YXR1c19zeW5jKQotKTsKLQotYXNzaWduIGNvcmVfcnN0X3N0YXR1c19vID0gfmNvcmVfcnN0X25fc3RhdHVzX3N5bmM7Ci0KLS8vIENvcmUgUmVzZXQgUkRDIFF1YWxpZmllcnM6Ci0vLyAgLSBDb3JlLXRvLUV4dGVybmFsU09DIFJEQyBRbGZ5Ci1hc3NpZ24gY29yZV9yZGNfcWxmeV9vID0gY29yZV9yc3Rfbl9xbGZ5OwotLy8gIC0gQ29yZS10by1IRFUgUkRDIFFsZnkKLWFzc2lnbiBjb3JlMmhkdV9yZGNfcWxmeV9vID0gY29yZV9yc3Rfbl9xbGZ5OwotLy8gIC0gQ29yZS10by1EZWJ1Z01vZHVsZSBSREMgUWxmeQotYXNzaWduIGNvcmUyZG1fcmRjX3FsZnlfbyAgPSBjb3JlX3JzdF9uX3FsZnk7Ci0KLS8vIEhhcnQgRGVidWcgVW5pdCBSZXNldDogaGR1X3JzdF9uX28KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXNjcjFfcmVzZXRfcWxmeV9hZGFwdGVyX2NlbGxfc3luYyAgIGlfaGR1X3JzdG5fcWxmeV9hZGFwdGVyX2NlbGxfc3luYyAoCi0gICAgLnJzdF9uICAgICAgICAgICAgICAgICAgICAgICAgICAocHdydXBfcnN0X25fc3luYyApLAotICAgIC5jbGsgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgKSwKLSAgICAudGVzdF9yc3RfbiAgICAgICAgICAgICAgICAgICAgICh0ZXN0X3JzdF9uICAgICAgICksCi0gICAgLnRlc3RfbW9kZSAgICAgICAgICAgICAgICAgICAgICAodGVzdF9tb2RlICAgICAgICApLAotICAgIC5yZXNldF9uX2luX3N5bmMgICAgICAgICAgICAgICAgKGhkdV9yc3Rfbl9pbl9zeW5jKSwKLSAgICAucmVzZXRfbl9vdXRfcWxmeSAgICAgICAgICAgICAgIChoZHVfcnN0X25fcWxmeSAgICksCi0gICAgLnJlc2V0X25fb3V0ICAgICAgICAgICAgICAgICAgICAoaGR1X3JzdF9uX28gICAgICApLAotICAgIC5yZXNldF9uX3N0YXR1cyAgICAgICAgICAgICAgICAgKGhkdV9yc3Rfbl9zdGF0dXMgKQotKTsKLQotYXNzaWduIGhkdV9yc3Rfbl9pbl9zeW5jID0gc2N1X21vZGVfZmYuaGR1X3JzdF9iaHYgfCBjb3JlX3JzdF9uX2luX3N5bmM7Ci0KLXNjcjFfZGF0YV9zeW5jX2NlbGwgIygKLSAgICAuU1RBR0VTX0FNT1VOVCAgICAgICAoU0NSMV9TQ1VfUlNUX1NZTkNfU1RBR0VTX05VTSkKLSkgaV9oZHVfcnN0bl9zdGF0dXNfc3luYyAoCi0gICAgLnJzdF9uICAgICAgICAgICAgICAgKHB3cnVwX3JzdF9uX3N5bmMgICAgICksCi0gICAgLmNsayAgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICAgICksCi0gICAgLmRhdGFfaW4gICAgICAgICAgICAgKGhkdV9yc3Rfbl9zdGF0dXMgICAgICksCi0gICAgLmRhdGFfb3V0ICAgICAgICAgICAgKGhkdV9yc3Rfbl9zdGF0dXNfc3luYykKLSk7Ci0KLS8vIEhhcnQgRGVidWcgVW5pdCBSZXNldCBSREMgUXVhbGlmaWVyczoKLS8vICAtIEhEVS10by1EZWJ1Z01vZHVsZSBSREMgUWxmeQotYXNzaWduIGhkdTJkbV9yZGNfcWxmeV9vID0gaGR1X3JzdF9uX3FsZnk7Ci0KLS8vIERlYnVnIE1vZHVsZSBSZXNldDogZG1fcnN0X25fbwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotc2NyMV9yZXNldF9idWZfY2VsbCBpX2RtX3JzdG5fYnVmX2NlbGwgKAotICAgIC5yc3RfbiAgICAgICAgICAgICAgKHB3cnVwX3JzdF9uX3N5bmMpLAotICAgIC5jbGsgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICApLAotICAgIC50ZXN0X21vZGUgICAgICAgICAgKHRlc3RfbW9kZSAgICAgICApLAotICAgIC50ZXN0X3JzdF9uICAgICAgICAgKHRlc3RfcnN0X24gICAgICApLAotICAgIC5yZXNldF9uX2luICAgICAgICAgKGRtX3JzdF9uX2luICAgICApLAotICAgIC5yZXNldF9uX291dCAgICAgICAgKGRtX3JzdF9uX28gICAgICApLAotICAgIC5yZXNldF9uX3N0YXR1cyAgICAgKGRtX3JzdF9uX3N0YXR1cyApCi0pOwotCi1hc3NpZ24gZG1fcnN0X25faW4gID0gfnNjdV9tb2RlX2ZmLmRtX3JzdF9iaHYgfCBzeXNfcmVzZXRfbjsKLQotYGlmZGVmIFNDUjFfVFJHVF9TSU1VTEFUSU9OCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBBc3NlcnRpb25zCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWBpZm5kZWYgVkVSSUxBVE9SCi0vLyBQcmV2ZW50aW5nIHNvbWUgYXNzZXJ0aW9ucyB0byBiZSByYWlzZWQgYXQgMCBzaW0gdGltZSBvciBpbiB0aGUgZmlyc3QgY3ljbGUKLWluaXRpYWwgYmVnaW4KLSRhc3NlcnRvZmYoMCwgc2NyMV9zY3UpOwotcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xrKTsKLSRhc3NlcnRvbigwLCBzY3IxX3NjdSk7Ci1lbmQKLWBlbmRpZiAvLyBWRVJJTEFUT1IKLQotLy8gWCBjaGVja3MKLVNDUjFfU1ZBX1NDVV9SRVNFVFNfWENIRUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKQotICAgICEkaXN1bmtub3duKHtwd3J1cF9yc3RfbiwgcnN0X24sIGNwdV9yc3RfbiwgbmRtX3JzdF9uX2ksIGhhcnRfcnN0X25faX0pCi0pIGVsc2UgJGVycm9yKCJTQ1UgcmVzZXRzIGVycm9yOiB1bmtub3duIHZhbHVlcyBvZiBpbnB1dCByZXNldHMiKTsKLQotYGlmbmRlZiBWRVJJTEFUT1IKLS8vIFF1YWxpZmllcnMgY2hlY2tzCi1TQ1IxX1NWQV9TQ1VfU1lTMlNPQ19RTEZZX0NIRUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnB3cnVwX3JzdF9uKQotICAgICRmZWxsKHN5c19yc3Rfbl9vKSB8LT4gJGZlbGwoJHBhc3Qoc3lzX3JkY19xbGZ5X28pKQotKSBlbHNlICRlcnJvcigiU0NVIHN5czJzb2MgcWxmeSBlcnJvcjogcWxmeSB3YXNuJ3QgcmFpc2VkIHByaW9yIHRvIHJlc2V0Iik7Ci0KLVNDUjFfU1ZBX1NDVV9DT1JFMlNPQ19RTEZZX0NIRUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnB3cnVwX3JzdF9uKQotICAgICRmZWxsKGNvcmVfcnN0X25fbykgfC0+ICRmZWxsKCRwYXN0KGNvcmVfcmRjX3FsZnlfbykpCi0pIGVsc2UgJGVycm9yKCJTQ1UgY29yZTJzb2MgcWxmeSBlcnJvcjogcWxmeSB3YXNuJ3QgcmFpc2VkIHByaW9yIHRvIHJlc2V0Iik7Ci0KLVNDUjFfU1ZBX1NDVV9DT1JFMkhEVV9RTEZZX0NIRUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnB3cnVwX3JzdF9uKQotICAgICRmZWxsKGNvcmVfcnN0X25fbykgfC0+ICRmZWxsKCRwYXN0KGNvcmUyaGR1X3JkY19xbGZ5X28pKQotKSBlbHNlICRlcnJvcigiU0NVIGNvcmUyaGR1IHFsZnkgZXJyb3I6IHFsZnkgd2Fzbid0IHJhaXNlZCBwcmlvciB0byByZXNldCIpOwotCi1TQ1IxX1NWQV9TQ1VfQ09SRTJETV9RTEZZX0NIRUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnB3cnVwX3JzdF9uKQotICAgICRmZWxsKGNvcmVfcnN0X25fbykgfC0+ICRmZWxsKCRwYXN0KGNvcmUyZG1fcmRjX3FsZnlfbykpCi0pIGVsc2UgJGVycm9yKCJTQ1UgY29yZTJkbSBxbGZ5IGVycm9yOiBxbGZ5IHdhc24ndCByYWlzZWQgcHJpb3IgdG8gcmVzZXQiKTsKLQotU0NSMV9TVkFfU0NVX0hEVTJETV9RTEZZX0NIRUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnB3cnVwX3JzdF9uKQotICAgICRmZWxsKGhkdV9yc3Rfbl9vKSB8LT4gJGZlbGwoJHBhc3QoaGR1MmRtX3JkY19xbGZ5X28pKQotKSBlbHNlICRlcnJvcigiU0NVIGhkdTJkbSBxbGZ5IGVycm9yOiBxbGZ5IHdhc24ndCByYWlzZWQgcHJpb3IgdG8gcmVzZXQiKTsKLWBlbmRpZiAvLyBWRVJJTEFUT1IKLWBlbmRpZiAvLyBTQ1IxX1RSR1RfU0lNVUxBVElPTgotCi1lbmRtb2R1bGUgOiBzY3IxX3NjdQotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3NjcjFfdGFwYy5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3NjcjFfdGFwYy5zdgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc2MTA1Ny4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9zY3IxX3RhcGMuc3YKKysrIC9kZXYvbnVsbApAQCAtMSw0NzMgKzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiBTeW50YWNvcmUgTExDIKkgMjAxNi0yMDIxCi0vLyAKLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0vLyBTUERYLUZpbGVDb250cmlidXRvcjogU3ludGFjb3JlIExMQwotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLyBAZmlsZSAgICAgICA8c2NyMV90YXBjLnN2PgotLy8vIEBicmllZiAgICAgIFRBUCBDb250cm9sbGVyIChUQVBDKQotLy8vCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gLy8KLSAvLyBGdW5jdGlvbmFsaXR5OgotIC8vIC0gQ29udHJvbHMgVEFQIG9wZXJhdGlvbgotIC8vIC0gQWxsb3dzIGRlYnVnZ2VyIHRvIGFjY2VzcyBUQVAgRGF0YSByZWdpc3RlcnMgYW5kIERNSS9TQ1Ugc2Nhbi1jaGFpbnMgdmlhCi0gLy8gICBjb21tYW5kIHdyaXR0ZW4gaW4gSW5zdHJ1Y3Rpb24gcmVnaXN0ZXIKLSAvLwotIC8vIFN0cnVjdHVyZToKLSAvLyAtIFN5bmNocm9ub3VzIHJlc2V0IGdlbmVyYXRpb24KLSAvLyAtIFRBUEMgRlNNCi0gLy8gLSBUQVBDIEluc3RydWN0aW9uIFJlZ2lzdGVycwotIC8vIC0gVEFQQyBEUnMvRE1JL1NDVSBzY2FuLWNoYWlucwotIC8vIC0gVEFQQyBURE8gZW5hYmxlIGFuZCBvdXRwdXQgUmVnaXN0ZXJzCi0gLy8gLSBUQVBDIERhdGEgUmVnaXN0ZXJzCi0gLy8gICAtIEJZUEFTUwotIC8vICAgLSBJRENPREUKLSAvLyAgIC0gQlVJTEQgSUQKLSAvLwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYGluY2x1ZGUgInNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgiCi0KLWBpZmRlZiBTQ1IxX0RCR19FTgotYGluY2x1ZGUgInNjcjFfdGFwYy5zdmgiCi1gaW5jbHVkZSAic2NyMV9kbS5zdmgiCi0KLW1vZHVsZSBzY3IxX3RhcGMgKAotICAgIC8vIEpUQUcgc2lnbmFscwotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNfdHJzdF9uLCAgICAgICAgICAgICAgICAgICAgLy8gVGVzdCBSZXNldCAoVFJTVG4pCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY190Y2ssICAgICAgICAgICAgICAgICAgICAgICAvLyBUZXN0IENsb2NrIChUQ0spCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY190bXMsICAgICAgICAgICAgICAgICAgICAgICAvLyBUZXN0IE1vZGUgU2VsZWN0IChUTVMpCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY190ZGksICAgICAgICAgICAgICAgICAgICAgICAvLyBUZXN0IERhdGEgSW5wdXQgKFRESSkKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX3RkbywgICAgICAgICAgICAgICAgICAgICAgIC8vIFRlc3QgRGF0YSBPdXRwdXQgKFRETykKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX3Rkb19lbiwgICAgICAgICAgICAgICAgICAgIC8vIFRETyBFbmFibGUsIHNpZ25hbCBmb3IgVERPIGJ1ZmZlciBjb250cm9sCi0KLSAgICAvLyBGdXNlczoKLSAgICBpbnB1dCAgIGxvZ2ljIFszMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2MydGFwY19mdXNlX2lkY29kZV9pLCAgICAgICAgIC8vIElEQ09ERSB2YWx1ZSBmcm9tIGZ1c2VzCi0KLSAgICAvLyBETUkvU0NVIHNjYW4tY2hhaW5zCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwYzJ0YXBjc3luY19zY3VfY2hfc2VsX28sICAgICAvLyBTQ1UgQ2hhaW4gU2VsZWN0Ci0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwYzJ0YXBjc3luY19kbWlfY2hfc2VsX28sICAgICAvLyBETUkgQ2hhaW4gU2VsZWN0Ci0gICAgb3V0cHV0ICBsb2dpYyBbU0NSMV9EQkdfRE1JX0NIX0lEX1dJRFRILTE6MF0gICAgdGFwYzJ0YXBjc3luY19jaF9pZF9vLCAgICAgICAgICAvLyBETUkvU0NVIENoYWluIElkZW50aWZpZXIKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjMnRhcGNzeW5jX2NoX2NhcHR1cmVfbywgICAgIC8vIERNSS9TQ1UgQ2hhaW4gQ2FwdHVyZQotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGMydGFwY3N5bmNfY2hfc2hpZnRfbywgICAgICAgLy8gRE1JL1NDVSBDaGFpbiBTaGlmdAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGMydGFwY3N5bmNfY2hfdXBkYXRlX28sICAgICAgLy8gRE1JL1NDVSBDaGFpbiBVcGRhdGUKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjMnRhcGNzeW5jX2NoX3RkaV9vLCAgICAgICAgIC8vIERNSS9TQ1UgQ2hhaW4gVERJCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY3N5bmMydGFwY19jaF90ZG9faSAgICAgICAgICAvLyBETUkvU0NVIENoYWluIFRETwotKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIFNpZ25hbHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJzdF9uX2ludDsgICAgICAgLy8gU3luYyByZXNldCBzaWduYWwKLQotLy8gVEFQQyBGU00gc2lnbmFscwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdHlwZV9zY3IxX3RhcF9zdGF0ZV9lICAgICAgICAgICAgICAgICAgICAgICB0YXBfZnNtX2ZmOyAgICAgICAvLyBUQVAncyBjdXJyZW50IHN0YXRlCi10eXBlX3NjcjFfdGFwX3N0YXRlX2UgICAgICAgICAgICAgICAgICAgICAgIHRhcF9mc21fbmV4dDsgICAgIC8vIFRBUCdzIG5leHQgc3RhdGUKLQotLy8gQ29udHJvbCBzaWduYWxzCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcF9mc21fcmVzZXQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcF9mc21faXJfdXBkOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBfZnNtX2lyX2NhcDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwX2ZzbV9pcl9zaGZ0OwotCi0vLyBSZWdpc3RlcmVkIGNvbnRyb2wgc2lnbmFscwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBfZnNtX2lyX3NoaWZ0X2ZmOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBfZnNtX2lyX3NoaWZ0X25leHQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcF9mc21fZHJfY2FwdHVyZV9mZjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwX2ZzbV9kcl9jYXB0dXJlX25leHQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcF9mc21fZHJfc2hpZnRfZmY7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcF9mc21fZHJfc2hpZnRfbmV4dDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwX2ZzbV9kcl91cGRhdGVfZmY7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcF9mc21fZHJfdXBkYXRlX25leHQ7Ci0KLS8vIFRBUEMgSW5zdHJ1Y3Rpb24gUmVnaXN0ZXJzIHNpZ25hbHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWxvZ2ljIFtTQ1IxX1RBUF9JTlNUUlVDVElPTl9XSURUSC0xOjBdICAgICAgdGFwX2lyX3NoaWZ0X2ZmOyAgIC8vIEluc3RydWN0aW9uIFNoaWZ0IFJlZ2lzdGVyCi1sb2dpYyBbU0NSMV9UQVBfSU5TVFJVQ1RJT05fV0lEVEgtMTowXSAgICAgIHRhcF9pcl9zaGlmdF9uZXh0OyAvLyBJbnN0cnVjdGlvbiBTaGlmdCBSZWdpc3RlciBuZXh0IHZhbHVlCi1sb2dpYyBbU0NSMV9UQVBfSU5TVFJVQ1RJT05fV0lEVEgtMTowXSAgICAgIHRhcF9pcl9mZjsgICAgICAgICAvLyBJbnN0cnVjdGlvbiBSZWdpc3RlcgotbG9naWMgW1NDUjFfVEFQX0lOU1RSVUNUSU9OX1dJRFRILTE6MF0gICAgICB0YXBfaXJfbmV4dDsgICAgICAgLy8gSW5zdHJ1Y3Rpb24gUmVnaXN0ZXIgbmV4dCB2YWx1ZQotCi0vLyBUQVBDIERhdGEgUmVnaXN0ZXJzIHNpZ25hbHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIEJZUEFTUyByZWdpc3RlcgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcl9ieXBhc3Nfc2VsOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcl9ieXBhc3NfdGRvOwotCi0vLyBJRENPREUgcmVnaXN0ZXIKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJfaWRjb2RlX3NlbDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJfaWRjb2RlX3RkbzsKLQotLy8gQlVJTEQgSUQgcmVnaXN0ZXIKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJfYmxkX2lkX3NlbDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJfYmxkX2lkX3RkbzsKLQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcl9vdXQ7Ci0KLS8vIFRETyByZWdpc3RlcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFRETyBlbmFibGUgcmVnaXN0ZXIKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRvX2VuX2ZmOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZG9fZW5fbmV4dDsKLQotLy8gVERPIG91dHB1dCByZWdpc3RlcgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZG9fb3V0X2ZmOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZG9fb3V0X25leHQ7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBUQVBDIFN5bmNocm9ub3VzIFJlc2V0IGxvZ2ljCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfZmYgQChuZWdlZGdlIHRhcGNfdGNrLCBuZWdlZGdlIHRhcGNfdHJzdF9uKSBiZWdpbgotICAgIGlmICh+dGFwY190cnN0X24pIGJlZ2luCi0gICAgICAgIHRyc3Rfbl9pbnQgPD0gMSdiMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICB0cnN0X25faW50IDw9IH50YXBfZnNtX3Jlc2V0OwotICAgIGVuZAotZW5kCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBUQVAncyBGU00KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgdGFwY190Y2ssIG5lZ2VkZ2UgdGFwY190cnN0X24pIGJlZ2luCi0gICAgaWYgKH50YXBjX3Ryc3RfbikgYmVnaW4KLSAgICAgICAgdGFwX2ZzbV9mZiA8PSBTQ1IxX1RBUF9TVEFURV9SRVNFVDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICB0YXBfZnNtX2ZmIDw9IHRhcF9mc21fbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGNhc2UgKHRhcF9mc21fZmYpCi0gICAgICAgIFNDUjFfVEFQX1NUQVRFX1JFU0VUICAgICAgOiB0YXBfZnNtX25leHQgPSB0YXBjX3RtcyA/IFNDUjFfVEFQX1NUQVRFX1JFU0VUICAgICAgICA6IFNDUjFfVEFQX1NUQVRFX0lETEU7Ci0gICAgICAgIFNDUjFfVEFQX1NUQVRFX0lETEUgICAgICAgOiB0YXBfZnNtX25leHQgPSB0YXBjX3RtcyA/IFNDUjFfVEFQX1NUQVRFX0RSX1NFTF9TQ0FOICA6IFNDUjFfVEFQX1NUQVRFX0lETEU7Ci0gICAgICAgIFNDUjFfVEFQX1NUQVRFX0RSX1NFTF9TQ0FOOiB0YXBfZnNtX25leHQgPSB0YXBjX3RtcyA/IFNDUjFfVEFQX1NUQVRFX0lSX1NFTF9TQ0FOICA6IFNDUjFfVEFQX1NUQVRFX0RSX0NBUFRVUkU7Ci0gICAgICAgIFNDUjFfVEFQX1NUQVRFX0RSX0NBUFRVUkUgOiB0YXBfZnNtX25leHQgPSB0YXBjX3RtcyA/IFNDUjFfVEFQX1NUQVRFX0RSX0VYSVQxICAgICA6IFNDUjFfVEFQX1NUQVRFX0RSX1NISUZUOwotICAgICAgICBTQ1IxX1RBUF9TVEFURV9EUl9TSElGVCAgIDogdGFwX2ZzbV9uZXh0ID0gdGFwY190bXMgPyBTQ1IxX1RBUF9TVEFURV9EUl9FWElUMSAgICAgOiBTQ1IxX1RBUF9TVEFURV9EUl9TSElGVDsKLSAgICAgICAgU0NSMV9UQVBfU1RBVEVfRFJfRVhJVDEgICA6IHRhcF9mc21fbmV4dCA9IHRhcGNfdG1zID8gU0NSMV9UQVBfU1RBVEVfRFJfVVBEQVRFICAgIDogU0NSMV9UQVBfU1RBVEVfRFJfUEFVU0U7Ci0gICAgICAgIFNDUjFfVEFQX1NUQVRFX0RSX1BBVVNFICAgOiB0YXBfZnNtX25leHQgPSB0YXBjX3RtcyA/IFNDUjFfVEFQX1NUQVRFX0RSX0VYSVQyICAgICA6IFNDUjFfVEFQX1NUQVRFX0RSX1BBVVNFOwotICAgICAgICBTQ1IxX1RBUF9TVEFURV9EUl9FWElUMiAgIDogdGFwX2ZzbV9uZXh0ID0gdGFwY190bXMgPyBTQ1IxX1RBUF9TVEFURV9EUl9VUERBVEUgICAgOiBTQ1IxX1RBUF9TVEFURV9EUl9TSElGVDsKLSAgICAgICAgU0NSMV9UQVBfU1RBVEVfRFJfVVBEQVRFICA6IHRhcF9mc21fbmV4dCA9IHRhcGNfdG1zID8gU0NSMV9UQVBfU1RBVEVfRFJfU0VMX1NDQU4gIDogU0NSMV9UQVBfU1RBVEVfSURMRTsKLSAgICAgICAgU0NSMV9UQVBfU1RBVEVfSVJfU0VMX1NDQU46IHRhcF9mc21fbmV4dCA9IHRhcGNfdG1zID8gU0NSMV9UQVBfU1RBVEVfUkVTRVQgICAgICAgIDogU0NSMV9UQVBfU1RBVEVfSVJfQ0FQVFVSRTsKLSAgICAgICAgU0NSMV9UQVBfU1RBVEVfSVJfQ0FQVFVSRSA6IHRhcF9mc21fbmV4dCA9IHRhcGNfdG1zID8gU0NSMV9UQVBfU1RBVEVfSVJfRVhJVDEgICAgIDogU0NSMV9UQVBfU1RBVEVfSVJfU0hJRlQ7Ci0gICAgICAgIFNDUjFfVEFQX1NUQVRFX0lSX1NISUZUICAgOiB0YXBfZnNtX25leHQgPSB0YXBjX3RtcyA/IFNDUjFfVEFQX1NUQVRFX0lSX0VYSVQxICAgICA6IFNDUjFfVEFQX1NUQVRFX0lSX1NISUZUOwotICAgICAgICBTQ1IxX1RBUF9TVEFURV9JUl9FWElUMSAgIDogdGFwX2ZzbV9uZXh0ID0gdGFwY190bXMgPyBTQ1IxX1RBUF9TVEFURV9JUl9VUERBVEUgICAgOiBTQ1IxX1RBUF9TVEFURV9JUl9QQVVTRTsKLSAgICAgICAgU0NSMV9UQVBfU1RBVEVfSVJfUEFVU0UgICA6IHRhcF9mc21fbmV4dCA9IHRhcGNfdG1zID8gU0NSMV9UQVBfU1RBVEVfSVJfRVhJVDIgICAgIDogU0NSMV9UQVBfU1RBVEVfSVJfUEFVU0U7Ci0gICAgICAgIFNDUjFfVEFQX1NUQVRFX0lSX0VYSVQyICAgOiB0YXBfZnNtX25leHQgPSB0YXBjX3RtcyA/IFNDUjFfVEFQX1NUQVRFX0lSX1VQREFURSAgICA6IFNDUjFfVEFQX1NUQVRFX0lSX1NISUZUOwotICAgICAgICBTQ1IxX1RBUF9TVEFURV9JUl9VUERBVEUgIDogdGFwX2ZzbV9uZXh0ID0gdGFwY190bXMgPyBTQ1IxX1RBUF9TVEFURV9EUl9TRUxfU0NBTiAgOiBTQ1IxX1RBUF9TVEFURV9JRExFOwotYGlmZGVmIFNDUjFfWFBST1BfRU4KLSAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICAgICAgICA6IHRhcF9mc21fbmV4dCA9IFNDUjFfVEFQX1NUQVRFX1hYWDsKLWBlbHNlIC8vIFNDUjFfWFBST1BfRU4KLSAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICAgICAgICA6IHRhcF9mc21fbmV4dCA9IHRhcF9mc21fZmY7Ci1gZW5kaWYgLy8gU0NSMV9YUFJPUF9FTgotICAgIGVuZGNhc2UKLWVuZAotCi1hc3NpZ24gdGFwX2ZzbV9yZXNldCAgID0gKHRhcF9mc21fZmYgPT0gU0NSMV9UQVBfU1RBVEVfUkVTRVQpOwotYXNzaWduIHRhcF9mc21faXJfdXBkICA9ICh0YXBfZnNtX2ZmID09IFNDUjFfVEFQX1NUQVRFX0lSX1VQREFURSk7Ci1hc3NpZ24gdGFwX2ZzbV9pcl9jYXAgID0gKHRhcF9mc21fZmYgPT0gU0NSMV9UQVBfU1RBVEVfSVJfQ0FQVFVSRSk7Ci1hc3NpZ24gdGFwX2ZzbV9pcl9zaGZ0ID0gKHRhcF9mc21fZmYgPT0gU0NSMV9UQVBfU1RBVEVfSVJfU0hJRlQpOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gVEFQQyBJbnN0cnVjdGlvbiBSZWdpc3RlcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFRBUEMgSW5zdHJ1Y3Rpb24gU2hpZnQgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgdGFwY190Y2ssIG5lZ2VkZ2UgdGFwY190cnN0X24pIGJlZ2luCi0gICAgaWYgKH50YXBjX3Ryc3RfbikgYmVnaW4KLSAgICAgICAgdGFwX2lyX3NoaWZ0X2ZmIDw9ICcwOwotICAgIGVuZCBlbHNlIGlmICh+dHJzdF9uX2ludCkgYmVnaW4KLSAgICAgICAgdGFwX2lyX3NoaWZ0X2ZmIDw9ICcwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIHRhcF9pcl9zaGlmdF9mZiA8PSB0YXBfaXJfc2hpZnRfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gdGFwX2lyX3NoaWZ0X25leHQgPSB0YXBfZnNtX2lyX2NhcCAgPyB7eygkYml0cyh0YXBfaXJfc2hpZnRfZmYpLTEpezEnYjB9fSwgMSdiMX0KLSAgICAgICAgICAgICAgICAgICAgICAgICA6IHRhcF9mc21faXJfc2hmdCA/IHt0YXBjX3RkaSwgdGFwX2lyX3NoaWZ0X2ZmWyRsZWZ0KHRhcF9pcl9zaGlmdF9mZik6MV19Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0YXBfaXJfc2hpZnRfZmY7Ci0KLS8vIFRBUEMgSW5zdHJ1Y3Rpb24gcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgdGFwY190Y2ssIG5lZ2VkZ2UgdGFwY190cnN0X24pIGJlZ2luCi0gICAgaWYgKH50YXBjX3Ryc3RfbikgYmVnaW4KLSAgICAgICAgdGFwX2lyX2ZmIDw9IFNDUjFfVEFQX0lOU1RSX0lEQ09ERTsKLSAgICBlbmQgZWxzZSBpZiAofnRyc3Rfbl9pbnQpIGJlZ2luCi0gICAgICAgIHRhcF9pcl9mZiA8PSBTQ1IxX1RBUF9JTlNUUl9JRENPREU7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgdGFwX2lyX2ZmIDw9IHRhcF9pcl9uZXh0OwotICAgIGVuZAotZW5kCi0KLWFzc2lnbiB0YXBfaXJfbmV4dCA9IHRhcF9mc21faXJfdXBkID8gdGFwX2lyX3NoaWZ0X2ZmIDogdGFwX2lyX2ZmOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQ29udHJvbCBzaWduYWxzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfZmYgQChwb3NlZGdlIHRhcGNfdGNrLCBuZWdlZGdlIHRhcGNfdHJzdF9uKSBiZWdpbgotICAgIGlmICh+dGFwY190cnN0X24pIGJlZ2luCi0gICAgICAgIHRhcF9mc21faXJfc2hpZnRfZmYgPD0gMSdiMDsKLSAgICBlbmQgZWxzZSBpZiAofnRyc3Rfbl9pbnQpIGJlZ2luCi0gICAgICAgIHRhcF9mc21faXJfc2hpZnRfZmYgPD0gMSdiMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICB0YXBfZnNtX2lyX3NoaWZ0X2ZmIDw9IHRhcF9mc21faXJfc2hpZnRfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gdGFwX2ZzbV9pcl9zaGlmdF9uZXh0ID0gKHRhcF9mc21fbmV4dCA9PSBTQ1IxX1RBUF9TVEFURV9JUl9TSElGVCk7Ci0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgdGFwY190Y2ssIG5lZ2VkZ2UgdGFwY190cnN0X24pIGJlZ2luCi0gICAgaWYgKH50YXBjX3Ryc3RfbikgYmVnaW4KLSAgICAgICAgdGFwX2ZzbV9kcl9jYXB0dXJlX2ZmIDw9IDEnYjA7Ci0gICAgZW5kIGVsc2UgaWYgKH50cnN0X25faW50KSBiZWdpbgotICAgICAgICB0YXBfZnNtX2RyX2NhcHR1cmVfZmYgPD0gMSdiMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICB0YXBfZnNtX2RyX2NhcHR1cmVfZmYgPD0gdGFwX2ZzbV9kcl9jYXB0dXJlX25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIHRhcF9mc21fZHJfY2FwdHVyZV9uZXh0ID0gKHRhcF9mc21fbmV4dCA9PSBTQ1IxX1RBUF9TVEFURV9EUl9DQVBUVVJFKTsKLQotYWx3YXlzX2ZmIEAocG9zZWRnZSB0YXBjX3RjaywgbmVnZWRnZSB0YXBjX3Ryc3RfbikgYmVnaW4KLSAgICBpZiAofnRhcGNfdHJzdF9uKSBiZWdpbgotICAgICAgICB0YXBfZnNtX2RyX3NoaWZ0X2ZmIDw9IDEnYjA7Ci0gICAgZW5kIGVsc2UgaWYgKH50cnN0X25faW50KSBiZWdpbgotICAgICAgICB0YXBfZnNtX2RyX3NoaWZ0X2ZmIDw9IDEnYjA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgdGFwX2ZzbV9kcl9zaGlmdF9mZiA8PSB0YXBfZnNtX2RyX3NoaWZ0X25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIHRhcF9mc21fZHJfc2hpZnRfbmV4dCA9ICh0YXBfZnNtX25leHQgPT0gU0NSMV9UQVBfU1RBVEVfRFJfU0hJRlQpOwotCi1hbHdheXNfZmYgQChwb3NlZGdlIHRhcGNfdGNrLCBuZWdlZGdlIHRhcGNfdHJzdF9uKSBiZWdpbgotICAgIGlmICh+dGFwY190cnN0X24pIGJlZ2luCi0gICAgICAgIHRhcF9mc21fZHJfdXBkYXRlX2ZmIDw9IDEnYjA7Ci0gICAgZW5kIGVsc2UgaWYgKH50cnN0X25faW50KSBiZWdpbgotICAgICAgICB0YXBfZnNtX2RyX3VwZGF0ZV9mZiA8PSAxJ2IwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIHRhcF9mc21fZHJfdXBkYXRlX2ZmIDw9IHRhcF9mc21fZHJfdXBkYXRlX25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIHRhcF9mc21fZHJfdXBkYXRlX25leHQgPSAodGFwX2ZzbV9uZXh0ID09IFNDUjFfVEFQX1NUQVRFX0RSX1VQREFURSk7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBUQVBDIERScy9ETUkvU0NVIHNjYW4tY2hhaW5zCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLSAvLyBDb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uYWwgdW5pdHM6Ci0gLy8gLSBEYXRhIHNvdXJjZS9kZXN0aW5hdGlvbiBkZWNvZGVyCi0gLy8gLSBETUkgY2hhbm5lbCBJRCBkZWNvZGVyCi0KLS8vIC0gUmVhZCBkYXRhIG11bHRpcGxleGVyCi0vLyBEYXRhIHNvdXJjZS9kZXN0aW5hdGlvbiBkZWNvZGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGRyX2J5cGFzc19zZWwgICAgICAgICAgICAgICA9IDEnYjA7Ci0gICAgZHJfaWRjb2RlX3NlbCAgICAgICAgICAgICAgID0gMSdiMDsKLSAgICBkcl9ibGRfaWRfc2VsICAgICAgICAgICAgICAgPSAxJ2IwOwotICAgIHRhcGMydGFwY3N5bmNfc2N1X2NoX3NlbF9vICA9IDEnYjA7Ci0gICAgdGFwYzJ0YXBjc3luY19kbWlfY2hfc2VsX28gID0gMSdiMDsKLSAgICBjYXNlICh0YXBfaXJfZmYpCi0gICAgICAgIFNDUjFfVEFQX0lOU1RSX0RUTUNTICAgICA6IHRhcGMydGFwY3N5bmNfZG1pX2NoX3NlbF9vID0gMSdiMTsKLSAgICAgICAgU0NSMV9UQVBfSU5TVFJfRE1JX0FDQ0VTUzogdGFwYzJ0YXBjc3luY19kbWlfY2hfc2VsX28gPSAxJ2IxOwotICAgICAgICBTQ1IxX1RBUF9JTlNUUl9JRENPREUgICAgOiBkcl9pZGNvZGVfc2VsICAgICAgICAgICAgICA9IDEnYjE7Ci0gICAgICAgIFNDUjFfVEFQX0lOU1RSX0JZUEFTUyAgICA6IGRyX2J5cGFzc19zZWwgICAgICAgICAgICAgID0gMSdiMTsKLSAgICAgICAgU0NSMV9UQVBfSU5TVFJfQkxEX0lEICAgIDogZHJfYmxkX2lkX3NlbCAgICAgICAgICAgICAgPSAxJ2IxOwotICAgICAgICBTQ1IxX1RBUF9JTlNUUl9TQ1VfQUNDRVNTOiB0YXBjMnRhcGNzeW5jX3NjdV9jaF9zZWxfbyA9IDEnYjE7Ci0gICAgICAgIGRlZmF1bHQgICAgICAgICAgICAgICAgICA6IGRyX2J5cGFzc19zZWwgICAgICAgICAgICAgID0gMSdiMTsKLSAgICBlbmRjYXNlCi1lbmQKLQotLy8gRE1JIGNoYW5uZWwgSUQgZGVjb2RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICB0YXBjMnRhcGNzeW5jX2NoX2lkX28gPSAnMDsKLSAgICBjYXNlICh0YXBfaXJfZmYpCi0gICAgICAgIFNDUjFfVEFQX0lOU1RSX0RUTUNTICAgICA6IHRhcGMydGFwY3N5bmNfY2hfaWRfbyA9ICdkMTsKLSAgICAgICAgU0NSMV9UQVBfSU5TVFJfRE1JX0FDQ0VTUzogdGFwYzJ0YXBjc3luY19jaF9pZF9vID0gJ2QyOwotICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgICAgICAgOiB0YXBjMnRhcGNzeW5jX2NoX2lkX28gPSAnMDsKLSAgICBlbmRjYXNlCi1lbmQKLQotLy8gUmVhZCBkYXRhIG11bHRpcGxleGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGRyX291dCA9IDEnYjA7Ci0gICAgY2FzZSAodGFwX2lyX2ZmKQotICAgICAgICBTQ1IxX1RBUF9JTlNUUl9EVE1DUyAgICAgOiBkcl9vdXQgPSB0YXBjc3luYzJ0YXBjX2NoX3Rkb19pOwotICAgICAgICBTQ1IxX1RBUF9JTlNUUl9ETUlfQUNDRVNTOiBkcl9vdXQgPSB0YXBjc3luYzJ0YXBjX2NoX3Rkb19pOwotICAgICAgICBTQ1IxX1RBUF9JTlNUUl9JRENPREUgICAgOiBkcl9vdXQgPSBkcl9pZGNvZGVfdGRvOwotICAgICAgICBTQ1IxX1RBUF9JTlNUUl9CWVBBU1MgICAgOiBkcl9vdXQgPSBkcl9ieXBhc3NfdGRvOwotICAgICAgICBTQ1IxX1RBUF9JTlNUUl9CTERfSUQgICAgOiBkcl9vdXQgPSBkcl9ibGRfaWRfdGRvOwotICAgICAgICBTQ1IxX1RBUF9JTlNUUl9TQ1VfQUNDRVNTOiBkcl9vdXQgPSB0YXBjc3luYzJ0YXBjX2NoX3Rkb19pOwotICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgICAgICAgOiBkcl9vdXQgPSBkcl9ieXBhc3NfdGRvOwotICAgIGVuZGNhc2UKLWVuZAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gVERPIGVuYWJsZSBhbmQgb3V0cHV0IHJlZ2lzdGVycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gVERPIGVuYWJsZSByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWx3YXlzX2ZmIEAobmVnZWRnZSB0YXBjX3RjaywgbmVnZWRnZSB0YXBjX3Ryc3RfbikgYmVnaW4KLSAgICBpZiAofnRhcGNfdHJzdF9uKSBiZWdpbgotICAgICAgICB0ZG9fZW5fZmYgIDw9IDEnYjA7Ci0gICAgZW5kIGVsc2UgaWYgKH50cnN0X25faW50KSBiZWdpbgotICAgICAgICB0ZG9fZW5fZmYgIDw9IDEnYjA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgdGRvX2VuX2ZmICA8PSB0ZG9fZW5fbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gdGRvX2VuX25leHQgPSB0YXBfZnNtX2RyX3NoaWZ0X2ZmIHwgdGFwX2ZzbV9pcl9zaGlmdF9mZjsKLQotLy8gVERPIG91dHB1dCByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWx3YXlzX2ZmIEAobmVnZWRnZSB0YXBjX3RjaywgbmVnZWRnZSB0YXBjX3Ryc3RfbikgYmVnaW4KLSAgICBpZiAofnRhcGNfdHJzdF9uKSBiZWdpbgotICAgICAgICB0ZG9fb3V0X2ZmIDw9IDEnYjA7Ci0gICAgZW5kIGVsc2UgaWYgKH50cnN0X25faW50KSBiZWdpbgotICAgICAgICB0ZG9fb3V0X2ZmIDw9IDEnYjA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgdGRvX291dF9mZiA8PSB0ZG9fb3V0X25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIHRkb19vdXRfbmV4dCA9IHRhcF9mc21fZHJfc2hpZnRfZmYgPyBkcl9vdXQKLSAgICAgICAgICAgICAgICAgICAgOiB0YXBfZnNtX2lyX3NoaWZ0X2ZmID8gdGFwX2lyX3NoaWZ0X2ZmWzBdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDEnYjA7Ci0KLS8vIFRBUEMgVERPIHNpZ25hbHMKLWFzc2lnbiB0YXBjX3Rkb19lbiA9IHRkb19lbl9mZjsKLWFzc2lnbiB0YXBjX3RkbyAgICA9IHRkb19vdXRfZmY7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBUQVBDIERhdGEgUmVnaXN0ZXJzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLSAvLyBSZWdpc3RlcnM6Ci0gLy8gLSBCWVBBU1MgcmVnaXN0ZXIKLSAvLyAtIElEQ09ERSByZWdpc3RlcgotIC8vIC0gQlVJTEQgSUQgcmVnaXN0ZXIKLQotLy8gQllQQVNTIHJlZ2lzdGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gMS1iaXQgbWFuZGF0b3J5IElFRUUgMTE0OS4xIGNvbXBsaWFudCByZWdpc3RlcgotCi1zY3IxX3RhcGNfc2hpZnRfcmVnICAjKAotICAgIC5TQ1IxX1dJRFRIICAgICAgIChTQ1IxX1RBUF9EUl9CWVBBU1NfV0lEVEgpLAotICAgIC5TQ1IxX1JFU0VUX1ZBTFVFIChTQ1IxX1RBUF9EUl9CWVBBU1NfV0lEVEgnKDApKQotKSBpX2J5cGFzc19yZWcgICAgICAgICgKLSAgICAuY2xrICAgICAgICAgICAgICAodGFwY190Y2sgICAgICAgICAgICAgKSwKLSAgICAucnN0X24gICAgICAgICAgICAodGFwY190cnN0X24gICAgICAgICAgKSwKLSAgICAucnN0X25fc3luYyAgICAgICAodHJzdF9uX2ludCAgICAgICAgICAgKSwKLSAgICAuZnNtX2RyX3NlbGVjdCAgICAoZHJfYnlwYXNzX3NlbCAgICAgICAgKSwKLSAgICAuZnNtX2RyX2NhcHR1cmUgICAodGFwX2ZzbV9kcl9jYXB0dXJlX2ZmKSwKLSAgICAuZnNtX2RyX3NoaWZ0ICAgICAodGFwX2ZzbV9kcl9zaGlmdF9mZiAgKSwKLSAgICAuZGluX3NlcmlhbCAgICAgICAodGFwY190ZGkgICAgICAgICAgICAgKSwKLSAgICAuZGluX3BhcmFsbGVsICAgICAoMSdiMCAgICAgICAgICAgICAgICAgKSwKLSAgICAuZG91dF9zZXJpYWwgICAgICAoZHJfYnlwYXNzX3RkbyAgICAgICAgKSwKLSAgICAuZG91dF9wYXJhbGxlbCAgICAoICAgICAgICAgICAgICAgICAgICAgKQotKTsKLQotLy8gSURDT0RFIHJlZ2lzdGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSG9sZHMgdGhlIERldmljZSBJRCB2YWx1ZSAobWFuZGF0b3J5IElFRUUgMTE0OS4xIGNvbXBsaWFudCByZWdpc3RlcikKLQotc2NyMV90YXBjX3NoaWZ0X3JlZyAgIygKLSAgICAuU0NSMV9XSURUSCAgICAgICAoU0NSMV9UQVBfRFJfSURDT0RFX1dJRFRIKSwKLSAgICAuU0NSMV9SRVNFVF9WQUxVRSAoU0NSMV9UQVBfRFJfSURDT0RFX1dJRFRIJygwKSkKLSkgaV90YXBfaWRjb2RlX3JlZyAgICAoCi0gICAgLmNsayAgICAgICAgICAgICAgKHRhcGNfdGNrICAgICAgICAgICAgICApLAotICAgIC5yc3RfbiAgICAgICAgICAgICh0YXBjX3Ryc3RfbiAgICAgICAgICAgKSwKLSAgICAucnN0X25fc3luYyAgICAgICAodHJzdF9uX2ludCAgICAgICAgICAgICksCi0gICAgLmZzbV9kcl9zZWxlY3QgICAgKGRyX2lkY29kZV9zZWwgICAgICAgICApLAotICAgIC5mc21fZHJfY2FwdHVyZSAgICh0YXBfZnNtX2RyX2NhcHR1cmVfZmYgKSwKLSAgICAuZnNtX2RyX3NoaWZ0ICAgICAodGFwX2ZzbV9kcl9zaGlmdF9mZiAgICksCi0gICAgLmRpbl9zZXJpYWwgICAgICAgKHRhcGNfdGRpICAgICAgICAgICAgICApLAotICAgIC5kaW5fcGFyYWxsZWwgICAgIChzb2MydGFwY19mdXNlX2lkY29kZV9pKSwKLSAgICAuZG91dF9zZXJpYWwgICAgICAoZHJfaWRjb2RlX3RkbyAgICAgICAgICksCi0gICAgLmRvdXRfcGFyYWxsZWwgICAgKCAgICAgICAgICAgICAgICAgICAgICApCi0pOwotCi0vLyBCVUlMRCBJRCByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEhvbGRzIHRoZSBCVUlMRCBJRCB2YWx1ZQotCi1zY3IxX3RhcGNfc2hpZnRfcmVnICAjKAotICAgIC5TQ1IxX1dJRFRIICAgICAgIChTQ1IxX1RBUF9EUl9CTERfSURfV0lEVEgpLAotICAgIC5TQ1IxX1JFU0VUX1ZBTFVFIChTQ1IxX1RBUF9EUl9CTERfSURfV0lEVEgnKDApKQotKSBpX3RhcF9kcl9ibGRfaWRfcmVnICgKLSAgICAuY2xrICAgICAgICAgICAgICAodGFwY190Y2sgICAgICAgICAgICAgKSwKLSAgICAucnN0X24gICAgICAgICAgICAodGFwY190cnN0X24gICAgICAgICAgKSwKLSAgICAucnN0X25fc3luYyAgICAgICAodHJzdF9uX2ludCAgICAgICAgICAgKSwKLSAgICAuZnNtX2RyX3NlbGVjdCAgICAoZHJfYmxkX2lkX3NlbCAgICAgICAgKSwKLSAgICAuZnNtX2RyX2NhcHR1cmUgICAodGFwX2ZzbV9kcl9jYXB0dXJlX2ZmKSwKLSAgICAuZnNtX2RyX3NoaWZ0ICAgICAodGFwX2ZzbV9kcl9zaGlmdF9mZiAgKSwKLSAgICAuZGluX3NlcmlhbCAgICAgICAodGFwY190ZGkgICAgICAgICAgICAgKSwKLSAgICAuZGluX3BhcmFsbGVsICAgICAoU0NSMV9UQVBfQkxEX0lEX1ZBTFVFKSwKLSAgICAuZG91dF9zZXJpYWwgICAgICAoZHJfYmxkX2lkX3RkbyAgICAgICAgKSwKLSAgICAuZG91dF9wYXJhbGxlbCAgICAoICAgICAgICAgICAgICAgICAgICAgKQotKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIERNSS9TQ1Ugc2Nhbi1jaGFpbnMgc2lnbmFscwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIHRhcGMydGFwY3N5bmNfY2hfdGRpX28gICAgID0gdGFwY190ZGk7Ci1hc3NpZ24gdGFwYzJ0YXBjc3luY19jaF9jYXB0dXJlX28gPSB0YXBfZnNtX2RyX2NhcHR1cmVfZmY7Ci1hc3NpZ24gdGFwYzJ0YXBjc3luY19jaF9zaGlmdF9vICAgPSB0YXBfZnNtX2RyX3NoaWZ0X2ZmOwotYXNzaWduIHRhcGMydGFwY3N5bmNfY2hfdXBkYXRlX28gID0gdGFwX2ZzbV9kcl91cGRhdGVfZmY7Ci0KLWBpZmRlZiBTQ1IxX1RSR1RfU0lNVUxBVElPTgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBBc3NlcnRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBYIGNoZWNrcwotU0NSMV9TVkFfVEFQQ19YQ0hFQ0sgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAocG9zZWRnZSB0YXBjX3RjaykgZGlzYWJsZSBpZmYgKH50YXBjX3Ryc3RfbikKLSAgICAhJGlzdW5rbm93bih7dGFwY190bXMsIHRhcGNfdGRpfSkKLSkgZWxzZSAkZXJyb3IoIlRBUEMgZXJyb3I6IHVua25vd24gdmFsdWVzIik7Ci0KLVNDUjFfU1ZBX1RBUENfWENIRUNLX05FR0NMSyA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIHRhcGNfdGNrKSBkaXNhYmxlIGlmZiAodGFwX2ZzbV9mZiAhPSBTQ1IxX1RBUF9TVEFURV9EUl9TSElGVCkKLSAgICAhJGlzdW5rbm93bih7dGFwY3N5bmMydGFwY19jaF90ZG9faX0pCi0pIGVsc2UgJGVycm9yKCJUQVBDIEBuZWdlZGdlIGVycm9yOiB1bmtub3duIHZhbHVlcyIpOwotCi1gZW5kaWYgLy8gU0NSMV9UUkdUX1NJTVVMQVRJT04KLQotZW5kbW9kdWxlIDogc2NyMV90YXBjCi0KLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvc2NyMV90YXBjX3NoaWZ0X3JlZy5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3NjcjFfdGFwY19zaGlmdF9yZWcuc3YKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5ZGEwOTEuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvc2NyMV90YXBjX3NoaWZ0X3JlZy5zdgorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIxCi0vLyAKLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0vLyBTUERYLUZpbGVDb250cmlidXRvcjogU3ludGFjb3JlIExMQwotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLyBAZmlsZSAgICAgICA8c2NyMV90YXBjX3NoaWZ0X3JlZy5zdj4KLS8vLyBAYnJpZWYgICAgICBUQVBDIHNoaWZ0IHJlZ2lzdGVyLiBQYXJhbWV0ZXJpemVkIGltcGxlbWVudGF0aW9uIG9mIEpUQUcgVEFQQydzIFNoaWZ0IFJlZ2lzdGVyLgotLy8vCi0KLWBpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgotCi1gaWZkZWYgU0NSMV9EQkdfRU4KLW1vZHVsZSBzY3IxX3RhcGNfc2hpZnRfcmVnICMoCi0gICAgcGFyYW1ldGVyICAgaW50IHVuc2lnbmVkICAgICAgICAgICAgU0NSMV9XSURUSCAgICAgICA9IDgsICAgLy8gUmVnaXN0ZXIgd2lkdGgsIGJpdHMKLSAgICBwYXJhbWV0ZXIgICBsb2dpYyBbU0NSMV9XSURUSC0xOjBdICBTQ1IxX1JFU0VUX1ZBTFVFID0gJzAgICAvLyBSZWdpc3RlcidzIHZhbHVlIGFmdGVyIHJlc2V0Ci0pICgKLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgIGNsaywgICAgICAgICAgICAvLyBDbG9jawotICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgcnN0X24sICAgICAgICAgIC8vIEFzeW5jIHJlc2V0Ci0gICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICByc3Rfbl9zeW5jLCAgICAgLy8gU3luYyByZXNldAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRBUCBGU00ncyBjb250cm9sIHNpZ25hbHM6Ci0gICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICBmc21fZHJfc2VsZWN0LCAgLy8gICAtIGZvciB0aGlzIERSIHNlbGVjdGlvbiAob3BlcmF0aW9uIGVuYWJsaW5nKTsKLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgIGZzbV9kcl9jYXB0dXJlLCAvLyAgIC0gdG8gY2FwdHVyZSBwYXJhbGxlbCBpbnB1dCdzIGRhdGEgaW50byBzaGlmdCByZWdpc3RlcjsKLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgIGZzbV9kcl9zaGlmdCwgICAvLyAgIC0gdG8gZW5hYmxlIGRhdGEgc2hpZnRpbmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5wdXRzOgotICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgZGluX3NlcmlhbCwgICAgIC8vICAgLSBzZXJpYWwgKHNoaWZ0X3JlZ1ttc2IvU0NSMV9XSURUSF0pOwotICAgIGlucHV0ICBsb2dpYyBbU0NSMV9XSURUSC0xOjBdICAgZGluX3BhcmFsbGVsLCAgIC8vICAgLSBwYXJhbGxlbCAoc2hpZnQgcmVnaXN0ZXIncyBpbnB1dCkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3V0cHV0czoKLSAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgIGRvdXRfc2VyaWFsLCAgICAvLyAgIC0gc2VyaWFsIChzaGlmdF9yZWdbMF0pOwotICAgIG91dHB1dCBsb2dpYyBbU0NSMV9XSURUSC0xOjBdICAgZG91dF9wYXJhbGxlbCAgIC8vICAgLSBwYXJhbGxlbCAoc2hpZnQgcmVnaXN0ZXIncyBvdXRwdXQpLgotKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCBzaWduYWxzIGRlY2xhcmF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWxvZ2ljIFtTQ1IxX1dJRFRILTE6MF0gICBzaGlmdF9yZWc7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gU2hpZnQgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotZ2VuZXJhdGUKLSAgICBpZiAoU0NSMV9XSURUSCA+IDEpCi0gICAgYmVnaW4gOiBkcl9zaGlmdF9yZWcKLQotICAgICAgICBhbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikKLSAgICAgICAgYmVnaW4KLSAgICAgICAgICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgICAgICAgICAgc2hpZnRfcmVnIDw9IFNDUjFfUkVTRVRfVkFMVUU7Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIGVsc2UgaWYgKH5yc3Rfbl9zeW5jKSBiZWdpbgotICAgICAgICAgICAgICAgIHNoaWZ0X3JlZyA8PSBTQ1IxX1JFU0VUX1ZBTFVFOwotICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBlbHNlIGlmIChmc21fZHJfc2VsZWN0ICYgZnNtX2RyX2NhcHR1cmUpIGJlZ2luCi0gICAgICAgICAgICAgICAgc2hpZnRfcmVnIDw9IGRpbl9wYXJhbGxlbDsKLSAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZWxzZSBpZiAoZnNtX2RyX3NlbGVjdCAmIGZzbV9kcl9zaGlmdCkgYmVnaW4KLSAgICAgICAgICAgICAgICBzaGlmdF9yZWcgPD0ge2Rpbl9zZXJpYWwsIHNoaWZ0X3JlZ1tTQ1IxX1dJRFRILTE6MV19OwotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZAotCi0gICAgZW5kCi0gICAgZWxzZSBiZWdpbiA6IGRyX3NoaWZ0X3JlZwotCi0gICAgICAgIGFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKQotICAgICAgICBiZWdpbgotICAgICAgICAgICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgICAgICAgICBzaGlmdF9yZWcgPD0gU0NSMV9SRVNFVF9WQUxVRTsKLSAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZWxzZSBpZiAofnJzdF9uX3N5bmMpIGJlZ2luCi0gICAgICAgICAgICAgICAgc2hpZnRfcmVnIDw9IFNDUjFfUkVTRVRfVkFMVUU7Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIGVsc2UgaWYgKGZzbV9kcl9zZWxlY3QgJiBmc21fZHJfY2FwdHVyZSkgYmVnaW4KLSAgICAgICAgICAgICAgICBzaGlmdF9yZWcgPD0gZGluX3BhcmFsbGVsOwotICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBlbHNlIGlmIChmc21fZHJfc2VsZWN0ICYgZnNtX2RyX3NoaWZ0KSBiZWdpbgotICAgICAgICAgICAgICAgIHNoaWZ0X3JlZyA8PSBkaW5fc2VyaWFsOwotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZAotCi0gICAgZW5kCi1lbmRnZW5lcmF0ZQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFBhcmFsbGVsIG91dHB1dAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1hc3NpZ24gZG91dF9wYXJhbGxlbCA9IHNoaWZ0X3JlZzsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBTZXJpYWwgb3V0cHV0Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWFzc2lnbiBkb3V0X3NlcmlhbCA9IHNoaWZ0X3JlZ1swXTsKLQotYGlmZGVmIFNDUjFfVFJHVF9TSU1VTEFUSU9OCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEFzc2VydGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFggY2hlY2tzCi1TQ1IxX1NWQV9UQVBDX1NISUZUUkVHX1hDSEVDSyA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICAhJGlzdW5rbm93bih7Ci0gICAgICAgIHJzdF9uX3N5bmMsCi0gICAgICAgIGZzbV9kcl9zZWxlY3QsCi0gICAgICAgIGZzbV9kcl9jYXB0dXJlLAotICAgICAgICBmc21fZHJfc2hpZnQsCi0gICAgICAgIGRpbl9zZXJpYWwsCi0gICAgICAgIGRpbl9wYXJhbGxlbAotICAgIH0pCi0pIGVsc2UgYmVnaW4KLSAgICAkZXJyb3IoIlRBUEMgU2hpZnQgUmVnIGVycm9yOiB1bmtub3duIHZhbHVlcyIpOwotZW5kCi0KLWBlbmRpZiAvLyBTQ1IxX1RSR1RfU0lNVUxBVElPTgotCi1lbmRtb2R1bGUgOiBzY3IxX3RhcGNfc2hpZnRfcmVnCi0KLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvc2NyMV90YXBjX3N5bmNocm9uaXplci5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3NjcjFfdGFwY19zeW5jaHJvbml6ZXIuc3YKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5NzE1ZDkuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvc2NyMV90YXBjX3N5bmNocm9uaXplci5zdgorKysgL2Rldi9udWxsCkBAIC0xLDE5OSArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIxCi0vLyAKLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0vLyBTUERYLUZpbGVDb250cmlidXRvcjogU3ludGFjb3JlIExMQwotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLyBAZmlsZSAgICAgICA8c2NyMV90YXBjX3N5bmNocm9uaXplci5zdj4KLS8vLyBAYnJpZWYgICAgICBUQVBDIGNsb2NrIGRvbWFpbiBjcm9zc2luZyBzeW5jaHJvbml6ZXIKLS8vLwotCi1gaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKLQotYGlmZGVmIFNDUjFfREJHX0VOCi1gaW5jbHVkZSAic2NyMV90YXBjLnN2aCIKLWBpbmNsdWRlICJzY3IxX2RtLnN2aCIKLQotbW9kdWxlIHNjcjFfdGFwY19zeW5jaHJvbml6ZXIgKAotICAgIC8vIFN5c3RlbSBjb21tb24gc2lnbmFscwotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB3cnVwX3JzdF9uLCAgICAgICAgICAgICAgICAvLyBQb3dlci1VcCBSZXNldAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtX3JzdF9uLCAgICAgICAgICAgICAgICAgICAvLyBEZWJ1ZyBNb2R1bGUgUmVzZXQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGssICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3lzdGVtIENsb2NrIChTeXNDTEspCi0KLSAgICAvLyBKVEFHIGNvbW1vbiBzaWduYWxzCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY190cnN0X24sICAgICAgICAgICAgICAgIC8vIEpUQUcgVGVzdCBSZXNldCAoVFJTVG4pCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY190Y2ssICAgICAgICAgICAgICAgICAgIC8vIEpUQUcgVGVzdCBDbG9jayAoVENLKQotCi0KLSAgICAvLyBETUkvU0NVIHNjYW4tY2hhaW5zCi0gICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwYzJ0YXBjc3luY19zY3VfY2hfc2VsX2ksIC8vIFNDVSBDaGFpbiBTZWxlY3QgaW5wdXQgIChUQ0sgZG9tYWluKQotICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNzeW5jMnNjdV9jaF9zZWxfbywgICAgICAvLyBTQ1UgQ2hhaW4gU2VsZWN0IG91dHB1dCAoU3lzQ0xLIGRvbWFpbikKLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjMnRhcGNzeW5jX2RtaV9jaF9zZWxfaSwgLy8gRE1JIENoYWluIFNlbGVjdCBpbnB1dCAgKFRDSyBkb21haW4pCi0gICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY3N5bmMyZG1pX2NoX3NlbF9vLCAgICAgIC8vIERNSSBDaGFpbiBTZWxlY3Qgb3V0cHV0IChTeXNDTEsgZG9tYWluKQotCi0gICAgaW5wdXQgIGxvZ2ljIFtTQ1IxX0RCR19ETUlfQ0hfSURfV0lEVEgtMTowXSAgICAgdGFwYzJ0YXBjc3luY19jaF9pZF9pLCAgICAgIC8vIERNSS9TQ1UgQ2hhaW4gSWRlbnRpZmllciBpbnB1dCAgKFRDSyBkb21haW4pCi0gICAgb3V0cHV0IGxvZ2ljIFtTQ1IxX0RCR19ETUlfQ0hfSURfV0lEVEgtMTowXSAgICAgdGFwY3N5bmMyY29yZV9jaF9pZF9vLCAgICAgIC8vIERNSS9TQ1UgQ2hhaW4gSWRlbnRpZmllciBvdXRwdXQgKFN5c0NMSyBkb21haW4pCi0KLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjMnRhcGNzeW5jX2NoX2NhcHR1cmVfaSwgLy8gRE1JL1NDVSBDaGFpbiBDYXB0dXJlIGlucHV0ICAoVENLIGRvbWFpbikKLSAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjc3luYzJjb3JlX2NoX2NhcHR1cmVfbywgLy8gRE1JL1NDVSBDaGFpbiBDYXB0dXJlIG91dHB1dCAoU3lzQ0xLIGRvbWFpbikKLQotICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGMydGFwY3N5bmNfY2hfc2hpZnRfaSwgICAvLyBETUkvU0NVIENoYWluIFNoaWZ0IGlucHV0ICAoVENLIGRvbWFpbikKLSAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjc3luYzJjb3JlX2NoX3NoaWZ0X28sICAgLy8gRE1JL1NDVSBDaGFpbiBTaGlmdCBvdXRwdXQgKFN5c0NMSyBkb21haW4pCi0KLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjMnRhcGNzeW5jX2NoX3VwZGF0ZV9pLCAgLy8gRE1JL1NDVSBDaGFpbiBVcGRhdGUgaW5wdXQgIChUQ0sgZG9tYWluKQotICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNzeW5jMmNvcmVfY2hfdXBkYXRlX28sICAvLyBETUkvU0NVIENoYWluIFVwZGF0ZSBvdXRwdXQgKFN5c0NMSyBkb21haW4pCi0KLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjMnRhcGNzeW5jX2NoX3RkaV9pLCAgICAgLy8gRE1JL1NDVSBDaGFpbiBUREkgaW5wdXQgIChUQ0sgZG9tYWluKQotICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNzeW5jMmNvcmVfY2hfdGRpX28sICAgICAvLyBETUkvU0NVIENoYWluIFRESSBvdXRwdXQgKFN5c0NMSyBkb21haW4pCi0KLSAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjMnRhcGNzeW5jX2NoX3Rkb19pLCAgICAgLy8gRE1JL1NDVSBDaGFpbiBURE8gb3V0cHV0IChUQ0sgZG9tYWluKQotICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNzeW5jMmNvcmVfY2hfdGRvX28gICAgICAvLyBETUkvU0NVIENoYWluIFRETyBpbnB1dCAgKFN5c0NMSyBkb21haW4pCi0pOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHNpZ25hbHMgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1sb2dpYyAgICAgICAgICAgdGNrX2RpdnBvczsKLWxvZ2ljICAgICAgICAgICB0Y2tfZGl2bmVnOwotbG9naWMgICAgICAgICAgIHRja19yaXNlX2xvYWQ7Ci1sb2dpYyAgICAgICAgICAgdGNrX3Jpc2VfcmVzZXQ7Ci1sb2dpYyAgICAgICAgICAgdGNrX2ZhbGxfbG9hZDsKLWxvZ2ljICAgICAgICAgICB0Y2tfZmFsbF9yZXNldDsKLWxvZ2ljIFszOjBdICAgICB0Y2tfZGl2cG9zX3N5bmM7Ci1sb2dpYyBbMzowXSAgICAgdGNrX2Rpdm5lZ19zeW5jOwotbG9naWMgWzI6MF0gICAgIGRtaV9jaF9jYXB0dXJlX3N5bmM7Ci1sb2dpYyBbMjowXSAgICAgZG1pX2NoX3NoaWZ0X3N5bmM7Ci1sb2dpYyBbMjowXSAgICAgZG1pX2NoX3RkaV9zeW5jOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvZ2ljCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWx3YXlzX2ZmIEAocG9zZWRnZSB0YXBjX3RjaywgbmVnZWRnZSB0YXBjX3Ryc3RfbikgYmVnaW4KLSAgICBpZiAofnRhcGNfdHJzdF9uKSBiZWdpbgotICAgICAgICB0Y2tfZGl2cG9zICAgICAgPD0gMSdiMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICB0Y2tfZGl2cG9zICAgICAgPD0gfnRja19kaXZwb3M7Ci0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2ZmIEAobmVnZWRnZSB0YXBjX3RjaywgbmVnZWRnZSB0YXBjX3Ryc3RfbikgYmVnaW4KLSAgICBpZiAofnRhcGNfdHJzdF9uKSBiZWdpbgotICAgICAgICB0Y2tfZGl2bmVnICAgICAgPD0gMSdiMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICB0Y2tfZGl2bmVnICAgICAgPD0gfnRja19kaXZuZWc7Ci0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcHdydXBfcnN0X24pIGJlZ2luCi0gICAgaWYgKH5wd3J1cF9yc3RfbikgYmVnaW4KLSAgICAgICAgdGNrX2RpdnBvc19zeW5jIDw9IDQnZDA7Ci0gICAgICAgIHRja19kaXZuZWdfc3luYyA8PSA0J2QwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIHRja19kaXZwb3Nfc3luYyA8PSB7dGNrX2RpdnBvc19zeW5jWzI6MF0sIHRja19kaXZwb3N9OwotICAgICAgICB0Y2tfZGl2bmVnX3N5bmMgPD0ge3Rja19kaXZuZWdfc3luY1syOjBdLCB0Y2tfZGl2bmVnfTsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gdGNrX3Jpc2VfbG9hZCAgPSB0Y2tfZGl2cG9zX3N5bmNbMl0gXiB0Y2tfZGl2cG9zX3N5bmNbMV07Ci1hc3NpZ24gdGNrX3Jpc2VfcmVzZXQgPSB0Y2tfZGl2cG9zX3N5bmNbM10gXiB0Y2tfZGl2cG9zX3N5bmNbMl07Ci1hc3NpZ24gdGNrX2ZhbGxfbG9hZCAgPSB0Y2tfZGl2bmVnX3N5bmNbMl0gXiB0Y2tfZGl2bmVnX3N5bmNbMV07Ci1hc3NpZ24gdGNrX2ZhbGxfcmVzZXQgPSB0Y2tfZGl2bmVnX3N5bmNbM10gXiB0Y2tfZGl2bmVnX3N5bmNbMl07Ci0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHB3cnVwX3JzdF9uKSBiZWdpbgotICAgIGlmICh+cHdydXBfcnN0X24pIGJlZ2luCi0gICAgICAgICAgICB0YXBjc3luYzJjb3JlX2NoX3VwZGF0ZV9vICAgPD0gJzA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgaWYgICh0Y2tfZmFsbF9sb2FkKSBiZWdpbgotICAgICAgICAgICAgdGFwY3N5bmMyY29yZV9jaF91cGRhdGVfbyAgIDw9IHRhcGMydGFwY3N5bmNfY2hfdXBkYXRlX2k7Ci0gICAgICAgIGVuZCBlbHNlIGlmICh0Y2tfZmFsbF9yZXNldCkgYmVnaW4KLSAgICAgICAgICAgIHRhcGNzeW5jMmNvcmVfY2hfdXBkYXRlX28gICA8PSAnMDsKLSAgICAgICAgZW5kCi0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2ZmIEAobmVnZWRnZSB0YXBjX3RjaywgbmVnZWRnZSB0YXBjX3Ryc3RfbikgYmVnaW4KLSAgICBpZiAofnRhcGNfdHJzdF9uKSBiZWdpbgotICAgICAgICBkbWlfY2hfY2FwdHVyZV9zeW5jWzBdIDw9ICcwOwotICAgICAgICBkbWlfY2hfc2hpZnRfc3luY1swXSAgIDw9ICcwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGRtaV9jaF9jYXB0dXJlX3N5bmNbMF0gPD0gdGFwYzJ0YXBjc3luY19jaF9jYXB0dXJlX2k7Ci0gICAgICAgIGRtaV9jaF9zaGlmdF9zeW5jWzBdICAgPD0gdGFwYzJ0YXBjc3luY19jaF9zaGlmdF9pOwotICAgIGVuZAotZW5kCi0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHB3cnVwX3JzdF9uKSBiZWdpbgotICAgIGlmICh+cHdydXBfcnN0X24pIGJlZ2luCi0gICAgICAgIGRtaV9jaF9jYXB0dXJlX3N5bmNbMjoxXSA8PSAnMDsKLSAgICAgICAgZG1pX2NoX3NoaWZ0X3N5bmNbMjoxXSAgIDw9ICcwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGRtaV9jaF9jYXB0dXJlX3N5bmNbMjoxXSA8PSB7ZG1pX2NoX2NhcHR1cmVfc3luY1sxXSwgZG1pX2NoX2NhcHR1cmVfc3luY1swXX07Ci0gICAgICAgIGRtaV9jaF9zaGlmdF9zeW5jWzI6MV0gICA8PSB7ZG1pX2NoX3NoaWZ0X3N5bmNbMV0sIGRtaV9jaF9zaGlmdF9zeW5jWzBdfTsKLSAgICBlbmQKLWVuZAotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSBwd3J1cF9yc3RfbikgYmVnaW4KLSAgICBpZiAofnB3cnVwX3JzdF9uKSBiZWdpbgotICAgICAgICBkbWlfY2hfdGRpX3N5bmMgICAgIDw9ICcwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGRtaV9jaF90ZGlfc3luYyAgICAgPD0ge2RtaV9jaF90ZGlfc3luY1sxOjBdLCB0YXBjMnRhcGNzeW5jX2NoX3RkaV9pfTsKLSAgICBlbmQKLWVuZAotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSBwd3J1cF9yc3RfbikgYmVnaW4KLSAgICBpZiAofnB3cnVwX3JzdF9uKSBiZWdpbgotICAgICAgICAgICAgdGFwY3N5bmMyY29yZV9jaF9jYXB0dXJlX28gPD0gJzA7Ci0gICAgICAgICAgICB0YXBjc3luYzJjb3JlX2NoX3NoaWZ0X28gICA8PSAnMDsKLSAgICAgICAgICAgIHRhcGNzeW5jMmNvcmVfY2hfdGRpX28gICAgIDw9ICcwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGlmICh0Y2tfcmlzZV9sb2FkKSBiZWdpbgotICAgICAgICAgICAgdGFwY3N5bmMyY29yZV9jaF9jYXB0dXJlX28gPD0gZG1pX2NoX2NhcHR1cmVfc3luY1syXTsKLSAgICAgICAgICAgIHRhcGNzeW5jMmNvcmVfY2hfc2hpZnRfbyAgIDw9IGRtaV9jaF9zaGlmdF9zeW5jWzJdOwotICAgICAgICAgICAgdGFwY3N5bmMyY29yZV9jaF90ZGlfbyAgICAgPD0gZG1pX2NoX3RkaV9zeW5jWzJdOwotICAgICAgICBlbmQgZWxzZSBpZiAodGNrX3Jpc2VfcmVzZXQpIGJlZ2luCi0gICAgICAgICAgICB0YXBjc3luYzJjb3JlX2NoX2NhcHR1cmVfbyA8PSAnMDsKLSAgICAgICAgICAgIHRhcGNzeW5jMmNvcmVfY2hfc2hpZnRfbyAgIDw9ICcwOwotICAgICAgICAgICAgdGFwY3N5bmMyY29yZV9jaF90ZGlfbyAgICAgPD0gJzA7Ci0gICAgICAgIGVuZAotICAgIGVuZAotZW5kCi0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIGRtX3JzdF9uKSBiZWdpbgotICAgIGlmICh+ZG1fcnN0X24pIGJlZ2luCi0gICAgICAgICAgICB0YXBjc3luYzJkbWlfY2hfc2VsX28gICAgIDw9ICcwOwotICAgICAgICAgICAgdGFwY3N5bmMyY29yZV9jaF9pZF9vICAgICAgPD0gJzA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgaWYgKHRja19yaXNlX2xvYWQpIGJlZ2luCi0gICAgICAgICAgICB0YXBjc3luYzJkbWlfY2hfc2VsX28gICAgIDw9IHRhcGMydGFwY3N5bmNfZG1pX2NoX3NlbF9pOwotICAgICAgICAgICAgdGFwY3N5bmMyY29yZV9jaF9pZF9vICAgICAgPD0gdGFwYzJ0YXBjc3luY19jaF9pZF9pOwotICAgICAgICBlbmQKLSAgICBlbmQKLWVuZAotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSBwd3J1cF9yc3RfbikgYmVnaW4KLSAgICBpZiAofnB3cnVwX3JzdF9uKSBiZWdpbgotICAgICAgICAgICAgdGFwY3N5bmMyc2N1X2NoX3NlbF9vICAgICA8PSAnMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICBpZiAodGNrX3Jpc2VfbG9hZCkgYmVnaW4KLSAgICAgICAgICAgIHRhcGNzeW5jMnNjdV9jaF9zZWxfbyAgICAgPD0gdGFwYzJ0YXBjc3luY19zY3VfY2hfc2VsX2k7Ci0gICAgICAgIGVuZAotICAgIGVuZAotZW5kCi0KLWFzc2lnbiB0YXBjMnRhcGNzeW5jX2NoX3Rkb19pID0gdGFwY3N5bmMyY29yZV9jaF90ZG9fbzsKLQotZW5kbW9kdWxlIDogc2NyMV90YXBjX3N5bmNocm9uaXplcgotCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX2FoYi5zdmggYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9haGIuc3ZoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjMwZjZhLi4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX2FoYi5zdmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IFN5bnRhY29yZSBMTEMgqSAyMDE2LTIwMjEKLS8vIAotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKLS8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBTeW50YWNvcmUgTExDCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vIEBmaWxlICAgICAgIDxzY3IxX2FoYi5zdmg+Ci0vLy8gQGJyaWVmICAgICAgQUhCIGhlYWRlciBmaWxlCi0vLy8KLQotYGlmbmRlZiBTQ1IxX0FIQl9TVkgKLWBkZWZpbmUgU0NSMV9BSEJfU1ZICi0KLWBpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgotCi1wYXJhbWV0ZXIgU0NSMV9BSEJfV0lEVEggID0gMzI7Ci0KLS8vIEVuY29kaW5nIGZvciBIVFJBTlMgc2lnbmFsCi1wYXJhbWV0ZXIgbG9naWMgWzE6MF0gU0NSMV9IVFJBTlNfSURMRSAgID0gMidiMDA7Ci1wYXJhbWV0ZXIgbG9naWMgWzE6MF0gU0NSMV9IVFJBTlNfTk9OU0VRID0gMidiMTA7Ci1gaWZkZWYgU0NSMV9YUFJPUF9FTgotcGFyYW1ldGVyIGxvZ2ljIFsxOjBdIFNDUjFfSFRSQU5TX0VSUiAgICA9ICd4OwotYGVsc2UgLy8gU0NSMV9YUFJPUF9FTgotcGFyYW1ldGVyIGxvZ2ljIFsxOjBdIFNDUjFfSFRSQU5TX0VSUiAgICA9ICcwOwotYGVuZGlmIC8vIFNDUjFfWFBST1BfRU4KLQotLy8gRW5jb2RpbmcgZm9yIEhCVVJTVCBzaWduYWwKLXBhcmFtZXRlciBsb2dpYyBbMjowXSBTQ1IxX0hCVVJTVF9TSU5HTEUgPSAzJ2IwMDA7Ci1gaWZkZWYgU0NSMV9YUFJPUF9FTgotcGFyYW1ldGVyIGxvZ2ljIFsyOjBdIFNDUjFfSEJVUlNUX0VSUiAgICA9ICd4OwotYGVsc2UgLy8gU0NSMV9YUFJPUF9FTgotcGFyYW1ldGVyIGxvZ2ljIFsxOjBdIFNDUjFfSEJVUlNUX0VSUiAgICA9ICcwOwotYGVuZGlmIC8vIFNDUjFfWFBST1BfRU4KLQotLy8gRW5jb2RpbmcgZm9yIEhTSVpFIHNpZ25hbAotcGFyYW1ldGVyIGxvZ2ljIFsyOjBdIFNDUjFfSFNJWkVfOEIgICAgPSAzJ2IwMDA7Ci1wYXJhbWV0ZXIgbG9naWMgWzI6MF0gU0NSMV9IU0laRV8xNkIgICA9IDMnYjAwMTsKLXBhcmFtZXRlciBsb2dpYyBbMjowXSBTQ1IxX0hTSVpFXzMyQiAgID0gMydiMDEwOwotYGlmZGVmIFNDUjFfWFBST1BfRU4KLXBhcmFtZXRlciBsb2dpYyBbMjowXSBTQ1IxX0hTSVpFX0VSUiAgID0gJ3g7Ci1gZWxzZSAvLyBTQ1IxX1hQUk9QX0VOCi1wYXJhbWV0ZXIgbG9naWMgWzE6MF0gU0NSMV9IU0laRV9FUlIgICA9ICcwOwotYGVuZGlmIC8vIFNDUjFfWFBST1BfRU4KLQotLy8gRW5jb2RpbmcgSFBST1Qgc2lnbmFsCi0vLyBIUFJPVFswXSA6IDAgLSBpbnN0cjsgICAgICAxIC0gZGF0YQotLy8gSFBST1RbMV0gOiAwIC0gdXNlcjsgICAgICAgMSAtIHByaXZpbGVnZQotLy8gSFBST1RbMl0gOiAwIC0gbm90IGJ1ZmZlcjsgMSAtIGJ1ZmZlcgotLy8gSFBST1RbM10gOiAwIC0gY2FjaGVhYmxlOyAgMSAtIGNhY2hlYWJsZQotcGFyYW1ldGVyIFNDUjFfSFBST1RfREFUQSAgPSAwOwotcGFyYW1ldGVyIFNDUjFfSFBST1RfUFJWICAgPSAxOwotcGFyYW1ldGVyIFNDUjFfSFBST1RfQlVGICAgPSAyOwotcGFyYW1ldGVyIFNDUjFfSFBST1RfQ0FDSEUgPSAzOwotCi0vLyBFbmNvZGluZyBIUkVTUCBzaWduYWwKLXBhcmFtZXRlciBsb2dpYyBTQ1IxX0hSRVNQX09LQVkgID0gMSdiMDsKLXBhcmFtZXRlciBsb2dpYyBTQ1IxX0hSRVNQX0VSUk9SID0gMSdiMTsKLWBpZmRlZiBTQ1IxX1hQUk9QX0VOCi1wYXJhbWV0ZXIgbG9naWMgU0NSMV9IUkVTUF9FUlIgICA9IDEnYng7Ci1gZWxzZSAvLyBTQ1IxX1hQUk9QX0VOCi1wYXJhbWV0ZXIgbG9naWMgU0NSMV9IUkVTUF9FUlIgICA9IDEnYjA7Ci1gZW5kaWYgLy8gU0NSMV9YUFJPUF9FTgotCi1gZW5kaWYgLy8gU0NSMV9BSEJfU1ZICmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODEwNzc2Li4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoCisrKyAvZGV2L251bGwKQEAgLTEsMjMzICswLDAgQEAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogU3ludGFjb3JlIExMQyCpIDIwMTYtMjAyMQotLy8gCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAotLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IFN5bnRhY29yZSBMTEMKLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8gQGZpbGUgICAgICAgPHNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmg+Ci0vLy8gQGJyaWVmICAgICAgQXJjaGl0ZWN0dXJlIGRlc2NyaXB0aW9uIGZpbGUKLS8vLwotCi1gaWZuZGVmIFNDUjFfQVJDSF9ERVNDUklQVElPTl9TVkgKLWBkZWZpbmUgU0NSMV9BUkNIX0RFU0NSSVBUSU9OX1NWSAotCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDT1JFIEZVTkRBTUVOVEFMIFBBUkFNRVRFUlMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFNDUjEgY29yZSBpZGVudGlmaWVycwotYGRlZmluZSBTQ1IxX01JTVBJRCAgICAgICAgICAgICAzMidoMjEwNTE0MDAKLWBkZWZpbmUgU0NSMV9NVkVORE9SSUQgICAgICAgICAgMzInaDAwMDAwMDAwCi0KLS8vIFdpZHRoIG9mIG1haW4gcmVnaXN0ZXJzIGFuZCBidXNlcwotYGRlZmluZSBTQ1IxX1hMRU4gICAgICAgICAgICAgICAzMgotYGRlZmluZSBTQ1IxX0lNRU1fQVdJRFRIICAgICAgICBgU0NSMV9YTEVOCi1gZGVmaW5lIFNDUjFfSU1FTV9EV0lEVEggICAgICAgIGBTQ1IxX1hMRU4KLWBkZWZpbmUgU0NSMV9ETUVNX0FXSURUSCAgICAgICAgYFNDUjFfWExFTgotYGRlZmluZSBTQ1IxX0RNRU1fRFdJRFRIICAgICAgICBgU0NSMV9YTEVOCi0KLS8vIFRBUCBJRENPREUKLWBkZWZpbmUgU0NSMV9UQVBfSURDT0RFICAgICAgICAgJ2hERUIxMTAwMQotCi0KLWBpZmRlZiBTQ1IxX0FSQ0hfQ1VTVE9NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSU5DTFVERSBTQ1IxX0FSQ0hfQ1VTVE9NLlNWSAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gVGhlIGV4dGVybmFsIGZpbGUgc2NyMV9hcmNoX2N1c3RvbS5zdmggaXMgdXNlZCBmb3IgdGhlIG9wZW4gU0NSMS1TREsgcHJvamVjdCwKLS8vIGFuZCBjYW4gYWxzbyBiZSB1c2VkIGZvciBhbnkgY3VzdG9tIHByb2plY3RzLgotCi0vLyBUaGUgZmlsZSBzZXRzOgotLy8gLSB0YXJnZXQgcGxhdGZvcm0gKEZQR0EvQVNJQyksIHdoaWNoIGFmZmVjdHMgdGhlIGNob2ljZSBvZiBsb2dpY2FsIGNvbnN0cnVjdHM7Ci0vLyAtIGRldmljZSBidWlsZCBJRDsKLS8vIC0gYWRkcmVzcyBjb25zdGFudHM7Ci0vLyAtIGNvdWxkIGVuYWJsZXMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgotCi0vLyBQb3NzaWJsZSB0YXJnZXRzOgotLy8gYGRlZmluZSBTQ1IxX1RSR1RfRlBHQV9JTlRFTCAgICAgICAgIC8vIHRhcmdldCBwbGF0Zm9ybSBpcyBJbnRlbCBGUEdBcwotLy8gYGRlZmluZSBTQ1IxX1RSR1RfRlBHQV9JTlRFTF9NQVgxMCAgIC8vIHRhcmdldCBwbGF0Zm9ybSBpcyBJbnRlbCBNQVggMTAgRlBHQXMgKHVzZWQgaW4gdGhlIFNDUjEtU0RLIHByb2plY3QpCi0vLyBgZGVmaW5lIFNDUjFfVFJHVF9GUEdBX0lOVEVMX0FSUklBViAgLy8gdGFyZ2V0IHBsYXRmb3JtIGlzIEludGVsIEFycmlhIFYgRlBHQXMgKHVzZWQgaW4gdGhlIFNDUjEtU0RLIHByb2plY3QpCi0vLyBgZGVmaW5lIFNDUjFfVFJHVF9GUEdBX1hJTElOWCAgICAgICAgLy8gdGFyZ2V0IHBsYXRmb3JtIGlzIFhpbGlueCBGUEdBcyAodXNlZCBpbiB0aGUgU0NSMS1TREsgcHJvamVjdCkKLS8vIGBkZWZpbmUgU0NSMV9UUkdUX0FTSUMgICAgICAgICAgICAgICAvLyB0YXJnZXQgcGxhdGZvcm0gaXMgQVNJQwotLy8gYGRlZmluZSBTQ1IxX1RSR1RfU0lNVUxBVElPTiAgICAgICAgIC8vIHRhcmdldCBpcyBzaW11bGF0aW9uIChlbmFibGUgc2ltdWxhdGlvbiBjb2RlKQotCi0gYGluY2x1ZGUgInNjcjFfYXJjaF9jdXN0b20uc3ZoIgotCi1gZW5kaWYgLy8gU0NSMV9BUkNIX0NVU1RPTQotCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSRUNPTU1FTkRFRCBDT1JFIEFSQ0hJVEVDVFVSRSBDT05GSUdVUkFUSU9OUwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gVW5jb21tZW50IG9uZSBvZiB0aGVzZSBkZWZpbmVzIHRvIHNldCB0aGUgcmVjb21tZW5kZWQgY29uZmlndXJhdGlvbjoKLQotYGRlZmluZSBTQ1IxX0NGR19SVjMySU1DX01BWAotLy9gZGVmaW5lIFNDUjFfQ0ZHX1JWMzJJQ19CQVNFCi0vL2BkZWZpbmUgU0NSMV9DRkdfUlYzMkVDX01JTgotCi0vLyBJZiBhbGwgZGVmaW5lcyBhcmUgY29tbWVudGVkLCBjdXN0b20gY29uZmlndXJhdGlvbiB3aWxsIGJlIHVzZWQgKHNlZSBiZWxvdykKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJFQUQtT05MWTogc2V0dGluZ3MgZm9yIHJlY29tbWVuZGVkIGNvbmZpZ3VyYXRpb25zCi1gaWZkZWYgIFNDUjFfQ0ZHX1JWMzJJTUNfTUFYCi0gIGBkZWZpbmUgU0NSMV9SVklfRVhUCi0gIGBkZWZpbmUgU0NSMV9SVk1fRVhUCi0gIGBkZWZpbmUgU0NSMV9SVkNfRVhUCi0gIHBhcmFtZXRlciBpbnQgdW5zaWduZWQgU0NSMV9NVFZFQ19CQVNFX1dSX0JJVFMgPSAyNjsKLSAgYGRlZmluZSBTQ1IxX01UVkVDX01PREVfRU4gICAgICAgICAgLy8gZW5hYmxlIHdyaXRhYmxlIE1UVkVDLm1vZGUgZmllbGQgdG8gYWxsb3cgdmVjdG9yZWQgaXJxIG1vZGUsIG90aGVyd2lzZSBvbmx5IGRpcmVjdCBtb2RlIGlzIHBvc3NpYmxlCi0vLyAgYGRlZmluZSBTQ1IxX0ZBU1RfTVVMICAgICAgICAgICAgICAgLy8gZW5hYmxlIGZhc3Qgb25lLWN5Y2xlIG11bHRpcGxpY2F0aW9uLCBvdGhlcndpc2UgbXVsdGlwbGljYXRpb24gdGFrZXMgMzIgY3ljbGVzCi0vL2BkZWZpbmUgU0NSMV9NUFJGX1JTVF9FTiAtIHlvc3lzIGZpeCwgdHdvIGRpbWVuc2lvbmFsIGFycmF5IGluaXQgbm90IGFsbG93ZWQKLSAgYGRlZmluZSBTQ1IxX01DT1VOVEVOX0VOICAgICAgICAgICAgLy8gZW5hYmxlIGN1c3RvbSBNQ09VTlRFTiBDU1IgZm9yIGNvdW50ZXIgY29udHJvbAotLy9gZGVmaW5lIFNDUjFfREJHX0VOICAgICAgICAgICAgICAgICAvLyBlbmFibGUgRGVidWcgU3Vic3lzdGVtIChUQVBDLCBETSwgU0NVLCBIRFUpCi0vL2BkZWZpbmUgU0NSMV9URFVfRU4gICAgICAgICAgICAgICAgIC8vIGVuYWJsZSBUcmlnZ2VyIERlYnVnIFVuaXQgKGhhcmR3YXJlIGJyZWFrcG9pbnRzKQotLy8gIHBhcmFtZXRlciBpbnQgdW5zaWduZWQgU0NSMV9URFVfVFJJR19OVU0gPSA0OwotLy8gYGRlZmluZSBTQ1IxX1REVV9JQ09VTlRfRU4gICAgICAgICAgLy8gZW5hYmxlIGhhcmR3YXJlIHRyaWdnZXJzIG9uIGluc3RydWN0aW9uIGNvdW50ZXIKLSAgYGRlZmluZSBTQ1IxX0lQSUNfRU4gICAgICAgICAgICAgICAgLy8gZW5hYmxlIEludGVncmF0ZWQgUHJvZ3JhbW1hYmxlIEludGVycnVwdCBDb250cm9sbGVyCi0gIGBkZWZpbmUgU0NSMV9JUElDX1NZTkNfRU4gICAgICAgICAgIC8vIGVuYWJsZSBJUElDIHN5bmNocm9uaXplcgotICBgZGVmaW5lIFNDUjFfVENNX0VOCi0gIGBkZWZpbmUgU0NSMV9ORVdfUENfUkVHICAgICAgICAgICAgIC8vIGVuYWJsZSByZWdpc3RlciBpbiBJRlUgZm9yIE5ld19QQyB2YWx1ZQotICBgZGVmaW5lIFNDUkMxX01QUkZfU1RBR0UgICAgICAgICAgICAvLyBlbmFibGVkIHJlZ2lzdGVyIGF0IFJlYWQgcGF0aCBvZiBNUFJGCi1gZWxzaWYgIFNDUjFfQ0ZHX1JWMzJJQ19CQVNFCi0gIGBkZWZpbmUgU0NSMV9SVklfRVhUCi0gIGBkZWZpbmUgU0NSMV9SVkNfRVhUCi0gIHBhcmFtZXRlciBpbnQgdW5zaWduZWQgU0NSMV9NVFZFQ19CQVNFX1dSX0JJVFMgPSAxNjsKLSAgYGRlZmluZSBTQ1IxX01UVkVDX01PREVfRU4KLSAgYGRlZmluZSBTQ1IxX05PX0RFQ19TVEFHRQotICBgZGVmaW5lIFNDUjFfTVBSRl9SU1RfRU4KLSAgYGRlZmluZSBTQ1IxX01DT1VOVEVOX0VOCi0gIGBkZWZpbmUgU0NSMV9EQkdfRU4KLSAgYGRlZmluZSBTQ1IxX1REVV9FTgotICBwYXJhbWV0ZXIgaW50IHVuc2lnbmVkIFNDUjFfVERVX1RSSUdfTlVNID0gMjsKLSAgYGRlZmluZSBTQ1IxX1REVV9JQ09VTlRfRU4KLSAgYGRlZmluZSBTQ1IxX0lQSUNfRU4KLSAgYGRlZmluZSBTQ1IxX0lQSUNfU1lOQ19FTgotICBgZGVmaW5lIFNDUjFfVENNX0VOCi1gZWxzaWYgIFNDUjFfQ0ZHX1JWMzJFQ19NSU4KLSAgYGRlZmluZSBTQ1IxX1JWRV9FWFQKLSAgYGRlZmluZSBTQ1IxX1JWQ19FWFQKLSAgcGFyYW1ldGVyIGludCB1bnNpZ25lZCBTQ1IxX01UVkVDX0JBU0VfV1JfQklUUyA9IDA7Ci0gIGBkZWZpbmUgU0NSMV9OT19ERUNfU1RBR0UKLSAgYGRlZmluZSBTQ1IxX05PX0VYRV9TVEFHRQotICBgZGVmaW5lIFNDUjFfVENNX0VOCi0KLWBlbHNlIC8vIGJlZ2luIGN1c3RvbSBjb25maWd1cmF0aW9uIHNlY3Rpb24KLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQ1VTVE9NIENPUkUgQVJDSElURUNUVVJFIENPTkZJR1VSQVRJT04KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFRvIGZpbmUtdHVuZSBjdXN0b20gY29uZmlndXJhdGlvbiwgeW91IGNhbiBjaGFuZ2UgdGhlIHZhbHVlcyBpbiB0aGlzIHNlY3Rpb24uCi0vLyBNYWtlIHN1cmUgdGhhdCB0aGUgZGVmaW5lcyBvZiB0aGUgcmVjb21tZW5kZWQgY29uZmlndXJhdGlvbnMgYXJlIGNvbW1lbnRlZCwKLS8vIG90aGVyd2lzZSB0aGlzIHNlY3Rpb24gd2lsbCBiZSBpbmFjdGl2ZS4KLQotLy8gUklTQy1WIElTQSBvcHRpb25zCi0vL2BkZWZpbmUgU0NSMV9SVkVfRVhUICAgICAgICAgICAgICAgIC8vIGVuYWJsZSBSVjMyRSBiYXNlIGludGVnZXIgaW5zdHJ1Y3Rpb24gc2V0LCBvdGhlcndpc2UgUlYzMkkgd2lsbCBiZSB1c2VkCi1gZGVmaW5lIFNDUjFfUlZNX0VYVCAgICAgICAgICAgICAgICAvLyBlbmFibGUgc3RhbmRhcmQgZXh0ZW5zaW9uICJNIiBmb3IgaW50ZWdlciBoYXJkd2FyZSBtdWx0aXBsaWVyIGFuZCBkaXZpZGVyCi1gZGVmaW5lIFNDUjFfUlZDX0VYVCAgICAgICAgICAgICAgICAvLyBlbmFibGUgc3RhbmRhcmQgZXh0ZW5zaW9uICJDIiBmb3IgY29tcHJlc3NlZCBpbnN0cnVjdGlvbnMKLXBhcmFtZXRlciBpbnQgdW5zaWduZWQgU0NSMV9NVFZFQ19CQVNFX1dSX0JJVFMgPSAyNjsgICAgLy8gbnVtYmVyIG9mIHdyaXRhYmxlIGhpZ2gtb3JkZXIgYml0cyBpbiBNVFZFQy5iYXNlIGZpZWxkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsZWdhbCB2YWx1ZXMgYXJlIDAgdG8gMjYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlYWQtb25seSBiaXRzIGFyZSBoYXJkd2lyZWQgdG8gcmVzZXQgdmFsdWUKLWBkZWZpbmUgU0NSMV9NVFZFQ19NT0RFX0VOICAgICAgICAgIC8vIGVuYWJsZSB3cml0YWJsZSBNVFZFQy5tb2RlIGZpZWxkIHRvIGFsbG93IHZlY3RvcmVkIGlycSBtb2RlLCBvdGhlcndpc2Ugb25seSBkaXJlY3QgbW9kZSBpcyBwb3NzaWJsZQotCi1gaWZuZGVmIFNDUjFfUlZFX0VYVAotICBgZGVmaW5lIFNDUjFfUlZJX0VYVCAvLyBSVjMyRSBiYXNlIGludGVnZXIgaW5zdHJ1Y3Rpb24gc2V0IGlmIFNDUjFfUlZFX0VYVCBpcyBub3QgZW5hYmxlZAotYGVuZGlmIC8vIH5TQ1IxX1JWRV9FWFQKLQotLy8gQ29yZSBwaXBlbGluZSBvcHRpb25zIChwb3dlci1wZXJmb3JtYW5jZS1hcmVhIG9wdGltaXphdGlvbikKLWBkZWZpbmUgU0NSMV9OT19ERUNfU1RBR0UgICAgICAgICAgIC8vIGRpc2FibGUgcmVnaXN0ZXIgYmV0d2VlbiBJRlUgYW5kIElEVQotYGRlZmluZSBTQ1IxX05PX0VYRV9TVEFHRSAgICAgICAgICAgLy8gZGlzYWJsZSByZWdpc3RlciBiZXR3ZWVuIElEVSBhbmQgRVhVCi1gZGVmaW5lIFNDUjFfTkVXX1BDX1JFRyAgICAgICAgICAgICAvLyBlbmFibGUgcmVnaXN0ZXIgaW4gSUZVIGZvciBOZXdfUEMgdmFsdWUKLWBkZWZpbmUgU0NSMV9GQVNUX01VTCAgICAgICAgICAgICAgIC8vIGVuYWJsZSBmYXN0IG9uZS1jeWNsZSBtdWx0aXBsaWNhdGlvbiwgb3RoZXJ3aXNlIG11bHRpcGxpY2F0aW9uIHRha2VzIDMyIGN5Y2xlcwotYGRlZmluZSBTQ1IxX0NMS0NUUkxfRU4gICAgICAgICAgICAgLy8gZW5hYmxlIGdsb2JhbCBjbG9jayBnYXRpbmcKLWBkZWZpbmUgU0NSMV9NUFJGX1JTVF9FTiAgICAgICAgICAgIC8vIGVuYWJsZSByZXNldCBmb3IgTVBSRgotYGRlZmluZSBTQ1IxX01DT1VOVEVOX0VOICAgICAgICAgICAgLy8gZW5hYmxlIGN1c3RvbSBNQ09VTlRFTiBDU1IgZm9yIGNvdW50ZXIgY29udHJvbAotCi0vLyBVbmNvcmUgb3B0aW9ucwotYGRlZmluZSBTQ1IxX0RCR19FTiAgICAgICAgICAgICAgICAgLy8gZW5hYmxlIERlYnVnIFN1YnN5c3RlbSAoVEFQQywgRE0sIFNDVSwgSERVKQotYGRlZmluZSBTQ1IxX1REVV9FTiAgICAgICAgICAgICAgICAgLy8gZW5hYmxlIFRyaWdnZXIgRGVidWcgVW5pdCAoaGFyZHdhcmUgYnJlYWtwb2ludHMpCi1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkIFNDUjFfVERVX1RSSUdfTlVNID0gMjsgICAvLyBudW1iZXIgb2YgaGFyZHdhcmUgdHJpZ2dlcnMKLWBkZWZpbmUgU0NSMV9URFVfSUNPVU5UX0VOICAgICAgICAgIC8vIGVuYWJsZSBoYXJkd2FyZSB0cmlnZ2VycyBvbiBpbnN0cnVjdGlvbiBjb3VudGVyCi1gZGVmaW5lIFNDUjFfSVBJQ19FTiAgICAgICAgICAgICAgICAvLyBlbmFibGUgSW50ZWdyYXRlZCBQcm9ncmFtbWFibGUgSW50ZXJydXB0IENvbnRyb2xsZXIKLWBkZWZpbmUgU0NSMV9JUElDX1NZTkNfRU4gICAgICAgICAgIC8vIGVuYWJsZSBJUElDIHN5bmNocm9uaXplcgotYGRlZmluZSBTQ1IxX1RDTV9FTiAgICAgICAgICAgICAgICAgLy8gZW5hYmxlIFRpZ2h0bHktQ291cGxlZCBNZW1vcnkKLQotYGVuZGlmIC8vIGVuZCBjdXN0b20gY29uZmlndXJhdGlvbiBzZWN0aW9uCi0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIENPUkUgSU5URUdSQVRJT04gT1BUSU9OUwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gQnlwYXNzZXMgb24gQVhJL0FIQiBicmlkZ2UgSS9PCi1gZGVmaW5lIFNDUjFfSU1FTV9BSEJfSU5fQlAgICAgICAgICAvLyBieXBhc3MgaW5zdHJ1Y3Rpb24gbWVtb3J5IEFIQiBicmlkZ2UgaW5wdXQgcmVnaXN0ZXIKLWBkZWZpbmUgU0NSMV9JTUVNX0FIQl9PVVRfQlAgICAgICAgIC8vIGJ5cGFzcyBpbnN0cnVjdGlvbiBtZW1vcnkgQUhCIGJyaWRnZSBvdXRwdXQgcmVnaXN0ZXIKLWBkZWZpbmUgU0NSMV9ETUVNX0FIQl9JTl9CUCAgICAgICAgIC8vIGJ5cGFzcyBkYXRhIG1lbW9yeSBBSEIgYnJpZGdlIGlucHV0IHJlZ2lzdGVyCi1gZGVmaW5lIFNDUjFfRE1FTV9BSEJfT1VUX0JQICAgICAgICAvLyBieXBhc3MgZGF0YSBtZW1vcnkgQUhCIGJyaWRnZSBvdXRwdXQgcmVnaXN0ZXIKLWBkZWZpbmUgU0NSMV9JTUVNX0FYSV9SRVFfQlAgICAgICAgIC8vIGJ5cGFzcyBpbnN0cnVjdGlvbiBtZW1vcnkgQVhJIGJyaWRnZSByZXF1ZXN0IHJlZ2lzdGVyCi1gZGVmaW5lIFNDUjFfSU1FTV9BWElfUkVTUF9CUCAgICAgICAvLyBieXBhc3MgaW5zdHJ1Y3Rpb24gbWVtb3J5IEFYSSBicmlkZ2UgcmVzcG9uc2UgcmVnaXN0ZXIKLWBkZWZpbmUgU0NSMV9ETUVNX0FYSV9SRVFfQlAgICAgICAgIC8vIGJ5cGFzcyBkYXRhIG1lbW9yeSBBWEkgYnJpZGdlIHJlcXVlc3QgcmVnaXN0ZXIKLWBkZWZpbmUgU0NSMV9ETUVNX0FYSV9SRVNQX0JQICAgICAgIC8vIGJ5cGFzcyBkYXRhIG1lbW9yeSBBWEkgYnJpZGdlIHJlc3BvbnNlIHJlZ2lzdGVyCi0KLWBpZm5kZWYgU0NSMV9BUkNIX0NVU1RPTQotLy8gRGVmYXVsdCBhZGRyZXNzIGNvbnN0YW50cyAoaWYgc2NyMV9hcmNoX2N1c3RvbS5zdmggaXMgbm90IHVzZWQpCi1wYXJhbWV0ZXIgYml0IFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgU0NSMV9BUkNIX1JTVF9WRUNUT1IgICAgICAgID0gJ2gyMDA7ICAgICAgICAgICAgLy8gUmVzZXQgdmVjdG9yIHZhbHVlIChzdGFydCBhZGRyZXNzIGFmdGVyIHJlc2V0KQotcGFyYW1ldGVyIGJpdCBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgIFNDUjFfQVJDSF9NVFZFQ19CQVNFICAgICAgICA9ICdoMUMwOyAgICAgICAgICAgIC8vIE1UVkVDLmJhc2UgZmllbGQgcmVzZXQgdmFsdWUsIG9yIGNvbnN0YW50IHZhbHVlIGZvciBNVFZFQy5iYXNlIGJpdHMgdGhhdCBhcmUgaGFyZHdpcmVkCi0KLXBhcmFtZXRlciBiaXQgW2BTQ1IxX0RNRU1fQVdJRFRILTE6MF0gICBTQ1IxX1RDTV9BRERSX01BU0sgICAgICAgICAgPSAnaEZGRkYwMDAwOyAgICAgICAvLyBUQ00gbWFzayBhbmQgc2l6ZTsgc2l6ZSBpbiBieXRlcyBpcyB0d28ncyBjb21wbGVtZW50IG9mIHRoZSBtYXNrIHZhbHVlCi1wYXJhbWV0ZXIgYml0IFtgU0NSMV9ETUVNX0FXSURUSC0xOjBdICAgU0NSMV9UQ01fQUREUl9QQVRURVJOICAgICAgID0gJ2gwMDQ4MDAwMDsgICAgICAgLy8gVENNIGFkZHJlc3MgbWF0Y2ggcGF0dGVybgotCi1wYXJhbWV0ZXIgYml0IFtgU0NSMV9ETUVNX0FXSURUSC0xOjBdICAgU0NSMV9USU1FUl9BRERSX01BU0sgICAgICAgID0gJ2hGRkZGRkZFMDsgICAgICAgLy8gVGltZXIgbWFzawotcGFyYW1ldGVyIGJpdCBbYFNDUjFfRE1FTV9BV0lEVEgtMTowXSAgIFNDUjFfVElNRVJfQUREUl9QQVRURVJOICAgICA9ICdoMDA0OTAwMDA7ICAgICAgIC8vIFRpbWVyIGFkZHJlc3MgbWF0Y2ggcGF0dGVybgotCi0vLyBEZXZpY2UgYnVpbGQgSUQKLSBgZGVmaW5lIFNDUjFfQVJDSF9CVUlMRF9JRCAgICAgICAgICAgICBgU0NSMV9NSU1QSUQKLQotYGVuZGlmIC8vIFNDUjFfQVJDSF9DVVNUT00KLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gVEFSR0VULVNQRUNJRklDIE9QVElPTlMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFJBTS1iYXNlZCBNUFJGIGNhbiBiZSB1c2VkIGZvciBJbnRlbCBGUEdBcyBvbmx5Ci1gaWZkZWYgU0NSMV9UUkdUX0ZQR0FfSU5URUwKLSAgYGRlZmluZSBTQ1IxX01QUkZfUkFNICAgICAgICAgICAvLyBpbXBsZW1lbnRzIE1QUkYgd2l0aCBkZWRpY2F0ZWQgUkFNIGJsb2NrcwotYGVuZGlmCi0KLS8vIEVYVV9TVEFHRV9CWVBBU1MgYW5kIE1QUkZfUlNUX0VOIG11c3QgYmUgZGlzYWJsZWQgZm9yIFJBTS1iYXNlZCBNUFJGCi1gaWZkZWYgU0NSMV9NUFJGX1JBTQotICBgdW5kZWYgIFNDUjFfTk9fRVhFX1NUQUdFCi0gIGB1bmRlZiAgU0NSMV9NUFJGX1JTVF9FTgotYGVuZGlmCi0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFNJTVVMQVRJT04gT1BUSU9OUwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy9gZGVmaW5lIFNDUjFfVFJHVF9TSU1VTEFUSU9OICAgICAgICAgICAgLy8gZW5hYmxlIHNpbXVsYXRpb24gY29kZSAoYXV0b21hdGljYWxseSBkZWZpbmVkIGJ5IHJvb3QgbWFrZWZpbGUpCi0vL2BkZWZpbmUgU0NSMV9UUkFDRV9MT0dfRU4gICAgICAgICAgICAgICAvLyBlbmFibGUgdHJhY2Vsb2cKLS8vYGRlZmluZSBTQ1IxX1hQUk9QX0VOICAgICAgICAgICAgICAgICAgIC8vIGVuYWJsZSBYLXByb3BhZ2F0aW9uCi0KLS8vIEFkZHJlc3NlcyB1c2VkIGluIHRlc3RiZW5jaAotbG9jYWxwYXJhbSBbYFNDUjFfWExFTi0xOjBdICAgICAgU0NSMV9TSU1fRVhJVF9BRERSICAgICAgPSAzMidoMDAwMF8wMEY4OwotbG9jYWxwYXJhbSBbYFNDUjFfWExFTi0xOjBdICAgICAgU0NSMV9TSU1fUFJJTlRfQUREUiAgICAgPSAzMidoRjAwMF8wMDAwOwotbG9jYWxwYXJhbSBbYFNDUjFfWExFTi0xOjBdICAgICAgU0NSMV9TSU1fRVhUX0lSUV9BRERSICAgPSAzMidoMzAwMF8wMDBDOyAvLyBCaXQgWzE1OjBdCi1sb2NhbHBhcmFtIFtgU0NSMV9YTEVOLTE6MF0gICAgICBTQ1IxX1NJTV9TT0ZUX0lSUV9BRERSICA9IDMyJ2gzMDAwXzAwMEM7IC8vIEJpdFsxNl0KLQotYGVuZGlmIC8vIFNDUjFfQVJDSF9ERVNDUklQVElPTl9TVkgKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX2FyY2hfdHlwZXMuc3ZoIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2luY2x1ZGVzL3NjcjFfYXJjaF90eXBlcy5zdmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiMWIyNzMuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2luY2x1ZGVzL3NjcjFfYXJjaF90eXBlcy5zdmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IFN5bnRhY29yZSBMTEMgqSAyMDE2LTIwMjEKLS8vIAotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKLS8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBTeW50YWNvcmUgTExDCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vIEBmaWxlICAgICAgIDxzY3IxX2FyY2hfdHlwZXMuc3ZoPgotLy8vIEBicmllZiAgICAgIFBpcGVsaW5lIHR5cGVzIGRlc2NyaXB0aW9uIGZpbGUKLS8vLwotCi1gaWZuZGVmIFNDUjFfQVJDSF9UWVBFU19TVkgKLWBkZWZpbmUgU0NSMV9BUkNIX1RZUEVTX1NWSAotCi1gaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBNUFJGIGFuZCBDU1IgcGFyYW1ldGVycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWBpZmRlZiBTQ1IxX1JWRV9FWFQKLSAgYGRlZmluZSBTQ1IxX01QUkZfQVdJRFRIICAgIDQKLSAgYGRlZmluZSBTQ1IxX01QUkZfU0laRSAgICAgIDE2Ci1gZWxzZSAvLyBTQ1IxX1JWRV9FWFQKLSAgYGRlZmluZSBTQ1IxX01QUkZfQVdJRFRIICAgIDUKLSAgYGRlZmluZSBTQ1IxX01QUkZfU0laRSAgICAgIDMyCi1gZW5kaWYgLy8gU0NSMV9SVkVfRVhUCi0KLS8vIE1hc2tlZCBkdWUgdG8gaXZlcmlsb2cgaXNzdWUKLS8vdHlwZWRlZiBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICB0eXBlX3NjcjFfbXByZl92OwotLy90eXBlZGVmIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gIHR5cGVfc2NyMV9wY192OwotCi1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX0NTUl9BRERSX1dJRFRIICAgICAgICAgICAgID0gMTI7Ci1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX0NTUl9NVFZFQ19CQVNFX1pFUk9fQklUUyAgID0gNjsKLXBhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfQ1NSX01UVkVDX0JBU0VfVkFMX0JJVFMgICAgPSBgU0NSMV9YTEVOLVNDUjFfQ1NSX01UVkVDX0JBU0VfWkVST19CSVRTOwotcGFyYW1ldGVyIGJpdCBbYFNDUjFfWExFTi0xOlNDUjFfQ1NSX01UVkVDX0JBU0VfWkVST19CSVRTXSAgU0NSMV9DU1JfTVRWRUNfQkFTRV9XUl9SU1RfVkFMICAgID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9DU1JfTVRWRUNfQkFTRV9WQUxfQklUUycoU0NSMV9BUkNIX01UVkVDX0JBU0UgPj4gU0NSMV9DU1JfTVRWRUNfQkFTRV9aRVJPX0JJVFMpOwotcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9DU1JfTVRWRUNfQkFTRV9ST19CSVRTID0gKGBTQ1IxX1hMRU4tKFNDUjFfQ1NSX01UVkVDX0JBU0VfWkVST19CSVRTK1NDUjFfTVRWRUNfQkFTRV9XUl9CSVRTKSk7Ci0KLWBkZWZpbmUgU0NSMV9NVFZBTF9JTExFR0FMX0lOU1RSX0VOCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRXhjZXB0aW9uIGFuZCBJUlEgY29kZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotcGFyYW1ldGVyIGludCB1bnNpZ25lZCBTQ1IxX0VYQ19DT0RFX1dJRFRIX0UgICAgPSA0OwotCi0vLyBFeGNlcHRpb25zCi10eXBlZGVmIGVudW0gbG9naWMgW1NDUjFfRVhDX0NPREVfV0lEVEhfRS0xOjBdIHsKLSAgICBTQ1IxX0VYQ19DT0RFX0lOU1RSX01JU0FMSUdOICAgICAgICA9IDQnZDAsICAgICAvLyBmcm9tIEVYVQotICAgIFNDUjFfRVhDX0NPREVfSU5TVFJfQUNDRVNTX0ZBVUxUICAgID0gNCdkMSwgICAgIC8vIGZyb20gSUZVCi0gICAgU0NSMV9FWENfQ09ERV9JTExFR0FMX0lOU1RSICAgICAgICAgPSA0J2QyLCAgICAgLy8gZnJvbSBJRFUgb3IgQ1NSCi0gICAgU0NSMV9FWENfQ09ERV9CUkVBS1BPSU5UICAgICAgICAgICAgPSA0J2QzLCAgICAgLy8gZnJvbSBJRFUgb3IgQlJLTQotICAgIFNDUjFfRVhDX0NPREVfTERfQUREUl9NSVNBTElHTiAgICAgID0gNCdkNCwgICAgIC8vIGZyb20gTFNVCi0gICAgU0NSMV9FWENfQ09ERV9MRF9BQ0NFU1NfRkFVTFQgICAgICAgPSA0J2Q1LCAgICAgLy8gZnJvbSBMU1UKLSAgICBTQ1IxX0VYQ19DT0RFX1NUX0FERFJfTUlTQUxJR04gICAgICA9IDQnZDYsICAgICAvLyBmcm9tIExTVQotICAgIFNDUjFfRVhDX0NPREVfU1RfQUNDRVNTX0ZBVUxUICAgICAgID0gNCdkNywgICAgIC8vIGZyb20gTFNVCi0gICAgU0NSMV9FWENfQ09ERV9FQ0FMTF9NICAgICAgICAgICAgICAgPSA0J2QxMSAgICAgLy8gZnJvbSBJRFUKLX0gdHlwZV9zY3IxX2V4Y19jb2RlX2U7Ci0KLS8vIElSUXMsIHJlc2V0Ci1wYXJhbWV0ZXIgYml0IFtTQ1IxX0VYQ19DT0RFX1dJRFRIX0UtMTowXSBTQ1IxX0VYQ19DT0RFX0lSUV9NX1NPRlRXQVJFICAgICAgPSA0J2QzOwotcGFyYW1ldGVyIGJpdCBbU0NSMV9FWENfQ09ERV9XSURUSF9FLTE6MF0gU0NSMV9FWENfQ09ERV9JUlFfTV9USU1FUiAgICAgICAgID0gNCdkNzsKLXBhcmFtZXRlciBiaXQgW1NDUjFfRVhDX0NPREVfV0lEVEhfRS0xOjBdIFNDUjFfRVhDX0NPREVfSVJRX01fRVhURVJOQUwgICAgICA9IDQnZDExOwotcGFyYW1ldGVyIGJpdCBbU0NSMV9FWENfQ09ERV9XSURUSF9FLTE6MF0gU0NSMV9FWENfQ09ERV9SRVNFVCAgICAgICAgICAgICAgID0gNCdkMDsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBPcGVyYW5kIHdpZHRoIGZvciBCUktNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXR5cGVkZWYgZW51bSBsb2dpYyBbMTowXSB7Ci0gICAgU0NSMV9PUF9XSURUSF9CWVRFICA9IDInYjAwLAotICAgIFNDUjFfT1BfV0lEVEhfSEFMRiAgPSAyJ2IwMSwKLSAgICBTQ1IxX09QX1dJRFRIX1dPUkQgID0gMidiMTAKLWBpZmRlZiBTQ1IxX1hQUk9QX0VOCi0gICAgLAotICAgIFNDUjFfT1BfV0lEVEhfRVJST1IgPSAneAotYGVuZGlmIC8vIFNDUjFfWFBST1BfRU4KLX0gdHlwZV9zY3IxX29wX3dpZHRoX2U7Ci0KLWBlbmRpZiAvL1NDUjFfQVJDSF9UWVBFU19TVkgKLQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2luY2x1ZGVzL3NjcjFfY3NyLnN2aCBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX2Nzci5zdmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5ZWUzM2EuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2luY2x1ZGVzL3NjcjFfY3NyLnN2aAorKysgL2Rldi9udWxsCkBAIC0xLDIxMiArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IFN5bnRhY29yZSBMTEMgqSAyMDE2LTIwMjEKLS8vIAotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKLS8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBTeW50YWNvcmUgTExDCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vIEBmaWxlICAgICAgIDxzY3IxX2Nzci5zdmg+Ci0vLy8gQGJyaWVmICAgICAgQ1NSIG1hcHBpbmcvZGVzY3JpcHRpb24gZmlsZQotLy8vCi0KLWBpZm5kZWYgU0NSMV9DU1JfU1ZICi1gZGVmaW5lIFNDUjFfQ1NSX1NWSAotCi1gaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKLWBpbmNsdWRlICJzY3IxX2FyY2hfdHlwZXMuc3ZoIgotYGluY2x1ZGUgInNjcjFfaXBpYy5zdmgiCi0KLWBpZmRlZiBTQ1IxX1JWRV9FWFQKLWBkZWZpbmUgU0NSMV9DU1JfUkVEVUNFRF9DTlQKLWBlbmRpZiAvLyBTQ1IxX1JWRV9FWFQKLQotYGlmZGVmIFNDUjFfQ1NSX1JFRFVDRURfQ05UCi1gdW5kZWYgU0NSMV9NQ09VTlRFTl9FTgotYGVuZGlmIC8vIFNDUjFfQ1NSX1JFRFVDRURfQ05UCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQ1NSIGFkZHJlc3NlcyAoc3RhbmRhcmQpCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gTWFjaGluZSBJbmZvcm1hdGlvbiBSZWdpc3RlcnMgKHJlYWQtb25seSkKLXBhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX01WRU5ET1JJRCAgICAgPSAnaEYxMTsKLXBhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX01BUkNISUQgICAgICAgPSAnaEYxMjsKLXBhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX01JTVBJRCAgICAgICAgPSAnaEYxMzsKLXBhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX01IQVJUSUQgICAgICAgPSAnaEYxNDsKLQotLy8gTWFjaGluZSBUcmFwIFNldHVwIChyZWFkLXdyaXRlKQotcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfTVNUQVRVUyAgICAgICA9ICdoMzAwOwotcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfTUlTQSAgICAgICAgICA9ICdoMzAxOwotcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfTUlFICAgICAgICAgICA9ICdoMzA0OwotcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfTVRWRUMgICAgICAgICA9ICdoMzA1OwotCi0vLyBNYWNoaW5lIFRyYXAgSGFuZGxpbmcgKHJlYWQtd3JpdGUpCi1wYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9DU1JfQUREUl9NU0NSQVRDSCAgICAgID0gJ2gzNDA7Ci1wYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9DU1JfQUREUl9NRVBDICAgICAgICAgID0gJ2gzNDE7Ci1wYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9DU1JfQUREUl9NQ0FVU0UgICAgICAgID0gJ2gzNDI7Ci1wYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9DU1JfQUREUl9NVFZBTCAgICAgICAgID0gJ2gzNDM7Ci1wYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9DU1JfQUREUl9NSVAgICAgICAgICAgID0gJ2gzNDQ7Ci0KLS8vIE1hY2hpbmUgQ291bnRlcnMvVGltZXJzIChyZWFkLXdyaXRlKQotYGlmbmRlZiBTQ1IxX0NTUl9SRURVQ0VEX0NOVAotcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfTUNZQ0xFICAgICAgICA9ICdoQjAwOwotcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfTUlOU1RSRVQgICAgICA9ICdoQjAyOwotcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfTUNZQ0xFSCAgICAgICA9ICdoQjgwOwotcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfTUlOU1RSRVRIICAgICA9ICdoQjgyOwotYGVuZGlmIC8vIFNDUjFfQ1NSX1JFRFVDRURfQ05UCi0KLS8vIFNoYWRvdyBDb3VudGVycy9UaW1lcnMgKHJlYWQtb25seSkKLXBhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX1RJTUUgICAgICAgICAgPSAnaEMwMTsKLWBpZm5kZWYgU0NSMV9DU1JfUkVEVUNFRF9DTlQKLXBhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX0NZQ0xFICAgICAgICAgPSAnaEMwMDsKLXBhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX0lOU1RSRVQgICAgICAgPSAnaEMwMjsKLXBhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX1RJTUVIICAgICAgICAgPSAnaEM4MTsKLXBhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX0NZQ0xFSCAgICAgICAgPSAnaEM4MDsKLXBhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX0lOU1RSRVRIICAgICAgPSAnaEM4MjsKLWBlbmRpZiAvLyBTQ1IxX0NTUl9SRURVQ0VEX0NOVAotCi1gaWZkZWYgU0NSMV9EQkdfRU4KLS8vcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfREJHQ19TQ1JBVENIICA9ICdoN0M4OwotcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfSERVX01CQVNFICAgID0gJ2g3QjA7Ci1wYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9DU1JfQUREUl9IRFVfTVNQQU4gICAgPSAnaDAwNDsgICAgLy8gbXVzdCBiZSBwb3dlciBvZiAyCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDU1IgYWRkcmVzc2VzIChub24tc3RhbmRhcmQpCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWBpZmRlZiBTQ1IxX01DT1VOVEVOX0VOCi1wYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9DU1JfQUREUl9NQ09VTlRFTiAgICAgID0gJ2g3RTA7Ci1gZW5kaWYgLy8gU0NSMV9NQ09VTlRFTl9FTgotCi1gaWZkZWYgU0NSMV9URFVfRU4KLXBhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX1REVV9NQkFTRSAgICA9ICdoN0EwOwotcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfVERVX01TUEFOICAgID0gJ2gwMDg7ICAgIC8vIG11c3QgYmUgcG93ZXIgb2YgMgotYGVuZGlmIC8vIFNDUjFfVERVX0VOCi0KLWBpZmRlZiBTQ1IxX0lQSUNfRU4KLXBhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX0lQSUNfQkFTRSAgICAgPSAnaEJGMDsKLXBhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX0lQSUNfQ0lTViAgICAgPSAoU0NSMV9DU1JfQUREUl9JUElDX0JBU0UgKyBTQ1IxX0lQSUNfQ0lTViApOwotcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfSVBJQ19DSUNTUiAgICA9IChTQ1IxX0NTUl9BRERSX0lQSUNfQkFTRSArIFNDUjFfSVBJQ19DSUNTUik7Ci1wYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9DU1JfQUREUl9JUElDX0lQUiAgICAgID0gKFNDUjFfQ1NSX0FERFJfSVBJQ19CQVNFICsgU0NSMV9JUElDX0lQUiAgKTsKLXBhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX0lQSUNfSVNWUiAgICAgPSAoU0NSMV9DU1JfQUREUl9JUElDX0JBU0UgKyBTQ1IxX0lQSUNfSVNWUiApOwotcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfSVBJQ19FT0kgICAgICA9IChTQ1IxX0NTUl9BRERSX0lQSUNfQkFTRSArIFNDUjFfSVBJQ19FT0kgICk7Ci1wYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9DU1JfQUREUl9JUElDX1NPSSAgICAgID0gKFNDUjFfQ1NSX0FERFJfSVBJQ19CQVNFICsgU0NSMV9JUElDX1NPSSAgKTsKLXBhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX0lQSUNfSURYICAgICAgPSAoU0NSMV9DU1JfQUREUl9JUElDX0JBU0UgKyBTQ1IxX0lQSUNfSURYICApOwotcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfSVBJQ19JQ1NSICAgICA9IChTQ1IxX0NTUl9BRERSX0lQSUNfQkFTRSArIFNDUjFfSVBJQ19JQ1NSICk7Ci1gZW5kaWYgLy8gU0NSMV9JUElDX0VOCi0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDU1IgZGVmaW5pdGlvbnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBHZW5lcmFsCi1wYXJhbWV0ZXIgYml0IFtgU0NSMV9YTEVOLTE6MF0gU0NSMV9SU1RfVkVDVE9SICAgICAgPSBTQ1IxX0FSQ0hfUlNUX1ZFQ1RPUjsKLQotLy8gUmVzZXQgdmFsdWVzIFRCRAotcGFyYW1ldGVyIGJpdCBTQ1IxX0NTUl9NSUVfTVNJRV9SU1RfVkFMICAgICAgICAgICAgID0gMSdiMDsKLXBhcmFtZXRlciBiaXQgU0NSMV9DU1JfTUlFX01USUVfUlNUX1ZBTCAgICAgICAgICAgICA9IDEnYjA7Ci1wYXJhbWV0ZXIgYml0IFNDUjFfQ1NSX01JRV9NRUlFX1JTVF9WQUwgICAgICAgICAgICAgPSAxJ2IwOwotCi1wYXJhbWV0ZXIgYml0IFNDUjFfQ1NSX01JUF9NU0lQX1JTVF9WQUwgICAgICAgICAgICAgPSAxJ2IwOwotcGFyYW1ldGVyIGJpdCBTQ1IxX0NTUl9NSVBfTVRJUF9SU1RfVkFMICAgICAgICAgICAgID0gMSdiMDsKLXBhcmFtZXRlciBiaXQgU0NSMV9DU1JfTUlQX01FSVBfUlNUX1ZBTCAgICAgICAgICAgICA9IDEnYjA7Ci0KLXBhcmFtZXRlciBiaXQgU0NSMV9DU1JfTVNUQVRVU19NSUVfUlNUX1ZBTCAgICAgICAgICA9IDEnYjA7Ci1wYXJhbWV0ZXIgYml0IFNDUjFfQ1NSX01TVEFUVVNfTVBJRV9SU1RfVkFMICAgICAgICAgPSAxJ2IxOwotCi0vLyBNSVNBCi1gZGVmaW5lIFNDUjFfUlZDX0VOQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFNDUjFfWExFTidoMDAwNAotYGRlZmluZSBTQ1IxX1JWRV9FTkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBTQ1IxX1hMRU4naDAwMTAKLWBkZWZpbmUgU0NSMV9SVklfRU5DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgU0NSMV9YTEVOJ2gwMTAwCi1gZGVmaW5lIFNDUjFfUlZNX0VOQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFNDUjFfWExFTidoMTAwMAotcGFyYW1ldGVyIGJpdCBbMTowXSAgICAgICAgICAgICBTQ1IxX01JU0FfTVhMXzMyICAgID0gMidkMTsKLXBhcmFtZXRlciBiaXQgW2BTQ1IxX1hMRU4tMTowXSAgU0NSMV9DU1JfTUlTQSAgICAgICA9IChTQ1IxX01JU0FfTVhMXzMyIDw8IChgU0NSMV9YTEVOLTIpKQotYGlmbmRlZiBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBTQ1IxX1JWSV9FTkMKLWBlbHNlIC8vIFNDUjFfUlZFX0VYVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYFNDUjFfUlZFX0VOQwotYGVuZGlmIC8vIFNDUjFfUlZFX0VYVAotYGlmZGVmIFNDUjFfUlZDX0VYVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYFNDUjFfUlZDX0VOQwotYGVuZGlmIC8vIFNDUjFfUlZDX0VYVAotYGlmZGVmIFNDUjFfUlZNX0VYVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYFNDUjFfUlZNX0VOQwotYGVuZGlmIC8vIFNDUjFfUlZNX0VYVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKLQotLy8gTVZFTkRPUklECi1wYXJhbWV0ZXIgYml0IFtgU0NSMV9YTEVOLTE6MF0gU0NSMV9DU1JfTVZFTkRPUklEICAgPSBgU0NSMV9NVkVORE9SSUQ7Ci0KLS8vIE1BUkNISUQKLXBhcmFtZXRlciBiaXQgW2BTQ1IxX1hMRU4tMTowXSBTQ1IxX0NTUl9NQVJDSElEICAgICA9IGBTQ1IxX1hMRU4nZDg7Ci0KLS8vIE1JTVBJRAotcGFyYW1ldGVyIGJpdCBbYFNDUjFfWExFTi0xOjBdIFNDUjFfQ1NSX01JTVBJRCAgICAgID0gYFNDUjFfTUlNUElEOwotCi0vLyBNU1RBVFVTCi1wYXJhbWV0ZXIgYml0IFsxOjBdIFNDUjFfQ1NSX01TVEFUVVNfTVBQICAgICAgICAgICAgPSAyJ2IxMTsKLXBhcmFtZXRlciBpbnQgdW5zaWduZWQgU0NSMV9DU1JfTVNUQVRVU19NSUVfT0ZGU0VUICA9IDM7Ci1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkIFNDUjFfQ1NSX01TVEFUVVNfTVBJRV9PRkZTRVQgPSA3OwotcGFyYW1ldGVyIGludCB1bnNpZ25lZCBTQ1IxX0NTUl9NU1RBVFVTX01QUF9PRkZTRVQgID0gMTE7Ci0KLS8vIE1UVkVDCi0vLyBiaXRzIFs1OjBdIGFyZSBhbHdheXMgemVybwotcGFyYW1ldGVyIGJpdCBbYFNDUjFfWExFTi0xOlNDUjFfQ1NSX01UVkVDX0JBU0VfWkVST19CSVRTXSBTQ1IxX0NTUl9NVFZFQ19CQVNFX1JTVF9WQUwgID0gU0NSMV9DU1JfTVRWRUNfQkFTRV9XUl9SU1RfVkFMOwotCi1wYXJhbWV0ZXIgYml0IFNDUjFfQ1NSX01UVkVDX01PREVfRElSRUNUICAgICAgICAgICAgPSAxJ2IwOwotYGlmZGVmIFNDUjFfTVRWRUNfTU9ERV9FTgotcGFyYW1ldGVyIGJpdCBTQ1IxX0NTUl9NVFZFQ19NT0RFX1ZFQ1RPUkVEICAgICAgICAgID0gMSdiMTsKLWBlbmRpZiAvLyBTQ1IxX01UVkVDX01PREVfRU4KLQotLy8gTUlFLCBNSVAKLXBhcmFtZXRlciBpbnQgdW5zaWduZWQgU0NSMV9DU1JfTUlFX01TSUVfT0ZGU0VUICAgICA9IDM7Ci1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkIFNDUjFfQ1NSX01JRV9NVElFX09GRlNFVCAgICAgPSA3OwotcGFyYW1ldGVyIGludCB1bnNpZ25lZCBTQ1IxX0NTUl9NSUVfTUVJRV9PRkZTRVQgICAgID0gMTE7Ci0KLWBpZmRlZiBTQ1IxX01DT1VOVEVOX0VOCi0vLyBNQ09VTlRFTgotcGFyYW1ldGVyIGludCB1bnNpZ25lZCBTQ1IxX0NTUl9NQ09VTlRFTl9DWV9PRkZTRVQgID0gMDsKLXBhcmFtZXRlciBpbnQgdW5zaWduZWQgU0NSMV9DU1JfTUNPVU5URU5fSVJfT0ZGU0VUICA9IDI7Ci1gZW5kaWYgLy8gU0NSMV9NQ09VTlRFTl9FTgotCi0vLyBNQ0FVU0UKLXR5cGVkZWYgbG9naWMgW2BTQ1IxX1hMRU4tMjowXSAgICAgIHR5cGVfc2NyMV9jc3JfbWNhdXNlX2VjX3Y7Ci0KLS8vIE1DWUNMRSwgTUlOU1RSRVQKLWBpZmRlZiBTQ1IxX0NTUl9SRURVQ0VEX0NOVAotcGFyYW1ldGVyIGludCB1bnNpZ25lZCBTQ1IxX0NTUl9DT1VOVEVSU19XSURUSCAgICAgID0gMzI7Ci1gZWxzZSAvLyB+U0NSMV9DU1JfUkVEVUNFRF9DTlQKLXBhcmFtZXRlciBpbnQgdW5zaWduZWQgU0NSMV9DU1JfQ09VTlRFUlNfV0lEVEggICAgICA9IDY0OwotYGVuZGlmIC8vIH5TQ1IxX0NTUl9SRURVQ0VEX0NOVAotCi0vLyBIUE0KLXBhcmFtZXRlciBiaXQgWzY6MF0gU0NSMV9DU1JfQUREUl9IUE1DT1VOVEVSX01BU0sgICA9IDcnYjExMDAwMDA7Ci1wYXJhbWV0ZXIgYml0IFs2OjBdIFNDUjFfQ1NSX0FERFJfSFBNQ09VTlRFUkhfTUFTSyAgPSA3J2IxMTAwMTAwOwotcGFyYW1ldGVyIGJpdCBbNjowXSBTQ1IxX0NTUl9BRERSX01IUE1DT1VOVEVSX01BU0sgID0gNydiMTAxMTAwMDsKLXBhcmFtZXRlciBiaXQgWzY6MF0gU0NSMV9DU1JfQUREUl9NSFBNQ09VTlRFUkhfTUFTSyA9IDcnYjEwMTExMDA7Ci1wYXJhbWV0ZXIgYml0IFs2OjBdIFNDUjFfQ1NSX0FERFJfTUhQTUVWRU5UX01BU0sgICAgPSA3J2IwMDExMDAxOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFR5cGVzIGRlY2xhcmF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXR5cGVkZWYgZW51bSBsb2dpYyB7Ci0gICAgU0NSMV9DU1JfUkVTUF9PSywKLSAgICBTQ1IxX0NTUl9SRVNQX0VSCi1gaWZkZWYgU0NSMV9YUFJPUF9FTgotICAgICwKLSAgICBTQ1IxX0NTUl9SRVNQX0VSUk9SID0gJ3gKLWBlbmRpZiAvLyBTQ1IxX1hQUk9QX0VOCi19IHR5cGVfc2NyMV9jc3JfcmVzcF9lOwotCi1gZW5kaWYgLy8gU0NSMV9DU1JfU1ZICmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9kbS5zdmggYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9kbS5zdmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjOTg2ODQuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2luY2x1ZGVzL3NjcjFfZG0uc3ZoCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjEKLS8vIAotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKLS8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBTeW50YWNvcmUgTExDCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vIEBmaWxlICAgICAgIDxzY3IxX2RtLnN2aD4KLS8vLyBAYnJpZWYgICAgICBEZWJ1ZyBNb2R1bGUgaGVhZGVyIGZpbGUKLS8vLwotCi1gaWZuZGVmIFNDUjFfSU5DTFVERV9ETV9ERUZTCi1gZGVmaW5lIFNDUjFfSU5DTFVERV9ETV9ERUZTCi0KLWBpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgotYGluY2x1ZGUgInNjcjFfaGR1LnN2aCIKLWBpbmNsdWRlICJzY3IxX2Nzci5zdmgiCi0KLXBhcmFtZXRlciBTQ1IxX0RCR19ETUlfQUREUl9XSURUSCAgICAgICAgICAgICAgICAgID0gNidkNzsKLXBhcmFtZXRlciBTQ1IxX0RCR19ETUlfREFUQV9XSURUSCAgICAgICAgICAgICAgICAgID0gNidkMzI7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfRE1JX09QX1dJRFRIICAgICAgICAgICAgICAgICAgICA9IDInZDI7Ci0KLXBhcmFtZXRlciBTQ1IxX0RCR19ETUlfQ0hfSURfV0lEVEggICAgICAgICAgICAgICAgID0gMidkMjsKLXBhcmFtZXRlciBTQ1IxX0RCR19ETUlfRFJfRFRNQ1NfV0lEVEggICAgICAgICAgICAgID0gNidkMzI7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfRE1JX0RSX0RNSV9BQ0NFU1NfV0lEVEggICAgICAgICA9IFNDUjFfREJHX0RNSV9PUF9XSURUSCArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfREJHX0RNSV9EQVRBX1dJRFRIICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9EQkdfRE1JX0FERFJfV0lEVEg7Ci0KLS8vIERlYnVnIE1vZHVsZSBhZGRyZXNzZXMKLXBhcmFtZXRlciBTQ1IxX0RCR19EQVRBMCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gNydoNDsKLXBhcmFtZXRlciBTQ1IxX0RCR19EQVRBMSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gNydoNTsKLXBhcmFtZXRlciBTQ1IxX0RCR19ETUNPTlRST0wgICAgICAgICAgICAgICAgICAgICAgID0gNydoMTA7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfRE1TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICA9IDcnaDExOwotcGFyYW1ldGVyIFNDUjFfREJHX0hBUlRJTkZPICAgICAgICAgICAgICAgICAgICAgICAgPSA3J2gxMjsKLXBhcmFtZXRlciBTQ1IxX0RCR19BQlNUUkFDVENTICAgICAgICAgICAgICAgICAgICAgID0gNydoMTY7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfQ09NTUFORCAgICAgICAgICAgICAgICAgICAgICAgICA9IDcnaDE3OwotcGFyYW1ldGVyIFNDUjFfREJHX0FCU1RSQUNUQVVUTyAgICAgICAgICAgICAgICAgICAgPSA3J2gxODsKLXBhcmFtZXRlciBTQ1IxX0RCR19QUk9HQlVGMCAgICAgICAgICAgICAgICAgICAgICAgID0gNydoMjA7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfUFJPR0JVRjEgICAgICAgICAgICAgICAgICAgICAgICA9IDcnaDIxOwotcGFyYW1ldGVyIFNDUjFfREJHX1BST0dCVUYyICAgICAgICAgICAgICAgICAgICAgICAgPSA3J2gyMjsKLXBhcmFtZXRlciBTQ1IxX0RCR19QUk9HQlVGMyAgICAgICAgICAgICAgICAgICAgICAgID0gNydoMjM7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfUFJPR0JVRjQgICAgICAgICAgICAgICAgICAgICAgICA9IDcnaDI0OwotcGFyYW1ldGVyIFNDUjFfREJHX1BST0dCVUY1ICAgICAgICAgICAgICAgICAgICAgICAgPSA3J2gyNTsKLXBhcmFtZXRlciBTQ1IxX0RCR19IQUxUU1VNMCAgICAgICAgICAgICAgICAgICAgICAgID0gNydoNDA7Ci0KLS8vIERNQ09OVFJPTAotcGFyYW1ldGVyIFNDUjFfREJHX0RNQ09OVFJPTF9IQUxUUkVRICAgICAgICAgICAgICAgPSA1J2QzMTsKLXBhcmFtZXRlciBTQ1IxX0RCR19ETUNPTlRST0xfUkVTVU1FUkVRICAgICAgICAgICAgID0gNSdkMzA7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfRE1DT05UUk9MX0hBUlRSRVNFVCAgICAgICAgICAgICA9IDUnZDI5OwotcGFyYW1ldGVyIFNDUjFfREJHX0RNQ09OVFJPTF9BQ0tIQVZFUkVTRVQgICAgICAgICAgPSA1J2QyODsKLXBhcmFtZXRlciBTQ1IxX0RCR19ETUNPTlRST0xfUkVTRVJWRURCICAgICAgICAgICAgID0gNSdkMjc7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfRE1DT05UUk9MX0hBU0VMICAgICAgICAgICAgICAgICA9IDUnZDI2OwotcGFyYW1ldGVyIFNDUjFfREJHX0RNQ09OVFJPTF9IQVJUU0VMTE9fSEkgICAgICAgICAgPSA1J2QyNTsKLXBhcmFtZXRlciBTQ1IxX0RCR19ETUNPTlRST0xfSEFSVFNFTExPX0xPICAgICAgICAgID0gNSdkMTY7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfRE1DT05UUk9MX0hBUlRTRUxISV9ISSAgICAgICAgICA9IDUnZDE1OwotcGFyYW1ldGVyIFNDUjFfREJHX0RNQ09OVFJPTF9IQVJUU0VMSElfTE8gICAgICAgICAgPSA1J2Q2OwotcGFyYW1ldGVyIFNDUjFfREJHX0RNQ09OVFJPTF9SRVNFUlZFREFfSEkgICAgICAgICAgPSA1J2Q1OwotcGFyYW1ldGVyIFNDUjFfREJHX0RNQ09OVFJPTF9SRVNFUlZFREFfTE8gICAgICAgICAgPSA1J2QyOwotcGFyYW1ldGVyIFNDUjFfREJHX0RNQ09OVFJPTF9ORE1SRVNFVCAgICAgICAgICAgICAgPSA1J2QxOwotcGFyYW1ldGVyIFNDUjFfREJHX0RNQ09OVFJPTF9ETUFDVElWRSAgICAgICAgICAgICAgPSA1J2QwOwotCi0vLyBETVNUQVRVUwotcGFyYW1ldGVyIFNDUjFfREJHX0RNU1RBVFVTX1JFU0VSVkVEQ19ISSAgICAgICAgICAgPSA1J2QzMTsKLXBhcmFtZXRlciBTQ1IxX0RCR19ETVNUQVRVU19SRVNFUlZFRENfTE8gICAgICAgICAgID0gNSdkMjM7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfRE1TVEFUVVNfSU1QRUJSRUFLICAgICAgICAgICAgICA9IDUnZDIyOwotcGFyYW1ldGVyIFNDUjFfREJHX0RNU1RBVFVTX1JFU0VSVkVEQl9ISSAgICAgICAgICAgPSA1J2QyMTsKLXBhcmFtZXRlciBTQ1IxX0RCR19ETVNUQVRVU19SRVNFUlZFREJfTE8gICAgICAgICAgID0gNSdkMjA7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfRE1TVEFUVVNfQUxMSEFWRVJFU0VUICAgICAgICAgICA9IDUnZDE5OwotcGFyYW1ldGVyIFNDUjFfREJHX0RNU1RBVFVTX0FOWUhBVkVSRVNFVCAgICAgICAgICAgPSA1J2QxODsKLXBhcmFtZXRlciBTQ1IxX0RCR19ETVNUQVRVU19BTExSRVNVTUVBQ0sgICAgICAgICAgID0gNSdkMTc7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfRE1TVEFUVVNfQU5ZUkVTVU1FQUNLICAgICAgICAgICA9IDUnZDE2OwotcGFyYW1ldGVyIFNDUjFfREJHX0RNU1RBVFVTX0FMTE5PTkVYSVNURU5UICAgICAgICAgPSA1J2QxNTsKLXBhcmFtZXRlciBTQ1IxX0RCR19ETVNUQVRVU19BTllOT05FWElTVEVOVCAgICAgICAgID0gNSdkMTQ7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfRE1TVEFUVVNfQUxMVU5BVkFJTCAgICAgICAgICAgICA9IDUnZDEzOwotcGFyYW1ldGVyIFNDUjFfREJHX0RNU1RBVFVTX0FOWVVOQVZBSUwgICAgICAgICAgICAgPSA1J2QxMjsKLXBhcmFtZXRlciBTQ1IxX0RCR19ETVNUQVRVU19BTExSVU5OSU5HICAgICAgICAgICAgID0gNSdkMTE7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfRE1TVEFUVVNfQU5ZUlVOTklORyAgICAgICAgICAgICA9IDUnZDEwOwotcGFyYW1ldGVyIFNDUjFfREJHX0RNU1RBVFVTX0FMTEhBTFRFRCAgICAgICAgICAgICAgPSA1J2Q5OwotcGFyYW1ldGVyIFNDUjFfREJHX0RNU1RBVFVTX0FOWUhBTFRFRCAgICAgICAgICAgICAgPSA1J2Q4OwotcGFyYW1ldGVyIFNDUjFfREJHX0RNU1RBVFVTX0FVVEhFTlRJQ0FURUQgICAgICAgICAgPSA1J2Q3OwotcGFyYW1ldGVyIFNDUjFfREJHX0RNU1RBVFVTX0FVVEhCVVNZICAgICAgICAgICAgICAgPSA1J2Q2OwotcGFyYW1ldGVyIFNDUjFfREJHX0RNU1RBVFVTX1JFU0VSVkVEQSAgICAgICAgICAgICAgPSA1J2Q1OwotcGFyYW1ldGVyIFNDUjFfREJHX0RNU1RBVFVTX0RFVlRSRUVWQUxJRCAgICAgICAgICAgPSA1J2Q0OwotcGFyYW1ldGVyIFNDUjFfREJHX0RNU1RBVFVTX1ZFUlNJT05fSEkgICAgICAgICAgICAgPSA1J2QzOwotcGFyYW1ldGVyIFNDUjFfREJHX0RNU1RBVFVTX1ZFUlNJT05fTE8gICAgICAgICAgICAgPSA1J2QwOwotCi0vLyBDT01NQU5EUwotcGFyYW1ldGVyIFNDUjFfREJHX0NPTU1BTkRfVFlQRV9ISSAgICAgICAgICAgICAgICAgPSA1J2QzMTsKLXBhcmFtZXRlciBTQ1IxX0RCR19DT01NQU5EX1RZUEVfTE8gICAgICAgICAgICAgICAgID0gNSdkMjQ7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfQ09NTUFORF9UWVBFX1dEVEggICAgICAgICAgICAgICA9IFNDUjFfREJHX0NPTU1BTkRfVFlQRV9ISQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBTQ1IxX0RCR19DT01NQU5EX1RZUEVfTE87Ci0KLXBhcmFtZXRlciBTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU1JFR19SRVNFUlZFREIgICAgID0gNSdkMjM7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NSRUdfU0laRV9ISSAgICAgICA9IDUnZDIyOwotcGFyYW1ldGVyIFNDUjFfREJHX0NPTU1BTkRfQUNDRVNTUkVHX1NJWkVfTE8gICAgICAgPSA1J2QyMDsKLXBhcmFtZXRlciBTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU1JFR19TSVpFX1dEVEggICAgID0gU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NSRUdfU0laRV9ISQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU1JFR19TSVpFX0xPOwotcGFyYW1ldGVyIFNDUjFfREJHX0NPTU1BTkRfQUNDRVNTUkVHX1JFU0VSVkVEQSAgICAgPSA1J2QxOTsKLXBhcmFtZXRlciBTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU1JFR19QT1NURVhFQyAgICAgID0gNSdkMTg7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NSRUdfVFJBTlNGRVIgICAgICA9IDUnZDE3OwotcGFyYW1ldGVyIFNDUjFfREJHX0NPTU1BTkRfQUNDRVNTUkVHX1dSSVRFICAgICAgICAgPSA1J2QxNjsKLXBhcmFtZXRlciBTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU1JFR19SRUdOT19ISSAgICAgID0gNSdkMTU7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NSRUdfUkVHTk9fTE8gICAgICA9IDUnZDA7Ci0KLXBhcmFtZXRlciBTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU01FTV9BQU1WSVJUVUFMICAgID0gNSdkMjM7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NNRU1fQUFNU0laRV9ISSAgICA9IDUnZDIyOwotcGFyYW1ldGVyIFNDUjFfREJHX0NPTU1BTkRfQUNDRVNTTUVNX0FBTVNJWkVfTE8gICAgPSA1J2QyMDsKLXBhcmFtZXRlciBTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU01FTV9BQU1QT1NUSU5DICAgID0gNSdkMTk7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NNRU1fUkVTRVJWRURCX0hJICA9IDUnZDE4OwotcGFyYW1ldGVyIFNDUjFfREJHX0NPTU1BTkRfQUNDRVNTTUVNX1JFU0VSVkVEQl9MTyAgPSA1J2QxNzsKLXBhcmFtZXRlciBTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU01FTV9XUklURSAgICAgICAgID0gNSdkMTY7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NNRU1fUkVTRVJWRURBX0hJICA9IDUnZDEzOwotcGFyYW1ldGVyIFNDUjFfREJHX0NPTU1BTkRfQUNDRVNTTUVNX1JFU0VSVkVEQV9MTyAgPSA1J2QwOwotCi0vLyBBQlNUUkFDVENTCi1wYXJhbWV0ZXIgU0NSMV9EQkdfQUJTVFJBQ1RDU19SRVNFUlZFRERfSEkgICAgICAgICA9IDUnZDMxOwotcGFyYW1ldGVyIFNDUjFfREJHX0FCU1RSQUNUQ1NfUkVTRVJWRUREX0xPICAgICAgICAgPSA1J2QyOTsKLXBhcmFtZXRlciBTQ1IxX0RCR19BQlNUUkFDVENTX1BST0dCVUZTSVpFX0hJICAgICAgID0gNSdkMjg7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfQUJTVFJBQ1RDU19QUk9HQlVGU0laRV9MTyAgICAgICA9IDUnZDI0OwotcGFyYW1ldGVyIFNDUjFfREJHX0FCU1RSQUNUQ1NfUkVTRVJWRURDX0hJICAgICAgICAgPSA1J2QyMzsKLXBhcmFtZXRlciBTQ1IxX0RCR19BQlNUUkFDVENTX1JFU0VSVkVEQ19MTyAgICAgICAgID0gNSdkMTM7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfQUJTVFJBQ1RDU19CVVNZICAgICAgICAgICAgICAgICA9IDUnZDEyOwotcGFyYW1ldGVyIFNDUjFfREJHX0FCU1RSQUNUQ1NfUkVTRVJWRURCICAgICAgICAgICAgPSA1J2QxMTsKLXBhcmFtZXRlciBTQ1IxX0RCR19BQlNUUkFDVENTX0NNREVSUl9ISSAgICAgICAgICAgID0gNSdkMTA7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfQUJTVFJBQ1RDU19DTURFUlJfTE8gICAgICAgICAgICA9IDUnZDg7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfQUJTVFJBQ1RDU19DTURFUlJfV0RUSCAgICAgICAgICA9IFNDUjFfREJHX0FCU1RSQUNUQ1NfQ01ERVJSX0hJCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFNDUjFfREJHX0FCU1RSQUNUQ1NfQ01ERVJSX0xPOwotcGFyYW1ldGVyIFNDUjFfREJHX0FCU1RSQUNUQ1NfUkVTRVJWRURBX0hJICAgICAgICAgPSA1J2Q3OwotcGFyYW1ldGVyIFNDUjFfREJHX0FCU1RSQUNUQ1NfUkVTRVJWRURBX0xPICAgICAgICAgPSA1J2Q0OwotcGFyYW1ldGVyIFNDUjFfREJHX0FCU1RSQUNUQ1NfREFUQUNPVU5UX0hJICAgICAgICAgPSA1J2QzOwotcGFyYW1ldGVyIFNDUjFfREJHX0FCU1RSQUNUQ1NfREFUQUNPVU5UX0xPICAgICAgICAgPSA1J2QwOwotCi0vLyBIQVJUSU5GTwotcGFyYW1ldGVyIFNDUjFfREJHX0hBUlRJTkZPX1JFU0VSVkVEQl9ISSAgICAgICAgICAgPSA1J2QzMTsKLXBhcmFtZXRlciBTQ1IxX0RCR19IQVJUSU5GT19SRVNFUlZFREJfTE8gICAgICAgICAgID0gNSdkMjQ7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfSEFSVElORk9fTlNDUkFUQ0hfSEkgICAgICAgICAgICA9IDUnZDIzOwotcGFyYW1ldGVyIFNDUjFfREJHX0hBUlRJTkZPX05TQ1JBVENIX0xPICAgICAgICAgICAgPSA1J2QyMDsKLXBhcmFtZXRlciBTQ1IxX0RCR19IQVJUSU5GT19SRVNFUlZFREFfSEkgICAgICAgICAgID0gNSdkMTk7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfSEFSVElORk9fUkVTRVJWRURBX0xPICAgICAgICAgICA9IDUnZDE3OwotcGFyYW1ldGVyIFNDUjFfREJHX0hBUlRJTkZPX0RBVEFBQ0NFU1MgICAgICAgICAgICAgPSA1J2QxNjsKLXBhcmFtZXRlciBTQ1IxX0RCR19IQVJUSU5GT19EQVRBU0laRV9ISSAgICAgICAgICAgID0gNSdkMTU7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfSEFSVElORk9fREFUQVNJWkVfTE8gICAgICAgICAgICA9IDUnZDEyOwotcGFyYW1ldGVyIFNDUjFfREJHX0hBUlRJTkZPX0RBVEFBRERSX0hJICAgICAgICAgICAgPSA1J2QxMTsKLXBhcmFtZXRlciBTQ1IxX0RCR19IQVJUSU5GT19EQVRBQUREUl9MTyAgICAgICAgICAgID0gNSdkMDsKLQotCi1gZW5kaWYgLy8gU0NSMV9JTkNMVURFX0RNX0RFRlMKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX2hkdS5zdmggYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9oZHUuc3ZoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTU3OTJjLi4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX2hkdS5zdmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzkgKzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiBTeW50YWNvcmUgTExDIKkgMjAxNi0yMDIxCi0vLyAKLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0vLyBTUERYLUZpbGVDb250cmlidXRvcjogU3ludGFjb3JlIExMQwotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLyBAZmlsZSAgICAgICA8c2NyMV9waXBlX2hkdS5zdmg+Ci0vLy8gQGJyaWVmICAgICAgSEFSVCBEZWJ1ZyBVbml0IGRlZmluaXRpb25zIGZpbGUKLS8vLwotCi1gaWZuZGVmIFNDUjFfSU5DTFVERV9IRFVfREVGUwotYGRlZmluZSBTQ1IxX0lOQ0xVREVfSERVX0RFRlMKLQotYGluY2x1ZGUgInNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgiCi1gaW5jbHVkZSAic2NyMV9jc3Iuc3ZoIgotCi1gaWZkZWYgU0NSMV9NTVVfRU4KLSBgZGVmaW5lIFNDUjFfSERVX0ZFQVRVUkVfTVBSVkVOCi1gZW5kaWYgLy8gU0NSMV9NTVVfRU4KLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIFBhcmFtZXRlcnMKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vL2xvY2FscGFyYW0gaW50IHVuc2lnbmVkIFNDUjFfSERVX0RFQlVHQ1NSX0JBU0VfQUREUiAgICAgID0gMTInaDdCMDsKLWxvY2FscGFyYW0gaW50IHVuc2lnbmVkIFNDUjFfSERVX0RFQlVHQ1NSX0FERFJfU1BBTiAgICAgID0gNDsgLy8gWU9TWVMgRklYCi1sb2NhbHBhcmFtIGludCB1bnNpZ25lZCBTQ1IxX0hEVV9ERUJVR0NTUl9BRERSX1dJRFRIICAgICA9ICRjbG9nMihTQ1IxX0hEVV9ERUJVR0NTUl9BRERSX1NQQU4pOwotbG9jYWxwYXJhbSBiaXQgWzM6MF0gICAgU0NSMV9IRFVfREVCVUdDU1JfRENTUl9YREVCVUdWRVIgPSA0J2g0OwotbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgU0NSMV9IRFVfUEJVRl9BRERSX1NQQU4gICAgICAgICAgPSA4OwotbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgU0NSMV9IRFVfUEJVRl9BRERSX1dJRFRIICAgICAgICAgPSAkY2xvZzIoU0NSMV9IRFVfUEJVRl9BRERSX1NQQU4pOwotbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgU0NSMV9IRFVfREFUQV9SRUdfV0lEVEggICAgICAgICAgPSAzMjsKLWxvY2FscGFyYW0gaW50IHVuc2lnbmVkIFNDUjFfSERVX0NPUkVfSU5TVFJfV0lEVEggICAgICAgID0gMzI7Ci0KLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIFR5cGVzCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0vLyBIQVJUIERlYnVnIFN0YXRlczoKLXR5cGVkZWYgZW51bSBsb2dpYyBbMTowXSB7Ci0gICAgU0NSMV9IRFVfREJHU1RBVEVfUkVTRVQgICAgICAgICA9IDInYjAwLAotICAgIFNDUjFfSERVX0RCR1NUQVRFX1JVTiAgICAgICAgICAgPSAyJ2IwMSwKLSAgICBTQ1IxX0hEVV9EQkdTVEFURV9ESEFMVEVEICAgICAgID0gMidiMTAsCi0gICAgU0NSMV9IRFVfREJHU1RBVEVfRFJVTiAgICAgICAgICA9IDInYjExCi1gaWZkZWYgU0NSMV9YUFJPUF9FTgotICAgICwKLSAgICBTQ1IxX0hEVV9EQkdTVEFURV9YWFggICAgICAgICAgID0gJ1gKLWBlbmRpZiAvLyBTQ1IxX1hQUk9QX0VOCi19IHR5cGVfc2NyMV9oZHVfZGJnc3RhdGVzX2U7Ci0KLXR5cGVkZWYgZW51bSBsb2dpYyBbMTowXSB7Ci0gICAgU0NSMV9IRFVfUEJVRlNUQVRFX0lETEUgICAgICAgICAgPSAyJ2IwMCwKLSAgICBTQ1IxX0hEVV9QQlVGU1RBVEVfRkVUQ0ggICAgICAgICA9IDInYjAxLAotICAgIFNDUjFfSERVX1BCVUZTVEFURV9FWENJTkpFQ1QgICAgID0gMidiMTAsCi0gICAgU0NSMV9IRFVfUEJVRlNUQVRFX1dBSVQ0RU5EICAgICAgPSAyJ2IxMQotYGlmZGVmIFNDUjFfWFBST1BfRU4KLSAgICAsCi0gICAgU0NSMV9IRFVfUEJVRlNUQVRFX1hYWCAgICAgICAgICAgPSAnWAotYGVuZGlmIC8vIFNDUjFfWFBST1BfRU4KLX0gdHlwZV9zY3IxX2hkdV9wYnVmc3RhdGVzX2U7Ci0KLXR5cGVkZWYgZW51bSBsb2dpYyB7Ci0gICAgU0NSMV9IRFVfSEFSVENNRF9SRVNVTUUgICAgICAgICA9IDEnYjAsCi0gICAgU0NSMV9IRFVfSEFSVENNRF9IQUxUICAgICAgICAgICA9IDEnYjEKLWBpZmRlZiBTQ1IxX1hQUk9QX0VOCi0gICAgLAotICAgIFNDUjFfSERVX0hBUlRDTURfWFhYICAgICAgICAgICAgPSAxJ2JYCi1gZW5kaWYgLy8gU0NSMV9YUFJPUF9FTgotfSB0eXBlX3NjcjFfaGR1X2hhcnRfY29tbWFuZF9lOwotCi10eXBlZGVmIGVudW0gbG9naWMgewotICAgIFNDUjFfSERVX0ZFVENIX1NSQ19OT1JNQUwgICAgICAgPSAxJ2IwLAotICAgIFNDUjFfSERVX0ZFVENIX1NSQ19QQlVGICAgICAgICAgPSAxJ2IxCi1gaWZkZWYgU0NSMV9YUFJPUF9FTgotICAgICwKLSAgICBTQ1IxX0hEVV9GRVRDSF9TUkNfWFhYICAgICAgICAgID0gMSdiWAotYGVuZGlmIC8vIFNDUjFfWFBST1BfRU4KLX0gdHlwZV9zY3IxX2hkdV9mZXRjaF9zcmNfZTsKLQotdHlwZWRlZiBzdHJ1Y3QgcGFja2VkIHsKLSAgICAvL2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0X247Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0OwotICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVicmVhazsKLSAgICB0eXBlX3NjcjFfaGR1X2RiZ3N0YXRlc19lICAgICAgICAgICBkYmdfc3RhdGU7Ci19IHR5cGVfc2NyMV9oZHVfaGFydHN0YXR1c19zOwotCi0vLyBEZWJ1ZyBNb2RlIFJlZGlyZWN0aW9uIGNvbnRyb2w6Ci10eXBlZGVmIHN0cnVjdCBwYWNrZWQgewotICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzdGVwOyAgICAgICAgICAvLyBTaW5nbGUgU3RlcAotICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVicmVhazsgICAgICAgICAvLyBSZWRpcmVjdGlvbiBhZnRlciBFQlJFQUsgZXhlY3V0aW9uCi19IHR5cGVfc2NyMV9oZHVfcmVkaXJlY3RfczsKLQotdHlwZWRlZiBzdHJ1Y3QgcGFja2VkIHsKLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcnFfZHNibDsKLSAgICB0eXBlX3NjcjFfaGR1X2ZldGNoX3NyY19lICAgICAgICAgICBmZXRjaF9zcmM7Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNfYWR2bXRfZHNibDsKLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBod2Jya3B0X2RzYmw7Ci0gICAgdHlwZV9zY3IxX2hkdV9yZWRpcmVjdF9zICAgICAgICAgICAgcmVkaXJlY3Q7Ci19IHR5cGVfc2NyMV9oZHVfcnVuY3RybF9zOwotCi0vLyBIQVJUIEhhbHQgU3RhdHVzOgotdHlwZWRlZiBlbnVtIGxvZ2ljIFsyOjBdIHsKLSAgICBTQ1IxX0hEVV9IQUxUQ0FVU0VfTk9ORSAgICAgICAgID0gMydiMDAwLAotICAgIFNDUjFfSERVX0hBTFRDQVVTRV9FQlJFQUsgICAgICAgPSAzJ2IwMDEsCi0gICAgU0NSMV9IRFVfSEFMVENBVVNFX1RNUkVRICAgICAgICA9IDMnYjAxMCwKLSAgICBTQ1IxX0hEVV9IQUxUQ0FVU0VfRE1SRVEgICAgICAgID0gMydiMDExLAotICAgIFNDUjFfSERVX0hBTFRDQVVTRV9TU1RFUCAgICAgICAgPSAzJ2IxMDAsCi0gICAgU0NSMV9IRFVfSEFMVENBVVNFX1JTVEVYSVQgICAgICA9IDMnYjEwMQotYGlmZGVmIFNDUjFfWFBST1BfRU4KLSAgICAsCi0gICAgU0NSMV9IRFVfSEFMVENBVVNFX1hYWCAgICAgICAgICA9ICdYCi1gZW5kaWYgLy8gU0NSMV9YUFJPUF9FTgotfSB0eXBlX3NjcjFfaGR1X2hhbHRjYXVzZV9lOwotCi10eXBlZGVmIHN0cnVjdCBwYWNrZWQgewotICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDsKLSAgICB0eXBlX3NjcjFfaGR1X2hhbHRjYXVzZV9lICAgICAgICAgICBjYXVzZTsKLX0gdHlwZV9zY3IxX2hkdV9oYWx0c3RhdHVzX3M7Ci0KLQotLy8gRGVidWcgQ1NSIG1hcAotbG9jYWxwYXJhbSBTQ1IxX0hEVV9EQkdDU1JfT0ZGU19EQ1NSICAgICAgID0gU0NSMV9IRFVfREVCVUdDU1JfQUREUl9XSURUSCcoICdkMCApOwotbG9jYWxwYXJhbSBTQ1IxX0hEVV9EQkdDU1JfT0ZGU19EUEMgICAgICAgID0gU0NSMV9IRFVfREVCVUdDU1JfQUREUl9XSURUSCcoICdkMSApOwotbG9jYWxwYXJhbSBTQ1IxX0hEVV9EQkdDU1JfT0ZGU19EU0NSQVRDSDAgID0gU0NSMV9IRFVfREVCVUdDU1JfQUREUl9XSURUSCcoICdkMiApOwotbG9jYWxwYXJhbSBTQ1IxX0hEVV9EQkdDU1JfT0ZGU19EU0NSQVRDSDEgID0gU0NSMV9IRFVfREVCVUdDU1JfQUREUl9XSURUSCcoICdkMyApOwotCi1sb2NhbHBhcmFtIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfSERVX0RCR0NTUl9BRERSX0RDU1IgICAgICA9IFNDUjFfQ1NSX0FERFJfSERVX01CQVNFICsgU0NSMV9IRFVfREJHQ1NSX09GRlNfRENTUjsKLWxvY2FscGFyYW0gYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9IRFVfREJHQ1NSX0FERFJfRFBDICAgICAgID0gU0NSMV9DU1JfQUREUl9IRFVfTUJBU0UgKyBTQ1IxX0hEVV9EQkdDU1JfT0ZGU19EUEM7Ci1sb2NhbHBhcmFtIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfSERVX0RCR0NTUl9BRERSX0RTQ1JBVENIMCA9IFNDUjFfQ1NSX0FERFJfSERVX01CQVNFICsgU0NSMV9IRFVfREJHQ1NSX09GRlNfRFNDUkFUQ0gwOwotbG9jYWxwYXJhbSBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0hEVV9EQkdDU1JfQUREUl9EU0NSQVRDSDEgPSBTQ1IxX0NTUl9BRERSX0hEVV9NQkFTRSArIFNDUjFfSERVX0RCR0NTUl9PRkZTX0RTQ1JBVENIMTsKLQotLy8gRGVidWcgQ1NScyA6OiBEQ1NSCi10eXBlZGVmIGVudW0gaW50IHsKLSAgICBTQ1IxX0hEVV9EQ1NSX1BSVl9CSVRfUiAgICAgICAgID0gMCwKLSAgICBTQ1IxX0hEVV9EQ1NSX1BSVl9CSVRfTCAgICAgICAgID0gMSwKLSAgICBTQ1IxX0hEVV9EQ1NSX1NURVBfQklUICAgICAgICAgID0gMiwKLSAgICBTQ1IxX0hEVV9EQ1NSX1JTUlYwX0JJVF9SICAgICAgID0gMywKLSAgICBTQ1IxX0hEVV9EQ1NSX1JTUlYwX0JJVF9MICAgICAgID0gNSwKLSAgICBTQ1IxX0hEVV9EQ1NSX0NBVVNFX0JJVF9SICAgICAgID0gNiwKLSAgICBTQ1IxX0hEVV9EQ1NSX0NBVVNFX0JJVF9MICAgICAgID0gOCwKLSAgICBTQ1IxX0hEVV9EQ1NSX1JTUlYxX0JJVF9SICAgICAgID0gOSwKLSAgICBTQ1IxX0hEVV9EQ1NSX1JTUlYxX0JJVF9MICAgICAgID0gMTAsCi0gICAgU0NSMV9IRFVfRENTUl9TVEVQSUVfQklUICAgICAgICA9IDExLAotICAgIFNDUjFfSERVX0RDU1JfUlNSVjJfQklUX1IgICAgICAgPSAxMiwKLSAgICBTQ1IxX0hEVV9EQ1NSX1JTUlYyX0JJVF9MICAgICAgID0gMTQsCi0gICAgU0NSMV9IRFVfRENTUl9FQlJFQUtNX0JJVCAgICAgICA9IDE1LAotICAgIFNDUjFfSERVX0RDU1JfUlNSVjNfQklUX1IgICAgICAgPSAxNiwKLSAgICBTQ1IxX0hEVV9EQ1NSX1JTUlYzX0JJVF9MICAgICAgID0gMjcsCi0gICAgU0NSMV9IRFVfRENTUl9YREVCVUdWRVJfQklUX1IgICA9IDI4LAotICAgIFNDUjFfSERVX0RDU1JfWERFQlVHVkVSX0JJVF9MICAgPSAzMQotfSB0eXBlX3NjcjFfaGR1X2Rjc3JfYml0c19lOwotCi0vL2xvY2FscGFyYW0gaW50IHVuc2lnbmVkIFNDUjFfSERVX0RFQlVHQ1NSX0RDU1JfUFJWX1dJRFRIID0gU0NSMV9IRFVfRENTUl9QUlZfQklUX0wtU0NSMV9IRFVfRENTUl9QUlZfQklUX1IrMTsKLQotdHlwZWRlZiBzdHJ1Y3QgcGFja2VkIHsKLSAgICBsb2dpYyBbU0NSMV9IRFVfRENTUl9YREVCVUdWRVJfQklUX0wtU0NSMV9IRFVfRENTUl9YREVCVUdWRVJfQklUX1I6MF0gICB4ZGVidWd2ZXI7Ci0gICAgbG9naWMgW1NDUjFfSERVX0RDU1JfUlNSVjNfQklUX0wtU0NSMV9IRFVfRENTUl9SU1JWM19CSVRfUjowXSAgICAgICAgICAgcnNydjM7Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWJyZWFrbTsKLSAgICBsb2dpYyBbU0NSMV9IRFVfRENTUl9SU1JWMl9CSVRfTC1TQ1IxX0hEVV9EQ1NSX1JTUlYyX0JJVF9SOjBdICAgICAgICAgICByc3J2MjsKLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwaWU7Ci0gICAgbG9naWMgW1NDUjFfSERVX0RDU1JfUlNSVjFfQklUX0wtU0NSMV9IRFVfRENTUl9SU1JWMV9CSVRfUjowXSAgICAgICAgICAgcnNydjE7Ci0gICAgbG9naWMgW1NDUjFfSERVX0RDU1JfQ0FVU0VfQklUX0wtU0NSMV9IRFVfRENTUl9DQVVTRV9CSVRfUjowXSAgICAgICAgICAgY2F1c2U7Ci0gICAgbG9naWMgW1NDUjFfSERVX0RDU1JfUlNSVjBfQklUX0wtU0NSMV9IRFVfRENTUl9SU1JWMF9CSVRfUjowXSAgICAgICAgICAgcnNydjA7Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcDsKLSAgICBsb2dpYyBbU0NSMV9IRFVfRENTUl9QUlZfQklUX0wtU0NSMV9IRFVfRENTUl9QUlZfQklUX1I6MF0gICAgICAgICAgICAgICBwcnY7Ci19IHR5cGVfc2NyMV9oZHVfZGNzcl9zOwotCi0KLWBlbmRpZiAvLyBTQ1IxX0lOQ0xVREVfSERVX0RFRlMKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX2lwaWMuc3ZoIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2luY2x1ZGVzL3NjcjFfaXBpYy5zdmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1NTEzN2MuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2luY2x1ZGVzL3NjcjFfaXBpYy5zdmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IFN5bnRhY29yZSBMTEMgqSAyMDE2LTIwMjEKLS8vIAotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKLS8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBTeW50YWNvcmUgTExDCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vIEBmaWxlICAgICAgIDxzY3IxX2lwaWMuc3ZoPgotLy8vIEBicmllZiAgICAgIElQSUMgaGVhZGVyIGZpbGUKLS8vLwotCi1gaWZuZGVmIFNDUjFfSVBJQ19TVkgKLWBkZWZpbmUgU0NSMV9JUElDX1NWSAotCi1gaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKLQotYGlmZGVmIFNDUjFfSVBJQ19FTgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBQYXJhbWV0ZXJzIGRlY2xhcmF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXBhcmFtZXRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9JUlFfVkVDVF9OVU0gICAgICAgPSAxNjsgICAvLyBtdXN0IGJlIHBvd2VyIG9mIDIgaW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24KLXBhcmFtZXRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9JUlFfVkVDVF9XSURUSCAgICAgPSAkY2xvZzIoU0NSMV9JUlFfVkVDVF9OVU0rMSk7Ci1wYXJhbWV0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfSVJRX0xJTkVTX05VTSAgICAgID0gU0NSMV9JUlFfVkVDVF9OVU07Ci1wYXJhbWV0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfSVJRX0xJTkVTX1dJRFRIICAgID0gJGNsb2cyKFNDUjFfSVJRX0xJTkVTX05VTSk7Ci1wYXJhbWV0ZXIgICBsb2dpYyBbU0NSMV9JUlFfVkVDVF9XSURUSC0xOjBdIFNDUjFfSVJRX1ZPSURfVkVDVF9OVU0gID0gU0NSMV9JUlFfVkVDVF9XSURUSCcoU0NSMV9JUlFfVkVDVF9OVU0pOwotcGFyYW1ldGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0lSUV9JRFhfV0lEVEggICAgICA9ICRjbG9nMihTQ1IxX0lSUV9WRUNUX05VTSk7Ci0KLS8vIEFkZHJlc3MgZGVjb2RpbmcgcGFyYW1ldGVycwotcGFyYW1ldGVyICAgbG9naWMgWzI6MF0gICAgICAgICAgICAgICAgICAgICBTQ1IxX0lQSUNfQ0lTViAgICAgICAgICA9IDMnaDA7ICAgIC8vIFJPCi1wYXJhbWV0ZXIgICBsb2dpYyBbMjowXSAgICAgICAgICAgICAgICAgICAgIFNDUjFfSVBJQ19DSUNTUiAgICAgICAgID0gMydoMTsgICAgLy8ge0lQLCBJRX0KLXBhcmFtZXRlciAgIGxvZ2ljIFsyOjBdICAgICAgICAgICAgICAgICAgICAgU0NSMV9JUElDX0lQUiAgICAgICAgICAgPSAzJ2gyOyAgICAvLyBSVzFDCi1wYXJhbWV0ZXIgICBsb2dpYyBbMjowXSAgICAgICAgICAgICAgICAgICAgIFNDUjFfSVBJQ19JU1ZSICAgICAgICAgID0gMydoMzsgICAgLy8gUk8KLXBhcmFtZXRlciAgIGxvZ2ljIFsyOjBdICAgICAgICAgICAgICAgICAgICAgU0NSMV9JUElDX0VPSSAgICAgICAgICAgPSAzJ2g0OyAgICAvLyBSWlcKLXBhcmFtZXRlciAgIGxvZ2ljIFsyOjBdICAgICAgICAgICAgICAgICAgICAgU0NSMV9JUElDX1NPSSAgICAgICAgICAgPSAzJ2g1OyAgICAvLyBSWlcKLXBhcmFtZXRlciAgIGxvZ2ljIFsyOjBdICAgICAgICAgICAgICAgICAgICAgU0NSMV9JUElDX0lEWCAgICAgICAgICAgPSAzJ2g2OyAgICAvLyBSVwotcGFyYW1ldGVyICAgbG9naWMgWzI6MF0gICAgICAgICAgICAgICAgICAgICBTQ1IxX0lQSUNfSUNTUiAgICAgICAgICA9IDMnaDc7ICAgIC8vIFJXCi0KLXBhcmFtZXRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9JUElDX0lDU1JfSVAgICAgICAgPSAwOwotcGFyYW1ldGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0lQSUNfSUNTUl9JRSAgICAgICA9IDE7Ci1wYXJhbWV0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfSVBJQ19JQ1NSX0lNICAgICAgID0gMjsKLXBhcmFtZXRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9JUElDX0lDU1JfSU5WICAgICAgPSAzOwotcGFyYW1ldGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0lQSUNfSUNTUl9JUyAgICAgICA9IDQ7Ci1wYXJhbWV0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfSVBJQ19JQ1NSX1BSVl9MU0IgID0gODsKLXBhcmFtZXRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9JUElDX0lDU1JfUFJWX01TQiAgPSA5OwotcGFyYW1ldGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0lQSUNfSUNTUl9MTl9MU0IgICA9IDEyOwotcGFyYW1ldGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0lQSUNfSUNTUl9MTl9NU0IgICA9IFNDUjFfSVBJQ19JQ1NSX0xOX0xTQgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFNDUjFfSVJRX0xJTkVTX1dJRFRIOwotCi1wYXJhbWV0ZXIgICBsb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgIFNDUjFfSVBJQ19QUlZfTSAgICAgICAgID0gMidiMTE7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gVHlwZXMgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdHlwZWRlZiBlbnVtIGxvZ2ljIHsKLSAgICBTQ1IxX0NTUjJJUElDX1JELAotICAgIFNDUjFfQ1NSMklQSUNfV1IKLWBpZmRlZiBTQ1IxX1hQUk9QX0VOCi0gICAgLAotICAgIFNDUjFfQ1NSMklQSUNfRVJST1IgPSAneAotYGVuZGlmIC8vIFNDUjFfWFBST1BfRU4KLX0gdHlwZV9zY3IxX2NzcjJpcGljX3dyX2U7Ci0KLWBlbmRpZiAvLyBTQ1IxX0lQSUNfRU4KLWBlbmRpZiAvLyBTQ1IxX0lQSUNfU1ZICmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9tZW1pZi5zdmggYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9tZW1pZi5zdmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5N2RmNTguLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2luY2x1ZGVzL3NjcjFfbWVtaWYuc3ZoCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiBTeW50YWNvcmUgTExDIKkgMjAxNi0yMDIxCi0vLyAKLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0vLyBTUERYLUZpbGVDb250cmlidXRvcjogU3ludGFjb3JlIExMQwotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLyBAZmlsZSAgICAgICA8c2NyMV9tZW1pZi5zdmg+Ci0vLy8gQGJyaWVmICAgICAgTWVtb3J5IGludGVyZmFjZSBkZWZpbml0aW9ucyBmaWxlCi0vLy8KLQotYGlmbmRlZiBTQ1IxX01FTUlGX1NWSAotYGRlZmluZSBTQ1IxX01FTUlGX1NWSAotCi1gaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBNZW1vcnkgY29tbWFuZCBlbnVtCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vdHlwZWRlZiBlbnVtIGxvZ2ljIHsKLXBhcmFtZXRlciAgICBTQ1IxX01FTV9DTURfUkQgICAgID0gMSdiMDsKLXBhcmFtZXRlciAgICBTQ1IxX01FTV9DTURfV1IgICAgID0gMSdiMTsKLS8vYGlmZGVmIFNDUjFfWFBST1BfRU4KLS8vICAgICwKLXBhcmFtZXRlciAgICAgU0NSMV9NRU1fQ01EX0VSUk9SICA9ICd4OwotLy9gZW5kaWYgLy8gU0NSMV9YUFJPUF9FTgotLy99IHR5cGVfc2NyMV9tZW1fY21kX2U7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTWVtb3J5IGRhdGEgd2lkdGggZW51bQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vL3R5cGVkZWYgZW51bSBsb2dpY1sxOjBdIHsKLXBhcmFtZXRlciAgICBTQ1IxX01FTV9XSURUSF9CWVRFICAgICA9IDInYjAwOwotcGFyYW1ldGVyICAgIFNDUjFfTUVNX1dJRFRIX0hXT1JEICAgID0gMidiMDE7Ci1wYXJhbWV0ZXIgICAgU0NSMV9NRU1fV0lEVEhfV09SRCAgICAgPSAyJ2IxMDsKLS8vYGlmZGVmIFNDUjFfWFBST1BfRU4KLS8vICAgICwKLXBhcmFtZXRlciAgICBTQ1IxX01FTV9XSURUSF9FUlJPUiAgICA9ICd4OwotLy9gZW5kaWYgLy8gU0NSMV9YUFJPUF9FTgotLy99IHR5cGVfc2NyMV9tZW1fd2lkdGhfZTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBNZW1vcnkgcmVzcG9uc2UgZW51bQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vL3R5cGVkZWYgZW51bSBsb2dpY1sxOjBdIHsKLXBhcmFtZXRlciAgICBTQ1IxX01FTV9SRVNQX05PVFJEWSAgICA9IDInYjAwOwotcGFyYW1ldGVyICAgIFNDUjFfTUVNX1JFU1BfUkRZX09LICAgID0gMidiMDE7Ci1wYXJhbWV0ZXIgICAgU0NSMV9NRU1fUkVTUF9SRFlfRVIgICAgPSAyJ2IxMDsKLS8vYGlmZGVmIFNDUjFfWFBST1BfRU4KLS8vICAgICwKLXBhcmFtZXRlciAgICBTQ1IxX01FTV9SRVNQX0VSUk9SICAgICA9ICd4OwotLy9gZW5kaWYgLy8gU0NSMV9YUFJPUF9FTgotLy99IHR5cGVfc2NyMV9tZW1fcmVzcF9lOwotCi1gZW5kaWYgLy8gU0NSMV9NRU1JRl9TVkgKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX3Jpc2N2X2lzYV9kZWNvZGluZy5zdmggYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9yaXNjdl9pc2FfZGVjb2Rpbmcuc3ZoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjM4MGExLi4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX3Jpc2N2X2lzYV9kZWNvZGluZy5zdmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMDEgKzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiBTeW50YWNvcmUgTExDIKkgMjAxNi0yMDIxCi0vLyAKLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0vLyBTUERYLUZpbGVDb250cmlidXRvcjogU3ludGFjb3JlIExMQwotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLyBAZmlsZSAgICAgICA8c2NyMV9yaXNjdl9pc2FfZGVjb2Rpbmcuc3ZoPgotLy8vIEBicmllZiAgICAgIFJJU0MtViBJU0EgZGVmaW5pdGlvbnMgZmlsZQotLy8vCi0KLWBpZm5kZWYgU0NSMV9SSVNDVl9JU0FfREVDT0RJTkdfU1ZICi1gZGVmaW5lIFNDUjFfUklTQ1ZfSVNBX0RFQ09ESU5HX1NWSAotCi1gaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKLWBpbmNsdWRlICJzY3IxX2FyY2hfdHlwZXMuc3ZoIgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEluc3RydWN0aW9uIHR5cGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vdHlwZWRlZiBlbnVtIGxvZ2ljIFsxOjBdIHsKLXBhcmFtZXRlciAgICBTQ1IxX0lOU1RSX1JWQzAgICAgID0gMidiMDA7Ci1wYXJhbWV0ZXIgICAgU0NSMV9JTlNUUl9SVkMxICAgICA9IDInYjAxOwotcGFyYW1ldGVyICAgIFNDUjFfSU5TVFJfUlZDMiAgICAgPSAyJ2IxMDsKLXBhcmFtZXRlciAgICBTQ1IxX0lOU1RSX1JWSSAgICAgID0gMidiMTE7Ci0vL30gdHlwZV9zY3IxX2luc3RyX3R5cGVfZTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSVjMySSBvcGNvZGVzIChiaXRzIDY6MikKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy90eXBlZGVmIGVudW0gbG9naWMgWzY6Ml0gewotcGFyYW1ldGVyICAgIFNDUjFfT1BDT0RFX0xPQUQgICAgICAgID0gNSdiMDAwMDA7Ci1wYXJhbWV0ZXIgICAgU0NSMV9PUENPREVfTUlTQ19NRU0gICAgPSA1J2IwMDAxMTsKLXBhcmFtZXRlciAgICBTQ1IxX09QQ09ERV9PUF9JTU0gICAgICA9IDUnYjAwMTAwOwotcGFyYW1ldGVyICAgIFNDUjFfT1BDT0RFX0FVSVBDICAgICAgID0gNSdiMDAxMDE7Ci1wYXJhbWV0ZXIgICAgU0NSMV9PUENPREVfU1RPUkUgICAgICAgPSA1J2IwMTAwMDsKLXBhcmFtZXRlciAgICBTQ1IxX09QQ09ERV9PUCAgICAgICAgICA9IDUnYjAxMTAwOwotcGFyYW1ldGVyICAgIFNDUjFfT1BDT0RFX0xVSSAgICAgICAgID0gNSdiMDExMDE7Ci1wYXJhbWV0ZXIgICAgU0NSMV9PUENPREVfQlJBTkNIICAgICAgPSA1J2IxMTAwMDsKLXBhcmFtZXRlciAgICBTQ1IxX09QQ09ERV9KQUxSICAgICAgICA9IDUnYjExMDAxOwotcGFyYW1ldGVyICAgIFNDUjFfT1BDT0RFX0pBTCAgICAgICAgID0gNSdiMTEwMTE7Ci1wYXJhbWV0ZXIgICAgU0NSMV9PUENPREVfU1lTVEVNICAgICAgPSA1J2IxMTEwMDsKLS8vfSB0eXBlX3NjcjFfcnZpX29wY29kZV9lOwotCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSUFMVSBtYWluIG9wZXJhbmRzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWxvY2FscGFyYW0gU0NSMV9JQUxVX09QX0FMTF9OVU1fRSA9IDI7Ci1sb2NhbHBhcmFtIFNDUjFfSUFMVV9PUF9XSURUSF9FICAgPSAkY2xvZzIoU0NSMV9JQUxVX09QX0FMTF9OVU1fRSk7Ci10eXBlZGVmIGVudW0gbG9naWMgW1NDUjFfSUFMVV9PUF9XSURUSF9FLTE6MF0gewotICAgIFNDUjFfSUFMVV9PUF9SRUdfSU1NLCAgICAgICAgICAvLyBvcDEgPSByczE7IG9wMiA9IGltbQotICAgIFNDUjFfSUFMVV9PUF9SRUdfUkVHICAgICAgICAgICAvLyBvcDEgPSByczE7IG9wMiA9IHJzMgotfSB0eXBlX3NjcjFfaWFsdV9vcF9zZWxfZTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBJQUxVIG1haW4gY29tbWFuZHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotYGlmZGVmIFNDUjFfUlZNX0VYVAotbG9jYWxwYXJhbSBTQ1IxX0lBTFVfQ01EX0FMTF9OVU1fRSAgICA9IDIzOwotYGVsc2UgLy8gflNDUjFfUlZNX0VYVAotbG9jYWxwYXJhbSBTQ1IxX0lBTFVfQ01EX0FMTF9OVU1fRSAgICA9IDE1OwotYGVuZGlmIC8vIH5TQ1IxX1JWTV9FWFQKLWxvY2FscGFyYW0gU0NSMV9JQUxVX0NNRF9XSURUSF9FICAgICAgPSAkY2xvZzIoU0NSMV9JQUxVX0NNRF9BTExfTlVNX0UpOwotdHlwZWRlZiBlbnVtIGxvZ2ljIFtTQ1IxX0lBTFVfQ01EX1dJRFRIX0UtMTowXSB7Ci0gICAgU0NSMV9JQUxVX0NNRF9OT05FICA9ICcwLCAgIC8vIElBTFUgZGlzYWJsZQotICAgIFNDUjFfSUFMVV9DTURfQU5ELCAgICAgICAgICAvLyBvcDEgJiBvcDIKLSAgICBTQ1IxX0lBTFVfQ01EX09SLCAgICAgICAgICAgLy8gb3AxIHwgb3AyCi0gICAgU0NSMV9JQUxVX0NNRF9YT1IsICAgICAgICAgIC8vIG9wMSBeIG9wMgotICAgIFNDUjFfSUFMVV9DTURfQURELCAgICAgICAgICAvLyBvcDEgKyBvcDIKLSAgICBTQ1IxX0lBTFVfQ01EX1NVQiwgICAgICAgICAgLy8gb3AxIC0gb3AyCi0gICAgU0NSMV9JQUxVX0NNRF9TVUJfTFQsICAgICAgIC8vIG9wMSA8IG9wMgotICAgIFNDUjFfSUFMVV9DTURfU1VCX0xUVSwgICAgICAvLyBvcDEgdTwgb3AyCi0gICAgU0NSMV9JQUxVX0NNRF9TVUJfRVEsICAgICAgIC8vIG9wMSA9IG9wMgotICAgIFNDUjFfSUFMVV9DTURfU1VCX05FLCAgICAgICAvLyBvcDEgIT0gb3AyCi0gICAgU0NSMV9JQUxVX0NNRF9TVUJfR0UsICAgICAgIC8vIG9wMSA+PSBvcDIKLSAgICBTQ1IxX0lBTFVfQ01EX1NVQl9HRVUsICAgICAgLy8gb3AxIHU+PSBvcDIKLSAgICBTQ1IxX0lBTFVfQ01EX1NMTCwgICAgICAgICAgLy8gb3AxIDw8IG9wMgotICAgIFNDUjFfSUFMVV9DTURfU1JMLCAgICAgICAgICAvLyBvcDEgPj4gb3AyCi0gICAgU0NSMV9JQUxVX0NNRF9TUkEgICAgICAgICAgIC8vIG9wMSA+Pj4gb3AyCi1gaWZkZWYgU0NSMV9SVk1fRVhUCi0gICAgLAotICAgIFNDUjFfSUFMVV9DTURfTVVMLCAgICAgICAgICAvLyBsb3codW5zaWcob3AxKSAqIHVuc2lnKG9wMikpCi0gICAgU0NSMV9JQUxVX0NNRF9NVUxIVSwgICAgICAgIC8vIGhpZ2godW5zaWcob3AxKSAqIHVuc2lnKG9wMikpCi0gICAgU0NSMV9JQUxVX0NNRF9NVUxIU1UsICAgICAgIC8vIGhpZ2gob3AxICogdW5zaWcob3AyKSkKLSAgICBTQ1IxX0lBTFVfQ01EX01VTEgsICAgICAgICAgLy8gaGlnaChvcDEgKiBvcDIpCi0gICAgU0NSMV9JQUxVX0NNRF9ESVYsICAgICAgICAgIC8vIG9wMSAvIG9wMgotICAgIFNDUjFfSUFMVV9DTURfRElWVSwgICAgICAgICAvLyBvcDEgdS8gb3AyCi0gICAgU0NSMV9JQUxVX0NNRF9SRU0sICAgICAgICAgIC8vIG9wMSAlIG9wMgotICAgIFNDUjFfSUFMVV9DTURfUkVNVSAgICAgICAgICAvLyBvcDEgdSUgb3AyCi1gZW5kaWYgIC8vIFNDUjFfUlZNX0VYVAotfSB0eXBlX3NjcjFfaWFsdV9jbWRfc2VsX2U7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSUFMVSBTVU0yIG9wZXJhbmRzIChyZXN1bHQgaXMgSlVNUC9CUkFOQ0ggdGFyZ2V0LCBMT0FEL1NUT1JFIGFkZHJlc3MpCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWxvY2FscGFyYW0gU0NSMV9TVU0yX09QX0FMTF9OVU1fRSAgICA9IDI7Ci1sb2NhbHBhcmFtIFNDUjFfU1VNMl9PUF9XSURUSF9FICAgICAgPSAkY2xvZzIoU0NSMV9TVU0yX09QX0FMTF9OVU1fRSk7Ci10eXBlZGVmIGVudW0gbG9naWMgW1NDUjFfU1VNMl9PUF9XSURUSF9FLTE6MF0gewotICAgIFNDUjFfU1VNMl9PUF9QQ19JTU0sICAgICAgICAvLyBvcDEgPSBjdXJyX3BjOyBvcDIgPSBpbW0gKEFVSVBDLCB0YXJnZXQgbmV3X3BjIGZvciBKQUwgYW5kIGJyYW5jaGVzKQotICAgIFNDUjFfU1VNMl9PUF9SRUdfSU1NICAgICAgICAvLyBvcDEgPSByczE7IG9wMiA9IGltbSAodGFyZ2V0IG5ld19wYyBmb3IgSkFMUiwgTE9BRC9TVE9SRSBhZGRyZXNzKQotYGlmZGVmIFNDUjFfWFBST1BfRU4KLSAgICAsCi0gICAgU0NSMV9TVU0yX09QX0VSUk9SID0gJ3gKLWBlbmRpZiAvLyBTQ1IxX1hQUk9QX0VOCi19IHR5cGVfc2NyMV9pYWx1X3N1bTJfb3Bfc2VsX2U7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTFNVIGNvbW1hbmRzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWxvY2FscGFyYW0gU0NSMV9MU1VfQ01EX0FMTF9OVU1fRSAgID0gOTsKLWxvY2FscGFyYW0gU0NSMV9MU1VfQ01EX1dJRFRIX0UgICAgID0gJGNsb2cyKFNDUjFfTFNVX0NNRF9BTExfTlVNX0UpOwotdHlwZWRlZiBlbnVtIGxvZ2ljIFtTQ1IxX0xTVV9DTURfV0lEVEhfRS0xOjBdIHsKLSAgICBTQ1IxX0xTVV9DTURfTk9ORSA9ICcwLAotICAgIFNDUjFfTFNVX0NNRF9MQiwKLSAgICBTQ1IxX0xTVV9DTURfTEgsCi0gICAgU0NSMV9MU1VfQ01EX0xXLAotICAgIFNDUjFfTFNVX0NNRF9MQlUsCi0gICAgU0NSMV9MU1VfQ01EX0xIVSwKLSAgICBTQ1IxX0xTVV9DTURfU0IsCi0gICAgU0NSMV9MU1VfQ01EX1NILAotICAgIFNDUjFfTFNVX0NNRF9TVwotfSB0eXBlX3NjcjFfbHN1X2NtZF9zZWxfZTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDU1Igb3BlcmFuZHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbG9jYWxwYXJhbSBTQ1IxX0NTUl9PUF9BTExfTlVNX0UgICA9IDI7Ci1sb2NhbHBhcmFtIFNDUjFfQ1NSX09QX1dJRFRIX0UgICAgID0gJGNsb2cyKFNDUjFfQ1NSX09QX0FMTF9OVU1fRSk7Ci10eXBlZGVmIGVudW0gbG9naWMgW1NDUjFfQ1NSX09QX1dJRFRIX0UtMTowXSB7Ci0gICAgU0NSMV9DU1JfT1BfSU1NLAotICAgIFNDUjFfQ1NSX09QX1JFRwotfSB0eXBlX3NjcjFfY3NyX29wX3NlbF9lOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIENTUiBjb21tYW5kcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1sb2NhbHBhcmFtIFNDUjFfQ1NSX0NNRF9BTExfTlVNX0UgICA9IDQ7Ci1sb2NhbHBhcmFtIFNDUjFfQ1NSX0NNRF9XSURUSF9FICAgICA9ICRjbG9nMihTQ1IxX0NTUl9DTURfQUxMX05VTV9FKTsKLXR5cGVkZWYgZW51bSBsb2dpYyBbU0NSMV9DU1JfQ01EX1dJRFRIX0UtMTowXSB7Ci0gICAgU0NSMV9DU1JfQ01EX05PTkUgPSAnMCwKLSAgICBTQ1IxX0NTUl9DTURfV1JJVEUsCi0gICAgU0NSMV9DU1JfQ01EX1NFVCwKLSAgICBTQ1IxX0NTUl9DTURfQ0xFQVIKLX0gdHlwZV9zY3IxX2Nzcl9jbWRfc2VsX2U7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTVBSRiByZCB3cml0ZWJhY2sgc291cmNlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWxvY2FscGFyYW0gU0NSMV9SRF9XQl9BTExfTlVNX0UgPSA3OwotbG9jYWxwYXJhbSBTQ1IxX1JEX1dCX1dJRFRIX0UgICA9ICRjbG9nMihTQ1IxX1JEX1dCX0FMTF9OVU1fRSk7Ci10eXBlZGVmIGVudW0gbG9naWMgW1NDUjFfUkRfV0JfV0lEVEhfRS0xOjBdIHsKLSAgICBTQ1IxX1JEX1dCX05PTkUgPSAnMCwKLSAgICBTQ1IxX1JEX1dCX0lBTFUsICAgICAgICAgICAgLy8gSUFMVSBtYWluIHJlc3VsdAotICAgIFNDUjFfUkRfV0JfU1VNMiwgICAgICAgICAgICAvLyBJQUxVIFNVTTIgcmVzdWx0IChBVUlQQykKLSAgICBTQ1IxX1JEX1dCX0lNTSwgICAgICAgICAgICAgLy8gTFVJCi0gICAgU0NSMV9SRF9XQl9JTkNfUEMsICAgICAgICAgIC8vIEpBTChSKQotICAgIFNDUjFfUkRfV0JfTFNVLCAgICAgICAgICAgICAvLyBMb2FkIGZyb20gRE1FTQotICAgIFNDUjFfUkRfV0JfQ1NSICAgICAgICAgICAgICAvLyBSZWFkIENTUgotfSB0eXBlX3NjcjFfcmRfd2Jfc2VsX2U7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSURVIHRvIEVYVSBmdWxsIGNvbW1hbmQgc3RydWN0dXJlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWxvY2FscGFyYW0gU0NSMV9HUFJfRklFTERfV0lEVEggPSA1OwotCi10eXBlZGVmIHN0cnVjdCBwYWNrZWQgewotICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RyX3J2YzsgICAgICAvLyB1c2VkIHdpdGggYSBkaWZmZXJlbnQgbWVhbmluZyBmb3IgSUZVIGFjY2VzcyBmYXVsdCBleGNlcHRpb24KLSAgICB0eXBlX3NjcjFfaWFsdV9vcF9zZWxfZSAgICAgICAgICAgICBpYWx1X29wOwotICAgIHR5cGVfc2NyMV9pYWx1X2NtZF9zZWxfZSAgICAgICAgICAgIGlhbHVfY21kOwotICAgIHR5cGVfc2NyMV9pYWx1X3N1bTJfb3Bfc2VsX2UgICAgICAgIHN1bTJfb3A7Ci0gICAgdHlwZV9zY3IxX2xzdV9jbWRfc2VsX2UgICAgICAgICAgICAgbHN1X2NtZDsKLSAgICB0eXBlX3NjcjFfY3NyX29wX3NlbF9lICAgICAgICAgICAgICBjc3Jfb3A7Ci0gICAgdHlwZV9zY3IxX2Nzcl9jbWRfc2VsX2UgICAgICAgICAgICAgY3NyX2NtZDsKLSAgICB0eXBlX3NjcjFfcmRfd2Jfc2VsX2UgICAgICAgICAgICAgICByZF93Yl9zZWw7Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVtcF9yZXE7Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoX3JlcTsKLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcmV0X3JlcTsKLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZW5jZWlfcmVxOwotICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdmaV9yZXE7Ci0gICAgbG9naWMgW1NDUjFfR1BSX0ZJRUxEX1dJRFRILTE6MF0gICAgcnMxX2FkZHI7ICAgICAgIC8vIGFsc28gdXNlZCBhcyB6aW1tIGZvciBDU1JSeEkgaW5zdHJ1Y3Rpb25zCi0gICAgbG9naWMgW1NDUjFfR1BSX0ZJRUxEX1dJRFRILTE6MF0gICAgcnMyX2FkZHI7Ci0gICAgbG9naWMgW1NDUjFfR1BSX0ZJRUxEX1dJRFRILTE6MF0gICAgcmRfYWRkcjsKLSAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICBpbW07ICAgICAgICAgICAgLy8gdXNlZCBhcyB7ZnVuY3QzLCBDU1IgYWRkcmVzc30gZm9yIENTUiBpbnN0cnVjdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXNlZCBhcyBpbnN0cnVjdGlvbiBmaWVsZCBmb3IgaWxsZWdhbCBpbnN0cnVjdGlvbiBleGNlcHRpb24KLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNfcmVxOwotICAgIHR5cGVfc2NyMV9leGNfY29kZV9lICAgICAgICAgICAgICAgIGV4Y19jb2RlOwotfSB0eXBlX3NjcjFfZXh1X2NtZF9zOwotCi1gZW5kaWYgLy8gU0NSMV9SSVNDVl9JU0FfREVDT0RJTkdfU1ZICi0KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX3NjdS5zdmggYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9zY3Uuc3ZoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzhmNWRmLi4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX3NjdS5zdmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiBTeW50YWNvcmUgTExDIKkgMjAxNi0yMDIxCi0vLyAKLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0vLyBTUERYLUZpbGVDb250cmlidXRvcjogU3ludGFjb3JlIExMQwotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLyBAZmlsZSAgICAgICA8c2NyMV9zY3Uuc3ZoPgotLy8vIEBicmllZiAgICAgIFNDVSBoZWFkZXIgZmlsZQotLy8vCi0KLWBpZm5kZWYgU0NSMV9JTkNMVURFX1NDVV9ERUZTCi1gZGVmaW5lIFNDUjFfSU5DTFVERV9TQ1VfREVGUwotCi0vL2BpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgotCi1gaWZkZWYgU0NSMV9EQkdfRU4KLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIFBhcmFtZXRlcnMKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1sb2NhbHBhcmFtIGludCB1bnNpZ25lZCAgICAgICAgIFNDUjFfU0NVX0RSX1NZU0NUUkxfT1BfV0lEVEggICAgICAgID0gMjsKLWxvY2FscGFyYW0gaW50IHVuc2lnbmVkICAgICAgICAgU0NSMV9TQ1VfRFJfU1lTQ1RSTF9BRERSX1dJRFRIICAgICAgPSAyOwotbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgICAgICAgICBTQ1IxX1NDVV9EUl9TWVNDVFJMX0RBVEFfV0lEVEggICAgICA9IDQ7Ci1sb2NhbHBhcmFtIGludCB1bnNpZ25lZCAgICAgICAgIFNDUjFfU0NVX0RSX1NZU0NUUkxfV0lEVEggICAgICA9IFNDUjFfU0NVX0RSX1NZU0NUUkxfT1BfV0lEVEgrU0NSMV9TQ1VfRFJfU1lTQ1RSTF9BRERSX1dJRFRIK1NDUjFfU0NVX0RSX1NZU0NUUkxfREFUQV9XSURUSDsgLy8gY3AuMwotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gVHlwZXMKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci10eXBlZGVmIGVudW0gbG9naWMgW1NDUjFfU0NVX0RSX1NZU0NUUkxfT1BfV0lEVEgtMTowXSB7Ci0gICAgU0NSMV9TQ1VfU1lTQ1RSTF9PUF9XUklURSAgICAgICA9IDInaDAsCi0gICAgU0NSMV9TQ1VfU1lTQ1RSTF9PUF9SRUFEICAgICAgICA9IDInaDEsCi0gICAgU0NSMV9TQ1VfU1lTQ1RSTF9PUF9TRVRCSVRTICAgICA9IDInaDIsCi0gICAgU0NSMV9TQ1VfU1lTQ1RSTF9PUF9DTFJCSVRTICAgICA9IDInaDMKLWBpZmRlZiBTQ1IxX1hQUk9QX0VOCi0gICAgLAotICAgIFNDUjFfU0NVX1NZU0NUUkxfT1BfWFhYICAgICAgICAgPSAnWAotYGVuZGlmIC8vIFNDUjFfWFBST1BfRU4KLX0gdHlwZV9zY3IxX3NjdV9zeXNjdHJsX29wX2U7Ci0KLXR5cGVkZWYgZW51bSBsb2dpYyBbU0NSMV9TQ1VfRFJfU1lTQ1RSTF9BRERSX1dJRFRILTE6MF0gewotICAgIFNDUjFfU0NVX1NZU0NUUkxfQUREUl9DT05UUk9MICAgPSAyJ2gwLAotICAgIFNDUjFfU0NVX1NZU0NUUkxfQUREUl9NT0RFICAgICAgPSAyJ2gxLAotICAgIFNDUjFfU0NVX1NZU0NUUkxfQUREUl9TVEFUVVMgICAgPSAyJ2gyLAotICAgIFNDUjFfU0NVX1NZU0NUUkxfQUREUl9TVElDS1kgICAgPSAyJ2gzCi1gaWZkZWYgU0NSMV9YUFJPUF9FTgotICAgICwKLSAgICBTQ1IxX1NDVV9TWVNDVFJMX0FERFJfWFhYICAgICAgID0gJ1gKLWBlbmRpZiAvLyBTQ1IxX1hQUk9QX0VOCi19IHR5cGVfc2NyMV9zY3Vfc3lzY3RybF9hZGRyX2U7Ci0KLXR5cGVkZWYgc3RydWN0IHBhY2tlZCB7Ci0gICAgbG9naWMgW1NDUjFfU0NVX0RSX1NZU0NUUkxfREFUQV9XSURUSC0xOjBdICBkYXRhOwotICAgIGxvZ2ljIFtTQ1IxX1NDVV9EUl9TWVNDVFJMX0FERFJfV0lEVEgtMTowXSAgYWRkcjsKLSAgICBsb2dpYyBbU0NSMV9TQ1VfRFJfU1lTQ1RSTF9PUF9XSURUSC0xOjBdICAgIG9wOwotfSB0eXBlX3NjcjFfc2N1X3N5c2N0cmxfZHJfczsKLQotdHlwZWRlZiBlbnVtIGludCB1bnNpZ25lZCB7Ci0gICAgU0NSMV9TQ1VfRFJfU1lTQ1RSTF9PUF9CSVRfUiAgICAgICAgICAgICAgICAgID0gJ2gwLAotICAgIFNDUjFfU0NVX0RSX1NZU0NUUkxfT1BfQklUX0wgICAgICAgICAgICAgICAgICA9IFNDUjFfU0NVX0RSX1NZU0NUUkxfT1BfV0lEVEgtMSwKLSAgICBTQ1IxX1NDVV9EUl9TWVNDVFJMX0FERFJfQklUX1IgICAgICAgICAgICAgICAgPSBTQ1IxX1NDVV9EUl9TWVNDVFJMX09QX1dJRFRILAotICAgIFNDUjFfU0NVX0RSX1NZU0NUUkxfQUREUl9CSVRfTCAgICAgICAgICAgICAgICA9IFNDUjFfU0NVX0RSX1NZU0NUUkxfT1BfV0lEVEggKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfU0NVX0RSX1NZU0NUUkxfQUREUl9XSURUSCAtIDEsCi0gICAgU0NSMV9TQ1VfRFJfU1lTQ1RSTF9EQVRBX0JJVF9SICAgICAgICAgICAgICAgID0gU0NSMV9TQ1VfRFJfU1lTQ1RSTF9PUF9XSURUSCArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9TQ1VfRFJfU1lTQ1RSTF9BRERSX1dJRFRILAotICAgIFNDUjFfU0NVX0RSX1NZU0NUUkxfREFUQV9CSVRfTCAgICAgICAgICAgICAgICA9IFNDUjFfU0NVX0RSX1NZU0NUUkxfT1BfV0lEVEggKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfU0NVX0RSX1NZU0NUUkxfQUREUl9XSURUSCArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9TQ1VfRFJfU1lTQ1RSTF9EQVRBX1dJRFRIIC0gMQotfSB0eXBlX3NjcjFfc2N1X3N5c2N0cmxfZHJfYml0c19lOwotCi10eXBlZGVmIHN0cnVjdCBwYWNrZWQgewotICAgIGxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzcnY7Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9yZXNldDsKLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNfcmVzZXQ7Ci19IHR5cGVfc2NyMV9zY3Vfc3lzY3RybF9jb250cm9sX3JlZ19zOwotCi10eXBlZGVmIHN0cnVjdCBwYWNrZWQgewotICAgIGxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzcnY7Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1X3JzdF9iaHY7Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1fcnN0X2JodjsKLX0gdHlwZV9zY3IxX3NjdV9zeXNjdHJsX21vZGVfcmVnX3M7Ci0KLWxvY2FscGFyYW0gYml0IFszMTowXSAgICBTQ1IxX1NDVV9TWVNDVFJMX1NUQVRVU19SRUdfV0lEVEggICAgICAgID0gNDsgLy8gY3AuMwotdHlwZWRlZiBzdHJ1Y3QgcGFja2VkIHsKLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHVfcmVzZXQ7Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1fcmVzZXQ7Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9yZXNldDsKLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNfcmVzZXQ7Ci19IHR5cGVfc2NyMV9zY3Vfc3lzY3RybF9zdGF0dXNfcmVnX3M7Ci0KLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotYGVuZGlmIC8vIFNDUjFfSU5DTFVERV9TQ1VfREVGUwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2luY2x1ZGVzL3NjcjFfc2VhcmNoX21zMS5zdmggYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9zZWFyY2hfbXMxLnN2aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTUzMmM1OS4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9zZWFyY2hfbXMxLnN2aAorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIxCi0vLyAKLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0vLyBTUERYLUZpbGVDb250cmlidXRvcjogU3ludGFjb3JlIExMQwotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLyBAZmlsZSAgICAgICA8c2NyMV9zZWFyY2hfbXMxLnN2aD4KLS8vLyBAYnJpZWYgICAgICBNb3N0IHNpZ25pZmljYW50IG9uZSBzZWFyY2ggZnVuY3Rpb24KLS8vLwotCi1gaWZuZGVmIFNDUjFfU0VBUkNIX01TMV9TVkgKLWBkZWZpbmUgU0NSMV9TRUFSQ0hfTVMxX1NWSAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHR5cGVzIGRlY2xhcmF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXR5cGVkZWYgc3RydWN0IHBhY2tlZCB7Ci0gICAgbG9naWMgICAgICAgdmQ7Ci0gICAgbG9naWMgICAgICAgaWR4OwotfSB0eXBlX3NjcjFfc2VhcmNoX29uZV8yX3M7Ci0KLXR5cGVkZWYgc3RydWN0IHBhY2tlZCB7Ci0gICAgbG9naWMgICAgICAgICAgIHZkOwotICAgIGxvZ2ljIFs0OjBdICAgICBpZHg7Ci19IHR5cGVfc2NyMV9zZWFyY2hfb25lXzMyX3M7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTGVhZGluZyBaZXJvcyBDb3VudCBGdW5jdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1mdW5jdGlvbiBhdXRvbWF0aWMgdHlwZV9zY3IxX3NlYXJjaF9vbmVfMl9zIHNjcjFfbGVhZF96ZXJvc19jbnRfMigKLSAgICBpbnB1dCAgIGxvZ2ljIFsxOjBdICAgICBkaW4KLSk7Ci0gICAgdHlwZV9zY3IxX3NlYXJjaF9vbmVfMl9zIHRtcDsKLWJlZ2luCi0gICAgdG1wLnZkICA9IHxkaW47Ci0gICAgdG1wLmlkeCA9IH5kaW5bMV07Ci0gICAgc2NyMV9sZWFkX3plcm9zX2NudF8yID0gIHRtcDsKLWVuZAotZW5kZnVuY3Rpb24KLQotZnVuY3Rpb24gYXV0b21hdGljIGxvZ2ljIFs0OjBdIHNjcjFfbGVhZF96ZXJvc19jbnRfMzIoCi0gICAgaW5wdXQgICBsb2dpYyBbMzE6MF0gICAgZGluCi0pOwotYmVnaW4KLSAgICBsb2dpYyBbMTU6MF0gICAgc3RhZ2UxX3ZkOwotICAgIGxvZ2ljIFs3OjBdICAgICBzdGFnZTJfdmQ7Ci0gICAgbG9naWMgWzM6MF0gICAgIHN0YWdlM192ZDsKLSAgICBsb2dpYyBbMTowXSAgICAgc3RhZ2U0X3ZkOwotCi0gICAgbG9naWMgICAgICAgICAgIHN0YWdlMV9pZHggWzE1OjBdOwotICAgIGxvZ2ljIFsxOjBdICAgICBzdGFnZTJfaWR4IFs3OjBdOwotICAgIGxvZ2ljIFsyOjBdICAgICBzdGFnZTNfaWR4IFszOjBdOwotICAgIGxvZ2ljIFszOjBdICAgICBzdGFnZTRfaWR4IFsxOjBdOwotICAgIHR5cGVfc2NyMV9zZWFyY2hfb25lXzMyX3MgdG1wOwotICAgIGxvZ2ljIFs0OjBdICAgICByZXM7Ci0gICAgaW50ZWdlciAgICAgICAgIGk7Ci0KLSAgICAvLyBTdGFnZSAxCi0gICAgZm9yIChpPTA7IGk8MTY7IGk9aSsxKSBiZWdpbiAvLyBjcC40Ci0gICAgICAgIHR5cGVfc2NyMV9zZWFyY2hfb25lXzJfcyB0bXA7Ci0gICAgICAgIHRtcCA9IHNjcjFfbGVhZF96ZXJvc19jbnRfMihkaW5bKGkrMSkqMi0xLToyXSk7Ci0gICAgICAgIHN0YWdlMV92ZFtpXSAgPSB0bXAudmQ7Ci0gICAgICAgIHN0YWdlMV9pZHhbaV0gPSB0bXAuaWR4OwotICAgIGVuZAotCi0gICAgLy8gU3RhZ2UgMgotICAgIGZvciAoaT0wOyBpPDg7aT1pKzEpIGJlZ2luIC8vIGNwLjQKLSAgICAgICAgdHlwZV9zY3IxX3NlYXJjaF9vbmVfMl9zIHRtcDsKLSAgICAgICAgdG1wID0gc2NyMV9sZWFkX3plcm9zX2NudF8yKHN0YWdlMV92ZFsoaSsxKSoyLTEtOjJdKTsKLSAgICAgICAgc3RhZ2UyX3ZkW2ldICA9IHRtcC52ZDsKLSAgICAgICAgc3RhZ2UyX2lkeFtpXSA9ICh0bXAuaWR4KSA/IHt0bXAuaWR4LCBzdGFnZTFfaWR4WzIqaV19IDoge3RtcC5pZHgsIHN0YWdlMV9pZHhbMippKzFdfTsKLSAgICBlbmQKLQotICAgIC8vIFN0YWdlIDMKLSAgICBmb3IgKGk9MDsgaTw0OyBpPWkrMSkgYmVnaW4gLy8gY3AuNAotICAgICAgICB0eXBlX3NjcjFfc2VhcmNoX29uZV8yX3MgdG1wOwotICAgICAgICB0bXAgPSBzY3IxX2xlYWRfemVyb3NfY250XzIoc3RhZ2UyX3ZkWyhpKzEpKjItMS06Ml0pOwotICAgICAgICBzdGFnZTNfdmRbaV0gID0gdG1wLnZkOwotICAgICAgICBzdGFnZTNfaWR4W2ldID0gKHRtcC5pZHgpID8ge3RtcC5pZHgsIHN0YWdlMl9pZHhbMippXX0gOiB7dG1wLmlkeCwgc3RhZ2UyX2lkeFsyKmkrMV19OwotICAgIGVuZAotCi0gICAgLy8gU3RhZ2UgNAotICAgIGZvciAoaT0wOyBpPDI7IGk9aSsxKSBiZWdpbiAvLyBjcC40Ci0gICAgICAgIHR5cGVfc2NyMV9zZWFyY2hfb25lXzJfcyB0bXA7Ci0gICAgICAgIHRtcCA9IHNjcjFfbGVhZF96ZXJvc19jbnRfMihzdGFnZTNfdmRbKGkrMSkqMi0xLToyXSk7Ci0gICAgICAgIHN0YWdlNF92ZFtpXSAgPSB0bXAudmQ7Ci0gICAgICAgIHN0YWdlNF9pZHhbaV0gPSAodG1wLmlkeCkgPyB7dG1wLmlkeCwgc3RhZ2UzX2lkeFsyKmldfSA6IHt0bXAuaWR4LCBzdGFnZTNfaWR4WzIqaSsxXX07Ci0gICAgZW5kCi0KLSAgICAvLyBTdGFnZSA1Ci0gICAgdG1wLnZkID0gfHN0YWdlNF92ZDsKLSAgICB0bXAuaWR4ID0gKHN0YWdlNF92ZFsxXSkgPyB7MSdiMCwgc3RhZ2U0X2lkeFsxXX0gOiB7MSdiMSwgc3RhZ2U0X2lkeFswXX07Ci0KLSAgICByZXMgPSB0bXAuaWR4OwotCi0gICAgc2NyMV9sZWFkX3plcm9zX2NudF8zMiA9IHJlczsKLWVuZAotZW5kZnVuY3Rpb24gCi0KLWBlbmRpZiAvLyBTQ1IxX1NFQVJDSF9NUzFfU1ZICmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV90YXBjLnN2aCBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX3RhcGMuc3ZoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGY1MDY4Li4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX3RhcGMuc3ZoCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiBTeW50YWNvcmUgTExDIKkgMjAxNi0yMDIxCi0vLyAKLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0vLyBTUERYLUZpbGVDb250cmlidXRvcjogU3ludGFjb3JlIExMQwotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLyBAZmlsZSAgICAgICA8c2NyMV90YXBjLnN2aD4KLS8vLyBAYnJpZWYgICAgICBUQVBDIGhlYWRlciBmaWxlCi0vLy8KLQotYGlmbmRlZiBTQ1IxX0lOQ0xVREVfVEFQQ19ERUZTCi1gZGVmaW5lIFNDUjFfSU5DTFVERV9UQVBDX0RFRlMKLQotYGluY2x1ZGUgInNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgiCi0KLWBpZmRlZiBTQ1IxX0RCR19FTgotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gUGFyYW1ldGVycwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWxvY2FscGFyYW0gaW50IHVuc2lnbmVkICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfVEFQX1NUQVRFX1dJRFRIICAgICAgICAgICAgPSA0OwotbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9UQVBfSU5TVFJVQ1RJT05fV0lEVEggICAgICA9IDU7Ci1sb2NhbHBhcmFtIGludCB1bnNpZ25lZCAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX1RBUF9EUl9JRENPREVfV0lEVEggICAgICAgID0gMzI7Ci1sb2NhbHBhcmFtIGludCB1bnNpZ25lZCAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX1RBUF9EUl9CTERfSURfV0lEVEggICAgICAgID0gMzI7Ci1sb2NhbHBhcmFtIGludCB1bnNpZ25lZCAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX1RBUF9EUl9CWVBBU1NfV0lEVEggICAgICAgID0gMTsKLS8vbG9jYWxwYXJhbSBiaXQgW1NDUjFfVEFQX0RSX0lEQ09ERV9XSURUSC0xOjBdICAgU0NSMV9UQVBfSURDT0RFX1JJU0NWX1NDICAgICAgICA9IGBTQ1IxX1RBUF9JRENPREU7Ci1sb2NhbHBhcmFtIGJpdCBbU0NSMV9UQVBfRFJfQkxEX0lEX1dJRFRILTE6MF0gICBTQ1IxX1RBUF9CTERfSURfVkFMVUUgICAgICAgICAgID0gYFNDUjFfTUlNUElEOwotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gVHlwZXMKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci10eXBlZGVmIGVudW0gbG9naWMgW1NDUjFfVEFQX1NUQVRFX1dJRFRILTE6MF0gewotICAgIFNDUjFfVEFQX1NUQVRFX1JFU0VULAotICAgIFNDUjFfVEFQX1NUQVRFX0lETEUsCi0gICAgU0NSMV9UQVBfU1RBVEVfRFJfU0VMX1NDQU4sCi0gICAgU0NSMV9UQVBfU1RBVEVfRFJfQ0FQVFVSRSwKLSAgICBTQ1IxX1RBUF9TVEFURV9EUl9TSElGVCwKLSAgICBTQ1IxX1RBUF9TVEFURV9EUl9FWElUMSwKLSAgICBTQ1IxX1RBUF9TVEFURV9EUl9QQVVTRSwKLSAgICBTQ1IxX1RBUF9TVEFURV9EUl9FWElUMiwKLSAgICBTQ1IxX1RBUF9TVEFURV9EUl9VUERBVEUsCi0gICAgU0NSMV9UQVBfU1RBVEVfSVJfU0VMX1NDQU4sCi0gICAgU0NSMV9UQVBfU1RBVEVfSVJfQ0FQVFVSRSwKLSAgICBTQ1IxX1RBUF9TVEFURV9JUl9TSElGVCwKLSAgICBTQ1IxX1RBUF9TVEFURV9JUl9FWElUMSwKLSAgICBTQ1IxX1RBUF9TVEFURV9JUl9QQVVTRSwKLSAgICBTQ1IxX1RBUF9TVEFURV9JUl9FWElUMiwKLSAgICBTQ1IxX1RBUF9TVEFURV9JUl9VUERBVEUKLWBpZmRlZiBTQ1IxX1hQUk9QX0VOCi0gICAgLAotICAgIFNDUjFfVEFQX1NUQVRFX1hYWCAgICAgICA9ICdYCi1gZW5kaWYgLy8gU0NSMV9YUFJPUF9FTgotfSB0eXBlX3NjcjFfdGFwX3N0YXRlX2U7Ci0KLXR5cGVkZWYgZW51bSBsb2dpYyBbU0NSMV9UQVBfSU5TVFJVQ1RJT05fV0lEVEggLSAxOjBdIHsKLSAgICBTQ1IxX1RBUF9JTlNUUl9JRENPREUgICAgICAgICAgICA9IDUnaDAxLAotICAgIFNDUjFfVEFQX0lOU1RSX0JMRF9JRCAgICAgICAgICAgID0gNSdoMDQsCi0gICAgU0NSMV9UQVBfSU5TVFJfU0NVX0FDQ0VTUyAgICAgICAgPSA1J2gwOSwKLQotICAgIFNDUjFfVEFQX0lOU1RSX0RUTUNTICAgICAgICAgICAgID0gNSdoMTAsCi0gICAgU0NSMV9UQVBfSU5TVFJfRE1JX0FDQ0VTUyAgICAgICAgPSA1J2gxMSwKLQotICAgIFNDUjFfVEFQX0lOU1RSX0JZUEFTUyAgICAgICAgICAgID0gNSdoMUYKLWBpZmRlZiBTQ1IxX1hQUk9QX0VOCi0gICAgLAotICAgIFNDUjFfVEFQX0lOU1RSX1hYWCAgICAgICAgICAgICAgID0gJ1gKLWBlbmRpZiAvLyBTQ1IxX1hQUk9QX0VOCi19IHR5cGVfc2NyMV90YXBfaW5zdHJfZTsKLQotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi1gZW5kaWYgLy8gU0NSMV9JTkNMVURFX1RBUENfREVGUwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2luY2x1ZGVzL3NjcjFfdGR1LnN2aCBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX3RkdS5zdmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkYTE2MTYuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2luY2x1ZGVzL3NjcjFfdGR1LnN2aAorKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIxCi0vLyAKLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0vLyBTUERYLUZpbGVDb250cmlidXRvcjogU3ludGFjb3JlIExMQwotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLyBAZmlsZSAgICAgICA8c2NyMV90ZHUuc3ZoPgotLy8vIEBicmllZiAgICAgIFRyaWdnZXIgRGVidWcgTW9kdWxlIGhlYWRlcgotLy8vCi0KLWBpZm5kZWYgU0NSMV9JTkNMVURFX1REVV9ERUZTCi1gZGVmaW5lIFNDUjFfSU5DTFVERV9URFVfREVGUwotCi0vL2BpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgotCi1gaWZkZWYgU0NSMV9URFVfRU4KLS8vYGluY2x1ZGUgInNjcjFfY3NyLnN2aCIKLQotYGluY2x1ZGUgInNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgiCi0vL2BpbmNsdWRlICJzY3IxX2FyY2hfdHlwZXMuc3ZoIgotYGluY2x1ZGUgInNjcjFfY3NyLnN2aCIKLQotcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfTVRSSUdfTlVNICAgICAgICAgICAgID0gU0NSMV9URFVfVFJJR19OVU07Ci1gaWZkZWYgU0NSMV9URFVfSUNPVU5UX0VOCi1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9BTExUUklHX05VTSAgICAgICAgICAgPSBTQ1IxX1REVV9NVFJJR19OVU0gKyAxJ2IxOwotYGVsc2UKLXBhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX0FMTFRSSUdfTlVNICAgICAgICAgICA9IFNDUjFfVERVX01UUklHX05VTTsKLWBlbmRpZgotCi1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9BRERSX1cgICAgICAgICAgICAgICAgPSBgU0NSMV9YTEVOOwotcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfREFUQV9XICAgICAgICAgICAgICAgID0gYFNDUjFfWExFTjsKLQotLy8gUmVnaXN0ZXIgbWFwCi1wYXJhbWV0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9URFVfT0ZGU19XICAgICAgICA9IDM7Ci1wYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1REVV9PRkZTX1ctMTowXSAgU0NSMV9DU1JfQUREUl9URFVfT0ZGU19UU0VMRUNUICA9ICdoMDsKLXBhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfVERVX09GRlNfVy0xOjBdICBTQ1IxX0NTUl9BRERSX1REVV9PRkZTX1REQVRBMSAgID0gJ2gxOwotcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9URFVfT0ZGU19XLTE6MF0gIFNDUjFfQ1NSX0FERFJfVERVX09GRlNfVERBVEEyICAgPSAnaDI7Ci1wYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1REVV9PRkZTX1ctMTowXSAgU0NSMV9DU1JfQUREUl9URFVfT0ZGU19USU5GTyAgICA9ICdoNDsKLQotCi1wYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9DU1JfQUREUl9URFVfVFNFTEVDVCAgICAgICA9IFNDUjFfQ1NSX0FERFJfVERVX01CQVNFICsgU0NSMV9DU1JfQUREUl9URFVfT0ZGU19UU0VMRUNUOwotcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfVERVX1REQVRBMSAgICAgICAgPSBTQ1IxX0NTUl9BRERSX1REVV9NQkFTRSArIFNDUjFfQ1NSX0FERFJfVERVX09GRlNfVERBVEExOwotcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfVERVX1REQVRBMiAgICAgICAgPSBTQ1IxX0NTUl9BRERSX1REVV9NQkFTRSArIFNDUjFfQ1NSX0FERFJfVERVX09GRlNfVERBVEEyOwotcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfVERVX1RJTkZPICAgICAgICAgPSBTQ1IxX0NTUl9BRERSX1REVV9NQkFTRSArIFNDUjFfQ1NSX0FERFJfVERVX09GRlNfVElORk87Ci0KLS8vIFREQVRBMQotcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfVERBVEExX1RZUEVfSEkgICAgICAgID0gYFNDUjFfWExFTi0xOwotcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfVERBVEExX1RZUEVfTE8gICAgICAgID0gYFNDUjFfWExFTi00OwotcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfVERBVEExX0RNT0RFICAgICAgICAgID0gYFNDUjFfWExFTi01OwotCi0vLyBUREFUQTE6IGNvbnN0YW50IGJpdHMgdmFsdWVzCi1wYXJhbWV0ZXIgYml0ICAgICAgICAgICBTQ1IxX1REVV9UREFUQTFfRE1PREVfVkFMICAgICAgPSAxJ2IwOwotCi0vLyBNQ09OVFJPTDogYml0cyBudW1iZXIKLXBhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX01DT05UUk9MX01BU0tNQVhfSEkgICA9IGBTQ1IxX1hMRU4tNjsKLXBhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX01DT05UUk9MX01BU0tNQVhfTE8gICA9IGBTQ1IxX1hMRU4tMTE7Ci1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9NQ09OVFJPTF9SRVNFUlZFREJfSEkgPSBgU0NSMV9YTEVOLTEyOwotcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfTUNPTlRST0xfUkVTRVJWRURCX0xPID0gMjE7Ci1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9NQ09OVFJPTF9ISVQgICAgICAgICAgPSAyMDsKLXBhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX01DT05UUk9MX1NFTEVDVCAgICAgICA9IDE5OwotcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfTUNPTlRST0xfVElNSU5HICAgICAgID0gMTg7Ci1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9NQ09OVFJPTF9BQ1RJT05fSEkgICAgPSAxNzsKLXBhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX01DT05UUk9MX0FDVElPTl9MTyAgICA9IDEyOwotcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfTUNPTlRST0xfQ0hBSU4gICAgICAgID0gMTE7Ci1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9NQ09OVFJPTF9NQVRDSF9ISSAgICAgPSAxMDsKLXBhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX01DT05UUk9MX01BVENIX0xPICAgICA9IDc7Ci1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9NQ09OVFJPTF9NICAgICAgICAgICAgPSA2OwotcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfTUNPTlRST0xfUkVTRVJWRURBICAgID0gNTsKLXBhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX01DT05UUk9MX1MgICAgICAgICAgICA9IDQ7Ci1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9NQ09OVFJPTF9VICAgICAgICAgICAgPSAzOwotcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfTUNPTlRST0xfRVhFQ1VURSAgICAgID0gMjsKLXBhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX01DT05UUk9MX1NUT1JFICAgICAgICA9IDE7Ci1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9NQ09OVFJPTF9MT0FEICAgICAgICAgPSAwOwotCi0vLyBNQ09OVFJPTDogY29uc3RhbnQgYml0cyB2YWx1ZXMKLXBhcmFtZXRlciBiaXQgW1NDUjFfVERVX1REQVRBMV9UWVBFX0hJLVNDUjFfVERVX1REQVRBMV9UWVBFX0xPOjBdCi0gICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX1REVV9NQ09OVFJPTF9UWVBFX1ZBTCAgICAgICAgICAgPSAyJ2QyOwotCi1wYXJhbWV0ZXIgYml0ICAgICAgICAgICBTQ1IxX1REVV9NQ09OVFJPTF9TRUxFQ1RfVkFMICAgICAgICAgPSAxJ2IwOwotcGFyYW1ldGVyIGJpdCAgICAgICAgICAgU0NSMV9URFVfTUNPTlRST0xfVElNSU5HX1ZBTCAgICAgICAgID0gMSdiMDsKLQotcGFyYW1ldGVyIGJpdCBbU0NSMV9URFVfTUNPTlRST0xfTUFTS01BWF9ISS1TQ1IxX1REVV9NQ09OVFJPTF9NQVNLTUFYX0xPOjBdCi0gICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX1REVV9NQ09OVFJPTF9NQVNLTUFYX1ZBTCAgICAgICAgPSAxJ2IwOwotCi1wYXJhbWV0ZXIgYml0ICAgICAgICAgICBTQ1IxX1REVV9NQ09OVFJPTF9SRVNFUlZFREFfVkFMICAgICAgPSAxJ2IwOwotCi0vLyBJQ09VTlQ6IGJpdHMgbnVtYmVyCi1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9JQ09VTlRfRE1PREUgICAgICAgICAgPSBgU0NSMV9YTEVOLTU7Ci1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9JQ09VTlRfUkVTRVJWRURCX0hJICAgPSBgU0NSMV9YTEVOLTY7Ci1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9JQ09VTlRfUkVTRVJWRURCX0xPICAgPSAyNTsKLXBhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX0lDT1VOVF9ISVQgICAgICAgICAgICA9IDI0OwotcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfSUNPVU5UX0NPVU5UX0hJICAgICAgID0gMjM7Ci1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9JQ09VTlRfQ09VTlRfTE8gICAgICAgPSAxMDsKLXBhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX0lDT1VOVF9NICAgICAgICAgICAgICA9IDk7Ci1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9JQ09VTlRfUkVTRVJWRURBICAgICAgPSA4OwotcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfSUNPVU5UX1MgICAgICAgICAgICAgID0gNzsKLXBhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX0lDT1VOVF9VICAgICAgICAgICAgICA9IDY7Ci1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9JQ09VTlRfQUNUSU9OX0hJICAgICAgPSA1OwotcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfSUNPVU5UX0FDVElPTl9MTyAgICAgID0gMDsKLQotLy8gSUNPVU5UOiBjb25zdGFudCBiaXRzIHZhbHVlcwotcGFyYW1ldGVyIGJpdCBbU0NSMV9URFVfVERBVEExX1RZUEVfSEktU0NSMV9URFVfVERBVEExX1RZUEVfTE86MF0KLSAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfVERVX0lDT1VOVF9UWVBFX1ZBTCAgICAgICAgICAgICA9IDInZDM7Ci0KLXBhcmFtZXRlciBiaXQgW1NDUjFfVERVX0lDT1VOVF9SRVNFUlZFREJfSEktU0NSMV9URFVfSUNPVU5UX1JFU0VSVkVEQl9MTzowXQotICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9URFVfSUNPVU5UX1JFU0VSVkVEQl9WQUwgICAgICAgID0gMSdiMDsKLQotcGFyYW1ldGVyIGJpdCAgICAgICAgICAgU0NSMV9URFVfSUNPVU5UX1JFU0VSVkVEQV9WQUwgICAgICAgID0gMSdiMDsKLQotLy8gQ1BVIHBpcGVsaW5lIG1vbml0b3JzCi10eXBlZGVmIHN0cnVjdCBwYWNrZWQgewotICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZkOwotICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcTsKLSAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyOwotfSB0eXBlX3NjcjFfYnJrbV9pbnN0cl9tb25fczsKLQotdHlwZWRlZiBzdHJ1Y3QgcGFja2VkIHsKLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZDsKLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkOwotICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlOwotICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHI7Ci19IHR5cGVfc2NyMV9icmttX2xzdV9tb25fczsKLQotYGVuZGlmIC8vIFNDUjFfVERVX0VOCi0KLWBlbmRpZiAvLyBTQ1IxX0lOQ0xVREVfVERVX0RFRlMKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX3diLnN2aCBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX3diLnN2aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzA2MTEwMy4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV93Yi5zdmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhCi0vLyAKLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0vLyBTUERYLUZpbGVDb250cmlidXRvcjogRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICB5aWZpdmUgV2lzaGJvbmUgZGVmaW5lIGZvciBzeW50YWNvcmUgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgeWlmaXZlIGNvcmVzIHByb2plY3QgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS95aWZpdmVfcjAuZ2l0ICAgICAgICAgICAgICAvLy8vCi0vLy8vICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMveWlmaXZlLyAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBEZXNjcmlwdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICBpbnRlZ3JhdGVkIHdpc2hib25lIGkvZiB0byBTeW50YWNvcmUsc2NyMSBjb3JlICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgIHYwOiAgICBKdW5lIDcsIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgd2lzaGJvbmUgZGVmaW5lIGFkZGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KLS8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KLS8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KLS8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KLS8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KLS8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KLS8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KLS8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KLS8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KLS8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KLS8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KLS8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KLS8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KLS8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vICAgICBPcmdpbmFsIG93bmVyIERldGFpbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLyBDb3B5cmlnaHQgYnkgU3ludGFjb3JlIExMQyCpIDIwMTYtMjAyMS4gU2VlIExJQ0VOU0UgZm9yIGRldGFpbHMvLy8KLS8vLyBAZmlsZSAgICAgICA8c2NyMV9haGIuc3ZoPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8KLS8vLyBAYnJpZWYgICAgICBXQiBoZWFkZXIgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi1gaWZuZGVmIFNDUjFfV0JfU1ZICi1gZGVmaW5lIFNDUjFfV0JfU1ZICi0KLWBpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgotCi1wYXJhbWV0ZXIgU0NSMV9XQl9XSURUSCAgPSAzMjsKLQotLy8gRW5jb2RpbmcgZm9yIERBVEEgU0laRQotcGFyYW1ldGVyIGxvZ2ljIFsyOjBdIFNDUjFfRFNJWkVfOEIgICAgPSAzJ2IwMDA7Ci1wYXJhbWV0ZXIgbG9naWMgWzI6MF0gU0NSMV9EU0laRV8xNkIgICA9IDMnYjAwMTsKLXBhcmFtZXRlciBsb2dpYyBbMjowXSBTQ1IxX0RTSVpFXzMyQiAgID0gMydiMDEwOwotCi1gZW5kaWYgLy8gU0NSMV9XQl9TVkgKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9ydW5fbW9kZW1zaW0gYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvcnVuX21vZGVtc2ltCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA1MTkxMGU5Li4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9ydW5fbW9kZW1zaW0KKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotIyAvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQotIyAvLyAKLSMgLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jIC8vCi0jIC8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jIC8vCi0jIC8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0jIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0jIC8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgotIyAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotdmxpYiB3b3JrCi12bG9nIC1mIHdiX3RvcC5maWxlcyAtZiBjb3JlLmZpbGVzICtpbmNkaXIraW5jbHVkZXMgLXN2CmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvdG9wL3NjcjFfZG1lbV9haGIuc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvdG9wL3NjcjFfZG1lbV9haGIuc3YKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzOTU4YjEuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL3RvcC9zY3IxX2RtZW1fYWhiLnN2CisrKyAvZGV2L251bGwKQEAgLTEsNDgyICswLDAgQEAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjEKLS8vIAotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKLS8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBTeW50YWNvcmUgTExDCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vIEBmaWxlICAgICAgIDxzY3IxX2RtZW1fYWhiLnN2PgotLy8vIEBicmllZiAgICAgIERhdGEgbWVtb3J5IEFIQiBicmlkZ2UKLS8vLwotCi1gaW5jbHVkZSAic2NyMV9haGIuc3ZoIgotYGluY2x1ZGUgInNjcjFfbWVtaWYuc3ZoIgotCi1tb2R1bGUgc2NyMV9kbWVtX2FoYiAoCi0gICAgLy8gQ29udHJvbCBTaWduYWxzCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGssCi0KLSAgICAvLyBDb3JlIEludGVyZmFjZQotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWVtX3JlcV9hY2ssCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW1fcmVxLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWVtX2NtZCwKLSAgICBpbnB1dCAgIGxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgZG1lbV93aWR0aCwKLSAgICBpbnB1dCAgIGxvZ2ljICAgW1NDUjFfQUhCX1dJRFRILTE6MF0gICAgZG1lbV9hZGRyLAotICAgIGlucHV0ICAgbG9naWMgICBbU0NSMV9BSEJfV0lEVEgtMTowXSAgICBkbWVtX3dkYXRhLAotICAgIG91dHB1dCAgbG9naWMgICBbU0NSMV9BSEJfV0lEVEgtMTowXSAgICBkbWVtX3JkYXRhLAotICAgIG91dHB1dCAgbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICBkbWVtX3Jlc3AsCi0KLSAgICAvLyBBSEIgSW50ZXJmYWNlCi0gICAgb3V0cHV0ICBsb2dpYyAgIFszOjBdICAgICAgICAgICAgICAgICAgIGhwcm90LAotICAgIG91dHB1dCAgbG9naWMgICBbMjowXSAgICAgICAgICAgICAgICAgICBoYnVyc3QsCi0gICAgb3V0cHV0ICBsb2dpYyAgIFsyOjBdICAgICAgICAgICAgICAgICAgIGhzaXplLAotICAgIG91dHB1dCAgbG9naWMgICBbMTowXSAgICAgICAgICAgICAgICAgICBodHJhbnMsCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhtYXN0bG9jaywKLSAgICBvdXRwdXQgIGxvZ2ljICAgW1NDUjFfQUhCX1dJRFRILTE6MF0gICAgaGFkZHIsCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3cml0ZSwKLSAgICBvdXRwdXQgIGxvZ2ljICAgW1NDUjFfQUhCX1dJRFRILTE6MF0gICAgaHdkYXRhLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVhZHksCi0gICAgaW5wdXQgICBsb2dpYyAgIFtTQ1IxX0FIQl9XSURUSC0xOjBdICAgIGhyZGF0YSwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlc3AKLQotKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCBQYXJhbWV0ZXJzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWBpZm5kZWYgU0NSMV9ETUVNX0FIQl9PVVRfQlAKLWxvY2FscGFyYW0gIFNDUjFfRklGT19XSURUSCA9IDI7Ci1sb2NhbHBhcmFtICBTQ1IxX0ZJRk9fQ05UX1dJRFRIID0gJGNsb2cyKFNDUjFfRklGT19XSURUSCsxKTsKLWBlbmRpZiAvLyBTQ1IxX0RNRU1fQUhCX09VVF9CUAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHR5cGUgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdHlwZWRlZiBlbnVtIGxvZ2ljIHsKLSAgICBTQ1IxX0ZTTV9BRERSID0gMSdiMCwKLSAgICBTQ1IxX0ZTTV9EQVRBID0gMSdiMSwKLSAgICBTQ1IxX0ZTTV9FUlIgID0gMSdieAotfSB0eXBlX3NjcjFfZnNtX2U7Ci0KLXR5cGVkZWYgc3RydWN0IHBhY2tlZCB7Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBod3JpdGU7Ci0gICAgbG9naWMgICBbMjowXSAgICAgICAgICAgICAgICAgICBod2lkdGg7Ci0gICAgbG9naWMgICBbU0NSMV9BSEJfV0lEVEgtMTowXSAgICBoYWRkcjsKLSAgICBsb2dpYyAgIFtTQ1IxX0FIQl9XSURUSC0xOjBdICAgIGh3ZGF0YTsKLX0gdHlwZV9zY3IxX3JlcV9maWZvX3M7Ci0KLXR5cGVkZWYgc3RydWN0IHBhY2tlZCB7Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBod3JpdGU7Ci0gICAgbG9naWMgICBbMjowXSAgICAgICAgICAgICAgICAgICBod2lkdGg7Ci0gICAgbG9naWMgICBbMTowXSAgICAgICAgICAgICAgICAgICBoYWRkcjsKLSAgICBsb2dpYyAgIFtTQ1IxX0FIQl9XSURUSC0xOjBdICAgIGh3ZGF0YTsKLX0gdHlwZV9zY3IxX2RhdGFfZmlmb19zOwotCi10eXBlZGVmIHN0cnVjdCBwYWNrZWQgewotICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlc3A7Ci0gICAgbG9naWMgICBbMjowXSAgICAgICAgICAgICAgICAgICBod2lkdGg7Ci0gICAgbG9naWMgICBbMTowXSAgICAgICAgICAgICAgICAgICBoYWRkcjsKLSAgICBsb2dpYyAgIFtTQ1IxX0FIQl9XSURUSC0xOjBdICAgIGhyZGF0YTsKLX0gdHlwZV9zY3IxX3Jlc3BfZmlmb19zOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIGZ1bmN0aW9ucwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1mdW5jdGlvbiBhdXRvbWF0aWMgbG9naWMgICBbMjowXSBzY3IxX2NvbnZfbWVtMmFoYl93aWR0aCAoCi0gICAgaW5wdXQgICBsb2dpYyBbMTowXSAgICAgICAgICAgICAgZG1lbV93aWR0aAotKTsKLSAgICBsb2dpYyAgIFsyOjBdICAgdG1wOwotYmVnaW4KLSAgICBjYXNlIChkbWVtX3dpZHRoKQotICAgICAgICBTQ1IxX01FTV9XSURUSF9CWVRFIDogYmVnaW4KLSAgICAgICAgICAgIHRtcCA9IFNDUjFfSFNJWkVfOEI7Ci0gICAgICAgIGVuZAotICAgICAgICBTQ1IxX01FTV9XSURUSF9IV09SRCA6IGJlZ2luCi0gICAgICAgICAgICB0bXAgPSBTQ1IxX0hTSVpFXzE2QjsKLSAgICAgICAgZW5kCi0gICAgICAgIFNDUjFfTUVNX1dJRFRIX1dPUkQgOiBiZWdpbgotICAgICAgICAgICAgdG1wID0gU0NSMV9IU0laRV8zMkI7Ci0gICAgICAgIGVuZAotICAgICAgICBkZWZhdWx0IDogYmVnaW4KLSAgICAgICAgICAgIHRtcCA9IFNDUjFfSFNJWkVfRVJSOwotICAgICAgICBlbmQKLSAgICBlbmRjYXNlCi0gICAgc2NyMV9jb252X21lbTJhaGJfd2lkdGggPSAgdG1wOyAvLyBjcC4xMQotZW5kCi1lbmRmdW5jdGlvbgotCi1mdW5jdGlvbiBhdXRvbWF0aWMgbG9naWNbU0NSMV9BSEJfV0lEVEgtMTowXSBzY3IxX2NvbnZfbWVtMmFoYl93ZGF0YSAoCi0gICAgaW5wdXQgICBsb2dpYyAgIFsxOjBdICAgICAgICAgICAgICAgICAgIGRtZW1fYWRkciwKLSAgICBpbnB1dCAgIGxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgZG1lbV93aWR0aCwKLSAgICBpbnB1dCAgIGxvZ2ljICAgW1NDUjFfQUhCX1dJRFRILTE6MF0gICAgZG1lbV93ZGF0YQotKTsKLSAgICBsb2dpYyAgIFtTQ1IxX0FIQl9XSURUSC0xOjBdICB0bXA7Ci1iZWdpbgotICAgIHRtcCA9ICd4OwotICAgIGNhc2UgKGRtZW1fd2lkdGgpCi0gICAgICAgIFNDUjFfTUVNX1dJRFRIX0JZVEUgOiBiZWdpbgotICAgICAgICAgICAgY2FzZSAoZG1lbV9hZGRyKQotICAgICAgICAgICAgICAgIDInYjAwIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgdG1wWzc6MF0gICA9IGRtZW1fd2RhdGFbNzowXTsKLSAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAyJ2IwMSA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgIHRtcFsxNTo4XSAgPSBkbWVtX3dkYXRhWzc6MF07Ci0gICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgMidiMTAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICB0bXBbMjM6MTZdID0gZG1lbV93ZGF0YVs3OjBdOwotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgIDInYjExIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgdG1wWzMxOjI0XSA9IGRtZW1fd2RhdGFbNzowXTsKLSAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICBkZWZhdWx0IDogYmVnaW4KLSAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIGVuZGNhc2UKLSAgICAgICAgZW5kCi0gICAgICAgIFNDUjFfTUVNX1dJRFRIX0hXT1JEIDogYmVnaW4KLSAgICAgICAgICAgIGNhc2UgKGRtZW1fYWRkclsxXSkKLSAgICAgICAgICAgICAgICAxJ2IwIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgdG1wWzE1OjBdICA9IGRtZW1fd2RhdGFbMTU6MF07Ci0gICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgMSdiMSA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgIHRtcFszMToxNl0gPSBkbWVtX3dkYXRhWzE1OjBdOwotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgIGRlZmF1bHQgOiBiZWdpbgotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZW5kY2FzZQotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9NRU1fV0lEVEhfV09SRCA6IGJlZ2luCi0gICAgICAgICAgICB0bXAgPSBkbWVtX3dkYXRhOwotICAgICAgICBlbmQKLSAgICAgICAgZGVmYXVsdCA6IGJlZ2luCi0gICAgICAgIGVuZAotICAgIGVuZGNhc2UKLSAgICBzY3IxX2NvbnZfbWVtMmFoYl93ZGF0YSA9IHRtcDsKLWVuZAotZW5kZnVuY3Rpb24KLQotZnVuY3Rpb24gYXV0b21hdGljIGxvZ2ljW1NDUjFfQUhCX1dJRFRILTE6MF0gc2NyMV9jb252X2FoYjJtZW1fcmRhdGEgKAotICAgIGlucHV0ICAgbG9naWMgWzI6MF0gICAgICAgICAgICAgICAgIGh3aWR0aCwKLSAgICBpbnB1dCAgIGxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICBoYWRkciwKLSAgICBpbnB1dCAgIGxvZ2ljIFtTQ1IxX0FIQl9XSURUSC0xOjBdICBocmRhdGEKLSk7Ci0gICAgbG9naWMgICBbU0NSMV9BSEJfV0lEVEgtMTowXSAgdG1wOwotYmVnaW4KLSAgICB0bXAgPSAneDsKLSAgICBjYXNlIChod2lkdGgpCi0gICAgICAgIFNDUjFfSFNJWkVfOEIgOiBiZWdpbgotICAgICAgICAgICAgY2FzZSAoaGFkZHIpCi0gICAgICAgICAgICAgICAgMidiMDAgOiB0bXBbNzowXSA9IGhyZGF0YVs3OjBdOwotICAgICAgICAgICAgICAgIDInYjAxIDogdG1wWzc6MF0gPSBocmRhdGFbMTU6OF07Ci0gICAgICAgICAgICAgICAgMidiMTAgOiB0bXBbNzowXSA9IGhyZGF0YVsyMzoxNl07Ci0gICAgICAgICAgICAgICAgMidiMTEgOiB0bXBbNzowXSA9IGhyZGF0YVszMToyNF07Ci0gICAgICAgICAgICAgICAgZGVmYXVsdCA6IGJlZ2luCi0gICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBlbmRjYXNlCi0gICAgICAgIGVuZAotICAgICAgICBTQ1IxX0hTSVpFXzE2QiA6IGJlZ2luCi0gICAgICAgICAgICBjYXNlIChoYWRkclsxXSkKLSAgICAgICAgICAgICAgICAxJ2IwIDogdG1wWzE1OjBdID0gaHJkYXRhWzE1OjBdOwotICAgICAgICAgICAgICAgIDEnYjEgOiB0bXBbMTU6MF0gPSBocmRhdGFbMzE6MTZdOwotICAgICAgICAgICAgICAgIGRlZmF1bHQgOiBiZWdpbgotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZW5kY2FzZQotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9IU0laRV8zMkIgOiBiZWdpbgotICAgICAgICAgICAgdG1wID0gaHJkYXRhOwotICAgICAgICBlbmQKLSAgICAgICAgZGVmYXVsdCA6IGJlZ2luCi0gICAgICAgIGVuZAotICAgIGVuZGNhc2UKLSAgICBzY3IxX2NvbnZfYWhiMm1lbV9yZGF0YSA9IHRtcDsKLWVuZAotZW5kZnVuY3Rpb24KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCBzaWduYWwgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdHlwZV9zY3IxX2ZzbV9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmc207Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9maWZvX3JkOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFfZmlmb193cjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxX2ZpZm9fdXA7Ci1gaWZkZWYgU0NSMV9ETUVNX0FIQl9PVVRfQlAKLXR5cGVfc2NyMV9yZXFfZmlmb19zICAgICAgICAgICAgICAgICAgICAgICAgcmVxX2ZpZm9fbmV3OwotdHlwZV9zY3IxX3JlcV9maWZvX3MgICAgICAgICAgICAgICAgICAgICAgICByZXFfZmlmb19yOwotdHlwZV9zY3IxX3JlcV9maWZvX3MgWzA6MF0gICAgICAgICAgICAgICAgICByZXFfZmlmbzsKLWBlbHNlIC8vIFNDUjFfRE1FTV9BSEJfT1VUX0JQCi10eXBlX3NjcjFfcmVxX2ZpZm9fcyBbMDpTQ1IxX0ZJRk9fV0lEVEgtMV0gIHJlcV9maWZvOwotdHlwZV9zY3IxX3JlcV9maWZvX3MgWzA6U0NSMV9GSUZPX1dJRFRILTFdICByZXFfZmlmb19uZXc7Ci1sb2dpYyAgICAgICBbU0NSMV9GSUZPX0NOVF9XSURUSC0xOjBdICAgICAgIHJlcV9maWZvX2NudDsKLWxvZ2ljICAgICAgIFtTQ1IxX0ZJRk9fQ05UX1dJRFRILTE6MF0gICAgICAgcmVxX2ZpZm9fY250X25ldzsKLWBlbmRpZiAvLyBTQ1IxX0RNRU1fQUhCX09VVF9CUAotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFfZmlmb19lbXB0eTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxX2ZpZm9fZnVsbDsKLQotdHlwZV9zY3IxX2RhdGFfZmlmb19zICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2ZpZm87Ci10eXBlX3NjcjFfcmVzcF9maWZvX3MgICAgICAgICAgICAgICAgICAgICAgIHJlc3BfZmlmbzsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcF9maWZvX2hyZWFkeTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBJbnRlcmZhY2UgdG8gQ29yZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1hc3NpZ24gZG1lbV9yZXFfYWNrID0gfnJlcV9maWZvX2Z1bGw7Ci1hc3NpZ24gcmVxX2ZpZm9fd3IgID0gfnJlcV9maWZvX2Z1bGwgJiBkbWVtX3JlcTsKLQotYXNzaWduIGRtZW1fcmRhdGEgPSBzY3IxX2NvbnZfYWhiMm1lbV9yZGF0YShyZXNwX2ZpZm8uaHdpZHRoLCByZXNwX2ZpZm8uaGFkZHIsIHJlc3BfZmlmby5ocmRhdGEpOwotCi1hc3NpZ24gZG1lbV9yZXNwID0gKHJlc3BfZmlmb19ocmVhZHkpCi0gICAgICAgICAgICAgICAgICAgID8gKHJlc3BfZmlmby5ocmVzcCA9PSBTQ1IxX0hSRVNQX09LQVkpCi0gICAgICAgICAgICAgICAgICAgICAgICA/IFNDUjFfTUVNX1JFU1BfUkRZX09LCi0gICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfTUVNX1JFU1BfUkRZX0VSCi0gICAgICAgICAgICAgICAgICAgIDogU0NSMV9NRU1fUkVTUF9OT1RSRFkgOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJFUV9GSUZPCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWBpZmRlZiBTQ1IxX0RNRU1fQUhCX09VVF9CUAotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgcmVxX2ZpZm9fZnVsbCA8PSAxJ2IwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGlmICh+cmVxX2ZpZm9fZnVsbCkgYmVnaW4KLSAgICAgICAgICAgIHJlcV9maWZvX2Z1bGwgPD0gZG1lbV9yZXEgJiB+cmVxX2ZpZm9fcmQ7Ci0gICAgICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgICAgICByZXFfZmlmb19mdWxsIDw9IH5yZXFfZmlmb19yZDsKLSAgICAgICAgZW5kCi0gICAgZW5kCi1lbmQKLWFzc2lnbiByZXFfZmlmb19lbXB0eSA9IH4ocmVxX2ZpZm9fZnVsbCB8IGRtZW1fcmVxKTsKLQotYXNzaWduIHJlcV9maWZvX3VwID0gfnJlcV9maWZvX3JkICYgcmVxX2ZpZm9fd3I7Ci1hbHdheXNfZmYgQChwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAocmVxX2ZpZm9fdXApIGJlZ2luCi0gICAgICAgIHJlcV9maWZvX3IgPD0gcmVxX2ZpZm9fbmV3OwotICAgIGVuZAotZW5kCi0KLWFzc2lnbiByZXFfZmlmb19uZXcuaHdyaXRlID0gZG1lbV9yZXEgPyAoZG1lbV9jbWQgPT0gU0NSMV9NRU1fQ01EX1dSKSAgICAgICA6IDEnYjA7Ci1hc3NpZ24gcmVxX2ZpZm9fbmV3Lmh3aWR0aCA9IGRtZW1fcmVxID8gc2NyMV9jb252X21lbTJhaGJfd2lkdGgoZG1lbV93aWR0aCkgOiAnMDsKLWFzc2lnbiByZXFfZmlmb19uZXcuaGFkZHIgID0gZG1lbV9yZXEgPyBkbWVtX2FkZHIgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcwOwotYXNzaWduIHJlcV9maWZvX25ldy5od2RhdGEgPSAoZG1lbV9yZXEgJiAoZG1lbV9jbWQgPT0gU0NSMV9NRU1fQ01EX1dSKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzY3IxX2NvbnZfbWVtMmFoYl93ZGF0YShkbWVtX2FkZHJbMTowXSwgZG1lbV93aWR0aCwgZG1lbV93ZGF0YSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnMDsKLWFzc2lnbiByZXFfZmlmb1swXSA9IChyZXFfZmlmb19mdWxsKSA/IHJlcV9maWZvX3I6IHJlcV9maWZvX25ldzsKLQotYGVsc2UgLy8gU0NSMV9ETUVNX0FIQl9PVVRfQlAKLWFsd2F5c19jb21iIGJlZ2luCi0gICAgcmVxX2ZpZm9fdXAgICAgICA9IDEnYjA7Ci0gICAgcmVxX2ZpZm9fY250X25ldyA9IHJlcV9maWZvX2NudDsKLSAgICByZXFfZmlmb19uZXcgICAgID0gcmVxX2ZpZm87Ci0gICAgY2FzZSAoe3JlcV9maWZvX3JkLCByZXFfZmlmb193cn0pCi0gICAgICAgIDInYjAwIDogYmVnaW4KLSAgICAgICAgICAgIC8vIG5vdGhpbmcgdG9kbwotICAgICAgICBlbmQKLSAgICAgICAgMidiMDE6IGJlZ2luCi0gICAgICAgICAgICAvLyBGSUZPIHdyaXRlCi0gICAgICAgICAgICByZXFfZmlmb191cCA9IDEnYjE7Ci0gICAgICAgICAgICByZXFfZmlmb19uZXdbcmVxX2ZpZm9fY250XS5od3JpdGUgPSAoZG1lbV9jbWQgPT0gU0NSMV9NRU1fQ01EX1dSKTsKLSAgICAgICAgICAgIHJlcV9maWZvX25ld1tyZXFfZmlmb19jbnRdLmh3aWR0aCA9IHNjcjFfY29udl9tZW0yYWhiX3dpZHRoKGRtZW1fd2lkdGgpOwotICAgICAgICAgICAgcmVxX2ZpZm9fbmV3W3JlcV9maWZvX2NudF0uaGFkZHIgID0gZG1lbV9hZGRyOwotICAgICAgICAgICAgcmVxX2ZpZm9fbmV3W3JlcV9maWZvX2NudF0uaHdkYXRhID0gc2NyMV9jb252X21lbTJhaGJfd2RhdGEoZG1lbV9hZGRyWzE6MF0sIGRtZW1fd2lkdGgsIGRtZW1fd2RhdGEpOwotICAgICAgICAgICAgcmVxX2ZpZm9fY250X25ldyA9IHJlcV9maWZvX2NudCArIDEnYjE7Ci0gICAgICAgIGVuZAotICAgICAgICAyJ2IxMCA6IGJlZ2luCi0gICAgICAgICAgICAvLyBGSUZPIHJlYWQKLSAgICAgICAgICAgIHJlcV9maWZvX3VwID0gMSdiMTsKLSAgICAgICAgICAgIHJlcV9maWZvX25ld1swXSA9IHJlcV9maWZvX25ld1sxXTsKLSAgICAgICAgICAgIHJlcV9maWZvX25ld1sxXS5od3JpdGUgPSAxJ2IwOwotICAgICAgICAgICAgcmVxX2ZpZm9fbmV3WzFdLmh3aWR0aCA9IFNDUjFfSFNJWkVfMzJCOwotICAgICAgICAgICAgcmVxX2ZpZm9fbmV3WzFdLmhhZGRyICA9ICd4OwotICAgICAgICAgICAgcmVxX2ZpZm9fbmV3WzFdLmh3ZGF0YSA9ICd4OwotICAgICAgICAgICAgcmVxX2ZpZm9fY250X25ldyA9IHJlcV9maWZvX2NudCAtIDEnYjE7Ci0gICAgICAgIGVuZAotICAgICAgICAyJ2IxMSA6IGJlZ2luCi0gICAgICAgICAgICAvLyBSZWFkIGFuZCBXcml0ZSBGSUZPLiBJdCBpcyBwb3NzaWJsZSBvbmx5IHdoZW4gZmlmb19jbnQgPSAxCi0gICAgICAgICAgICByZXFfZmlmb191cCA9IDEnYjE7Ci0gICAgICAgICAgICByZXFfZmlmb19uZXdbMF0uaHdyaXRlID0gKGRtZW1fY21kID09IFNDUjFfTUVNX0NNRF9XUik7Ci0gICAgICAgICAgICByZXFfZmlmb19uZXdbMF0uaHdpZHRoID0gc2NyMV9jb252X21lbTJhaGJfd2lkdGgoZG1lbV93aWR0aCk7Ci0gICAgICAgICAgICByZXFfZmlmb19uZXdbMF0uaGFkZHIgID0gZG1lbV9hZGRyOwotICAgICAgICAgICAgcmVxX2ZpZm9fbmV3WzBdLmh3ZGF0YSA9IHNjcjFfY29udl9tZW0yYWhiX3dkYXRhKGRtZW1fYWRkclsxOjBdLCBkbWVtX3dpZHRoLCBkbWVtX3dkYXRhKTsKLSAgICAgICAgZW5kCi0gICAgICAgIGRlZmF1bHQgOiBiZWdpbgotICAgICAgICAgICAgcmVxX2ZpZm9fdXAgICAgICA9ICd4OwotICAgICAgICAgICAgcmVxX2ZpZm9fY250X25ldyA9ICd4OwotICAgICAgICAgICAgcmVxX2ZpZm9fbmV3ICAgICA9ICd4OwotICAgICAgICBlbmQKLSAgICBlbmRjYXNlCi1lbmQKLQotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgcmVxX2ZpZm9fY250IDw9ICcwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGlmIChyZXFfZmlmb191cCkgYmVnaW4KLSAgICAgICAgICAgIHJlcV9maWZvX2NudCA8PSByZXFfZmlmb19jbnRfbmV3OwotICAgICAgICBlbmQKLSAgICBlbmQKLWVuZAotYXNzaWduIHJlcV9maWZvX2Z1bGwgID0gKHJlcV9maWZvX2NudCA9PSBTQ1IxX0ZJRk9fV0lEVEgpOwotYXNzaWduIHJlcV9maWZvX2VtcHR5ID0gfih8cmVxX2ZpZm9fY250KTsKLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKHJlcV9maWZvX3VwKSBiZWdpbgotICAgICAgICByZXFfZmlmbyA8PSByZXFfZmlmb19uZXc7Ci0gICAgZW5kCi1lbmQKLWBlbmRpZiAvLyBTQ1IxX0RNRU1fQUhCX09VVF9CUAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBGU00KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgZnNtIDw9IFNDUjFfRlNNX0FERFI7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgY2FzZSAoZnNtKQotICAgICAgICAgICAgU0NSMV9GU01fQUREUiA6IGJlZ2luCi0gICAgICAgICAgICAgICAgaWYgKGhyZWFkeSkgYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgZnNtIDw9IChyZXFfZmlmb19lbXB0eSkgPyBTQ1IxX0ZTTV9BRERSIDogU0NSMV9GU01fREFUQTsKLSAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgU0NSMV9GU01fREFUQSA6IGJlZ2luCi0gICAgICAgICAgICAgICAgaWYgKGhyZWFkeSkgYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGhyZXNwID09IFNDUjFfSFJFU1BfT0tBWSkgYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGZzbSA8PSAocmVxX2ZpZm9fZW1wdHkpID8gU0NSMV9GU01fQUREUiA6IFNDUjFfRlNNX0RBVEE7Ci0gICAgICAgICAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICBmc20gPD0gU0NSMV9GU01fQUREUjsKLSAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIGRlZmF1bHQgOiBiZWdpbgotICAgICAgICAgICAgICAgIGZzbSA8PSBTQ1IxX0ZTTV9FUlI7Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kY2FzZQotICAgIGVuZAotZW5kCi0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgcmVxX2ZpZm9fcmQgPSAxJ2IwOwotICAgIGNhc2UgKGZzbSkKLSAgICAgICAgU0NSMV9GU01fQUREUiA6IGJlZ2luCi0gICAgICAgICAgICBpZiAoaHJlYWR5KSBiZWdpbgotICAgICAgICAgICAgICAgIHJlcV9maWZvX3JkID0gfnJlcV9maWZvX2VtcHR5OwotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZAotICAgICAgICBTQ1IxX0ZTTV9EQVRBIDogYmVnaW4KLSAgICAgICAgICAgIGlmIChocmVhZHkpIGJlZ2luCi0gICAgICAgICAgICAgICAgcmVxX2ZpZm9fcmQgPSB+cmVxX2ZpZm9fZW1wdHkgJiAoaHJlc3AgPT0gU0NSMV9IUkVTUF9PS0FZKTsKLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmQKLSAgICAgICAgZGVmYXVsdCA6IGJlZ2luCi0gICAgICAgICAgICByZXFfZmlmb19yZCA9IDEnYng7Ci0gICAgICAgIGVuZAotICAgIGVuZGNhc2UKLWVuZAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEZJRk8gZGF0YQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBjYXNlIChmc20pCi0gICAgICAgIFNDUjFfRlNNX0FERFIgOiBiZWdpbgotICAgICAgICAgICAgaWYgKH5yZXFfZmlmb19lbXB0eSkgYmVnaW4KLSAgICAgICAgICAgICAgICBkYXRhX2ZpZm8uaHdyaXRlIDw9IHJlcV9maWZvWzBdLmh3cml0ZTsKLSAgICAgICAgICAgICAgICBkYXRhX2ZpZm8uaHdpZHRoIDw9IHJlcV9maWZvWzBdLmh3aWR0aDsKLSAgICAgICAgICAgICAgICBkYXRhX2ZpZm8uaGFkZHIgIDw9IHJlcV9maWZvWzBdLmhhZGRyWzE6MF07Ci0gICAgICAgICAgICAgICAgZGF0YV9maWZvLmh3ZGF0YSA8PSByZXFfZmlmb1swXS5od2RhdGE7Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kCi0gICAgICAgIFNDUjFfRlNNX0RBVEEgOiBiZWdpbgotICAgICAgICAgICAgaWYgKGhyZWFkeSkgYmVnaW4KLSAgICAgICAgICAgICAgICBpZiAoaHJlc3AgPT0gU0NSMV9IUkVTUF9PS0FZKSBiZWdpbgotICAgICAgICAgICAgICAgICAgICBpZiAofnJlcV9maWZvX2VtcHR5KSBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9maWZvLmh3cml0ZSA8PSByZXFfZmlmb1swXS5od3JpdGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2ZpZm8uaHdpZHRoIDw9IHJlcV9maWZvWzBdLmh3aWR0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfZmlmby5oYWRkciAgPD0gcmVxX2ZpZm9bMF0uaGFkZHJbMTowXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfZmlmby5od2RhdGEgPD0gcmVxX2ZpZm9bMF0uaHdkYXRhOwotICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmQKLSAgICAgICAgZGVmYXVsdCA6IGJlZ2luCi0gICAgICAgIGVuZAotICAgIGVuZGNhc2UKLWVuZAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEZJRk8gcmVzcG9uc2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotYGlmZGVmIFNDUjFfRE1FTV9BSEJfSU5fQlAKLWFzc2lnbiByZXNwX2ZpZm9faHJlYWR5ID0gKGZzbSA9PSBTQ1IxX0ZTTV9EQVRBKSA/IGhyZWFkeSA6IDEnYjA7Ci1hc3NpZ24gcmVzcF9maWZvLmhyZXNwICA9IGhyZXNwOwotYXNzaWduIHJlc3BfZmlmby5od2lkdGggPSBkYXRhX2ZpZm8uaHdpZHRoOwotYXNzaWduIHJlc3BfZmlmby5oYWRkciAgPSBkYXRhX2ZpZm8uaGFkZHI7Ci1hc3NpZ24gcmVzcF9maWZvLmhyZGF0YSA9IGhyZGF0YTsKLWBlbHNlIC8vIFNDUjFfRE1FTV9BSEJfSU5fQlAKLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIHJlc3BfZmlmb19ocmVhZHkgPD0gMSdiMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICByZXNwX2ZpZm9faHJlYWR5IDw9IChmc20gPT0gU0NSMV9GU01fREFUQSkgPyBocmVhZHkgOiAxJ2IwOwotICAgIGVuZAotZW5kCi0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmIChocmVhZHkgJiAoZnNtID09IFNDUjFfRlNNX0RBVEEpKSBiZWdpbgotICAgICAgICByZXNwX2ZpZm8uaHJlc3AgIDw9IGhyZXNwOwotICAgICAgICByZXNwX2ZpZm8uaHdpZHRoIDw9IGRhdGFfZmlmby5od2lkdGg7Ci0gICAgICAgIHJlc3BfZmlmby5oYWRkciAgPD0gZGF0YV9maWZvLmhhZGRyOwotICAgICAgICByZXNwX2ZpZm8uaHJkYXRhIDw9IGhyZGF0YTsKLSAgICBlbmQKLWVuZAotYGVuZGlmIC8vIFNDUjFfRE1FTV9BSEJfSU5fQlAKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBJbnRlcmZhY2UgdG8gQUhCCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWFzc2lnbiBocHJvdFtTQ1IxX0hQUk9UX0RBVEFdICA9IDEnYjE7Ci1hc3NpZ24gaHByb3RbU0NSMV9IUFJPVF9QUlZdICAgPSAxJ2IwOwotYXNzaWduIGhwcm90W1NDUjFfSFBST1RfQlVGXSAgID0gMSdiMDsKLWFzc2lnbiBocHJvdFtTQ1IxX0hQUk9UX0NBQ0hFXSA9IDEnYjA7Ci0KLWFzc2lnbiBoYnVyc3QgICAgICAgPSBTQ1IxX0hCVVJTVF9TSU5HTEU7Ci1hc3NpZ24gaHNpemUgICAgICAgID0gcmVxX2ZpZm9bMF0uaHdpZHRoOwotYXNzaWduIGhtYXN0bG9jayAgICA9IDEnYjA7Ci0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgaHRyYW5zID0gU0NSMV9IVFJBTlNfSURMRTsKLSAgICBjYXNlIChmc20pCi0gICAgICAgIFNDUjFfRlNNX0FERFIgOiBiZWdpbgotICAgICAgICAgICAgaWYgKH5yZXFfZmlmb19lbXB0eSkgYmVnaW4KLSAgICAgICAgICAgICAgICBodHJhbnMgPSBTQ1IxX0hUUkFOU19OT05TRVE7Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kCi0gICAgICAgIFNDUjFfRlNNX0RBVEEgOiBiZWdpbgotICAgICAgICAgICAgaWYgKGhyZWFkeSkgYmVnaW4KLSAgICAgICAgICAgICAgICBpZiAoaHJlc3AgPT0gU0NSMV9IUkVTUF9PS0FZKSBiZWdpbgotICAgICAgICAgICAgICAgICAgICBpZiAofnJlcV9maWZvX2VtcHR5KSBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgaHRyYW5zID0gU0NSMV9IVFJBTlNfTk9OU0VROwotICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmQKLSAgICAgICAgZGVmYXVsdCA6IGJlZ2luCi0gICAgICAgICAgICBodHJhbnMgPSBTQ1IxX0hUUkFOU19FUlI7Ci0gICAgICAgIGVuZAotICAgIGVuZGNhc2UKLWVuZAotCi1hc3NpZ24gaGFkZHIgID0gcmVxX2ZpZm9bMF0uaGFkZHI7Ci1hc3NpZ24gaHdyaXRlID0gcmVxX2ZpZm9bMF0uaHdyaXRlOwotYXNzaWduIGh3ZGF0YSA9IGRhdGFfZmlmby5od2RhdGE7Ci0KLWVuZG1vZHVsZSA6IHNjcjFfZG1lbV9haGIKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy90b3Avc2NyMV9kbWVtX3JvdXRlci5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy90b3Avc2NyMV9kbWVtX3JvdXRlci5zdgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQ5MDg1YS4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvdG9wL3NjcjFfZG1lbV9yb3V0ZXIuc3YKKysrIC9kZXYvbnVsbApAQCAtMSwyOTQgKzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiBTeW50YWNvcmUgTExDIMKpIDIwMTYtMjAyMQotLy8gCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAotLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IFN5bnRhY29yZSBMTEMKLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8gQGZpbGUgICAgICAgPHNjcjFfZG1lbV9yb3V0ZXIuc3Y+Ci0vLy8gQGJyaWVmICAgICAgRGF0YSBtZW1vcnkgcm91dGVyCi0vLy8KLWBpbmNsdWRlICJzY3IxX21lbWlmLnN2aCIKLWBpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgotCi1tb2R1bGUgc2NyMV9kbWVtX3JvdXRlcgotIygKLSAgICBwYXJhbWV0ZXIgU0NSMV9QT1JUMV9BRERSX01BU0sgICAgICA9IGBTQ1IxX0RNRU1fQVdJRFRIJ2hGRkZGMDAwMCwKLSAgICBwYXJhbWV0ZXIgU0NSMV9QT1JUMV9BRERSX1BBVFRFUk4gICA9IGBTQ1IxX0RNRU1fQVdJRFRIJ2gwMDAxMDAwMCwKLSAgICBwYXJhbWV0ZXIgU0NSMV9QT1JUMl9BRERSX01BU0sgICAgICA9IGBTQ1IxX0RNRU1fQVdJRFRIJ2hGRkZGMDAwMCwKLSAgICBwYXJhbWV0ZXIgU0NSMV9QT1JUMl9BRERSX1BBVFRFUk4gICA9IGBTQ1IxX0RNRU1fQVdJRFRIJ2gwMDAyMDAwMAotKQotKAotICAgIC8vIENvbnRyb2wgc2lnbmFscwotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICByc3RfbiwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrLAotCi0gICAgLy8gQ29yZSBpbnRlcmZhY2UKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1lbV9yZXFfYWNrLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWVtX3JlcSwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1lbV9jbWQsCi0gICAgaW5wdXQgICBsb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgIGRtZW1fd2lkdGgsCi0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfRE1FTV9BV0lEVEgtMTowXSAgIGRtZW1fYWRkciwKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgZG1lbV93ZGF0YSwKLSAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgZG1lbV9yZGF0YSwKLSAgICBvdXRwdXQgIGxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgZG1lbV9yZXNwLAotCi0gICAgLy8gUE9SVDAgaW50ZXJmYWNlCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQwX3JlcV9hY2ssCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQwX3JlcSwKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydDBfY21kLAotICAgIG91dHB1dCAgbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICBwb3J0MF93aWR0aCwKLSAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9ETUVNX0FXSURUSC0xOjBdICAgcG9ydDBfYWRkciwKLSAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgcG9ydDBfd2RhdGEsCi0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgIHBvcnQwX3JkYXRhLAotICAgIGlucHV0ICAgbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICBwb3J0MF9yZXNwLAotCi0gICAgLy8gUE9SVDEgaW50ZXJmYWNlCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQxX3JlcV9hY2ssCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQxX3JlcSwKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydDFfY21kLAotICAgIG91dHB1dCAgbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICBwb3J0MV93aWR0aCwKLSAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9ETUVNX0FXSURUSC0xOjBdICAgcG9ydDFfYWRkciwKLSAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgcG9ydDFfd2RhdGEsCi0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgIHBvcnQxX3JkYXRhLAotICAgIGlucHV0ICAgbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICBwb3J0MV9yZXNwLAotCi0gICAgLy8gUE9SVDIgaW50ZXJmYWNlCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQyX3JlcV9hY2ssCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQyX3JlcSwKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydDJfY21kLAotICAgIG91dHB1dCAgbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICBwb3J0Ml93aWR0aCwKLSAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9ETUVNX0FXSURUSC0xOjBdICAgcG9ydDJfYWRkciwKLSAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgcG9ydDJfd2RhdGEsCi0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgIHBvcnQyX3JkYXRhLAotICAgIGlucHV0ICAgbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICBwb3J0Ml9yZXNwCi0pOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHR5cGVzIGRlY2xhcmF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXR5cGVkZWYgZW51bSBsb2dpYyB7Ci0gICAgU0NSMV9GU01fQUREUiwKLSAgICBTQ1IxX0ZTTV9EQVRBCi19IHR5cGVfc2NyMV9mc21fZTsKLQotdHlwZWRlZiBlbnVtIGxvZ2ljIFsxOjBdIHsKLSAgICBTQ1IxX1NFTF9QT1JUMCwKLSAgICBTQ1IxX1NFTF9QT1JUMSwKLSAgICBTQ1IxX1NFTF9QT1JUMgotfSB0eXBlX3NjcjFfc2VsX2U7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgc2lnbmFsIGRlY2xhcmF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXR5cGVfc2NyMV9mc21fZSAgICAgICAgICAgICAgICAgZnNtOwotdHlwZV9zY3IxX3NlbF9lICAgICAgICAgICAgICAgICBwb3J0X3NlbDsKLXR5cGVfc2NyMV9zZWxfZSAgICAgICAgICAgICAgICAgcG9ydF9zZWxfcjsKLWxvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgc2VsX3JkYXRhOwotbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICBzZWxfcmVzcDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsX3JlcV9hY2s7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRlNNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgcG9ydF9zZWwgICAgPSBTQ1IxX1NFTF9QT1JUMDsKLSAgICBpZiAoKGRtZW1fYWRkciAmIFNDUjFfUE9SVDFfQUREUl9NQVNLKSA9PSBTQ1IxX1BPUlQxX0FERFJfUEFUVEVSTikgYmVnaW4KLSAgICAgICAgcG9ydF9zZWwgICAgPSBTQ1IxX1NFTF9QT1JUMTsKLSAgICBlbmQgZWxzZSBpZiAoKGRtZW1fYWRkciAmIFNDUjFfUE9SVDJfQUREUl9NQVNLKSA9PSBTQ1IxX1BPUlQyX0FERFJfUEFUVEVSTikgYmVnaW4KLSAgICAgICAgcG9ydF9zZWwgICAgPSBTQ1IxX1NFTF9QT1JUMjsKLSAgICBlbmQKLWVuZAotCi1hbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICBmc20gICAgICAgICA8PSBTQ1IxX0ZTTV9BRERSOwotICAgICAgICBwb3J0X3NlbF9yICA8PSBTQ1IxX1NFTF9QT1JUMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICBjYXNlIChmc20pCi0gICAgICAgICAgICBTQ1IxX0ZTTV9BRERSIDogYmVnaW4KLSAgICAgICAgICAgICAgICBpZiAoZG1lbV9yZXEgJiBzZWxfcmVxX2FjaykgYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgZnNtICAgICAgICAgPD0gU0NSMV9GU01fREFUQTsKLSAgICAgICAgICAgICAgICAgICAgcG9ydF9zZWxfciAgPD0gcG9ydF9zZWw7Ci0gICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIFNDUjFfRlNNX0RBVEEgOiBiZWdpbgotICAgICAgICAgICAgICAgIGNhc2UgKHNlbF9yZXNwKQotICAgICAgICAgICAgICAgICAgICBTQ1IxX01FTV9SRVNQX1JEWV9PSyA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG1lbV9yZXEgJiBzZWxfcmVxX2FjaykgYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmc20gICAgICAgICA8PSBTQ1IxX0ZTTV9EQVRBOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRfc2VsX3IgIDw9IHBvcnRfc2VsOwotICAgICAgICAgICAgICAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmc20gPD0gU0NSMV9GU01fQUREUjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgU0NSMV9NRU1fUkVTUF9SRFlfRVIgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgZnNtIDw9IFNDUjFfRlNNX0FERFI7Ci0gICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgZW5kY2FzZQotICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBkZWZhdWx0IDogYmVnaW4KLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmRjYXNlCi0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBpZiAoKGZzbSA9PSBTQ1IxX0ZTTV9BRERSKSB8ICgoZnNtID09IFNDUjFfRlNNX0RBVEEpICYgKHNlbF9yZXNwID09IFNDUjFfTUVNX1JFU1BfUkRZX09LKSkpIGJlZ2luCi0gICAgICAgIGNhc2UgKHBvcnRfc2VsKQotICAgICAgICAgICAgU0NSMV9TRUxfUE9SVDAgIDogc2VsX3JlcV9hY2sgICA9IHBvcnQwX3JlcV9hY2s7Ci0gICAgICAgICAgICBTQ1IxX1NFTF9QT1JUMSAgOiBzZWxfcmVxX2FjayAgID0gcG9ydDFfcmVxX2FjazsKLSAgICAgICAgICAgIFNDUjFfU0VMX1BPUlQyICA6IHNlbF9yZXFfYWNrICAgPSBwb3J0Ml9yZXFfYWNrOwotICAgICAgICAgICAgZGVmYXVsdCAgICAgICAgIDogc2VsX3JlcV9hY2sgICA9IDEnYjA7Ci0gICAgICAgIGVuZGNhc2UKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICBzZWxfcmVxX2FjayA9IDEnYjA7Ci0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBjYXNlIChwb3J0X3NlbF9yKQotICAgICAgICBTQ1IxX1NFTF9QT1JUMCAgOiBiZWdpbgotICAgICAgICAgICAgc2VsX3JkYXRhICAgPSBwb3J0MF9yZGF0YTsKLSAgICAgICAgICAgIHNlbF9yZXNwICAgID0gcG9ydDBfcmVzcDsKLSAgICAgICAgZW5kCi0gICAgICAgIFNDUjFfU0VMX1BPUlQxICA6IGJlZ2luCi0gICAgICAgICAgICBzZWxfcmRhdGEgICA9IHBvcnQxX3JkYXRhOwotICAgICAgICAgICAgc2VsX3Jlc3AgICAgPSBwb3J0MV9yZXNwOwotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9TRUxfUE9SVDIgIDogYmVnaW4KLSAgICAgICAgICAgIHNlbF9yZGF0YSAgID0gcG9ydDJfcmRhdGE7Ci0gICAgICAgICAgICBzZWxfcmVzcCAgICA9IHBvcnQyX3Jlc3A7Ci0gICAgICAgIGVuZAotICAgICAgICBkZWZhdWx0ICAgICAgICAgOiBiZWdpbgotICAgICAgICAgICAgc2VsX3JkYXRhICAgPSAnMDsKLSAgICAgICAgICAgIHNlbF9yZXNwICAgID0gU0NSMV9NRU1fUkVTUF9SRFlfRVI7Ci0gICAgICAgIGVuZAotICAgIGVuZGNhc2UKLWVuZAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEludGVyZmFjZSB0byBjb3JlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWFzc2lnbiBkbWVtX3JlcV9hY2sgPSBzZWxfcmVxX2FjazsKLWFzc2lnbiBkbWVtX3JkYXRhICAgPSBzZWxfcmRhdGE7Ci1hc3NpZ24gZG1lbV9yZXNwICAgID0gc2VsX3Jlc3A7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSW50ZXJmYWNlIHRvIFBPUlQwCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgcG9ydDBfcmVxID0gMSdiMDsKLSAgICBjYXNlIChmc20pCi0gICAgICAgIFNDUjFfRlNNX0FERFIgOiBiZWdpbgotICAgICAgICAgICAgcG9ydDBfcmVxID0gZG1lbV9yZXEgJiAocG9ydF9zZWwgPT0gU0NSMV9TRUxfUE9SVDApOwotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9GU01fREFUQSA6IGJlZ2luCi0gICAgICAgICAgICBpZiAoc2VsX3Jlc3AgPT0gU0NSMV9NRU1fUkVTUF9SRFlfT0spIGJlZ2luCi0gICAgICAgICAgICAgICAgcG9ydDBfcmVxID0gZG1lbV9yZXEgJiAocG9ydF9zZWwgPT0gU0NSMV9TRUxfUE9SVDApOwotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZAotICAgICAgICBkZWZhdWx0IDogYmVnaW4KLSAgICAgICAgZW5kCi0gICAgZW5kY2FzZQotZW5kCi0KLWBpZmRlZiBTQ1IxX1hQUk9QX0VOCi1hc3NpZ24gcG9ydDBfY21kICAgID0gKHBvcnRfc2VsID09IFNDUjFfU0VMX1BPUlQwKSA/IGRtZW1fY21kICAgOiBTQ1IxX01FTV9DTURfRVJST1I7Ci1hc3NpZ24gcG9ydDBfd2lkdGggID0gKHBvcnRfc2VsID09IFNDUjFfU0VMX1BPUlQwKSA/IGRtZW1fd2lkdGggOiBTQ1IxX01FTV9XSURUSF9FUlJPUjsKLWFzc2lnbiBwb3J0MF9hZGRyICAgPSAocG9ydF9zZWwgPT0gU0NSMV9TRUxfUE9SVDApID8gZG1lbV9hZGRyICA6ICd4OwotYXNzaWduIHBvcnQwX3dkYXRhICA9IChwb3J0X3NlbCA9PSBTQ1IxX1NFTF9QT1JUMCkgPyBkbWVtX3dkYXRhIDogJ3g7Ci1gZWxzZSAvLyBTQ1IxX1hQUk9QX0VOCi1hc3NpZ24gcG9ydDBfY21kICAgID0gZG1lbV9jbWQgIDsKLWFzc2lnbiBwb3J0MF93aWR0aCAgPSBkbWVtX3dpZHRoOwotYXNzaWduIHBvcnQwX2FkZHIgICA9IGRtZW1fYWRkciA7Ci1hc3NpZ24gcG9ydDBfd2RhdGEgID0gZG1lbV93ZGF0YTsKLWBlbmRpZiAvLyBTQ1IxX1hQUk9QX0VOCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSW50ZXJmYWNlIHRvIFBPUlQxCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgcG9ydDFfcmVxID0gMSdiMDsKLSAgICBjYXNlIChmc20pCi0gICAgICAgIFNDUjFfRlNNX0FERFIgOiBiZWdpbgotICAgICAgICAgICAgcG9ydDFfcmVxID0gZG1lbV9yZXEgJiAocG9ydF9zZWwgPT0gU0NSMV9TRUxfUE9SVDEpOwotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9GU01fREFUQSA6IGJlZ2luCi0gICAgICAgICAgICBpZiAoc2VsX3Jlc3AgPT0gU0NSMV9NRU1fUkVTUF9SRFlfT0spIGJlZ2luCi0gICAgICAgICAgICAgICAgcG9ydDFfcmVxID0gZG1lbV9yZXEgJiAocG9ydF9zZWwgPT0gU0NSMV9TRUxfUE9SVDEpOwotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZAotICAgICAgICBkZWZhdWx0IDogYmVnaW4KLSAgICAgICAgZW5kCi0gICAgZW5kY2FzZQotZW5kCi0KLWBpZmRlZiBTQ1IxX1hQUk9QX0VOCi1hc3NpZ24gcG9ydDFfY21kICAgID0gKHBvcnRfc2VsID09IFNDUjFfU0VMX1BPUlQxKSA/IGRtZW1fY21kICAgOiBTQ1IxX01FTV9DTURfRVJST1I7Ci1hc3NpZ24gcG9ydDFfd2lkdGggID0gKHBvcnRfc2VsID09IFNDUjFfU0VMX1BPUlQxKSA/IGRtZW1fd2lkdGggOiBTQ1IxX01FTV9XSURUSF9FUlJPUjsKLWFzc2lnbiBwb3J0MV9hZGRyICAgPSAocG9ydF9zZWwgPT0gU0NSMV9TRUxfUE9SVDEpID8gZG1lbV9hZGRyICA6ICd4OwotYXNzaWduIHBvcnQxX3dkYXRhICA9IChwb3J0X3NlbCA9PSBTQ1IxX1NFTF9QT1JUMSkgPyBkbWVtX3dkYXRhIDogJ3g7Ci1gZWxzZSAvLyBTQ1IxX1hQUk9QX0VOCi1hc3NpZ24gcG9ydDFfY21kICAgID0gZG1lbV9jbWQgIDsKLWFzc2lnbiBwb3J0MV93aWR0aCAgPSBkbWVtX3dpZHRoOwotYXNzaWduIHBvcnQxX2FkZHIgICA9IGRtZW1fYWRkciA7Ci1hc3NpZ24gcG9ydDFfd2RhdGEgID0gZG1lbV93ZGF0YTsKLWBlbmRpZiAvLyBTQ1IxX1hQUk9QX0VOCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSW50ZXJmYWNlIHRvIFBPUlQyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgcG9ydDJfcmVxID0gMSdiMDsKLSAgICBjYXNlIChmc20pCi0gICAgICAgIFNDUjFfRlNNX0FERFIgOiBiZWdpbgotICAgICAgICAgICAgcG9ydDJfcmVxID0gZG1lbV9yZXEgJiAocG9ydF9zZWwgPT0gU0NSMV9TRUxfUE9SVDIpOwotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9GU01fREFUQSA6IGJlZ2luCi0gICAgICAgICAgICBpZiAoc2VsX3Jlc3AgPT0gU0NSMV9NRU1fUkVTUF9SRFlfT0spIGJlZ2luCi0gICAgICAgICAgICAgICAgcG9ydDJfcmVxID0gZG1lbV9yZXEgJiAocG9ydF9zZWwgPT0gU0NSMV9TRUxfUE9SVDIpOwotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZAotICAgICAgICBkZWZhdWx0IDogYmVnaW4KLSAgICAgICAgZW5kCi0gICAgZW5kY2FzZQotZW5kCi0KLWBpZmRlZiBTQ1IxX1hQUk9QX0VOCi1hc3NpZ24gcG9ydDJfY21kICAgID0gKHBvcnRfc2VsID09IFNDUjFfU0VMX1BPUlQyKSA/IGRtZW1fY21kICAgOiBTQ1IxX01FTV9DTURfRVJST1I7Ci1hc3NpZ24gcG9ydDJfd2lkdGggID0gKHBvcnRfc2VsID09IFNDUjFfU0VMX1BPUlQyKSA/IGRtZW1fd2lkdGggOiBTQ1IxX01FTV9XSURUSF9FUlJPUjsKLWFzc2lnbiBwb3J0Ml9hZGRyICAgPSAocG9ydF9zZWwgPT0gU0NSMV9TRUxfUE9SVDIpID8gZG1lbV9hZGRyICA6ICd4OwotYXNzaWduIHBvcnQyX3dkYXRhICA9IChwb3J0X3NlbCA9PSBTQ1IxX1NFTF9QT1JUMikgPyBkbWVtX3dkYXRhIDogJ3g7Ci1gZWxzZSAvLyBTQ1IxX1hQUk9QX0VOCi1hc3NpZ24gcG9ydDJfY21kICAgID0gZG1lbV9jbWQgIDsKLWFzc2lnbiBwb3J0Ml93aWR0aCAgPSBkbWVtX3dpZHRoOwotYXNzaWduIHBvcnQyX2FkZHIgICA9IGRtZW1fYWRkciA7Ci1hc3NpZ24gcG9ydDJfd2RhdGEgID0gZG1lbV93ZGF0YTsKLWBlbmRpZiAvLyBTQ1IxX1hQUk9QX0VOCi0KLWBpZmRlZiBTQ1IxX1RSR1RfU0lNVUxBVElPTgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBBc3NlcnRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1TQ1IxX1NWQV9ETUVNX1JUX1hDSEVDSyA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICBkbWVtX3JlcSB8LT4gISRpc3Vua25vd24oe3BvcnRfc2VsLCBkbWVtX2NtZCwgZG1lbV93aWR0aH0pCi0gICAgKSBlbHNlICRlcnJvcigiRE1FTSByb3V0ZXIgRXJyb3I6IHVua25vd24gdmFsdWVzIik7Ci0KLWBlbmRpZiAvLyBTQ1IxX1RSR1RfU0lNVUxBVElPTgotCi1lbmRtb2R1bGUgOiBzY3IxX2RtZW1fcm91dGVyCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvdG9wL3NjcjFfZG1lbV93Yi5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy90b3Avc2NyMV9kbWVtX3diLnN2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODM5ZWRkLi4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy90b3Avc2NyMV9kbWVtX3diLnN2CisrKyAvZGV2L251bGwKQEAgLTEsNDAwICswLDAgQEAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEKLS8vIAotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKLS8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gIHlpZml2ZSBXaXNoYm9uZSBpbnRlcmZhY2UgZm9yIERhdGEgbWVtb3J5ICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB5aWZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgICAgICAgICAgICAgIC8vLy8KLS8vLy8gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy95aWZpdmUvICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gIERlc2NyaXB0aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgIGludGVncmF0ZWQgd2lzaGJvbmUgaS9mIHRvIGRhdGEgIG1lbW9yeSAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgIHYwOiAgICBKdW5lIDcsIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgd2lzaGJvbmUgaW50ZWdyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgIHYxOiAgICBKdW5lIDksIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgIE9uIHBvd2VyIHVwLCB3aXNoYm9uZSBvdXRwdXQgYXJlIHVua293biBhcyBpdCAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgIGRyaXZlbiBmcm9tIGZpZm8gb3V0cHV0LiBUbyBhdm9pZCB1bmtub3duICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgIHByb3BnYXRpb24sIHdlIGFyZSBkcml2aW5nICdoMCB3aGVuIGZpZm8gZW1wdHkgIC8vLy8KLS8vLy8gICAgIHYyOiAgICBKdW5lIDE4LCAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICBjb3JlIGFuZCB3aXNoYm9uZSBpcyBtYWRlIGFzeW5jIGFuZCBhc3luYyBmaWZvICAgIC8vLy8KLS8vLy8gICAgICAgICAgICBhZGRlZCB0byB0YWtlIGNhcmUgb2YgZG9tYWluIGNyb3NzLW92ZXIgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KLS8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KLS8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KLS8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KLS8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KLS8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KLS8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KLS8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KLS8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KLS8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KLS8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KLS8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KLS8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KLS8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vICAgICBPcmdpbmFsIG93bmVyIERldGFpbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLyBDb3B5cmlnaHQgYnkgU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjEuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzLy8vCi0vLy8gQGZpbGUgICAgICAgPHNjcjFfZG1lbV93Yi5zdj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vCi0vLy8gQGJyaWVmICAgICAgRGF0YSBtZW1vcnkgV0IgYnJpZGdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotYGluY2x1ZGUgInNjcjFfd2Iuc3ZoIgotYGluY2x1ZGUgInNjcjFfbWVtaWYuc3ZoIgotCi1tb2R1bGUgc2NyMV9kbWVtX3diICgKLSAgICAvLyBDb250cm9sIFNpZ25hbHMKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9yc3RfbiwgLy8gY29yZSByZXNldAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2NsaywgICAvLyBDb3JlIGNsb2NrCi0KLSAgICAvLyBDb3JlIEludGVyZmFjZQotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWVtX3JlcV9hY2ssCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW1fcmVxLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWVtX2NtZCwKLSAgICBpbnB1dCAgIGxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgZG1lbV93aWR0aCwKLSAgICBpbnB1dCAgIGxvZ2ljICAgW1NDUjFfV0JfV0lEVEgtMTowXSAgICAgZG1lbV9hZGRyLAotICAgIGlucHV0ICAgbG9naWMgICBbU0NSMV9XQl9XSURUSC0xOjBdICAgICBkbWVtX3dkYXRhLAotICAgIG91dHB1dCAgbG9naWMgICBbU0NSMV9XQl9XSURUSC0xOjBdICAgICBkbWVtX3JkYXRhLAotICAgIG91dHB1dCAgbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICBkbWVtX3Jlc3AsCi0KLSAgICAvLyBXQiBJbnRlcmZhY2UKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JfcnN0X24sICAgLy8gd2lzaGJvbmUgcmVzZXQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JfY2xrLCAgICAgLy8gd2lzaGJvbmUgY2xvY2sKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3N0Yl9vLCAvLyBzdHJvYmUvcmVxdWVzdAotICAgIG91dHB1dCAgbG9naWMgICBbU0NSMV9XQl9XSURUSC0xOjBdICAgICB3YmRfYWRyX28sIC8vIGFkZHJlc3MKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3dlX28sICAvLyB3cml0ZQotICAgIG91dHB1dCAgbG9naWMgICBbU0NSMV9XQl9XSURUSC0xOjBdICAgICB3YmRfZGF0X28sIC8vIGRhdGEgb3V0cHV0Ci0gICAgb3V0cHV0ICBsb2dpYyAgIFszOjBdICAgICAgICAgICAgICAgICAgIHdiZF9zZWxfbywgLy8gYnl0ZSBlbmFibGUKLSAgICBpbnB1dCAgIGxvZ2ljICAgW1NDUjFfV0JfV0lEVEgtMTowXSAgICAgd2JkX2RhdF9pLCAvLyBkYXRhIGlucHV0Ci0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9hY2tfaSwgLy8gYWNrbm93bGVnZW1lbnQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Vycl9pICAvLyBlcnJvcgotCi0pOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIFBhcmFtZXRlcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHR5cGUgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi10eXBlZGVmIHN0cnVjdCBwYWNrZWQgewotICAgIGxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgaGJlbDsKLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3cml0ZTsKLSAgICBsb2dpYyAgIFsyOjBdICAgICAgICAgICAgICAgICAgIGh3aWR0aDsKLSAgICBsb2dpYyAgIFtTQ1IxX1dCX1dJRFRILTE6MF0gICAgIGhhZGRyOwotICAgIGxvZ2ljICAgW1NDUjFfV0JfV0lEVEgtMTowXSAgICAgaHdkYXRhOwotfSB0eXBlX3NjcjFfcmVxX2ZpZm9fczsKLQotCi10eXBlZGVmIHN0cnVjdCBwYWNrZWQgewotICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlc3A7Ci0gICAgbG9naWMgICBbMjowXSAgICAgICAgICAgICAgICAgICBod2lkdGg7Ci0gICAgbG9naWMgICBbMTowXSAgICAgICAgICAgICAgICAgICBoYWRkcjsKLSAgICBsb2dpYyAgIFtTQ1IxX1dCX1dJRFRILTE6MF0gICAgaHJkYXRhOwotfSB0eXBlX3NjcjFfcmVzcF9maWZvX3M7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgZnVuY3Rpb25zCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWZ1bmN0aW9uIGF1dG9tYXRpYyBsb2dpYyAgIFsyOjBdIHNjcjFfY29udl9tZW0yd2Jfd2lkdGggKAotICAgIGlucHV0ICAgbG9naWMgWzE6MF0gICAgICAgICAgICAgIGRtZW1fd2lkdGgKLSk7Ci0gICAgbG9naWMgICBbMjowXSAgIHRtcDsKLWJlZ2luCi0gICAgY2FzZSAoZG1lbV93aWR0aCkKLSAgICAgICAgU0NSMV9NRU1fV0lEVEhfQllURSA6IGJlZ2luCi0gICAgICAgICAgICB0bXAgPSBTQ1IxX0RTSVpFXzhCOwotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9NRU1fV0lEVEhfSFdPUkQgOiBiZWdpbgotICAgICAgICAgICAgdG1wID0gU0NSMV9EU0laRV8xNkI7Ci0gICAgICAgIGVuZAotICAgICAgICBTQ1IxX01FTV9XSURUSF9XT1JEIDogYmVnaW4KLSAgICAgICAgICAgIHRtcCA9IFNDUjFfRFNJWkVfMzJCOwotICAgICAgICBlbmQKLSAgICAgICAgZGVmYXVsdCA6IGJlZ2luCi0gICAgICAgICAgICB0bXAgPSBTQ1IxX0RTSVpFXzMyQjsKLSAgICAgICAgZW5kCi0gICAgZW5kY2FzZQotICAgIHNjcjFfY29udl9tZW0yd2Jfd2lkdGggPSAgdG1wOyAvLyBjcC4xMQotZW5kCi1lbmRmdW5jdGlvbgotCi1mdW5jdGlvbiBhdXRvbWF0aWMgbG9naWNbU0NSMV9XQl9XSURUSC0xOjBdIHNjcjFfY29udl9tZW0yd2Jfd2RhdGEgKAotICAgIGlucHV0ICAgbG9naWMgICBbMTowXSAgICAgICAgICAgICAgICAgICBkbWVtX2FkZHIsCi0gICAgaW5wdXQgICBsb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgIGRtZW1fd2lkdGgsCi0gICAgaW5wdXQgICBsb2dpYyAgIFtTQ1IxX1dCX1dJRFRILTE6MF0gICAgZG1lbV93ZGF0YQotKTsKLSAgICBsb2dpYyAgIFtTQ1IxX1dCX1dJRFRILTE6MF0gIHRtcDsKLWJlZ2luCi0gICAgdG1wID0gJ3g7Ci0gICAgY2FzZSAoZG1lbV93aWR0aCkKLSAgICAgICAgU0NSMV9NRU1fV0lEVEhfQllURSA6IGJlZ2luCi0gICAgICAgICAgICBjYXNlIChkbWVtX2FkZHIpCi0gICAgICAgICAgICAgICAgMidiMDAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICB0bXBbNzowXSAgID0gZG1lbV93ZGF0YVs3OjBdOwotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgIDInYjAxIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgdG1wWzE1OjhdICA9IGRtZW1fd2RhdGFbNzowXTsKLSAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAyJ2IxMCA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgIHRtcFsyMzoxNl0gPSBkbWVtX3dkYXRhWzc6MF07Ci0gICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgMidiMTEgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICB0bXBbMzE6MjRdID0gZG1lbV93ZGF0YVs3OjBdOwotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgIGRlZmF1bHQgOiBiZWdpbgotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZW5kY2FzZQotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9NRU1fV0lEVEhfSFdPUkQgOiBiZWdpbgotICAgICAgICAgICAgY2FzZSAoZG1lbV9hZGRyWzFdKQotICAgICAgICAgICAgICAgIDEnYjAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICB0bXBbMTU6MF0gID0gZG1lbV93ZGF0YVsxNTowXTsKLSAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAxJ2IxIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgdG1wWzMxOjE2XSA9IGRtZW1fd2RhdGFbMTU6MF07Ci0gICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgZGVmYXVsdCA6IGJlZ2luCi0gICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBlbmRjYXNlCi0gICAgICAgIGVuZAotICAgICAgICBTQ1IxX01FTV9XSURUSF9XT1JEIDogYmVnaW4KLSAgICAgICAgICAgIHRtcCA9IGRtZW1fd2RhdGE7Ci0gICAgICAgIGVuZAotICAgICAgICBkZWZhdWx0IDogYmVnaW4KLSAgICAgICAgZW5kCi0gICAgZW5kY2FzZQotICAgIHNjcjFfY29udl9tZW0yd2Jfd2RhdGEgPSB0bXA7Ci1lbmQKLWVuZGZ1bmN0aW9uCi0KLWZ1bmN0aW9uIGF1dG9tYXRpYyBsb2dpY1tTQ1IxX1dCX1dJRFRILTE6MF0gc2NyMV9jb252X3diMm1lbV9yZGF0YSAoCi0gICAgaW5wdXQgICBsb2dpYyBbMjowXSAgICAgICAgICAgICAgICAgaHdpZHRoLAotICAgIGlucHV0ICAgbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgIGhhZGRyLAotICAgIGlucHV0ICAgbG9naWMgW1NDUjFfV0JfV0lEVEgtMTowXSAgaHJkYXRhCi0pOwotICAgIGxvZ2ljICAgW1NDUjFfV0JfV0lEVEgtMTowXSAgdG1wOwotYmVnaW4KLSAgICB0bXAgPSAneDsKLSAgICBjYXNlIChod2lkdGgpCi0gICAgICAgIFNDUjFfRFNJWkVfOEIgOiBiZWdpbgotICAgICAgICAgICAgY2FzZSAoaGFkZHIpCi0gICAgICAgICAgICAgICAgMidiMDAgOiB0bXBbNzowXSA9IGhyZGF0YVs3OjBdOwotICAgICAgICAgICAgICAgIDInYjAxIDogdG1wWzc6MF0gPSBocmRhdGFbMTU6OF07Ci0gICAgICAgICAgICAgICAgMidiMTAgOiB0bXBbNzowXSA9IGhyZGF0YVsyMzoxNl07Ci0gICAgICAgICAgICAgICAgMidiMTEgOiB0bXBbNzowXSA9IGhyZGF0YVszMToyNF07Ci0gICAgICAgICAgICAgICAgZGVmYXVsdCA6IGJlZ2luCi0gICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBlbmRjYXNlCi0gICAgICAgIGVuZAotICAgICAgICBTQ1IxX0RTSVpFXzE2QiA6IGJlZ2luCi0gICAgICAgICAgICBjYXNlIChoYWRkclsxXSkKLSAgICAgICAgICAgICAgICAxJ2IwIDogdG1wWzE1OjBdID0gaHJkYXRhWzE1OjBdOwotICAgICAgICAgICAgICAgIDEnYjEgOiB0bXBbMTU6MF0gPSBocmRhdGFbMzE6MTZdOwotICAgICAgICAgICAgICAgIGRlZmF1bHQgOiBiZWdpbgotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZW5kY2FzZQotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9EU0laRV8zMkIgOiBiZWdpbgotICAgICAgICAgICAgdG1wID0gaHJkYXRhOwotICAgICAgICBlbmQKLSAgICAgICAgZGVmYXVsdCA6IGJlZ2luCi0gICAgICAgIGVuZAotICAgIGVuZGNhc2UKLSAgICBzY3IxX2NvbnZfd2IybWVtX3JkYXRhID0gdG1wOwotZW5kCi1lbmRmdW5jdGlvbgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHNpZ25hbCBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9maWZvX3JkOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFfZmlmb193cjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxX2ZpZm9fZW1wdHk7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9maWZvX2Z1bGw7Ci0KLQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwX2ZpZm9fcmQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BfZmlmb19lbXB0eTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcF9maWZvX2Z1bGw7Ci0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSRVFfRklGTyAoQ09SRSB0byBXQikKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotd2lyZQkgICAgICAgICAgICAgICAgIGh3cml0ZV9pbiA9IChkbWVtX2NtZCA9PSBTQ1IxX01FTV9DTURfV1IpOwotd2lyZSBbMjowXSAgICAgICAgICAgICAgIGh3aWR0aF9pbiA9IHNjcjFfY29udl9tZW0yd2Jfd2lkdGgoZG1lbV93aWR0aCk7Ci13aXJlIFtTQ1IxX1dCX1dJRFRILTE6MF0gaGFkZHJfaW4gID0gZG1lbV9hZGRyOwotd2lyZSBbU0NSMV9XQl9XSURUSC0xOjBdIGh3ZGF0YV9pbiA9IHNjcjFfY29udl9tZW0yd2Jfd2RhdGEoZG1lbV9hZGRyWzE6MF0sIGRtZW1fd2lkdGgsIGRtZW1fd2RhdGEpOwotCi1yZWcgIFszOjBdICAgICAgICAgICAgICBoYmVsX2luOyAvLyBieXRlIHNlbGVjdAotYWx3YXlzX2NvbWIgYmVnaW4KLQloYmVsX2luID0gMDsKLSAgICBjYXNlIChod2lkdGhfaW4pCi0gICAgICAgIFNDUjFfRFNJWkVfOEIgOiBiZWdpbgotICAgICAgICAgICAgaGJlbF9pbiA9IDQnYjAwMDEgPDwgaGFkZHJfaW5bMTowXTsKLSAgICAgICAgZW5kCi0gICAgICAgIFNDUjFfRFNJWkVfMTZCIDogYmVnaW4KLSAgICAgICAgICAgIGhiZWxfaW4gPSA0J2IwMDExIDw8IGhhZGRyX2luWzE6MF07Ci0gICAgICAgIGVuZAotICAgICAgICBTQ1IxX0RTSVpFXzMyQiA6IGJlZ2luCi0gICAgICAgICAgICBoYmVsX2luID0gNCdiMTExMTsKLSAgICAgICAgZW5kCi0gICAgZW5kY2FzZQotZW5kCi0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSRVFfRklGTyAoV0IgdG8gQ09SRSkKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdHlwZV9zY3IxX3JlcV9maWZvX3MgICAgcmVxX2ZpZm9fZGluOwotdHlwZV9zY3IxX3JlcV9maWZvX3MgICAgcmVxX2ZpZm9fZG91dDsKLQotCi1hc3NpZ24gZG1lbV9yZXFfYWNrICAgICAgICA9IH5yZXFfZmlmb19mdWxsOwotYXNzaWduIHJlcV9maWZvX3dyICAgICAgICAgPSB+cmVxX2ZpZm9fZnVsbCAmIGRtZW1fcmVxOwotCi0vL3BhY2sgZGF0YSBpbgotYXNzaWduIHJlcV9maWZvX2Rpbi5oYmVsICAgPSAgaGJlbF9pbjsKLWFzc2lnbiByZXFfZmlmb19kaW4uaHdyaXRlID0gIGh3cml0ZV9pbjsKLWFzc2lnbiByZXFfZmlmb19kaW4uaHdpZHRoID0gIGh3aWR0aF9pbjsKLWFzc2lnbiByZXFfZmlmb19kaW4uaGFkZHIgID0gIGhhZGRyX2luOwotYXNzaWduIHJlcV9maWZvX2Rpbi5od2RhdGEgPSAgaHdkYXRhX2luOwotCi0KLSBhc3luY19maWZvICMoCi0gICAgICAuVyhTQ1IxX1dCX1dJRFRIK1NDUjFfV0JfV0lEVEgrMysxKzQpLCAvLyBEYXRhIFdpZHRoCi0gICAgICAuRFAoNCksICAgICAgICAgICAgLy8gRklGTyBERVBUSAotICAgICAgLldSX0ZBU1QoMSksICAgICAgIC8vIFdlIG5lZWQgRkYnZWQgRnVsbAotICAgICAgLlJEX0ZBU1QoMSkgICAgICAgIC8vIFdlIG5lZWQgRkYnZWQgRW1wdHkKLSAgICAgKSAgIHVfcmVxX2ZpZm8oCi0gICAgIC8vIFdyaXRjIENsb2NrCi0JLndyX2NsayAgICAgIChjb3JlX2NsayAgICAgICApLAotICAgICAgICAud3JfcmVzZXRfbiAgKGNvcmVfcnN0X24gICAgICksCi0gICAgICAgIC53cl9lbiAgICAgICAocmVxX2ZpZm9fd3IgICAgKSwKLSAgICAgICAgLndyX2RhdGEgICAgIChyZXFfZmlmb19kaW4gICApLAotICAgICAgICAuZnVsbCAgICAgICAgKHJlcV9maWZvX2Z1bGwgICksCi0gICAgICAgIC5hZnVsbCAgICAgICAoICAgICAgICAgICAgICAgKSwgICAgICAgICAgICAgICAgIAotCi0gICAgLy8gUkQgQ2xvY2sKLSAgICAgICAgLnJkX2NsayAgICAgKHdiX2NsayAgICAgICAgICApLAotICAgICAgICAucmRfcmVzZXRfbiAod2JfcnN0X24gICAgICAgICksCi0gICAgICAgIC5yZF9lbiAgICAgIChyZXFfZmlmb19yZCAgICAgKSwKLSAgICAgICAgLmVtcHR5ICAgICAgKHJlcV9maWZvX2VtcHR5ICApLCAgICAgICAgICAgICAgICAKLSAgICAgICAgLmFlbXB0eSAgICAgKCAgICAgICAgICAgICAgICApLCAgICAgICAgICAgICAgICAKLSAgICAgICAgLnJkX2RhdGEgICAgKHJlcV9maWZvX2RvdXQgICApCi0gICAgICApOwotCi0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgcmVxX2ZpZm9fcmQgPSAxJ2IwOwotICAgIGlmICh3YmRfYWNrX2kpIGJlZ2luCi0gICAgICAgICByZXFfZmlmb19yZCA9IH5yZXFfZmlmb19lbXB0eTsKLSAgICBlbmQKLWVuZAotCi0KLWFzc2lnbiB3YmRfc3RiX28gICAgPSB+cmVxX2ZpZm9fZW1wdHk7Ci0KLS8vIFRvIGF2b2lkIHVua25vd24gcHJvZ2F0aW5nIHRoZSBkZXNpZ24sIGRyaXZlbiB6ZXJvIHdoZW4gZmlmbyBpcyBlbXB0eQotYXNzaWduIHdiZF9hZHJfbyAgICA9IChyZXFfZmlmb19lbXB0eSkgPyAnaDAgOiByZXFfZmlmb19kb3V0LmhhZGRyOwotYXNzaWduIHdiZF93ZV9vICAgICA9IChyZXFfZmlmb19lbXB0eSkgPyAnaDAgOiByZXFfZmlmb19kb3V0Lmh3cml0ZTsKLWFzc2lnbiB3YmRfZGF0X28gICAgPSAocmVxX2ZpZm9fZW1wdHkpID8gJ2gwIDogcmVxX2ZpZm9fZG91dC5od2RhdGE7Ci1hc3NpZ24gd2JkX3NlbF9vICAgID0gKHJlcV9maWZvX2VtcHR5KSA/ICdoMCA6IHJlcV9maWZvX2RvdXQuaGJlbDsKLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJlc3BvbnNlIHBhdGggLSBVc2VkIGJ5IFJlYWQgcGF0aCBsb2dpYwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10eXBlX3NjcjFfcmVzcF9maWZvX3MgICAgICAgICAgICAgICAgICAgICAgIHJlc3BfZmlmb19kaW47Ci10eXBlX3NjcjFfcmVzcF9maWZvX3MgICAgICAgICAgICAgICAgICAgICAgIHJlc3BfZmlmb19kb3V0OwotCi0KLWFzc2lnbiAgcmVzcF9maWZvX2Rpbi5ocmVzcCAgPSAod2JkX2Vycl9pKSA/IDEnYjAgOiAxJ2IxOwotYXNzaWduICByZXNwX2ZpZm9fZGluLmh3aWR0aCA9IHJlcV9maWZvX2RvdXQuaHdpZHRoOwotYXNzaWduICByZXNwX2ZpZm9fZGluLmhhZGRyICA9IHJlcV9maWZvX2RvdXQuaGFkZHJbMTowXTsKLWFzc2lnbiAgcmVzcF9maWZvX2Rpbi5ocmRhdGEgPSAod2JkX3dlX28pID8gJ2gwOiB3YmRfZGF0X2k7Ci0KLSBhc3luY19maWZvICMoCi0gICAgICAuVyhTQ1IxX1dCX1dJRFRIKzIrMysxKSwgLy8gRGF0YSBXaWR0aAotICAgICAgLkRQKDQpLCAgICAgICAgICAgIC8vIEZJRk8gREVQVEgKLSAgICAgIC5XUl9GQVNUKDEpLCAgICAgICAvLyBXZSBuZWVkIEZGJ2VkIEZ1bGwKLSAgICAgIC5SRF9GQVNUKDEpICAgICAgICAvLyBXZSBuZWVkIEZGJ2VkIEVtcHR5Ci0gICAgICkgICB1X3Jlc19maWZvKAotICAgICAvLyBXcml0YyBDbG9jawotCS53cl9jbGsgICAgICAod2JfY2xrICAgICAgICAgICAgICAgICApLAotICAgICAgICAud3JfcmVzZXRfbiAgKHdiX3JzdF9uICAgICAgICAgICAgICAgKSwKLSAgICAgICAgLndyX2VuICAgICAgICh3YmRfYWNrX2kgICAgICAgICAgICAgICksCi0gICAgICAgIC53cl9kYXRhICAgICAocmVzcF9maWZvX2RpbiAgICAgICAgICApLAotICAgICAgICAuZnVsbCAgICAgICAgKCAgICAgICAgICAgICAgICAgICAgICAgKSwgLy8gQXNzbWVkIEZJRk8gd2lsbCBuZXZlciBiZSBmdWxsIGFzIGl0J3MgUmVzcG9uc2UgYSBTaW5nbGUgUmVxdWVzdAotICAgICAgICAuYWZ1bGwgICAgICAgKCAgICAgICAgICAgICAgICAgICAgICAgKSwgICAgICAgICAgICAgICAgIAotCi0gICAgLy8gUkQgQ2xvY2sKLSAgICAgICAgLnJkX2NsayAgICAgKGNvcmVfY2xrICAgICAgICAgICAgICAgICksCi0gICAgICAgIC5yZF9yZXNldF9uIChjb3JlX3JzdF9uICAgICAgICAgICAgICApLAotICAgICAgICAucmRfZW4gICAgICAocmVzcF9maWZvX3JkICAgICAgICAgICAgKSwKLSAgICAgICAgLmVtcHR5ICAgICAgKHJlc3BfZmlmb19lbXB0eSAgICAgICAgICksICAgICAgICAgICAgICAgIAotICAgICAgICAuYWVtcHR5ICAgICAoICAgICAgICAgICAgICAgICAgICAgICAgKSwgICAgICAgICAgICAgICAgCi0gICAgICAgIC5yZF9kYXRhICAgIChyZXNwX2ZpZm9fZG91dCAgICAgICAgICApCi0gICAgICApOwotCi1hc3NpZ24gcmVzcF9maWZvX3JkID0gIXJlc3BfZmlmb19lbXB0eTsKLSAgCi0vLyBBZGRlZCBGRiB0byBpbXByb3ZlIHRpbWluZwotYWx3YXlzX2ZmIEAocG9zZWRnZSBjb3JlX2NsaywgbmVnZWRnZSBjb3JlX3JzdF9uKSBiZWdpbgotICAgaWYoY29yZV9yc3RfbiA9PSAwKSBiZWdpbgotICAgICAgZG1lbV9yZGF0YSA8PSAnMDsKLSAgICAgIGRtZW1fcmVzcCA8PSAnMDsKLSAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICBkbWVtX3JkYXRhIDw9IChyZXNwX2ZpZm9fcmQpID8gc2NyMV9jb252X3diMm1lbV9yZGF0YShyZXNwX2ZpZm9fZG91dC5od2lkdGgsIHJlc3BfZmlmb19kb3V0LmhhZGRyLCByZXNwX2ZpZm9fZG91dC5ocmRhdGEpIDogJ2gwOwotICAgICAgZG1lbV9yZXNwICA8PSAocmVzcF9maWZvX3JkKQotICAgICAgICAgICAgICAgICAgICAgICAgICA/IChyZXNwX2ZpZm9fZG91dC5ocmVzcCA9PSAxJ2IxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBTQ1IxX01FTV9SRVNQX1JEWV9PSwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTQ1IxX01FTV9SRVNQX1JEWV9FUgotICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfTUVNX1JFU1BfTk9UUkRZIDsKLSAgIGVuZAotZW5kCi0KLQotCi0KLWVuZG1vZHVsZSA6IHNjcjFfZG1lbV93YgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL3RvcC9zY3IxX2RwX21lbW9yeS5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy90b3Avc2NyMV9kcF9tZW1vcnkuc3YKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwYTIyODEuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL3RvcC9zY3IxX2RwX21lbW9yeS5zdgorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIxCi0vLyAKLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0vLyBTUERYLUZpbGVDb250cmlidXRvcjogU3ludGFjb3JlIExMQwotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLyBAZmlsZSAgICAgICA8c2NyMV9kcF9tZW1vcnkuc3Y+Ci0vLy8gQGJyaWVmICAgICAgRHVhbC1wb3J0IHN5bmNocm9ub3VzIG1lbW9yeSB3aXRoIGJ5dGUgZW5hYmxlIGlucHV0cwotLy8vCi0KLWBpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgotCi1gaWZkZWYgU0NSMV9UQ01fRU4KLW1vZHVsZSBzY3IxX2RwX21lbW9yeQotIygKLSAgICBwYXJhbWV0ZXIgU0NSMV9XSURUSCAgICA9IDMyLAotICAgIHBhcmFtZXRlciBTQ1IxX1NJWkUgICAgID0gYFNDUjFfSU1FTV9BV0lEVEgnaDAwMDEwMDAwLAotICAgIHBhcmFtZXRlciBTQ1IxX05CWVRFUyAgID0gU0NSMV9XSURUSCAvIDgKLSkKLSgKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrLAotICAgIC8vIFBvcnQgQQotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5hLAotICAgIGlucHV0ICAgbG9naWMgWyRjbG9nMihTQ1IxX1NJWkUpLTE6Ml0gICBhZGRyYSwKLSAgICBvdXRwdXQgIGxvZ2ljIFtTQ1IxX1dJRFRILTE6MF0gICAgICAgICAgcWEsCi0gICAgLy8gUG9ydCBCCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmIsCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlbmIsCi0gICAgaW5wdXQgICBsb2dpYyBbU0NSMV9OQllURVMtMTowXSAgICAgICAgIHdlYmIsCi0gICAgaW5wdXQgICBsb2dpYyBbJGNsb2cyKFNDUjFfU0laRSktMToyXSAgIGFkZHJiLAotICAgIGlucHV0ICAgbG9naWMgW1NDUjFfV0lEVEgtMTowXSAgICAgICAgICBkYXRhYiwKLSAgICBvdXRwdXQgIGxvZ2ljIFtTQ1IxX1dJRFRILTE6MF0gICAgICAgICAgcWIKLSk7Ci0KLWBpZmRlZiBTQ1IxX1RSR1RfRlBHQV9JTlRFTAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCBzaWduYWwgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIGBpZmRlZiBTQ1IxX1RSR1RfRlBHQV9JTlRFTF9NQVgxMAotKCogcmFtc3R5bGUgPSAiTTlLIiAqKSAgICBsb2dpYyBbU0NSMV9OQllURVMtMTowXVs3OjBdICBtZW1vcnlfYXJyYXkgIFswOihTQ1IxX1NJWkUvU0NSMV9OQllURVMpLTFdOwotIGBlbHNpZiBTQ1IxX1RSR1RfRlBHQV9JTlRFTF9BUlJJQVYKLSgqIHJhbXN0eWxlID0gIk0xMEsiICopICAgbG9naWMgW1NDUjFfTkJZVEVTLTE6MF1bNzowXSAgbWVtb3J5X2FycmF5ICBbMDooU0NSMV9TSVpFL1NDUjFfTkJZVEVTKS0xXTsKLSBgZW5kaWYKLWxvZ2ljIFszOjBdIHdlbmJiOwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBQb3J0IEIgbWVtb3J5IGJlaGF2aW9yYWwgZGVzY3JpcHRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotYXNzaWduIHdlbmJiID0gezR7d2VuYn19ICYgd2ViYjsKLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh3ZW5iKSBiZWdpbgotICAgICAgICBpZiAod2VuYmJbMF0pIGJlZ2luCi0gICAgICAgICAgICBtZW1vcnlfYXJyYXlbYWRkcmJdWzBdIDw9IGRhdGFiWzArOjhdOwotICAgICAgICBlbmQKLSAgICAgICAgaWYgKHdlbmJiWzFdKSBiZWdpbgotICAgICAgICAgICAgbWVtb3J5X2FycmF5W2FkZHJiXVsxXSA8PSBkYXRhYls4Kzo4XTsKLSAgICAgICAgZW5kCi0gICAgICAgIGlmICh3ZW5iYlsyXSkgYmVnaW4KLSAgICAgICAgICAgIG1lbW9yeV9hcnJheVthZGRyYl1bMl0gPD0gZGF0YWJbMTYrOjhdOwotICAgICAgICBlbmQKLSAgICAgICAgaWYgKHdlbmJiWzNdKSBiZWdpbgotICAgICAgICAgICAgbWVtb3J5X2FycmF5W2FkZHJiXVszXSA8PSBkYXRhYlsyNCs6OF07Ci0gICAgICAgIGVuZAotICAgIGVuZAotICAgIHFiIDw9IG1lbW9yeV9hcnJheVthZGRyYl07Ci1lbmQKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUG9ydCBBIG1lbW9yeSBiZWhhdmlvcmFsIGRlc2NyaXB0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIHFhIDw9IG1lbW9yeV9hcnJheVthZGRyYV07Ci1lbmQKLQotYGVsc2UgLy8gU0NSMV9UUkdUX0ZQR0FfSU5URUwKLQotLy8gQ0FTRTogT1RIRVJTIC0gU0NSMV9UUkdUX0ZQR0FfWElMSU5YLCBTSU1VTEFUSU9OLCBBU0lDIGV0YwotCi1sb2NhbHBhcmFtIGludCB1bnNpZ25lZCBSQU1fU0laRV9XT1JEUyA9IFNDUjFfU0laRS9TQ1IxX05CWVRFUzsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCBzaWduYWwgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIGBpZmRlZiBTQ1IxX1RSR1RfRlBHQV9YSUxJTlgKLSgqIHJhbV9zdHlsZSA9ICJibG9jayIgKikgIGxvZ2ljICBbU0NSMV9XSURUSC0xOjBdICByYW1fYmxvY2sgIFtSQU1fU0laRV9XT1JEUy0xOjBdOwotIGBlbHNlICAvLyBBU0lDIG9yIFNJTVVMQVRJT04KLWxvZ2ljICBbU0NSMV9XSURUSC0xOjBdICByYW1fYmxvY2sgIFtSQU1fU0laRV9XT1JEUy0xOjBdOwotIGBlbmRpZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBQb3J0IEEgbWVtb3J5IGJlaGF2aW9yYWwgZGVzY3JpcHRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKHJlbmEpIGJlZ2luCi0gICAgICAgIHFhIDw9IHJhbV9ibG9ja1thZGRyYV07Ci0gICAgZW5kCi1lbmQKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBQb3J0IEIgbWVtb3J5IGJlaGF2aW9yYWwgZGVzY3JpcHRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKHdlbmIpIGJlZ2luCi0gICAgICAgIGZvciAoaW50IGk9MDsgaTxTQ1IxX05CWVRFUzsgaSsrKSBiZWdpbgotICAgICAgICAgICAgaWYgKHdlYmJbaV0pIGJlZ2luCi0gICAgICAgICAgICAgICAgcmFtX2Jsb2NrW2FkZHJiXVtpKjggKzogOF0gPD0gZGF0YWJbaSo4ICs6IDhdOwotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZAotICAgIGVuZAotICAgIGlmIChyZW5iKSBiZWdpbgotICAgICAgICBxYiA8PSByYW1fYmxvY2tbYWRkcmJdOwotICAgIGVuZAotZW5kCi0KLWBlbmRpZiAvLyBTQ1IxX1RSR1RfRlBHQV9JTlRFTAotCi1lbmRtb2R1bGUgOiBzY3IxX2RwX21lbW9yeQotCi1gZW5kaWYgLy8gU0NSMV9UQ01fRU4KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy90b3Avc2NyMV9pbWVtX2FoYi5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy90b3Avc2NyMV9pbWVtX2FoYi5zdgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY0ZjBkMy4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvdG9wL3NjcjFfaW1lbV9haGIuc3YKKysrIC9kZXYvbnVsbApAQCAtMSwzMzUgKzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiBTeW50YWNvcmUgTExDIKkgMjAxNi0yMDIxCi0vLyAKLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0vLyBTUERYLUZpbGVDb250cmlidXRvcjogU3ludGFjb3JlIExMQwotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLyBAZmlsZSAgICAgICA8c2NyMV9pbWVtX2FoYi5zdj4KLS8vLyBAYnJpZWYgICAgICBJbnN0cnVjdGlvbiBtZW1vcnkgQUhCIGJyaWRnZQotLy8vCi0KLWBpbmNsdWRlICJzY3IxX2FoYi5zdmgiCi1gaW5jbHVkZSAic2NyMV9tZW1pZi5zdmgiCi0KLW1vZHVsZSBzY3IxX2ltZW1fYWhiICgKLSAgICAvLyBDb250cm9sIFNpZ25hbHMKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgcnN0X24sCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaywKLQotICAgIC8vIENvcmUgSW50ZXJmYWNlCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW1fcmVxX2FjaywKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1lbV9yZXEsCi0gICAgaW5wdXQgICBsb2dpYyAgIFtTQ1IxX0FIQl9XSURUSC0xOjBdICAgIGltZW1fYWRkciwKLSAgICBvdXRwdXQgIGxvZ2ljICAgW1NDUjFfQUhCX1dJRFRILTE6MF0gICAgaW1lbV9yZGF0YSwKLSAgICBvdXRwdXQgIGxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgaW1lbV9yZXNwLAotCi0gICAgLy8gQUhCIEludGVyZmFjZQotICAgIG91dHB1dCAgbG9naWMgICBbMzowXSAgICAgICAgICAgICAgICAgICBocHJvdCwKLSAgICBvdXRwdXQgIGxvZ2ljICAgWzI6MF0gICAgICAgICAgICAgICAgICAgaGJ1cnN0LAotICAgIG91dHB1dCAgbG9naWMgICBbMjowXSAgICAgICAgICAgICAgICAgICBoc2l6ZSwKLSAgICBvdXRwdXQgIGxvZ2ljICAgWzE6MF0gICAgICAgICAgICAgICAgICAgaHRyYW5zLAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBobWFzdGxvY2ssCi0gICAgb3V0cHV0ICBsb2dpYyAgIFtTQ1IxX0FIQl9XSURUSC0xOjBdICAgIGhhZGRyLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVhZHksCi0gICAgaW5wdXQgICBsb2dpYyAgIFtTQ1IxX0FIQl9XSURUSC0xOjBdICAgIGhyZGF0YSwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlc3AKLQotKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCBwYXJhbWV0ZXJzIGRlY2xhcmF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWBpZm5kZWYgU0NSMV9JTUVNX0FIQl9PVVRfQlAKLWxvY2FscGFyYW0gIFNDUjFfRklGT19XSURUSCA9IDI7Ci1sb2NhbHBhcmFtICBTQ1IxX0ZJRk9fQ05UX1dJRFRIID0gJGNsb2cyKFNDUjFfRklGT19XSURUSCsxKTsKLWBlbmRpZiAvLyBTQ1IxX0lNRU1fQUhCX09VVF9CUAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHR5cGVzIGRlY2xhcmF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXR5cGVkZWYgZW51bSBsb2dpYyB7Ci0gICAgU0NSMV9GU01fQUREUiA9IDEnYjAsCi0gICAgU0NSMV9GU01fREFUQSA9IDEnYjEsCi0gICAgU0NSMV9GU01fRVJSICA9IDEnYngKLX0gdHlwZV9zY3IxX2ZzbV9lOwotCi10eXBlZGVmIHN0cnVjdCBwYWNrZWQgewotICAgIGxvZ2ljICAgW1NDUjFfQUhCX1dJRFRILTE6MF0gICAgaGFkZHI7Ci19IHR5cGVfc2NyMV9yZXFfZmlmb19zOwotCi10eXBlZGVmIHN0cnVjdCBwYWNrZWQgewotICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlc3A7Ci0gICAgbG9naWMgICBbU0NSMV9BSEJfV0lEVEgtMTowXSAgICBocmRhdGE7Ci19IHR5cGVfc2NyMV9yZXNwX2ZpZm9fczsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCBzaWduYWwgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdHlwZV9zY3IxX2ZzbV9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmc207Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9maWZvX3JkOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFfZmlmb193cjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxX2ZpZm9fdXA7Ci1gaWZkZWYgU0NSMV9JTUVNX0FIQl9PVVRfQlAKLXR5cGVfc2NyMV9yZXFfZmlmb19zICAgICAgICAgICAgICAgICAgICAgICAgcmVxX2ZpZm9fcjsKLXR5cGVfc2NyMV9yZXFfZmlmb19zIFswOjBdICAgICAgICAgICAgICAgICAgcmVxX2ZpZm87Ci1gZWxzZSAvLyBTQ1IxX0lNRU1fQUhCX09VVF9CUAotdHlwZV9zY3IxX3JlcV9maWZvX3MgWzA6U0NSMV9GSUZPX1dJRFRILTFdICByZXFfZmlmbzsKLXR5cGVfc2NyMV9yZXFfZmlmb19zIFswOlNDUjFfRklGT19XSURUSC0xXSAgcmVxX2ZpZm9fbmV3OwotbG9naWMgICAgICAgW1NDUjFfRklGT19DTlRfV0lEVEgtMTowXSAgICAgICByZXFfZmlmb19jbnQ7Ci1sb2dpYyAgICAgICBbU0NSMV9GSUZPX0NOVF9XSURUSC0xOjBdICAgICAgIHJlcV9maWZvX2NudF9uZXc7Ci1gZW5kaWYgLy8gU0NSMV9JTUVNX0FIQl9PVVRfQlAKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxX2ZpZm9fZW1wdHk7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9maWZvX2Z1bGw7Ci0KLXR5cGVfc2NyMV9yZXNwX2ZpZm9fcyAgICAgICAgICAgICAgICAgICAgICAgcmVzcF9maWZvOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwX2ZpZm9faHJlYWR5OwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEludGVyZmFjZSB0byBDb3JlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWFzc2lnbiBpbWVtX3JlcV9hY2sgPSB+cmVxX2ZpZm9fZnVsbDsKLWFzc2lnbiByZXFfZmlmb193ciAgPSB+cmVxX2ZpZm9fZnVsbCAmIGltZW1fcmVxOwotCi1hc3NpZ24gaW1lbV9yZGF0YSA9IHJlc3BfZmlmby5ocmRhdGE7Ci0KLWFzc2lnbiBpbWVtX3Jlc3AgPSAocmVzcF9maWZvX2hyZWFkeSkKLSAgICAgICAgICAgICAgICAgICAgPyAocmVzcF9maWZvLmhyZXNwID09IFNDUjFfSFJFU1BfT0tBWSkKLSAgICAgICAgICAgICAgICAgICAgICAgID8gU0NSMV9NRU1fUkVTUF9SRFlfT0sKLSAgICAgICAgICAgICAgICAgICAgICAgIDogU0NSMV9NRU1fUkVTUF9SRFlfRVIKLSAgICAgICAgICAgICAgICAgICAgOiBTQ1IxX01FTV9SRVNQX05PVFJEWTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSRVFfRklGTwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1gaWZkZWYgU0NSMV9JTUVNX0FIQl9PVVRfQlAKLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIHJlcV9maWZvX2Z1bGwgPD0gMSdiMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICBpZiAofnJlcV9maWZvX2Z1bGwpIGJlZ2luCi0gICAgICAgICAgICByZXFfZmlmb19mdWxsIDw9IGltZW1fcmVxICYgfnJlcV9maWZvX3JkOwotICAgICAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICAgICAgcmVxX2ZpZm9fZnVsbCA8PSB+cmVxX2ZpZm9fcmQ7Ci0gICAgICAgIGVuZAotICAgIGVuZAotZW5kCi1hc3NpZ24gcmVxX2ZpZm9fZW1wdHkgPSB+KHJlcV9maWZvX2Z1bGwgfCBpbWVtX3JlcSk7Ci0KLWFzc2lnbiByZXFfZmlmb191cCAgICA9IH5yZXFfZmlmb19yZCAmIHJlcV9maWZvX3dyOwotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKHJlcV9maWZvX3VwKSBiZWdpbgotICAgICAgICByZXFfZmlmb19yLmhhZGRyIDw9IGltZW1fYWRkcjsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gcmVxX2ZpZm9bMF0gPSAocmVxX2ZpZm9fZnVsbCkgPyByZXFfZmlmb19yIDogaW1lbV9hZGRyOwotCi1gZWxzZSAvLyBTQ1IxX0lNRU1fQUhCX09VVF9CUAotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICByZXFfZmlmb191cCAgICAgID0gMSdiMDsKLSAgICByZXFfZmlmb19jbnRfbmV3ID0gcmVxX2ZpZm9fY250OwotICAgIHJlcV9maWZvX25ldyAgICAgPSByZXFfZmlmbzsKLSAgICBjYXNlICh7cmVxX2ZpZm9fcmQsIHJlcV9maWZvX3dyfSkKLSAgICAgICAgMidiMDAgOiBiZWdpbgotICAgICAgICAgICAgLy8gbm90aGluZyB0b2RvCi0gICAgICAgIGVuZAotICAgICAgICAyJ2IwMTogYmVnaW4KLSAgICAgICAgICAgIC8vIEZJRk8gd3JpdGUKLSAgICAgICAgICAgIHJlcV9maWZvX3VwID0gMSdiMTsKLSAgICAgICAgICAgIHJlcV9maWZvX25ld1tyZXFfZmlmb19jbnRdLmhhZGRyICA9IGltZW1fYWRkcjsKLSAgICAgICAgICAgIHJlcV9maWZvX2NudF9uZXcgPSByZXFfZmlmb19jbnQgKyAxJ2IxOwotICAgICAgICBlbmQKLSAgICAgICAgMidiMTAgOiBiZWdpbgotICAgICAgICAgICAgLy8gRklGTyByZWFkCi0gICAgICAgICAgICByZXFfZmlmb191cCAgICAgPSAxJ2IxOwotICAgICAgICAgICAgcmVxX2ZpZm9fbmV3WzBdID0gcmVxX2ZpZm9fbmV3WzFdOwotICAgICAgICAgICAgcmVxX2ZpZm9fbmV3WzFdLmhhZGRyICA9ICd4OwotICAgICAgICAgICAgcmVxX2ZpZm9fY250X25ldyA9IHJlcV9maWZvX2NudCAtIDEnYjE7Ci0gICAgICAgIGVuZAotICAgICAgICAyJ2IxMSA6IGJlZ2luCi0gICAgICAgICAgICAvLyBSZWFkIGFuZCBXcml0ZSBGSUZPLiBJdCBpcyBwb3NzaWJsZSBvbmx5IHdoZW4gZmlmb19jbnQgPSAxCi0gICAgICAgICAgICByZXFfZmlmb191cCAgICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgcmVxX2ZpZm9fbmV3WzBdLmhhZGRyID0gaW1lbV9hZGRyOwotICAgICAgICBlbmQKLSAgICAgICAgZGVmYXVsdCA6IGJlZ2luCi0gICAgICAgICAgICByZXFfZmlmb191cCAgICAgID0gJ3g7Ci0gICAgICAgICAgICByZXFfZmlmb19jbnRfbmV3ID0gJ3g7Ci0gICAgICAgICAgICByZXFfZmlmb19uZXcgICAgID0gJ3g7Ci0gICAgICAgIGVuZAotICAgIGVuZGNhc2UKLWVuZAotCi1hbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICByZXFfZmlmb19jbnQgPD0gJzA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgaWYgKHJlcV9maWZvX3VwKSBiZWdpbgotICAgICAgICAgICAgcmVxX2ZpZm9fY250IDw9IHJlcV9maWZvX2NudF9uZXc7Ci0gICAgICAgIGVuZAotICAgIGVuZAotZW5kCi1hc3NpZ24gcmVxX2ZpZm9fZnVsbCAgPSAocmVxX2ZpZm9fY250ID09IFNDUjFfRklGT19XSURUSCk7Ci1hc3NpZ24gcmVxX2ZpZm9fZW1wdHkgPSB+KHxyZXFfZmlmb19jbnQpOwotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAocmVxX2ZpZm9fdXApIGJlZ2luCi0gICAgICAgIHJlcV9maWZvIDw9IHJlcV9maWZvX25ldzsKLSAgICBlbmQKLWVuZAotYGVuZGlmIC8vIFNDUjFfSU1FTV9BSEJfT1VUX0JQCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRlNNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGZzbSA8PSBTQ1IxX0ZTTV9BRERSOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGNhc2UgKGZzbSkKLSAgICAgICAgICAgIFNDUjFfRlNNX0FERFIgOiBiZWdpbgotICAgICAgICAgICAgICAgIGlmIChocmVhZHkpIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgIGZzbSA8PSAocmVxX2ZpZm9fZW1wdHkpID8gU0NSMV9GU01fQUREUiA6IFNDUjFfRlNNX0RBVEE7Ci0gICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIFNDUjFfRlNNX0RBVEEgOiBiZWdpbgotICAgICAgICAgICAgICAgIGlmIChocmVhZHkpIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgIGlmIChocmVzcCA9PSBTQ1IxX0hSRVNQX09LQVkpIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICBmc20gPD0gKHJlcV9maWZvX2VtcHR5KSA/IFNDUjFfRlNNX0FERFIgOiBTQ1IxX0ZTTV9EQVRBOwotICAgICAgICAgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgZnNtIDw9IFNDUjFfRlNNX0FERFI7Ci0gICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBkZWZhdWx0IDogYmVnaW4KLSAgICAgICAgICAgICAgICBmc20gPD0gU0NSMV9GU01fRVJSOwotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZGNhc2UKLSAgICBlbmQKLWVuZAotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIHJlcV9maWZvX3JkID0gMSdiMDsKLSAgICBjYXNlIChmc20pCi0gICAgICAgIFNDUjFfRlNNX0FERFIgOiBiZWdpbgotICAgICAgICAgICAgaWYgKGhyZWFkeSkgYmVnaW4KLSAgICAgICAgICAgICAgICByZXFfZmlmb19yZCA9IH5yZXFfZmlmb19lbXB0eTsKLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9GU01fREFUQSA6IGJlZ2luCi0gICAgICAgICAgICBpZiAoaHJlYWR5KSBiZWdpbgotICAgICAgICAgICAgICAgIHJlcV9maWZvX3JkID0gfnJlcV9maWZvX2VtcHR5ICYgKGhyZXNwID09IFNDUjFfSFJFU1BfT0tBWSk7Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kCi0gICAgICAgIGRlZmF1bHQgOiBiZWdpbgotICAgICAgICAgICAgcmVxX2ZpZm9fcmQgPSAxJ2J4OwotICAgICAgICBlbmQKLSAgICBlbmRjYXNlCi1lbmQKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBGSUZPIHJlc3BvbnNlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWBpZmRlZiBTQ1IxX0lNRU1fQUhCX0lOX0JQCi1hc3NpZ24gcmVzcF9maWZvX2hyZWFkeSA9IChmc20gPT0gU0NSMV9GU01fREFUQSkgPyBocmVhZHkgOiAxJ2IwOwotYXNzaWduIHJlc3BfZmlmby5ocmVzcCAgPSBocmVzcDsKLWFzc2lnbiByZXNwX2ZpZm8uaHJkYXRhID0gaHJkYXRhOwotYGVsc2UgLy8gU0NSMV9JTUVNX0FIQl9JTl9CUAotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgcmVzcF9maWZvX2hyZWFkeSA8PSAxJ2IwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIHJlc3BfZmlmb19ocmVhZHkgPD0gKGZzbSA9PSBTQ1IxX0ZTTV9EQVRBKSA/IGhyZWFkeSA6IDEnYjA7Ci0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKGhyZWFkeSAmIChmc20gPT0gU0NSMV9GU01fREFUQSkpIGJlZ2luCi0gICAgICAgIHJlc3BfZmlmby5ocmVzcCAgPD0gaHJlc3A7Ci0gICAgICAgIHJlc3BfZmlmby5ocmRhdGEgPD0gaHJkYXRhOwotICAgIGVuZAotZW5kCi1gZW5kaWYgLy8gU0NSMV9JTUVNX0FIQl9JTl9CUAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEludGVyZmFjZSB0byBBSEIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotYXNzaWduIGhwcm90W1NDUjFfSFBST1RfREFUQV0gID0gMSdiMDsKLWFzc2lnbiBocHJvdFtTQ1IxX0hQUk9UX1BSVl0gICA9IDEnYjA7Ci1hc3NpZ24gaHByb3RbU0NSMV9IUFJPVF9CVUZdICAgPSAxJ2IwOwotYXNzaWduIGhwcm90W1NDUjFfSFBST1RfQ0FDSEVdID0gMSdiMDsKLQotYXNzaWduIGhidXJzdCAgICAgICA9IFNDUjFfSEJVUlNUX1NJTkdMRTsKLWFzc2lnbiBoc2l6ZSAgICAgICAgPSBTQ1IxX0hTSVpFXzMyQjsKLWFzc2lnbiBobWFzdGxvY2sgICAgPSAxJ2IwOwotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGh0cmFucyA9IFNDUjFfSFRSQU5TX0lETEU7Ci0gICAgY2FzZSAoZnNtKQotICAgICAgICBTQ1IxX0ZTTV9BRERSIDogYmVnaW4KLSAgICAgICAgICAgIGlmICh+cmVxX2ZpZm9fZW1wdHkpIGJlZ2luCi0gICAgICAgICAgICAgICAgaHRyYW5zID0gU0NSMV9IVFJBTlNfTk9OU0VROwotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZAotICAgICAgICBTQ1IxX0ZTTV9EQVRBIDogYmVnaW4KLSAgICAgICAgICAgIGlmIChocmVhZHkpIGJlZ2luCi0gICAgICAgICAgICAgICAgaWYgKGhyZXNwID09IFNDUjFfSFJFU1BfT0tBWSkgYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgaWYgKH5yZXFfZmlmb19lbXB0eSkgYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGh0cmFucyA9IFNDUjFfSFRSQU5TX05PTlNFUTsKLSAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kCi0gICAgICAgIGRlZmF1bHQgOiBiZWdpbgotICAgICAgICAgICAgaHRyYW5zID0gU0NSMV9IVFJBTlNfRVJSOwotICAgICAgICBlbmQKLSAgICBlbmRjYXNlCi1lbmQKLQotYXNzaWduIGhhZGRyICA9IHJlcV9maWZvWzBdLmhhZGRyOwotCi1gaWZkZWYgU0NSMV9UUkdUX1NJTVVMQVRJT04KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQXNzZXJ0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gQ2hlY2sgQ29yZSBpbnRlcmZhY2UKLVNDUjFfU1ZBX0lNRU1fQUhCX0JSSURHRV9SRVFfWENIRUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgICEkaXN1bmtub3duKGltZW1fcmVxKQotICAgICkgZWxzZSAkZXJyb3IoIklNRU0gQUhCIGJyaWRnZSBFcnJvcjogaW1lbV9yZXEgaGFzIHVua25vd24gdmFsdWVzIik7Ci0KLVNDUjFfSU1FTV9BSEJfQlJJREdFX0FERFJfWENIRUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgIGltZW1fcmVxIHwtPiAhJGlzdW5rbm93bihpbWVtX2FkZHIpCi0gICAgKSBlbHNlICRlcnJvcigiSU1FTSBBSEIgYnJpZGdlIEVycm9yOiBpbWVtX2FkZHIgaGFzIHVua25vd24gdmFsdWVzIik7Ci0KLVNDUjFfSU1FTV9BSEJfQlJJREdFX0FERFJfQUxMSUdOIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgIGltZW1fcmVxIHwtPiAoaW1lbV9hZGRyWzE6MF0gPT0gJzApCi0gICAgKSBlbHNlICRlcnJvcigiSU1FTSBBSEIgYnJpZGdlIEVycm9yOiBpbWVtX2FkZHIgaGFzIHVuYWxpZ24gdmFsdWVzIik7Ci0KLS8vIENoZWNrIEFIQiBpbnRlcmZhY2UKLVNDUjFfSU1FTV9BSEJfQlJJREdFX0hSRUFEWV9YQ0hFQ0sgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgISRpc3Vua25vd24oaHJlYWR5KQotICAgICkgZWxzZSAkZXJyb3IoIklNRU0gQUhCIGJyaWRnZSBFcnJvcjogaHJlYWR5IGhhcyB1bmtub3duIHZhbHVlcyIpOwotCi1TQ1IxX0lNRU1fQUhCX0JSSURHRV9IUkVTUF9YQ0hFQ0sgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgISRpc3Vua25vd24oaHJlc3ApCi0gICAgKSBlbHNlICRlcnJvcigiSU1FTSBBSEIgYnJpZGdlIEVycm9yOiBocmVzcCBoYXMgdW5rbm93biB2YWx1ZXMiKTsKLQotYGVuZGlmIC8vIFNDUjFfVFJHVF9TSU1VTEFUSU9OCi0KLWVuZG1vZHVsZSA6IHNjcjFfaW1lbV9haGIKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy90b3Avc2NyMV9pbWVtX3JvdXRlci5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy90b3Avc2NyMV9pbWVtX3JvdXRlci5zdgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI1NTRmMS4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvdG9wL3NjcjFfaW1lbV9yb3V0ZXIuc3YKKysrIC9kZXYvbnVsbApAQCAtMSwyMDEgKzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiBTeW50YWNvcmUgTExDIMKpIDIwMTYtMjAyMQotLy8gCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAotLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IFN5bnRhY29yZSBMTEMKLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8gQGZpbGUgICAgICAgPHNjcjFfaW1lbV9yb3V0ZXIuc3Y+Ci0vLy8gQGJyaWVmICAgICAgSW5zdHJ1Y3Rpb24gbWVtb3J5IHJvdXRlcgotLy8vCi1gaW5jbHVkZSAic2NyMV9tZW1pZi5zdmgiCi1gaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKLQotbW9kdWxlIHNjcjFfaW1lbV9yb3V0ZXIKLSMoCi0gICAgcGFyYW1ldGVyIFNDUjFfQUREUl9NQVNLICAgID0gYFNDUjFfSU1FTV9BV0lEVEgnaEZGRkYwMDAwLAotICAgIHBhcmFtZXRlciBTQ1IxX0FERFJfUEFUVEVSTiA9IGBTQ1IxX0lNRU1fQVdJRFRIJ2gwMDAxMDAwMAotKQotKAotICAgIC8vIENvbnRyb2wgc2lnbmFscwotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICByc3RfbiwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrLAotCi0gICAgLy8gQ29yZSBpbnRlcmZhY2UKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1lbV9yZXFfYWNrLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWVtX3JlcSwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1lbV9jbWQsCi0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfSU1FTV9BV0lEVEgtMTowXSAgIGltZW1fYWRkciwKLSAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9JTUVNX0RXSURUSC0xOjBdICAgaW1lbV9yZGF0YSwKLSAgICBvdXRwdXQgIGxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgaW1lbV9yZXNwLAotCi0gICAgLy8gUE9SVDAgaW50ZXJmYWNlCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQwX3JlcV9hY2ssCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQwX3JlcSwKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydDBfY21kLAotICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX0lNRU1fQVdJRFRILTE6MF0gICBwb3J0MF9hZGRyLAotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX0lNRU1fRFdJRFRILTE6MF0gICBwb3J0MF9yZGF0YSwKLSAgICBpbnB1dCAgIGxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgcG9ydDBfcmVzcCwKLQotICAgIC8vIFBPUlQxIGludGVyZmFjZQotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0MV9yZXFfYWNrLAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0MV9yZXEsCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQxX2NtZCwKLSAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9JTUVNX0FXSURUSC0xOjBdICAgcG9ydDFfYWRkciwKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9JTUVNX0RXSURUSC0xOjBdICAgcG9ydDFfcmRhdGEsCi0gICAgaW5wdXQgICBsb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgIHBvcnQxX3Jlc3AKLSk7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgdHlwZXMgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdHlwZWRlZiBlbnVtIGxvZ2ljIHsKLSAgICBTQ1IxX0ZTTV9BRERSLAotICAgIFNDUjFfRlNNX0RBVEEKLX0gdHlwZV9zY3IxX2ZzbV9lOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHNpZ25hbCBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10eXBlX3NjcjFfZnNtX2UgICAgICAgICAgICAgICAgIGZzbTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydF9zZWw7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRfc2VsX3I7Ci1sb2dpYyBbYFNDUjFfSU1FTV9EV0lEVEgtMTowXSAgIHNlbF9yZGF0YTsKLWxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgc2VsX3Jlc3A7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbF9yZXFfYWNrOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEZTTQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1hc3NpZ24gcG9ydF9zZWwgPSAoKGltZW1fYWRkciAmIFNDUjFfQUREUl9NQVNLKSA9PSBTQ1IxX0FERFJfUEFUVEVSTik7Ci0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGZzbSAgICAgICAgPD0gU0NSMV9GU01fQUREUjsKLSAgICAgICAgcG9ydF9zZWxfciA8PSAxJ2IwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGNhc2UgKGZzbSkKLSAgICAgICAgICAgIFNDUjFfRlNNX0FERFIgOiBiZWdpbgotICAgICAgICAgICAgICAgIGlmIChpbWVtX3JlcSAmIHNlbF9yZXFfYWNrKSBiZWdpbgotICAgICAgICAgICAgICAgICAgICBmc20gPD0gU0NSMV9GU01fREFUQTsKLSAgICAgICAgICAgICAgICAgICAgcG9ydF9zZWxfciA8PSBwb3J0X3NlbDsKLSAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgU0NSMV9GU01fREFUQSA6IGJlZ2luCi0gICAgICAgICAgICAgICAgY2FzZSAoc2VsX3Jlc3ApCi0gICAgICAgICAgICAgICAgICAgIFNDUjFfTUVNX1JFU1BfUkRZX09LIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbWVtX3JlcSAmIHNlbF9yZXFfYWNrKSBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZzbSA8PSBTQ1IxX0ZTTV9EQVRBOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRfc2VsX3IgPD0gcG9ydF9zZWw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZzbSA8PSBTQ1IxX0ZTTV9BRERSOwotICAgICAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICBTQ1IxX01FTV9SRVNQX1JEWV9FUiA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICBmc20gPD0gU0NSMV9GU01fQUREUjsKLSAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICBlbmRjYXNlCi0gICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIGRlZmF1bHQgOiBiZWdpbgotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZGNhc2UKLSAgICBlbmQKLWVuZAotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGlmICgoZnNtID09IFNDUjFfRlNNX0FERFIpIHwgKChmc20gPT0gU0NSMV9GU01fREFUQSkgJiAoc2VsX3Jlc3AgPT0gU0NSMV9NRU1fUkVTUF9SRFlfT0spKSkgYmVnaW4KLSAgICAgICAgc2VsX3JlcV9hY2sgPSAocG9ydF9zZWwpID8gcG9ydDFfcmVxX2FjayA6IHBvcnQwX3JlcV9hY2s7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgc2VsX3JlcV9hY2sgPSAxJ2IwOwotICAgIGVuZAotZW5kCi0KLWFzc2lnbiBzZWxfcmRhdGEgPSAocG9ydF9zZWxfcikgPyBwb3J0MV9yZGF0YSA6IHBvcnQwX3JkYXRhOwotYXNzaWduIHNlbF9yZXNwICA9IChwb3J0X3NlbF9yKSA/IHBvcnQxX3Jlc3AgIDogcG9ydDBfcmVzcDsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBJbnRlcmZhY2UgdG8gY29yZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1hc3NpZ24gaW1lbV9yZXFfYWNrID0gc2VsX3JlcV9hY2s7Ci1hc3NpZ24gaW1lbV9yZGF0YSAgID0gc2VsX3JkYXRhOwotYXNzaWduIGltZW1fcmVzcCAgICA9IHNlbF9yZXNwOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEludGVyZmFjZSB0byBQT1JUMAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1hbHdheXNfY29tYiBiZWdpbgotICAgIHBvcnQwX3JlcSA9IDEnYjA7Ci0gICAgY2FzZSAoZnNtKQotICAgICAgICBTQ1IxX0ZTTV9BRERSIDogYmVnaW4KLSAgICAgICAgICAgIHBvcnQwX3JlcSA9IGltZW1fcmVxICYgfnBvcnRfc2VsOwotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9GU01fREFUQSA6IGJlZ2luCi0gICAgICAgICAgICBpZiAoc2VsX3Jlc3AgPT0gU0NSMV9NRU1fUkVTUF9SRFlfT0spIGJlZ2luCi0gICAgICAgICAgICAgICAgcG9ydDBfcmVxID0gaW1lbV9yZXEgJiB+cG9ydF9zZWw7Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kCi0gICAgICAgIGRlZmF1bHQgOiBiZWdpbgotICAgICAgICBlbmQKLSAgICBlbmRjYXNlCi1lbmQKLQotYGlmZGVmIFNDUjFfWFBST1BfRU4KLWFzc2lnbiBwb3J0MF9jbWQgICA9ICh+cG9ydF9zZWwpID8gaW1lbV9jbWQgIDogU0NSMV9NRU1fQ01EX0VSUk9SOwotYXNzaWduIHBvcnQwX2FkZHIgID0gKH5wb3J0X3NlbCkgPyBpbWVtX2FkZHIgOiAneDsKLWBlbHNlIC8vIFNDUjFfWFBST1BfRU4KLWFzc2lnbiBwb3J0MF9jbWQgICA9IGltZW1fY21kIDsKLWFzc2lnbiBwb3J0MF9hZGRyICA9IGltZW1fYWRkcjsKLWBlbmRpZiAvLyBTQ1IxX1hQUk9QX0VOCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSW50ZXJmYWNlIHRvIFBPUlQxCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgcG9ydDFfcmVxID0gMSdiMDsKLSAgICBjYXNlIChmc20pCi0gICAgICAgIFNDUjFfRlNNX0FERFIgOiBiZWdpbgotICAgICAgICAgICAgcG9ydDFfcmVxID0gaW1lbV9yZXEgJiBwb3J0X3NlbDsKLSAgICAgICAgZW5kCi0gICAgICAgIFNDUjFfRlNNX0RBVEEgOiBiZWdpbgotICAgICAgICAgICAgaWYgKHNlbF9yZXNwID09IFNDUjFfTUVNX1JFU1BfUkRZX09LKSBiZWdpbgotICAgICAgICAgICAgICAgIHBvcnQxX3JlcSA9IGltZW1fcmVxICYgcG9ydF9zZWw7Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kCi0gICAgICAgIGRlZmF1bHQgOiBiZWdpbgotICAgICAgICBlbmQKLSAgICBlbmRjYXNlCi1lbmQKLQotYGlmZGVmIFNDUjFfWFBST1BfRU4KLWFzc2lnbiBwb3J0MV9jbWQgICA9IChwb3J0X3NlbCkgPyBpbWVtX2NtZCAgOiBTQ1IxX01FTV9DTURfRVJST1I7Ci1hc3NpZ24gcG9ydDFfYWRkciAgPSAocG9ydF9zZWwpID8gaW1lbV9hZGRyIDogJ3g7Ci1gZWxzZSAvLyBTQ1IxX1hQUk9QX0VOCi1hc3NpZ24gcG9ydDFfY21kICAgPSBpbWVtX2NtZCA7Ci1hc3NpZ24gcG9ydDFfYWRkciAgPSBpbWVtX2FkZHI7Ci1gZW5kaWYgLy8gU0NSMV9YUFJPUF9FTgotCi1gaWZkZWYgU0NSMV9UUkdUX1NJTVVMQVRJT04KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQXNzZXJ0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotU0NSMV9TVkFfSU1FTV9SVF9YQ0hFQ0sgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgaW1lbV9yZXEgfC0+ICEkaXN1bmtub3duKHtwb3J0X3NlbCwgaW1lbV9jbWR9KQotICAgICkgZWxzZSAkZXJyb3IoIklNRU0gcm91dGVyIEVycm9yOiB1bmtub3duIHZhbHVlcyIpOwotCi1gZW5kaWYgLy8gU0NSMV9UUkdUX1NJTVVMQVRJT04KLQotZW5kbW9kdWxlIDogc2NyMV9pbWVtX3JvdXRlcgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL3RvcC9zY3IxX2ltZW1fd2Iuc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvdG9wL3NjcjFfaW1lbV93Yi5zdgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVhNmFiYi4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvdG9wL3NjcjFfaW1lbV93Yi5zdgorKysgL2Rldi9udWxsCkBAIC0xLDI3MSArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhCi0vLyAKLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0vLyBTUERYLUZpbGVDb250cmlidXRvcjogRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICB5aWZpdmUgV2lzaGJvbmUgaW50ZXJmYWNlIGZvciBJbnN0cnVjdGlvbiBtZW1vcnkgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgeWlmaXZlIGNvcmVzIHByb2plY3QgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS95aWZpdmVfcjAuZ2l0ICAgICAgICAgICAgICAvLy8vCi0vLy8vICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMveWlmaXZlLyAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBEZXNjcmlwdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICBpbnRlZ3JhdGVkIHdpc2hib25lIGkvZiB0byBpbnN0cnVjdGlvbiBtZW1vcnkgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICB2MDogICAgSnVuZSA3LCAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgIHdpc2hib25lIGludGVncmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICB2MTogICAgSnVuZSA5LCAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICBPbiBwb3dlciB1cCwgd2lzaGJvbmUgb3V0cHV0IGFyZSB1bmtvd24gYXMgaXQgICAvLy8vCi0vLy8vICAgICAgICAgICAgICBkcml2ZW4gZnJvbSBmaWZvIG91dHB1dC4gVG8gYXZvaWQgdW5rbm93biAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICBwcm9wZ2F0aW9uLCB3ZSBhcmUgZHJpdmluZyAnaDAgd2hlbiBmaWZvIGVtcHR5ICAvLy8vCi0vLy8vICAgICB2MjogICAgSnVuZSAxOCwgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgY29yZSBhbmQgd2lzaGJvbmUgaXMgbWFkZSBhc3luYyBhbmQgYXN5bmMgZmlmbyAgICAvLy8vCi0vLy8vICAgICAgICAgICAgYWRkZWQgdG8gdGFrZSBjYXJlIG9mIGRvbWFpbiBjcm9zcy1vdmVyICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vCi0vLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vCi0vLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCi0vLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCi0vLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vCi0vLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vCi0vLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCi0vLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCi0vLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vCi0vLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vCi0vLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCi0vLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCi0vLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vCi0vLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyAgICAgT3JnaW5hbCBvd25lciBEZXRhaWxzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgqSAyMDE2LTIwMjEuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzLy8vCi0vLy8gQGZpbGUgICAgICAgPHNjcjFfaW1lbV93Yi5zdj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vCi0vLy8gQGJyaWVmICAgICAgSW5zdHJ1Y3Rpb24gbWVtb3J5IEFIQiBicmlkZ2UgICAgICAgICAgICAgICAgICAgICAgLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLWBpbmNsdWRlICJzY3IxX3diLnN2aCIKLWBpbmNsdWRlICJzY3IxX21lbWlmLnN2aCIKLQotbW9kdWxlIHNjcjFfaW1lbV93YiAoCi0gICAgLy8gQ29udHJvbCBTaWduYWxzCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfcnN0X24sIC8vIGNvcmUgcmVzZXQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9jbGssICAgLy8gQ29yZSBjbG9jawotCi0gICAgLy8gQ29yZSBJbnRlcmZhY2UKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1lbV9yZXFfYWNrLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWVtX3JlcSwKLSAgICBpbnB1dCAgIGxvZ2ljICAgW1NDUjFfV0JfV0lEVEgtMTowXSAgICAgaW1lbV9hZGRyLAotICAgIG91dHB1dCAgbG9naWMgICBbU0NSMV9XQl9XSURUSC0xOjBdICAgICBpbWVtX3JkYXRhLAotICAgIG91dHB1dCAgbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICBpbWVtX3Jlc3AsCi0KLSAgICAvLyBXQiBJbnRlcmZhY2UKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JfcnN0X24sICAgLy8gd2lzaGJvbmUgcmVzZXQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JfY2xrLCAgICAgLy8gd2lzaGJvbmUgY2xvY2sKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3N0Yl9vLCAvLyBzdHJvYmUvcmVxdWVzdAotICAgIG91dHB1dCAgbG9naWMgICBbU0NSMV9XQl9XSURUSC0xOjBdICAgICB3YmRfYWRyX28sIC8vIGFkZHJlc3MKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3dlX28sICAvLyB3cml0ZQotICAgIG91dHB1dCAgbG9naWMgICBbU0NSMV9XQl9XSURUSC0xOjBdICAgICB3YmRfZGF0X28sIC8vIGRhdGEgb3V0cHV0Ci0gICAgb3V0cHV0ICBsb2dpYyAgIFszOjBdICAgICAgICAgICAgICAgICAgIHdiZF9zZWxfbywgLy8gYnl0ZSBlbmFibGUKLSAgICBpbnB1dCAgIGxvZ2ljICAgW1NDUjFfV0JfV0lEVEgtMTowXSAgICAgd2JkX2RhdF9pLCAvLyBkYXRhIGlucHV0Ci0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9hY2tfaSwgLy8gYWNrbm93bGVnZW1lbnQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Vycl9pICAvLyBlcnJvcgotCi0pOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHBhcmFtZXRlcnMgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHR5cGVzIGRlY2xhcmF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdHlwZWRlZiBzdHJ1Y3QgcGFja2VkIHsKLSAgICBsb2dpYyAgIFtTQ1IxX1dCX1dJRFRILTE6MF0gICAgaGFkZHI7Ci19IHR5cGVfc2NyMV9yZXFfZmlmb19zOwotCi10eXBlZGVmIHN0cnVjdCBwYWNrZWQgewotICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlc3A7Ci0gICAgbG9naWMgICBbU0NSMV9XQl9XSURUSC0xOjBdICAgIGhyZGF0YTsKLX0gdHlwZV9zY3IxX3Jlc3BfZmlmb19zOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHNpZ25hbCBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUmVxdWVzdCBGSUZPCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxX2ZpZm9fcmQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9maWZvX3dyOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFfZmlmb19lbXB0eTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxX2ZpZm9fZnVsbDsKLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSZXNwb25zZSBGSUZPIChSRUFEIFBBVEgKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwX2ZpZm9fZW1wdHk7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcF9maWZvX3JkOwotCi0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSRVFfRklGTwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10eXBlX3NjcjFfcmVxX2ZpZm9fcyAgICByZXFfZmlmb19kaW47Ci10eXBlX3NjcjFfcmVxX2ZpZm9fcyAgICByZXFfZmlmb19kb3V0OwotCi1hc3NpZ24gcmVxX2ZpZm9fd3IgID0gfnJlcV9maWZvX2Z1bGwgJiBpbWVtX3JlcTsKLWFzc2lnbiBpbWVtX3JlcV9hY2sgPSB+cmVxX2ZpZm9fZnVsbDsKLQotYXNzaWduIHJlcV9maWZvX2Rpbi5oYWRkciA9IGltZW1fYWRkcjsKLQotIGFzeW5jX2ZpZm8gIygKLSAgICAgIC5XKFNDUjFfV0JfV0lEVEgpLCAvLyBEYXRhIFdpZHRoCi0gICAgICAuRFAoNCksICAgICAgICAgICAgLy8gRklGTyBERVBUSAotICAgICAgLldSX0ZBU1QoMSksICAgICAgIC8vIFdlIG5lZWQgRkYnZWQgRnVsbAotICAgICAgLlJEX0ZBU1QoMSkgICAgICAgIC8vIFdlIG5lZWQgRkYnZWQgRW1wdHkKLSAgICAgKSAgIHVfcmVxX2ZpZm8oCi0gICAgIC8vIFdyaXRjIENsb2NrCi0JLndyX2NsayAgICAgIChjb3JlX2NsayAgICAgICApLAotICAgICAgICAud3JfcmVzZXRfbiAgKGNvcmVfcnN0X24gICAgICksCi0gICAgICAgIC53cl9lbiAgICAgICAocmVxX2ZpZm9fd3IgICAgKSwKLSAgICAgICAgLndyX2RhdGEgICAgIChyZXFfZmlmb19kaW4gICApLAotICAgICAgICAuZnVsbCAgICAgICAgKHJlcV9maWZvX2Z1bGwgICksCi0gICAgICAgIC5hZnVsbCAgICAgICAoICAgICAgICAgICAgICAgKSwgICAgICAgICAgICAgICAgIAotCi0gICAgLy8gUkQgQ2xvY2sKLSAgICAgICAgLnJkX2NsayAgICAgKHdiX2NsayAgICAgICAgICApLAotICAgICAgICAucmRfcmVzZXRfbiAod2JfcnN0X24gICAgICAgICksCi0gICAgICAgIC5yZF9lbiAgICAgIChyZXFfZmlmb19yZCAgICAgKSwKLSAgICAgICAgLmVtcHR5ICAgICAgKHJlcV9maWZvX2VtcHR5ICApLCAgICAgICAgICAgICAgICAKLSAgICAgICAgLmFlbXB0eSAgICAgKCAgICAgICAgICAgICAgICApLCAgICAgICAgICAgICAgICAKLSAgICAgICAgLnJkX2RhdGEgICAgKHJlcV9maWZvX2RvdXQgICApCi0gICAgICApOwotCi0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgcmVxX2ZpZm9fcmQgPSAxJ2IwOwotICAgIGlmICh3YmRfYWNrX2kpIGJlZ2luCi0gICAgICAgICByZXFfZmlmb19yZCA9IH5yZXFfZmlmb19lbXB0eTsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gd2JkX3N0Yl9vICAgID0gfnJlcV9maWZvX2VtcHR5OwotLy8gT24gUG93ZXIsIHRvIGF2b2lkIHVua25vdyBwcm9wZ2F0aW5nIHRoZSB2YWx1ZQotYXNzaWduIHdiZF9hZHJfbyAgICA9IChyZXFfZmlmb19lbXB0eSkgPyAnaDAgOiByZXFfZmlmb19kb3V0LmhhZGRyOyAKLWFzc2lnbiB3YmRfd2VfbyAgICAgPSAwOyAvLyBPbmx5IFJlYWQgc3VwcG9ydGVkCi1hc3NpZ24gd2JkX2RhdF9vICAgID0gMzInaDA7IC8vIE5vIFdyaXRlCi1hc3NpZ24gd2JkX3NlbF9vICAgID0gNCdiMTExMTsgLy8gT25seSBSZWFkIGFsbG93ZWQgaW4gaW1lbSBpL2YKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUmVzcG9uc2UgcGF0aCAtIFVzZWQgYnkgUmVhZCBwYXRoIGxvZ2ljCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXR5cGVfc2NyMV9yZXNwX2ZpZm9fcyAgICAgICAgICAgICAgICAgICAgICAgcmVzcF9maWZvX2RpbjsKLXR5cGVfc2NyMV9yZXNwX2ZpZm9fcyAgICAgICAgICAgICAgICAgICAgICAgcmVzcF9maWZvX2RvdXQ7Ci0KLWFzc2lnbiByZXNwX2ZpZm9fZGluLmhyZXNwICA9ICh3YmRfZXJyX2kpID8gMSdiMCA6IDEnYjE7Ci1hc3NpZ24gcmVzcF9maWZvX2Rpbi5ocmRhdGEgPSB3YmRfZGF0X2k7Ci0KLSBhc3luY19maWZvICMoCi0gICAgICAuVyhTQ1IxX1dCX1dJRFRIKzEpLCAvLyBEYXRhIFdpZHRoCi0gICAgICAuRFAoNCksICAgICAgICAgICAgLy8gRklGTyBERVBUSAotICAgICAgLldSX0ZBU1QoMSksICAgICAgIC8vIFdlIG5lZWQgRkYnZWQgRnVsbAotICAgICAgLlJEX0ZBU1QoMSkgICAgICAgIC8vIFdlIG5lZWQgRkYnZWQgRW1wdHkKLSAgICAgKSAgIHVfcmVzX2ZpZm8oCi0gICAgIC8vIFdyaXRjIENsb2NrCi0JLndyX2NsayAgICAgICh3Yl9jbGsgICAgICAgICAgICAgICAgICksCi0gICAgICAgIC53cl9yZXNldF9uICAod2JfcnN0X24gICAgICAgICAgICAgICApLAotICAgICAgICAud3JfZW4gICAgICAgKHdiZF9hY2tfaSAgICAgICAgICAgICAgKSwKLSAgICAgICAgLndyX2RhdGEgICAgIChyZXNwX2ZpZm9fZGluICAgICAgICAgICksCi0gICAgICAgIC5mdWxsICAgICAgICAoICAgICAgICAgICAgICAgICAgICAgICApLCAvLyBBc3NtZWQgRklGTyB3aWxsIG5ldmVyIGJlIGZ1bGwgYXMgaXQncyBSZXNwb25zZSBhIFNpbmdsZSBSZXF1ZXN0Ci0gICAgICAgIC5hZnVsbCAgICAgICAoICAgICAgICAgICAgICAgICAgICAgICApLCAgICAgICAgICAgICAgICAgCi0KLSAgICAvLyBSRCBDbG9jawotICAgICAgICAucmRfY2xrICAgICAoY29yZV9jbGsgICAgICAgICAgICAgICAgKSwKLSAgICAgICAgLnJkX3Jlc2V0X24gKGNvcmVfcnN0X24gICAgICAgICAgICAgICksCi0gICAgICAgIC5yZF9lbiAgICAgIChyZXNwX2ZpZm9fcmQgICAgICAgICAgICApLAotICAgICAgICAuZW1wdHkgICAgICAocmVzcF9maWZvX2VtcHR5ICAgICAgICAgKSwgICAgICAgICAgICAgICAgCi0gICAgICAgIC5hZW1wdHkgICAgICggICAgICAgICAgICAgICAgICAgICAgICApLCAgICAgICAgICAgICAgICAKLSAgICAgICAgLnJkX2RhdGEgICAgKHJlc3BfZmlmb19kb3V0ICAgICAgICAgICkKLSAgICAgICk7Ci0KLQotYXNzaWduIHJlc3BfZmlmb19yZCA9ICFyZXNwX2ZpZm9fZW1wdHk7Ci1hc3NpZ24gaW1lbV9yZGF0YSAgID0gcmVzcF9maWZvX2RvdXQuaHJkYXRhOwotCi1hc3NpZ24gaW1lbV9yZXNwID0gKHJlc3BfZmlmb19yZCkKLSAgICAgICAgICAgICAgICAgICAgPyAocmVzcF9maWZvX2RvdXQuaHJlc3AgPT0gMSdiMSkKLSAgICAgICAgICAgICAgICAgICAgICAgID8gU0NSMV9NRU1fUkVTUF9SRFlfT0sKLSAgICAgICAgICAgICAgICAgICAgICAgIDogU0NSMV9NRU1fUkVTUF9SRFlfRVIKLSAgICAgICAgICAgICAgICAgICAgOiBTQ1IxX01FTV9SRVNQX05PVFJEWSA7Ci0KLQotYGlmZGVmIFNDUjFfVFJHVF9TSU1VTEFUSU9OCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEFzc2VydGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIENoZWNrIENvcmUgaW50ZXJmYWNlCi1TQ1IxX1NWQV9JTUVNX1dCX0JSSURHRV9SRVFfWENIRUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY29yZV9jbGspIGRpc2FibGUgaWZmICh+Y29yZV9yc3RfbikKLSAgICAhJGlzdW5rbm93bihpbWVtX3JlcSkKLSAgICApIGVsc2UgJGVycm9yKCJJTUVNIFdCIGJyaWRnZSBFcnJvcjogaW1lbV9yZXEgaGFzIHVua25vd24gdmFsdWVzIik7Ci0KLVNDUjFfSU1FTV9XQl9CUklER0VfQUREUl9YQ0hFQ0sgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjb3JlX2NsaykgZGlzYWJsZSBpZmYgKH5jb3JlX3JzdF9uKQotICAgIGltZW1fcmVxIHwtPiAhJGlzdW5rbm93bihpbWVtX2FkZHIpCi0gICAgKSBlbHNlICRlcnJvcigiSU1FTSBXQiBicmlkZ2UgRXJyb3I6IGltZW1fYWRkciBoYXMgdW5rbm93biB2YWx1ZXMiKTsKLQotU0NSMV9JTUVNX1dCX0JSSURHRV9BRERSX0FMTElHTiA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNvcmVfY2xrKSBkaXNhYmxlIGlmZiAofmNvcmVfcnN0X24pCi0gICAgaW1lbV9yZXEgfC0+IChpbWVtX2FkZHJbMTowXSA9PSAnMCkKLSAgICApIGVsc2UgJGVycm9yKCJJTUVNIFdCIGJyaWRnZSBFcnJvcjogaW1lbV9hZGRyIGhhcyB1bmFsaWduIHZhbHVlcyIpOwotCi0vLyBDaGVjayBXQiBpbnRlcmZhY2UKLVNDUjFfSU1FTV9XQl9CUklER0VfSFJFQURZX1hDSEVDSyA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNvcmVfY2xrKSBkaXNhYmxlIGlmZiAofmNvcmVfcnN0X24pCi0gICAgISRpc3Vua25vd24oaW1lbV9yZXFfYWNrKQotICAgICkgZWxzZSAkZXJyb3IoIklNRU0gV0IgYnJpZGdlIEVycm9yOiBpbWVtX3JlcV9hY2sgaGFzIHVua25vd24gdmFsdWVzIik7Ci0KLVNDUjFfSU1FTV9XQl9CUklER0VfSFJFU1BfWENIRUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY29yZV9jbGspIGRpc2FibGUgaWZmICh+Y29yZV9yc3RfbikKLSAgICAhJGlzdW5rbm93bihpbWVtX3Jlc3ApCi0gICAgKSBlbHNlICRlcnJvcigiSU1FTSBXQiBicmlkZ2UgRXJyb3I6IGltZW1fcmVzcCBoYXMgdW5rbm93biB2YWx1ZXMiKTsKLQotYGVuZGlmIC8vIFNDUjFfVFJHVF9TSU1VTEFUSU9OCi0KLWVuZG1vZHVsZSA6IHNjcjFfaW1lbV93YgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL3RvcC9zY3IxX2ludGYuc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvdG9wL3NjcjFfaW50Zi5zdgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFhNWEwNS4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvdG9wL3NjcjFfaW50Zi5zdgorKysgL2Rldi9udWxsCkBAIC0xLDU1NCArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhCi0vLyAKLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0vLyBTUERYLUZpbGVDb250cmlidXRvcjogRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBzeW50YWNvcmUgaW50ZXJmYWNlIGJsb2NrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgeWlmaXZlIGNvcmVzIHByb2plY3QgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS95aWZpdmVfcjAuZ2l0ICAgICAgICAgICAgICAvLy8vCi0vLy8vICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMveWlmaXZlLyAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBEZXNjcmlwdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICBIb2xkcyBpbnRlcmZhY2UgYmxvY2sgYW5kIHRpbWVyICYgcmVzZXQgc3luYyBsb2dpYyAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vCi0vLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vCi0vLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCi0vLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCi0vLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vCi0vLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vCi0vLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCi0vLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCi0vLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vCi0vLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vCi0vLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCi0vLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCi0vLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vCi0vLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi1gaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKLWBpbmNsdWRlICJzY3IxX21lbWlmLnN2aCIKLWBpbmNsdWRlICJzY3IxX3diLnN2aCIKLWBpZmRlZiBTQ1IxX0lQSUNfRU4KLWBpbmNsdWRlICJzY3IxX2lwaWMuc3ZoIgotYGVuZGlmIC8vIFNDUjFfSVBJQ19FTgotCi1gaWZkZWYgU0NSMV9UQ01fRU4KLSBgZGVmaW5lIFNDUjFfSU1FTV9ST1VURVJfRU4KLWBlbmRpZiAvLyBTQ1IxX1RDTV9FTgotCi1tb2R1bGUgc2NyMV9pbnRmICgKLSAgICAvLyBDb250cm9sCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHB3cnVwX3JzdF9uLCAgICAgICAgICAgIC8vIFBvd2VyLVVwIFJlc2V0Ci0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLCAgICAgICAgICAgICAgICAgIC8vIFJlZ3VsYXIgUmVzZXQgc2lnbmFsCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdV9yc3RfbiwgICAgICAgICAgICAgIC8vIENQVSBSZXNldCAoQ29yZSBSZXNldCkKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9jbGssICAgICAgICAgICAgICAgLy8gQ29yZSBjbG9jawotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBydGNfY2xrLCAgICAgICAgICAgICAgICAvLyBSZWFsLXRpbWUgY2xvY2sKLSAgICBvdXRwdXQgIGxvZ2ljIFs2MzowXSAgICAgICAgICAgICAgICAgICAgcmlzY3ZfZGVidWcsCi0KLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgIC8vIC0tIEpUQUcgSS9GCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyc3RfbiwKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi1gaWZuZGVmIFNDUjFfVENNX01FTQotICAgIC8vIFNSQU0tMCBQT1JULTAKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JhbTBfY2xrMCwKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JhbTBfY3NiMCwKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JhbTBfd2ViMCwKLSAgICBvdXRwdXQgIGxvZ2ljICAgWzg6MF0gICAgICAgICAgICAgICAgICAgc3JhbTBfYWRkcjAsCi0gICAgb3V0cHV0ICBsb2dpYyAgIFszOjBdICAgICAgICAgICAgICAgICAgIHNyYW0wX3dtYXNrMCwKLSAgICBvdXRwdXQgIGxvZ2ljICAgWzMxOjBdICAgICAgICAgICAgICAgICAgc3JhbTBfZGluMCwKLSAgICBpbnB1dCAgIGxvZ2ljICAgWzMxOjBdICAgICAgICAgICAgICAgICAgc3JhbTBfZG91dDAsCi0KLSAgICAvLyBTUkFNLTAgUE9SVC0xCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYW0wX2NsazEsCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYW0wX2NzYjEsCi0gICAgb3V0cHV0ICBsb2dpYyAgWzg6MF0gICAgICAgICAgICAgICAgICAgIHNyYW0wX2FkZHIxLAotICAgIGlucHV0ICAgbG9naWMgIFszMTowXSAgICAgICAgICAgICAgICAgICBzcmFtMF9kb3V0MSwKLQotICAgIC8vIFNSQU0tMSBQT1JULTAKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JhbTFfY2xrMCwKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JhbTFfY3NiMCwKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JhbTFfd2ViMCwKLSAgICBvdXRwdXQgIGxvZ2ljICAgWzg6MF0gICAgICAgICAgICAgICAgICAgc3JhbTFfYWRkcjAsCi0gICAgb3V0cHV0ICBsb2dpYyAgIFszOjBdICAgICAgICAgICAgICAgICAgIHNyYW0xX3dtYXNrMCwKLSAgICBvdXRwdXQgIGxvZ2ljICAgWzMxOjBdICAgICAgICAgICAgICAgICAgc3JhbTFfZGluMCwKLSAgICBpbnB1dCAgIGxvZ2ljICAgWzMxOjBdICAgICAgICAgICAgICAgICAgc3JhbTFfZG91dDAsCi0KLSAgICAvLyBTUkFNLTEgUE9SVC0xCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYW0xX2NsazEsCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYW0xX2NzYjEsCi0gICAgb3V0cHV0ICBsb2dpYyAgWzg6MF0gICAgICAgICAgICAgICAgICAgIHNyYW0xX2FkZHIxLAotICAgIGlucHV0ICAgbG9naWMgIFszMTowXSAgICAgICAgICAgICAgICAgICBzcmFtMV9kb3V0MSwKLWBlbmRpZgotCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiX3JzdF9uLCAgICAgICAvLyBXaXNoIGJvbmUgcmVzZXQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JfY2xrLCAgICAgICAgIC8vIHdpc2ggYm9uZSBjbG9jawotICAgIC8vIEluc3RydWN0aW9uIE1lbW9yeSBJbnRlcmZhY2UKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2ltZW1fc3RiX28sIC8vIHN0cm9iZS9yZXF1ZXN0Ci0gICAgb3V0cHV0ICBsb2dpYyAgIFtTQ1IxX1dCX1dJRFRILTE6MF0gICAgIHdiZF9pbWVtX2Fkcl9vLCAvLyBhZGRyZXNzCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9pbWVtX3dlX28sICAvLyB3cml0ZQotICAgIG91dHB1dCAgbG9naWMgICBbU0NSMV9XQl9XSURUSC0xOjBdICAgICB3YmRfaW1lbV9kYXRfbywgLy8gZGF0YSBvdXRwdXQKLSAgICBvdXRwdXQgIGxvZ2ljICAgWzM6MF0gICAgICAgICAgICAgICAgICAgd2JkX2ltZW1fc2VsX28sIC8vIGJ5dGUgZW5hYmxlCi0gICAgaW5wdXQgICBsb2dpYyAgIFtTQ1IxX1dCX1dJRFRILTE6MF0gICAgIHdiZF9pbWVtX2RhdF9pLCAvLyBkYXRhIGlucHV0Ci0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9pbWVtX2Fja19pLCAvLyBhY2tub3dsZWdlbWVudAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfaW1lbV9lcnJfaSwgIC8vIGVycm9yCi0KLSAgICAvLyBEYXRhIE1lbW9yeSBJbnRlcmZhY2UKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2RtZW1fc3RiX28sIC8vIHN0cm9iZS9yZXF1ZXN0Ci0gICAgb3V0cHV0ICBsb2dpYyAgIFtTQ1IxX1dCX1dJRFRILTE6MF0gICAgIHdiZF9kbWVtX2Fkcl9vLCAvLyBhZGRyZXNzCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9kbWVtX3dlX28sICAvLyB3cml0ZQotICAgIG91dHB1dCAgbG9naWMgICBbU0NSMV9XQl9XSURUSC0xOjBdICAgICB3YmRfZG1lbV9kYXRfbywgLy8gZGF0YSBvdXRwdXQKLSAgICBvdXRwdXQgIGxvZ2ljICAgWzM6MF0gICAgICAgICAgICAgICAgICAgd2JkX2RtZW1fc2VsX28sIC8vIGJ5dGUgZW5hYmxlCi0gICAgaW5wdXQgICBsb2dpYyAgIFtTQ1IxX1dCX1dJRFRILTE6MF0gICAgIHdiZF9kbWVtX2RhdF9pLCAvLyBkYXRhIGlucHV0Ci0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9kbWVtX2Fja19pLCAvLyBhY2tub3dsZWdlbWVudAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfZG1lbV9lcnJfaSwgLy8gZXJyb3IKLQotICAgIC8vIENvbW1vbgotICAgIG91dHB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICBwd3J1cF9yc3Rfbl9zeW5jLCAgICAgICAgICAgICAgICAvLyBQb3dlci1VcCByZXNldAotICAgIG91dHB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICByc3Rfbl9zeW5jLCAgICAgICAgICAgICAgICAgICAgICAvLyBSZWd1bGFyIHJlc2V0Ci0gICAgb3V0cHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdV9yc3Rfbl9zeW5jLCAgICAgICAgICAgICAgICAgIC8vIENQVSByZXNldAotICAgIG91dHB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X21vZGUsICAgICAgICAgICAgICAgICAgLy8gREZUIFRlc3QgTW9kZQotICAgIG91dHB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3JzdF9uLCAgICAgICAgICAgICAgICAgLy8gREZUIFRlc3QgUmVzZXQKLSAgICBpbnB1dCAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9yc3Rfbl9sb2NhbCwgICAgICAgICAgICAgICAvLyBDb3JlIHJlc2V0Ci0gICAgaW5wdXQgICAgbG9naWMgICBbNDg6MF0gICAgICAgICAgICAgICAgIGNvcmVfZGVidWcgICwKLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgIC8vIERlYnVnIEludGVyZmFjZQotICAgIG91dHB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX3Ryc3RfbiwgICAgICAgICAgICAgICAgLy8gVGVzdCBSZXNldCAoVFJTVG4pCi1gZW5kaWYKLSAgICAvLyBNZW1vcnktbWFwcGVkIGV4dGVybmFsIHRpbWVyCi0gICAgb3V0cHV0ICAgbG9naWMgWzYzOjBdICAgICAgICAgICAgICAgICAgIHRpbWVyX3ZhbCwgICAgICAgICAgLy8gTWFjaGluZSB0aW1lciB2YWx1ZQotICAgIG91dHB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl9pcnEsCi0gICAgLy8gSW5zdHJ1Y3Rpb24gTWVtb3J5IEludGVyZmFjZQotICAgIG91dHB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2ltZW1fcmVxX2FjaywgICAgICAgIC8vIElNRU0gcmVxdWVzdCBhY2tub3dsZWRnZQotICAgIGlucHV0ICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2ltZW1fcmVxLCAgICAgICAgICAgIC8vIElNRU0gcmVxdWVzdAotICAgIGlucHV0ICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2ltZW1fY21kLCAgICAgICAgICAgIC8vIElNRU0gY29tbWFuZAotICAgIGlucHV0ICAgIGxvZ2ljIFtgU0NSMV9JTUVNX0FXSURUSC0xOjBdICBjb3JlX2ltZW1fYWRkciwgICAgICAgICAgIC8vIElNRU0gYWRkcmVzcwotICAgIG91dHB1dCAgIGxvZ2ljIFtgU0NSMV9JTUVNX0RXSURUSC0xOjBdICBjb3JlX2ltZW1fcmRhdGEsICAgICAgICAgIC8vIElNRU0gcmVhZCBkYXRhCi0gICAgb3V0cHV0ICAgbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgIGNvcmVfaW1lbV9yZXNwLCAgICAgICAgICAgLy8gSU1FTSByZXNwb25zZQotCi0gICAgLy8gRGF0YSBNZW1vcnkgSW50ZXJmYWNlCi0gICAgb3V0cHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfZG1lbV9yZXFfYWNrLCAgICAgICAgLy8gRE1FTSByZXF1ZXN0IGFja25vd2xlZGdlCi0gICAgaW5wdXQgICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfZG1lbV9yZXEsICAgICAgICAgICAgLy8gRE1FTSByZXF1ZXN0Ci0gICAgaW5wdXQgICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfZG1lbV9jbWQsICAgICAgICAgICAgLy8gRE1FTSBjb21tYW5kCi0gICAgaW5wdXQgICAgbG9naWNbMTowXSAgICAgICAgICAgICAgICAgICAgIGNvcmVfZG1lbV93aWR0aCwgICAgICAgICAgLy8gRE1FTSBkYXRhIHdpZHRoCi0gICAgaW5wdXQgICAgbG9naWMgW2BTQ1IxX0RNRU1fQVdJRFRILTE6MF0gIGNvcmVfZG1lbV9hZGRyLCAgICAgICAgICAgLy8gRE1FTSBhZGRyZXNzCi0gICAgaW5wdXQgICAgbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gIGNvcmVfZG1lbV93ZGF0YSwgICAgICAgICAgLy8gRE1FTSB3cml0ZSBkYXRhCi0gICAgb3V0cHV0ICAgbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gIGNvcmVfZG1lbV9yZGF0YSwgICAgICAgICAgLy8gRE1FTSByZWFkIGRhdGEKLSAgICBvdXRwdXQgICBsb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgY29yZV9kbWVtX3Jlc3AgICAgICAgICAgICAvLyBETUVNIHJlc3BvbnNlCi0KLSk7Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHBhcmFtZXRlcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgU0NSMV9DTFVTVEVSX1RPUF9SU1RfU1lOQ19TVEFHRVNfTlVNICAgICAgICAgICAgPSAyOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHNpZ25hbCBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIEluc3RydWN0aW9uIG1lbW9yeSBpbnRlcmZhY2UgZnJvbSByb3V0ZXIgdG8gV0IgYnJpZGdlCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JfaW1lbV9yZXFfYWNrOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiX2ltZW1fcmVxOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiX2ltZW1fY21kOwotbG9naWMgW2BTQ1IxX0lNRU1fQVdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIHdiX2ltZW1fYWRkcjsKLWxvZ2ljIFtgU0NSMV9JTUVNX0RXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICB3Yl9pbWVtX3JkYXRhOwotbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiX2ltZW1fcmVzcDsKLQotLy8gRGF0YSBtZW1vcnkgaW50ZXJmYWNlIGZyb20gcm91dGVyIHRvIFdCIGJyaWRnZQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiX2RtZW1fcmVxX2FjazsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Yl9kbWVtX3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Yl9kbWVtX2NtZDsKLWxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Yl9kbWVtX3dpZHRoOwotbG9naWMgW2BTQ1IxX0RNRU1fQVdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIHdiX2RtZW1fYWRkcjsKLWxvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICB3Yl9kbWVtX3dkYXRhOwotbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIHdiX2RtZW1fcmRhdGE7Ci1sb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JfZG1lbV9yZXNwOwotCi1gaWZkZWYgU0NSMV9UQ01fRU4KLS8vIEluc3RydWN0aW9uIG1lbW9yeSBpbnRlcmZhY2UgZnJvbSByb3V0ZXIgdG8gVENNCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNtX2ltZW1fcmVxX2FjazsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y21faW1lbV9yZXE7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNtX2ltZW1fY21kOwotbG9naWMgW2BTQ1IxX0lNRU1fQVdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIHRjbV9pbWVtX2FkZHI7Ci1sb2dpYyBbYFNDUjFfSU1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgdGNtX2ltZW1fcmRhdGE7Ci1sb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNtX2ltZW1fcmVzcDsKLQotLy8gRGF0YSBtZW1vcnkgaW50ZXJmYWNlIGZyb20gcm91dGVyIHRvIFRDTQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjbV9kbWVtX3JlcV9hY2s7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNtX2RtZW1fcmVxOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjbV9kbWVtX2NtZDsKLWxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y21fZG1lbV93aWR0aDsKLWxvZ2ljIFtgU0NSMV9ETUVNX0FXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICB0Y21fZG1lbV9hZGRyOwotbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIHRjbV9kbWVtX3dkYXRhOwotbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIHRjbV9kbWVtX3JkYXRhOwotbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjbV9kbWVtX3Jlc3A7Ci1gZW5kaWYgLy8gU0NSMV9UQ01fRU4KLQotLy8gRGF0YSBtZW1vcnkgaW50ZXJmYWNlIGZyb20gcm91dGVyIHRvIG1lbW9yeS1tYXBwZWQgdGltZXIKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl9kbWVtX3JlcV9hY2s7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfZG1lbV9yZXE7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfZG1lbV9jbWQ7Ci1sb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfZG1lbV93aWR0aDsKLWxvZ2ljIFtgU0NSMV9ETUVNX0FXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl9kbWVtX2FkZHI7Ci1sb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfZG1lbV93ZGF0YTsKLWxvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl9kbWVtX3JkYXRhOwotbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX2RtZW1fcmVzcDsKLQotCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBUbyBhdm9pZCBjb3JlIGxldmVsIHBvd2VyIGhvb2sgdXAsIHdlIGhhdmUgYnJvdWdodCB0aGlzIHNpZ25hbCBpbnNpZGUsIHRvCi0vLyBhdm9pZCBhbnkgY2VsbCBhdCBkaWdpdGFsIGNvcmUgbGV2ZWwKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1hc3NpZ24gdGVzdF9tb2RlID0gMSdiMDsKLWFzc2lnbiB0ZXN0X3JzdF9uID0gMSdiMDsKLQotYXNzaWduIHJpc2N2X2RlYnVnID0ge2NvcmVfaW1lbV9yZXFfYWNrLGNvcmVfaW1lbV9yZXEsY29yZV9pbWVtX2NtZCxjb3JlX2ltZW1fcmVzcFsxOjBdLAotCSAgICAgICAgICAgICAgY29yZV9kbWVtX3JlcV9hY2ssY29yZV9kbWVtX3JlcSxjb3JlX2RtZW1fY21kLGNvcmVfZG1lbV9yZXNwWzE6MF0sCi0JCSAgICAgIHdiX2ltZW1fcmVxLHdiX2RtZW1fcmVxLHdiX2ltZW1fY21kLHdiX2ltZW1fcmVzcFsxOjBdLCBjb3JlX2RlYnVnIH07Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJlc2V0IGxvZ2ljCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFBvd2VyLVVwIFJlc2V0IHN5bmNocm9uaXplcgotc2NyMV9yZXNldF9zeW5jX2NlbGwgIygKLSAgICAuU1RBR0VTX0FNT1VOVCAgICAgICAoU0NSMV9DTFVTVEVSX1RPUF9SU1RfU1lOQ19TVEFHRVNfTlVNKQotKSBpX3B3cnVwX3JzdG5fcmVzZXRfc3luYyAoCi0gICAgLnJzdF9uICAgICAgICAgIChwd3J1cF9yc3RfbiAgICAgKSwKLSAgICAuY2xrICAgICAgICAgICAgKGNvcmVfY2xrICAgICAgICApLAotICAgIC50ZXN0X3JzdF9uICAgICAodGVzdF9yc3RfbiAgICAgICksCi0gICAgLnRlc3RfbW9kZSAgICAgICh0ZXN0X21vZGUgICAgICAgKSwKLSAgICAucnN0X25faW4gICAgICAgKDEnYjEgICAgICAgICAgICApLAotICAgIC5yc3Rfbl9vdXQgICAgICAocHdydXBfcnN0X25fc3luYykKLSk7Ci0KLS8vIFJlZ3VsYXIgUmVzZXQgc3luY2hyb25pemVyCi1zY3IxX3Jlc2V0X3N5bmNfY2VsbCAjKAotICAgIC5TVEFHRVNfQU1PVU5UICAgICAgIChTQ1IxX0NMVVNURVJfVE9QX1JTVF9TWU5DX1NUQUdFU19OVU0pCi0pIGlfcnN0bl9yZXNldF9zeW5jICgKLSAgICAucnN0X24gICAgICAgICAgKHB3cnVwX3JzdF9uICAgICApLAotICAgIC5jbGsgICAgICAgICAgICAoY29yZV9jbGsgICAgICAgICksCi0gICAgLnRlc3RfcnN0X24gICAgICh0ZXN0X3JzdF9uICAgICAgKSwKLSAgICAudGVzdF9tb2RlICAgICAgKHRlc3RfbW9kZSAgICAgICApLAotICAgIC5yc3Rfbl9pbiAgICAgICAocnN0X24gICAgICAgICAgICksCi0gICAgLnJzdF9uX291dCAgICAgIChyc3Rfbl9zeW5jICAgICAgKQotKTsKLQotLy8gQ1BVIFJlc2V0IHN5bmNocm9uaXplcgotc2NyMV9yZXNldF9zeW5jX2NlbGwgIygKLSAgICAuU1RBR0VTX0FNT1VOVCAgICAgICAoU0NSMV9DTFVTVEVSX1RPUF9SU1RfU1lOQ19TVEFHRVNfTlVNKQotKSBpX2NwdV9yc3RuX3Jlc2V0X3N5bmMgKAotICAgIC5yc3RfbiAgICAgICAgICAocHdydXBfcnN0X24gICAgICksCi0gICAgLmNsayAgICAgICAgICAgIChjb3JlX2NsayAgICAgICAgKSwKLSAgICAudGVzdF9yc3RfbiAgICAgKHRlc3RfcnN0X24gICAgICApLAotICAgIC50ZXN0X21vZGUgICAgICAodGVzdF9tb2RlICAgICAgICksCi0gICAgLnJzdF9uX2luICAgICAgIChjcHVfcnN0X24gICAgICAgKSwKLSAgICAucnN0X25fb3V0ICAgICAgKGNwdV9yc3Rfbl9zeW5jICApCi0pOwotCi1gaWZkZWYgU0NSMV9EQkdfRU4KLS8vIFRBUEMgUmVzZXQKLXNjcjFfcmVzZXRfYW5kMl9jZWxsIGlfdGFwY19yc3RuX2FuZDJfY2VsbCAoCi0gICAgLnJzdF9uX2luICAgICAgICh7dHJzdF9uLCBwd3J1cF9yc3Rfbn0pLAotICAgIC50ZXN0X3JzdF9uICAgICAodGVzdF9yc3RfbiAgICAgICksCi0gICAgLnRlc3RfbW9kZSAgICAgICh0ZXN0X21vZGUgICAgICAgKSwKLSAgICAucnN0X25fb3V0ICAgICAgKHRhcGNfdHJzdF9uICAgICApCi0pOwotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KLWBpZmRlZiBTQ1IxX1RDTV9FTgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBUQ00gaW5zdGFuY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc2NyMV90Y20gIygKLSAgICAuU0NSMV9UQ01fU0laRSAgKGBTQ1IxX0RNRU1fQVdJRFRIJyh+U0NSMV9UQ01fQUREUl9NQVNLICsgMSdiMSkpCi0pIGlfdGNtICgKLSAgICAuY2xrICAgICAgICAgICAgKGNvcmVfY2xrICAgICAgICApLAotICAgIC5yc3RfbiAgICAgICAgICAoY29yZV9yc3Rfbl9sb2NhbCksCi0KLWBpZm5kZWYgU0NSMV9UQ01fTUVNCi0gICAgLy8gU1JBTS0wIFBPUlQtMAotICAgIC5zcmFtMF9jbGswICAgICAgKHNyYW0wX2NsazApLAotICAgIC5zcmFtMF9jc2IwICAgICAgKHNyYW0wX2NzYjApLAotICAgIC5zcmFtMF93ZWIwICAgICAgKHNyYW0wX3dlYjApLAotICAgIC5zcmFtMF9hZGRyMCAgICAgKHNyYW0wX2FkZHIwKSwKLSAgICAuc3JhbTBfd21hc2swICAgIChzcmFtMF93bWFzazApLAotICAgIC5zcmFtMF9kaW4wICAgICAgKHNyYW0wX2RpbjApLAotICAgIC5zcmFtMF9kb3V0MCAgICAgKHNyYW0wX2RvdXQwKSwKLSAgICAKLSAgICAvLyBTUkFNLTAgUE9SVC0xCi0gICAgLnNyYW0wX2NsazEgICAgICAoc3JhbTBfY2xrMSksCi0gICAgLnNyYW0wX2NzYjEgICAgICAoc3JhbTBfY3NiMSksCi0gICAgLnNyYW0wX2FkZHIxICAgICAoc3JhbTBfYWRkcjEpLAotICAgIC5zcmFtMF9kb3V0MSAgICAgKHNyYW0wX2RvdXQxKSwKLQotICAgIC8vIFNSQU0tMSBQT1JULTAKLSAgICAuc3JhbTFfY2xrMCAgICAgIChzcmFtMV9jbGswKSwKLSAgICAuc3JhbTFfY3NiMCAgICAgIChzcmFtMV9jc2IwKSwKLSAgICAuc3JhbTFfd2ViMCAgICAgIChzcmFtMV93ZWIwKSwKLSAgICAuc3JhbTFfYWRkcjAgICAgIChzcmFtMV9hZGRyMCksCi0gICAgLnNyYW0xX3dtYXNrMCAgICAoc3JhbTFfd21hc2swKSwKLSAgICAuc3JhbTFfZGluMCAgICAgIChzcmFtMV9kaW4wKSwKLSAgICAuc3JhbTFfZG91dDAgICAgIChzcmFtMV9kb3V0MCksCi0gICAgCi0gICAgLy8gU1JBTS0xIFBPUlQtMQotICAgIC5zcmFtMV9jbGsxICAgICAgKHNyYW0xX2NsazEpLAotICAgIC5zcmFtMV9jc2IxICAgICAgKHNyYW0xX2NzYjEpLAotICAgIC5zcmFtMV9hZGRyMSAgICAgKHNyYW0xX2FkZHIxKSwKLSAgICAuc3JhbTFfZG91dDEgICAgIChzcmFtMV9kb3V0MSksCi0KLWBlbmRpZgotCi0KLSAgICAvLyBJbnN0cnVjdGlvbiBpbnRlcmZhY2UgdG8gVENNCi0gICAgLmltZW1fcmVxX2FjayAgICh0Y21faW1lbV9yZXFfYWNrKSwKLSAgICAuaW1lbV9yZXEgICAgICAgKHRjbV9pbWVtX3JlcSAgICApLAotICAgIC5pbWVtX2FkZHIgICAgICAodGNtX2ltZW1fYWRkciAgICksCi0gICAgLmltZW1fcmRhdGEgICAgICh0Y21faW1lbV9yZGF0YSAgKSwKLSAgICAuaW1lbV9yZXNwICAgICAgKHRjbV9pbWVtX3Jlc3AgICApLAotCi0gICAgLy8gRGF0YSBpbnRlcmZhY2UgdG8gVENNCi0gICAgLmRtZW1fcmVxX2FjayAgICh0Y21fZG1lbV9yZXFfYWNrKSwKLSAgICAuZG1lbV9yZXEgICAgICAgKHRjbV9kbWVtX3JlcSAgICApLAotICAgIC5kbWVtX2NtZCAgICAgICAodGNtX2RtZW1fY21kICAgICksCi0gICAgLmRtZW1fd2lkdGggICAgICh0Y21fZG1lbV93aWR0aCAgKSwKLSAgICAuZG1lbV9hZGRyICAgICAgKHRjbV9kbWVtX2FkZHIgICApLAotICAgIC5kbWVtX3dkYXRhICAgICAodGNtX2RtZW1fd2RhdGEgICksCi0gICAgLmRtZW1fcmRhdGEgICAgICh0Y21fZG1lbV9yZGF0YSAgKSwKLSAgICAuZG1lbV9yZXNwICAgICAgKHRjbV9kbWVtX3Jlc3AgICApCi0pOwotYGVuZGlmIC8vIFNDUjFfVENNX0VOCi0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBNZW1vcnktbWFwcGVkIHRpbWVyIGluc3RhbmNlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXNjcjFfdGltZXIgaV90aW1lciAoCi0gICAgLy8gQ29tbW9uCi0gICAgLnJzdF9uICAgICAgICAgIChjb3JlX3JzdF9uX2xvY2FsICApLAotICAgIC5jbGsgICAgICAgICAgICAoY29yZV9jbGsgICAgICAgICAgKSwKLSAgICAucnRjX2NsayAgICAgICAgKHJ0Y19jbGsgICAgICAgICAgICksCi0KLSAgICAvLyBNZW1vcnkgaW50ZXJmYWNlCi0gICAgLmRtZW1fcmVxICAgICAgICh0aW1lcl9kbWVtX3JlcSAgICApLAotICAgIC5kbWVtX2NtZCAgICAgICAodGltZXJfZG1lbV9jbWQgICAgKSwKLSAgICAuZG1lbV93aWR0aCAgICAgKHRpbWVyX2RtZW1fd2lkdGggICksCi0gICAgLmRtZW1fYWRkciAgICAgICh0aW1lcl9kbWVtX2FkZHIgICApLAotICAgIC5kbWVtX3dkYXRhICAgICAodGltZXJfZG1lbV93ZGF0YSAgKSwKLSAgICAuZG1lbV9yZXFfYWNrICAgKHRpbWVyX2RtZW1fcmVxX2FjayksCi0gICAgLmRtZW1fcmRhdGEgICAgICh0aW1lcl9kbWVtX3JkYXRhICApLAotICAgIC5kbWVtX3Jlc3AgICAgICAodGltZXJfZG1lbV9yZXNwICAgKSwKLQotICAgIC8vIFRpbWVyIGludGVyZmFjZQotICAgIC50aW1lcl92YWwgICAgICAodGltZXJfdmFsICAgICAgICAgKSwKLSAgICAudGltZXJfaXJxICAgICAgKHRpbWVyX2lycSAgICAgICAgICkKLSk7Ci0KLQotYGlmZGVmIFNDUjFfSU1FTV9ST1VURVJfRU4KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSW5zdHJ1Y3Rpb24gbWVtb3J5IHJvdXRlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zY3IxX2ltZW1fcm91dGVyICMoCi0gYGlmZGVmIFNDUjFfVENNX0VOCi0gICAgLlNDUjFfQUREUl9NQVNLICAgICAoU0NSMV9UQ01fQUREUl9NQVNLKSwKLSAgICAuU0NSMV9BRERSX1BBVFRFUk4gIChTQ1IxX1RDTV9BRERSX1BBVFRFUk4pCi0gYGVuZGlmIC8vIFNDUjFfVENNX0VOCi0pIGlfaW1lbV9yb3V0ZXIgKAotICAgIC5yc3RfbiAgICAgICAgICAoY29yZV9yc3Rfbl9sb2NhbCApLAotICAgIC5jbGsgICAgICAgICAgICAoY29yZV9jbGsgICAgICAgICApLAotICAgIC8vIEludGVyZmFjZSB0byBjb3JlCi0gICAgLmltZW1fcmVxX2FjayAgIChjb3JlX2ltZW1fcmVxX2FjayksCi0gICAgLmltZW1fcmVxICAgICAgIChjb3JlX2ltZW1fcmVxICAgICksCi0gICAgLmltZW1fY21kICAgICAgIChjb3JlX2ltZW1fY21kICAgICksCi0gICAgLmltZW1fYWRkciAgICAgIChjb3JlX2ltZW1fYWRkciAgICksCi0gICAgLmltZW1fcmRhdGEgICAgIChjb3JlX2ltZW1fcmRhdGEgICksCi0gICAgLmltZW1fcmVzcCAgICAgIChjb3JlX2ltZW1fcmVzcCAgICksCi0gICAgLy8gSW50ZXJmYWNlIHRvIFdCIGJyaWRnZQotICAgIC5wb3J0MF9yZXFfYWNrICAod2JfaW1lbV9yZXFfYWNrICksCi0gICAgLnBvcnQwX3JlcSAgICAgICh3Yl9pbWVtX3JlcSAgICAgKSwKLSAgICAucG9ydDBfY21kICAgICAgKHdiX2ltZW1fY21kICAgICApLAotICAgIC5wb3J0MF9hZGRyICAgICAod2JfaW1lbV9hZGRyICAgICksCi0gICAgLnBvcnQwX3JkYXRhICAgICh3Yl9pbWVtX3JkYXRhICAgKSwKLSAgICAucG9ydDBfcmVzcCAgICAgKHdiX2ltZW1fcmVzcCAgICApLAotIGBpZmRlZiBTQ1IxX1RDTV9FTgotICAgIC8vIEludGVyZmFjZSB0byBUQ00KLSAgICAucG9ydDFfcmVxX2FjayAgKHRjbV9pbWVtX3JlcV9hY2sgKSwKLSAgICAucG9ydDFfcmVxICAgICAgKHRjbV9pbWVtX3JlcSAgICAgKSwKLSAgICAucG9ydDFfY21kICAgICAgKHRjbV9pbWVtX2NtZCAgICAgKSwKLSAgICAucG9ydDFfYWRkciAgICAgKHRjbV9pbWVtX2FkZHIgICAgKSwKLSAgICAucG9ydDFfcmRhdGEgICAgKHRjbV9pbWVtX3JkYXRhICAgKSwKLSAgICAucG9ydDFfcmVzcCAgICAgKHRjbV9pbWVtX3Jlc3AgICAgKQotIGBlbmRpZiAvLyBTQ1IxX1RDTV9FTgotKTsKLQotYGVsc2UgLy8gU0NSMV9JTUVNX1JPVVRFUl9FTgotCi1hc3NpZ24gd2JfaW1lbV9yZXEgICAgICAgICA9IGNvcmVfaW1lbV9yZXE7Ci1hc3NpZ24gd2JfaW1lbV9jbWQgICAgICAgICA9IGNvcmVfaW1lbV9jbWQ7Ci1hc3NpZ24gd2JfaW1lbV9hZGRyICAgICAgICA9IGNvcmVfaW1lbV9hZGRyOwotYXNzaWduIGNvcmVfaW1lbV9yZXFfYWNrICAgID0gd2JfaW1lbV9yZXFfYWNrOwotYXNzaWduIGNvcmVfaW1lbV9yZXNwICAgICAgID0gd2JfaW1lbV9yZXNwOwotYXNzaWduIGNvcmVfaW1lbV9yZGF0YSAgICAgID0gd2JfaW1lbV9yZGF0YTsKLQotYGVuZGlmIC8vIFNDUjFfSU1FTV9ST1VURVJfRU4KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBEYXRhIG1lbW9yeSByb3V0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc2NyMV9kbWVtX3JvdXRlciAjKAotCi1gaWZkZWYgU0NSMV9UQ01fRU4KLSAgICAuU0NSMV9QT1JUMV9BRERSX01BU0sgICAgICAgKFNDUjFfVENNX0FERFJfTUFTSyksCi0gICAgLlNDUjFfUE9SVDFfQUREUl9QQVRURVJOICAgIChTQ1IxX1RDTV9BRERSX1BBVFRFUk4pLAotYGVsc2UgLy8gU0NSMV9UQ01fRU4KLSAgICAuU0NSMV9QT1JUMV9BRERSX01BU0sgICAgICAgKDMyJ2gwMDAwMDAwMCksCi0gICAgLlNDUjFfUE9SVDFfQUREUl9QQVRURVJOICAgICgzMidoRkZGRkZGRkYpLAotYGVuZGlmIC8vIFNDUjFfVENNX0VOCi0KLSAgICAuU0NSMV9QT1JUMl9BRERSX01BU0sgICAgICAgKFNDUjFfVElNRVJfQUREUl9NQVNLKSwKLSAgICAuU0NSMV9QT1JUMl9BRERSX1BBVFRFUk4gICAgKFNDUjFfVElNRVJfQUREUl9QQVRURVJOKQotCi0pIGlfZG1lbV9yb3V0ZXIgKAotICAgIC5yc3RfbiAgICAgICAgICAoY29yZV9yc3Rfbl9sb2NhbCAgICApLAotICAgIC5jbGsgICAgICAgICAgICAoY29yZV9jbGsgICAgICAgICAgICApLAotICAgIC8vIEludGVyZmFjZSB0byBjb3JlCi0gICAgLmRtZW1fcmVxX2FjayAgIChjb3JlX2RtZW1fcmVxX2FjayAgICksCi0gICAgLmRtZW1fcmVxICAgICAgIChjb3JlX2RtZW1fcmVxICAgICAgICksCi0gICAgLmRtZW1fY21kICAgICAgIChjb3JlX2RtZW1fY21kICAgICAgICksCi0gICAgLmRtZW1fd2lkdGggICAgIChjb3JlX2RtZW1fd2lkdGggICAgICksCi0gICAgLmRtZW1fYWRkciAgICAgIChjb3JlX2RtZW1fYWRkciAgICAgICksCi0gICAgLmRtZW1fd2RhdGEgICAgIChjb3JlX2RtZW1fd2RhdGEgICAgICksCi0gICAgLmRtZW1fcmRhdGEgICAgIChjb3JlX2RtZW1fcmRhdGEgICAgICksCi0gICAgLmRtZW1fcmVzcCAgICAgIChjb3JlX2RtZW1fcmVzcCAgICAgICksCi1gaWZkZWYgU0NSMV9UQ01fRU4KLSAgICAvLyBJbnRlcmZhY2UgdG8gVENNCi0gICAgLnBvcnQxX3JlcV9hY2sgICh0Y21fZG1lbV9yZXFfYWNrICAgICksCi0gICAgLnBvcnQxX3JlcSAgICAgICh0Y21fZG1lbV9yZXEgICAgICAgICksCi0gICAgLnBvcnQxX2NtZCAgICAgICh0Y21fZG1lbV9jbWQgICAgICAgICksCi0gICAgLnBvcnQxX3dpZHRoICAgICh0Y21fZG1lbV93aWR0aCAgICAgICksCi0gICAgLnBvcnQxX2FkZHIgICAgICh0Y21fZG1lbV9hZGRyICAgICAgICksCi0gICAgLnBvcnQxX3dkYXRhICAgICh0Y21fZG1lbV93ZGF0YSAgICAgICksCi0gICAgLnBvcnQxX3JkYXRhICAgICh0Y21fZG1lbV9yZGF0YSAgICAgICksCi0gICAgLnBvcnQxX3Jlc3AgICAgICh0Y21fZG1lbV9yZXNwICAgICAgICksCi1gZWxzZSAvLyBTQ1IxX1RDTV9FTgotICAgIC5wb3J0MV9yZXFfYWNrICAoMSdiMCksCi0gICAgLnBvcnQxX3JlcSAgICAgICggICAgICAgICAgICAgICAgICAgICksCi0gICAgLnBvcnQxX2NtZCAgICAgICggICAgICAgICAgICAgICAgICAgICksCi0gICAgLnBvcnQxX3dpZHRoICAgICggICAgICAgICAgICAgICAgICAgICksCi0gICAgLnBvcnQxX2FkZHIgICAgICggICAgICAgICAgICAgICAgICAgICksCi0gICAgLnBvcnQxX3dkYXRhICAgICggICAgICAgICAgICAgICAgICAgICksCi0gICAgLnBvcnQxX3JkYXRhICAgICgzMidoMCAgICAgICAgICAgICAgICksCi0gICAgLnBvcnQxX3Jlc3AgICAgIChTQ1IxX01FTV9SRVNQX1JEWV9FUiksCi1gZW5kaWYgLy8gU0NSMV9UQ01fRU4KLSAgICAvLyBJbnRlcmZhY2UgdG8gbWVtb3J5LW1hcHBlZCB0aW1lcgotICAgIC5wb3J0Ml9yZXFfYWNrICAodGltZXJfZG1lbV9yZXFfYWNrICApLAotICAgIC5wb3J0Ml9yZXEgICAgICAodGltZXJfZG1lbV9yZXEgICAgICApLAotICAgIC5wb3J0Ml9jbWQgICAgICAodGltZXJfZG1lbV9jbWQgICAgICApLAotICAgIC5wb3J0Ml93aWR0aCAgICAodGltZXJfZG1lbV93aWR0aCAgICApLAotICAgIC5wb3J0Ml9hZGRyICAgICAodGltZXJfZG1lbV9hZGRyICAgICApLAotICAgIC5wb3J0Ml93ZGF0YSAgICAodGltZXJfZG1lbV93ZGF0YSAgICApLAotICAgIC5wb3J0Ml9yZGF0YSAgICAodGltZXJfZG1lbV9yZGF0YSAgICApLAotICAgIC5wb3J0Ml9yZXNwICAgICAodGltZXJfZG1lbV9yZXNwICAgICApLAotICAgIC8vIEludGVyZmFjZSB0byBXQiBicmlkZ2UKLSAgICAucG9ydDBfcmVxX2FjayAgKHdiX2RtZW1fcmVxX2FjayAgICApLAotICAgIC5wb3J0MF9yZXEgICAgICAod2JfZG1lbV9yZXEgICAgICAgICksCi0gICAgLnBvcnQwX2NtZCAgICAgICh3Yl9kbWVtX2NtZCAgICAgICAgKSwKLSAgICAucG9ydDBfd2lkdGggICAgKHdiX2RtZW1fd2lkdGggICAgICApLAotICAgIC5wb3J0MF9hZGRyICAgICAod2JfZG1lbV9hZGRyICAgICAgICksCi0gICAgLnBvcnQwX3dkYXRhICAgICh3Yl9kbWVtX3dkYXRhICAgICAgKSwKLSAgICAucG9ydDBfcmRhdGEgICAgKHdiX2RtZW1fcmRhdGEgICAgICApLAotICAgIC5wb3J0MF9yZXNwICAgICAod2JfZG1lbV9yZXNwICAgICAgICkKLSk7Ci0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBJbnN0cnVjdGlvbiBtZW1vcnkgV0IgYnJpZGdlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXNjcjFfaW1lbV93YiBpX2ltZW1fd2IgKAotICAgIC5jb3JlX3JzdF9uICAgICAoY29yZV9yc3Rfbl9sb2NhbCAgICksCi0gICAgLmNvcmVfY2xrICAgICAgIChjb3JlX2NsayAgICAgICAgICAgKSwKLSAgICAvLyBJbnRlcmZhY2UgdG8gaW1lbSByb3V0ZXIKLSAgICAuaW1lbV9yZXFfYWNrICAgKHdiX2ltZW1fcmVxX2FjayAgICksCi0gICAgLmltZW1fcmVxICAgICAgICh3Yl9pbWVtX3JlcSAgICAgICApLAotICAgIC5pbWVtX2FkZHIgICAgICAod2JfaW1lbV9hZGRyICAgICAgKSwKLSAgICAuaW1lbV9yZGF0YSAgICAgKHdiX2ltZW1fcmRhdGEgICAgICksCi0gICAgLmltZW1fcmVzcCAgICAgICh3Yl9pbWVtX3Jlc3AgICAgICApLAotICAgIC8vIFdCIGludGVyZmFjZQotICAgIC53Yl9yc3RfbiAgICAgICAod2JfcnN0X24gICAgICAgICAgKSwKLSAgICAud2JfY2xrICAgICAgICAgKHdiX2NsayAgICAgICAgICAgICksCi0gICAgLndiZF9zdGJfbyAgICAgICh3YmRfaW1lbV9zdGJfbyAgICApLCAKLSAgICAud2JkX2Fkcl9vICAgICAgKHdiZF9pbWVtX2Fkcl9vICAgICksIAotICAgIC53YmRfd2VfbyAgICAgICAod2JkX2ltZW1fd2VfbyAgICAgKSwgIAotICAgIC53YmRfZGF0X28gICAgICAod2JkX2ltZW1fZGF0X28gICAgKSwgCi0gICAgLndiZF9zZWxfbyAgICAgICh3YmRfaW1lbV9zZWxfbyAgICApLCAKLSAgICAud2JkX2RhdF9pICAgICAgKHdiZF9pbWVtX2RhdF9pICAgICksIAotICAgIC53YmRfYWNrX2kgICAgICAod2JkX2ltZW1fYWNrX2kgICAgKSwgCi0gICAgLndiZF9lcnJfaSAgICAgICh3YmRfaW1lbV9lcnJfaSAgICApCi0pOwotCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRGF0YSBtZW1vcnkgV0IgYnJpZGdlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXNjcjFfZG1lbV93YiBpX2RtZW1fd2IgKAotICAgIC5jb3JlX3JzdF9uICAgICAoY29yZV9yc3Rfbl9sb2NhbCAgICksCi0gICAgLmNvcmVfY2xrICAgICAgIChjb3JlX2NsayAgICAgICAgICAgKSwKLSAgICAvLyBJbnRlcmZhY2UgdG8gZG1lbSByb3V0ZXIKLSAgICAuZG1lbV9yZXFfYWNrICAgKHdiX2RtZW1fcmVxX2FjayAgICksCi0gICAgLmRtZW1fcmVxICAgICAgICh3Yl9kbWVtX3JlcSAgICAgICApLAotICAgIC5kbWVtX2NtZCAgICAgICAod2JfZG1lbV9jbWQgICAgICAgKSwKLSAgICAuZG1lbV93aWR0aCAgICAgKHdiX2RtZW1fd2lkdGggICAgICksCi0gICAgLmRtZW1fYWRkciAgICAgICh3Yl9kbWVtX2FkZHIgICAgICApLAotICAgIC5kbWVtX3dkYXRhICAgICAod2JfZG1lbV93ZGF0YSAgICAgKSwKLSAgICAuZG1lbV9yZGF0YSAgICAgKHdiX2RtZW1fcmRhdGEgICAgICksCi0gICAgLmRtZW1fcmVzcCAgICAgICh3Yl9kbWVtX3Jlc3AgICAgICApLAotICAgIC8vIFdCIGludGVyZmFjZQotICAgIC53Yl9yc3RfbiAgICAgICAod2JfcnN0X24gICAgICAgICAgKSwKLSAgICAud2JfY2xrICAgICAgICAgKHdiX2NsayAgICAgICAgICAgICksCi0gICAgLndiZF9zdGJfbyAgICAgICh3YmRfZG1lbV9zdGJfbyAgICApLCAKLSAgICAud2JkX2Fkcl9vICAgICAgKHdiZF9kbWVtX2Fkcl9vICAgICksIAotICAgIC53YmRfd2VfbyAgICAgICAod2JkX2RtZW1fd2VfbyAgICAgKSwgIAotICAgIC53YmRfZGF0X28gICAgICAod2JkX2RtZW1fZGF0X28gICAgKSwgCi0gICAgLndiZF9zZWxfbyAgICAgICh3YmRfZG1lbV9zZWxfbyAgICApLCAKLSAgICAud2JkX2RhdF9pICAgICAgKHdiZF9kbWVtX2RhdF9pICAgICksIAotICAgIC53YmRfYWNrX2kgICAgICAod2JkX2RtZW1fYWNrX2kgICAgKSwgCi0gICAgLndiZF9lcnJfaSAgICAgICh3YmRfZG1lbV9lcnJfaSAgICApCi0pOwotCi1lbmRtb2R1bGUgOiBzY3IxX2ludGYKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy90b3Avc2NyMV9tZW1fYXhpLnN2IGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL3RvcC9zY3IxX21lbV9heGkuc3YKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhZDQ2NTguLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL3RvcC9zY3IxX21lbV9heGkuc3YKKysrIC9kZXYvbnVsbApAQCAtMSw0MDQgKzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiBTeW50YWNvcmUgTExDIMKpIDIwMTYtMjAyMQotLy8gCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAotLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IFN5bnRhY29yZSBMTEMKLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8gQGZpbGUgICAgICAgPHNjcjFfbWVtX2F4aS5zdj4KLS8vLyBAYnJpZWYgICAgICBNZW1vcnkgQVhJIGJyaWRnZQotLy8vCi0KLWBpbmNsdWRlICJzY3IxX21lbWlmLnN2aCIKLWBpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgotCi1tb2R1bGUgc2NyMV9tZW1fYXhpCi0jKAotICAgIHBhcmFtZXRlciBTQ1IxX1JFUV9CVUZfU0laRSAgICAgPSAyLCAgICAgICAgICAgICAgICAgICAgLy8gUG93ZXIgb2YgMiB2YWx1ZQotICAgIHBhcmFtZXRlciBTQ1IxX0FYSV9JRFdJRFRIICAgICAgPSA0LAotICAgIHBhcmFtZXRlciBTQ1IxX0FERFJfV0lEVEggICAgICAgPSAzMiwKLSAgICBwYXJhbWV0ZXIgU0NSMV9BWElfUkVRX0JQICAgICAgID0gMSwKLSAgICBwYXJhbWV0ZXIgU0NSMV9BWElfUkVTUF9CUCAgICAgID0gMQotKQotKAotICAgIC8vIENsb2NrIGFuZCBSZXNldAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGssCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBheGlfcmVpbml0LAotICAgIC8vIENvcmUgSW50ZXJmYWNlCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfaWRsZSwKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9yZXFfYWNrLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX3JlcSwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9jbWQsCi0gICAgaW5wdXQgICBsb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgIGNvcmVfd2lkdGgsCi0gICAgaW5wdXQgICBsb2dpYyBbU0NSMV9BRERSX1dJRFRILTE6MF0gICAgIGNvcmVfYWRkciwKLSAgICBpbnB1dCAgIGxvZ2ljIFszMTowXSAgICAgICAgICAgICAgICAgICAgY29yZV93ZGF0YSwKLSAgICBvdXRwdXQgIGxvZ2ljIFszMTowXSAgICAgICAgICAgICAgICAgICAgY29yZV9yZGF0YSwKLSAgICBvdXRwdXQgIGxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgY29yZV9yZXNwLAotCi0gICAgLy8gQVhJCi0gICAgb3V0cHV0ICBsb2dpYyBbU0NSMV9BWElfSURXSURUSC0xOjBdICAgIGF3aWQsCi0gICAgb3V0cHV0ICBsb2dpYyBbU0NSMV9BRERSX1dJRFRILTE6MF0gICAgIGF3YWRkciwKLSAgICBvdXRwdXQgIGxvZ2ljIFsgNzowXSAgICAgICAgICAgICAgICAgICAgYXdsZW4sCi0gICAgb3V0cHV0ICBsb2dpYyBbIDI6MF0gICAgICAgICAgICAgICAgICAgIGF3c2l6ZSwKLSAgICBvdXRwdXQgIGxvZ2ljIFsgMTowXSAgICAgICAgICAgICAgICAgICAgYXdidXJzdCwKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdsb2NrLAotICAgIG91dHB1dCAgbG9naWMgWyAzOjBdICAgICAgICAgICAgICAgICAgICBhd2NhY2hlLAotICAgIG91dHB1dCAgbG9naWMgWyAyOjBdICAgICAgICAgICAgICAgICAgICBhd3Byb3QsCi0gICAgb3V0cHV0ICBsb2dpYyBbIDM6MF0gICAgICAgICAgICAgICAgICAgIGF3cmVnaW9uLAotICAgIG91dHB1dCAgbG9naWMgWyAzOjBdICAgICAgICAgICAgICAgICAgICBhd3VzZXIsCi0gICAgb3V0cHV0ICBsb2dpYyBbIDM6MF0gICAgICAgICAgICAgICAgICAgIGF3cW9zLAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBhd3ZhbGlkLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBhd3JlYWR5LAotICAgIG91dHB1dCAgbG9naWMgWzMxOjBdICAgICAgICAgICAgICAgICAgICB3ZGF0YSwKLSAgICBvdXRwdXQgIGxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgd3N0cmIsCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdsYXN0LAotICAgIG91dHB1dCAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICB3dXNlciwKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgd3ZhbGlkLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmVhZHksCi0gICAgaW5wdXQgICBsb2dpYyBbU0NSMV9BWElfSURXSURUSC0xOjBdICAgIGJpZCwKLSAgICBpbnB1dCAgIGxvZ2ljIFsgMTowXSAgICAgICAgICAgICAgICAgICAgYnJlc3AsCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ2YWxpZCwKLSAgICBpbnB1dCAgIGxvZ2ljIFsgMzowXSAgICAgICAgICAgICAgICAgICAgYnVzZXIsCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFkeSwKLSAgICBvdXRwdXQgIGxvZ2ljIFtTQ1IxX0FYSV9JRFdJRFRILTE6MF0gICAgYXJpZCwKLSAgICBvdXRwdXQgIGxvZ2ljIFtTQ1IxX0FERFJfV0lEVEgtMTowXSAgICAgYXJhZGRyLAotICAgIG91dHB1dCAgbG9naWMgWyA3OjBdICAgICAgICAgICAgICAgICAgICBhcmxlbiwKLSAgICBvdXRwdXQgIGxvZ2ljIFsgMjowXSAgICAgICAgICAgICAgICAgICAgYXJzaXplLAotICAgIG91dHB1dCAgbG9naWMgWyAxOjBdICAgICAgICAgICAgICAgICAgICBhcmJ1cnN0LAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmxvY2ssCi0gICAgb3V0cHV0ICBsb2dpYyBbIDM6MF0gICAgICAgICAgICAgICAgICAgIGFyY2FjaGUsCi0gICAgb3V0cHV0ICBsb2dpYyBbIDI6MF0gICAgICAgICAgICAgICAgICAgIGFycHJvdCwKLSAgICBvdXRwdXQgIGxvZ2ljIFsgMzowXSAgICAgICAgICAgICAgICAgICAgYXJyZWdpb24sCi0gICAgb3V0cHV0ICBsb2dpYyBbIDM6MF0gICAgICAgICAgICAgICAgICAgIGFydXNlciwKLSAgICBvdXRwdXQgIGxvZ2ljIFsgMzowXSAgICAgICAgICAgICAgICAgICAgYXJxb3MsCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFydmFsaWQsCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmVhZHksCi0gICAgaW5wdXQgICBsb2dpYyBbU0NSMV9BWElfSURXSURUSC0xOjBdICAgIHJpZCwKLSAgICBpbnB1dCAgIGxvZ2ljIFszMTowXSAgICAgICAgICAgICAgICAgICAgcmRhdGEsCi0gICAgaW5wdXQgICBsb2dpYyBbIDE6MF0gICAgICAgICAgICAgICAgICAgIHJyZXNwLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBybGFzdCwKLSAgICBpbnB1dCAgIGxvZ2ljIFsgMzowXSAgICAgICAgICAgICAgICAgICAgcnVzZXIsCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ2YWxpZCwKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgcnJlYWR5Ci0pOwotCi0KLS8vIExvY2FsIGZ1bmN0aW9ucwotZnVuY3Rpb24gYXV0b21hdGljIGxvZ2ljIFsyOjBdIHdpZHRoMmF4c2l6ZSAoCi0gICAgaW5wdXQgICBsb2dpYyBbMTowXSAgICAgICAgICAgICAgd2lkdGggKTsKLSAgICBsb2dpYyBbMjowXSBheHNpemU7Ci1iZWdpbgotICAgIGNhc2UgKHdpZHRoKQotICAgICAgICBTQ1IxX01FTV9XSURUSF9CWVRFIDogIGF4c2l6ZSA9IDMnYjAwMDsKLSAgICAgICAgU0NSMV9NRU1fV0lEVEhfSFdPUkQ6ICBheHNpemUgPSAzJ2IwMDE7Ci0gICAgICAgIFNDUjFfTUVNX1dJRFRIX1dPUkQgOiAgYXhzaXplID0gMydiMDEwOwotICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogIGF4c2l6ZSA9ICd4OwotICAgIGVuZGNhc2UKLQotICAgIHdpZHRoMmF4c2l6ZSA9IGF4c2l6ZTsgLy8gY3AuMTEKLWVuZAotZW5kZnVuY3Rpb24KLQotdHlwZWRlZiBzdHJ1Y3QgcGFja2VkIHsKLSAgICBsb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXhpX3dpZHRoOwotICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICBbU0NSMV9BRERSX1dJRFRILTE6MF0gICAgICBheGlfYWRkcjsKLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzMxOjBdICAgICAgYXhpX3dkYXRhOwotfSB0eXBlX3NjcjFfcmVxdWVzdF9zOwotCi10eXBlZGVmIHN0cnVjdCBwYWNrZWQgewotICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFfd3JpdGU7Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9hZGRyOwotICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFfZGF0YTsKLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxX3Jlc3A7Ci19IHR5cGVfc2NyMV9yZXFfc3RhdHVzX3M7Ci0KLQotLy90eXBlX3NjcjFfcmVxdWVzdF9zICAgICAgICAgW1NDUjFfUkVRX0JVRl9TSVpFLTE6MF0gICByZXFfZmlmbzsKLWxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxX2ZpZm9fYXhpX3dpZHRoW1NDUjFfUkVRX0JVRl9TSVpFLTE6MF07Ci1sb2dpYyBbU0NSMV9BRERSX1dJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9maWZvX2F4aV9hZGRyIFtTQ1IxX1JFUV9CVUZfU0laRS0xOjBdOwotbG9naWMgWzMxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFfZmlmb19heGlfd2RhdGEgW1NDUjFfUkVRX0JVRl9TSVpFLTE6MF07Ci0vL3R5cGVfc2NyMV9yZXFfc3RhdHVzX3MgICAgICBbU0NSMV9SRVFfQlVGX1NJWkUtMTowXSAgIHJlcV9zdGF0dXM7Ci1sb2dpYyAgIFtTQ1IxX1JFUV9CVUZfU0laRS0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9zdGF0dXNfcmVxX3dyaXRlIDsKLWxvZ2ljICAgW1NDUjFfUkVRX0JVRl9TSVpFLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgcmVxX3N0YXR1c19yZXFfYWRkciA7Ci1sb2dpYyAgIFtTQ1IxX1JFUV9CVUZfU0laRS0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9zdGF0dXNfcmVxX2RhdGEgOwotbG9naWMgICBbU0NSMV9SRVFfQlVGX1NJWkUtMTowXSAgICAgICAgICAgICAgICAgICAgICAgICByZXFfc3RhdHVzX3JlcV9yZXNwIDsKLS8vdHlwZV9zY3IxX3JlcV9zdGF0dXNfcyAgICAgIFtTQ1IxX1JFUV9CVUZfU0laRS0xOjBdICAgcmVxX3N0YXR1c19uZXc7Ci1sb2dpYyAgIFtTQ1IxX1JFUV9CVUZfU0laRS0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9zdGF0dXNfbmV3X3JlcV93cml0ZSA7Ci1sb2dpYyAgIFtTQ1IxX1JFUV9CVUZfU0laRS0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9zdGF0dXNfbmV3X3JlcV9hZGRyIDsKLWxvZ2ljICAgW1NDUjFfUkVRX0JVRl9TSVpFLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgcmVxX3N0YXR1c19uZXdfcmVxX2RhdGEgOwotbG9naWMgICBbU0NSMV9SRVFfQlVGX1NJWkUtMTowXSAgICAgICAgICAgICAgICAgICAgICAgICByZXFfc3RhdHVzX25ld19yZXFfcmVzcCA7Ci0KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICBbU0NSMV9SRVFfQlVGX1NJWkUtMTowXSAgICAgcmVxX3N0YXR1c19lbjsKLWxvZ2ljICAgICAgICAgICAgICAgWyRjbG9nMihTQ1IxX1JFUV9CVUZfU0laRSktMTowXSAgICAgcmVxX2F2YWxfcHRyOwotbG9naWMgICAgICAgICAgICAgICBbJGNsb2cyKFNDUjFfUkVRX0JVRl9TSVpFKS0xOjBdICAgICByZXFfcHJvY19wdHI7Ci1sb2dpYyAgICAgICAgICAgICAgIFskY2xvZzIoU0NSMV9SRVFfQlVGX1NJWkUpLTE6MF0gICAgIHJlcV9kb25lX3B0cjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnJlc3BfZXJyOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMzE6MF0gICAgICByY3ZkX3JkYXRhOwotbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByY3ZkX3Jlc3A7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlX3JlYWQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlX3dyaXRlOwotCi0KLQotYXNzaWduIGNvcmVfcmVxX2FjayA9ICAgfmF4aV9yZWluaXQgICAgICAgICAgICAgICAgICAgICAgICAmCi0gICAgICAgICAgICAgICAgICAgICAgICB+cmVxX3N0YXR1c19yZXFfcmVzcFtyZXFfYXZhbF9wdHJdICYKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX3Jlc3AhPVNDUjFfTUVNX1JFU1BfUkRZX0VSOwotCi0KLWFzc2lnbiBycmVhZHkgICAgICA9IH5yZXFfc3RhdHVzX3JlcV93cml0ZVtyZXFfZG9uZV9wdHJdOwotYXNzaWduIGJyZWFkeSAgICAgID0gIHJlcV9zdGF0dXNfcmVxX3dyaXRlW3JlcV9kb25lX3B0cl07Ci0KLQotYXNzaWduIGZvcmNlX3JlYWQgID0gU0NSMV9BWElfUkVRX0JQICYgY29yZV9yZXEgJiBjb3JlX3JlcV9hY2sgJiByZXFfYXZhbF9wdHI9PXJlcV9wcm9jX3B0ciAmIGNvcmVfY21kPT1TQ1IxX01FTV9DTURfUkQ7Ci1hc3NpZ24gZm9yY2Vfd3JpdGUgPSBTQ1IxX0FYSV9SRVFfQlAgJiBjb3JlX3JlcSAmIGNvcmVfcmVxX2FjayAmIHJlcV9hdmFsX3B0cj09cmVxX3Byb2NfcHRyICYgY29yZV9jbWQ9PVNDUjFfTUVNX0NNRF9XUjsKLQotaW50ZWdlciBpOwotYWx3YXlzX2NvbWIgYmVnaW46IGlkbGVfc3RhdHVzCi0gICAgY29yZV9pZGxlID0gMSdiMTsKLSAgICBmb3IgKGk9MDsgaTxTQ1IxX1JFUV9CVUZfU0laRTsgaT1pKzEpIGJlZ2luCi0gICAgICAgIGNvcmVfaWRsZSAmPSByZXFfc3RhdHVzX3JlcV9yZXNwW2ldPT0xJ2IwOwotICAgIGVuZAotZW5kCi0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmIChjb3JlX3JlcSAmIGNvcmVfcmVxX2FjaykgYmVnaW4KLSAgICAgICAgcmVxX2ZpZm9fYXhpX3dpZHRoW3JlcV9hdmFsX3B0cl0gPD0gY29yZV93aWR0aDsKLSAgICAgICAgcmVxX2ZpZm9fYXhpX2FkZHJbcmVxX2F2YWxfcHRyXSAgPD0gY29yZV9hZGRyOwotICAgICAgICByZXFfZmlmb19heGlfd2RhdGFbcmVxX2F2YWxfcHRyXSA8PSBjb3JlX3dkYXRhOwotICAgIGVuZAotZW5kCi0KLS8vIFJlcXVlc3QgU3RhdHVzIFF1ZXVlCi0vLyBJdCBpcyB1c2VkIGZvciBob2xkaW5nIGNvbnRyb2wgaW5mbyBvZiBwcm9jZXNzaW5nIHJlcXVlc3RzCi0KLS8vIENvbWJpbmF0aW9uYWwgbG9naWMgb2YgUmVxdWVzdCBTdGF0dXMgUXVldWUKLWFsd2F5c19jb21iIGJlZ2luCi0gICAgLy8gRGVmYXVsdAotICAgIHJlcV9zdGF0dXNfZW4gID0gJzA7IC8vIE5vIHVwZGF0ZQotICAgIHJlcV9zdGF0dXNfbmV3X3JlcV93cml0ZSA9IHJlcV9zdGF0dXNfcmVxX3dyaXRlOyAvLyBIb2xkIHJlcXVlc3QgaW5mbwotICAgIHJlcV9zdGF0dXNfbmV3X3JlcV9hZGRyICA9IHJlcV9zdGF0dXNfcmVxX2FkZHI7IC8vIEhvbGQgcmVxdWVzdCBpbmZvCi0gICAgcmVxX3N0YXR1c19uZXdfcmVxX2RhdGEgID0gcmVxX3N0YXR1c19yZXFfZGF0YTsgLy8gSG9sZCByZXF1ZXN0IGluZm8KLSAgICByZXFfc3RhdHVzX25ld19yZXFfcmVzcCAgPSByZXFfc3RhdHVzX3JlcV9yZXNwOyAvLyBIb2xkIHJlcXVlc3QgaW5mbwotCi0gICAgLy8gVXBkYXRlIHN0YXR1cyBvbiBuZXcgY29yZSByZXF1ZXN0Ci0gICAgaWYoIGNvcmVfcmVxICYgY29yZV9yZXFfYWNrICkgYmVnaW4KLSAgICAgICAgcmVxX3N0YXR1c19lbltyZXFfYXZhbF9wdHJdICAgICAgICAgICAgPSAxJ2QxOwotCi0gICAgICAgIHJlcV9zdGF0dXNfbmV3X3JlcV9yZXNwW3JlcV9hdmFsX3B0cl0gID0gMSdkMTsKLSAgICAgICAgcmVxX3N0YXR1c19uZXdfcmVxX3dyaXRlW3JlcV9hdmFsX3B0cl0gPSBjb3JlX2NtZCA9PSBTQ1IxX01FTV9DTURfV1I7Ci0KLSAgICAgICAgcmVxX3N0YXR1c19uZXdfcmVxX2FkZHJbcmVxX2F2YWxfcHRyXSAgPSB+KCAoZm9yY2VfcmVhZCAmIGFycmVhZHkpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9yY2Vfd3JpdGUgJiBhd3JlYWR5KSApOwotCi0gICAgICAgIHJlcV9zdGF0dXNfbmV3X3JlcV9kYXRhW3JlcV9hdmFsX3B0cl0gID0gfiggKGZvcmNlX3dyaXRlICYgd3JlYWR5ICYgYXdsZW4gPT0gOCdkMCkgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh+Zm9yY2Vfd3JpdGUgJiBjb3JlX2NtZCA9PSBTQ1IxX01FTV9DTURfUkQpICk7Ci0gICAgZW5kCi0KLSAgICAvLyBVcGRhdGUgc3RhdHVzIG9uIEFYSSBhZGRyZXNzIHBoYXNlCi0gICAgaWYgKCAoYXd2YWxpZCAmIGF3cmVhZHkpIHwgKGFydmFsaWQgJiBhcnJlYWR5KSApIGJlZ2luCi0gICAgICAgIHJlcV9zdGF0dXNfZW5bcmVxX3Byb2NfcHRyXSAgICAgICAgICAgPSAxJ2QxOwotICAgICAgICByZXFfc3RhdHVzX25ld19yZXFfYWRkcltyZXFfcHJvY19wdHJdID0gMSdkMDsKLSAgICBlbmQKLQotICAgIC8vIFVwZGF0ZSBzdGF0dXMgb24gQVhJIGRhdGEgcGhhc2UKLSAgICBpZiAoIHd2YWxpZCAmIHdyZWFkeSAmIHdsYXN0ICkgYmVnaW4KLSAgICAgICAgcmVxX3N0YXR1c19lbltyZXFfcHJvY19wdHJdICAgICAgICAgICA9IDEnZDE7Ci0gICAgICAgIHJlcV9zdGF0dXNfbmV3X3JlcV9kYXRhW3JlcV9wcm9jX3B0cl0gPSAxJ2QwOwotICAgIGVuZAotCi0gICAgLy8gVXBkYXRlIHN0YXR1cyB3aGVuIEFYSSBmaW5pc2ggdHJhbnNhY3Rpb24KLSAgICBpZiAoIChidmFsaWQgJiBicmVhZHkpIHwgKHJ2YWxpZCAmIHJyZWFkeSAmIHJsYXN0KSApIGJlZ2luCi0gICAgICAgIHJlcV9zdGF0dXNfZW5bcmVxX2RvbmVfcHRyXSAgICAgICAgICAgPSAxJ2QxOwotICAgICAgICByZXFfc3RhdHVzX25ld19yZXFfcmVzcFtyZXFfZG9uZV9wdHJdID0gMSdkMDsKLSAgICBlbmQKLWVuZAotCi0vLyBSZXF1ZXN0IFN0YXR1cyBRdWV1ZSByZWdpc3RlcgotaW50ZWdlciBqOwotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgcmVxX3N0YXR1c19yZXFfd3JpdGUgPD0gJzA7Ci0gICAgICAgIHJlcV9zdGF0dXNfcmVxX2FkZHIgPD0gJzA7Ci0gICAgICAgIHJlcV9zdGF0dXNfcmVxX2RhdGEgPD0gJzA7Ci0gICAgICAgIHJlcV9zdGF0dXNfcmVxX3Jlc3AgPD0gJzA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgZm9yIChqID0gMDsgaiA8IFNDUjFfUkVRX0JVRl9TSVpFOyBqID0gaisxKSBiZWdpbiAvLyBjcC40Ci0gICAgICAgICAgICBpZiAoIHJlcV9zdGF0dXNfZW5bal0gKSBiZWdpbgotICAgICAgICAgICAgICAgIHJlcV9zdGF0dXNfcmVxX3dyaXRlW2pdIDw9IHJlcV9zdGF0dXNfbmV3X3JlcV93cml0ZVtqXTsKLSAgICAgICAgICAgICAgICByZXFfc3RhdHVzX3JlcV9hZGRyW2pdICA8PSByZXFfc3RhdHVzX25ld19yZXFfYWRkcltqXTsKLSAgICAgICAgICAgICAgICByZXFfc3RhdHVzX3JlcV9kYXRhW2pdICA8PSByZXFfc3RhdHVzX25ld19yZXFfZGF0YVtqXTsKLSAgICAgICAgICAgICAgICByZXFfc3RhdHVzX3JlcV9yZXNwW2pdICA8PSByZXFfc3RhdHVzX25ld19yZXFfcmVzcFtqXTsKLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmQKLSAgICBlbmQKLWVuZAotCi1hbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAofnJzdF9uKSAgICAgICAgICAgICAgICAgICAgICAgICByZXFfYXZhbF9wdHIgPD0gJzA7Ci0gICAgZWxzZSBpZiAoY29yZV9yZXEgJiBjb3JlX3JlcV9hY2spICAgcmVxX2F2YWxfcHRyIDw9IHJlcV9hdmFsX3B0ciArIDEnYjE7Ci1lbmQKLQotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgcmVxX3Byb2NfcHRyIDw9ICcwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGlmICgoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3dmFsaWQgJiBhd3JlYWR5ICYgd3ZhbGlkICYgd3JlYWR5ICYgd2xhc3QpIHwKLSAgICAgICAgICAgICh+Zm9yY2Vfd3JpdGUgJiB+cmVxX3N0YXR1c19yZXFfZGF0YVtyZXFfcHJvY19wdHJdICYgYXd2YWxpZCAmIGF3cmVhZHkgICAgICAgICAgICAgICAgICAgICAgICAgICkgfAotICAgICAgICAgICAgKH5mb3JjZV93cml0ZSAmIH5yZXFfc3RhdHVzX3JlcV9hZGRyW3JlcV9wcm9jX3B0cl0gJiAgICAgICAgICAgICAgICAgICAgIHd2YWxpZCAmIHdyZWFkeSAmIHdsYXN0KSB8Ci0gICAgICAgICAgICAoICAgICAgICAgICAgICAgfnJlcV9zdGF0dXNfcmVxX2RhdGFbcmVxX3Byb2NfcHRyXSAmIGFydmFsaWQgJiBhcnJlYWR5ICAgICAgICAgICAgICAgICAgICAgICAgICApICApIGJlZ2luCi0KLSAgICAgICAgICAgIHJlcV9wcm9jX3B0ciA8PSByZXFfcHJvY19wdHIgKyAxJ2IxOwotICAgICAgICBlbmQKLSAgICBlbmQKLWVuZAotCi1hbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICByZXFfZG9uZV9wdHIgPD0gJzA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgaWYgKChidmFsaWQgJiBicmVhZHkgfCBydmFsaWQgJiBycmVhZHkgJiBybGFzdCkgJiByZXFfc3RhdHVzX3JlcV9yZXNwW3JlcV9kb25lX3B0cl0pIGJlZ2luCi0KLSAgICAgICAgICAgIHJlcV9kb25lX3B0ciA8PSByZXFfZG9uZV9wdHIgKyAxJ2IxOwotICAgICAgICBlbmQKLSAgICBlbmQKLWVuZAotCi0KLQotYXNzaWduIGFydmFsaWQgPSByZXFfc3RhdHVzX3JlcV9hZGRyW3JlcV9wcm9jX3B0cl0gJiB+cmVxX3N0YXR1c19yZXFfd3JpdGVbcmVxX3Byb2NfcHRyXSB8IGZvcmNlX3JlYWQ7Ci1hc3NpZ24gYXd2YWxpZCA9IHJlcV9zdGF0dXNfcmVxX2FkZHJbcmVxX3Byb2NfcHRyXSAmICByZXFfc3RhdHVzX3JlcV93cml0ZVtyZXFfcHJvY19wdHJdIHwgZm9yY2Vfd3JpdGU7Ci1hc3NpZ24gIHd2YWxpZCA9IHJlcV9zdGF0dXNfcmVxX2RhdGFbcmVxX3Byb2NfcHRyXSAmICByZXFfc3RhdHVzX3JlcV93cml0ZVtyZXFfcHJvY19wdHJdIHwgZm9yY2Vfd3JpdGU7Ci0KLWFzc2lnbiBhcmFkZHIgID0gKH5mb3JjZV9yZWFkICk/IHJlcV9maWZvX2F4aV9hZGRyW3JlcV9wcm9jX3B0cl0gOiBjb3JlX2FkZHI7Ci1hc3NpZ24gYXdhZGRyICA9ICh+Zm9yY2Vfd3JpdGUpPyByZXFfZmlmb19heGlfYWRkcltyZXFfcHJvY19wdHJdIDogY29yZV9hZGRyOwotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGlmIChidmFsaWQgJiBicmVhZHkgJiByZXFfc3RhdHVzX3JlcV9yZXNwW3JlcV9kb25lX3B0cl0pIGJlZ2luCi0gICAgICAgIHJjdmRfcmVzcCA9IChicmVzcD09MidiMDApPyBTQ1IxX01FTV9SRVNQX1JEWV9PSyA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX01FTV9SRVNQX1JEWV9FUjsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICBpZiAocnZhbGlkICYgcnJlYWR5ICYgcmxhc3QgJiByZXFfc3RhdHVzX3JlcV9yZXNwW3JlcV9kb25lX3B0cl0pIGJlZ2luCi0gICAgICAgICAgICByY3ZkX3Jlc3AgPSAocnJlc3A9PTInYjAwKT8gU0NSMV9NRU1fUkVTUF9SRFlfT0sgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfTUVNX1JFU1BfUkRZX0VSOwotICAgICAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICAgICAgcmN2ZF9yZXNwID0gU0NSMV9NRU1fUkVTUF9OT1RSRFk7Ci0gICAgICAgIGVuZAotICAgIGVuZAotZW5kCi0KLQotd2lyZSBbU0NSMV9BRERSX1dJRFRILTE6MF0gQ3VyQWRkcjEgPSByZXFfZmlmb19heGlfYWRkcltyZXFfcHJvY19wdHJdOwotd2lyZSBbMTowXSAgYlNoaWZ0MSA9IEN1ckFkZHIxWzE6MF07Ci0KLS8vIFdyaXRlIGRhdGEgc2lnbmFscyBhZGFwdGF0aW9uCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGlmIChmb3JjZV93cml0ZSkKLSAgICAgICAgY2FzZSAoY29yZV93aWR0aCkKLSAgICAgICAgICAgIFNDUjFfTUVNX1dJRFRIX0JZVEUgOiAgd3N0cmIgPSA0J2gxIDw8IGNvcmVfYWRkclsxOjBdOwotICAgICAgICAgICAgU0NSMV9NRU1fV0lEVEhfSFdPUkQ6ICB3c3RyYiA9IDQnaDMgPDwgY29yZV9hZGRyWzE6MF07Ci0gICAgICAgICAgICBTQ1IxX01FTV9XSURUSF9XT1JEIDogIHdzdHJiID0gNCdoZiA8PCBjb3JlX2FkZHJbMTowXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAgd3N0cmIgPSAneDsKLSAgICAgICAgZW5kY2FzZQotICAgIGVsc2UKLSAgICAgICAgY2FzZSAocmVxX2ZpZm9fYXhpX3dpZHRoW3JlcV9wcm9jX3B0cl0pCi0gICAgICAgICAgICBTQ1IxX01FTV9XSURUSF9CWVRFIDogIHdzdHJiID0gNCdoMSA8PCBiU2hpZnQxOwotICAgICAgICAgICAgU0NSMV9NRU1fV0lEVEhfSFdPUkQ6ICB3c3RyYiA9IDQnaDMgPDwgYlNoaWZ0MTsKLSAgICAgICAgICAgIFNDUjFfTUVNX1dJRFRIX1dPUkQgOiAgd3N0cmIgPSA0J2hmIDw8IGJTaGlmdDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogIHdzdHJiID0gJ3g7Ci0gICAgICAgIGVuZGNhc2UKLWVuZAotCi0KLQotYXNzaWduIHdkYXRhID0gKGZvcmNlX3dyaXRlKT8gICAgICAgICAgICAgICAgICAgICAgIGNvcmVfd2RhdGEgPDwgKDgqICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2FkZHJbMTowXSkgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxX2ZpZm9fYXhpX3dkYXRhW3JlcV9wcm9jX3B0cl0gPDwgKDgqIGJTaGlmdDEpOwotCi13aXJlIFtTQ1IxX0FERFJfV0lEVEgtMTowXSBDdXJBZGRyMiA9IHJlcV9maWZvX2F4aV9hZGRyW3JlcV9kb25lX3B0cl07Ci13aXJlIFsxOjBdICBiU2hpZnQyID0gQ3VyQWRkcjJbMTowXTsKLQotLy8gUmVhZCBkYXRhIGFkYXB0YXRpb24KLWFsd2F5c19jb21iIGJlZ2luCi0gICBjYXNlIChyZXFfZmlmb19heGlfd2lkdGhbcmVxX2RvbmVfcHRyXSkKLSAgICAgICAgU0NSMV9NRU1fV0lEVEhfQllURSA6ICByY3ZkX3JkYXRhID0gcmRhdGEgPj4gKDgqYlNoaWZ0Mik7Ci0gICAgICAgIFNDUjFfTUVNX1dJRFRIX0hXT1JEOiAgcmN2ZF9yZGF0YSA9IHJkYXRhID4+ICg4KmJTaGlmdDIpOwotICAgICAgICBTQ1IxX01FTV9XSURUSF9XT1JEIDogIHJjdmRfcmRhdGEgPSByZGF0YSA+PiAoOCpiU2hpZnQyKTsKLSAgICAgICAgZGVmYXVsdDogIHJjdmRfcmRhdGEgPSAneDsKLSAgICBlbmRjYXNlIAotZW5kCi0KLQotZ2VuZXJhdGUKLSAgICBpZiAoU0NSMV9BWElfUkVTUF9CUCA9PSAxKSBiZWdpbiA6IGF4aV9yZXNwX2JwCi0gICAgICAgIGFzc2lnbiBjb3JlX3JkYXRhID0gKHJ2YWxpZCAmIHJyZWFkeSAmIHJsYXN0KSA/IHJjdmRfcmRhdGEgOiAnMDsKLSAgICAgICAgYXNzaWduIGNvcmVfcmVzcCAgPSAoYXhpX3JlaW5pdCkgPyBTQ1IxX01FTV9SRVNQX05PVFJEWSA6IHJjdmRfcmVzcDsKLSAgICBlbmQgZWxzZSBiZWdpbiA6IGF4aV9yZXNwX25vX2JwCi0gICAgICAgIGFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgICAgICAgICAgaWYgKH5yc3RfbikgICAgICAgICAgICAgIGNvcmVfcmVzcCAgPD0gU0NSMV9NRU1fUkVTUF9OT1RSRFk7Ci0gICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgY29yZV9yZXNwICA8PSAoYXhpX3JlaW5pdCkgPyBTQ1IxX01FTV9SRVNQX05PVFJEWSA6IHJjdmRfcmVzcDsKLSAgICAgICAgZW5kCi0gICAgICAgIGFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgICAgICAgICAgaWYgKHJ2YWxpZCAmIHJyZWFkeSAmIHJsYXN0KSBjb3JlX3JkYXRhIDw9IHJjdmRfcmRhdGE7Ci0gICAgICAgIGVuZAotICAgIGVuZAotZW5kZ2VuZXJhdGUKLQotCi0KLS8vIEFYSSBpbnRlcmZhY2UgYXNzaWdubWVudHMKLWFzc2lnbiBhd2lkICAgICA9IFNDUjFfQVhJX0lEV0lEVEgnKDEpOwotYXNzaWduIGF3bGVuICAgID0gOCdkMDsKLWFzc2lnbiBhd3NpemUgICA9IChmb3JjZV93cml0ZSkgPyB3aWR0aDJheHNpemUoY29yZV93aWR0aCkgOiB3aWR0aDJheHNpemUocmVxX2ZpZm9fYXhpX3dpZHRoW3JlcV9wcm9jX3B0cl0pOwotYXNzaWduIGF3YnVyc3QgID0gMidkMTsKLWFzc2lnbiBhd2NhY2hlICA9IDQnZDI7Ci1hc3NpZ24gYXdsb2NrICAgPSAnMDsKLWFzc2lnbiBhd3Byb3QgICA9ICcwOwotYXNzaWduIGF3cmVnaW9uID0gJzA7Ci1hc3NpZ24gYXd1c2VyICAgPSAnMDsKLWFzc2lnbiBhd3FvcyAgICA9ICcwOwotCi1hc3NpZ24gYXJpZCAgICAgPSBTQ1IxX0FYSV9JRFdJRFRIJygwKTsKLWFzc2lnbiBhcmxlbiAgICA9IDgnZDA7Ci1hc3NpZ24gYXJzaXplICAgPSAoZm9yY2VfcmVhZCkgPyB3aWR0aDJheHNpemUoY29yZV93aWR0aCkgOiB3aWR0aDJheHNpemUocmVxX2ZpZm9fYXhpX3dpZHRoW3JlcV9wcm9jX3B0cl0pOwotYXNzaWduIGFyYnVyc3QgID0gMidkMTsKLWFzc2lnbiBhcmNhY2hlICA9IDQnZDI7Ci1hc3NpZ24gYXJwcm90ICAgPSAnMDsKLWFzc2lnbiBhcnJlZ2lvbiA9ICcwOwotYXNzaWduIGFybG9jayAgID0gJzA7Ci1hc3NpZ24gYXJxb3MgICAgPSAnMDsKLWFzc2lnbiBhcnVzZXIgICA9ICcwOwotCi1hc3NpZ24gd2xhc3QgICAgPSAxJ2QxOwotYXNzaWduIHd1c2VyICAgID0gJzA7Ci0KLQotYGlmZGVmIFNDUjFfVFJHVF9TSU1VTEFUSU9OCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEFzc2VydGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFggY2hlY2tzCi1TQ1IxX1NWQV9BWElfWF9DSEVDSzAgIDogYXNzZXJ0IHByb3BlcnR5IChAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKSAgICEkaXN1bmtub3duKHtjb3JlX3JlcSwgYXdyZWFkeSwgd3JlYWR5LCBidmFsaWQsIGFycmVhZHksIHJ2YWxpZH0pICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAkZXJyb3IoIkFYSSBicmlkZ2U6IFggc3RhdGUgb24gaW5wdXQiKTsKLVNDUjFfU1ZBX0FYSV9YX0NIRUNLMSAgOiBhc3NlcnQgcHJvcGVydHkgKEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pICAgY29yZV9yZXEgfC0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhJGlzdW5rbm93bih7Y29yZV9jbWQsIGNvcmVfd2lkdGgsIGNvcmVfYWRkcn0pICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAkZXJyb3IoIkFYSSBicmlkZ2U6IFggc3RhdGUgb24gaW5wdXQiKTsKLVNDUjFfU1ZBX0FYSV9YX0NIRUNLMiAgOiBhc3NlcnQgcHJvcGVydHkgKEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pICAgYnZhbGlkIHwtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISRpc3Vua25vd24oe2JpZCwgYnJlc3B9KSApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgJGVycm9yKCJBWEkgYnJpZGdlOiBYIHN0YXRlIG9uIGlucHV0Iik7Ci1TQ1IxX1NWQV9BWElfWF9DSEVDSzMgIDogYXNzZXJ0IHByb3BlcnR5IChAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKSAgIHJ2YWxpZCB8LT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEkaXN1bmtub3duKHtyaWQsIHJyZXNwfSkgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlICRlcnJvcigiQVhJIGJyaWRnZTogWCBzdGF0ZSBvbiBpbnB1dCIpOwotYGVuZGlmIC8vIFNDUjFfVFJHVF9TSU1VTEFUSU9OCi0KLWVuZG1vZHVsZSA6IHNjcjFfbWVtX2F4aQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL3RvcC9zY3IxX3RjbS5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy90b3Avc2NyMV90Y20uc3YKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiODE3NGUuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL3RvcC9zY3IxX3RjbS5zdgorKysgL2Rldi9udWxsCkBAIC0xLDIxMiArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIxCi0vLyAKLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0vLyBTUERYLUZpbGVDb250cmlidXRvcjogU3ludGFjb3JlIExMQwotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLyBAZmlsZSAgICAgICA8c2NyMV90Y20uc3Y+Ci0vLy8gQGJyaWVmICAgICAgVGlnaHRseS1Db3VwbGVkIE1lbW9yeSAoVENNKQotLy8vCi0KLWBpbmNsdWRlICJzY3IxX21lbWlmLnN2aCIKLWBpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgotCi1gaWZkZWYgU0NSMV9UQ01fRU4KLW1vZHVsZSBzY3IxX3RjbQotIygKLSAgICBwYXJhbWV0ZXIgU0NSMV9UQ01fU0laRSA9IGBTQ1IxX0lNRU1fQVdJRFRIJ2gwMDAxMDAwMAotKQotKAotICAgIC8vIENvbnRyb2wgc2lnbmFscwotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGssCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLAotCi1gaWZuZGVmIFNDUjFfVENNX01FTQotICAgIC8vIFNSQU0wIFBPUlQtMAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmFtMF9jbGswLAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmFtMF9jc2IwLAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmFtMF93ZWIwLAotICAgIG91dHB1dCAgbG9naWMgICBbODowXSAgICAgICAgICAgICAgICAgICBzcmFtMF9hZGRyMCwKLSAgICBvdXRwdXQgIGxvZ2ljICAgWzM6MF0gICAgICAgICAgICAgICAgICAgc3JhbTBfd21hc2swLAotICAgIG91dHB1dCAgbG9naWMgICBbMzE6MF0gICAgICAgICAgICAgICAgICBzcmFtMF9kaW4wLAotICAgIGlucHV0ICAgbG9naWMgICBbMzE6MF0gICAgICAgICAgICAgICAgICBzcmFtMF9kb3V0MCwKLQotICAgIC8vIFNSQU0tMCBQT1JULTEKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JhbTBfY2xrMSwKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JhbTBfY3NiMSwKLSAgICBvdXRwdXQgIGxvZ2ljICBbODowXSAgICAgICAgICAgICAgICAgICAgc3JhbTBfYWRkcjEsCi0gICAgaW5wdXQgICBsb2dpYyAgWzMxOjBdICAgICAgICAgICAgICAgICAgIHNyYW0wX2RvdXQxLAotCi0gICAgLy8gU1JBTTEgUE9SVC0wCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYW0xX2NsazAsCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYW0xX2NzYjAsCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYW0xX3dlYjAsCi0gICAgb3V0cHV0ICBsb2dpYyAgIFs4OjBdICAgICAgICAgICAgICAgICAgIHNyYW0xX2FkZHIwLAotICAgIG91dHB1dCAgbG9naWMgICBbMzowXSAgICAgICAgICAgICAgICAgICBzcmFtMV93bWFzazAsCi0gICAgb3V0cHV0ICBsb2dpYyAgIFszMTowXSAgICAgICAgICAgICAgICAgIHNyYW0xX2RpbjAsCi0gICAgaW5wdXQgICBsb2dpYyAgIFszMTowXSAgICAgICAgICAgICAgICAgIHNyYW0xX2RvdXQwLAotCi0gICAgLy8gU1JBTS0xIFBPUlQtMQotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmFtMV9jbGsxLAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmFtMV9jc2IxLAotICAgIG91dHB1dCAgbG9naWMgIFs4OjBdICAgICAgICAgICAgICAgICAgICBzcmFtMV9hZGRyMSwKLSAgICBpbnB1dCAgIGxvZ2ljICBbMzE6MF0gICAgICAgICAgICAgICAgICAgc3JhbTFfZG91dDEsCi0KLWBlbmRpZgotCi0gICAgLy8gQ29yZSBpbnN0cnVjdGlvbiBpbnRlcmZhY2UKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1lbV9yZXFfYWNrLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWVtX3JlcSwKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9JTUVNX0FXSURUSC0xOjBdICAgaW1lbV9hZGRyLAotICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX0lNRU1fRFdJRFRILTE6MF0gICBpbWVtX3JkYXRhLAotICAgIG91dHB1dCAgbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICBpbWVtX3Jlc3AsCi0KLSAgICAvLyBDb3JlIGRhdGEgaW50ZXJmYWNlCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW1fcmVxX2FjaywKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1lbV9yZXEsCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW1fY21kLAotICAgIGlucHV0ICAgbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICBkbWVtX3dpZHRoLAotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX0RNRU1fQVdJRFRILTE6MF0gICBkbWVtX2FkZHIsCi0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgIGRtZW1fd2RhdGEsCi0gICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgIGRtZW1fcmRhdGEsCi0gICAgb3V0cHV0ICBsb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgIGRtZW1fcmVzcAotKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCBzaWduYWwgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1lbV9yZXFfZW47Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWVtX3JlcV9lbjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW1fcmQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWVtX3JkOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1lbV93cjsKLWxvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgICAgIGRtZW1fd3JpdGVkYXRhOwotbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICAgICAgZG1lbV9yZGF0YV9sb2NhbDsKLWxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW1fYnl0ZWVuOwotbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgZG1lbV9yZGF0YV9zaGlmdF9yZWc7Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIENvcmUgaW50ZXJmYWNlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWFzc2lnbiBpbWVtX3JlcV9lbiA9IChpbWVtX3Jlc3AgPT0gU0NSMV9NRU1fUkVTUF9SRFlfT0spIF4gaW1lbV9yZXE7Ci1hc3NpZ24gZG1lbV9yZXFfZW4gPSAoZG1lbV9yZXNwID09IFNDUjFfTUVNX1JFU1BfUkRZX09LKSBeIGRtZW1fcmVxOwotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICBpbWVtX3Jlc3AgPD0gU0NSMV9NRU1fUkVTUF9OT1RSRFk7Ci0gICAgZW5kIGVsc2UgaWYgKGltZW1fcmVxX2VuKSBiZWdpbgotICAgICAgICBpbWVtX3Jlc3AgPD0gaW1lbV9yZXEgPyBTQ1IxX01FTV9SRVNQX1JEWV9PSyA6IFNDUjFfTUVNX1JFU1BfTk9UUkRZOwotICAgIGVuZAotZW5kCi0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGRtZW1fcmVzcCA8PSBTQ1IxX01FTV9SRVNQX05PVFJEWTsKLSAgICBlbmQgZWxzZSBpZiAoZG1lbV9yZXFfZW4pIGJlZ2luCi0gICAgICAgIGRtZW1fcmVzcCA8PSBkbWVtX3JlcSA/IFNDUjFfTUVNX1JFU1BfUkRZX09LIDogU0NSMV9NRU1fUkVTUF9OT1RSRFk7Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIGltZW1fcmVxX2FjayA9IDEnYjE7Ci1hc3NpZ24gZG1lbV9yZXFfYWNrID0gMSdiMTsKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTWVtb3J5IGRhdGEgY29tcG9zaW5nCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWBpZm5kZWYgU0NSMV9UQ01fTUVNCi0vLyBjb25uZWN0IHRoZSBUQ00gbWVtb3J5IHRvIFNSQU0tMAotYXNzaWduIHNyYW0wX2NsazEgPSBjbGs7Ci1hc3NpZ24gc3JhbTBfY3NiMSA9IShpbWVtX3JlcSAmIGltZW1fYWRkclsxMV0gPT0gMSdiMCk7Ci1hc3NpZ24gc3JhbTBfYWRkcjEgPSBpbWVtX2FkZHJbMTA6Ml07Ci0KLS8vIGNvbm5lY3QgdGhlIFRDTSBtZW1vcnkgdG8gU1JBTS0xCi1hc3NpZ24gc3JhbTFfY2xrMSA9IGNsazsKLWFzc2lnbiBzcmFtMV9jc2IxID0hKGltZW1fcmVxICYgaW1lbV9hZGRyWzExXSA9PSAxJ2IxKTsKLWFzc2lnbiBzcmFtMV9hZGRyMSA9IGltZW1fYWRkclsxMDoyXTsKLQotLy8gSU1FTSBSZWFkIERhdGEgU2VsZWN0aW9uIEJhc2VkIG9uIEFkZHJlc3MgYml0WzExXQotYXNzaWduIGltZW1fcmRhdGEgID0gKGltZW1fYWRkclsxMV0gPT0gMSdiMCkgPyAgc3JhbTBfZG91dDE6IHNyYW0xX2RvdXQxOwotCi0vLyBTUkFNLTAgUG9ydCAwIENvbnRyb2wgR2VuZXJhdGlvbgotYXNzaWduIHNyYW0wX2NsazAgPSBjbGs7Ci1hc3NpZ24gc3JhbTBfY3NiMCAgID0gIShkbWVtX3JlcSAmIChkbWVtX2FkZHJbMTFdID09IDEnYjApICYgKChkbWVtX2NtZCA9PSBTQ1IxX01FTV9DTURfUkQpIHwgKGRtZW1fY21kID09IFNDUjFfTUVNX0NNRF9XUikpKTsKLWFzc2lnbiBzcmFtMF93ZWIwICAgPSAhKGRtZW1fcmVxICYgKGRtZW1fY21kID09IFNDUjFfTUVNX0NNRF9XUikpOwotYXNzaWduIHNyYW0wX2FkZHIwICA9IGRtZW1fYWRkclsxMDoyXTsKLWFzc2lnbiBzcmFtMF93bWFzazAgPSAgZG1lbV9ieXRlZW47Ci1hc3NpZ24gc3JhbTBfZGluMCAgID0gIGRtZW1fd3JpdGVkYXRhOwotCi0vLyBTUkFNLTEgUG9ydCAwIENvbnRyb2wgR2VuZXJhdGlvbgotYXNzaWduIHNyYW0xX2NsazAgPSBjbGs7Ci1hc3NpZ24gc3JhbTFfY3NiMCAgID0gIShkbWVtX3JlcSAmIChkbWVtX2FkZHJbMTFdID09IDEnYjEpICYgKChkbWVtX2NtZCA9PSBTQ1IxX01FTV9DTURfUkQpIHwgKGRtZW1fY21kID09IFNDUjFfTUVNX0NNRF9XUikpKTsKLWFzc2lnbiBzcmFtMV93ZWIwICAgPSAhKGRtZW1fcmVxICYgKGRtZW1fY21kID09IFNDUjFfTUVNX0NNRF9XUikpOwotYXNzaWduIHNyYW0xX2FkZHIwICA9IGRtZW1fYWRkclsxMDoyXTsKLWFzc2lnbiBzcmFtMV93bWFzazAgPSAgZG1lbV9ieXRlZW47Ci1hc3NpZ24gc3JhbTFfZGluMCAgID0gIGRtZW1fd3JpdGVkYXRhOwotCi0KLS8vIERNRU0gUmVhZCBEYXRhIFNlbGVjdGlvbiBCYXNlZCBvbiBBZGRyZXNzIGJpdFsxMV0KLWFzc2lnbiBkbWVtX3JkYXRhX2xvY2FsID0gKGRtZW1fYWRkclsxMV0gPT0gMSdiMCkgPyBzcmFtMF9kb3V0MDogc3JhbTFfZG91dDA7Ci0KLWBlbmRpZgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBkbWVtX3dyaXRlZGF0YSA9IGRtZW1fd2RhdGE7Ci0gICAgZG1lbV9ieXRlZW4gICAgPSA0J2IxMTExOwotICAgIGNhc2UgKCBkbWVtX3dpZHRoICkKLSAgICAgICAgU0NSMV9NRU1fV0lEVEhfQllURSA6IGJlZ2luCi0gICAgICAgICAgICBkbWVtX3dyaXRlZGF0YSAgPSB7KGBTQ1IxX0RNRU1fRFdJRFRIIC8gIDgpe2RtZW1fd2RhdGFbNzowXX19OwotICAgICAgICAgICAgZG1lbV9ieXRlZW4gICAgID0gNCdiMDAwMSA8PCBkbWVtX2FkZHJbMTowXTsKLSAgICAgICAgZW5kCi0gICAgICAgIFNDUjFfTUVNX1dJRFRIX0hXT1JEIDogYmVnaW4KLSAgICAgICAgICAgIGRtZW1fd3JpdGVkYXRhICA9IHsoYFNDUjFfRE1FTV9EV0lEVEggLyAxNil7ZG1lbV93ZGF0YVsxNTowXX19OwotICAgICAgICAgICAgZG1lbV9ieXRlZW4gICAgID0gNCdiMDAxMSA8PCB7ZG1lbV9hZGRyWzFdLCAxJ2IwfTsKLSAgICAgICAgZW5kCi0gICAgICAgIGRlZmF1bHQgOiBiZWdpbgotICAgICAgICBlbmQKLSAgICBlbmRjYXNlCi1lbmQKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTWVtb3J5IGluc3RhbnRpYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotYGlmZGVmIFNDUjFfVENNX01FTQotc2NyMV9kcF9tZW1vcnkgIygKLSAgICAuU0NSMV9XSURUSCAoIDMyICAgICAgICAgICAgKSwKLSAgICAuU0NSMV9TSVpFICAoIFNDUjFfVENNX1NJWkUgKQotKSBpX2RwX21lbW9yeSAoCi0gICAgLmNsayAgICAoIGNsayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKLSAgICAvLyBJbnN0cnVjdGlvbiBwb3J0Ci0gICAgLy8gUG9ydCBBCi0gICAgLnJlbmEgICAoIGltZW1fcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKLSAgICAuYWRkcmEgICggaW1lbV9hZGRyWyRjbG9nMihTQ1IxX1RDTV9TSVpFKS0xOjJdICApLAotICAgIC5xYSAgICAgKCBpbWVtX3JkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCi0gICAgLy8gRGF0YSBwb3J0Ci0gICAgLy8gUG9ydCBCCi0gICAgLnJlbmIgICAoIGRtZW1fcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKLSAgICAud2VuYiAgICggZG1lbV93ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAotICAgIC53ZWJiICAgKCBkbWVtX2J5dGVlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICksCi0gICAgLmFkZHJiICAoIGRtZW1fYWRkclskY2xvZzIoU0NSMV9UQ01fU0laRSktMToyXSAgKSwKLSAgICAucWIgICAgICggZG1lbV9yZGF0YV9sb2NhbCAgICAgICAgICAgICAgICAgICAgICApLAotICAgIC5kYXRhYiAgKCBkbWVtX3dyaXRlZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICkKLSk7Ci1gZW5kaWYKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBEYXRhIG1lbW9yeSBvdXRwdXQgZ2VuZXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBkbWVtX3JkYXRhX3NoaWZ0X3JlZyA9IGRtZW1fYWRkclsxOjBdOwotYXNzaWduIGRtZW1fcmRhdGEgPSBkbWVtX3JkYXRhX2xvY2FsID4+ICggOCAqIGRtZW1fcmRhdGFfc2hpZnRfcmVnICk7Ci0KLWVuZG1vZHVsZSA6IHNjcjFfdGNtCi0KLWBlbmRpZiAvLyBTQ1IxX1RDTV9FTgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL3RvcC9zY3IxX3RpbWVyLnN2IGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL3RvcC9zY3IxX3RpbWVyLnN2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2Q1ZDdjLi4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy90b3Avc2NyMV90aW1lci5zdgorKysgL2Rldi9udWxsCkBAIC0xLDMwMSArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIxCi0vLyAKLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0vLyBTUERYLUZpbGVDb250cmlidXRvcjogU3ludGFjb3JlIExMQwotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLyBAZmlsZSAgICAgICA8c2NyMV90aW1lci5zdj4KLS8vLyBAYnJpZWYgICAgICBNZW1vcnktbWFwcGVkIFRpbWVyCi0vLy8gICAgVmVyc2lvbiAxLjAgLSAxOCAtIEp1bHkgMjAyMSAtIERpbmVzaCBBIFByb2plY3Q6IHlpZml2ZQotLy8vICAgICAgICAgICAxLlRvIGJyZWFrIHRoZSB0aW1pbmcgcGF0aCwgaW5wdXQgYW5kIG91dHB1dCBwYXRoIGFyZSByZWdpc3RlcmVkCi0vLy8gICAgICAgICAgIDIuU3BpbHQgdGhlIDY0IGJpdCBhZGRlciBpbnRvIHR3byAzMiBiaXQgYWRkZXIgd2l0aCB0YWtpbmcgY2FyZSBvZgotLy8vICAgICAgICAgICAgIG92ZXJmbG93Ci0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi1gaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKLWBpbmNsdWRlICJzY3IxX21lbWlmLnN2aCIKLQotbW9kdWxlIHNjcjFfdGltZXIgKAotICAgIC8vIENvbW1vbgotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaywKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydGNfY2xrLAotCi0gICAgLy8gTWVtb3J5IGludGVyZmFjZQotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW1fcmVxLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW1fY21kLAotICAgIGlucHV0ICAgbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW1fd2lkdGgsCi0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfRE1FTV9BV0lEVEgtMTowXSAgICAgICAgICAgZG1lbV9hZGRyLAotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICAgICAgICAgIGRtZW1fd2RhdGEsCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1lbV9yZXFfYWNrLAotICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICAgICAgICAgIGRtZW1fcmRhdGEsCi0gICAgb3V0cHV0ICBsb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1lbV9yZXNwLAotCi0gICAgLy8gVGltZXIgaW50ZXJmYWNlCi0gICAgb3V0cHV0ICBsb2dpYyBbNjM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfdmFsLAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX2lycQotKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCBwYXJhbWV0ZXJzIGRlY2xhcmF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWxvY2FscGFyYW0gaW50IHVuc2lnbmVkIFNDUjFfVElNRVJfQUREUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDU7Ci1sb2NhbHBhcmFtIGxvZ2ljIFtTQ1IxX1RJTUVSX0FERFJfV0lEVEgtMTowXSBTQ1IxX1RJTUVSX0NPTlRST0wgICAgICAgICAgICAgPSA1J2gwOwotbG9jYWxwYXJhbSBsb2dpYyBbU0NSMV9USU1FUl9BRERSX1dJRFRILTE6MF0gU0NSMV9USU1FUl9ESVZJREVSICAgICAgICAgICAgID0gNSdoNDsKLWxvY2FscGFyYW0gbG9naWMgW1NDUjFfVElNRVJfQUREUl9XSURUSC0xOjBdIFNDUjFfVElNRVJfTVRJTUVMTyAgICAgICAgICAgICA9IDUnaDg7Ci1sb2NhbHBhcmFtIGxvZ2ljIFtTQ1IxX1RJTUVSX0FERFJfV0lEVEgtMTowXSBTQ1IxX1RJTUVSX01USU1FSEkgICAgICAgICAgICAgPSA1J2hDOwotbG9jYWxwYXJhbSBsb2dpYyBbU0NSMV9USU1FUl9BRERSX1dJRFRILTE6MF0gU0NSMV9USU1FUl9NVElNRUNNUExPICAgICAgICAgID0gNSdoMTA7Ci1sb2NhbHBhcmFtIGxvZ2ljIFtTQ1IxX1RJTUVSX0FERFJfV0lEVEgtMTowXSBTQ1IxX1RJTUVSX01USU1FQ01QSEkgICAgICAgICAgPSA1J2gxNDsKLQotbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgU0NSMV9USU1FUl9DT05UUk9MX0VOX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgID0gMDsKLWxvY2FscGFyYW0gaW50IHVuc2lnbmVkIFNDUjFfVElNRVJfQ09OVFJPTF9DTEtTUkNfT0ZGU0VUICAgICAgICAgICAgICAgICAgICA9IDE7Ci1sb2NhbHBhcmFtIGludCB1bnNpZ25lZCBTQ1IxX1RJTUVSX0RJVklERVJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxMDsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCBzaWduYWxzIGRlY2xhcmF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWxvZ2ljIFs2MzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGltZV9yZWc7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRpbWVfMzJiX292cjsgLy8gSW5kaWNhdGUgMzJiIE92ciBmbG93Ci1sb2dpYyBbNjM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRpbWVfbmV3OwotbG9naWMgWzYzOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10aW1lY21wX3JlZzsKLWxvZ2ljIFs2MzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGltZWNtcF9uZXc7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfZW47Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfY2xrc3JjX3J0YzsKLWxvZ2ljIFtTQ1IxX1RJTUVSX0RJVklERVJfV0lEVEgtMTowXSAgICAgICAgICAgICAgICB0aW1lcl9kaXY7Ci0KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sX3VwOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdmlkZXJfdXA7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRpbWVsb191cDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGltZWhpX3VwOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10aW1lY21wbG9fdXA7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRpbWVjbXBoaV91cDsKLQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW1fcmVxX3ZhbGlkOwotCi1sb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRjX3N5bmM7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRjX2V4dF9wdWxzZTsKLWxvZ2ljIFtTQ1IxX1RJTUVSX0RJVklERVJfV0lEVEgtMTowXSAgICAgICAgICAgICAgICB0aW1lY2xrX2NudDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lY2xrX2NudF9lbjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lX3Bvc2VkZ2U7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZV9jbXBfZmxhZzsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSZWdpc3RlcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBDT05UUk9MCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICB0aW1lcl9lbiAgICAgICAgICAgIDw9IDEnYjE7Ci0gICAgICAgIHRpbWVyX2Nsa3NyY19ydGMgICAgPD0gMSdiMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICBpZiAoY29udHJvbF91cCkgYmVnaW4KLSAgICAgICAgICAgIHRpbWVyX2VuICAgICAgICAgICAgPD0gZG1lbV93ZGF0YVtTQ1IxX1RJTUVSX0NPTlRST0xfRU5fT0ZGU0VUXTsKLSAgICAgICAgICAgIHRpbWVyX2Nsa3NyY19ydGMgICAgPD0gZG1lbV93ZGF0YVtTQ1IxX1RJTUVSX0NPTlRST0xfQ0xLU1JDX09GRlNFVF07Ci0gICAgICAgIGVuZAotICAgIGVuZAotZW5kCi0KLS8vIERJVklERVIKLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIHRpbWVyX2RpdiAgIDw9ICcwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGlmIChkaXZpZGVyX3VwKSBiZWdpbgotICAgICAgICAgICAgdGltZXJfZGl2ICAgPD0gZG1lbV93ZGF0YVtTQ1IxX1RJTUVSX0RJVklERVJfV0lEVEgtMTowXTsKLSAgICAgICAgZW5kCi0gICAgZW5kCi1lbmQKLQotLy8gTVRJTUUKLWFzc2lnbiB0aW1lX3Bvc2VkZ2UgPSAodGltZWNsa19jbnRfZW4gJiAodGltZWNsa19jbnQgPT0gMCkpOwotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIG10aW1lX25ldyAgID0gbXRpbWVfcmVnOwotICAgIGlmICh0aW1lX3Bvc2VkZ2UpIGJlZ2luCi0gICAgICAgIG10aW1lX25ld1szMTowXSAgICA9IG10aW1lX3JlZ1szMTowXSArIDEnYjE7Ci0gICAgICAgIG10aW1lX25ld1s2MzozMl0gICA9IG10aW1lXzMyYl9vdnIgPyAobXRpbWVfbmV3WzYzOjMyXSArIDEnYjEpIDogbXRpbWVfbmV3WzYzOjMyXTsKLSAgICBlbmQgZWxzZSBpZiAobXRpbWVsb191cCkgYmVnaW4KLSAgICAgICAgbXRpbWVfbmV3WzMxOjBdICAgICA9IGRtZW1fd2RhdGE7Ci0gICAgZW5kIGVsc2UgaWYgKG10aW1laGlfdXApIGJlZ2luCi0gICAgICAgIG10aW1lX25ld1s2MzozMl0gICAgPSBkbWVtX3dkYXRhOwotICAgIGVuZAotZW5kCi0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIG10aW1lX3JlZyAgIDw9ICcwOwotCW10aW1lXzMyYl9vdnIgPD0gJzA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgaWYgKHRpbWVfcG9zZWRnZSB8IG10aW1lbG9fdXAgfCBtdGltZWhpX3VwKSBiZWdpbgotICAgICAgICAgICAgbXRpbWVfcmVnICAgPD0gbXRpbWVfbmV3OwotCSAgICBtdGltZV8zMmJfb3ZyIDw9ICZtdGltZV9uZXc7IC8vIEluZGljYXRlIDMyQiBPdmVyZmxvdyBpbiBuZXh0IGluY3JlbWVudCBieSBjaGVjayBhbGwgb25lCi0gICAgICAgIGVuZAotICAgIGVuZAotZW5kCi0KLS8vIE1USU1FQ01QCi1hbHdheXNfY29tYiBiZWdpbgotICAgIG10aW1lY21wX25ldyAgICA9IG10aW1lY21wX3JlZzsKLSAgICBpZiAobXRpbWVjbXBsb191cCkgYmVnaW4KLSAgICAgICAgbXRpbWVjbXBfbmV3WzMxOjBdICA9IGRtZW1fd2RhdGE7Ci0gICAgZW5kCi0gICAgaWYgKG10aW1lY21waGlfdXApIGJlZ2luCi0gICAgICAgIG10aW1lY21wX25ld1s2MzozMl0gPSBkbWVtX3dkYXRhOwotICAgIGVuZAotZW5kCi0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIG10aW1lY21wX3JlZyAgICA8PSAnMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICBpZiAobXRpbWVjbXBsb191cCB8IG10aW1lY21waGlfdXApIGJlZ2luCi0gICAgICAgICAgICBtdGltZWNtcF9yZWcgICAgPD0gbXRpbWVjbXBfbmV3OwotICAgICAgICBlbmQKLSAgICBlbmQKLWVuZAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEludGVycnVwdCBwZW5kaW5nCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWFzc2lnbiB0aW1lX2NtcF9mbGFnID0gKG10aW1lX3JlZyA+PSAoKG10aW1lY21wbG9fdXAgfCBtdGltZWNtcGhpX3VwKSA/IG10aW1lY21wX25ldyA6IG10aW1lY21wX3JlZykpOwotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICB0aW1lcl9pcnEgICA8PSAxJ2IwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGlmICh+dGltZXJfaXJxKSBiZWdpbgotICAgICAgICAgICAgdGltZXJfaXJxICAgPD0gdGltZV9jbXBfZmxhZzsKLSAgICAgICAgZW5kIGVsc2UgYmVnaW4gLy8gMSdiMQotICAgICAgICAgICAgaWYgKG10aW1lY21wbG9fdXAgfCBtdGltZWNtcGhpX3VwKSBiZWdpbgotICAgICAgICAgICAgICAgIHRpbWVyX2lycSAgIDw9IHRpbWVfY21wX2ZsYWc7Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kCi0gICAgZW5kCi1lbmQKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBUaW1lciBkaXZpZGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWFzc2lnbiB0aW1lY2xrX2NudF9lbiAgID0gKH50aW1lcl9jbGtzcmNfcnRjID8gMSdiMSA6IHJ0Y19leHRfcHVsc2UpICYgdGltZXJfZW47Ci0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIHRpbWVjbGtfY250IDw9ICcwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGNhc2UgKDEnYjEpCi0gICAgICAgICAgICBkaXZpZGVyX3VwICAgICAgOiB0aW1lY2xrX2NudCAgIDw9IGRtZW1fd2RhdGFbU0NSMV9USU1FUl9ESVZJREVSX1dJRFRILTE6MF07Ci0gICAgICAgICAgICB0aW1lX3Bvc2VkZ2UgICAgOiB0aW1lY2xrX2NudCAgIDw9IHRpbWVyX2RpdjsKLSAgICAgICAgICAgIHRpbWVjbGtfY250X2VuICA6IHRpbWVjbGtfY250ICAgPD0gdGltZWNsa19jbnQgLSAxJ2IxOwotICAgICAgICAgICAgZGVmYXVsdCAgICAgICAgIDogYmVnaW4gZW5kCi0gICAgICAgIGVuZGNhc2UKLSAgICBlbmQKLWVuZAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJUQyBzeW5jaHJvbml6YXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotYXNzaWduIHJ0Y19leHRfcHVsc2UgICAgPSBydGNfc3luY1szXSBeIHJ0Y19zeW5jWzJdOwotCi1hbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIHJ0Y19jbGspIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgcnRjX3N5bmNbMF0gPD0gMSdiMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICBpZiAodGltZXJfY2xrc3JjX3J0YykgYmVnaW4KLSAgICAgICAgICAgIHJ0Y19zeW5jWzBdIDw9IH5ydGNfc3luY1swXTsKLSAgICAgICAgZW5kCi0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgcnRjX3N5bmNbMzoxXSAgIDw9ICcwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGlmICh0aW1lcl9jbGtzcmNfcnRjKSBiZWdpbgotICAgICAgICAgICAgcnRjX3N5bmNbMzoxXSAgIDw9IHJ0Y19zeW5jWzI6MF07Ci0gICAgICAgIGVuZAotICAgIGVuZAotZW5kCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTWVtb3J5IGludGVyZmFjZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW1fY21kX2ZmOwotbG9naWMgW1NDUjFfVElNRVJfQUREUl9XSURUSC0xOjBdICAgZG1lbV9hZGRyX2ZmOwotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICBkbWVtX3JlcV92YWxpZCA8PSAnMDsKLSAgICAgICBkbWVtX3JlcV9hY2sgIDw9ICcwOwotICAgICAgIGRtZW1fY21kX2ZmICA8PSAnMDsKLSAgICAgICBkbWVtX2FkZHJfZmYgPD0gJzA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICBkbWVtX3JlcV92YWxpZCA8PSAgKGRtZW1fcmVxKSAmJiAoZG1lbV9yZXFfYWNrID09IDApICYmICAoZG1lbV93aWR0aCA9PSBTQ1IxX01FTV9XSURUSF9XT1JEKSAmICh+fGRtZW1fYWRkclsxOjBdKSAmCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChkbWVtX2FkZHJbU0NSMV9USU1FUl9BRERSX1dJRFRILTE6Ml0gPD0gU0NSMV9USU1FUl9NVElNRUNNUEhJW1NDUjFfVElNRVJfQUREUl9XSURUSC0xOjJdKTsKLSAgICAgICBkbWVtX3JlcV9hY2sgICA8PSBkbWVtX3JlcSAmIChkbWVtX3JlcV9hY2sgPT0wKTsKLSAgICAgICBkbWVtX2NtZF9mZiAgICA8PSBkbWVtX2NtZDsKLSAgICAgICBkbWVtX2FkZHJfZmYgICA8PSBkbWVtX2FkZHJbU0NSMV9USU1FUl9BRERSX1dJRFRILTE6MF07Ci0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgZG1lbV9yZXNwICAgPD0gU0NSMV9NRU1fUkVTUF9OT1RSRFk7Ci0gICAgICAgIGRtZW1fcmRhdGEgIDw9ICcwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGlmIChkbWVtX3JlcV92YWxpZCkgYmVnaW4KLSAgICAgICAgICAgICAgICBkbWVtX3Jlc3AgICA8PSBTQ1IxX01FTV9SRVNQX1JEWV9PSzsKLSAgICAgICAgICAgICAgICBpZiAoZG1lbV9jbWRfZmYgPT0gU0NSMV9NRU1fQ01EX1JEKSBiZWdpbgotICAgICAgICAgICAgICAgICAgICBjYXNlIChkbWVtX2FkZHJfZmYpCi0gICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX1RJTUVSX0NPTlRST0wgICAgICA6IGRtZW1fcmRhdGEgICAgPD0gYFNDUjFfRE1FTV9EV0lEVEgnKHt0aW1lcl9jbGtzcmNfcnRjLCB0aW1lcl9lbn0pOwotICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9USU1FUl9ESVZJREVSICAgICAgOiBkbWVtX3JkYXRhICAgIDw9IGBTQ1IxX0RNRU1fRFdJRFRIJyh0aW1lcl9kaXYpOwotICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9USU1FUl9NVElNRUxPICAgICAgOiBkbWVtX3JkYXRhICAgIDw9IG10aW1lX3JlZ1szMTowXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfVElNRVJfTVRJTUVISSAgICAgIDogZG1lbV9yZGF0YSAgICA8PSBtdGltZV9yZWdbNjM6MzJdOwotICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9USU1FUl9NVElNRUNNUExPICAgOiBkbWVtX3JkYXRhICAgIDw9IG10aW1lY21wX3JlZ1szMTowXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfVElNRVJfTVRJTUVDTVBISSAgIDogZG1lbV9yZGF0YSAgICA8PSBtdGltZWNtcF9yZWdbNjM6MzJdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICAgICAgOiBiZWdpbiBlbmQKLSAgICAgICAgICAgICAgICAgICAgZW5kY2FzZQotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICAgICAgZG1lbV9yZXNwICAgPD0gU0NSMV9NRU1fUkVTUF9OT1RSRFk7Ci0gICAgICAgICAgICBkbWVtX3JkYXRhICA8PSAnMDsKLSAgICAgICAgZW5kCi0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBjb250cm9sX3VwICAgICAgPSAxJ2IwOwotICAgIGRpdmlkZXJfdXAgICAgICA9IDEnYjA7Ci0gICAgbXRpbWVsb191cCAgICAgID0gMSdiMDsKLSAgICBtdGltZWhpX3VwICAgICAgPSAxJ2IwOwotICAgIG10aW1lY21wbG9fdXAgICA9IDEnYjA7Ci0gICAgbXRpbWVjbXBoaV91cCAgID0gMSdiMDsKLSAgICBpZiAoZG1lbV9yZXFfdmFsaWQgJiAoZG1lbV9jbWRfZmYgPT0gU0NSMV9NRU1fQ01EX1dSKSkgYmVnaW4KLSAgICAgICAgY2FzZSAoZG1lbV9hZGRyX2ZmKQotICAgICAgICAgICAgU0NSMV9USU1FUl9DT05UUk9MICAgICAgOiBjb250cm9sX3VwICAgID0gMSdiMTsKLSAgICAgICAgICAgIFNDUjFfVElNRVJfRElWSURFUiAgICAgIDogZGl2aWRlcl91cCAgICA9IDEnYjE7Ci0gICAgICAgICAgICBTQ1IxX1RJTUVSX01USU1FTE8gICAgICA6IG10aW1lbG9fdXAgICAgPSAxJ2IxOwotICAgICAgICAgICAgU0NSMV9USU1FUl9NVElNRUhJICAgICAgOiBtdGltZWhpX3VwICAgID0gMSdiMTsKLSAgICAgICAgICAgIFNDUjFfVElNRVJfTVRJTUVDTVBMTyAgIDogbXRpbWVjbXBsb191cCA9IDEnYjE7Ci0gICAgICAgICAgICBTQ1IxX1RJTUVSX01USU1FQ01QSEkgICA6IG10aW1lY21waGlfdXAgPSAxJ2IxOwotICAgICAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICAgICAgOiBiZWdpbiBlbmQKLSAgICAgICAgZW5kY2FzZQotICAgIGVuZAotZW5kCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gVGltZXIgaW50ZXJmYWNlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWFzc2lnbiB0aW1lcl92YWwgICAgPSBtdGltZV9yZWc7Ci0KLWVuZG1vZHVsZSA6IHNjcjFfdGltZXIKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy90b3Avc2NyMV90b3BfYWhiLnN2IGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL3RvcC9zY3IxX3RvcF9haGIuc3YKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4NTYxMTguLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL3RvcC9zY3IxX3RvcF9haGIuc3YKKysrIC9kZXYvbnVsbApAQCAtMSw1MjkgKzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiBTeW50YWNvcmUgTExDIMKpIDIwMTYtMjAyMQotLy8gCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAotLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IFN5bnRhY29yZSBMTEMKLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8gQGZpbGUgICAgICAgPHNjcjFfdG9wX2FoYi5zdj4KLS8vLyBAYnJpZWYgICAgICBTQ1IxIEFIQiB0b3AKLS8vLwotCi1gaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKLWBpbmNsdWRlICJzY3IxX21lbWlmLnN2aCIKLWBpbmNsdWRlICJzY3IxX2FoYi5zdmgiCi1gaWZkZWYgU0NSMV9JUElDX0VOCi1gaW5jbHVkZSAic2NyMV9pcGljLnN2aCIKLWBlbmRpZiAvLyBTQ1IxX0lQSUNfRU4KLQotYGlmZGVmIFNDUjFfVENNX0VOCi0gYGRlZmluZSBTQ1IxX0lNRU1fUk9VVEVSX0VOCi1gZW5kaWYgLy8gU0NSMV9UQ01fRU4KLQotbW9kdWxlIHNjcjFfdG9wX2FoYiAoCi0gICAgLy8gQ29udHJvbAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB3cnVwX3JzdF9uLCAgICAgICAgICAgIC8vIFBvd2VyLVVwIFJlc2V0Ci0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnN0X24sICAgICAgICAgICAgICAgICAgLy8gUmVndWxhciBSZXNldCBzaWduYWwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHVfcnN0X24sICAgICAgICAgICAgICAvLyBDUFUgUmVzZXQgKENvcmUgUmVzZXQpCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9tb2RlLCAgICAgICAgICAgICAgLy8gVGVzdCBtb2RlCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9yc3RfbiwgICAgICAgICAgICAgLy8gVGVzdCBtb2RlJ3MgcmVzZXQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGssICAgICAgICAgICAgICAgICAgICAvLyBTeXN0ZW0gY2xvY2sKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydGNfY2xrLCAgICAgICAgICAgICAgICAvLyBSZWFsLXRpbWUgY2xvY2sKLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c19yc3Rfbl9vLCAgICAgICAgICAgIC8vIEV4dGVybmFsIFN5c3RlbSBSZXNldCBvdXRwdXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIChmb3IgdGhlIHByb2Nlc3NvciBjbHVzdGVyJ3MgY29tcG9uZW50cyBvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIGV4dGVybmFsIFNPQyAoY291bGQgYmUgdXNlZnVsIGluIHNtYWxsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgU0NSLWNvcmUtY2VudHJpYyBTT0NzKSkKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNfcmRjX3FsZnlfbywgICAgICAgICAvLyBTeXN0ZW0tdG8tRXh0ZXJuYWwgU09DIFJlc2V0IERvbWFpbiBDcm9zc2luZyBRdWFsaWZpZXIKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi0gICAgLy8gRnVzZXMKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICBmdXNlX21oYXJ0aWQsICAgICAgICAgICAvLyBIYXJ0IElECi1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICBpbnB1dCAgIGxvZ2ljIFszMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdXNlX2lkY29kZSwgICAgICAgICAgICAvLyBUQVBDIElEQ09ERQotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KLSAgICAvLyBJUlEKLWBpZmRlZiBTQ1IxX0lQSUNfRU4KLSAgICBpbnB1dCAgIGxvZ2ljIFtTQ1IxX0lSUV9MSU5FU19OVU0tMTowXSAgICAgICAgICBpcnFfbGluZXMsICAgICAgICAgICAgICAvLyBJUlEgbGluZXMgdG8gSVBJQwotYGVsc2UgLy8gU0NSMV9JUElDX0VOCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0X2lycSwgICAgICAgICAgICAgICAgLy8gRXh0ZXJuYWwgSVJRIGlucHV0Ci1gZW5kaWYgLy8gU0NSMV9JUElDX0VOCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29mdF9pcnEsICAgICAgICAgICAgICAgLy8gU29mdHdhcmUgSVJRIGlucHV0Ci0KLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgIC8vIC0tIEpUQUcgSS9GCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJzdF9uLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjaywKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXMsCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRpLAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkbywKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZG9fZW4sCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotICAgIC8vIEluc3RydWN0aW9uIE1lbW9yeSBJbnRlcmZhY2UKLSAgICBvdXRwdXQgIGxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWVtX2hwcm90LAotICAgIG91dHB1dCAgbG9naWMgWzI6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW1faGJ1cnN0LAotICAgIG91dHB1dCAgbG9naWMgWzI6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW1faHNpemUsCi0gICAgb3V0cHV0ICBsb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1lbV9odHJhbnMsCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1lbV9obWFzdGxvY2ssCi0gICAgb3V0cHV0ICBsb2dpYyBbU0NSMV9BSEJfV0lEVEgtMTowXSAgICAgICAgICAgICAgaW1lbV9oYWRkciwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWVtX2hyZWFkeSwKLSAgICBpbnB1dCAgIGxvZ2ljIFtTQ1IxX0FIQl9XSURUSC0xOjBdICAgICAgICAgICAgICBpbWVtX2hyZGF0YSwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWVtX2hyZXNwLAotCi0gICAgLy8gRGF0YSBNZW1vcnkgSW50ZXJmYWNlCi0gICAgb3V0cHV0ICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1lbV9ocHJvdCwKLSAgICBvdXRwdXQgIGxvZ2ljIFsyOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWVtX2hidXJzdCwKLSAgICBvdXRwdXQgIGxvZ2ljIFsyOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWVtX2hzaXplLAotICAgIG91dHB1dCAgbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW1faHRyYW5zLAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW1faG1hc3Rsb2NrLAotICAgIG91dHB1dCAgbG9naWMgW1NDUjFfQUhCX1dJRFRILTE6MF0gICAgICAgICAgICAgIGRtZW1faGFkZHIsCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1lbV9od3JpdGUsCi0gICAgb3V0cHV0ICBsb2dpYyBbU0NSMV9BSEJfV0lEVEgtMTowXSAgICAgICAgICAgICAgZG1lbV9od2RhdGEsCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1lbV9ocmVhZHksCi0gICAgaW5wdXQgICBsb2dpYyBbU0NSMV9BSEJfV0lEVEgtMTowXSAgICAgICAgICAgICAgZG1lbV9ocmRhdGEsCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1lbV9ocmVzcAotKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCBwYXJhbWV0ZXJzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWxvY2FscGFyYW0gaW50IHVuc2lnbmVkIFNDUjFfQ0xVU1RFUl9UT1BfUlNUX1NZTkNfU1RBR0VTX05VTSAgICAgICAgICAgID0gMjsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCBzaWduYWwgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUmVzZXQgbG9naWMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwd3J1cF9yc3Rfbl9zeW5jOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uX3N5bmM7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1X3JzdF9uX3N5bmM7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9yc3Rfbl9sb2NhbDsKLWBpZmRlZiBTQ1IxX0RCR19FTgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNfdHJzdF9uOwotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KLS8vIEluc3RydWN0aW9uIG1lbW9yeSBpbnRlcmZhY2UgZnJvbSBjb3JlIHRvIHJvdXRlcgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfaW1lbV9yZXFfYWNrOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfaW1lbV9yZXE7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9pbWVtX2NtZDsKLWxvZ2ljIFtgU0NSMV9JTUVNX0FXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2ltZW1fYWRkcjsKLWxvZ2ljIFtgU0NSMV9JTUVNX0RXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2ltZW1fcmRhdGE7Ci1sb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9pbWVtX3Jlc3A7Ci0KLS8vIERhdGEgbWVtb3J5IGludGVyZmFjZSBmcm9tIGNvcmUgdG8gcm91dGVyCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9kbWVtX3JlcV9hY2s7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9kbWVtX3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2RtZW1fY21kOwotbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfZG1lbV93aWR0aDsKLWxvZ2ljIFtgU0NSMV9ETUVNX0FXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2RtZW1fYWRkcjsKLWxvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2RtZW1fd2RhdGE7Ci1sb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgY29yZV9kbWVtX3JkYXRhOwotbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfZG1lbV9yZXNwOwotCi0vLyBJbnN0cnVjdGlvbiBtZW1vcnkgaW50ZXJmYWNlIGZyb20gcm91dGVyIHRvIEFIQiBicmlkZ2UKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaGJfaW1lbV9yZXFfYWNrOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFoYl9pbWVtX3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaGJfaW1lbV9jbWQ7Ci1sb2dpYyBbYFNDUjFfSU1FTV9BV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgYWhiX2ltZW1fYWRkcjsKLWxvZ2ljIFtgU0NSMV9JTUVNX0RXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICBhaGJfaW1lbV9yZGF0YTsKLWxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaGJfaW1lbV9yZXNwOwotCi0vLyBEYXRhIG1lbW9yeSBpbnRlcmZhY2UgZnJvbSByb3V0ZXIgdG8gQUhCIGJyaWRnZQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFoYl9kbWVtX3JlcV9hY2s7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWhiX2RtZW1fcmVxOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFoYl9kbWVtX2NtZDsKLWxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaGJfZG1lbV93aWR0aDsKLWxvZ2ljIFtgU0NSMV9ETUVNX0FXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICBhaGJfZG1lbV9hZGRyOwotbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIGFoYl9kbWVtX3dkYXRhOwotbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIGFoYl9kbWVtX3JkYXRhOwotbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFoYl9kbWVtX3Jlc3A7Ci0KLWBpZmRlZiBTQ1IxX1RDTV9FTgotLy8gSW5zdHJ1Y3Rpb24gbWVtb3J5IGludGVyZmFjZSBmcm9tIHJvdXRlciB0byBUQ00KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y21faW1lbV9yZXFfYWNrOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjbV9pbWVtX3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y21faW1lbV9jbWQ7Ci1sb2dpYyBbYFNDUjFfSU1FTV9BV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgdGNtX2ltZW1fYWRkcjsKLWxvZ2ljIFtgU0NSMV9JTUVNX0RXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICB0Y21faW1lbV9yZGF0YTsKLWxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y21faW1lbV9yZXNwOwotCi0vLyBEYXRhIG1lbW9yeSBpbnRlcmZhY2UgZnJvbSByb3V0ZXIgdG8gVENNCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNtX2RtZW1fcmVxX2FjazsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y21fZG1lbV9yZXE7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNtX2RtZW1fY21kOwotbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjbV9kbWVtX3dpZHRoOwotbG9naWMgW2BTQ1IxX0RNRU1fQVdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIHRjbV9kbWVtX2FkZHI7Ci1sb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgdGNtX2RtZW1fd2RhdGE7Ci1sb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgdGNtX2RtZW1fcmRhdGE7Ci1sb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNtX2RtZW1fcmVzcDsKLWBlbmRpZiAvLyBTQ1IxX1RDTV9FTgotCi0vLyBEYXRhIG1lbW9yeSBpbnRlcmZhY2UgZnJvbSByb3V0ZXIgdG8gbWVtb3J5LW1hcHBlZCB0aW1lcgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX2RtZW1fcmVxX2FjazsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl9kbWVtX3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl9kbWVtX2NtZDsKLWxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl9kbWVtX3dpZHRoOwotbG9naWMgW2BTQ1IxX0RNRU1fQVdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX2RtZW1fYWRkcjsKLWxvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl9kbWVtX3dkYXRhOwotbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX2RtZW1fcmRhdGE7Ci1sb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfZG1lbV9yZXNwOwotCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfaXJxOwotbG9naWMgWzYzOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX3ZhbDsKLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJlc2V0IGxvZ2ljCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFBvd2VyLVVwIFJlc2V0IHN5bmNocm9uaXplcgotc2NyMV9yZXNldF9zeW5jX2NlbGwgIygKLSAgICAuU1RBR0VTX0FNT1VOVCAgICAgICAoU0NSMV9DTFVTVEVSX1RPUF9SU1RfU1lOQ19TVEFHRVNfTlVNKQotKSBpX3B3cnVwX3JzdG5fcmVzZXRfc3luYyAoCi0gICAgLnJzdF9uICAgICAgICAgIChwd3J1cF9yc3RfbiAgICAgKSwKLSAgICAuY2xrICAgICAgICAgICAgKGNsayAgICAgICAgICAgICApLAotICAgIC50ZXN0X3JzdF9uICAgICAodGVzdF9yc3RfbiAgICAgICksCi0gICAgLnRlc3RfbW9kZSAgICAgICh0ZXN0X21vZGUgICAgICAgKSwKLSAgICAucnN0X25faW4gICAgICAgKDEnYjEgICAgICAgICAgICApLAotICAgIC5yc3Rfbl9vdXQgICAgICAocHdydXBfcnN0X25fc3luYykKLSk7Ci0KLS8vIFJlZ3VsYXIgUmVzZXQgc3luY2hyb25pemVyCi1zY3IxX3Jlc2V0X3N5bmNfY2VsbCAjKAotICAgIC5TVEFHRVNfQU1PVU5UICAgICAgIChTQ1IxX0NMVVNURVJfVE9QX1JTVF9TWU5DX1NUQUdFU19OVU0pCi0pIGlfcnN0bl9yZXNldF9zeW5jICgKLSAgICAucnN0X24gICAgICAgICAgKHB3cnVwX3JzdF9uICAgICApLAotICAgIC5jbGsgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICksCi0gICAgLnRlc3RfcnN0X24gICAgICh0ZXN0X3JzdF9uICAgICAgKSwKLSAgICAudGVzdF9tb2RlICAgICAgKHRlc3RfbW9kZSAgICAgICApLAotICAgIC5yc3Rfbl9pbiAgICAgICAocnN0X24gICAgICAgICAgICksCi0gICAgLnJzdF9uX291dCAgICAgIChyc3Rfbl9zeW5jICAgICAgKQotKTsKLQotLy8gQ1BVIFJlc2V0IHN5bmNocm9uaXplcgotc2NyMV9yZXNldF9zeW5jX2NlbGwgIygKLSAgICAuU1RBR0VTX0FNT1VOVCAgICAgICAoU0NSMV9DTFVTVEVSX1RPUF9SU1RfU1lOQ19TVEFHRVNfTlVNKQotKSBpX2NwdV9yc3RuX3Jlc2V0X3N5bmMgKAotICAgIC5yc3RfbiAgICAgICAgICAocHdydXBfcnN0X24gICAgICksCi0gICAgLmNsayAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgKSwKLSAgICAudGVzdF9yc3RfbiAgICAgKHRlc3RfcnN0X24gICAgICApLAotICAgIC50ZXN0X21vZGUgICAgICAodGVzdF9tb2RlICAgICAgICksCi0gICAgLnJzdF9uX2luICAgICAgIChjcHVfcnN0X24gICAgICAgKSwKLSAgICAucnN0X25fb3V0ICAgICAgKGNwdV9yc3Rfbl9zeW5jICApCi0pOwotCi1gaWZkZWYgU0NSMV9EQkdfRU4KLS8vIFRBUEMgUmVzZXQKLXNjcjFfcmVzZXRfYW5kMl9jZWxsIGlfdGFwY19yc3RuX2FuZDJfY2VsbCAoCi0gICAgLnJzdF9uX2luICAgICAgICh7dHJzdF9uLCBwd3J1cF9yc3Rfbn0pLAotICAgIC50ZXN0X3JzdF9uICAgICAodGVzdF9yc3RfbiAgICAgICksCi0gICAgLnRlc3RfbW9kZSAgICAgICh0ZXN0X21vZGUgICAgICAgKSwKLSAgICAucnN0X25fb3V0ICAgICAgKHRhcGNfdHJzdF9uICAgICApCi0pOwotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gU0NSMSBjb3JlIGluc3RhbmNlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXNjcjFfY29yZV90b3AgaV9jb3JlX3RvcCAoCi0gICAgLy8gQ29tbW9uCi0gICAgLnB3cnVwX3JzdF9uICAgICAgICAgICAgICAgIChwd3J1cF9yc3Rfbl9zeW5jICksCi0gICAgLnJzdF9uICAgICAgICAgICAgICAgICAgICAgIChyc3Rfbl9zeW5jICAgICAgICksCi0gICAgLmNwdV9yc3RfbiAgICAgICAgICAgICAgICAgIChjcHVfcnN0X25fc3luYyAgICksCi0gICAgLnRlc3RfbW9kZSAgICAgICAgICAgICAgICAgICh0ZXN0X21vZGUgICAgICAgICksCi0gICAgLnRlc3RfcnN0X24gICAgICAgICAgICAgICAgICh0ZXN0X3JzdF9uICAgICAgICksCi0gICAgLmNsayAgICAgICAgICAgICAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICksCi0gICAgLmNvcmVfcnN0X25fbyAgICAgICAgICAgICAgIChjb3JlX3JzdF9uX2xvY2FsICksCi0gICAgLmNvcmVfcmRjX3FsZnlfbyAgICAgICAgICAgICggICAgICAgICAgICAgICAgICksCi1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICAuc3lzX3JzdF9uX28gICAgICAgICAgICAgICAgKHN5c19yc3Rfbl9vICAgICAgKSwKLSAgICAuc3lzX3JkY19xbGZ5X28gICAgICAgICAgICAgKHN5c19yZGNfcWxmeV9vICAgKSwKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi0gICAgLy8gRnVzZXMKLSAgICAuY29yZV9mdXNlX21oYXJ0aWRfaSAgICAgICAgKGZ1c2VfbWhhcnRpZCAgICAgKSwKLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgIC50YXBjX2Z1c2VfaWRjb2RlX2kgICAgICAgICAoZnVzZV9pZGNvZGUgICAgICApLAotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KLSAgICAvLyBJUlEKLWBpZmRlZiBTQ1IxX0lQSUNfRU4KLSAgICAuY29yZV9pcnFfbGluZXNfaSAgICAgICAgICAgKGlycV9saW5lcyAgICAgICAgKSwKLWBlbHNlIC8vIFNDUjFfSVBJQ19FTgotICAgIC5jb3JlX2lycV9leHRfaSAgICAgICAgICAgICAoZXh0X2lycSAgICAgICAgICApLAotYGVuZGlmIC8vIFNDUjFfSVBJQ19FTgotICAgIC5jb3JlX2lycV9zb2Z0X2kgICAgICAgICAgICAoc29mdF9pcnEgICAgICAgICApLAotICAgIC5jb3JlX2lycV9tdGltZXJfaSAgICAgICAgICAodGltZXJfaXJxICAgICAgICApLAotCi0gICAgLy8gTWVtb3J5LW1hcHBlZCBleHRlcm5hbCB0aW1lcgotICAgIC5jb3JlX210aW1lcl92YWxfaSAgICAgICAgICAodGltZXJfdmFsICAgICAgICApLAotCi1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICAvLyBEZWJ1ZyBpbnRlcmZhY2UKLSAgICAudGFwY190cnN0X24gICAgICAgICAgICAgICAgKHRhcGNfdHJzdF9uICAgICAgKSwKLSAgICAudGFwY190Y2sgICAgICAgICAgICAgICAgICAgKHRjayAgICAgICAgICAgICAgKSwKLSAgICAudGFwY190bXMgICAgICAgICAgICAgICAgICAgKHRtcyAgICAgICAgICAgICAgKSwKLSAgICAudGFwY190ZGkgICAgICAgICAgICAgICAgICAgKHRkaSAgICAgICAgICAgICAgKSwKLSAgICAudGFwY190ZG8gICAgICAgICAgICAgICAgICAgKHRkbyAgICAgICAgICAgICAgKSwKLSAgICAudGFwY190ZG9fZW4gICAgICAgICAgICAgICAgKHRkb19lbiAgICAgICAgICAgKSwKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi0gICAgLy8gSW5zdHJ1Y3Rpb24gbWVtb3J5IGludGVyZmFjZQotICAgIC5pbWVtMmNvcmVfcmVxX2Fja19pICAgICAgICAoY29yZV9pbWVtX3JlcV9hY2spLAotICAgIC5jb3JlMmltZW1fcmVxX28gICAgICAgICAgICAoY29yZV9pbWVtX3JlcSAgICApLAotICAgIC5jb3JlMmltZW1fY21kX28gICAgICAgICAgICAoY29yZV9pbWVtX2NtZCAgICApLAotICAgIC5jb3JlMmltZW1fYWRkcl9vICAgICAgICAgICAoY29yZV9pbWVtX2FkZHIgICApLAotICAgIC5pbWVtMmNvcmVfcmRhdGFfaSAgICAgICAgICAoY29yZV9pbWVtX3JkYXRhICApLAotICAgIC5pbWVtMmNvcmVfcmVzcF9pICAgICAgICAgICAoY29yZV9pbWVtX3Jlc3AgICApLAotCi0gICAgLy8gRGF0YSBtZW1vcnkgaW50ZXJmYWNlCi0gICAgLmRtZW0yY29yZV9yZXFfYWNrX2kgICAgICAgIChjb3JlX2RtZW1fcmVxX2FjayksCi0gICAgLmNvcmUyZG1lbV9yZXFfbyAgICAgICAgICAgIChjb3JlX2RtZW1fcmVxICAgICksCi0gICAgLmNvcmUyZG1lbV9jbWRfbyAgICAgICAgICAgIChjb3JlX2RtZW1fY21kICAgICksCi0gICAgLmNvcmUyZG1lbV93aWR0aF9vICAgICAgICAgIChjb3JlX2RtZW1fd2lkdGggICksCi0gICAgLmNvcmUyZG1lbV9hZGRyX28gICAgICAgICAgIChjb3JlX2RtZW1fYWRkciAgICksCi0gICAgLmNvcmUyZG1lbV93ZGF0YV9vICAgICAgICAgIChjb3JlX2RtZW1fd2RhdGEgICksCi0gICAgLmRtZW0yY29yZV9yZGF0YV9pICAgICAgICAgIChjb3JlX2RtZW1fcmRhdGEgICksCi0gICAgLmRtZW0yY29yZV9yZXNwX2kgICAgICAgICAgIChjb3JlX2RtZW1fcmVzcCAgICkKLSk7Ci0KLQotYGlmZGVmIFNDUjFfVENNX0VOCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFRDTSBpbnN0YW5jZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zY3IxX3RjbSAjKAotICAgIC5TQ1IxX1RDTV9TSVpFICAoYFNDUjFfRE1FTV9BV0lEVEgnKH5TQ1IxX1RDTV9BRERSX01BU0sgKyAxJ2IxKSkKLSkgaV90Y20gKAotICAgIC5jbGsgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICksCi0gICAgLnJzdF9uICAgICAgICAgIChjb3JlX3JzdF9uX2xvY2FsKSwKLQotICAgIC8vIEluc3RydWN0aW9uIGludGVyZmFjZSB0byBUQ00KLSAgICAuaW1lbV9yZXFfYWNrICAgKHRjbV9pbWVtX3JlcV9hY2spLAotICAgIC5pbWVtX3JlcSAgICAgICAodGNtX2ltZW1fcmVxICAgICksCi0gICAgLmltZW1fYWRkciAgICAgICh0Y21faW1lbV9hZGRyICAgKSwKLSAgICAuaW1lbV9yZGF0YSAgICAgKHRjbV9pbWVtX3JkYXRhICApLAotICAgIC5pbWVtX3Jlc3AgICAgICAodGNtX2ltZW1fcmVzcCAgICksCi0KLSAgICAvLyBEYXRhIGludGVyZmFjZSB0byBUQ00KLSAgICAuZG1lbV9yZXFfYWNrICAgKHRjbV9kbWVtX3JlcV9hY2spLAotICAgIC5kbWVtX3JlcSAgICAgICAodGNtX2RtZW1fcmVxICAgICksCi0gICAgLmRtZW1fY21kICAgICAgICh0Y21fZG1lbV9jbWQgICAgKSwKLSAgICAuZG1lbV93aWR0aCAgICAgKHRjbV9kbWVtX3dpZHRoICApLAotICAgIC5kbWVtX2FkZHIgICAgICAodGNtX2RtZW1fYWRkciAgICksCi0gICAgLmRtZW1fd2RhdGEgICAgICh0Y21fZG1lbV93ZGF0YSAgKSwKLSAgICAuZG1lbV9yZGF0YSAgICAgKHRjbV9kbWVtX3JkYXRhICApLAotICAgIC5kbWVtX3Jlc3AgICAgICAodGNtX2RtZW1fcmVzcCAgICkKLSk7Ci1gZW5kaWYgLy8gU0NSMV9UQ01fRU4KLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIE1lbW9yeS1tYXBwZWQgdGltZXIgaW5zdGFuY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc2NyMV90aW1lciBpX3RpbWVyICgKLSAgICAvLyBDb21tb24KLSAgICAucnN0X24gICAgICAgICAgKGNvcmVfcnN0X25fbG9jYWwgICksCi0gICAgLmNsayAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICApLAotICAgIC5ydGNfY2xrICAgICAgICAocnRjX2NsayAgICAgICAgICAgKSwKLQotICAgIC8vIE1lbW9yeSBpbnRlcmZhY2UKLSAgICAuZG1lbV9yZXEgICAgICAgKHRpbWVyX2RtZW1fcmVxICAgICksCi0gICAgLmRtZW1fY21kICAgICAgICh0aW1lcl9kbWVtX2NtZCAgICApLAotICAgIC5kbWVtX3dpZHRoICAgICAodGltZXJfZG1lbV93aWR0aCAgKSwKLSAgICAuZG1lbV9hZGRyICAgICAgKHRpbWVyX2RtZW1fYWRkciAgICksCi0gICAgLmRtZW1fd2RhdGEgICAgICh0aW1lcl9kbWVtX3dkYXRhICApLAotICAgIC5kbWVtX3JlcV9hY2sgICAodGltZXJfZG1lbV9yZXFfYWNrKSwKLSAgICAuZG1lbV9yZGF0YSAgICAgKHRpbWVyX2RtZW1fcmRhdGEgICksCi0gICAgLmRtZW1fcmVzcCAgICAgICh0aW1lcl9kbWVtX3Jlc3AgICApLAotCi0gICAgLy8gVGltZXIgaW50ZXJmYWNlCi0gICAgLnRpbWVyX3ZhbCAgICAgICh0aW1lcl92YWwgICAgICAgICApLAotICAgIC50aW1lcl9pcnEgICAgICAodGltZXJfaXJxICAgICAgICAgKQotKTsKLQotCi1gaWZkZWYgU0NSMV9JTUVNX1JPVVRFUl9FTgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBJbnN0cnVjdGlvbiBtZW1vcnkgcm91dGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXNjcjFfaW1lbV9yb3V0ZXIgIygKLSBgaWZkZWYgU0NSMV9UQ01fRU4KLSAgICAuU0NSMV9BRERSX01BU0sgICAgIChTQ1IxX1RDTV9BRERSX01BU0spLAotICAgIC5TQ1IxX0FERFJfUEFUVEVSTiAgKFNDUjFfVENNX0FERFJfUEFUVEVSTikKLSBgZW5kaWYgLy8gU0NSMV9UQ01fRU4KLSkgaV9pbWVtX3JvdXRlciAoCi0gICAgLnJzdF9uICAgICAgICAgIChjb3JlX3JzdF9uX2xvY2FsICksCi0gICAgLmNsayAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICksCi0gICAgLy8gSW50ZXJmYWNlIHRvIGNvcmUKLSAgICAuaW1lbV9yZXFfYWNrICAgKGNvcmVfaW1lbV9yZXFfYWNrKSwKLSAgICAuaW1lbV9yZXEgICAgICAgKGNvcmVfaW1lbV9yZXEgICAgKSwKLSAgICAuaW1lbV9jbWQgICAgICAgKGNvcmVfaW1lbV9jbWQgICAgKSwKLSAgICAuaW1lbV9hZGRyICAgICAgKGNvcmVfaW1lbV9hZGRyICAgKSwKLSAgICAuaW1lbV9yZGF0YSAgICAgKGNvcmVfaW1lbV9yZGF0YSAgKSwKLSAgICAuaW1lbV9yZXNwICAgICAgKGNvcmVfaW1lbV9yZXNwICAgKSwKLSAgICAvLyBJbnRlcmZhY2UgdG8gQUhCIGJyaWRnZQotICAgIC5wb3J0MF9yZXFfYWNrICAoYWhiX2ltZW1fcmVxX2FjayApLAotICAgIC5wb3J0MF9yZXEgICAgICAoYWhiX2ltZW1fcmVxICAgICApLAotICAgIC5wb3J0MF9jbWQgICAgICAoYWhiX2ltZW1fY21kICAgICApLAotICAgIC5wb3J0MF9hZGRyICAgICAoYWhiX2ltZW1fYWRkciAgICApLAotICAgIC5wb3J0MF9yZGF0YSAgICAoYWhiX2ltZW1fcmRhdGEgICApLAotICAgIC5wb3J0MF9yZXNwICAgICAoYWhiX2ltZW1fcmVzcCAgICApLAotIGBpZmRlZiBTQ1IxX1RDTV9FTgotICAgIC8vIEludGVyZmFjZSB0byBUQ00KLSAgICAucG9ydDFfcmVxX2FjayAgKHRjbV9pbWVtX3JlcV9hY2sgKSwKLSAgICAucG9ydDFfcmVxICAgICAgKHRjbV9pbWVtX3JlcSAgICAgKSwKLSAgICAucG9ydDFfY21kICAgICAgKHRjbV9pbWVtX2NtZCAgICAgKSwKLSAgICAucG9ydDFfYWRkciAgICAgKHRjbV9pbWVtX2FkZHIgICAgKSwKLSAgICAucG9ydDFfcmRhdGEgICAgKHRjbV9pbWVtX3JkYXRhICAgKSwKLSAgICAucG9ydDFfcmVzcCAgICAgKHRjbV9pbWVtX3Jlc3AgICAgKQotIGBlbmRpZiAvLyBTQ1IxX1RDTV9FTgotKTsKLQotYGVsc2UgLy8gU0NSMV9JTUVNX1JPVVRFUl9FTgotCi1hc3NpZ24gYWhiX2ltZW1fcmVxICAgICAgICAgPSBjb3JlX2ltZW1fcmVxOwotYXNzaWduIGFoYl9pbWVtX2NtZCAgICAgICAgID0gY29yZV9pbWVtX2NtZDsKLWFzc2lnbiBhaGJfaW1lbV9hZGRyICAgICAgICA9IGNvcmVfaW1lbV9hZGRyOwotYXNzaWduIGNvcmVfaW1lbV9yZXFfYWNrICAgID0gYWhiX2ltZW1fcmVxX2FjazsKLWFzc2lnbiBjb3JlX2ltZW1fcmVzcCAgICAgICA9IGFoYl9pbWVtX3Jlc3A7Ci1hc3NpZ24gY29yZV9pbWVtX3JkYXRhICAgICAgPSBhaGJfaW1lbV9yZGF0YTsKLQotYGVuZGlmIC8vIFNDUjFfSU1FTV9ST1VURVJfRU4KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBEYXRhIG1lbW9yeSByb3V0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc2NyMV9kbWVtX3JvdXRlciAjKAotCi1gaWZkZWYgU0NSMV9UQ01fRU4KLSAgICAuU0NSMV9QT1JUMV9BRERSX01BU0sgICAgICAgKFNDUjFfVENNX0FERFJfTUFTSyksCi0gICAgLlNDUjFfUE9SVDFfQUREUl9QQVRURVJOICAgIChTQ1IxX1RDTV9BRERSX1BBVFRFUk4pLAotYGVsc2UgLy8gU0NSMV9UQ01fRU4KLSAgICAuU0NSMV9QT1JUMV9BRERSX01BU0sgICAgICAgKDMyJ2gwMDAwMDAwMCksCi0gICAgLlNDUjFfUE9SVDFfQUREUl9QQVRURVJOICAgICgzMidoRkZGRkZGRkYpLAotYGVuZGlmIC8vIFNDUjFfVENNX0VOCi0KLSAgICAuU0NSMV9QT1JUMl9BRERSX01BU0sgICAgICAgKFNDUjFfVElNRVJfQUREUl9NQVNLKSwKLSAgICAuU0NSMV9QT1JUMl9BRERSX1BBVFRFUk4gICAgKFNDUjFfVElNRVJfQUREUl9QQVRURVJOKQotCi0pIGlfZG1lbV9yb3V0ZXIgKAotICAgIC5yc3RfbiAgICAgICAgICAoY29yZV9yc3Rfbl9sb2NhbCAgICApLAotICAgIC5jbGsgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICAgICApLAotICAgIC8vIEludGVyZmFjZSB0byBjb3JlCi0gICAgLmRtZW1fcmVxX2FjayAgIChjb3JlX2RtZW1fcmVxX2FjayAgICksCi0gICAgLmRtZW1fcmVxICAgICAgIChjb3JlX2RtZW1fcmVxICAgICAgICksCi0gICAgLmRtZW1fY21kICAgICAgIChjb3JlX2RtZW1fY21kICAgICAgICksCi0gICAgLmRtZW1fd2lkdGggICAgIChjb3JlX2RtZW1fd2lkdGggICAgICksCi0gICAgLmRtZW1fYWRkciAgICAgIChjb3JlX2RtZW1fYWRkciAgICAgICksCi0gICAgLmRtZW1fd2RhdGEgICAgIChjb3JlX2RtZW1fd2RhdGEgICAgICksCi0gICAgLmRtZW1fcmRhdGEgICAgIChjb3JlX2RtZW1fcmRhdGEgICAgICksCi0gICAgLmRtZW1fcmVzcCAgICAgIChjb3JlX2RtZW1fcmVzcCAgICAgICksCi1gaWZkZWYgU0NSMV9UQ01fRU4KLSAgICAvLyBJbnRlcmZhY2UgdG8gVENNCi0gICAgLnBvcnQxX3JlcV9hY2sgICh0Y21fZG1lbV9yZXFfYWNrICAgICksCi0gICAgLnBvcnQxX3JlcSAgICAgICh0Y21fZG1lbV9yZXEgICAgICAgICksCi0gICAgLnBvcnQxX2NtZCAgICAgICh0Y21fZG1lbV9jbWQgICAgICAgICksCi0gICAgLnBvcnQxX3dpZHRoICAgICh0Y21fZG1lbV93aWR0aCAgICAgICksCi0gICAgLnBvcnQxX2FkZHIgICAgICh0Y21fZG1lbV9hZGRyICAgICAgICksCi0gICAgLnBvcnQxX3dkYXRhICAgICh0Y21fZG1lbV93ZGF0YSAgICAgICksCi0gICAgLnBvcnQxX3JkYXRhICAgICh0Y21fZG1lbV9yZGF0YSAgICAgICksCi0gICAgLnBvcnQxX3Jlc3AgICAgICh0Y21fZG1lbV9yZXNwICAgICAgICksCi1gZWxzZSAvLyBTQ1IxX1RDTV9FTgotICAgIC5wb3J0MV9yZXFfYWNrICAoMSdiMCksCi0gICAgLnBvcnQxX3JlcSAgICAgICggICAgICAgICAgICAgICAgICAgICksCi0gICAgLnBvcnQxX2NtZCAgICAgICggICAgICAgICAgICAgICAgICAgICksCi0gICAgLnBvcnQxX3dpZHRoICAgICggICAgICAgICAgICAgICAgICAgICksCi0gICAgLnBvcnQxX2FkZHIgICAgICggICAgICAgICAgICAgICAgICAgICksCi0gICAgLnBvcnQxX3dkYXRhICAgICggICAgICAgICAgICAgICAgICAgICksCi0gICAgLnBvcnQxX3JkYXRhICAgICgnMCAgICAgICAgICAgICAgICAgICksCi0gICAgLnBvcnQxX3Jlc3AgICAgIChTQ1IxX01FTV9SRVNQX1JEWV9FUiksCi1gZW5kaWYgLy8gU0NSMV9UQ01fRU4KLSAgICAvLyBJbnRlcmZhY2UgdG8gbWVtb3J5LW1hcHBlZCB0aW1lcgotICAgIC5wb3J0Ml9yZXFfYWNrICAodGltZXJfZG1lbV9yZXFfYWNrICApLAotICAgIC5wb3J0Ml9yZXEgICAgICAodGltZXJfZG1lbV9yZXEgICAgICApLAotICAgIC5wb3J0Ml9jbWQgICAgICAodGltZXJfZG1lbV9jbWQgICAgICApLAotICAgIC5wb3J0Ml93aWR0aCAgICAodGltZXJfZG1lbV93aWR0aCAgICApLAotICAgIC5wb3J0Ml9hZGRyICAgICAodGltZXJfZG1lbV9hZGRyICAgICApLAotICAgIC5wb3J0Ml93ZGF0YSAgICAodGltZXJfZG1lbV93ZGF0YSAgICApLAotICAgIC5wb3J0Ml9yZGF0YSAgICAodGltZXJfZG1lbV9yZGF0YSAgICApLAotICAgIC5wb3J0Ml9yZXNwICAgICAodGltZXJfZG1lbV9yZXNwICAgICApLAotICAgIC8vIEludGVyZmFjZSB0byBBSEIgYnJpZGdlCi0gICAgLnBvcnQwX3JlcV9hY2sgIChhaGJfZG1lbV9yZXFfYWNrICAgICksCi0gICAgLnBvcnQwX3JlcSAgICAgIChhaGJfZG1lbV9yZXEgICAgICAgICksCi0gICAgLnBvcnQwX2NtZCAgICAgIChhaGJfZG1lbV9jbWQgICAgICAgICksCi0gICAgLnBvcnQwX3dpZHRoICAgIChhaGJfZG1lbV93aWR0aCAgICAgICksCi0gICAgLnBvcnQwX2FkZHIgICAgIChhaGJfZG1lbV9hZGRyICAgICAgICksCi0gICAgLnBvcnQwX3dkYXRhICAgIChhaGJfZG1lbV93ZGF0YSAgICAgICksCi0gICAgLnBvcnQwX3JkYXRhICAgIChhaGJfZG1lbV9yZGF0YSAgICAgICksCi0gICAgLnBvcnQwX3Jlc3AgICAgIChhaGJfZG1lbV9yZXNwICAgICAgICkKLSk7Ci0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBJbnN0cnVjdGlvbiBtZW1vcnkgQUhCIGJyaWRnZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zY3IxX2ltZW1fYWhiIGlfaW1lbV9haGIgKAotICAgIC5yc3RfbiAgICAgICAgICAoY29yZV9yc3Rfbl9sb2NhbCAgICksCi0gICAgLmNsayAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICAgKSwKLSAgICAvLyBJbnRlcmZhY2UgdG8gaW1lbSByb3V0ZXIKLSAgICAuaW1lbV9yZXFfYWNrICAgKGFoYl9pbWVtX3JlcV9hY2sgICApLAotICAgIC5pbWVtX3JlcSAgICAgICAoYWhiX2ltZW1fcmVxICAgICAgICksCi0gICAgLmltZW1fYWRkciAgICAgIChhaGJfaW1lbV9hZGRyICAgICAgKSwKLSAgICAuaW1lbV9yZGF0YSAgICAgKGFoYl9pbWVtX3JkYXRhICAgICApLAotICAgIC5pbWVtX3Jlc3AgICAgICAoYWhiX2ltZW1fcmVzcCAgICAgICksCi0gICAgLy8gQUhCIGludGVyZmFjZQotICAgIC5ocHJvdCAgICAgICAgICAoaW1lbV9ocHJvdCAgICAgICAgICksCi0gICAgLmhidXJzdCAgICAgICAgIChpbWVtX2hidXJzdCAgICAgICAgKSwKLSAgICAuaHNpemUgICAgICAgICAgKGltZW1faHNpemUgICAgICAgICApLAotICAgIC5odHJhbnMgICAgICAgICAoaW1lbV9odHJhbnMgICAgICAgICksCi0gICAgLmhtYXN0bG9jayAgICAgIChpbWVtX2htYXN0bG9jayAgICAgKSwKLSAgICAuaGFkZHIgICAgICAgICAgKGltZW1faGFkZHIgICAgICAgICApLAotICAgIC5ocmVhZHkgICAgICAgICAoaW1lbV9ocmVhZHkgICAgICAgICksCi0gICAgLmhyZGF0YSAgICAgICAgIChpbWVtX2hyZGF0YSAgICAgICAgKSwKLSAgICAuaHJlc3AgICAgICAgICAgKGltZW1faHJlc3AgICAgICAgICApCi0pOwotCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRGF0YSBtZW1vcnkgQUhCIGJyaWRnZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zY3IxX2RtZW1fYWhiIGlfZG1lbV9haGIgKAotICAgIC5yc3RfbiAgICAgICAgICAoY29yZV9yc3Rfbl9sb2NhbCAgICksCi0gICAgLmNsayAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICAgKSwKLSAgICAvLyBJbnRlcmZhY2UgdG8gZG1lbSByb3V0ZXIKLSAgICAuZG1lbV9yZXFfYWNrICAgKGFoYl9kbWVtX3JlcV9hY2sgICApLAotICAgIC5kbWVtX3JlcSAgICAgICAoYWhiX2RtZW1fcmVxICAgICAgICksCi0gICAgLmRtZW1fY21kICAgICAgIChhaGJfZG1lbV9jbWQgICAgICAgKSwKLSAgICAuZG1lbV93aWR0aCAgICAgKGFoYl9kbWVtX3dpZHRoICAgICApLAotICAgIC5kbWVtX2FkZHIgICAgICAoYWhiX2RtZW1fYWRkciAgICAgICksCi0gICAgLmRtZW1fd2RhdGEgICAgIChhaGJfZG1lbV93ZGF0YSAgICAgKSwKLSAgICAuZG1lbV9yZGF0YSAgICAgKGFoYl9kbWVtX3JkYXRhICAgICApLAotICAgIC5kbWVtX3Jlc3AgICAgICAoYWhiX2RtZW1fcmVzcCAgICAgICksCi0gICAgLy8gQUhCIGludGVyZmFjZQotICAgIC5ocHJvdCAgICAgICAgICAoZG1lbV9ocHJvdCAgICAgICAgICksCi0gICAgLmhidXJzdCAgICAgICAgIChkbWVtX2hidXJzdCAgICAgICAgKSwKLSAgICAuaHNpemUgICAgICAgICAgKGRtZW1faHNpemUgICAgICAgICApLAotICAgIC5odHJhbnMgICAgICAgICAoZG1lbV9odHJhbnMgICAgICAgICksCi0gICAgLmhtYXN0bG9jayAgICAgIChkbWVtX2htYXN0bG9jayAgICAgKSwKLSAgICAuaGFkZHIgICAgICAgICAgKGRtZW1faGFkZHIgICAgICAgICApLAotICAgIC5od3JpdGUgICAgICAgICAoZG1lbV9od3JpdGUgICAgICAgICksCi0gICAgLmh3ZGF0YSAgICAgICAgIChkbWVtX2h3ZGF0YSAgICAgICAgKSwKLSAgICAuaHJlYWR5ICAgICAgICAgKGRtZW1faHJlYWR5ICAgICAgICApLAotICAgIC5ocmRhdGEgICAgICAgICAoZG1lbV9ocmRhdGEgICAgICAgICksCi0gICAgLmhyZXNwICAgICAgICAgIChkbWVtX2hyZXNwICAgICAgICAgKQotKTsKLQotZW5kbW9kdWxlIDogc2NyMV90b3BfYWhiCi0KLQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL3RvcC9zY3IxX3RvcF9heGkuc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvdG9wL3NjcjFfdG9wX2F4aS5zdgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdlNDk2Mi4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvdG9wL3NjcjFfdG9wX2F4aS5zdgorKysgL2Rldi9udWxsCkBAIC0xLDcxNyArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIxCi0vLyAKLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0vLyBTUERYLUZpbGVDb250cmlidXRvcjogU3ludGFjb3JlIExMQwotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLyBAZmlsZSAgICAgICA8c2NyMV90b3BfYXhpLnN2PgotLy8vIEBicmllZiAgICAgIFNDUjEgQVhJIHRvcAotLy8vCi0KLWBpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgotYGluY2x1ZGUgInNjcjFfbWVtaWYuc3ZoIgotYGlmZGVmIFNDUjFfSVBJQ19FTgotYGluY2x1ZGUgInNjcjFfaXBpYy5zdmgiCi1gZW5kaWYgLy8gU0NSMV9JUElDX0VOCi0KLWBpZmRlZiBTQ1IxX1RDTV9FTgotIGBkZWZpbmUgU0NSMV9JTUVNX1JPVVRFUl9FTgotYGVuZGlmIC8vIFNDUjFfVENNX0VOCi0KLW1vZHVsZSBzY3IxX3RvcF9heGkgKAotICAgIC8vIENvbnRyb2wKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwd3J1cF9yc3RfbiwgICAgICAgICAgICAvLyBQb3dlci1VcCBSZXNldAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLCAgICAgICAgICAgICAgICAgIC8vIFJlZ3VsYXIgUmVzZXQgc2lnbmFsCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1X3JzdF9uLCAgICAgICAgICAgICAgLy8gQ1BVIFJlc2V0IChDb3JlIFJlc2V0KQotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfbW9kZSwgICAgICAgICAgICAgIC8vIFRlc3QgbW9kZQotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfcnN0X24sICAgICAgICAgICAgIC8vIFRlc3QgbW9kZSdzIHJlc2V0Ci0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrLCAgICAgICAgICAgICAgICAgICAgLy8gU3lzdGVtIGNsb2NrCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRjX2NsaywgICAgICAgICAgICAgICAgLy8gUmVhbC10aW1lIGNsb2NrCi1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNfcnN0X25fbywgICAgICAgICAgICAvLyBFeHRlcm5hbCBTeXN0ZW0gUmVzZXQgb3V0cHV0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAoZm9yIHRoZSBwcm9jZXNzb3IgY2x1c3RlcidzIGNvbXBvbmVudHMgb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICBleHRlcm5hbCBTT0MgKGNvdWxkIGJlIHVzZWZ1bCBpbiBzbWFsbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIFNDUi1jb3JlLWNlbnRyaWMgU09DcykpCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzX3JkY19xbGZ5X28sICAgICAgICAgLy8gU3lzdGVtLXRvLUV4dGVybmFsIFNPQyBSZXNldCBEb21haW4gQ3Jvc3NpbmcgUXVhbGlmaWVyCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotICAgIC8vIEZ1c2VzCi0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgZnVzZV9taGFydGlkLCAgICAgICAgICAgLy8gSGFydCBJRAotYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgaW5wdXQgICBsb2dpYyBbMzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVzZV9pZGNvZGUsICAgICAgICAgICAgLy8gVEFQQyBJRENPREUKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi0gICAgLy8gSVJRCi1gaWZkZWYgU0NSMV9JUElDX0VOCi0gICAgaW5wdXQgICBsb2dpYyBbU0NSMV9JUlFfTElORVNfTlVNLTE6MF0gICAgICAgICAgaXJxX2xpbmVzLCAgICAgICAgICAgICAgLy8gSVJRIGxpbmVzIHRvIElQSUMKLWBlbHNlIC8vIFNDUjFfSVBJQ19FTgotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dF9pcnEsICAgICAgICAgICAgICAgIC8vIEV4dGVybmFsIElSUSBpbnB1dAotYGVuZGlmIC8vIFNDUjFfSVBJQ19FTgotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvZnRfaXJxLCAgICAgICAgICAgICAgIC8vIFNvZnR3YXJlIElSUSBpbnB1dAotCi1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICAvLyAtLSBKVEFHIEkvRgotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyc3RfbiwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y2ssCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1zLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkaSwKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZG8sCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRvX2VuLAotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KLSAgICAvLyBJbnN0cnVjdGlvbiBNZW1vcnkgSW50ZXJmYWNlCi0gICAgb3V0cHV0ICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fYXdpZCwKLSAgICBvdXRwdXQgIGxvZ2ljIFszMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfaW1lbV9hd2FkZHIsCi0gICAgb3V0cHV0ICBsb2dpYyBbNzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fYXdsZW4sCi0gICAgb3V0cHV0ICBsb2dpYyBbMjowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fYXdzaXplLAotICAgIG91dHB1dCAgbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX2F3YnVyc3QsCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fYXdsb2NrLAotICAgIG91dHB1dCAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX2F3Y2FjaGUsCi0gICAgb3V0cHV0ICBsb2dpYyBbMjowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fYXdwcm90LAotICAgIG91dHB1dCAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX2F3cmVnaW9uLAotICAgIG91dHB1dCAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX2F3dXNlciwKLSAgICBvdXRwdXQgIGxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfaW1lbV9hd3FvcywKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfaW1lbV9hd3ZhbGlkLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX2F3cmVhZHksCi0gICAgb3V0cHV0ICBsb2dpYyBbMzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fd2RhdGEsCi0gICAgb3V0cHV0ICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fd3N0cmIsCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fd2xhc3QsCi0gICAgb3V0cHV0ICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fd3VzZXIsCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fd3ZhbGlkLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX3dyZWFkeSwKLSAgICBpbnB1dCAgIGxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfaW1lbV9iaWQsCi0gICAgaW5wdXQgICBsb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fYnJlc3AsCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fYnZhbGlkLAotICAgIGlucHV0ICAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX2J1c2VyLAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX2JyZWFkeSwKLSAgICBvdXRwdXQgIGxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfaW1lbV9hcmlkLAotICAgIG91dHB1dCAgbG9naWMgWzMxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX2FyYWRkciwKLSAgICBvdXRwdXQgIGxvZ2ljIFs3OjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfaW1lbV9hcmxlbiwKLSAgICBvdXRwdXQgIGxvZ2ljIFsyOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfaW1lbV9hcnNpemUsCi0gICAgb3V0cHV0ICBsb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fYXJidXJzdCwKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfaW1lbV9hcmxvY2ssCi0gICAgb3V0cHV0ICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fYXJjYWNoZSwKLSAgICBvdXRwdXQgIGxvZ2ljIFsyOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfaW1lbV9hcnByb3QsCi0gICAgb3V0cHV0ICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fYXJyZWdpb24sCi0gICAgb3V0cHV0ICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fYXJ1c2VyLAotICAgIG91dHB1dCAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX2FycW9zLAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX2FydmFsaWQsCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fYXJyZWFkeSwKLSAgICBpbnB1dCAgIGxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfaW1lbV9yaWQsCi0gICAgaW5wdXQgICBsb2dpYyBbMzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fcmRhdGEsCi0gICAgaW5wdXQgICBsb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fcnJlc3AsCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fcmxhc3QsCi0gICAgaW5wdXQgICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fcnVzZXIsCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fcnZhbGlkLAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX3JyZWFkeSwKLQotICAgIC8vIERhdGEgTWVtb3J5IEludGVyZmFjZQotICAgIG91dHB1dCAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX2F3aWQsCi0gICAgb3V0cHV0ICBsb2dpYyBbMzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2RtZW1fYXdhZGRyLAotICAgIG91dHB1dCAgbG9naWMgWzc6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX2F3bGVuLAotICAgIG91dHB1dCAgbG9naWMgWzI6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX2F3c2l6ZSwKLSAgICBvdXRwdXQgIGxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9hd2J1cnN0LAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX2F3bG9jaywKLSAgICBvdXRwdXQgIGxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9hd2NhY2hlLAotICAgIG91dHB1dCAgbG9naWMgWzI6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX2F3cHJvdCwKLSAgICBvdXRwdXQgIGxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9hd3JlZ2lvbiwKLSAgICBvdXRwdXQgIGxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9hd3VzZXIsCi0gICAgb3V0cHV0ICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2RtZW1fYXdxb3MsCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2RtZW1fYXd2YWxpZCwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9hd3JlYWR5LAotICAgIG91dHB1dCAgbG9naWMgWzMxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX3dkYXRhLAotICAgIG91dHB1dCAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX3dzdHJiLAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX3dsYXN0LAotICAgIG91dHB1dCAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX3d1c2VyLAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX3d2YWxpZCwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV93cmVhZHksCi0gICAgaW5wdXQgICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2RtZW1fYmlkLAotICAgIGlucHV0ICAgbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX2JyZXNwLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX2J2YWxpZCwKLSAgICBpbnB1dCAgIGxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9idXNlciwKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9icmVhZHksCi0gICAgb3V0cHV0ICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2RtZW1fYXJpZCwKLSAgICBvdXRwdXQgIGxvZ2ljIFszMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9hcmFkZHIsCi0gICAgb3V0cHV0ICBsb2dpYyBbNzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2RtZW1fYXJsZW4sCi0gICAgb3V0cHV0ICBsb2dpYyBbMjowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2RtZW1fYXJzaXplLAotICAgIG91dHB1dCAgbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX2FyYnVyc3QsCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2RtZW1fYXJsb2NrLAotICAgIG91dHB1dCAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX2FyY2FjaGUsCi0gICAgb3V0cHV0ICBsb2dpYyBbMjowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2RtZW1fYXJwcm90LAotICAgIG91dHB1dCAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX2FycmVnaW9uLAotICAgIG91dHB1dCAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX2FydXNlciwKLSAgICBvdXRwdXQgIGxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9hcnFvcywKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9hcnZhbGlkLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX2FycmVhZHksCi0gICAgaW5wdXQgICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2RtZW1fcmlkLAotICAgIGlucHV0ICAgbG9naWMgWzMxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX3JkYXRhLAotICAgIGlucHV0ICAgbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX3JyZXNwLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX3JsYXN0LAotICAgIGlucHV0ICAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX3J1c2VyLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX3J2YWxpZCwKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9ycmVhZHkKLSk7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgcGFyYW1ldGVycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1sb2NhbHBhcmFtIGludCB1bnNpZ25lZCBTQ1IxX0NMVVNURVJfVE9QX1JTVF9TWU5DX1NUQUdFU19OVU0gICAgICAgICAgICA9IDI7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgc2lnbmFsIGRlY2xhcmF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJlc2V0IGxvZ2ljCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHdydXBfcnN0X25fc3luYzsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByc3Rfbl9zeW5jOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdV9yc3Rfbl9zeW5jOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfcnN0X25fbG9jYWw7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXhpX3JzdF9uOwotYGlmZGVmIFNDUjFfREJHX0VOCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY190cnN0X247Ci1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotLy8gSW5zdHJ1Y3Rpb24gbWVtb3J5IGludGVyZmFjZSBmcm9tIGNvcmUgdG8gcm91dGVyCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9pbWVtX3JlcV9hY2s7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9pbWVtX3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2ltZW1fY21kOwotbG9naWMgW2BTQ1IxX0lNRU1fQVdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIGNvcmVfaW1lbV9hZGRyOwotbG9naWMgW2BTQ1IxX0lNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIGNvcmVfaW1lbV9yZGF0YTsKLWxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2ltZW1fcmVzcDsKLQotLy8gRGF0YSBtZW1vcnkgaW50ZXJmYWNlIGZyb20gY29yZSB0byByb3V0ZXIKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2RtZW1fcmVxX2FjazsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2RtZW1fcmVxOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfZG1lbV9jbWQ7Ci1sb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9kbWVtX3dpZHRoOwotbG9naWMgW2BTQ1IxX0RNRU1fQVdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIGNvcmVfZG1lbV9hZGRyOwotbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIGNvcmVfZG1lbV93ZGF0YTsKLWxvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2RtZW1fcmRhdGE7Ci1sb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9kbWVtX3Jlc3A7Ci0KLS8vIEluc3RydWN0aW9uIG1lbW9yeSBpbnRlcmZhY2UgZnJvbSByb3V0ZXIgdG8gQVhJIGJyaWRnZQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aV9pbWVtX3JlcV9hY2s7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXhpX2ltZW1fcmVxOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aV9pbWVtX2NtZDsKLWxvZ2ljIFtgU0NSMV9JTUVNX0FXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICBheGlfaW1lbV9hZGRyOwotbG9naWMgW2BTQ1IxX0lNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIGF4aV9pbWVtX3JkYXRhOwotbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aV9pbWVtX3Jlc3A7Ci0KLS8vIERhdGEgbWVtb3J5IGludGVyZmFjZSBmcm9tIHJvdXRlciB0byBBWEkgYnJpZGdlCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXhpX2RtZW1fcmVxX2FjazsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBheGlfZG1lbV9yZXE7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXhpX2RtZW1fY21kOwotbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aV9kbWVtX3dpZHRoOwotbG9naWMgW2BTQ1IxX0RNRU1fQVdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIGF4aV9kbWVtX2FkZHI7Ci1sb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgYXhpX2RtZW1fd2RhdGE7Ci1sb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgYXhpX2RtZW1fcmRhdGE7Ci1sb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXhpX2RtZW1fcmVzcDsKLQotYGlmZGVmIFNDUjFfVENNX0VOCi0vLyBJbnN0cnVjdGlvbiBtZW1vcnkgaW50ZXJmYWNlIGZyb20gcm91dGVyIHRvIFRDTQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjbV9pbWVtX3JlcV9hY2s7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNtX2ltZW1fcmVxOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjbV9pbWVtX2NtZDsKLWxvZ2ljIFtgU0NSMV9JTUVNX0FXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICB0Y21faW1lbV9hZGRyOwotbG9naWMgW2BTQ1IxX0lNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIHRjbV9pbWVtX3JkYXRhOwotbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjbV9pbWVtX3Jlc3A7Ci0KLS8vIERhdGEgbWVtb3J5IGludGVyZmFjZSBmcm9tIHJvdXRlciB0byBUQ00KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y21fZG1lbV9yZXFfYWNrOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjbV9kbWVtX3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y21fZG1lbV9jbWQ7Ci1sb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNtX2RtZW1fd2lkdGg7Ci1sb2dpYyBbYFNDUjFfRE1FTV9BV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgdGNtX2RtZW1fYWRkcjsKLWxvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICB0Y21fZG1lbV93ZGF0YTsKLWxvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICB0Y21fZG1lbV9yZGF0YTsKLWxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y21fZG1lbV9yZXNwOwotYGVuZGlmIC8vIFNDUjFfVENNX0VOCi0KLS8vIERhdGEgbWVtb3J5IGludGVyZmFjZSBmcm9tIHJvdXRlciB0byBtZW1vcnktbWFwcGVkIHRpbWVyCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfZG1lbV9yZXFfYWNrOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX2RtZW1fcmVxOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX2RtZW1fY21kOwotbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX2RtZW1fd2lkdGg7Ci1sb2dpYyBbYFNDUjFfRE1FTV9BV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfZG1lbV9hZGRyOwotbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX2RtZW1fd2RhdGE7Ci1sb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfZG1lbV9yZGF0YTsKLWxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl9kbWVtX3Jlc3A7Ci0KLS8vIE1pc2MKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl9pcnE7Ci1sb2dpYyBbNjM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfdmFsOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aV9yZWluaXQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXhpX2ltZW1faWRsZTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBheGlfZG1lbV9pZGxlOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJlc2V0IGxvZ2ljCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFBvd2VyLVVwIFJlc2V0IHN5bmNocm9uaXplcgotc2NyMV9yZXNldF9zeW5jX2NlbGwgIygKLSAgICAuU1RBR0VTX0FNT1VOVCAgICAgICAoU0NSMV9DTFVTVEVSX1RPUF9SU1RfU1lOQ19TVEFHRVNfTlVNKQotKSBpX3B3cnVwX3JzdG5fcmVzZXRfc3luYyAoCi0gICAgLnJzdF9uICAgICAgICAgIChwd3J1cF9yc3RfbiAgICAgKSwKLSAgICAuY2xrICAgICAgICAgICAgKGNsayAgICAgICAgICAgICApLAotICAgIC50ZXN0X3JzdF9uICAgICAodGVzdF9yc3RfbiAgICAgICksCi0gICAgLnRlc3RfbW9kZSAgICAgICh0ZXN0X21vZGUgICAgICAgKSwKLSAgICAucnN0X25faW4gICAgICAgKDEnYjEgICAgICAgICAgICApLAotICAgIC5yc3Rfbl9vdXQgICAgICAocHdydXBfcnN0X25fc3luYykKLSk7Ci0KLS8vIFJlZ3VsYXIgUmVzZXQgc3luY2hyb25pemVyCi1zY3IxX3Jlc2V0X3N5bmNfY2VsbCAjKAotICAgIC5TVEFHRVNfQU1PVU5UICAgICAgIChTQ1IxX0NMVVNURVJfVE9QX1JTVF9TWU5DX1NUQUdFU19OVU0pCi0pIGlfcnN0bl9yZXNldF9zeW5jICgKLSAgICAucnN0X24gICAgICAgICAgKHB3cnVwX3JzdF9uICAgICApLAotICAgIC5jbGsgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICksCi0gICAgLnRlc3RfcnN0X24gICAgICh0ZXN0X3JzdF9uICAgICAgKSwKLSAgICAudGVzdF9tb2RlICAgICAgKHRlc3RfbW9kZSAgICAgICApLAotICAgIC5yc3Rfbl9pbiAgICAgICAocnN0X24gICAgICAgICAgICksCi0gICAgLnJzdF9uX291dCAgICAgIChyc3Rfbl9zeW5jICAgICAgKQotKTsKLQotLy8gQ1BVIFJlc2V0IHN5bmNocm9uaXplcgotc2NyMV9yZXNldF9zeW5jX2NlbGwgIygKLSAgICAuU1RBR0VTX0FNT1VOVCAgICAgICAoU0NSMV9DTFVTVEVSX1RPUF9SU1RfU1lOQ19TVEFHRVNfTlVNKQotKSBpX2NwdV9yc3RuX3Jlc2V0X3N5bmMgKAotICAgIC5yc3RfbiAgICAgICAgICAocHdydXBfcnN0X24gICAgICksCi0gICAgLmNsayAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgKSwKLSAgICAudGVzdF9yc3RfbiAgICAgKHRlc3RfcnN0X24gICAgICApLAotICAgIC50ZXN0X21vZGUgICAgICAodGVzdF9tb2RlICAgICAgICksCi0gICAgLnJzdF9uX2luICAgICAgIChjcHVfcnN0X24gICAgICAgKSwKLSAgICAucnN0X25fb3V0ICAgICAgKGNwdV9yc3Rfbl9zeW5jICApCi0pOwotCi1gaWZkZWYgU0NSMV9EQkdfRU4KLS8vIFRBUEMgUmVzZXQKLXNjcjFfcmVzZXRfYW5kMl9jZWxsIGlfdGFwY19yc3RuX2FuZDJfY2VsbCAoCi0gICAgLnJzdF9uX2luICAgICAgICh7dHJzdF9uLCBwd3J1cF9yc3Rfbn0pLAotICAgIC50ZXN0X3JzdF9uICAgICAodGVzdF9yc3RfbiAgICAgICksCi0gICAgLnRlc3RfbW9kZSAgICAgICh0ZXN0X21vZGUgICAgICAgKSwKLSAgICAucnN0X25fb3V0ICAgICAgKHRhcGNfdHJzdF9uICAgICApCi0pOwotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KLWBpZmRlZiBTQ1IxX0RCR19FTgotYXNzaWduIGF4aV9yc3RfbiA9IHN5c19yc3Rfbl9vOwotYGVsc2UgLy8gU0NSMV9EQkdfRU4KLWFzc2lnbiBheGlfcnN0X24gPSByc3Rfbl9zeW5jOwotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gU0NSMSBjb3JlIGluc3RhbmNlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXNjcjFfY29yZV90b3AgaV9jb3JlX3RvcCAoCi0gICAgLy8gQ29tbW9uCi0gICAgLnB3cnVwX3JzdF9uICAgICAgICAgICAgICAgIChwd3J1cF9yc3Rfbl9zeW5jICksCi0gICAgLnJzdF9uICAgICAgICAgICAgICAgICAgICAgIChyc3Rfbl9zeW5jICAgICAgICksCi0gICAgLmNwdV9yc3RfbiAgICAgICAgICAgICAgICAgIChjcHVfcnN0X25fc3luYyAgICksCi0gICAgLnRlc3RfbW9kZSAgICAgICAgICAgICAgICAgICh0ZXN0X21vZGUgICAgICAgICksCi0gICAgLnRlc3RfcnN0X24gICAgICAgICAgICAgICAgICh0ZXN0X3JzdF9uICAgICAgICksCi0gICAgLmNsayAgICAgICAgICAgICAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICksCi0gICAgLmNvcmVfcnN0X25fbyAgICAgICAgICAgICAgIChjb3JlX3JzdF9uX2xvY2FsICksCi0gICAgLmNvcmVfcmRjX3FsZnlfbyAgICAgICAgICAgICggICAgICAgICAgICAgICAgICksCi1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICAuc3lzX3JzdF9uX28gICAgICAgICAgICAgICAgKHN5c19yc3Rfbl9vICAgICAgKSwKLSAgICAuc3lzX3JkY19xbGZ5X28gICAgICAgICAgICAgKHN5c19yZGNfcWxmeV9vICAgKSwKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi0gICAgLy8gRnVzZXMKLSAgICAuY29yZV9mdXNlX21oYXJ0aWRfaSAgICAgICAgKGZ1c2VfbWhhcnRpZCAgICAgKSwKLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgIC50YXBjX2Z1c2VfaWRjb2RlX2kgICAgICAgICAoZnVzZV9pZGNvZGUgICAgICApLAotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KLSAgICAvLyBJUlEKLWBpZmRlZiBTQ1IxX0lQSUNfRU4KLSAgICAuY29yZV9pcnFfbGluZXNfaSAgICAgICAgICAgKGlycV9saW5lcyAgICAgICAgKSwKLWBlbHNlIC8vIFNDUjFfSVBJQ19FTgotICAgIC5jb3JlX2lycV9leHRfaSAgICAgICAgICAgICAoZXh0X2lycSAgICAgICAgICApLAotYGVuZGlmIC8vIFNDUjFfSVBJQ19FTgotICAgIC5jb3JlX2lycV9zb2Z0X2kgICAgICAgICAgICAoc29mdF9pcnEgICAgICAgICApLAotICAgIC5jb3JlX2lycV9tdGltZXJfaSAgICAgICAgICAodGltZXJfaXJxICAgICAgICApLAotCi0gICAgLy8gTWVtb3J5LW1hcHBlZCBleHRlcm5hbCB0aW1lcgotICAgIC5jb3JlX210aW1lcl92YWxfaSAgICAgICAgICAodGltZXJfdmFsICAgICAgICApLAotCi1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICAvLyBEZWJ1ZyBpbnRlcmZhY2UKLSAgICAudGFwY190cnN0X24gICAgICAgICAgICAgICAgKHRhcGNfdHJzdF9uICAgICAgKSwKLSAgICAudGFwY190Y2sgICAgICAgICAgICAgICAgICAgKHRjayAgICAgICAgICAgICAgKSwKLSAgICAudGFwY190bXMgICAgICAgICAgICAgICAgICAgKHRtcyAgICAgICAgICAgICAgKSwKLSAgICAudGFwY190ZGkgICAgICAgICAgICAgICAgICAgKHRkaSAgICAgICAgICAgICAgKSwKLSAgICAudGFwY190ZG8gICAgICAgICAgICAgICAgICAgKHRkbyAgICAgICAgICAgICAgKSwKLSAgICAudGFwY190ZG9fZW4gICAgICAgICAgICAgICAgKHRkb19lbiAgICAgICAgICAgKSwKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi0gICAgLy8gSW5zdHJ1Y3Rpb24gbWVtb3J5IGludGVyZmFjZQotICAgIC5pbWVtMmNvcmVfcmVxX2Fja19pICAgICAgICAoY29yZV9pbWVtX3JlcV9hY2spLAotICAgIC5jb3JlMmltZW1fcmVxX28gICAgICAgICAgICAoY29yZV9pbWVtX3JlcSAgICApLAotICAgIC5jb3JlMmltZW1fY21kX28gICAgICAgICAgICAoY29yZV9pbWVtX2NtZCAgICApLAotICAgIC5jb3JlMmltZW1fYWRkcl9vICAgICAgICAgICAoY29yZV9pbWVtX2FkZHIgICApLAotICAgIC5pbWVtMmNvcmVfcmRhdGFfaSAgICAgICAgICAoY29yZV9pbWVtX3JkYXRhICApLAotICAgIC5pbWVtMmNvcmVfcmVzcF9pICAgICAgICAgICAoY29yZV9pbWVtX3Jlc3AgICApLAotCi0gICAgLy8gRGF0YSBtZW1vcnkgaW50ZXJmYWNlCi0gICAgLmRtZW0yY29yZV9yZXFfYWNrX2kgICAgICAgIChjb3JlX2RtZW1fcmVxX2FjayksCi0gICAgLmNvcmUyZG1lbV9yZXFfbyAgICAgICAgICAgIChjb3JlX2RtZW1fcmVxICAgICksCi0gICAgLmNvcmUyZG1lbV9jbWRfbyAgICAgICAgICAgIChjb3JlX2RtZW1fY21kICAgICksCi0gICAgLmNvcmUyZG1lbV93aWR0aF9vICAgICAgICAgIChjb3JlX2RtZW1fd2lkdGggICksCi0gICAgLmNvcmUyZG1lbV9hZGRyX28gICAgICAgICAgIChjb3JlX2RtZW1fYWRkciAgICksCi0gICAgLmNvcmUyZG1lbV93ZGF0YV9vICAgICAgICAgIChjb3JlX2RtZW1fd2RhdGEgICksCi0gICAgLmRtZW0yY29yZV9yZGF0YV9pICAgICAgICAgIChjb3JlX2RtZW1fcmRhdGEgICksCi0gICAgLmRtZW0yY29yZV9yZXNwX2kgICAgICAgICAgIChjb3JlX2RtZW1fcmVzcCAgICkKLSk7Ci0KLQotYGlmZGVmIFNDUjFfVENNX0VOCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFRDTSBpbnN0YW5jZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zY3IxX3RjbSAjKAotICAgIC5TQ1IxX1RDTV9TSVpFICAoYFNDUjFfRE1FTV9BV0lEVEgnKH5TQ1IxX1RDTV9BRERSX01BU0sgKyAxJ2IxKSkKLSkgaV90Y20gKAotICAgIC5jbGsgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICksCi0gICAgLnJzdF9uICAgICAgICAgIChjb3JlX3JzdF9uX2xvY2FsKSwKLQotICAgIC8vIEluc3RydWN0aW9uIGludGVyZmFjZSB0byBUQ00KLSAgICAuaW1lbV9yZXFfYWNrICAgKHRjbV9pbWVtX3JlcV9hY2spLAotICAgIC5pbWVtX3JlcSAgICAgICAodGNtX2ltZW1fcmVxICAgICksCi0gICAgLmltZW1fYWRkciAgICAgICh0Y21faW1lbV9hZGRyICAgKSwKLSAgICAuaW1lbV9yZGF0YSAgICAgKHRjbV9pbWVtX3JkYXRhICApLAotICAgIC5pbWVtX3Jlc3AgICAgICAodGNtX2ltZW1fcmVzcCAgICksCi0KLSAgICAvLyBEYXRhIGludGVyZmFjZSB0byBUQ00KLSAgICAuZG1lbV9yZXFfYWNrICAgKHRjbV9kbWVtX3JlcV9hY2spLAotICAgIC5kbWVtX3JlcSAgICAgICAodGNtX2RtZW1fcmVxICAgICksCi0gICAgLmRtZW1fY21kICAgICAgICh0Y21fZG1lbV9jbWQgICAgKSwKLSAgICAuZG1lbV93aWR0aCAgICAgKHRjbV9kbWVtX3dpZHRoICApLAotICAgIC5kbWVtX2FkZHIgICAgICAodGNtX2RtZW1fYWRkciAgICksCi0gICAgLmRtZW1fd2RhdGEgICAgICh0Y21fZG1lbV93ZGF0YSAgKSwKLSAgICAuZG1lbV9yZGF0YSAgICAgKHRjbV9kbWVtX3JkYXRhICApLAotICAgIC5kbWVtX3Jlc3AgICAgICAodGNtX2RtZW1fcmVzcCAgICkKLSk7Ci1gZW5kaWYgLy8gU0NSMV9UQ01fRU4KLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIE1lbW9yeS1tYXBwZWQgdGltZXIgaW5zdGFuY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc2NyMV90aW1lciBpX3RpbWVyICgKLSAgICAvLyBDb21tb24KLSAgICAucnN0X24gICAgICAgICAgKGNvcmVfcnN0X25fbG9jYWwgICksCi0gICAgLmNsayAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICApLAotICAgIC5ydGNfY2xrICAgICAgICAocnRjX2NsayAgICAgICAgICAgKSwKLQotICAgIC8vIE1lbW9yeSBpbnRlcmZhY2UKLSAgICAuZG1lbV9yZXEgICAgICAgKHRpbWVyX2RtZW1fcmVxICAgICksCi0gICAgLmRtZW1fY21kICAgICAgICh0aW1lcl9kbWVtX2NtZCAgICApLAotICAgIC5kbWVtX3dpZHRoICAgICAodGltZXJfZG1lbV93aWR0aCAgKSwKLSAgICAuZG1lbV9hZGRyICAgICAgKHRpbWVyX2RtZW1fYWRkciAgICksCi0gICAgLmRtZW1fd2RhdGEgICAgICh0aW1lcl9kbWVtX3dkYXRhICApLAotICAgIC5kbWVtX3JlcV9hY2sgICAodGltZXJfZG1lbV9yZXFfYWNrKSwKLSAgICAuZG1lbV9yZGF0YSAgICAgKHRpbWVyX2RtZW1fcmRhdGEgICksCi0gICAgLmRtZW1fcmVzcCAgICAgICh0aW1lcl9kbWVtX3Jlc3AgICApLAotCi0gICAgLy8gVGltZXIgaW50ZXJmYWNlCi0gICAgLnRpbWVyX3ZhbCAgICAgICh0aW1lcl92YWwgICAgICAgICApLAotICAgIC50aW1lcl9pcnEgICAgICAodGltZXJfaXJxICAgICAgICAgKQotKTsKLQotCi1gaWZkZWYgU0NSMV9JTUVNX1JPVVRFUl9FTgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBJbnN0cnVjdGlvbiBtZW1vcnkgcm91dGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXNjcjFfaW1lbV9yb3V0ZXIgIygKLSAgICAuU0NSMV9BRERSX01BU0sgICAgIChTQ1IxX1RDTV9BRERSX01BU0spLAotICAgIC5TQ1IxX0FERFJfUEFUVEVSTiAgKFNDUjFfVENNX0FERFJfUEFUVEVSTikKLSkgaV9pbWVtX3JvdXRlciAoCi0gICAgLnJzdF9uICAgICAgICAgIChjb3JlX3JzdF9uX2xvY2FsICksCi0gICAgLmNsayAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICksCi0KLSAgICAvLyBJbnRlcmZhY2UgdG8gY29yZQotICAgIC5pbWVtX3JlcV9hY2sgICAoY29yZV9pbWVtX3JlcV9hY2spLAotICAgIC5pbWVtX3JlcSAgICAgICAoY29yZV9pbWVtX3JlcSAgICApLAotICAgIC5pbWVtX2NtZCAgICAgICAoY29yZV9pbWVtX2NtZCAgICApLAotICAgIC5pbWVtX2FkZHIgICAgICAoY29yZV9pbWVtX2FkZHIgICApLAotICAgIC5pbWVtX3JkYXRhICAgICAoY29yZV9pbWVtX3JkYXRhICApLAotICAgIC5pbWVtX3Jlc3AgICAgICAoY29yZV9pbWVtX3Jlc3AgICApLAotCi0gICAgLy8gSW50ZXJmYWNlIHRvIEFYSSBicmlkZ2UKLSAgICAucG9ydDBfcmVxX2FjayAgKGF4aV9pbWVtX3JlcV9hY2sgKSwKLSAgICAucG9ydDBfcmVxICAgICAgKGF4aV9pbWVtX3JlcSAgICAgKSwKLSAgICAucG9ydDBfY21kICAgICAgKGF4aV9pbWVtX2NtZCAgICAgKSwKLSAgICAucG9ydDBfYWRkciAgICAgKGF4aV9pbWVtX2FkZHIgICAgKSwKLSAgICAucG9ydDBfcmRhdGEgICAgKGF4aV9pbWVtX3JkYXRhICAgKSwKLSAgICAucG9ydDBfcmVzcCAgICAgKGF4aV9pbWVtX3Jlc3AgICAgKSwKLQotICAgIC8vIEludGVyZmFjZSB0byBUQ00KLSAgICAucG9ydDFfcmVxX2FjayAgKHRjbV9pbWVtX3JlcV9hY2sgKSwKLSAgICAucG9ydDFfcmVxICAgICAgKHRjbV9pbWVtX3JlcSAgICAgKSwKLSAgICAucG9ydDFfY21kICAgICAgKHRjbV9pbWVtX2NtZCAgICAgKSwKLSAgICAucG9ydDFfYWRkciAgICAgKHRjbV9pbWVtX2FkZHIgICAgKSwKLSAgICAucG9ydDFfcmRhdGEgICAgKHRjbV9pbWVtX3JkYXRhICAgKSwKLSAgICAucG9ydDFfcmVzcCAgICAgKHRjbV9pbWVtX3Jlc3AgICAgKQotKTsKLQotYGVsc2UgLy8gU0NSMV9JTUVNX1JPVVRFUl9FTgotCi1hc3NpZ24gYXhpX2ltZW1fcmVxICAgICAgICAgPSBjb3JlX2ltZW1fcmVxOwotYXNzaWduIGF4aV9pbWVtX2NtZCAgICAgICAgID0gY29yZV9pbWVtX2NtZDsKLWFzc2lnbiBheGlfaW1lbV9hZGRyICAgICAgICA9IGNvcmVfaW1lbV9hZGRyOwotYXNzaWduIGNvcmVfaW1lbV9yZXFfYWNrICAgID0gYXhpX2ltZW1fcmVxX2FjazsKLWFzc2lnbiBjb3JlX2ltZW1fcmVzcCAgICAgICA9IGF4aV9pbWVtX3Jlc3A7Ci1hc3NpZ24gY29yZV9pbWVtX3JkYXRhICAgICAgPSBheGlfaW1lbV9yZGF0YTsKLQotYGVuZGlmIC8vIFNDUjFfSU1FTV9ST1VURVJfRU4KLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIERhdGEgbWVtb3J5IHJvdXRlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zY3IxX2RtZW1fcm91dGVyICMoCi0KLWBpZmRlZiBTQ1IxX1RDTV9FTgotICAgIC5TQ1IxX1BPUlQxX0FERFJfTUFTSyAgICAgICAoU0NSMV9UQ01fQUREUl9NQVNLKSwKLSAgICAuU0NSMV9QT1JUMV9BRERSX1BBVFRFUk4gICAgKFNDUjFfVENNX0FERFJfUEFUVEVSTiksCi1gZWxzZSAvLyBTQ1IxX1RDTV9FTgotICAgIC5TQ1IxX1BPUlQxX0FERFJfTUFTSyAgICAgICAoMzInaDAwMDAwMDAwKSwKLSAgICAuU0NSMV9QT1JUMV9BRERSX1BBVFRFUk4gICAgKDMyJ2hGRkZGRkZGRiksCi1gZW5kaWYgLy8gU0NSMV9UQ01fRU4KLQotICAgIC5TQ1IxX1BPUlQyX0FERFJfTUFTSyAgICAgICAoU0NSMV9USU1FUl9BRERSX01BU0spLAotICAgIC5TQ1IxX1BPUlQyX0FERFJfUEFUVEVSTiAgICAoU0NSMV9USU1FUl9BRERSX1BBVFRFUk4pCi0KLSkgaV9kbWVtX3JvdXRlciAoCi0gICAgLnJzdF9uICAgICAgICAgIChjb3JlX3JzdF9uX2xvY2FsICAgICksCi0gICAgLmNsayAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICAgICksCi0KLSAgICAvLyBJbnRlcmZhY2UgdG8gY29yZQotICAgIC5kbWVtX3JlcV9hY2sgICAoY29yZV9kbWVtX3JlcV9hY2sgICApLAotICAgIC5kbWVtX3JlcSAgICAgICAoY29yZV9kbWVtX3JlcSAgICAgICApLAotICAgIC5kbWVtX2NtZCAgICAgICAoY29yZV9kbWVtX2NtZCAgICAgICApLAotICAgIC5kbWVtX3dpZHRoICAgICAoY29yZV9kbWVtX3dpZHRoICAgICApLAotICAgIC5kbWVtX2FkZHIgICAgICAoY29yZV9kbWVtX2FkZHIgICAgICApLAotICAgIC5kbWVtX3dkYXRhICAgICAoY29yZV9kbWVtX3dkYXRhICAgICApLAotICAgIC5kbWVtX3JkYXRhICAgICAoY29yZV9kbWVtX3JkYXRhICAgICApLAotICAgIC5kbWVtX3Jlc3AgICAgICAoY29yZV9kbWVtX3Jlc3AgICAgICApLAotCi1gaWZkZWYgU0NSMV9UQ01fRU4KLSAgICAvLyBJbnRlcmZhY2UgdG8gVENNCi0gICAgLnBvcnQxX3JlcV9hY2sgICh0Y21fZG1lbV9yZXFfYWNrICAgICksCi0gICAgLnBvcnQxX3JlcSAgICAgICh0Y21fZG1lbV9yZXEgICAgICAgICksCi0gICAgLnBvcnQxX2NtZCAgICAgICh0Y21fZG1lbV9jbWQgICAgICAgICksCi0gICAgLnBvcnQxX3dpZHRoICAgICh0Y21fZG1lbV93aWR0aCAgICAgICksCi0gICAgLnBvcnQxX2FkZHIgICAgICh0Y21fZG1lbV9hZGRyICAgICAgICksCi0gICAgLnBvcnQxX3dkYXRhICAgICh0Y21fZG1lbV93ZGF0YSAgICAgICksCi0gICAgLnBvcnQxX3JkYXRhICAgICh0Y21fZG1lbV9yZGF0YSAgICAgICksCi0gICAgLnBvcnQxX3Jlc3AgICAgICh0Y21fZG1lbV9yZXNwICAgICAgICksCi1gZWxzZSAvLyBTQ1IxX1RDTV9FTgotICAgIC5wb3J0MV9yZXFfYWNrICAoMSdiMCAgICAgICAgICAgICAgICApLAotICAgIC5wb3J0MV9yZXEgICAgICAoICAgICAgICAgICAgICAgICAgICApLAotICAgIC5wb3J0MV9jbWQgICAgICAoICAgICAgICAgICAgICAgICAgICApLAotICAgIC5wb3J0MV93aWR0aCAgICAoICAgICAgICAgICAgICAgICAgICApLAotICAgIC5wb3J0MV9hZGRyICAgICAoICAgICAgICAgICAgICAgICAgICApLAotICAgIC5wb3J0MV93ZGF0YSAgICAoICAgICAgICAgICAgICAgICAgICApLAotICAgIC5wb3J0MV9yZGF0YSAgICAoJzAgICAgICAgICAgICAgICAgICApLAotICAgIC5wb3J0MV9yZXNwICAgICAoU0NSMV9NRU1fUkVTUF9SRFlfRVIpLAotYGVuZGlmIC8vIFNDUjFfVENNX0VOCi0KLSAgICAvLyBJbnRlcmZhY2UgdG8gbWVtb3J5LW1hcHBlZCB0aW1lcgotICAgIC5wb3J0Ml9yZXFfYWNrICAodGltZXJfZG1lbV9yZXFfYWNrICApLAotICAgIC5wb3J0Ml9yZXEgICAgICAodGltZXJfZG1lbV9yZXEgICAgICApLAotICAgIC5wb3J0Ml9jbWQgICAgICAodGltZXJfZG1lbV9jbWQgICAgICApLAotICAgIC5wb3J0Ml93aWR0aCAgICAodGltZXJfZG1lbV93aWR0aCAgICApLAotICAgIC5wb3J0Ml9hZGRyICAgICAodGltZXJfZG1lbV9hZGRyICAgICApLAotICAgIC5wb3J0Ml93ZGF0YSAgICAodGltZXJfZG1lbV93ZGF0YSAgICApLAotICAgIC5wb3J0Ml9yZGF0YSAgICAodGltZXJfZG1lbV9yZGF0YSAgICApLAotICAgIC5wb3J0Ml9yZXNwICAgICAodGltZXJfZG1lbV9yZXNwICAgICApLAotCi0gICAgLy8gSW50ZXJmYWNlIHRvIEFYSSBicmlkZ2UKLSAgICAucG9ydDBfcmVxX2FjayAgKGF4aV9kbWVtX3JlcV9hY2sgICAgKSwKLSAgICAucG9ydDBfcmVxICAgICAgKGF4aV9kbWVtX3JlcSAgICAgICAgKSwKLSAgICAucG9ydDBfY21kICAgICAgKGF4aV9kbWVtX2NtZCAgICAgICAgKSwKLSAgICAucG9ydDBfd2lkdGggICAgKGF4aV9kbWVtX3dpZHRoICAgICAgKSwKLSAgICAucG9ydDBfYWRkciAgICAgKGF4aV9kbWVtX2FkZHIgICAgICAgKSwKLSAgICAucG9ydDBfd2RhdGEgICAgKGF4aV9kbWVtX3dkYXRhICAgICAgKSwKLSAgICAucG9ydDBfcmRhdGEgICAgKGF4aV9kbWVtX3JkYXRhICAgICAgKSwKLSAgICAucG9ydDBfcmVzcCAgICAgKGF4aV9kbWVtX3Jlc3AgICAgICAgKQotKTsKLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEluc3RydWN0aW9uIG1lbW9yeSBBWEkgYnJpZGdlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXNjcjFfbWVtX2F4aSAjKAotYGlmZGVmIFNDUjFfSU1FTV9BWElfUkVRX0JQCi0gICAgLlNDUjFfQVhJX1JFUV9CUCAgICAoMSksCi1gZWxzZSAvLyBTQ1IxX0lNRU1fQVhJX1JFUV9CUAotICAgIC5TQ1IxX0FYSV9SRVFfQlAgICAgKDApLAotYGVuZGlmIC8vIFNDUjFfSU1FTV9BWElfUkVRX0JQCi1gaWZkZWYgU0NSMV9JTUVNX0FYSV9SRVNQX0JQCi0gICAgLlNDUjFfQVhJX1JFU1BfQlAgICAoMSkKLWBlbHNlIC8vIFNDUjFfSU1FTV9BWElfUkVTUF9CUAotICAgIC5TQ1IxX0FYSV9SRVNQX0JQICAgKDApCi1gZW5kaWYgLy8gU0NSMV9JTUVNX0FYSV9SRVNQX0JQCi0pIGlfaW1lbV9heGkgKAotICAgIC5jbGsgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICAgICAgICApLAotICAgIC5yc3RfbiAgICAgICAgICAoYXhpX3JzdF9uICAgICAgICAgICAgICApLAotICAgIC5heGlfcmVpbml0ICAgICAoYXhpX3JlaW5pdCAgICAgICAgICAgICApLAotCi0gICAgLy8gSW50ZXJmYWNlIHRvIGNvcmUKLSAgICAuY29yZV9pZGxlICAgICAgKGF4aV9pbWVtX2lkbGUgICAgICAgICAgKSwKLSAgICAuY29yZV9yZXFfYWNrICAgKGF4aV9pbWVtX3JlcV9hY2sgICAgICAgKSwKLSAgICAuY29yZV9yZXEgICAgICAgKGF4aV9pbWVtX3JlcSAgICAgICAgICAgKSwKLSAgICAuY29yZV9jbWQgICAgICAgKGF4aV9pbWVtX2NtZCAgICAgICAgICAgKSwKLSAgICAuY29yZV93aWR0aCAgICAgKFNDUjFfTUVNX1dJRFRIX1dPUkQgICAgKSwKLSAgICAuY29yZV9hZGRyICAgICAgKGF4aV9pbWVtX2FkZHIgICAgICAgICAgKSwKLSAgICAuY29yZV93ZGF0YSAgICAgKCcwICAgICAgICAgICAgICAgICAgICAgKSwKLSAgICAuY29yZV9yZGF0YSAgICAgKGF4aV9pbWVtX3JkYXRhICAgICAgICAgKSwKLSAgICAuY29yZV9yZXNwICAgICAgKGF4aV9pbWVtX3Jlc3AgICAgICAgICAgKSwKLQotICAgIC8vIEFYSSBJL08KLSAgICAuYXdpZCAgICAgICAgICAgKGlvX2F4aV9pbWVtX2F3aWQgICAgICAgKSwKLSAgICAuYXdhZGRyICAgICAgICAgKGlvX2F4aV9pbWVtX2F3YWRkciAgICAgKSwKLSAgICAuYXdsZW4gICAgICAgICAgKGlvX2F4aV9pbWVtX2F3bGVuICAgICAgKSwKLSAgICAuYXdzaXplICAgICAgICAgKGlvX2F4aV9pbWVtX2F3c2l6ZSAgICAgKSwKLSAgICAuYXdidXJzdCAgICAgICAgKGlvX2F4aV9pbWVtX2F3YnVyc3QgICAgKSwKLSAgICAuYXdsb2NrICAgICAgICAgKGlvX2F4aV9pbWVtX2F3bG9jayAgICAgKSwKLSAgICAuYXdjYWNoZSAgICAgICAgKGlvX2F4aV9pbWVtX2F3Y2FjaGUgICAgKSwKLSAgICAuYXdwcm90ICAgICAgICAgKGlvX2F4aV9pbWVtX2F3cHJvdCAgICAgKSwKLSAgICAuYXdyZWdpb24gICAgICAgKGlvX2F4aV9pbWVtX2F3cmVnaW9uICAgKSwKLSAgICAuYXd1c2VyICAgICAgICAgKGlvX2F4aV9pbWVtX2F3dXNlciAgICAgKSwKLSAgICAuYXdxb3MgICAgICAgICAgKGlvX2F4aV9pbWVtX2F3cW9zICAgICAgKSwKLSAgICAuYXd2YWxpZCAgICAgICAgKGlvX2F4aV9pbWVtX2F3dmFsaWQgICAgKSwKLSAgICAuYXdyZWFkeSAgICAgICAgKGlvX2F4aV9pbWVtX2F3cmVhZHkgICAgKSwKLSAgICAud2RhdGEgICAgICAgICAgKGlvX2F4aV9pbWVtX3dkYXRhICAgICAgKSwKLSAgICAud3N0cmIgICAgICAgICAgKGlvX2F4aV9pbWVtX3dzdHJiICAgICAgKSwKLSAgICAud2xhc3QgICAgICAgICAgKGlvX2F4aV9pbWVtX3dsYXN0ICAgICAgKSwKLSAgICAud3VzZXIgICAgICAgICAgKGlvX2F4aV9pbWVtX3d1c2VyICAgICAgKSwKLSAgICAud3ZhbGlkICAgICAgICAgKGlvX2F4aV9pbWVtX3d2YWxpZCAgICAgKSwKLSAgICAud3JlYWR5ICAgICAgICAgKGlvX2F4aV9pbWVtX3dyZWFkeSAgICAgKSwKLSAgICAuYmlkICAgICAgICAgICAgKGlvX2F4aV9pbWVtX2JpZCAgICAgICAgKSwKLSAgICAuYnJlc3AgICAgICAgICAgKGlvX2F4aV9pbWVtX2JyZXNwICAgICAgKSwKLSAgICAuYnZhbGlkICAgICAgICAgKGlvX2F4aV9pbWVtX2J2YWxpZCAgICAgKSwKLSAgICAuYnVzZXIgICAgICAgICAgKGlvX2F4aV9pbWVtX2J1c2VyICAgICAgKSwKLSAgICAuYnJlYWR5ICAgICAgICAgKGlvX2F4aV9pbWVtX2JyZWFkeSAgICAgKSwKLSAgICAuYXJpZCAgICAgICAgICAgKGlvX2F4aV9pbWVtX2FyaWQgICAgICAgKSwKLSAgICAuYXJhZGRyICAgICAgICAgKGlvX2F4aV9pbWVtX2FyYWRkciAgICAgKSwKLSAgICAuYXJsZW4gICAgICAgICAgKGlvX2F4aV9pbWVtX2FybGVuICAgICAgKSwKLSAgICAuYXJzaXplICAgICAgICAgKGlvX2F4aV9pbWVtX2Fyc2l6ZSAgICAgKSwKLSAgICAuYXJidXJzdCAgICAgICAgKGlvX2F4aV9pbWVtX2FyYnVyc3QgICAgKSwKLSAgICAuYXJsb2NrICAgICAgICAgKGlvX2F4aV9pbWVtX2FybG9jayAgICAgKSwKLSAgICAuYXJjYWNoZSAgICAgICAgKGlvX2F4aV9pbWVtX2FyY2FjaGUgICAgKSwKLSAgICAuYXJwcm90ICAgICAgICAgKGlvX2F4aV9pbWVtX2FycHJvdCAgICAgKSwKLSAgICAuYXJyZWdpb24gICAgICAgKGlvX2F4aV9pbWVtX2FycmVnaW9uICAgKSwKLSAgICAuYXJ1c2VyICAgICAgICAgKGlvX2F4aV9pbWVtX2FydXNlciAgICAgKSwKLSAgICAuYXJxb3MgICAgICAgICAgKGlvX2F4aV9pbWVtX2FycW9zICAgICAgKSwKLSAgICAuYXJ2YWxpZCAgICAgICAgKGlvX2F4aV9pbWVtX2FydmFsaWQgICAgKSwKLSAgICAuYXJyZWFkeSAgICAgICAgKGlvX2F4aV9pbWVtX2FycmVhZHkgICAgKSwKLSAgICAucmlkICAgICAgICAgICAgKGlvX2F4aV9pbWVtX3JpZCAgICAgICAgKSwKLSAgICAucmRhdGEgICAgICAgICAgKGlvX2F4aV9pbWVtX3JkYXRhICAgICAgKSwKLSAgICAucnJlc3AgICAgICAgICAgKGlvX2F4aV9pbWVtX3JyZXNwICAgICAgKSwKLSAgICAucmxhc3QgICAgICAgICAgKGlvX2F4aV9pbWVtX3JsYXN0ICAgICAgKSwKLSAgICAucnVzZXIgICAgICAgICAgKGlvX2F4aV9pbWVtX3J1c2VyICAgICAgKSwKLSAgICAucnZhbGlkICAgICAgICAgKGlvX2F4aV9pbWVtX3J2YWxpZCAgICAgKSwKLSAgICAucnJlYWR5ICAgICAgICAgKGlvX2F4aV9pbWVtX3JyZWFkeSAgICAgKQotKTsKLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIERhdGEgbWVtb3J5IEFYSSBicmlkZ2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc2NyMV9tZW1fYXhpICMoCi1gaWZkZWYgU0NSMV9ETUVNX0FYSV9SRVFfQlAKLSAgICAuU0NSMV9BWElfUkVRX0JQICAgICgxKSwKLWBlbHNlIC8vIFNDUjFfRE1FTV9BWElfUkVRX0JQCi0gICAgLlNDUjFfQVhJX1JFUV9CUCAgICAoMCksCi1gZW5kaWYgLy8gU0NSMV9ETUVNX0FYSV9SRVFfQlAKLWBpZmRlZiBTQ1IxX0RNRU1fQVhJX1JFU1BfQlAKLSAgICAuU0NSMV9BWElfUkVTUF9CUCAgICgxKQotYGVsc2UgLy8gU0NSMV9ETUVNX0FYSV9SRVNQX0JQCi0gICAgLlNDUjFfQVhJX1JFU1BfQlAgICAoMCkKLWBlbmRpZiAvLyBTQ1IxX0RNRU1fQVhJX1JFU1BfQlAKLSkgaV9kbWVtX2F4aSAoCi0gICAgLmNsayAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICAgICAgICksCi0gICAgLnJzdF9uICAgICAgICAgIChheGlfcnN0X24gICAgICAgICAgICAgICksCi0gICAgLmF4aV9yZWluaXQgICAgIChheGlfcmVpbml0ICAgICAgICAgICAgICksCi0KLSAgICAvLyBJbnRlcmZhY2UgdG8gY29yZQotICAgIC5jb3JlX2lkbGUgICAgICAoYXhpX2RtZW1faWRsZSAgICAgICAgICApLAotICAgIC5jb3JlX3JlcV9hY2sgICAoYXhpX2RtZW1fcmVxX2FjayAgICAgICApLAotICAgIC5jb3JlX3JlcSAgICAgICAoYXhpX2RtZW1fcmVxICAgICAgICAgICApLAotICAgIC5jb3JlX2NtZCAgICAgICAoYXhpX2RtZW1fY21kICAgICAgICAgICApLAotICAgIC5jb3JlX3dpZHRoICAgICAoYXhpX2RtZW1fd2lkdGggICAgICAgICApLAotICAgIC5jb3JlX2FkZHIgICAgICAoYXhpX2RtZW1fYWRkciAgICAgICAgICApLAotICAgIC5jb3JlX3dkYXRhICAgICAoYXhpX2RtZW1fd2RhdGEgICAgICAgICApLAotICAgIC5jb3JlX3JkYXRhICAgICAoYXhpX2RtZW1fcmRhdGEgICAgICAgICApLAotICAgIC5jb3JlX3Jlc3AgICAgICAoYXhpX2RtZW1fcmVzcCAgICAgICAgICApLAotCi0gICAgLy8gQVhJIEkvTwotICAgIC5hd2lkICAgICAgICAgICAoaW9fYXhpX2RtZW1fYXdpZCAgICAgICApLAotICAgIC5hd2FkZHIgICAgICAgICAoaW9fYXhpX2RtZW1fYXdhZGRyICAgICApLAotICAgIC5hd2xlbiAgICAgICAgICAoaW9fYXhpX2RtZW1fYXdsZW4gICAgICApLAotICAgIC5hd3NpemUgICAgICAgICAoaW9fYXhpX2RtZW1fYXdzaXplICAgICApLAotICAgIC5hd2J1cnN0ICAgICAgICAoaW9fYXhpX2RtZW1fYXdidXJzdCAgICApLAotICAgIC5hd2xvY2sgICAgICAgICAoaW9fYXhpX2RtZW1fYXdsb2NrICAgICApLAotICAgIC5hd2NhY2hlICAgICAgICAoaW9fYXhpX2RtZW1fYXdjYWNoZSAgICApLAotICAgIC5hd3Byb3QgICAgICAgICAoaW9fYXhpX2RtZW1fYXdwcm90ICAgICApLAotICAgIC5hd3JlZ2lvbiAgICAgICAoaW9fYXhpX2RtZW1fYXdyZWdpb24gICApLAotICAgIC5hd3VzZXIgICAgICAgICAoaW9fYXhpX2RtZW1fYXd1c2VyICAgICApLAotICAgIC5hd3FvcyAgICAgICAgICAoaW9fYXhpX2RtZW1fYXdxb3MgICAgICApLAotICAgIC5hd3ZhbGlkICAgICAgICAoaW9fYXhpX2RtZW1fYXd2YWxpZCAgICApLAotICAgIC5hd3JlYWR5ICAgICAgICAoaW9fYXhpX2RtZW1fYXdyZWFkeSAgICApLAotICAgIC53ZGF0YSAgICAgICAgICAoaW9fYXhpX2RtZW1fd2RhdGEgICAgICApLAotICAgIC53c3RyYiAgICAgICAgICAoaW9fYXhpX2RtZW1fd3N0cmIgICAgICApLAotICAgIC53bGFzdCAgICAgICAgICAoaW9fYXhpX2RtZW1fd2xhc3QgICAgICApLAotICAgIC53dXNlciAgICAgICAgICAoaW9fYXhpX2RtZW1fd3VzZXIgICAgICApLAotICAgIC53dmFsaWQgICAgICAgICAoaW9fYXhpX2RtZW1fd3ZhbGlkICAgICApLAotICAgIC53cmVhZHkgICAgICAgICAoaW9fYXhpX2RtZW1fd3JlYWR5ICAgICApLAotICAgIC5iaWQgICAgICAgICAgICAoaW9fYXhpX2RtZW1fYmlkICAgICAgICApLAotICAgIC5icmVzcCAgICAgICAgICAoaW9fYXhpX2RtZW1fYnJlc3AgICAgICApLAotICAgIC5idmFsaWQgICAgICAgICAoaW9fYXhpX2RtZW1fYnZhbGlkICAgICApLAotICAgIC5idXNlciAgICAgICAgICAoaW9fYXhpX2RtZW1fYnVzZXIgICAgICApLAotICAgIC5icmVhZHkgICAgICAgICAoaW9fYXhpX2RtZW1fYnJlYWR5ICAgICApLAotICAgIC5hcmlkICAgICAgICAgICAoaW9fYXhpX2RtZW1fYXJpZCAgICAgICApLAotICAgIC5hcmFkZHIgICAgICAgICAoaW9fYXhpX2RtZW1fYXJhZGRyICAgICApLAotICAgIC5hcmxlbiAgICAgICAgICAoaW9fYXhpX2RtZW1fYXJsZW4gICAgICApLAotICAgIC5hcnNpemUgICAgICAgICAoaW9fYXhpX2RtZW1fYXJzaXplICAgICApLAotICAgIC5hcmJ1cnN0ICAgICAgICAoaW9fYXhpX2RtZW1fYXJidXJzdCAgICApLAotICAgIC5hcmxvY2sgICAgICAgICAoaW9fYXhpX2RtZW1fYXJsb2NrICAgICApLAotICAgIC5hcmNhY2hlICAgICAgICAoaW9fYXhpX2RtZW1fYXJjYWNoZSAgICApLAotICAgIC5hcnByb3QgICAgICAgICAoaW9fYXhpX2RtZW1fYXJwcm90ICAgICApLAotICAgIC5hcnJlZ2lvbiAgICAgICAoaW9fYXhpX2RtZW1fYXJyZWdpb24gICApLAotICAgIC5hcnVzZXIgICAgICAgICAoaW9fYXhpX2RtZW1fYXJ1c2VyICAgICApLAotICAgIC5hcnFvcyAgICAgICAgICAoaW9fYXhpX2RtZW1fYXJxb3MgICAgICApLAotICAgIC5hcnZhbGlkICAgICAgICAoaW9fYXhpX2RtZW1fYXJ2YWxpZCAgICApLAotICAgIC5hcnJlYWR5ICAgICAgICAoaW9fYXhpX2RtZW1fYXJyZWFkeSAgICApLAotICAgIC5yaWQgICAgICAgICAgICAoaW9fYXhpX2RtZW1fcmlkICAgICAgICApLAotICAgIC5yZGF0YSAgICAgICAgICAoaW9fYXhpX2RtZW1fcmRhdGEgICAgICApLAotICAgIC5ycmVzcCAgICAgICAgICAoaW9fYXhpX2RtZW1fcnJlc3AgICAgICApLAotICAgIC5ybGFzdCAgICAgICAgICAoaW9fYXhpX2RtZW1fcmxhc3QgICAgICApLAotICAgIC5ydXNlciAgICAgICAgICAoaW9fYXhpX2RtZW1fcnVzZXIgICAgICApLAotICAgIC5ydmFsaWQgICAgICAgICAoaW9fYXhpX2RtZW1fcnZhbGlkICAgICApLAotICAgIC5ycmVhZHkgICAgICAgICAoaW9fYXhpX2RtZW1fcnJlYWR5ICAgICApCi0pOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEFYSSByZWluaXQgbG9naWMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotYWx3YXlzX2ZmIEAobmVnZWRnZSBjb3JlX3JzdF9uX2xvY2FsLCBwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAofmNvcmVfcnN0X25fbG9jYWwpICAgICAgICAgICAgICAgICAgICAgIGF4aV9yZWluaXQgPD0gMSdiMTsKLSAgICBlbHNlIGlmIChheGlfaW1lbV9pZGxlICYgYXhpX2RtZW1faWRsZSkgICAgIGF4aV9yZWluaXQgPD0gMSdiMDsKLWVuZAotCi1lbmRtb2R1bGUgOiBzY3IxX3RvcF9heGkKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy90b3Avc2NyMV90b3Bfd2Iuc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvdG9wL3NjcjFfdG9wX3diLnN2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGUwNTVjLi4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy90b3Avc2NyMV90b3Bfd2Iuc3YKKysrIC9kZXYvbnVsbApAQCAtMSw0NzcgKzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQotLy8gCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAotLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+Ci0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgeWlmaXZlIFdpc2hib25lIGludGVyZmFjZSBmb3Igc3ludGFjb3JlICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHlpZml2ZSBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEveWlmaXZlX3IwLmdpdCAgICAgICAgICAgICAgLy8vLwotLy8vLyAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3lpZml2ZS8gICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgRGVzY3JpcHRpb246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgaW50ZWdyYXRlZCB3aXNoYm9uZSBpL2YgdG8gaW5zdHJ1Y3Rpb24vZGF0YSBtZW1vcnkgICAgICAgLy8vLwotLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgUmV2aXNpb24gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgdjA6ICAgIEp1bmUgNywgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgICAgICAgICB3aXNoYm9uZSBpbnRlZ3JhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgdjE6ICAgIEp1bmUgMTcsIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgICAgICAgICBjb3JlIGFuZCB3aXNoYm9uZSBjbG9jayBkb21haW4gYXJlIHNlcGVyYXRlZCAgICAgLy8vLwotLy8vLyAgICAgICAgICAgICBBc3luYyBmaWZvIGFkZGVkIGluIGltZW0gYW5kIGRtZW0gcGF0aCAgICAgICAgICAgLy8vLwotLy8vLyAgICAgdjI6ICAgIEp1bHkgNywgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgICAgICAgIDY0Yml0IGRlYnVnIHNpZ25hbCBhZGRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgdjM6ICAgIEF1ZyAyMywgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgICAgICAgIHRpbWVyX2lycSBjb25uZWN0aXZlIGJ1ZyBmaXggICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgdjM6ICAgIE5vdiAxMiwgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgICAgICAgIDJLQiBTUkFNIEludGVncmF0ZWQgYXQgVENNIEludGVyZmFjZSAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgLy8vLwotLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLwotLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAgLy8vLwotLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gLy8vLwotLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgLy8vLwotLy8vLyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgLy8vLwotLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLwotLy8vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgLy8vLwotLy8vLyBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgLy8vLwotLy8vLyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgLy8vLwotLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLwotLy8vLyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgLy8vLwotLy8vLyBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgLy8vLwotLy8vLyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgLy8vLwotLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gICAgIE9yZ2luYWwgb3duZXIgRGV0YWlscyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vIENvcHlyaWdodCBieSBTeW50YWNvcmUgTExDIMKpIDIwMTYtMjAyMC4gU2VlIExJQ0VOU0UgZm9yIGRldGFpbHMvLy8KLS8vLyBAZmlsZSAgICAgICA8c2NyMV90b3Bfd2Iuc3Y+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8KLS8vLyBAYnJpZWYgICAgICBTQ1IxIEFIQiB0b3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotYGluY2x1ZGUgInNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgiCi1gaW5jbHVkZSAic2NyMV9tZW1pZi5zdmgiCi1gaW5jbHVkZSAic2NyMV93Yi5zdmgiCi1gaWZkZWYgU0NSMV9JUElDX0VOCi1gaW5jbHVkZSAic2NyMV9pcGljLnN2aCIKLWBlbmRpZiAvLyBTQ1IxX0lQSUNfRU4KLQotYGlmZGVmIFNDUjFfVENNX0VOCi0gYGRlZmluZSBTQ1IxX0lNRU1fUk9VVEVSX0VOCi1gZW5kaWYgLy8gU0NSMV9UQ01fRU4KLQotbW9kdWxlIHNjcjFfdG9wX3diICgKLQotYGlmZGVmIFVTRV9QT1dFUl9QSU5TCi0gICAgICAgICBpbnB1dCBsb2dpYyAgICAgICAgICAgIHZjY2QxLCAgICAvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQotICAgICAgICAgaW5wdXQgbG9naWMgICAgICAgICAgICB2c3NkMSwgICAgLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKLWBlbmRpZgotICAgIGlucHV0ICBsb2dpYyAgIFszOjBdICAgICAgICAgICAgICAgICBjZmdfY3NrYV9yaXNjdiwKLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa19pbnQsCi0gICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9jbGtfcmlzY3YsCi0KLSAgICAvLyBDb250cm9sCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHdydXBfcnN0X24sICAgICAgICAgICAgLy8gUG93ZXItVXAgUmVzZXQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByc3RfbiwgICAgICAgICAgICAgICAgICAvLyBSZWd1bGFyIFJlc2V0IHNpZ25hbAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdV9yc3RfbiwgICAgICAgICAgICAgIC8vIENQVSBSZXNldCAoQ29yZSBSZXNldCkKLSAgICAvLyBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X21vZGUsICAgICAgICAgICAgICAvLyBUZXN0IG1vZGUgLSB1bnVzZWQKLSAgICAvLyBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3JzdF9uLCAgICAgICAgICAgICAvLyBUZXN0IG1vZGUncyByZXNldCAtIHVudXNlZAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfY2xrLCAgICAgICAgICAgICAgIC8vIENvcmUgY2xvY2sKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydGNfY2xrLCAgICAgICAgICAgICAgICAvLyBSZWFsLXRpbWUgY2xvY2sKLSAgICBvdXRwdXQgIGxvZ2ljIFs2MzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICByaXNjdl9kZWJ1ZywKLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c19yc3Rfbl9vLCAgICAgICAgICAgIC8vIEV4dGVybmFsIFN5c3RlbSBSZXNldCBvdXRwdXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIChmb3IgdGhlIHByb2Nlc3NvciBjbHVzdGVyJ3MgY29tcG9uZW50cyBvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIGV4dGVybmFsIFNPQyAoY291bGQgYmUgdXNlZnVsIGluIHNtYWxsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgU0NSLWNvcmUtY2VudHJpYyBTT0NzKSkKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNfcmRjX3FsZnlfbywgICAgICAgICAvLyBTeXN0ZW0tdG8tRXh0ZXJuYWwgU09DIFJlc2V0IERvbWFpbiBDcm9zc2luZyBRdWFsaWZpZXIKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi0gICAgLy8gRnVzZXMKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICBmdXNlX21oYXJ0aWQsICAgICAgICAgICAvLyBIYXJ0IElECi1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICBpbnB1dCAgIGxvZ2ljIFszMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdXNlX2lkY29kZSwgICAgICAgICAgICAvLyBUQVBDIElEQ09ERQotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KLSAgICAvLyBJUlEKLWBpZmRlZiBTQ1IxX0lQSUNfRU4KLSAgICBpbnB1dCAgIGxvZ2ljIFtTQ1IxX0lSUV9MSU5FU19OVU0tMTowXSAgICAgICAgICBpcnFfbGluZXMsICAgICAgICAgICAgICAvLyBJUlEgbGluZXMgdG8gSVBJQwotYGVsc2UgLy8gU0NSMV9JUElDX0VOCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0X2lycSwgICAgICAgICAgICAgICAgLy8gRXh0ZXJuYWwgSVJRIGlucHV0Ci1gZW5kaWYgLy8gU0NSMV9JUElDX0VOCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29mdF9pcnEsICAgICAgICAgICAgICAgLy8gU29mdHdhcmUgSVJRIGlucHV0Ci0KLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgIC8vIC0tIEpUQUcgSS9GCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJzdF9uLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjaywKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXMsCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRpLAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkbywKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZG9fZW4sCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotYGlmbmRlZiBTQ1IxX1RDTV9NRU0KLSAgICAvLyBTUkFNLTAgUE9SVC0wCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYW0wX2NsazAsCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYW0wX2NzYjAsCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYW0wX3dlYjAsCi0gICAgb3V0cHV0ICBsb2dpYyAgIFs4OjBdICAgICAgICAgICAgICAgICAgIHNyYW0wX2FkZHIwLAotICAgIG91dHB1dCAgbG9naWMgICBbMzowXSAgICAgICAgICAgICAgICAgICBzcmFtMF93bWFzazAsCi0gICAgb3V0cHV0ICBsb2dpYyAgIFszMTowXSAgICAgICAgICAgICAgICAgIHNyYW0wX2RpbjAsCi0gICAgaW5wdXQgICBsb2dpYyAgIFszMTowXSAgICAgICAgICAgICAgICAgIHNyYW0wX2RvdXQwLAotCi0gICAgLy8gU1JBTS0wIFBPUlQtMQotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmFtMF9jbGsxLAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmFtMF9jc2IxLAotICAgIG91dHB1dCAgbG9naWMgIFs4OjBdICAgICAgICAgICAgICAgICAgICBzcmFtMF9hZGRyMSwKLSAgICBpbnB1dCAgIGxvZ2ljICBbMzE6MF0gICAgICAgICAgICAgICAgICAgc3JhbTBfZG91dDEsCi0KLSAgICAvLyBTUkFNLTEgUE9SVC0wCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYW0xX2NsazAsCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYW0xX2NzYjAsCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYW0xX3dlYjAsCi0gICAgb3V0cHV0ICBsb2dpYyAgIFs4OjBdICAgICAgICAgICAgICAgICAgIHNyYW0xX2FkZHIwLAotICAgIG91dHB1dCAgbG9naWMgICBbMzowXSAgICAgICAgICAgICAgICAgICBzcmFtMV93bWFzazAsCi0gICAgb3V0cHV0ICBsb2dpYyAgIFszMTowXSAgICAgICAgICAgICAgICAgIHNyYW0xX2RpbjAsCi0gICAgaW5wdXQgICBsb2dpYyAgIFszMTowXSAgICAgICAgICAgICAgICAgIHNyYW0xX2RvdXQwLAotCi0gICAgLy8gU1JBTS0xIFBPUlQtMQotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmFtMV9jbGsxLAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmFtMV9jc2IxLAotICAgIG91dHB1dCAgbG9naWMgIFs4OjBdICAgICAgICAgICAgICAgICAgICBzcmFtMV9hZGRyMSwKLSAgICBpbnB1dCAgIGxvZ2ljICBbMzE6MF0gICAgICAgICAgICAgICAgICAgc3JhbTFfZG91dDEsCi1gZW5kaWYKLQotCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiX3JzdF9uLCAgICAgICAvLyBXaXNoIGJvbmUgcmVzZXQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JfY2xrLCAgICAgICAgIC8vIHdpc2ggYm9uZSBjbG9jawotICAgIC8vIEluc3RydWN0aW9uIE1lbW9yeSBJbnRlcmZhY2UKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2ltZW1fc3RiX28sIC8vIHN0cm9iZS9yZXF1ZXN0Ci0gICAgb3V0cHV0ICBsb2dpYyAgIFtTQ1IxX1dCX1dJRFRILTE6MF0gICAgIHdiZF9pbWVtX2Fkcl9vLCAvLyBhZGRyZXNzCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9pbWVtX3dlX28sICAvLyB3cml0ZQotICAgIG91dHB1dCAgbG9naWMgICBbU0NSMV9XQl9XSURUSC0xOjBdICAgICB3YmRfaW1lbV9kYXRfbywgLy8gZGF0YSBvdXRwdXQKLSAgICBvdXRwdXQgIGxvZ2ljICAgWzM6MF0gICAgICAgICAgICAgICAgICAgd2JkX2ltZW1fc2VsX28sIC8vIGJ5dGUgZW5hYmxlCi0gICAgaW5wdXQgICBsb2dpYyAgIFtTQ1IxX1dCX1dJRFRILTE6MF0gICAgIHdiZF9pbWVtX2RhdF9pLCAvLyBkYXRhIGlucHV0Ci0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9pbWVtX2Fja19pLCAvLyBhY2tub3dsZWdlbWVudAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfaW1lbV9lcnJfaSwgIC8vIGVycm9yCi0KLSAgICAvLyBEYXRhIE1lbW9yeSBJbnRlcmZhY2UKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2RtZW1fc3RiX28sIC8vIHN0cm9iZS9yZXF1ZXN0Ci0gICAgb3V0cHV0ICBsb2dpYyAgIFtTQ1IxX1dCX1dJRFRILTE6MF0gICAgIHdiZF9kbWVtX2Fkcl9vLCAvLyBhZGRyZXNzCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9kbWVtX3dlX28sICAvLyB3cml0ZQotICAgIG91dHB1dCAgbG9naWMgICBbU0NSMV9XQl9XSURUSC0xOjBdICAgICB3YmRfZG1lbV9kYXRfbywgLy8gZGF0YSBvdXRwdXQKLSAgICBvdXRwdXQgIGxvZ2ljICAgWzM6MF0gICAgICAgICAgICAgICAgICAgd2JkX2RtZW1fc2VsX28sIC8vIGJ5dGUgZW5hYmxlCi0gICAgaW5wdXQgICBsb2dpYyAgIFtTQ1IxX1dCX1dJRFRILTE6MF0gICAgIHdiZF9kbWVtX2RhdF9pLCAvLyBkYXRhIGlucHV0Ci0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9kbWVtX2Fja19pLCAvLyBhY2tub3dsZWdlbWVudAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfZG1lbV9lcnJfaSAgLy8gZXJyb3IKLSk7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgcGFyYW1ldGVycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1sb2NhbHBhcmFtIGludCB1bnNpZ25lZCBTQ1IxX0NMVVNURVJfVE9QX1JTVF9TWU5DX1NUQUdFU19OVU0gICAgICAgICAgICA9IDI7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgc2lnbmFsIGRlY2xhcmF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJlc2V0IGxvZ2ljCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9tb2RlOyAgICAgICAgICAgICAgLy8gVGVzdCBtb2RlIC0gdW51c2VkCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9yc3RfbjsgICAgICAgICAgICAgLy8gVGVzdCBtb2RlJ3MgcmVzZXQgLSB1bnVzZWQKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwd3J1cF9yc3Rfbl9zeW5jOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uX3N5bmM7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1X3JzdF9uX3N5bmM7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9yc3Rfbl9sb2NhbDsKLWBpZmRlZiBTQ1IxX0RCR19FTgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNfdHJzdF9uOwotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KLS8vIEluc3RydWN0aW9uIG1lbW9yeSBpbnRlcmZhY2UgZnJvbSBjb3JlIHRvIHJvdXRlcgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfaW1lbV9yZXFfYWNrOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfaW1lbV9yZXE7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9pbWVtX2NtZDsKLWxvZ2ljIFtgU0NSMV9JTUVNX0FXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2ltZW1fYWRkcjsKLWxvZ2ljIFtgU0NSMV9JTUVNX0RXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2ltZW1fcmRhdGE7Ci1sb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9pbWVtX3Jlc3A7Ci0KLS8vIERhdGEgbWVtb3J5IGludGVyZmFjZSBmcm9tIGNvcmUgdG8gcm91dGVyCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9kbWVtX3JlcV9hY2s7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9kbWVtX3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2RtZW1fY21kOwotbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfZG1lbV93aWR0aDsKLWxvZ2ljIFtgU0NSMV9ETUVNX0FXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2RtZW1fYWRkcjsKLWxvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2RtZW1fd2RhdGE7Ci1sb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgY29yZV9kbWVtX3JkYXRhOwotbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfZG1lbV9yZXNwOwotCi0vLyBJbnN0cnVjdGlvbiBtZW1vcnkgaW50ZXJmYWNlIGZyb20gcm91dGVyIHRvIFdCIGJyaWRnZQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiX2ltZW1fcmVxX2FjazsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Yl9pbWVtX3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Yl9pbWVtX2NtZDsKLWxvZ2ljIFtgU0NSMV9JTUVNX0FXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICB3Yl9pbWVtX2FkZHI7Ci1sb2dpYyBbYFNDUjFfSU1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgd2JfaW1lbV9yZGF0YTsKLWxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Yl9pbWVtX3Jlc3A7Ci0KLS8vIERhdGEgbWVtb3J5IGludGVyZmFjZSBmcm9tIHJvdXRlciB0byBXQiBicmlkZ2UKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Yl9kbWVtX3JlcV9hY2s7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JfZG1lbV9yZXE7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JfZG1lbV9jbWQ7Ci1sb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JfZG1lbV93aWR0aDsKLWxvZ2ljIFtgU0NSMV9ETUVNX0FXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICB3Yl9kbWVtX2FkZHI7Ci1sb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgd2JfZG1lbV93ZGF0YTsKLWxvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICB3Yl9kbWVtX3JkYXRhOwotbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiX2RtZW1fcmVzcDsKLQotYGlmZGVmIFNDUjFfVENNX0VOCi0vLyBJbnN0cnVjdGlvbiBtZW1vcnkgaW50ZXJmYWNlIGZyb20gcm91dGVyIHRvIFRDTQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjbV9pbWVtX3JlcV9hY2s7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNtX2ltZW1fcmVxOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjbV9pbWVtX2NtZDsKLWxvZ2ljIFtgU0NSMV9JTUVNX0FXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICB0Y21faW1lbV9hZGRyOwotbG9naWMgW2BTQ1IxX0lNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIHRjbV9pbWVtX3JkYXRhOwotbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjbV9pbWVtX3Jlc3A7Ci0KLS8vIERhdGEgbWVtb3J5IGludGVyZmFjZSBmcm9tIHJvdXRlciB0byBUQ00KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y21fZG1lbV9yZXFfYWNrOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjbV9kbWVtX3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y21fZG1lbV9jbWQ7Ci1sb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNtX2RtZW1fd2lkdGg7Ci1sb2dpYyBbYFNDUjFfRE1FTV9BV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgdGNtX2RtZW1fYWRkcjsKLWxvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICB0Y21fZG1lbV93ZGF0YTsKLWxvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICB0Y21fZG1lbV9yZGF0YTsKLWxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y21fZG1lbV9yZXNwOwotYGVuZGlmIC8vIFNDUjFfVENNX0VOCi0KLS8vIERhdGEgbWVtb3J5IGludGVyZmFjZSBmcm9tIHJvdXRlciB0byBtZW1vcnktbWFwcGVkIHRpbWVyCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfZG1lbV9yZXFfYWNrOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX2RtZW1fcmVxOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX2RtZW1fY21kOwotbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX2RtZW1fd2lkdGg7Ci1sb2dpYyBbYFNDUjFfRE1FTV9BV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfZG1lbV9hZGRyOwotbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX2RtZW1fd2RhdGE7Ci1sb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfZG1lbV9yZGF0YTsKLWxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl9kbWVtX3Jlc3A7Ci0KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl9pcnE7Ci1sb2dpYyBbNjM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfdmFsOwotbG9naWMgWzQ4OjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfZGVidWc7Ci0KLS8vIHJpc2N2IGNsb2NrIHNrZXcgY29udHJvbAotY2xrX3NrZXdfYWRqdXN0IHVfc2tld19yaXNjdgotICAgICAgICgKLWBpZmRlZiBVU0VfUE9XRVJfUElOUwotICAgICAgICAgICAgICAgLnZjY2QxICAgICAgKHZjY2QxICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgMS44ViBzdXBwbHkKLSAgICAgICAgICAgICAgIC52c3NkMSAgICAgICh2c3NkMSAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCi1gZW5kaWYKLQkgICAgICAgLmNsa19pbiAgICAgKHdiZF9jbGtfaW50ICAgICAgICAgICAgICAgICksIAotCSAgICAgICAuc2VsICAgICAgICAoY2ZnX2Nza2FfcmlzY3YgICAgICAgICAgICAgKSwgCi0JICAgICAgIC5jbGtfb3V0ICAgICh3YmRfY2xrX3Jpc2N2ICAgICAgICAgICAgICApIAotICAgICAgICk7Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFNDUjEgSW50ZiBpbnN0YW5jZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zY3IxX2ludGYgdV9pbnRmICgKLSAgICAvLyBDb250cm9sCi0gICAgLnB3cnVwX3JzdF9uICAgICAgICAgICAgICAgICAgICAgICAgKHB3cnVwX3JzdF9uKSwgICAgICAgIC8vIFBvd2VyLVVwIFJlc2V0Ci0gICAgLnJzdF9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJzdF9uKSwgICAgICAgICAgICAgIC8vIFJlZ3VsYXIgUmVzZXQgc2lnbmFsCi0gICAgLmNwdV9yc3RfbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNwdV9yc3RfbiksICAgICAgICAgIC8vIENQVSBSZXNldCAoQ29yZSBSZXNldCkKLSAgICAuY29yZV9jbGsgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29yZV9jbGspLCAgICAgICAgICAgLy8gQ29yZSBjbG9jawotICAgIC5ydGNfY2xrICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydGNfY2xrKSwgICAgICAgICAgICAvLyBSZWFsLXRpbWUgY2xvY2sKLSAgICAucmlzY3ZfZGVidWcgICAgICAgICAgICAgICAgICAgICAgICAocmlzY3ZfZGVidWcpLAotCi1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICAvLyAtLSBKVEFHIEkvRgotICAgIC50cnN0X24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0cnN0X24pLAotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KLWBpZm5kZWYgU0NSMV9UQ01fTUVNCi0gICAgLy8gU1JBTS0wIFBPUlQtMAotICAgIC5zcmFtMF9jbGswICAgICAgKHNyYW0wX2NsazApLAotICAgIC5zcmFtMF9jc2IwICAgICAgKHNyYW0wX2NzYjApLAotICAgIC5zcmFtMF93ZWIwICAgICAgKHNyYW0wX3dlYjApLAotICAgIC5zcmFtMF9hZGRyMCAgICAgKHNyYW0wX2FkZHIwKSwKLSAgICAuc3JhbTBfd21hc2swICAgIChzcmFtMF93bWFzazApLAotICAgIC5zcmFtMF9kaW4wICAgICAgKHNyYW0wX2RpbjApLAotICAgIC5zcmFtMF9kb3V0MCAgICAgKHNyYW0wX2RvdXQwKSwKLSAgICAKLSAgICAvLyBTUkFNLTAgUE9SVC0xCi0gICAgLnNyYW0wX2NsazEgICAgICAoc3JhbTBfY2xrMSksCi0gICAgLnNyYW0wX2NzYjEgICAgICAoc3JhbTBfY3NiMSksCi0gICAgLnNyYW0wX2FkZHIxICAgICAoc3JhbTBfYWRkcjEpLAotICAgIC5zcmFtMF9kb3V0MSAgICAgKHNyYW0wX2RvdXQxKSwKLSAgICAKLSAgICAvLyBTUkFNLTEgUE9SVC0wCi0gICAgLnNyYW0xX2NsazAgICAgICAoc3JhbTFfY2xrMCksCi0gICAgLnNyYW0xX2NzYjAgICAgICAoc3JhbTFfY3NiMCksCi0gICAgLnNyYW0xX3dlYjAgICAgICAoc3JhbTFfd2ViMCksCi0gICAgLnNyYW0xX2FkZHIwICAgICAoc3JhbTFfYWRkcjApLAotICAgIC5zcmFtMV93bWFzazAgICAgKHNyYW0xX3dtYXNrMCksCi0gICAgLnNyYW0xX2RpbjAgICAgICAoc3JhbTFfZGluMCksCi0gICAgLnNyYW0xX2RvdXQwICAgICAoc3JhbTFfZG91dDApLAotICAgIAotICAgIC8vIFNSQU0tMSBQT1JULTEKLSAgICAuc3JhbTFfY2xrMSAgICAgIChzcmFtMV9jbGsxKSwKLSAgICAuc3JhbTFfY3NiMSAgICAgIChzcmFtMV9jc2IxKSwKLSAgICAuc3JhbTFfYWRkcjEgICAgIChzcmFtMV9hZGRyMSksCi0gICAgLnNyYW0xX2RvdXQxICAgICAoc3JhbTFfZG91dDEpLAotYGVuZGlmCi0KLSAgICAud2JfcnN0X24gICAgICAgICAgICAgICAgICAgICAgICAgICAod2JfcnN0X24pLCAgICAgICAgICAgLy8gV2lzaCBib25lIHJlc2V0Ci0gICAgLndiX2NsayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHdiX2NsayksICAgICAgICAgICAgIC8vIHdpc2ggYm9uZSBjbG9jawotCi0gICAgLy8gSW5zdHJ1Y3Rpb24gTWVtb3J5IEludGVyZmFjZQotICAgIC53YmRfaW1lbV9zdGJfbyAgICAgICAgICAgICAgICAgICAgICh3YmRfaW1lbV9zdGJfbyksICAgICAvLyBzdHJvYmUvcmVxdWVzdAotICAgIC53YmRfaW1lbV9hZHJfbyAgICAgICAgICAgICAgICAgICAgICh3YmRfaW1lbV9hZHJfbyksICAgICAvLyBhZGRyZXNzCi0gICAgLndiZF9pbWVtX3dlX28gICAgICAgICAgICAgICAgICAgICAgKHdiZF9pbWVtX3dlX28pLCAgICAgIC8vIHdyaXRlCi0gICAgLndiZF9pbWVtX2RhdF9vICAgICAgICAgICAgICAgICAgICAgKHdiZF9pbWVtX2RhdF9vKSwgICAgIC8vIGRhdGEgb3V0cHV0Ci0gICAgLndiZF9pbWVtX3NlbF9vICAgICAgICAgICAgICAgICAgICAgKHdiZF9pbWVtX3NlbF9vKSwgICAgIC8vIGJ5dGUgZW5hYmxlCi0gICAgLndiZF9pbWVtX2RhdF9pICAgICAgICAgICAgICAgICAgICAgKHdiZF9pbWVtX2RhdF9pKSwgICAgIC8vIGRhdGEgaW5wdXQKLSAgICAud2JkX2ltZW1fYWNrX2kgICAgICAgICAgICAgICAgICAgICAod2JkX2ltZW1fYWNrX2kpLCAgICAgLy8gYWNrbm93bGVnZW1lbnQKLSAgICAud2JkX2ltZW1fZXJyX2kgICAgICAgICAgICAgICAgICAgICAod2JkX2ltZW1fZXJyX2kpLCAgICAgLy8gZXJyb3IKLQotICAgIC8vIERhdGEgTWVtb3J5IEludGVyZmFjZQotICAgIC53YmRfZG1lbV9zdGJfbyAgICAgICAgICAgICAgICAgICAgICh3YmRfZG1lbV9zdGJfbyksICAgICAvLyBzdHJvYmUvcmVxdWVzdAotICAgIC53YmRfZG1lbV9hZHJfbyAgICAgICAgICAgICAgICAgICAgICh3YmRfZG1lbV9hZHJfbyksICAgICAvLyBhZGRyZXNzCi0gICAgLndiZF9kbWVtX3dlX28gICAgICAgICAgICAgICAgICAgICAgKHdiZF9kbWVtX3dlX28pLCAgICAgIC8vIHdyaXRlCi0gICAgLndiZF9kbWVtX2RhdF9vICAgICAgICAgICAgICAgICAgICAgKHdiZF9kbWVtX2RhdF9vKSwgICAgIC8vIGRhdGEgb3V0cHV0Ci0gICAgLndiZF9kbWVtX3NlbF9vICAgICAgICAgICAgICAgICAgICAgKHdiZF9kbWVtX3NlbF9vKSwgICAgIC8vIGJ5dGUgZW5hYmxlCi0gICAgLndiZF9kbWVtX2RhdF9pICAgICAgICAgICAgICAgICAgICAgKHdiZF9kbWVtX2RhdF9pKSwgICAgIC8vIGRhdGEgaW5wdXQKLSAgICAud2JkX2RtZW1fYWNrX2kgICAgICAgICAgICAgICAgICAgICAod2JkX2RtZW1fYWNrX2kpLCAgICAgLy8gYWNrbm93bGVnZW1lbnQKLSAgICAud2JkX2RtZW1fZXJyX2kgICAgICAgICAgICAgICAgICAgICAod2JkX2RtZW1fZXJyX2kpLCAgICAgLy8gZXJyb3IKLQotICAgIC8vIENvbW1vbgotICAgIC5wd3J1cF9yc3Rfbl9zeW5jICAgICAgICAgICAgICAgICAgIChwd3J1cF9yc3Rfbl9zeW5jKSwgICAvLyBQb3dlci1VcCByZXNldAotICAgIC5yc3Rfbl9zeW5jICAgICAgICAgICAgICAgICAgICAgICAgIChyc3Rfbl9zeW5jKSwgICAgICAgICAvLyBSZWd1bGFyIHJlc2V0Ci0gICAgLmNwdV9yc3Rfbl9zeW5jICAgICAgICAgICAgICAgICAgICAgKGNwdV9yc3Rfbl9zeW5jKSwgICAgIC8vIENQVSByZXNldAotICAgIC50ZXN0X21vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICh0ZXN0X21vZGUpLCAgICAgICAgICAvLyBERlQgVGVzdCBNb2RlCi0gICAgLnRlc3RfcnN0X24gICAgICAgICAgICAgICAgICAgICAgICAgKHRlc3RfcnN0X24pLCAgICAgICAgIC8vIERGVCBUZXN0IFJlc2V0Ci0gICAgLmNvcmVfcnN0X25fbG9jYWwgICAgICAgICAgICAgICAgICAgKGNvcmVfcnN0X25fbG9jYWwpLCAgIC8vIENvcmUgcmVzZXQKLSAgICAuY29yZV9kZWJ1ZyAgICAgICAgICAgICAgICAgICAgICAgICAoY29yZV9kZWJ1ZyAgKSwKLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgIC8vIERlYnVnIEludGVyZmFjZQotICAgIC50YXBjX3Ryc3RfbiAgICAgICAgICAgICAgICAgICAgICAgICh0YXBjX3Ryc3RfbiksICAgICAgICAvLyBUZXN0IFJlc2V0IChUUlNUbikKLWBlbmRpZgotICAgIC8vIE1lbW9yeS1tYXBwZWQgZXh0ZXJuYWwgdGltZXIKLSAgICAudGltZXJfdmFsICAgICAgICAgICAgICAgICAgICAgICAgICAodGltZXJfdmFsKSwgICAgICAgICAgLy8gTWFjaGluZSB0aW1lciB2YWx1ZQotICAgIC50aW1lcl9pcnEgICAgICAgICAgICAgICAgICAgICAgICAgICh0aW1lcl9pcnEpLCAgICAgICAgICAvLyBNYWNoaW5lIHRpbWVyIHZhbHVlCi0gICAgLy8gSW5zdHJ1Y3Rpb24gTWVtb3J5IEludGVyZmFjZQotICAgIC5jb3JlX2ltZW1fcmVxX2FjayAgICAgICAgICAgICAgICAgIChjb3JlX2ltZW1fcmVxX2FjayksICAvLyBJTUVNIHJlcXVlc3QgYWNrbm93bGVkZ2UKLSAgICAuY29yZV9pbWVtX3JlcSAgICAgICAgICAgICAgICAgICAgICAoY29yZV9pbWVtX3JlcSksICAgICAgLy8gSU1FTSByZXF1ZXN0Ci0gICAgLmNvcmVfaW1lbV9jbWQgICAgICAgICAgICAgICAgICAgICAgKGNvcmVfaW1lbV9jbWQpLCAgICAgIC8vIElNRU0gY29tbWFuZAotICAgIC5jb3JlX2ltZW1fYWRkciAgICAgICAgICAgICAgICAgICAgIChjb3JlX2ltZW1fYWRkciksICAgICAvLyBJTUVNIGFkZHJlc3MKLSAgICAuY29yZV9pbWVtX3JkYXRhICAgICAgICAgICAgICAgICAgICAoY29yZV9pbWVtX3JkYXRhKSwgICAgLy8gSU1FTSByZWFkIGRhdGEKLSAgICAuY29yZV9pbWVtX3Jlc3AgICAgICAgICAgICAgICAgICAgICAoY29yZV9pbWVtX3Jlc3ApLCAgICAgLy8gSU1FTSByZXNwb25zZQotCi0gICAgLy8gRGF0YSBNZW1vcnkgSW50ZXJmYWNlCi0gICAgLmNvcmVfZG1lbV9yZXFfYWNrICAgICAgICAgICAgICAgICAgKGNvcmVfZG1lbV9yZXFfYWNrKSwgIC8vIERNRU0gcmVxdWVzdCBhY2tub3dsZWRnZQotICAgIC5jb3JlX2RtZW1fcmVxICAgICAgICAgICAgICAgICAgICAgIChjb3JlX2RtZW1fcmVxKSwgICAgICAvLyBETUVNIHJlcXVlc3QKLSAgICAuY29yZV9kbWVtX2NtZCAgICAgICAgICAgICAgICAgICAgICAoY29yZV9kbWVtX2NtZCksICAgICAgLy8gRE1FTSBjb21tYW5kCi0gICAgLmNvcmVfZG1lbV93aWR0aCAgICAgICAgICAgICAgICAgICAgKGNvcmVfZG1lbV93aWR0aCksICAgIC8vIERNRU0gZGF0YSB3aWR0aAotICAgIC5jb3JlX2RtZW1fYWRkciAgICAgICAgICAgICAgICAgICAgIChjb3JlX2RtZW1fYWRkciksICAgICAvLyBETUVNIGFkZHJlc3MKLSAgICAuY29yZV9kbWVtX3dkYXRhICAgICAgICAgICAgICAgICAgICAoY29yZV9kbWVtX3dkYXRhKSwgICAgLy8gRE1FTSB3cml0ZSBkYXRhCi0gICAgLmNvcmVfZG1lbV9yZGF0YSAgICAgICAgICAgICAgICAgICAgKGNvcmVfZG1lbV9yZGF0YSksICAgIC8vIERNRU0gcmVhZCBkYXRhCi0gICAgLmNvcmVfZG1lbV9yZXNwICAgICAgICAgICAgICAgICAgICAgKGNvcmVfZG1lbV9yZXNwKSAgICAgIC8vIERNRU0gcmVzcG9uc2UKLQotKTsKLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFNDUjEgY29yZSBpbnN0YW5jZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zY3IxX2NvcmVfdG9wIGlfY29yZV90b3AgKAotICAgIC8vIENvbW1vbgotICAgIC5wd3J1cF9yc3RfbiAgICAgICAgICAgICAgICAocHdydXBfcnN0X25fc3luYyApLAotICAgIC5yc3RfbiAgICAgICAgICAgICAgICAgICAgICAocnN0X25fc3luYyAgICAgICApLAotICAgIC5jcHVfcnN0X24gICAgICAgICAgICAgICAgICAoY3B1X3JzdF9uX3N5bmMgICApLAotICAgIC50ZXN0X21vZGUgICAgICAgICAgICAgICAgICAodGVzdF9tb2RlICAgICAgICApLAotICAgIC50ZXN0X3JzdF9uICAgICAgICAgICAgICAgICAodGVzdF9yc3RfbiAgICAgICApLAotICAgIC5jbGsgICAgICAgICAgICAgICAgICAgICAgICAoY29yZV9jbGsgICAgICAgICApLAotICAgIC5jb3JlX3JzdF9uX28gICAgICAgICAgICAgICAoY29yZV9yc3Rfbl9sb2NhbCApLAotICAgIC5jb3JlX3JkY19xbGZ5X28gICAgICAgICAgICAoICAgICAgICAgICAgICAgICApLAotICAgIC5jb3JlX2RlYnVnICAgICAgICAgICAgICAgICAoY29yZV9kZWJ1ZyAgICAgICApLAotYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgLnN5c19yc3Rfbl9vICAgICAgICAgICAgICAgIChzeXNfcnN0X25fbyAgICAgICksCi0gICAgLnN5c19yZGNfcWxmeV9vICAgICAgICAgICAgIChzeXNfcmRjX3FsZnlfbyAgICksCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotICAgIC8vIEZ1c2VzCi0gICAgLmNvcmVfZnVzZV9taGFydGlkX2kgICAgICAgIChmdXNlX21oYXJ0aWQgICAgICksCi1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICAudGFwY19mdXNlX2lkY29kZV9pICAgICAgICAgKGZ1c2VfaWRjb2RlICAgICAgKSwKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi0gICAgLy8gSVJRCi1gaWZkZWYgU0NSMV9JUElDX0VOCi0gICAgLmNvcmVfaXJxX2xpbmVzX2kgICAgICAgICAgIChpcnFfbGluZXMgICAgICAgICksCi1gZWxzZSAvLyBTQ1IxX0lQSUNfRU4KLSAgICAuY29yZV9pcnFfZXh0X2kgICAgICAgICAgICAgKGV4dF9pcnEgICAgICAgICAgKSwKLWBlbmRpZiAvLyBTQ1IxX0lQSUNfRU4KLSAgICAuY29yZV9pcnFfc29mdF9pICAgICAgICAgICAgKHNvZnRfaXJxICAgICAgICAgKSwKLSAgICAuY29yZV9pcnFfbXRpbWVyX2kgICAgICAgICAgKHRpbWVyX2lycSAgICAgICAgKSwKLQotICAgIC8vIE1lbW9yeS1tYXBwZWQgZXh0ZXJuYWwgdGltZXIKLSAgICAuY29yZV9tdGltZXJfdmFsX2kgICAgICAgICAgKHRpbWVyX3ZhbCAgICAgICAgKSwKLQotYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgLy8gRGVidWcgaW50ZXJmYWNlCi0gICAgLnRhcGNfdHJzdF9uICAgICAgICAgICAgICAgICh0YXBjX3Ryc3RfbiAgICAgICksCi0gICAgLnRhcGNfdGNrICAgICAgICAgICAgICAgICAgICh0Y2sgICAgICAgICAgICAgICksCi0gICAgLnRhcGNfdG1zICAgICAgICAgICAgICAgICAgICh0bXMgICAgICAgICAgICAgICksCi0gICAgLnRhcGNfdGRpICAgICAgICAgICAgICAgICAgICh0ZGkgICAgICAgICAgICAgICksCi0gICAgLnRhcGNfdGRvICAgICAgICAgICAgICAgICAgICh0ZG8gICAgICAgICAgICAgICksCi0gICAgLnRhcGNfdGRvX2VuICAgICAgICAgICAgICAgICh0ZG9fZW4gICAgICAgICAgICksCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotICAgIC8vIEluc3RydWN0aW9uIG1lbW9yeSBpbnRlcmZhY2UKLSAgICAuaW1lbTJjb3JlX3JlcV9hY2tfaSAgICAgICAgKGNvcmVfaW1lbV9yZXFfYWNrKSwKLSAgICAuY29yZTJpbWVtX3JlcV9vICAgICAgICAgICAgKGNvcmVfaW1lbV9yZXEgICAgKSwKLSAgICAuY29yZTJpbWVtX2NtZF9vICAgICAgICAgICAgKGNvcmVfaW1lbV9jbWQgICAgKSwKLSAgICAuY29yZTJpbWVtX2FkZHJfbyAgICAgICAgICAgKGNvcmVfaW1lbV9hZGRyICAgKSwKLSAgICAuaW1lbTJjb3JlX3JkYXRhX2kgICAgICAgICAgKGNvcmVfaW1lbV9yZGF0YSAgKSwKLSAgICAuaW1lbTJjb3JlX3Jlc3BfaSAgICAgICAgICAgKGNvcmVfaW1lbV9yZXNwICAgKSwKLQotICAgIC8vIERhdGEgbWVtb3J5IGludGVyZmFjZQotICAgIC5kbWVtMmNvcmVfcmVxX2Fja19pICAgICAgICAoY29yZV9kbWVtX3JlcV9hY2spLAotICAgIC5jb3JlMmRtZW1fcmVxX28gICAgICAgICAgICAoY29yZV9kbWVtX3JlcSAgICApLAotICAgIC5jb3JlMmRtZW1fY21kX28gICAgICAgICAgICAoY29yZV9kbWVtX2NtZCAgICApLAotICAgIC5jb3JlMmRtZW1fd2lkdGhfbyAgICAgICAgICAoY29yZV9kbWVtX3dpZHRoICApLAotICAgIC5jb3JlMmRtZW1fYWRkcl9vICAgICAgICAgICAoY29yZV9kbWVtX2FkZHIgICApLAotICAgIC5jb3JlMmRtZW1fd2RhdGFfbyAgICAgICAgICAoY29yZV9kbWVtX3dkYXRhICApLAotICAgIC5kbWVtMmNvcmVfcmRhdGFfaSAgICAgICAgICAoY29yZV9kbWVtX3JkYXRhICApLAotICAgIC5kbWVtMmNvcmVfcmVzcF9pICAgICAgICAgICAoY29yZV9kbWVtX3Jlc3AgICApCi0pOwotCi0KLQotZW5kbW9kdWxlIDogc2NyMV90b3Bfd2IKLQotCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvd2JfdG9wLmZpbGVzIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL3diX3RvcC5maWxlcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQ2N2IwYy4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvd2JfdG9wLmZpbGVzCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQotLy8gCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAotLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+Ci0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotdG9wL3NjcjFfZG1lbV9yb3V0ZXIuc3YKLXRvcC9zY3IxX2RwX21lbW9yeS5zdgotdG9wL3NjcjFfdGNtLnN2Ci10b3Avc2NyMV90aW1lci5zdgotdG9wL3NjcjFfZG1lbV93Yi5zdgotdG9wL3NjcjFfaW1lbV93Yi5zdgotdG9wL3NjcjFfdG9wX3diLnN2Ci10b3Avc2NyMV9pbnRmLnN2Ci0uLi8uLi8uLi9saWIvc3luY19maWZvLnN2CmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zeW50aC9NYWtlZmlsZSBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3N5bnRoL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGNkNDUwLi4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3N5bnRoL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotIyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSMgLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEKLSMgLy8gCi0jIC8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyAvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIC8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIyAvLwotIyAvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIyAvLwotIyAvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIC8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIC8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIyAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAotIyAvLyBTUERYLUZpbGVDb250cmlidXRvcjogRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KLSMgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgTWFrZWZpbGUgZm9yIFN5bnRoZXNpcwotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jIFBhdGhzCi1leHBvcnQgUk9PVF9ESVIgOj0gJChzaGVsbCBwd2QpCi1leHBvcnQgREVTSUdOX0ZJTEUgIDo9ICQoUk9PVF9ESVIpL3N5bnRhY29yZS5zdgotZXhwb3J0IFNZTlRIX0xPRyAgICA6PSAkKFJPT1RfRElSKS9zeW50aC5sb2cKLWV4cG9ydCBSRVBPUlRfRElSICA6PSAkKFJPT1RfRElSKS9yZXBvcnRzCi1leHBvcnQgTkVUTElTVF9ESVIgIDo9ICQoUk9PVF9ESVIpL25ldGxpc3QKLWV4cG9ydCBUTVBfRElSICA6PSAkKFJPT1RfRElSKS90bXAKLQotCi0jIFRhcmdldHMKLS5QSE9OWTogY2xlYW4gY3JlYXRlIG1lcmdlIHN5bnRoCi0KLWRlZmF1bHQ6IGNsZWFuIGNyZWF0ZSBtZXJnZSBzeW50aAotCi1zeW50aDogY2xlYW4gY3JlYXRlIG1lcmdlIAotCXlvc3lzIC1nIC1jIHN5bnRoLnRjbCAtbCBzeW50aC5sb2cKLQotY3JlYXRlOgotCW1rZGlyIC1wIC4vdG1wL3N5bnRoZXNpczsgCi0JbWtkaXIgLXAgLi9yZXBvcnRzOyAKLQlta2RpciAtcCAuL25ldGxpc3Q7Ci0JJChPUEVOTEFORV9ST09UKS9zY3JpcHRzL2xpYnRyaW0ucGwgJChQREtfUk9PVCkvc2t5MTMwQS9saWJzLnJlZi9za3kxMzBfZmRfc2NfaGQvbGliL3NreTEzMF9mZF9zY19oZF9fdHRfMDI1Q18xdjgwLmxpYiAkKFBES19ST09UKS9za3kxMzBBL2xpYnMudGVjaC9vcGVubGFuZS9za3kxMzBfZmRfc2NfaGQvbm9fc3ludGguY2VsbHMgPiAuL3RtcC90cmltbWVkLmxpYgotCSNjcmVhdGUgTm8gUEcgUGluIGxpYnJhcnkgZm9yIGhhbmQgaW5zdGFudGlhdGVkIGNlbGxzCi0Jc2VkICcvcGdfcGluLiovYSBcICAgICAgICAgZGlyZWN0aW9uIDogImlub3V0IjsnICAkKFBES19ST09UKS9za3kxMzBBL2xpYnMucmVmL3NreTEzMF9mZF9zY19oZC9saWIvc2t5MTMwX2ZkX3NjX2hkX190dF8wMjVDXzF2ODAubGliICA+IC4vdG1wL3NreTEzMF9mZF9zY19oZF9fdHRfMDI1Q18xdjgwLm5vX3BnLmxpYgotCXNlZCAtaSAncy9wZ19waW4vcGluLycgLi90bXAvc2t5MTMwX2ZkX3NjX2hkX190dF8wMjVDXzF2ODAubm9fcGcubGliCi0KLW1lcmdlOiAKLQkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgCi0JIyB5b3N5cyBoYXMgaXNzdWUgaW4gcHJvcGdhdGluZyB0aGUgZ29sYmFsIHBhcmFtZXRlciBmcm9tIG9uZSBmaWxlIHRvIG90aGVyIGZpbGUgCi0JIyB0byBmaXggdGhpcyBpc3N1ZSwgd2UgaGF2ZSBjb25jYXRpbmF0ZWQgYWxsIHRoZSBydGwgZmlsZSBpbnRvIHNpbmdsZSBmaWxlIGJlZm9yZSBzdGFydGluZyBzeW50aGVzaXMgCi0JIyBvbmx5IG1lbW9yeSBhcmUgZXhjbGRlZCBmcm9tIHRoaXMgbGlzdCAKLQkjICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCWNhdCAuLi9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfdG9wLnN2ID4gc3ludGFjb3JlLnN2OyAKLQljYXQgLi4vc3JjL2NvcmUvc2NyMV9jb3JlX3RvcC5zdiA+PiBzeW50YWNvcmUuc3Y7IAotCWNhdCAuLi9zcmMvY29yZS9zY3IxX2RtLnN2ID4+IHN5bnRhY29yZS5zdjsgCi0JY2F0IC4uL3NyYy9jb3JlL3NjcjFfdGFwY19zeW5jaHJvbml6ZXIuc3YgPj4gc3ludGFjb3JlLnN2OyAKLQljYXQgLi4vc3JjL2NvcmUvc2NyMV9jbGtfY3RybC5zdiA+PiBzeW50YWNvcmUuc3Y7IAotCWNhdCAuLi9zcmMvY29yZS9zY3IxX3NjdS5zdiA+PiBzeW50YWNvcmUuc3Y7IAotCWNhdCAuLi9zcmMvY29yZS9zY3IxX3RhcGMuc3YgPj4gc3ludGFjb3JlLnN2OyAKLQljYXQgLi4vc3JjL2NvcmUvc2NyMV90YXBjX3NoaWZ0X3JlZy5zdiA+PiBzeW50YWNvcmUuc3Y7IAotCWNhdCAuLi9zcmMvY29yZS9zY3IxX2RtaS5zdiA+PiBzeW50YWNvcmUuc3Y7IAotCWNhdCAuLi9zcmMvY29yZS9wcmltaXRpdmVzL3NjcjFfcmVzZXRfY2VsbHMuc3YgPj4gc3ludGFjb3JlLnN2OyAKLQljYXQgLi4vc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2lmdS5zdiA+PiBzeW50YWNvcmUuc3Y7IAotCWNhdCAuLi9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfaWR1LnN2ID4+IHN5bnRhY29yZS5zdjsgCi0JY2F0IC4uL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9leHUuc3YgPj4gc3ludGFjb3JlLnN2OyAKLQljYXQgLi4vc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX21wcmYuc3YgPj4gc3ludGFjb3JlLnN2OyAKLQljYXQgLi4vc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2Nzci5zdiA+PiBzeW50YWNvcmUuc3Y7IAotCWNhdCAuLi9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfaWFsdS5zdiA+PiBzeW50YWNvcmUuc3Y7IAotCWNhdCAuLi9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfbHN1LnN2ID4+IHN5bnRhY29yZS5zdjsgCi0JY2F0IC4uL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9oZHUuc3YgPj4gc3ludGFjb3JlLnN2OyAKLQljYXQgLi4vc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX3RkdS5zdiA+PiBzeW50YWNvcmUuc3Y7IAotCWNhdCAuLi9zcmMvY29yZS9waXBlbGluZS9zY3IxX2lwaWMuc3YgPj4gc3ludGFjb3JlLnN2OyAKLQljYXQgLi4vc3JjL3RvcC9zY3IxX2RtZW1fcm91dGVyLnN2ID4+IHN5bnRhY29yZS5zdjsgCi0JY2F0IC4uL3NyYy90b3Avc2NyMV9pbWVtX3JvdXRlci5zdiA+PiBzeW50YWNvcmUuc3Y7IAotCSNjYXQgLi4vc3JjL3RvcC9zY3IxX2RwX21lbW9yeS5zdiA+PiBzeW50YWNvcmUuc3Y7IAotCWNhdCAuLi9zcmMvdG9wL3NjcjFfdGNtLnN2ID4+IHN5bnRhY29yZS5zdjsgCi0JY2F0IC4uL3NyYy90b3Avc2NyMV90aW1lci5zdiA+PiBzeW50YWNvcmUuc3Y7IAotCSNjYXQgLi4vc3JjL3RvcC9zY3IxX2RtZW1fYWhiLnN2ID4+IHN5bnRhY29yZS5zdjsgCi0JI2NhdCAuLi9zcmMvdG9wL3NjcjFfaW1lbV9haGIuc3YgPj4gc3ludGFjb3JlLnN2OyAKLQljYXQgLi4vc3JjL3RvcC9zY3IxX3RvcF9heGkuc3YgPj4gc3ludGFjb3JlLnN2OyAKLQljYXQgLi4vc3JjL3RvcC9zY3IxX21lbV9heGkuc3Y+PiBzeW50YWNvcmUuc3Y7Ci0KLQotCi1jbGVhbjoKLQkkKFJNKSAkKERFU0lHTl9GSUxFKQotCSQoUk0pICQoU1lOVEhfTE9HKQotCSQoUk0pIC1SICQoUkVQT1JUX0RJUikKLQkkKFJNKSAtUiAkKE5FVExJU1RfRElSKQotCSQoUk0pIC1SICQoVE1QX0RJUikKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3N5bnRoL2Jhc2Uuc2RjIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3ludGgvYmFzZS5zZGMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0NzI5OGMuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3ludGgvYmFzZS5zZGMKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0jIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6ICAyMDIxICwgRGluZXNoIEFubmF5eWEKLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0jIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBNb2RpZmllZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgotCi0KLXNldF91bml0cyAtdGltZSBucwotI1dpc2hib25lIENsb2NrCi1zZXQgOjplbnYoV0JfQ0xPQ0tfUEVSSU9EKSAgICAiMTAiCi1zZXQgOjplbnYoV0JfQ0xPQ0tfUE9SVCkgICAgICAid2JfY2xrIgotc2V0IDo6ZW52KFdCX0NMT0NLX05BTUUpICAgICAgIndiX2NsayIKLQotI1Jpc2MgQ29yZSBDbG9jawotc2V0IDo6ZW52KENPUkVfQ0xPQ0tfUEVSSU9EKSAiMjAiCi1zZXQgOjplbnYoQ09SRV9DTE9DS19QT1JUKSAgICJjb3JlX2NsayIKLXNldCA6OmVudihDT1JFX0NMT0NLX05BTUUpICAgImNvcmVfY2xrIgotCi0jUlRDIENvcmUgQ2xvY2sKLXNldCA6OmVudihSVENfQ0xPQ0tfUEVSSU9EKSAiNDAiCi1zZXQgOjplbnYoUlRDX0NMT0NLX1BPUlQpICAgInJ0Y19jbGsiCi1zZXQgOjplbnYoUlRDX0NMT0NLX05BTUUpICAgInJ0Y19jbGsiCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENPUkUgQ2xvY2sgZG9tYWluIGlucHV0IG91dHB1dAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWNyZWF0ZV9jbG9jayBbZ2V0X3BvcnRzICQ6OmVudihDT1JFX0NMT0NLX1BPUlQpXSAgLW5hbWUgJDo6ZW52KENPUkVfQ0xPQ0tfTkFNRSkgIC1wZXJpb2QgJDo6ZW52KENPUkVfQ0xPQ0tfUEVSSU9EKQotc2V0IGNvcmVfaW5wdXRfZGVsYXlfdmFsdWUgW2V4cHIgJDo6ZW52KENPUkVfQ0xPQ0tfUEVSSU9EKSAqIDAuNl0KLXNldCBjb3JlX291dHB1dF9kZWxheV92YWx1ZSBbZXhwciAkOjplbnYoQ09SRV9DTE9DS19QRVJJT0QpICogMC42XQotcHV0cyAiXFtJTkZPXF06IFNldHRpbmcgY29yZSBvdXRwdXQgZGVsYXkgdG86ICRjb3JlX291dHB1dF9kZWxheV92YWx1ZSIKLXB1dHMgIlxbSU5GT1xdOiBTZXR0aW5nIGNvcmUgaW5wdXQgZGVsYXkgdG86ICRjb3JlX2lucHV0X2RlbGF5X3ZhbHVlIgotc2V0IGNvcmVfY2xrX2luZHggW2xzZWFyY2ggW2FsbF9pbnB1dHNdIFtnZXRfcG9ydCAkOjplbnYoQ09SRV9DTE9DS19OQU1FKV1dCi1zZXQgY29yZV9yc3RfaW5keCBbbHNlYXJjaCBbYWxsX2lucHV0c10gW2dldF9wb3J0IGNwdV9yc3Rfbl1dCi1zZXQgYWxsX2lucHV0c193b19jb3JlX2Nsa19yc3QgW2xyZXBsYWNlIFthbGxfaW5wdXRzXSAkY29yZV9jbGtfaW5keCAkY29yZV9yc3RfaW5keF0KLXNldCBhbGxfb3V0cHV0c19jb3JlIFthbGxfb3V0cHV0c10gCi0KLXNldF9pbnB1dF9kZWxheSAkY29yZV9pbnB1dF9kZWxheV92YWx1ZSAgLWNsb2NrIFtnZXRfY2xvY2tzICQ6OmVudihDT1JFX0NMT0NLX05BTUUpXSAkYWxsX2lucHV0c193b19jb3JlX2Nsa19yc3QKLXNldF9pbnB1dF9kZWxheSA1LjAgLWNsb2NrIFtnZXRfY2xvY2tzICQ6OmVudihDT1JFX0NMT0NLX05BTUUpXSB7Y3B1X3JzdF9ufQotc2V0X291dHB1dF9kZWxheSAkY29yZV9vdXRwdXRfZGVsYXlfdmFsdWUgIC1jbG9jayBbZ2V0X2Nsb2NrcyAkOjplbnYoQ09SRV9DTE9DS19OQU1FKV0gJGFsbF9vdXRwdXRzX2NvcmUKLQotY3JlYXRlX2Nsb2NrIFtnZXRfcG9ydHMgJDo6ZW52KFJUQ19DTE9DS19QT1JUKV0gIC1uYW1lICQ6OmVudihSVENfQ0xPQ0tfTkFNRSkgIC1wZXJpb2QgJDo6ZW52KFJUQ19DTE9DS19QRVJJT0QpCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFdCIENsb2NrIGRvbWFpbiBpbnB1dCBvdXRwdXQKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1jcmVhdGVfY2xvY2sgW2dldF9wb3J0cyAkOjplbnYoV0JfQ0xPQ0tfUE9SVCldICAtbmFtZSAkOjplbnYoV0JfQ0xPQ0tfTkFNRSkgIC1wZXJpb2QgJDo6ZW52KFdCX0NMT0NLX1BFUklPRCkKLXNldCB3Yl9pbnB1dF9kZWxheV92YWx1ZSBbZXhwciAkOjplbnYoV0JfQ0xPQ0tfUEVSSU9EKSAqIDAuNl0KLXNldCB3Yl9vdXRwdXRfZGVsYXlfdmFsdWUgW2V4cHIgJDo6ZW52KFdCX0NMT0NLX1BFUklPRCkgKiAwLjZdCi1wdXRzICJcW0lORk9cXTogU2V0dGluZyB3YiBvdXRwdXQgZGVsYXkgdG86JHdiX291dHB1dF9kZWxheV92YWx1ZSIKLXB1dHMgIlxbSU5GT1xdOiBTZXR0aW5nIHdiIGlucHV0IGRlbGF5IHRvOiAkd2JfaW5wdXRfZGVsYXlfdmFsdWUiCi1zZXQgd2JfY2xrX2luZHggW2xzZWFyY2ggW2FsbF9pbnB1dHNdIFtnZXRfcG9ydCAkOjplbnYoV0JfQ0xPQ0tfTkFNRSldXQotc2V0IHdiX3JzdF9pbmR4IFtsc2VhcmNoIFthbGxfaW5wdXRzXSBbZ2V0X3BvcnQgd2JfcnN0X25dXQotc2V0IGFsbF9pbnB1dHNfd29fd2JfY2xrX3JzdCBbbHJlcGxhY2UgW2FsbF9pbnB1dHNdICR3Yl9jbGtfaW5keCAkd2JfcnN0X2luZHhdCi1zZXQgYWxsX291dHB1dHNfd2IgW2FsbF9vdXRwdXRzXQotCi1zZXRfZmFsc2VfcGF0aCAtdG8gcmlzY3ZfZGVidWcqCi1zZXRfZmFsc2VfcGF0aCAtZnJvbSBzb2Z0X2lycQotCi1zZXRfaW5wdXRfZGVsYXkgJHdiX2lucHV0X2RlbGF5X3ZhbHVlICAtY2xvY2sgW2dldF9jbG9ja3MgJDo6ZW52KFdCX0NMT0NLX05BTUUpXSAkYWxsX2lucHV0c193b193Yl9jbGtfcnN0Ci1zZXRfaW5wdXRfZGVsYXkgNS4wIC1jbG9jayBbZ2V0X2Nsb2NrcyAkOjplbnYoV0JfQ0xPQ0tfTkFNRSldIHt3Yl9yc3Rfbn0KLXNldF9vdXRwdXRfZGVsYXkgJHdiX291dHB1dF9kZWxheV92YWx1ZSAgLWNsb2NrIFtnZXRfY2xvY2tzICQ6OmVudihXQl9DTE9DS19OQU1FKV0gJGFsbF9vdXRwdXRzX3diCi0KLSMjIyMgQ2xvY2sgQXN5bmMgRGVmaW5hdGlvbgotc2V0X2Nsb2NrX2dyb3VwcyAtbmFtZSBhc3luY19jbG9jayAtYXN5bmNocm9ub3VzIC1jb21tZW50ICJBc3luYyBDbG9jayBncm91cCIgLWdyb3VwIFtnZXRfY2xvY2tzICQ6OmVudihXQl9DTE9DS19OQU1FKV0gLWdyb3VwIFtnZXRfY2xvY2tzICQ6OmVudihDT1JFX0NMT0NLX05BTUUpXSAtZ3JvdXAgW2dldF9jbG9ja3MgJDo6ZW52KFJUQ19DTE9DS19OQU1FKV0KLQotc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1mcm9tICQ6OmVudihXQl9DTE9DS19OQU1FKSAgICAtdG8gJDo6ZW52KFdCX0NMT0NLX05BTUUpICAgIC1zZXR1cCAwLjQwMAotc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1mcm9tICQ6OmVudihDT1JFX0NMT0NLX05BTUUpICAtdG8gJDo6ZW52KENPUkVfQ0xPQ0tfTkFNRSkgICAtc2V0dXAgMC40MDAKLXNldF9jbG9ja191bmNlcnRhaW50eSAtZnJvbSAkOjplbnYoUlRDX0NMT0NLX05BTUUpICAgLXRvICQ6OmVudihSVENfQ0xPQ0tfTkFNRSkgICAtc2V0dXAgMC40MDAKLQotc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1mcm9tICQ6OmVudihXQl9DTE9DS19OQU1FKSAgICAtdG8gJDo6ZW52KFdCX0NMT0NLX05BTUUpICAgIC1ob2xkIDAuMDUwCi1zZXRfY2xvY2tfdW5jZXJ0YWludHkgLWZyb20gJDo6ZW52KENPUkVfQ0xPQ0tfTkFNRSkgIC10byAkOjplbnYoQ09SRV9DTE9DS19OQU1FKSAgIC1ob2xkIDAuMDUwCi1zZXRfY2xvY2tfdW5jZXJ0YWludHkgLWZyb20gJDo6ZW52KFJUQ19DTE9DS19OQU1FKSAgIC10byAkOjplbnYoUlRDX0NMT0NLX05BTUUpICAgLWhvbGQgMC4wNTAKLQotCi0jIFRPRE8gc2V0IHRoaXMgYXMgcGFyYW1ldGVyCi1zZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCAkOjplbnYoU1lOVEhfRFJJVklOR19DRUxMKSAtcGluICQ6OmVudihTWU5USF9EUklWSU5HX0NFTExfUElOKSBbYWxsX2lucHV0c10KLXNldCBjYXBfbG9hZCBbZXhwciAkOjplbnYoU1lOVEhfQ0FQX0xPQUQpIC8gMTAwMC4wXQotcHV0cyAiXFtJTkZPXF06IFNldHRpbmcgbG9hZCB0bzogJGNhcF9sb2FkIgotc2V0X2xvYWQgICRjYXBfbG9hZCBbYWxsX291dHB1dHNdCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zeW50aC9ydW5fc3ludGggYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zeW50aC9ydW5fc3ludGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGQ1NDlhZDQuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3ludGgvcnVuX3N5bnRoCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotIyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSMgLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEKLSMgLy8gCi0jIC8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyAvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIC8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIyAvLwotIyAvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIyAvLwotIyAvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIC8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIC8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIyAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAotIyAvLyBTUERYLUZpbGVDb250cmlidXRvcjogRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KLSMgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENsZWFuIHVwIG9sZCBmaWxlIGFuZCBmcmVzaGx5IGNyZWF0ZSB0aGUgZGlyZWN0b3J5Ci0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1ccm0gLXJmIHB5Zml2ZS5zdgotXHJtIC1yZiAuL3RtcAotXHJtIC1yZiAuL3JlcG9ydHMKLVxybSAtcmYgLi9uZXRsaXN0Ci1ta2RpciAtcCAuL3RtcC9zeW50aGVzaXMKLW1rZGlyIC1wIC4vcmVwb3J0cwotbWtkaXIgLXAgLi9uZXRsaXN0Ci0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyB5b3N5cyBoYXMgaXNzdWUgaW4gcHJvcGdhdGluZyB0aGUgZ29sYmFsIHBhcmFtZXRlciBmcm9tIG9uZSBmaWxlIHRvIG90aGVyIGZpbGUKLSMgdG8gZml4IHRoaXMgaXNzdWUsIHdlIGhhdmUgY29uY2F0aW5hdGVkIGFsbCB0aGUgcnRsIGZpbGUgaW50byBzaW5nbGUgZmlsZSBiZWZvcmUgc3RhcnRpbmcgc3ludGhlc2lzCi0jIG9ubHkgbWVtb3J5IGFyZSBleGNsZGVkIGZyb20gdGhpcyBsaXN0Ci0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotY2F0IC4uL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV90b3Auc3YgPiBweWZpdmUuc3YKLWNhdCAuLi9zcmMvY29yZS9zY3IxX2NvcmVfdG9wLnN2ID4+IHB5Zml2ZS5zdgotY2F0IC4uL3NyYy9jb3JlL3NjcjFfZG0uc3YgPj4gcHlmaXZlLnN2Ci1jYXQgLi4vc3JjL2NvcmUvc2NyMV90YXBjX3N5bmNocm9uaXplci5zdiA+PiBweWZpdmUuc3YKLWNhdCAuLi9zcmMvY29yZS9zY3IxX2Nsa19jdHJsLnN2ID4+IHB5Zml2ZS5zdgotY2F0IC4uL3NyYy9jb3JlL3NjcjFfc2N1LnN2ID4+IHB5Zml2ZS5zdgotY2F0IC4uL3NyYy9jb3JlL3NjcjFfdGFwYy5zdiA+PiBweWZpdmUuc3YKLWNhdCAuLi9zcmMvY29yZS9zY3IxX3RhcGNfc2hpZnRfcmVnLnN2ID4+IHB5Zml2ZS5zdgotY2F0IC4uL3NyYy9jb3JlL3NjcjFfZG1pLnN2ID4+IHB5Zml2ZS5zdgotY2F0IC4uL3NyYy9jb3JlL3ByaW1pdGl2ZXMvc2NyMV9yZXNldF9jZWxscy5zdiA+PiBweWZpdmUuc3YKLWNhdCAuLi9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfaWZ1LnN2ID4+IHB5Zml2ZS5zdgotY2F0IC4uL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9pZHUuc3YgPj4gcHlmaXZlLnN2Ci1jYXQgLi4vc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2V4dS5zdiA+PiBweWZpdmUuc3YKLWNhdCAuLi9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfbXByZi5zdiA+PiBweWZpdmUuc3YKLWNhdCAuLi9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfY3NyLnN2ID4+IHB5Zml2ZS5zdgotY2F0IC4uL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9pYWx1LnN2ID4+IHB5Zml2ZS5zdgotY2F0IC4uL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9sc3Uuc3YgPj4gcHlmaXZlLnN2Ci1jYXQgLi4vc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2hkdS5zdiA+PiBweWZpdmUuc3YKLWNhdCAuLi9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfdGR1LnN2ID4+IHB5Zml2ZS5zdgotY2F0IC4uL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfaXBpYy5zdiA+PiBweWZpdmUuc3YKLWNhdCAuLi9zcmMvdG9wL3NjcjFfZG1lbV9yb3V0ZXIuc3YgPj4gcHlmaXZlLnN2Ci1jYXQgLi4vc3JjL3RvcC9zY3IxX2ltZW1fcm91dGVyLnN2ID4+IHB5Zml2ZS5zdgotI2NhdCAuLi9zcmMvdG9wL3NjcjFfZHBfbWVtb3J5LnN2ID4+IHB5Zml2ZS5zdgotY2F0IC4uL3NyYy90b3Avc2NyMV90Y20uc3YgPj4gcHlmaXZlLnN2Ci1jYXQgLi4vc3JjL3RvcC9zY3IxX3RpbWVyLnN2ID4+IHB5Zml2ZS5zdgotY2F0IC4uL3NyYy90b3Avc2NyMV9kbWVtX2FoYi5zdiA+PiBweWZpdmUuc3YKLWNhdCAuLi9zcmMvdG9wL3NjcjFfaW1lbV9haGIuc3YgPj4gcHlmaXZlLnN2Ci1jYXQgLi4vc3JjL3RvcC9zY3IxX3RvcF9heGkuc3YgPj4gcHlmaXZlLnN2Ci1jYXQgLi4vc3JjL3RvcC9zY3IxX21lbV9heGkuc3Y+PiBweWZpdmUuc3YKLQoteW9zeXMgLWcgLWMgc3ludGgudGNsIC1sIHN5bnRoLmxvZwotCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zeW50aC9zdGEudGNsIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3ludGgvc3RhLnRjbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRkYmI4ZC4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zeW50aC9zdGEudGNsCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotIyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAgMjAyMSAsIERpbmVzaCBBbm5heXlhCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAotIyBTUERYLUZpbGVDb250cmlidXRvcjogTW9kaWZpZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KLQotc2V0IDo6ZW52KExJQl9GQVNURVNUKSAiJDo6ZW52KFBES19ST09UKS9za3kxMzBBL2xpYnMucmVmL3NreTEzMF9mZF9zY19oZC9saWIvc2t5MTMwX2ZkX3NjX2hkX19mZl9uNDBDXzF2OTUubGliIgotc2V0IDo6ZW52KExJQl9TTE9XRVNUKSAiJDo6ZW52KFBES19ST09UKS9za3kxMzBBL2xpYnMucmVmL3NreTEzMF9mZF9zY19oZC9saWIvc2t5MTMwX2ZkX3NjX2hkX19zc18xMDBDXzF2NjAubGliIgotc2V0IDo6ZW52KENVUlJFTlRfTkVUTElTVCkgbmV0bGlzdC9zY3IxX3RvcF93Yi5ndgotc2V0IDo6ZW52KERFU0lHTl9OQU1FKSAic2NyMV90b3Bfd2IiCi1zZXQgOjplbnYoQkFTRV9TRENfRklMRSkgImJhc2Uuc2RjIgotc2V0IDo6ZW52KFNZTlRIX0RSSVZJTkdfQ0VMTCkgInNreTEzMF9mZF9zY19oZF9faW52XzgiCi1zZXQgOjplbnYoU1lOVEhfRFJJVklOR19DRUxMX1BJTikgIlkiCi1zZXQgOjplbnYoU1lOVEhfQ0FQX0xPQUQpICIxNy42NSIKLXNldCA6OmVudihXSVJFX1JDX0xBWUVSKSAibWV0MSIKLQotCi1zZXRfY21kX3VuaXRzIC10aW1lIG5zIC1jYXBhY2l0YW5jZSBwRiAtY3VycmVudCBtQSAtdm9sdGFnZSBWIC1yZXNpc3RhbmNlIGtPaG0gLWRpc3RhbmNlIHVtCi1yZWFkX2xpYmVydHkgLW1pbiAkOjplbnYoTElCX0ZBU1RFU1QpCi1yZWFkX2xpYmVydHkgLW1heCAkOjplbnYoTElCX1NMT1dFU1QpCi1yZWFkX3Zlcmlsb2cgJDo6ZW52KENVUlJFTlRfTkVUTElTVCkKLWxpbmtfZGVzaWduICAkOjplbnYoREVTSUdOX05BTUUpCi0KLQotcmVhZF9zZGMgLWVjaG8gJDo6ZW52KEJBU0VfU0RDX0ZJTEUpCi0KLSMgY2hlY2sgZm9yIG1pc3NpbmcgY29uc3RyYWludHMKLWNoZWNrX3NldHVwICAtdmVyYm9zZSA+IHVuY29uc3RyYWludHMucnB0Ci0KLXNldF9vcGVyYXRpbmdfY29uZGl0aW9ucyAtYW5hbHlzaXNfdHlwZSBzaW5nbGUKLSMgUHJvcGdhdGUgdGhlIGNsb2NrCi1zZXRfcHJvcGFnYXRlZF9jbG9jayBbYWxsX2Nsb2Nrc10KLQotcmVwb3J0X3RucwotcmVwb3J0X3ducwotcmVwb3J0X3Bvd2VyIAotcmVwb3J0X2NoZWNrcyAtdW5pcXVlIC1zbGFja19tYXggLTAuMCAtZ3JvdXBfY291bnQgMTAwIAotcmVwb3J0X2NoZWNrcyAtdW5pcXVlIC1zbGFja19taW4gLTAuMCAtZ3JvdXBfY291bnQgMTAwIAotcmVwb3J0X2NoZWNrcyAtcGF0aF9kZWxheSBtaW5fbWF4IAotcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAtc2xhY2tfbWF4IC0wLjAxICA+IHRpbWluZy5ycHQKLQotcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAtc2xhY2tfbWluIC0wLjAxID4+IHRpbWluZy5ycHQKLQotCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zeW50aC9zeW50aC50Y2wgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zeW50aC9zeW50aC50Y2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDFhMzA1MDMuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3ludGgvc3ludGgudGNsCisrKyAvZGV2L251bGwKQEAgLTEsNDI0ICswLDAgQEAKLSMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotIyAvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAgMjAyMSAsIERpbmVzaCBBbm5heXlhCi0jIC8vCi0jIC8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyAvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIC8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIyAvLwotIyAvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIyAvLwotIyAvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIC8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIC8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIyAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAotIyAvLyBTUERYLUZpbGVDb250cmlidXRvcjogTW9kaWZpZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KLQotIyMjIyMjIyMjIyMgY29uZmlnLnRjbCAjIyMjIyMjIyMjIyMjIyMjIyMKLSMgVXNlciBjb25maWcKLQotIyBVc2VyIGNvbmZpZwotc2V0IDo6ZW52KERFU0lHTl9ESVIpIC4uLwotCi1zZXQgOjplbnYoUFJPSl9ESVIpIC4uLy4uLy4uLy4uLwotCi0jIFVzZXIgY29uZmlnCi1zZXQgOjplbnYoREVTSUdOX05BTUUpIHNjcjFfdG9wX3diCi0KLSMgQ2hhbmdlIGlmIG5lZWRlZAotc2V0IDo6ZW52KFZFUklMT0dfRklMRVMpIFtnbG9iICBcCi0JLi4vc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX3RvcC5zdiAgXAotCS4uL3NyYy9jb3JlL3NjcjFfY29yZV90b3Auc3YgIFwKLQkuLi9zcmMvY29yZS9zY3IxX2RtLnN2ICBcCi0JLi4vc3JjL2NvcmUvc2NyMV90YXBjX3N5bmNocm9uaXplci5zdiAgXAotCS4uL3NyYy9jb3JlL3NjcjFfY2xrX2N0cmwuc3YgIFwKLQkuLi9zcmMvY29yZS9zY3IxX3NjdS5zdiAgXAotCS4uL3NyYy9jb3JlL3NjcjFfdGFwYy5zdiAgXAotCS4uL3NyYy9jb3JlL3NjcjFfdGFwY19zaGlmdF9yZWcuc3YgIFwKLQkuLi9zcmMvY29yZS9zY3IxX2RtaS5zdiAgXAotCS4uL3NyYy9jb3JlL3ByaW1pdGl2ZXMvc2NyMV9yZXNldF9jZWxscy5zdiAgXAotCS4uL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9pZnUuc3YgIFwKLQkuLi9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfaWR1LnN2ICBcCi0JLi4vc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2V4dS5zdiAgXAotCS4uL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9tcHJmLnN2ICBcCi0JLi4vc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2Nzci5zdiAgXAotCS4uL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9pYWx1LnN2ICBcCi0JLi4vc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX211bC5zdiAgXAotCS4uL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9kaXYuc3YgIFwKLQkuLi9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfbHN1LnN2ICBcCi0JLi4vc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2hkdS5zdiAgXAotCS4uL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV90ZHUuc3YgIFwKLQkuLi9zcmMvY29yZS9waXBlbGluZS9zY3IxX2lwaWMuc3YgICBcCi0JLi4vc3JjL3RvcC9zY3IxX2RtZW1fcm91dGVyLnN2ICAgXAotCS4uL3NyYy90b3Avc2NyMV9pbWVtX3JvdXRlci5zdiAgIFwKLQkuLi9zcmMvdG9wL3NjcjFfdGNtLnN2ICAgXAotCS4uL3NyYy90b3Avc2NyMV90aW1lci5zdiAgIFwKLQkuLi9zcmMvdG9wL3NjcjFfaW50Zi5zdiAgIFwKLQkuLi9zcmMvdG9wL3NjcjFfdG9wX3diLnN2ICAgXAotCS4uL3NyYy90b3Avc2NyMV9kbWVtX3diLnN2ICAgXAotCS4uL3NyYy90b3Avc2NyMV9pbWVtX3diLnN2ICAgXAotCS4uLy4uLy4uL2xpYi9jbGtfc2tld19hZGp1c3QuZ3YgXAotCS4uLy4uLy4uL2xpYi9jdGVjaF9jZWxscy5zdiAgICAgXAotCS4uLy4uLy4uL2xpYi9hc3luY19maWZvLnN2ICBdCi0KLSNzZXQgOjplbnYoVkVSSUxPR19GSUxFU19CTEFDS0JPWCkgW2dsb2IgIFwKLSMgICAgICAgICAgICAkOjplbnYoREVTSUdOX0RJUikvc3JjL3RvcC9zY3IxX2RwX21lbW9yeS5zdiBdCi0KLXNldCA6OmVudihWRVJJTE9HX0lOQ0xVREVfRElSUykgW2dsb2IgJDo6ZW52KERFU0lHTl9ESVIpL3NyYy9pbmNsdWRlc10KLQotc2V0IDo6ZW52KFNZTlRIX0RFRklORVMpIFtsaXN0IFNZTlRIRVNJUyBdCi0jc2V0IDo6ZW52KFNZTlRIX0RFRklORVMpIFtsaXN0IFNDUjFfREJHX0VOIFNDUjFfTVBSRl9SQU0gXQotCi1zZXQgOjplbnYoU1lOVEhfUkVBRF9CTEFDS0JPWF9MSUIpIDEKLQotc2V0IDo6ZW52KExJQl9TWU5USCkgIC4vdG1wL3RyaW1tZWQubGliCi1zZXQgOjplbnYoTElCX1NZTlRIX0NPTVBMRVRFX05PX1BHKSAuL3RtcC9za3kxMzBfZmRfc2NfaGRfX3R0XzAyNUNfMXY4MC5ub19wZy5saWIKLQotCi1zZXQgOjplbnYoU0RDX0ZJTEUpICJiYXNlLnNkYyIKLQotIyBGaWxsIHRoaXMKLXNldCA6OmVudihDTE9DS19QRVJJT0QpICIxMCIKLXNldCA6OmVudihDTE9DS19QT1JUKSAid2JfY2xrIGNvcmVfY2xrIHJ0Y19jbGsiCi1zZXQgOjplbnYoQ0xPQ0tfVFJFRV9TWU5USCkgMAotCi1zZXQgOjplbnYoU1lOVEhfQlVGRkVSSU5HKSAxCi1zZXQgOjplbnYoU1lOVEhfU0laSU5HKSAxCi0KLXNldCA6OmVudihTWU5USF9EUklWSU5HX0NFTEwpICJza3kxMzBfZmRfc2NfaGRfX2ludl84Igotc2V0IDo6ZW52KFNZTlRIX0NBUF9MT0FEKSAiMTcuNjUiCi1zZXQgOjplbnYoU1lOVEhfTUFYX1RSQU4pICJbZXhwciB7MC4xKjEwLjB9XSIKLQotc2V0IDo6ZW52KFNZTlRIX01BWF9GQU5PVVQpIDYKLQotc2V0IDo6ZW52KFNZTlRIX05PX0ZMQVQpICIxIgotCi0KLXNldCA6OmVudihTWU5USF9TVFJBVEVHWSkgIkFSRUEgMCIKLXNldCA6OmVudihTWU5USF9USUVMT19QT1JUKSAic2t5MTMwX2ZkX3NjX2hkX19jb25iXzEgTE8iCi1zZXQgOjplbnYoU1lOVEhfVElFSElfUE9SVCkgInNreTEzMF9mZF9zY19oZF9fY29uYl8xIEhJIgotc2V0IDo6ZW52KFNZTlRIX01JTl9CVUZfUE9SVCkgInNreTEzMF9mZF9zY19oZF9fYnVmXzIgQSBYIgotCi0KLXNldCA6OmVudihDTE9DS19ORVQpICQ6OmVudihDTE9DS19QT1JUKQotCi0KLQotc2V0IDo6ZW52KHlvc3lzX3RtcF9maWxlX3RhZykgIi4vdG1wLyIKLXNldCA6OmVudihUTVBfRElSKSAiLi90bXAvIgotc2V0IDo6ZW52KHlvc3lzX25ldGxpc3RfZGlyKSAiLi9uZXRsaXN0Igotc2V0IDo6ZW52KHlvc3lzX3JlcG9ydF9maWxlX3RhZykgIi4vcmVwb3J0cy95b3N5cyIKLXNldCA6OmVudih5b3N5c19yZXN1bHRfZmlsZV90YWcpICIuL3JlcG9ydHMveW9zeXMuc3ludGhlc2lzIgotCi1zZXQgOjplbnYoU0FWRV9ORVRMSVNUKSAkOjplbnYoeW9zeXNfbmV0bGlzdF9kaXIpLyQ6OmVudihERVNJR05fTkFNRSkuZ3YKLQotCi0KLSMjIyMjIyMjIyMjIEVuZCBvZiBjb25maWcudGNsCi1zZXQgYnVmZmVyaW5nICQ6OmVudihTWU5USF9CVUZGRVJJTkcpCi1zZXQgc2l6aW5nICQ6OmVudihTWU5USF9TSVpJTkcpCi0KLXlvc3lzIC1pbXBvcnQKLQotc2V0IHZ0b3AgJDo6ZW52KERFU0lHTl9OQU1FKQotc2V0IHNkY19maWxlICQ6OmVudihTRENfRklMRSkKLXNldCBzY2xpYiAkOjplbnYoTElCX1NZTlRIKQotCi1pZiB7IFtpbmZvIGV4aXN0cyA6OmVudihTWU5USF9ERUZJTkVTKSBdIH0gewotCWZvcmVhY2ggZGVmaW5lICQ6OmVudihTWU5USF9ERUZJTkVTKSB7Ci0JCWxvZyAiRGVmaW5pbmcgJGRlZmluZSIKLQkJdmVyaWxvZ19kZWZpbmVzIC1EJGRlZmluZQotCX0KLX0KLQotc2V0IHZJZGlyc0FyZ3MgIiIKLWlmIHtbaW5mbyBleGlzdCA6OmVudihWRVJJTE9HX0lOQ0xVREVfRElSUyldfSB7Ci0JZm9yZWFjaCBkaXIgJDo6ZW52KFZFUklMT0dfSU5DTFVERV9ESVJTKSB7Ci0JCWxvZyAiQWRkaW5nIGluY2x1ZGUgZmlsZSAtSSRkaXIgIgotCQlsYXBwZW5kIHZJZGlyc0FyZ3MgIi1JJGRpciIKLQl9Ci0Jc2V0IHZJZGlyc0FyZ3MgW2pvaW4gJHZJZGlyc0FyZ3NdCi19Ci0KLWlmIHsgJDo6ZW52KFNZTlRIX1JFQURfQkxBQ0tCT1hfTElCKSB9IHsKLQlsb2cgIlJlYWRpbmcgJDo6ZW52KExJQl9TWU5USF9DT01QTEVURV9OT19QRykgYXMgYSBibGFja2JveCIKLQlyZWFkX2xpYmVydHkgLWxpYiAtaWdub3JlX21pc3NfZGlyIC1zZXRhdHRyIGJsYWNrYm94ICQ6OmVudihMSUJfU1lOVEhfQ09NUExFVEVfTk9fUEcpCi19Ci0KLQotaWYgeyBbaW5mbyBleGlzdHMgOjplbnYoRVhUUkFfTElCUykgXSB9IHsKLQlmb3JlYWNoIGxpYiAkOjplbnYoRVhUUkFfTElCUykgewotCQlyZWFkX2xpYmVydHkgeyp9JHZJZGlyc0FyZ3MgLWxpYiAtaWdub3JlX21pc3NfZGlyIC1zZXRhdHRyIGJsYWNrYm94ICRsaWIKLQl9Ci19Ci0KLQotCi0jIG5zIGV4cGVjdGVkIChpbiBzZGMgYXMgd2VsbCkKLXNldCBjbG9ja19wZXJpb2QgW2V4cHIgeyQ6OmVudihDTE9DS19QRVJJT0QpKjEwMDB9XQotCi1zZXQgZHJpdmVyICAkOjplbnYoU1lOVEhfRFJJVklOR19DRUxMKQotc2V0IGNsb2FkICAgJDo6ZW52KFNZTlRIX0NBUF9MT0FEKQotIyBpbnB1dCBwaW4gY2FwIG9mIElOXzNWWDgKLXNldCBtYXhfRk8gJDo6ZW52KFNZTlRIX01BWF9GQU5PVVQpCi1pZiB7IVtpbmZvIGV4aXN0IDo6ZW52KFNZTlRIX01BWF9UUkFOKV19IHsKLQlzZXQgOjplbnYoU1lOVEhfTUFYX1RSQU4pIFtleHByIHswLjEqJGNsb2NrX3BlcmlvZH1dCi19IGVsc2UgewotCXNldCA6OmVudihTWU5USF9NQVhfVFJBTikgW2V4cHIgeyQ6OmVudihTWU5USF9NQVhfVFJBTikgKiAxMDAwfV0KLX0KLXNldCBtYXhfVHJhbiAkOjplbnYoU1lOVEhfTUFYX1RSQU4pCi0KLQotIyBNYXBwaW5nIHBhcmFtZXRlcnMKLXNldCBBX2ZhY3RvciAgMC4wMAotc2V0IEJfZmFjdG9yICAwLjg4Ci1zZXQgRl9mYWN0b3IgIDAuMDAKLQotIyBEb24ndCBjaGFuZ2UgdGhlc2UgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZwotc2V0IHN0YXRfZXh0ICAgICIuc3RhdC5ycHQiCi1zZXQgY2hrX2V4dCAgICAiLmNoay5ycHQiCi1zZXQgZ2xfZXh0ICAgICAgIi5nbC52Igotc2V0IGNvbnN0cl9leHQgICIuJGNsb2NrX3BlcmlvZC5jb25zdHIiCi1zZXQgdGltaW5nX2V4dCAgIi50aW1pbmcudHh0Igotc2V0IGFiY19leHQgICAgICIuYWJjIgotCi0KLSMgZ2V0IG9sZCBzZGMsIGFkZCBsaWJyYXJ5IHNwZWNpZmljIHN0dWZmIGZvciBhYmMgc2NyaXB0cwotI3NldCBzZGNfZmlsZSAkOjplbnYoeW9zeXNfdG1wX2ZpbGVfdGFnKS5zZGMKLSNzZXQgb3V0ZmlsZSBbb3BlbiAke3NkY19maWxlfSB3XQotI3B1dHMgJG91dGZpbGUgJHNkY19kYXRhCi0jcHV0cyAkb3V0ZmlsZSAic2V0X2RyaXZpbmdfY2VsbCAke2RyaXZlcn0iCi0jcHV0cyAkb3V0ZmlsZSAic2V0X2xvYWQgJHtjbG9hZH0iCi0jY2xvc2UgJG91dGZpbGUKLQotCi0jIEFCQyBTY3JpcHMKLXNldCBhYmNfcnNfSyAgICAicmVzdWIsLUssIgotc2V0IGFiY19ycyAgICAgICJyZXN1YiIKLXNldCBhYmNfcnN6ICAgICAicmVzdWIsLXoiCi1zZXQgYWJjX3J3X0sgICAgInJld3JpdGUsLUssIgotc2V0IGFiY19ydyAgICAgICJyZXdyaXRlIgotc2V0IGFiY19yd3ogICAgICJyZXdyaXRlLC16Igotc2V0IGFiY19yZiAgICAgICJyZWZhY3RvciIKLXNldCBhYmNfcmZ6ICAgICAicmVmYWN0b3IsLXoiCi1zZXQgYWJjX2IgICAgICAgImJhbGFuY2UiCi0KLXNldCBhYmNfcmVzeW4yICAgICAgICAiJHthYmNfYn07ICR7YWJjX3J3fTsgJHthYmNfcmZ9OyAke2FiY19ifTsgJHthYmNfcnd9OyAke2FiY19yd3p9OyAke2FiY19ifTsgJHthYmNfcmZ6fTsgJHthYmNfcnd6fTsgJHthYmNfYn0iCi1zZXQgYWJjX3NoYXJlICAgICAgICAgInN0cmFzaDsgbXVsdGksLW07ICR7YWJjX3Jlc3luMn0iCi1zZXQgYWJjX3Jlc3luMmEgICAgICAgIiR7YWJjX2J9OyR7YWJjX3J3fTske2FiY19ifTske2FiY19yd307JHthYmNfcnd6fTske2FiY19ifTske2FiY19yd3p9OyR7YWJjX2J9Igotc2V0IGFiY19yZXN5bjMgICAgICAgICJiYWxhbmNlO3Jlc3ViO3Jlc3ViLC1LLDY7YmFsYW5jZTtyZXN1YiwtejtyZXN1YiwteiwtSyw2O2JhbGFuY2U7cmVzdWIsLXosLUssNTtiYWxhbmNlIgotc2V0IGFiY19yZXN5bjJycyAgICAgICIke2FiY19ifTske2FiY19yc19LfSw2OyR7YWJjX3J3fTske2FiY19yc19LfSw2LC1OLDI7JHthYmNfcmZ9OyR7YWJjX3JzX0t9LDg7JHthYmNfcnd9OyR7YWJjX3JzX0t9LDEwOyR7YWJjX3J3en07JHthYmNfcnNfS30sMTAsLU4sMjske2FiY19ifSwke2FiY19yc19LfSwxMjske2FiY19yZnp9OyR7YWJjX3JzX0t9LDEyLC1OLDI7JHthYmNfcnd6fTske2FiY19ifSIKLQotc2V0IGFiY19jaG9pY2UgICAgICAgICJmcmFpZ19zdG9yZTsgJHthYmNfcmVzeW4yfTsgZnJhaWdfc3RvcmU7ICR7YWJjX3Jlc3luMn07IGZyYWlnX3N0b3JlOyBmcmFpZ19yZXN0b3JlIgotc2V0IGFiY19jaG9pY2UyICAgICAgImZyYWlnX3N0b3JlOyBiYWxhbmNlOyBmcmFpZ19zdG9yZTsgJHthYmNfcmVzeW4yfTsgZnJhaWdfc3RvcmU7ICR7YWJjX3Jlc3luMn07IGZyYWlnX3N0b3JlOyAke2FiY19yZXN5bjJ9OyBmcmFpZ19zdG9yZTsgZnJhaWdfcmVzdG9yZSIKLQotc2V0IGFiY19tYXBfb2xkX2NudAkJCSJtYXAsLXAsLWEsLUIsMC4yLC1BLDAuOSwtTSwwIgotc2V0IGFiY19tYXBfb2xkX2RseSAgICAgICAgICJtYXAsLXAsLUIsMC4yLC1BLDAuOSwtTSwwIgotc2V0IGFiY19yZXRpbWVfYXJlYSAgICAgICAgICJyZXRpbWUsLUQse0R9LC1NLDUiCi1zZXQgYWJjX3JldGltZV9kbHkgICAgICAgICAgInJldGltZSwtRCx7RH0sLU0sNiIKLXNldCBhYmNfbWFwX25ld19hcmVhICAgICAgICAiYW1hcCwtbSwtUSwwLjEsLUYsMjAsLUEsMjAsLUMsNTAwMCIKLQotc2V0IGFiY19hcmVhX3JlY292ZXJ5XzEgICAgICAgIiR7YWJjX2Nob2ljZX07IG1hcDsiCi1zZXQgYWJjX2FyZWFfcmVjb3ZlcnlfMiAgICAgICAiJHthYmNfY2hvaWNlMn07IG1hcDsiCi0KLXNldCBtYXBfb2xkX2NudAkJCSAgICAibWFwLC1wLC1hLC1CLDAuMiwtQSwwLjksLU0sMCIKLXNldCBtYXBfb2xkX2RseQkJCSAgICAibWFwLC1wLC1CLDAuMiwtQSwwLjksLU0sMCIKLXNldCBhYmNfcmV0aW1lX2FyZWEgICAJInJldGltZSwtRCx7RH0sLU0sNSIKLXNldCBhYmNfcmV0aW1lX2RseSAgICAJInJldGltZSwtRCx7RH0sLU0sNiIKLXNldCBhYmNfbWFwX25ld19hcmVhICAJImFtYXAsLW0sLVEsMC4xLC1GLDIwLC1BLDIwLC1DLDUwMDAiCi0KLWlmIHskYnVmZmVyaW5nPT0xfSB7Ci0Jc2V0IGFiY19maW5lX3R1bmUJCSJidWZmZXIsLU4sJHttYXhfRk99LC1TLCR7bWF4X1RyYW59O3Vwc2l6ZSx7RH07ZG5zaXplLHtEfSIKLX0gZWxzZWlmIHskc2l6aW5nfSB7Ci0Jc2V0IGFiY19maW5lX3R1bmUgICAgICAgInVwc2l6ZSx7RH07ZG5zaXplLHtEfSIKLX0gZWxzZSB7Ci0Jc2V0IGFiY19maW5lX3R1bmUgICAgICAgIiIKLX0KLQotCi1zZXQgZGVsYXlfc2NyaXB0cyBbbGlzdCBcCi0JIityZWFkX2NvbnN0ciwke3NkY19maWxlfTtmeDttZnM7c3RyYXNoO3JlZmFjdG9yOyR7YWJjX3Jlc3luMn07JHthYmNfcmV0aW1lX2RseX07IHNjbGVhbnVwOyR7YWJjX21hcF9vbGRfZGx5fTtyZXRpbWUsLUQse0R9OyR7YWJjX2ZpbmVfdHVuZX07c3RpbWUsLXA7cHJpbnRfc3RhdHMgLW0iIFwKLQlcCi0JIityZWFkX2NvbnN0ciwke3NkY19maWxlfTtmeDttZnM7c3RyYXNoO3JlZmFjdG9yOyR7YWJjX3Jlc3luMn07JHthYmNfcmV0aW1lX2RseX07IHNjbGVhbnVwOyR7YWJjX2Nob2ljZTJ9OyR7YWJjX21hcF9vbGRfZGx5fTske2FiY19hcmVhX3JlY292ZXJ5XzJ9OyByZXRpbWUsLUQse0R9OyR7YWJjX2ZpbmVfdHVuZX07c3RpbWUsLXA7cHJpbnRfc3RhdHMgLW0iIFwKLQlcCi0JIityZWFkX2NvbnN0ciwke3NkY19maWxlfTtmeDttZnM7c3RyYXNoO3JlZmFjdG9yOyR7YWJjX3Jlc3luMn07JHthYmNfcmV0aW1lX2RseX07IHNjbGVhbnVwOyR7YWJjX2Nob2ljZX07JHthYmNfbWFwX29sZF9kbHl9OyR7YWJjX2FyZWFfcmVjb3ZlcnlfMX07IHJldGltZSwtRCx7RH07JHthYmNfZmluZV90dW5lfTtzdGltZSwtcDtwcmludF9zdGF0cyAtbSIgXAotCVwKLQkiK3JlYWRfY29uc3RyLCR7c2RjX2ZpbGV9O2Z4O21mcztzdHJhc2g7cmVmYWN0b3I7JHthYmNfcmVzeW4yfTske2FiY19yZXRpbWVfYXJlYX07c2NsZWFudXA7JHthYmNfY2hvaWNlMn07JHthYmNfbWFwX25ld19hcmVhfTske2FiY19jaG9pY2UyfTske2FiY19tYXBfb2xkX2RseX07cmV0aW1lLC1ELHtEfTske2FiY19maW5lX3R1bmV9O3N0aW1lLC1wO3ByaW50X3N0YXRzIC1tIiBcCi0JXQotCi1zZXQgYXJlYV9zY3JpcHRzIFtsaXN0IFwKLQkiK3JlYWRfY29uc3RyLCR7c2RjX2ZpbGV9O2Z4O21mcztzdHJhc2g7cmVmYWN0b3I7JHthYmNfcmVzeW4yfTske2FiY19yZXRpbWVfYXJlYX07c2NsZWFudXA7JHthYmNfY2hvaWNlMn07JHthYmNfbWFwX25ld19hcmVhfTtyZXRpbWUsLUQse0R9OyR7YWJjX2ZpbmVfdHVuZX07c3RpbWUsLXA7cHJpbnRfc3RhdHMgLW0iIFwKLQlcCi0JIityZWFkX2NvbnN0ciwke3NkY19maWxlfTtmeDttZnM7c3RyYXNoO3JlZmFjdG9yOyR7YWJjX3Jlc3luMn07JHthYmNfcmV0aW1lX2FyZWF9O3NjbGVhbnVwOyR7YWJjX2Nob2ljZTJ9OyR7YWJjX21hcF9uZXdfYXJlYX07JHthYmNfY2hvaWNlMn07JHthYmNfbWFwX25ld19hcmVhfTtyZXRpbWUsLUQse0R9OyR7YWJjX2ZpbmVfdHVuZX07c3RpbWUsLXA7cHJpbnRfc3RhdHMgLW0iIFwKLQlcCi0JIityZWFkX2NvbnN0ciwke3NkY19maWxlfTtmeDttZnM7c3RyYXNoO3JlZmFjdG9yOyR7YWJjX2Nob2ljZTJ9OyR7YWJjX3JldGltZV9hcmVhfTtzY2xlYW51cDske2FiY19jaG9pY2UyfTske2FiY19tYXBfbmV3X2FyZWF9OyR7YWJjX2Nob2ljZTJ9OyR7YWJjX21hcF9uZXdfYXJlYX07cmV0aW1lLC1ELHtEfTske2FiY19maW5lX3R1bmV9O3N0aW1lLC1wO3ByaW50X3N0YXRzIC1tIiBcCi0JXQotCi1zZXQgYWxsX3NjcmlwdHMgW2xpc3Qgeyp9JGRlbGF5X3NjcmlwdHMgeyp9JGFyZWFfc2NyaXB0c10KLQotc2V0IHN0cmF0ZWd5X3BhcnRzIFtzcGxpdCAkOjplbnYoU1lOVEhfU1RSQVRFR1kpXQotCi1wcm9jIHN5bnRoX3N0cmF0ZWd5X2Zvcm1hdF9lcnIgeyB9IHsKLQl1cHZhciBhcmVhX3NjcmlwdHMgYXJlYV9zY3JpcHRzCi0JdXB2YXIgZGVsYXlfc2NyaXB0cyBkZWxheV9zY3JpcHRzCi0JbG9nIC1zdGRlcnIgIlxbRVJST1JdIE1pc2Zvcm1hdHRlZCBTWU5USF9TVFJBVEVHWSAoXCIkOjplbnYoU1lOVEhfU1RSQVRFR1kpXCIpLiIKLQlsb2cgLXN0ZGVyciAiXFtFUlJPUl0gQ29ycmVjdCBmb3JtYXQgaXMgXCJERUxBWXxBUkVBIDAtW2V4cHIgW2xsZW5ndGggJGRlbGF5X3NjcmlwdHNdLTFdfDAtW2V4cHIgW2xsZW5ndGggJGFyZWFfc2NyaXB0c10tMV1cIi4iCi0JZXhpdCAxCi19Ci0KLWlmIHsgW2xsZW5ndGggJHN0cmF0ZWd5X3BhcnRzXSAhPSAyIH0gewotCXN5bnRoX3N0cmF0ZWd5X2Zvcm1hdF9lcnIKLX0KLQotc2V0IHN0cmF0ZWd5X3R5cGUgW2xpbmRleCAkc3RyYXRlZ3lfcGFydHMgMF0KLXNldCBzdHJhdGVneV90eXBlX2lkeCBbbGluZGV4ICRzdHJhdGVneV9wYXJ0cyAxXQotCi1pZiB7ICRzdHJhdGVneV90eXBlICE9ICJBUkVBIiAmJiAkc3RyYXRlZ3lfdHlwZSAhPSAiREVMQVkiIH0gewotCWxvZyAtc3RkZXJyICJcW0VSUk9SXSBBUkVBfERFTEFZIHRva2VucyBub3QgZm91bmQuICgkc3RyYXRlZ3lfdHlwZSkiCi0Jc3ludGhfc3RyYXRlZ3lfZm9ybWF0X2VycgotfQotCi1pZiB7ICRzdHJhdGVneV90eXBlID09ICJERUxBWSIgJiYgJHN0cmF0ZWd5X3R5cGVfaWR4ID49IFtsbGVuZ3RoICRkZWxheV9zY3JpcHRzXSB9IHsKLQlsb2cgLXN0ZGVyciAiXFtFUlJPUl0gc3RyYXRlZ3kgaW5kZXggKCRzdHJhdGVneV90eXBlX2lkeCkgaXMgdG9vIGhpZ2guIgotCXN5bnRoX3N0cmF0ZWd5X2Zvcm1hdF9lcnIKLX0KLQotaWYgeyAkc3RyYXRlZ3lfdHlwZSA9PSAiQVJFQSIgJiYgJHN0cmF0ZWd5X3R5cGVfaWR4ID49IFtsbGVuZ3RoICRhcmVhX3NjcmlwdHNdIH0gewotCWxvZyAtc3RkZXJyICJcW0VSUk9SXSBzdHJhdGVneSBpbmRleCAoJHN0cmF0ZWd5X3R5cGVfaWR4KSBpcyB0b28gaGlnaC4iCi0Jc3ludGhfc3RyYXRlZ3lfZm9ybWF0X2VycgotfQotCi1pZiB7ICRzdHJhdGVneV90eXBlID09ICJERUxBWSIgfSB7Ci0Jc2V0IHN0cmF0ZWd5ICRzdHJhdGVneV90eXBlX2lkeAotfSBlbHNlIHsKLQlzZXQgc3RyYXRlZ3kgW2V4cHIge1tsbGVuZ3RoICRkZWxheV9zY3JpcHRzXSskc3RyYXRlZ3lfdHlwZV9pZHh9XQotfQotCi0KLWZvciB7IHNldCBpIDAgfSB7ICRpIDwgW2xsZW5ndGggJDo6ZW52KFZFUklMT0dfRklMRVMpXSB9IHsgaW5jciBpIH0gewotCXJlYWRfdmVyaWxvZyAtc3Ygeyp9JHZJZGlyc0FyZ3MgW2xpbmRleCAkOjplbnYoVkVSSUxPR19GSUxFUykgJGldCi19Ci0KLWlmIHsgW2luZm8gZXhpc3RzIDo6ZW52KFZFUklMT0dfRklMRVNfQkxBQ0tCT1gpXSB9IHsKLQlmb3JlYWNoIHZlcmlsb2dfZmlsZSAkOjplbnYoVkVSSUxPR19GSUxFU19CTEFDS0JPWCkgewotCQlyZWFkX3Zlcmlsb2cgLXN2IHsqfSR2SWRpcnNBcmdzIC1saWIgJHZlcmlsb2dfZmlsZQotCX0KLX0KLXNlbGVjdCAtbW9kdWxlICR2dG9wCi1zaG93IC1mb3JtYXQgZG90IC1wcmVmaXggJDo6ZW52KFRNUF9ESVIpL3N5bnRoZXNpcy9oaWVyYXJjaHkKLXNlbGVjdCAtY2xlYXIKLQotaGllcmFyY2h5IC1jaGVjayAtdG9wICR2dG9wCi0KLSMgSW5mZXIgdHJpLXN0YXRlIGJ1ZmZlcnMuCi1zZXQgdGJ1Zl9tYXAgZmFsc2UKLWlmIHsgW2luZm8gZXhpc3RzIDo6ZW52KFRSSVNUQVRFX0JVRkZFUl9NQVApXSB9IHsKLSAgICAgICAgaWYgeyBbZmlsZSBleGlzdHMgJDo6ZW52KFRSSVNUQVRFX0JVRkZFUl9NQVApXSB9IHsKLSAgICAgICAgICAgICAgICBzZXQgdGJ1Zl9tYXAgdHJ1ZQotICAgICAgICAgICAgICAgIHRyaWJ1ZgotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGxvZyAiV0FSTklORzogVFJJU1RBVEVfQlVGRkVSX01BUCBpcyBkZWZpbmVkIGJ1dCBjb3VsZCBub3QgYmUgZm91bmQ6ICQ6OmVudihUUklTVEFURV9CVUZGRVJfTUFQKSIKLSAgICAgICAgfQotfQotCi1pZiB7ICQ6OmVudihTWU5USF9OT19GTEFUKSB9IHsKLQlzeW50aCAtdG9wICR2dG9wCi19IGVsc2UgewotCXN5bnRoIC10b3AgJHZ0b3AgLWZsYXR0ZW4KLX0KLQotc2hhcmUgLWFnZ3Jlc3NpdmUKLW9wdAotb3B0X2NsZWFuIC1wdXJnZQotCi10ZWUgLW8gIiQ6OmVudih5b3N5c19yZXBvcnRfZmlsZV90YWcpX3ByZS5zdGF0IiBzdGF0Ci0KLSMgTWFwIHRyaS1zdGF0ZSBidWZmZXJzLgotaWYgeyAkdGJ1Zl9tYXAgfSB7Ci0gICAgICAgIGxvZyB7bWFwcGluZyB0YnVmfQotICAgICAgICB0ZWNobWFwIC1tYXAgJDo6ZW52KFRSSVNUQVRFX0JVRkZFUl9NQVApCi0gICAgICAgIHNpbXBsZW1hcAotfQotCi0jIGhhbmRsZSB0ZWNobm9sb2d5IG1hcHBpbmcgb2YgNC1NVVgsIGFuZCB0ZWxsIFlvc3lzIHRvIGluZmVyIDQtbXV4ZXMKLWlmIHsgW2luZm8gZXhpc3RzIDo6ZW52KFNZTlRIX01VWDRfTUFQKV0gJiYgW2ZpbGUgZXhpc3RzICQ6OmVudihTWU5USF9NVVg0X01BUCldIH0gewotICBtdXhjb3ZlciAtbXV4NCAKLSAgdGVjaG1hcCAtbWFwICQ6OmVudihTWU5USF9NVVg0X01BUCkKLSAgc2ltcGxlbWFwCi19Ci0KLSMgaGFuZGxlIHRlY2hub2xvZ3kgbWFwcGluZyBvZiAyLU1VWAotaWYgeyBbaW5mbyBleGlzdHMgOjplbnYoU1lOVEhfTVVYX01BUCldICYmIFtmaWxlIGV4aXN0cyAkOjplbnYoU1lOVEhfTVVYX01BUCldIH0gewotICB0ZWNobWFwIC1tYXAgJDo6ZW52KFNZTlRIX01VWF9NQVApCi0gIHNpbXBsZW1hcAotfQotCi0jIGhhbmRsZSB0ZWNobm9sb2d5IG1hcHBpbmcgb2YgbGF0Y2hlcwotaWYgeyBbaW5mbyBleGlzdHMgOjplbnYoU1lOVEhfTEFUQ0hfTUFQKV0gJiYgW2ZpbGUgZXhpc3RzICQ6OmVudihTWU5USF9MQVRDSF9NQVApXSB9IHsKLQl0ZWNobWFwIC1tYXAgJDo6ZW52KFNZTlRIX0xBVENIX01BUCkKLQlzaW1wbGVtYXAKLX0KLQotZGZmbGlibWFwIC1saWJlcnR5ICRzY2xpYgotdGVlIC1vICIkOjplbnYoeW9zeXNfcmVwb3J0X2ZpbGVfdGFnKV9kZmYuc3RhdCIgc3RhdAotCi1pZiB7IFtpbmZvIGV4aXN0cyA6OmVudihTWU5USF9FWFBMT1JFKV0gJiYgJDo6ZW52KFNZTlRIX0VYUExPUkUpIH0gewotCWRlc2lnbiAtc2F2ZSBteURlc2lnbgotCi0JZm9yIHsgc2V0IGluZGV4IDAgfSAgeyAkaW5kZXggPCBbbGxlbmd0aCAkYWxsX3NjcmlwdHNdIH0gIHsgaW5jciBpbmRleCB9IHsKLQkJbG9nICJcW0lORk9cXTogQUJDOiBXaXJlTG9hZCA6IFNfJGluZGV4IgotCQlkZXNpZ24gLWxvYWQgbXlEZXNpZ24KLQotCQlhYmMgLUQgJGNsb2NrX3BlcmlvZCBcCi0JCQktY29uc3RyICIkc2RjX2ZpbGUiIFwKLQkJCS1saWJlcnR5ICRzY2xpYiAgXAotCQkJLXNjcmlwdCBbbGluZGV4ICRhbGxfc2NyaXB0cyAkaW5kZXhdCi0KLQkJc2V0dW5kZWYgLXplcm8KLQotCQloaWxvbWFwIC1oaWNlbGwgeyp9JDo6ZW52KFNZTlRIX1RJRUhJX1BPUlQpIC1sb2NlbGwgeyp9JDo6ZW52KFNZTlRIX1RJRUxPX1BPUlQpCi0KLQkJIyBnZXQgcmlkIG9mIHRoZSBhc3NpZ25tZW50cyB0aGF0IG1ha2UgdmVyaWxvZzJkZWYgZmFpbAotCQlzcGxpdG5ldHMKLQkJb3B0X2NsZWFuIC1wdXJnZQotCQlpbnNidWYgLWJ1ZiB7Kn0kOjplbnYoU1lOVEhfTUlOX0JVRl9QT1JUKQotCi0JCXRlZSAtbyAiJDo6ZW52KHlvc3lzX3JlcG9ydF9maWxlX3RhZylfJGluZGV4JGNoa19leHQiIGNoZWNrCi0JCXdyaXRlX3Zlcmlsb2cgLW5vYXR0ciAtbm9leHByIC1ub2hleCAtbm9kZWMgLWRlZnBhcmFtICIkOjplbnYoeW9zeXNfcmVzdWx0X2ZpbGVfdGFnKV8kaW5kZXgudiIKLQkJZGVzaWduIC1yZXNldAotCX0KLX0gZWxzZSB7Ci0KLQlsb2cgIlxbSU5GT1xdOiBBQkM6IFdpcmVMb2FkIDogU18kc3RyYXRlZ3kiCi0KLQlhYmMgLUQgJGNsb2NrX3BlcmlvZCBcCi0JCS1jb25zdHIgIiRzZGNfZmlsZSIgXAotCQktbGliZXJ0eSAkc2NsaWIgIFwKLQkJLXNjcmlwdCBbbGluZGV4ICRhbGxfc2NyaXB0cyAkc3RyYXRlZ3ldIFwKLQkJLXNob3d0bXA7Ci0KLQlzZXR1bmRlZiAtemVybwotCi0JaGlsb21hcCAtaGljZWxsIHsqfSQ6OmVudihTWU5USF9USUVISV9QT1JUKSAtbG9jZWxsIHsqfSQ6OmVudihTWU5USF9USUVMT19QT1JUKQotCi0JIyBnZXQgcmlkIG9mIHRoZSBhc3NpZ25tZW50cyB0aGF0IG1ha2UgdmVyaWxvZzJkZWYgZmFpbAotCXNwbGl0bmV0cwotCW9wdF9jbGVhbiAtcHVyZ2UKLQlpbnNidWYgLWJ1ZiB7Kn0kOjplbnYoU1lOVEhfTUlOX0JVRl9QT1JUKQotCi0JdGVlIC1vICIkOjplbnYoeW9zeXNfcmVwb3J0X2ZpbGVfdGFnKV8kc3RyYXRlZ3kkY2hrX2V4dCIgY2hlY2sKLQl3cml0ZV92ZXJpbG9nIC1ub2F0dHIgLW5vZXhwciAtbm9oZXggLW5vZGVjIC1kZWZwYXJhbSAiJDo6ZW52KFNBVkVfTkVUTElTVCkiCi19Ci0KLSNpZiB7ICQ6OmVudihTWU5USF9OT19GTEFUKSB9IHsKLSMJZGVzaWduIC1yZXNldAotIwlmaWxlIGNvcHkgLWZvcmNlICQ6OmVudihTQVZFX05FVExJU1QpICQ6OmVudih5b3N5c190bXBfZmlsZV90YWcpX3VuZmxhdC52Ci0jCXJlYWRfdmVyaWxvZyAtc3YgJDo6ZW52KFNBVkVfTkVUTElTVCkKLSMJc3ludGggLXRvcCAkdnRvcCAtZmxhdHRlbgotIwlzcGxpdG5ldHMKLSMJb3B0X2NsZWFuIC1wdXJnZQotIwlpbnNidWYgLWJ1ZiB7Kn0kOjplbnYoU1lOVEhfTUlOX0JVRl9QT1JUKQotIwl3cml0ZV92ZXJpbG9nIC1ub2F0dHIgLW5vZXhwciAtbm9oZXggLW5vZGVjIC1kZWZwYXJhbSAiJDo6ZW52KFNBVkVfTkVUTElTVCkiCi0jCXRlZSAtbyAiJDo6ZW52KHlvc3lzX3JlcG9ydF9maWxlX3RhZylfJHN0cmF0ZWd5JGNoa19leHQiIGNoZWNrCi0jfQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvdXByal9uZXRsaXN0cy52IGIvdmVyaWxvZy9ydGwvdXByal9uZXRsaXN0cy52CmluZGV4IDFiN2U0OGMuLmI5ZmM0NTQgMTAwNjQ0Ci0tLSBhL3Zlcmlsb2cvcnRsL3VwcmpfbmV0bGlzdHMudgorKysgYi92ZXJpbG9nL3J0bC91cHJqX25ldGxpc3RzLnYKQEAgLTMwLDcgKzMwLDcgQEAKICAgICAgICAgYGluY2x1ZGUgInVhcnRfaTJjbS52IgogICAgICAgICBgaW5jbHVkZSAid2JfaW50ZXJjb25uZWN0LnYiCiAgICAgICAgIGBpbmNsdWRlICJ1c2VyX3Byb2plY3Rfd3JhcHBlci52IgotICAgICAgICBgaW5jbHVkZSAic3ludGFjb3JlLnYiCisgICAgICAgIGBpbmNsdWRlICJ5aWZpdmUudiIKICAgICAgICAgYGluY2x1ZGUgIndiX2hvc3QudiIKIAlgaW5jbHVkZSAiY2xrX3NrZXdfYWRqdXN0LnYiCiAJYGluY2x1ZGUgImNsa19idWYudiIKQEAgLTExMCwzOSArMTEwLDM5IEBACiAgICAgIGBpbmNsdWRlICJ3Yl9pbnRlcmNvbm5lY3Qvc3JjL3diX2ludGVyY29ubmVjdC5zdiIKIAogCi0gICAgIGBpbmNsdWRlICJzeW50YWNvcmUvc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfaGR1LnN2IgotICAgICBgaW5jbHVkZSAic3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX3RkdS5zdiIKLSAgICAgYGluY2x1ZGUgInN5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfaXBpYy5zdiIKLSAgICAgYGluY2x1ZGUgInN5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9jc3Iuc3YiCi0gICAgIGBpbmNsdWRlICJzeW50YWNvcmUvc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfZXh1LnN2IgotICAgICBgaW5jbHVkZSAic3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2lhbHUuc3YiCi0gICAgIGBpbmNsdWRlICJzeW50YWNvcmUvc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfaWR1LnN2IgotICAgICBgaW5jbHVkZSAic3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2lmdS5zdiIKLSAgICAgYGluY2x1ZGUgInN5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9sc3Uuc3YiCi0gICAgIGBpbmNsdWRlICJzeW50YWNvcmUvc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfbXByZi5zdiIKLSAgICAgYGluY2x1ZGUgInN5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9tdWwuc3YiCi0gICAgIGBpbmNsdWRlICJzeW50YWNvcmUvc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfZGl2LnN2IgotICAgICBgaW5jbHVkZSAic3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX3RvcC5zdiIKLSAgICAgYGluY2x1ZGUgInN5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3ByaW1pdGl2ZXMvc2NyMV9yZXNldF9jZWxscy5zdiIKLSAgICAgYGluY2x1ZGUgInN5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3ByaW1pdGl2ZXMvc2NyMV9jZy5zdiIKLSAgICAgYGluY2x1ZGUgInN5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3NjcjFfY2xrX2N0cmwuc3YiCi0gICAgIGBpbmNsdWRlICJzeW50YWNvcmUvc2NyMS9zcmMvY29yZS9zY3IxX3RhcGNfc2hpZnRfcmVnLnN2IgotICAgICBgaW5jbHVkZSAic3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvc2NyMV90YXBjLnN2IgotICAgICBgaW5jbHVkZSAic3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvc2NyMV90YXBjX3N5bmNocm9uaXplci5zdiIKLSAgICAgYGluY2x1ZGUgInN5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3NjcjFfY29yZV90b3Auc3YiCi0gICAgIGBpbmNsdWRlICJzeW50YWNvcmUvc2NyMS9zcmMvY29yZS9zY3IxX2RtLnN2IgotICAgICBgaW5jbHVkZSAic3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvc2NyMV9kbWkuc3YiCi0gICAgIGBpbmNsdWRlICJzeW50YWNvcmUvc2NyMS9zcmMvY29yZS9zY3IxX3NjdS5zdiIKKyAgICAgYGluY2x1ZGUgInlpZml2ZS95Y3IxL3NyYy9jb3JlL3BpcGVsaW5lL3ljcjFfcGlwZV9oZHUuc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMS9zcmMvY29yZS9waXBlbGluZS95Y3IxX3BpcGVfdGR1LnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjEvc3JjL2NvcmUvcGlwZWxpbmUveWNyMV9pcGljLnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjEvc3JjL2NvcmUvcGlwZWxpbmUveWNyMV9waXBlX2Nzci5zdiIKKyAgICAgYGluY2x1ZGUgInlpZml2ZS95Y3IxL3NyYy9jb3JlL3BpcGVsaW5lL3ljcjFfcGlwZV9leHUuc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMS9zcmMvY29yZS9waXBlbGluZS95Y3IxX3BpcGVfaWFsdS5zdiIKKyAgICAgYGluY2x1ZGUgInlpZml2ZS95Y3IxL3NyYy9jb3JlL3BpcGVsaW5lL3ljcjFfcGlwZV9pZHUuc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMS9zcmMvY29yZS9waXBlbGluZS95Y3IxX3BpcGVfaWZ1LnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjEvc3JjL2NvcmUvcGlwZWxpbmUveWNyMV9waXBlX2xzdS5zdiIKKyAgICAgYGluY2x1ZGUgInlpZml2ZS95Y3IxL3NyYy9jb3JlL3BpcGVsaW5lL3ljcjFfcGlwZV9tcHJmLnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjEvc3JjL2NvcmUvcGlwZWxpbmUveWNyMV9waXBlX211bC5zdiIKKyAgICAgYGluY2x1ZGUgInlpZml2ZS95Y3IxL3NyYy9jb3JlL3BpcGVsaW5lL3ljcjFfcGlwZV9kaXYuc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMS9zcmMvY29yZS9waXBlbGluZS95Y3IxX3BpcGVfdG9wLnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjEvc3JjL2NvcmUvcHJpbWl0aXZlcy95Y3IxX3Jlc2V0X2NlbGxzLnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjEvc3JjL2NvcmUvcHJpbWl0aXZlcy95Y3IxX2NnLnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjEvc3JjL2NvcmUveWNyMV9jbGtfY3RybC5zdiIKKyAgICAgYGluY2x1ZGUgInlpZml2ZS95Y3IxL3NyYy9jb3JlL3ljcjFfdGFwY19zaGlmdF9yZWcuc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMS9zcmMvY29yZS95Y3IxX3RhcGMuc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMS9zcmMvY29yZS95Y3IxX3RhcGNfc3luY2hyb25pemVyLnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjEvc3JjL2NvcmUveWNyMV9jb3JlX3RvcC5zdiIKKyAgICAgYGluY2x1ZGUgInlpZml2ZS95Y3IxL3NyYy9jb3JlL3ljcjFfZG0uc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMS9zcmMvY29yZS95Y3IxX2RtaS5zdiIKKyAgICAgYGluY2x1ZGUgInlpZml2ZS95Y3IxL3NyYy9jb3JlL3ljcjFfc2N1LnN2IgogICAgICAgCi0gICAgIGBpbmNsdWRlICJzeW50YWNvcmUvc2NyMS9zcmMvdG9wL3NjcjFfaW1lbV9yb3V0ZXIuc3YiCi0gICAgIGBpbmNsdWRlICJzeW50YWNvcmUvc2NyMS9zcmMvdG9wL3NjcjFfZG1lbV9yb3V0ZXIuc3YiCi0gICAgIGBpbmNsdWRlICJzeW50YWNvcmUvc2NyMS9zcmMvdG9wL3NjcjFfZHBfbWVtb3J5LnN2IgotICAgICBgaW5jbHVkZSAic3ludGFjb3JlL3NjcjEvc3JjL3RvcC9zY3IxX3RjbS5zdiIKLSAgICAgYGluY2x1ZGUgInN5bnRhY29yZS9zY3IxL3NyYy90b3Avc2NyMV90aW1lci5zdiIKLSAgICAgYGluY2x1ZGUgInN5bnRhY29yZS9zY3IxL3NyYy90b3Avc2NyMV9kbWVtX3diLnN2IgotICAgICBgaW5jbHVkZSAic3ludGFjb3JlL3NjcjEvc3JjL3RvcC9zY3IxX2ltZW1fd2Iuc3YiCi0gICAgIGBpbmNsdWRlICJzeW50YWNvcmUvc2NyMS9zcmMvdG9wL3NjcjFfaW50Zi5zdiIKLSAgICAgYGluY2x1ZGUgInN5bnRhY29yZS9zY3IxL3NyYy90b3Avc2NyMV90b3Bfd2Iuc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMS9zcmMvdG9wL3ljcjFfaW1lbV9yb3V0ZXIuc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMS9zcmMvdG9wL3ljcjFfZG1lbV9yb3V0ZXIuc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMS9zcmMvdG9wL3ljcjFfZHBfbWVtb3J5LnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjEvc3JjL3RvcC95Y3IxX3RjbS5zdiIKKyAgICAgYGluY2x1ZGUgInlpZml2ZS95Y3IxL3NyYy90b3AveWNyMV90aW1lci5zdiIKKyAgICAgYGluY2x1ZGUgInlpZml2ZS95Y3IxL3NyYy90b3AveWNyMV9kbWVtX3diLnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjEvc3JjL3RvcC95Y3IxX2ltZW1fd2Iuc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMS9zcmMvdG9wL3ljcjFfaW50Zi5zdiIKKyAgICAgYGluY2x1ZGUgInlpZml2ZS95Y3IxL3NyYy90b3AveWNyMV90b3Bfd2Iuc3YiCiAgICAgIGBpbmNsdWRlICJsaWIvc3luY19maWZvLnN2IgogCiAgICAgIGBpbmNsdWRlICJtYmlzdC9zcmMvY29yZS9tYmlzdF9hZGRyX2dlbi5zdiIKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3VzZXJfcHJvamVjdF93cmFwcGVyLnYgYi92ZXJpbG9nL3J0bC91c2VyX3Byb2plY3Rfd3JhcHBlci52CmluZGV4IDBhMDBiOTIuLjdiMzk2MTEgMTAwNjQ0Ci0tLSBhL3Zlcmlsb2cvcnRsL3VzZXJfcHJvamVjdF93cmFwcGVyLnYKKysrIGIvdmVyaWxvZy9ydGwvdXNlcl9wcm9qZWN0X3dyYXBwZXIudgpAQCAtMTQ3LDYgKzE0Nyw5IEBACiAvLy8vICAgICAgIFRDTSBSQU0gQnVnIGZpeCBpbnNpZGUgc3ludGFjb3JlICAgICAgICAgICAgICAgICAgICAgICAvLy8vCiAvLy8vICAgIDIuNiAgSmFuIDA4LCAyMDIyLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCiAvLy8vICAgICAgICBQaW5tdXggSW50ZXJydXB0IExvZ2ljIGNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDMuMCAgSmFuIDE0LCAyMDIyLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICBNb3ZpbmcgZnJvbSByaXNjdiBjb3JlIGZyb20gc3ludGFjb3JlL3NjcjEgdG8gICAgICAgICAvLy8vCisvLy8vICAgICAgICB5Zml2ZS95Y3IxIG9uIHNhbmtyYW50aSAyMDIyIChBIEhpbmR1IE5ldyBZZWFyKSAgICAgICAvLy8vCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCiAvLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCkBAIC02NzMsNyArNjc2LDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBSSVNDIFYgQ29yZSBpbnN0YW5jZQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXNjcjFfdG9wX3diIHVfcmlzY3ZfdG9wICgKK3ljcjFfdG9wX3diIHVfcmlzY3ZfdG9wICgKIGBpZmRlZiBVU0VfUE9XRVJfUElOUwogICAgIC52Y2NkMSAgICAgICAgICAgICAgICAgKHZjY2QxICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CiAgICAgLnZzc2QxICAgICAgICAgICAgICAgICAodnNzZDEgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3lpZml2ZS95Y3IxIGIvdmVyaWxvZy9ydGwveWlmaXZlL3ljcjEKbmV3IGZpbGUgbW9kZSAxNjAwMDAKaW5kZXggMDAwMDAwMC4uZjc0MzhkYwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3lpZml2ZS95Y3IxCkBAIC0wLDAgKzEgQEAKK1N1YnByb2plY3QgY29tbWl0IGY3NDM4ZGM2NTFhODM4ZTJlOTIyZjZkYzE3NTM5NDkzMjllN2I1YTkK