From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 28108 invoked from network); 15 Dec 2023 23:40:04 -0000 Received: from localhost (HELO inbox.vuxu.org) (::1) by localhost with ESMTPUTF8; 15 Dec 2023 23:40:04 -0000 Content-Type: multipart/mixed; boundary="===============9221531594149100553==" MIME-Version: 1.0 Subject: =?utf8?q?Re=3A_=5BPR_PATCH=5D_=5BUpdated=5D_Poppler_23=2E12=2E0?= To: ml@inbox.vuxu.org From: sgn Reply-to: ml@inbox.vuxu.org In-Reply-To: References: Date: Sat, 16 Dec 2023 00:40:04 +0100 List-Id: Message-ID: <20231215234004.SK6M9zz4jakCsYAx48W8yehLsIf6DP25xyttXsXYCd0@z> GitHub notification mails are now in MIME to allow UTF8. --===============9221531594149100553== Content-Type: text/plain; charset="utf8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 VGhlcmUgaXMgYW4gdXBkYXRlZCBwdWxsIHJlcXVlc3QgYnkgc2duIGFnYWluc3QgbWFzdGVyIG9u IHRoZSB2b2lkLXBhY2thZ2VzIHJlcG9zaXRvcnkKCmh0dHBzOi8vZ2l0aHViLmNvbS9taG1kYW5h cy92b2lkLXBhY2thZ2VzIHBvcHBsZXItMjMuMDkuMApodHRwczovL2dpdGh1Yi5jb20vdm9pZC1s aW51eC92b2lkLXBhY2thZ2VzL3B1bGwvNDYxMDcKClBvcHBsZXIgMjMuMTIuMAo8IS0tIFVuY29t bWVudCByZWxldmFudCBzZWN0aW9ucyBhbmQgZGVsZXRlIG9wdGlvbnMgd2hpY2ggYXJlIG5vdCBh cHBsaWNhYmxlIC0tPg0KDQojIyMjIFRlc3RpbmcgdGhlIGNoYW5nZXMNCi0gSSB0ZXN0ZWQgdGhl IGNoYW5nZXMgaW4gdGhpcyBQUjogKipZRVMqKiAoYW5kIGJ1aWx0IGFsbCByZXZkZXBzIHN1Y2Nl c3NmdWxseSkNCg0KW2NpIHNraXBdDQo8IS0tDQojIyMjIE5ldyBwYWNrYWdlDQotIFRoaXMgbmV3 IHBhY2thZ2UgY29uZm9ybXMgdG8gdGhlIFtwYWNrYWdlIHJlcXVpcmVtZW50c10oaHR0cHM6Ly9n aXRodWIuY29tL3ZvaWQtbGludXgvdm9pZC1wYWNrYWdlcy9ibG9iL21hc3Rlci9DT05UUklCVVRJ TkcubWQjcGFja2FnZS1yZXF1aXJlbWVudHMpOiAqKllFUyoqfCoqTk8qKg0KLS0+DQoNCjwhLS0g Tm90ZTogSWYgdGhlIGJ1aWxkIGlzIGxpa2VseSB0byB0YWtlIG1vcmUgdGhhbiAyIGhvdXJzLCBw bGVhc2UgYWRkIGNpIHNraXAgdGFnIGFzIGRlc2NyaWJlZCBpbg0KaHR0cHM6Ly9naXRodWIuY29t L3ZvaWQtbGludXgvdm9pZC1wYWNrYWdlcy9ibG9iL21hc3Rlci9DT05UUklCVVRJTkcubWQjY29u dGludW91cy1pbnRlZ3JhdGlvbg0KYW5kIHRlc3QgYXQgbGVhc3Qgb25lIG5hdGl2ZSBidWlsZCBh bmQsIGlmIHN1cHBvcnRlZCwgYXQgbGVhc3Qgb25lIGNyb3NzIGJ1aWxkLg0KSWdub3JlIHRoaXMg c2VjdGlvbiBpZiB0aGlzIFBSIGlzIG5vdCBza2lwcGluZyBDSS4NCi0tPg0KPCEtLQ0KIyMjIyBM b2NhbCBidWlsZCB0ZXN0aW5nDQotIEkgYnVpbHQgdGhpcyBQUiBsb2NhbGx5IGZvciBteSBuYXRp dmUgYXJjaGl0ZWN0dXJlLCAoQVJDSC1MSUJDKQ0KLSBJIGJ1aWx0IHRoaXMgUFIgbG9jYWxseSBm b3IgdGhlc2UgYXJjaGl0ZWN0dXJlcyAoaWYgc3VwcG9ydGVkLiBtYXJrIGNyb3NzYnVpbGRzKToN CiAgLSBhYXJjaDY0LW11c2wNCiAgLSBhcm12N2wNCiAgLSBhcm12NmwtbXVzbA0KLS0+DQoKCkEg cGF0Y2ggZmlsZSBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS92b2lkLWxpbnV4L3ZvaWQtcGFja2Fn ZXMvcHVsbC80NjEwNy5wYXRjaCBpcyBhdHRhY2hlZA== --===============9221531594149100553== Content-Type: text/x-diff MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="github-pr-poppler-23.09.0-46107.patch" RnJvbSA3YWU2YmEzMDI5MjFhYjIyYjgzZTFiMDUwNTkxNWNlYTk2Yzc1NGQ4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiB0cmlhbGxheCA8dHJpYWxsYXhAdHV0YW5vdGEuY29tPgpEYXRl OiBTdW4sIDE3IFNlcCAyMDIzIDIxOjUyOjI4ICswMTAwClN1YmplY3Q6IFtQQVRDSCAxLzhdIHBv cHBsZXI6IHVwZGF0ZSB0byAyMy4xMi4wLgoKLS0tCiBjb21tb24vc2hsaWJzICAgICAgICAgICAg fCAgMiArLQogc3JjcGtncy9wb3BwbGVyL3RlbXBsYXRlIHwgMTMgKysrKysrLS0tLS0tLQogMiBm aWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvY29tbW9uL3NobGlicyBiL2NvbW1vbi9zaGxpYnMKaW5kZXggNjZkMDA0NWEyODk4Zi4uMzkz Yjc0MzZjZWZhMiAxMDA2NDQKLS0tIGEvY29tbW9uL3NobGlicworKysgYi9jb21tb24vc2hsaWJz CkBAIC0zNDUsNyArMzQ1LDcgQEAgbGliTWFnaWNrQ29yZS03LlExNkhEUkkuc28uMTAgbGlibWFn aWNrLTcuMS4wLjEwXzEKIGxpYk1hZ2lja1dhbmQtNy5RMTZIRFJJLnNvLjEwIGxpYm1hZ2ljay03 LjEuMC4xMF8xCiBsaWJNYWdpY2srKy03LlExNkhEUkkuc28uNSBsaWJtYWdpY2stNy4wLjExLjFf MQogbGlibHRkbC5zby43IGxpYmx0ZGwtMi4yLjZfMQotbGlicG9wcGxlci5zby4xMzAgbGlicG9w cGxlci0yMy4wOC4wXzEKK2xpYnBvcHBsZXIuc28uMTMzIGxpYnBvcHBsZXItMjMuMTIuMF8xCiBs aWJwb3BwbGVyLWdsaWIuc28uOCBwb3BwbGVyLWdsaWItMC4xOC4yXzEKIGxpYnBvcHBsZXItY3Bw LnNvLjAgcG9wcGxlci1jcHAtMC4xOC4yXzEKIGxpYnBvcHBsZXItcXQ1LnNvLjEgcG9wcGxlci1x dDUtMC4zMS4wXzEKZGlmZiAtLWdpdCBhL3NyY3BrZ3MvcG9wcGxlci90ZW1wbGF0ZSBiL3NyY3Br Z3MvcG9wcGxlci90ZW1wbGF0ZQppbmRleCAyYmUzZTVhYjM1ZTQ3Li40NTZlNWMyZmVjYjIyIDEw MDY0NAotLS0gYS9zcmNwa2dzL3BvcHBsZXIvdGVtcGxhdGUKKysrIGIvc3JjcGtncy9wb3BwbGVy L3RlbXBsYXRlCkBAIC0xLDE4ICsxLDE3IEBACiAjIFRlbXBsYXRlIGZpbGUgZm9yICdwb3BwbGVy JwogIwogIyBUSElTIFBLRyBNVVNUIEJFIFNZTkNIUk9OSVpFRCBXSVRIICJzcmNwa2dzL3BvcHBs ZXItcXQ1Ii4KLSMKLSMgUmV2YnVtcCBsaWJyZW9mZmljZSBvbiBTTyB2ZXJzaW9uIGJ1bXBzLgog cGtnbmFtZT1wb3BwbGVyCi12ZXJzaW9uPTIzLjA4LjAKK3ZlcnNpb249MjMuMTIuMAogcmV2aXNp b249MQotX3Rlc3RWZXJzaW9uPTkyMGM4OWY4ZjQzYmRmZTg5NjZjOGUzOTdlN2Y2N2Y1MzAyZTk0 MzUKK190ZXN0VmVyc2lvbj00MDBmM2ZmMDViMmIxYzBhZTE3Nzk3YTBiZDUwZTc1ZTM1YzFmMWIx CiBjcmVhdGVfd3Jrc3JjPXllcwogYnVpbGRfc3R5bGU9Y21ha2UKIGJ1aWxkX2hlbHBlcj0iZ2ly IgogY29uZmlndXJlX2FyZ3M9Ii1ERU5BQkxFX1VOU1RBQkxFX0FQSV9BQklfSEVBREVSUz1PTiAt REVOQUJMRV9DUFA9T04KICAtREVOQUJMRV9HTElCPU9OIC1ERU5BQkxFX0dPQkpFQ1RfSU5UUk9T UEVDVElPTj0kKHZvcHRfaWYgZ2lyIE9OIE9GRikKLSAtREVOQUJMRV9RVDU9T0ZGIC1ERU5BQkxF X1VUSUxTPU9OIC1ERU5BQkxFX0JPT1NUPSQodm9wdF9pZiBib29zdCBPTiBPRkYpCisgLURFTkFC TEVfUVQ1PU9GRiAtREVOQUJMRV9RVDY9T0ZGIC1ERU5BQkxFX1VUSUxTPU9OCisgLURFTkFCTEVf Qk9PU1Q9JCh2b3B0X2lmIGJvb3N0IE9OIE9GRikKICAtRFRFU1REQVRBRElSPScke1hCUFNfQlVJ TERESVJ9L3BvcHBsZXItJHt2ZXJzaW9ufS90ZXN0ZGF0YWRpciciCiBob3N0bWFrZWRlcGVuZHM9 InBrZy1jb25maWcgZ2xpYi1kZXZlbCIKIG1ha2VkZXBlbmRzPSJsaWJwbmctZGV2ZWwgbGliZ2xp Yi1kZXZlbCBjYWlyby1kZXZlbCB0aWZmLWRldmVsIGxjbXMyLWRldmVsCkBAIC0yNSw4ICsyNCw4 IEBAIGhvbWVwYWdlPSJodHRwczovL3BvcHBsZXIuZnJlZWRlc2t0b3Aub3JnIgogY2hhbmdlbG9n PSJodHRwczovL2dpdGxhYi5mcmVlZGVza3RvcC5vcmcvcG9wcGxlci9wb3BwbGVyLy0vcmF3L21h c3Rlci9ORVdTIgogZGlzdGZpbGVzPSJodHRwczovL3BvcHBsZXIuZnJlZWRlc2t0b3Aub3JnL3Bv cHBsZXItJHt2ZXJzaW9ufS50YXIueHoKICBodHRwczovL2dpdGxhYi5mcmVlZGVza3RvcC5vcmcv cG9wcGxlci90ZXN0Ly0vYXJjaGl2ZS8ke190ZXN0VmVyc2lvbn0vdGVzdC0ke190ZXN0VmVyc2lv bn0udGFyLmd6IgotY2hlY2tzdW09IjRhNGJmN2ZjOTAzYjlmMWEyYWI3ZDA0YjdjNWQ4MjIwZGI5 YmM2MjYxY2M3M2ZkYjlhODI2ZGMyNzJmNDlhYTgKLSBjYTM1ZjE2OGExODAzOGEyZDgxN2VhMzBk NmM3YjRhYjgyOTRhNDBhNWY1OTUwZjNjMmExNTE4M2JhMDhjOTAwIgorY2hlY2tzdW09ImJlYmEz OThjOWQzN2E5YjZkMDI0ODY0OTY2MzVlMDhmMWRmM2Q0MzdjZmU2MWRhYjI1OTNmNDdjNGQxNGNk YmIKKyAwZDg1MGExZDA2OTQ0NjcxYzk5MWJlNjgyMmI3MTQ2YWRlNDAxYjA2YWFkNTYwZmYzOWIy NTRhMDI4MDc0NTI1IgogCiBidWlsZF9vcHRpb25zPSJnaXIgYm9vc3QiCiBidWlsZF9vcHRpb25z X2RlZmF1bHQ9ImdpciBib29zdCIKCkZyb20gYzBlZTAyM2M0MzkxYmJjOWFiMjNkYWM2OWQ0Njhj MWJiNmMzMTQwMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogdHJpYWxsYXggPHRyaWFs bGF4QHR1dGFub3RhLmNvbT4KRGF0ZTogU3VuLCAxNyBTZXAgMjAyMyAyMTo1MjoyOCArMDEwMApT dWJqZWN0OiBbUEFUQ0ggMi84XSBwb3BwbGVyLXF0NTogdXBkYXRlIHRvIDIzLjEyLjAuCgotLS0K IHNyY3BrZ3MvcG9wcGxlci1xdDUvdGVtcGxhdGUgfCA0ICsrLS0KIDEgZmlsZSBjaGFuZ2VkLCAy IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjcGtncy9wb3Bw bGVyLXF0NS90ZW1wbGF0ZSBiL3NyY3BrZ3MvcG9wcGxlci1xdDUvdGVtcGxhdGUKaW5kZXggMmE0 OGVkNjU5OTIwZS4uOGRjMWQxNDliZjBjNSAxMDA2NDQKLS0tIGEvc3JjcGtncy9wb3BwbGVyLXF0 NS90ZW1wbGF0ZQorKysgYi9zcmNwa2dzL3BvcHBsZXItcXQ1L3RlbXBsYXRlCkBAIC00LDcgKzQs NyBAQAogIyBJVCBJUyBTUExJVCBUTyBBVk9JRCBBIENZQ0xJQyBERVBFTkRFTkNZOiBxdDUgLT4g Y3VwcyAtPiBwb3BwbGVyIC0+IHF0NS4KICMKIHBrZ25hbWU9cG9wcGxlci1xdDUKLXZlcnNpb249 MjMuMDguMAordmVyc2lvbj0yMy4xMi4wCiByZXZpc2lvbj0xCiBidWlsZF9zdHlsZT1jbWFrZQog Y29uZmlndXJlX2FyZ3M9Ii1ERU5BQkxFX1VOU1RBQkxFX0FQSV9BQklfSEVBREVSUz1PTiAtREVO QUJMRV9HTElCPU9GRgpAQCAtMjEsNyArMjEsNyBAQCBsaWNlbnNlPSJHUEwtMi4wLW9yLWxhdGVy LCBHUEwtMy4wLW9yLWxhdGVyIgogaG9tZXBhZ2U9Imh0dHBzOi8vcG9wcGxlci5mcmVlZGVza3Rv cC5vcmciCiBjaGFuZ2Vsb2c9Imh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9wb3BwbGVy L3BvcHBsZXIvLS9yYXcvbWFzdGVyL05FV1MiCiBkaXN0ZmlsZXM9Imh0dHBzOi8vcG9wcGxlci5m cmVlZGVza3RvcC5vcmcvcG9wcGxlci0ke3ZlcnNpb259LnRhci54eiIKLWNoZWNrc3VtPTRhNGJm N2ZjOTAzYjlmMWEyYWI3ZDA0YjdjNWQ4MjIwZGI5YmM2MjYxY2M3M2ZkYjlhODI2ZGMyNzJmNDlh YTgKK2NoZWNrc3VtPWJlYmEzOThjOWQzN2E5YjZkMDI0ODY0OTY2MzVlMDhmMWRmM2Q0MzdjZmU2 MWRhYjI1OTNmNDdjNGQxNGNkYmIKICMgZmFpbHMgdG8gZmluZCBhIGJ1bmNoIG9mIGZpbGVzCiBt YWtlX2NoZWNrPW5vCiAKCkZyb20gYzQ2MmJhNWEzMmI3NzZlY2U1ZDE3MWRhOTkwNGQxOGU3Zjg4 MzM1YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogTW9oYW1tZWQgQW5hcyA8dHJpYWxs YXhAdHV0YW5vdGEuY29tPgpEYXRlOiBUdWUsIDEyIERlYyAyMDIzIDExOjQ4OjAzICswMDAwClN1 YmplY3Q6IFtQQVRDSCAzLzhdIGlua3NjYXBlOiByZXZidW1wIGZvciBwb3BwbGVyLTIzLjEyLjAu CgotLS0KIHNyY3BrZ3MvaW5rc2NhcGUvdGVtcGxhdGUgfCAyICstCiAxIGZpbGUgY2hhbmdlZCwg MSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9zcmNwa2dzL2lua3Nj YXBlL3RlbXBsYXRlIGIvc3JjcGtncy9pbmtzY2FwZS90ZW1wbGF0ZQppbmRleCA5MTY4MjIwNzhj ZDI3Li5hMjNiZjRlODdlNjFjIDEwMDY0NAotLS0gYS9zcmNwa2dzL2lua3NjYXBlL3RlbXBsYXRl CisrKyBiL3NyY3BrZ3MvaW5rc2NhcGUvdGVtcGxhdGUKQEAgLTEsNyArMSw3IEBACiAjIFRlbXBs YXRlIGZpbGUgZm9yICdpbmtzY2FwZScKIHBrZ25hbWU9aW5rc2NhcGUKIHZlcnNpb249MS4zLjIK LXJldmlzaW9uPTEKK3JldmlzaW9uPTIKIGJ1aWxkX3N0eWxlPWNtYWtlCiBtYWtlX2NoZWNrX3Rh cmdldD0iY2hlY2siCiBob3N0bWFrZWRlcGVuZHM9ImF1dG9tYWtlIGdldHRleHQgZ2xpYi1kZXZl bCBpbnRsdG9vbCBsaWJncmFwaGljc21hZ2ljay1kZXZlbAoKRnJvbSBmODY5MjZkMTcyMGRmZmE5 ZmU0NzQ4YTAzNTkzOTc5Njk1NGE5NWFkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBN b2hhbW1lZCBBbmFzIDx0cmlhbGxheEB0dXRhbm90YS5jb20+CkRhdGU6IFR1ZSwgMTIgRGVjIDIw MjMgMTE6NDg6MDMgKzAwMDAKU3ViamVjdDogW1BBVENIIDQvOF0gaXBlOiByZXZidW1wIGZvciBw b3BwbGVyLTIzLjEyLjAuCgotLS0KIHNyY3BrZ3MvaXBlL3RlbXBsYXRlIHwgMiArLQogMSBmaWxl IGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3Jj cGtncy9pcGUvdGVtcGxhdGUgYi9zcmNwa2dzL2lwZS90ZW1wbGF0ZQppbmRleCA2NWI5MjM4NWFm OTk0Li4wNjM0NzkzNGQ5ODk3IDEwMDY0NAotLS0gYS9zcmNwa2dzL2lwZS90ZW1wbGF0ZQorKysg Yi9zcmNwa2dzL2lwZS90ZW1wbGF0ZQpAQCAtMSw3ICsxLDcgQEAKICMgVGVtcGxhdGUgZmlsZSBm b3IgJ2lwZScKIHBrZ25hbWU9aXBlCiB2ZXJzaW9uPTcuMi4yNgotcmV2aXNpb249MTAKK3Jldmlz aW9uPTExCiBfdG9vbHNfY29tbWl0PXY3LjIuMjQuMQogY3JlYXRlX3dya3NyYz15ZXMKIGhvc3Rt YWtlZGVwZW5kcz0icGtnLWNvbmZpZyBkb3h5Z2VuIHF0NS1xbWFrZSBxdDUtdG9vbHMgcXQ1LWhv c3QtdG9vbHMiCgpGcm9tIGQyM2JjNDU1ZjkyZWY3YTUwODMyMDAzYzYwN2MzMjU4MThhOTEyMjMg TW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IE1vaGFtbWVkIEFuYXMgPHRyaWFsbGF4QHR1 dGFub3RhLmNvbT4KRGF0ZTogVHVlLCAxMiBEZWMgMjAyMyAxMTo0ODowMyArMDAwMApTdWJqZWN0 OiBbUEFUQ0ggNS84XSBraXRpbmVyYXJ5OiByZXZidW1wIGZvciBwb3BwbGVyLTIzLjEyLjAuCgot LS0KIHNyY3BrZ3Mva2l0aW5lcmFyeS90ZW1wbGF0ZSB8IDIgKy0KIDEgZmlsZSBjaGFuZ2VkLCAx IGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL3NyY3BrZ3Mva2l0aW5l cmFyeS90ZW1wbGF0ZSBiL3NyY3BrZ3Mva2l0aW5lcmFyeS90ZW1wbGF0ZQppbmRleCAzMTIzNmEx NjZlZjJjLi41NTc1ZTRkZmI1N2Y1IDEwMDY0NAotLS0gYS9zcmNwa2dzL2tpdGluZXJhcnkvdGVt cGxhdGUKKysrIGIvc3JjcGtncy9raXRpbmVyYXJ5L3RlbXBsYXRlCkBAIC0xLDcgKzEsNyBAQAog IyBUZW1wbGF0ZSBmaWxlIGZvciAna2l0aW5lcmFyeScKIHBrZ25hbWU9a2l0aW5lcmFyeQogdmVy c2lvbj0yMy4wOC4wCi1yZXZpc2lvbj0xCityZXZpc2lvbj0yCiBidWlsZF9zdHlsZT1jbWFrZQog aG9zdG1ha2VkZXBlbmRzPSJleHRyYS1jbWFrZS1tb2R1bGVzIGdldHRleHQga2NvcmVhZGRvbnMg cGtnLWNvbmZpZwogIHF0NS1ob3N0LXRvb2xzIHF0NS1xbWFrZSBxdDUtdG9vbHMtZGV2ZWwiCgpG cm9tIDE2ODQwZmIyYWE3N2FmMzk2ZjE5MWU2NGI4MzlhY2Q5ZTYwMjllNWMgTW9uIFNlcCAxNyAw MDowMDowMCAyMDAxCkZyb206IE1vaGFtbWVkIEFuYXMgPHRyaWFsbGF4QHR1dGFub3RhLmNvbT4K RGF0ZTogVHVlLCAxMiBEZWMgMjAyMyAxMTo0ODowMyArMDAwMApTdWJqZWN0OiBbUEFUQ0ggNi84 XSBwZGYyZGp2dTogcmV2YnVtcCBmb3IgcG9wcGxlci0yMy4xMi4wLgoKQ2xvc2U6ICM0NjEwNwot LS0KIHNyY3BrZ3MvcGRmMmRqdnUvdGVtcGxhdGUgfCAyICstCiAxIGZpbGUgY2hhbmdlZCwgMSBp bnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9zcmNwa2dzL3BkZjJkanZ1 L3RlbXBsYXRlIGIvc3JjcGtncy9wZGYyZGp2dS90ZW1wbGF0ZQppbmRleCA1YTZmM2RkZjRlZDM1 Li45ODJjZTI0NTg3NTFjIDEwMDY0NAotLS0gYS9zcmNwa2dzL3BkZjJkanZ1L3RlbXBsYXRlCisr KyBiL3NyY3BrZ3MvcGRmMmRqdnUvdGVtcGxhdGUKQEAgLTEsNyArMSw3IEBACiAjIFRlbXBsYXRl IGZpbGUgZm9yICdwZGYyZGp2dScKIHBrZ25hbWU9cGRmMmRqdnUKIHZlcnNpb249MC45LjE5Ci1y ZXZpc2lvbj01CityZXZpc2lvbj02CiBidWlsZF9zdHlsZT1nbnUtY29uZmlndXJlCiBob3N0bWFr ZWRlcGVuZHM9InBrZy1jb25maWcgZGp2dWxpYnJlIGdldHRleHQiCiBtYWtlZGVwZW5kcz0iZGp2 dWxpYnJlLWRldmVsIHBvcHBsZXItZGV2ZWwgbGliZ3JhcGhpY3NtYWdpY2stZGV2ZWwgZXhpdjIt ZGV2ZWwgbGlidXVpZC1kZXZlbCIKCkZyb20gZjBmOGFlZWNiOGJhZGE2MjZiNjdiMDE2MzY0OWQ5 Y2U5MDYzY2U2YyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogPT9VVEYtOD9xPz1DND05 MG89QzM9QTBuPTIwVHI9RTE9QkE9QTduPTIwQz1DMz1CNG5nPTIwRGFuaD89CiA8Y29uZ2Rhbmhx eEBnbWFpbC5jb20+CkRhdGU6IFRodSwgMTQgRGVjIDIwMjMgMTQ6MDE6MjYgKzA3MDAKU3ViamVj dDogW1BBVENIIDcvOF0gc2NyaWJ1czogZm9yIHBvcHBsZXIgMjMuMTIuMAoKLS0tCiAuLi5yLTIy LjAzLjAtZm9yY2UtcG9wcGxlci0wLjg2LW1pbmltdW0ucGF0Y2ggfCAgNTI2ICsrKysrKwogLi4u LzAwMDItcG9wcGxlci0yMi4wMy4wLW1lbWxlYWsucGF0Y2ggICAgICAgIHwgICA5NCArCiAuLi4v MDAwNS1wb2RvZm8tMC4xMC1maW5kLXBvZG9mby5wYXRjaCAgICAgICAgfCAgIDM3ICsKIC4uLi1z d2FwLXBvZG9mby1wb3BwbGVyLWRlcC1jaGVjay1vcmRlci5wYXRjaCB8ICAxMDkgKysKIC4uLi8w MDA3LXBvZG9mby0wLjEwLW1pbmltdW0tMC45LjAucGF0Y2ggICAgICB8ICAgMjIgKwogLi4uLzAw MDgtcG9kb2ZvLTAuMTAtZHJvcC1vbGQtY29tcGF0LnBhdGNoICAgIHwgICA0OCArCiAuLi5kb2Zv LTAuMTAtYXZvaWQtY29uZnVzaW9uLXdpdGgtbV9kb2MucGF0Y2ggfCAgIDY3ICsKIC4uLi8wMDEw LXBvZG9mby0wLjEwLWluZGVudGF0aW9uLWZpeC5wYXRjaCAgICB8ICAgMjIgKwogLi4uL3BhdGNo ZXMvMDAxMS1wb2RvZm8tMC4xMC1jb2RlLXN0eWxlLnBhdGNoIHwgIDE0MSArKwogLi4uLzAwMTIt cG9kb2ZvLTAuMTAtcHJlcGFyYXRpb24ucGF0Y2ggICAgICAgIHwgIDUxNCArKysrKysKIC4uLjAx My1wb2RvZm8tMC4xMC1jb21wYXQtcG9kb2ZvLTAuMTAueC5wYXRjaCB8IDE2MDIgKysrKysrKysr KysrKysrKysKIC4uLjAwMTQtcG9kb2ZvLTAuMTAtY29tcGF0LXBvZG9mby0wLjkuNi5wYXRjaCB8 ICA4NTMgKysrKysrKysrCiAuLi4vcGF0Y2hlcy8wMDE1LXBvZG9mby0wLjEwLWNtYWtlLWZpeC5w YXRjaCAgfCAgIDIyICsKIC4uLi8wMDE2LXBvZG9mby0wLjEwLXVzZS1wa2djb25maWcucGF0Y2gg ICAgICB8ICAxMDcgKysKIC4uLi9wYXRjaGVzL2NtYWtlLWJ1aWxkdHlwZS1ub25lLnBhdGNoICAg ICAgICB8ICAgIDcgKy0KIHNyY3BrZ3Mvc2NyaWJ1cy90ZW1wbGF0ZSAgICAgICAgICAgICAgICAg ICAgICB8ICAgIDQgKy0KIDE2IGZpbGVzIGNoYW5nZWQsIDQxNzAgaW5zZXJ0aW9ucygrKSwgNSBk ZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmNwa2dzL3NjcmlidXMvcGF0Y2hlcy8w MDAyLXBvcHBsZXItMjIuMDMuMC1mb3JjZS1wb3BwbGVyLTAuODYtbWluaW11bS5wYXRjaAogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyY3BrZ3Mvc2NyaWJ1cy9wYXRjaGVzLzAwMDItcG9wcGxlci0yMi4w My4wLW1lbWxlYWsucGF0Y2gKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmNwa2dzL3NjcmlidXMvcGF0 Y2hlcy8wMDA1LXBvZG9mby0wLjEwLWZpbmQtcG9kb2ZvLnBhdGNoCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjcGtncy9zY3JpYnVzL3BhdGNoZXMvMDAwNi1wb2RvZm8tMC4xMC1zd2FwLXBvZG9mby1w b3BwbGVyLWRlcC1jaGVjay1vcmRlci5wYXRjaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyY3BrZ3Mv c2NyaWJ1cy9wYXRjaGVzLzAwMDctcG9kb2ZvLTAuMTAtbWluaW11bS0wLjkuMC5wYXRjaAogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyY3BrZ3Mvc2NyaWJ1cy9wYXRjaGVzLzAwMDgtcG9kb2ZvLTAuMTAt ZHJvcC1vbGQtY29tcGF0LnBhdGNoCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjcGtncy9zY3JpYnVz L3BhdGNoZXMvMDAwOS1wb2RvZm8tMC4xMC1hdm9pZC1jb25mdXNpb24td2l0aC1tX2RvYy5wYXRj aAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyY3BrZ3Mvc2NyaWJ1cy9wYXRjaGVzLzAwMTAtcG9kb2Zv LTAuMTAtaW5kZW50YXRpb24tZml4LnBhdGNoCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjcGtncy9z Y3JpYnVzL3BhdGNoZXMvMDAxMS1wb2RvZm8tMC4xMC1jb2RlLXN0eWxlLnBhdGNoCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjcGtncy9zY3JpYnVzL3BhdGNoZXMvMDAxMi1wb2RvZm8tMC4xMC1wcmVw YXJhdGlvbi5wYXRjaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyY3BrZ3Mvc2NyaWJ1cy9wYXRjaGVz LzAwMTMtcG9kb2ZvLTAuMTAtY29tcGF0LXBvZG9mby0wLjEwLngucGF0Y2gKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmNwa2dzL3NjcmlidXMvcGF0Y2hlcy8wMDE0LXBvZG9mby0wLjEwLWNvbXBhdC1w b2RvZm8tMC45LjYucGF0Y2gKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmNwa2dzL3NjcmlidXMvcGF0 Y2hlcy8wMDE1LXBvZG9mby0wLjEwLWNtYWtlLWZpeC5wYXRjaAogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyY3BrZ3Mvc2NyaWJ1cy9wYXRjaGVzLzAwMTYtcG9kb2ZvLTAuMTAtdXNlLXBrZ2NvbmZpZy5w YXRjaAoKZGlmZiAtLWdpdCBhL3NyY3BrZ3Mvc2NyaWJ1cy9wYXRjaGVzLzAwMDItcG9wcGxlci0y Mi4wMy4wLWZvcmNlLXBvcHBsZXItMC44Ni1taW5pbXVtLnBhdGNoIGIvc3JjcGtncy9zY3JpYnVz L3BhdGNoZXMvMDAwMi1wb3BwbGVyLTIyLjAzLjAtZm9yY2UtcG9wcGxlci0wLjg2LW1pbmltdW0u cGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uZjIwNWY0NWRl YTNkNQotLS0gL2Rldi9udWxsCisrKyBiL3NyY3BrZ3Mvc2NyaWJ1cy9wYXRjaGVzLzAwMDItcG9w cGxlci0yMi4wMy4wLWZvcmNlLXBvcHBsZXItMC44Ni1taW5pbXVtLnBhdGNoCkBAIC0wLDAgKzEs NTI2IEBACitGcm9tIGUwMTNlODEyNmQyMTAwZThlNTZkZWE1YjgzNmFkNDMyNzU0MjkzODkgTW9u IFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKZWFuIEdoYWxpIDxqZ2hhbGlAbGliZXJ0eXN1 cmYuZnI+CitEYXRlOiBXZWQsIDIgTWFyIDIwMjIgMjI6NDg6MjkgKzAwMDAKK1N1YmplY3Q6IFtQ QVRDSF0gRW5mb3JjZSBwb3BwbGVyIHZlcnNpb24gPj0gMC44Ni4wCisKK2dpdC1zdm4taWQ6IHN2 bjovL3NjcmlidXMubmV0L3RydW5rL1NjcmlidXNAMjQ5ODUgMTFkMjA3MDEtODQzMS0wNDEwLWE3 MTEtZTNjOTU5ZTNiODcwCistLS0KKyBjbWFrZS9tb2R1bGVzL0ZpbmRwb3BwbGVyLmNtYWtlICAg ICAgICAgIHwgICA0ICstCisgc2NyaWJ1cy9wbHVnaW5zL2ltcG9ydC9wZGYvaW1wb3J0cGRmLmNw cCB8ICA2NSArKy0tLS0tLS0tLS0tCisgc2NyaWJ1cy9wbHVnaW5zL2ltcG9ydC9wZGYvc2xhb3V0 cHV0LmNwcCB8IDExNCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHNjcmlidXMvcGx1Z2lucy9p bXBvcnQvcGRmL3NsYW91dHB1dC5oICAgfCAgIDcgLS0KKyA0IGZpbGVzIGNoYW5nZWQsIDEwIGlu c2VydGlvbnMoKyksIDE4MCBkZWxldGlvbnMoLSkKKworLS0tIGEvY21ha2UvbW9kdWxlcy9GaW5k cG9wcGxlci5jbWFrZQorKysrIGIvY21ha2UvbW9kdWxlcy9GaW5kcG9wcGxlci5jbWFrZQorQEAg LTEsOCArMSw4IEBACisgI2luY2x1ZGUoRmluZFBrZ0NvbmZpZykKKyBmaW5kX3BhY2thZ2UoUGtn Q29uZmlnIFFVSUVUKQorLXBrZ19zZWFyY2hfbW9kdWxlKHBvcHBsZXIgbGlicG9wcGxlcj49MC42 Mi4wIHBvcHBsZXI+PTAuNjIuMCkKKytwa2dfc2VhcmNoX21vZHVsZShwb3BwbGVyIGxpYnBvcHBs ZXI+PTAuODYuMCBwb3BwbGVyPj0wLjg2LjApCisgaWYgKHBvcHBsZXJfRk9VTkQpCistCXBrZ19z ZWFyY2hfbW9kdWxlKHBvcHBsZXJfY3BwIFJFUVVJUkVEIGxpYnBvcHBsZXItY3BwPj0wLjYyLjAg cG9wcGxlci1jcHA+PTAuNjIuMCkKKysJcGtnX3NlYXJjaF9tb2R1bGUocG9wcGxlcl9jcHAgUkVR VUlSRUQgbGlicG9wcGxlci1jcHA+PTAuODYuMCBwb3BwbGVyLWNwcD49MC44Ni4wKQorIGVuZGlm KHBvcHBsZXJfRk9VTkQpCisgIAorIGZpbmRfcGF0aChwb3BwbGVyX0lOQ0xVREVfRElSCistLS0g YS9zY3JpYnVzL3BsdWdpbnMvaW1wb3J0L3BkZi9pbXBvcnRwZGYuY3BwCisrKysgYi9zY3JpYnVz L3BsdWdpbnMvaW1wb3J0L3BkZi9pbXBvcnRwZGYuY3BwCitAQCAtNzUsMjAgKzc1LDE1IEBAIFBk ZlBsdWc6OlBkZlBsdWcoU2NyaWJ1c0RvYyogZG9jLCBpbnQgZmwKKyANCisgUUltYWdlIFBkZlBs dWc6OnJlYWRUaHVtYm5haWwoY29uc3QgUVN0cmluZyYgZk5hbWUpDQorIHsNCistCVFTdHJpbmcg cGRmRmlsZSA9IFFEaXI6OnRvTmF0aXZlU2VwYXJhdG9ycyhmTmFtZSk7DQorLSNpZiBQT1BQTEVS X0VOQ09ERURfVkVSU0lPTiA+PSBQT1BQTEVSX1ZFUlNJT05fRU5DT0RFKDAsIDgzLCAwKQ0KKyAJ Z2xvYmFsUGFyYW1zLnJlc2V0KG5ldyBHbG9iYWxQYXJhbXMoKSk7DQorLSNlbHNlDQorLQlzdGQ6 OnVuaXF1ZV9wdHI8R2xvYmFsUGFyYW1zPiBnbG9iYWxQYXJhbXNQdHIobmV3IEdsb2JhbFBhcmFt cygpKTsNCistCWdsb2JhbFBhcmFtcyA9IGdsb2JhbFBhcmFtc1B0ci5nZXQoKTsNCistI2VuZGlm DQorKwlnbG9iYWxQYXJhbXMtPnNldEVyclF1aWV0KGdUcnVlKTsNCisgDQorLSNpZiBkZWZpbmVk KFFfT1NfV0lOMzIpICYmIFBPUFBMRVJfRU5DT0RFRF9WRVJTSU9OID49IFBPUFBMRVJfVkVSU0lP Tl9FTkNPREUoMCwgNjIsIDApDQorKwlRU3RyaW5nIHBkZkZpbGUgPSBRRGlyOjp0b05hdGl2ZVNl cGFyYXRvcnMoZk5hbWUpOw0KKysjaWYgZGVmaW5lZChRX09TX1dJTjMyKQ0KKyAJYXV0byBmbmFt ZSA9IG5ldyBHb29TdHJpbmcocGRmRmlsZS50b1V0ZjgoKS5kYXRhKCkpOw0KKyAjZWxzZQ0KKyAJ YXV0byBmbmFtZSA9IG5ldyBHb29TdHJpbmcoUUZpbGU6OmVuY29kZU5hbWUocGRmRmlsZSkuZGF0 YSgpKTsNCisgI2VuZGlmDQorLQlnbG9iYWxQYXJhbXMtPnNldEVyclF1aWV0KGdUcnVlKTsNCisg DQorICNpZiBQT1BQTEVSX0VOQ09ERURfVkVSU0lPTiA+PSBQT1BQTEVSX1ZFUlNJT05fRU5DT0RF KDIyLCAzLCAwKQ0KKyAJUERGRG9jIHBkZkRvY3sgc3RkOjptYWtlX3VuaXF1ZTxHb29TdHJpbmc+ KGZuYW1lKSB9Ow0KK0BAIC0zMzMsMTkgKzMyOCwxNSBAQCBib29sIFBkZlBsdWc6OmNvbnZlcnQo Y29uc3QgUVN0cmluZyYgZm4pCisgCQlxQXBwLT5wcm9jZXNzRXZlbnRzKCk7DQorIAl9DQorIA0K Ky0jaWYgUE9QUExFUl9FTkNPREVEX1ZFUlNJT04gPj0gUE9QUExFUl9WRVJTSU9OX0VOQ09ERSgw LCA4MywgMCkNCisgCWdsb2JhbFBhcmFtcy5yZXNldChuZXcgR2xvYmFsUGFyYW1zKCkpOw0KKy0j ZWxzZQ0KKy0Jc3RkOjp1bmlxdWVfcHRyPEdsb2JhbFBhcmFtcz4gZ2xvYmFsUGFyYW1zUHRyKG5l dyBHbG9iYWxQYXJhbXMoKSk7DQorLQlnbG9iYWxQYXJhbXMgPSBnbG9iYWxQYXJhbXNQdHIuZ2V0 KCk7DQorLSNlbmRpZg0KKy0jaWYgZGVmaW5lZChRX09TX1dJTjMyKSAmJiBQT1BQTEVSX0VOQ09E RURfVkVSU0lPTiA+PSBQT1BQTEVSX1ZFUlNJT05fRU5DT0RFKDAsIDYyLCAwKQ0KKysJZ2xvYmFs UGFyYW1zLT5zZXRFcnJRdWlldChnVHJ1ZSk7DQorKw0KKysjaWYgZGVmaW5lZChRX09TX1dJTjMy KQ0KKyAJYXV0byBmbmFtZSA9IG5ldyBHb29TdHJpbmcoZm4udG9VdGY4KCkuZGF0YSgpKTsNCisg I2Vsc2UNCisgCWF1dG8gZm5hbWUgPSBuZXcgR29vU3RyaW5nKFFGaWxlOjplbmNvZGVOYW1lKGZu KS5kYXRhKCkpOw0KKyAjZW5kaWYNCistCWdsb2JhbFBhcmFtcy0+c2V0RXJyUXVpZXQoZ1RydWUp Ow0KKy0vLwlnbG9iYWxQYXJhbXMtPnNldFByaW50Q29tbWFuZHMoZ1RydWUpOw0KKysNCisgCVFM aXN0PE9wdGlvbmFsQ29udGVudEdyb3VwKj4gb2NnR3JvdXBzOw0KKyAjaWYgUE9QUExFUl9FTkNP REVEX1ZFUlNJT04gPj0gUE9QUExFUl9WRVJTSU9OX0VOQ09ERSgyMiwgMywgMCkNCisgCWF1dG8g cGRmRG9jID0gc3RkOjptYWtlX3VuaXF1ZTxQREZEb2M+KHN0ZDo6bWFrZV91bmlxdWU8R29vU3Ry aW5nPihmbmFtZSkpOw0KK0BAIC0zNjUsNyArMzU2LDcgQEAgYm9vbCBQZGZQbHVnOjpjb252ZXJ0 KGNvbnN0IFFTdHJpbmcmIGZuKQorIAkJCVFTdHJpbmcgdGV4dCA9IFFJbnB1dERpYWxvZzo6Z2V0 VGV4dChtdywgdHIoIk9wZW4gUERGLUZpbGUiKSwgdHIoIlBhc3N3b3JkIiksIFFMaW5lRWRpdDo6 Tm9ybWFsLCAiIiwgJm9rKTsNCisgCQkJaWYgKG9rICYmICF0ZXh0LmlzRW1wdHkoKSkNCisgCQkJ ew0KKy0jaWYgZGVmaW5lZChRX09TX1dJTjMyKSAmJiBQT1BQTEVSX0VOQ09ERURfVkVSU0lPTiA+ PSBQT1BQTEVSX1ZFUlNJT05fRU5DT0RFKDAsIDYyLCAwKQ0KKysjaWYgZGVmaW5lZChRX09TX1dJ TjMyKQ0KKyAJCQkJYXV0byBmbmFtZSA9IG5ldyBHb29TdHJpbmcoZm4udG9VdGY4KCkuZGF0YSgp KTsNCisgI2Vsc2UNCisgCQkJCWF1dG8gZm5hbWUgPSBuZXcgR29vU3RyaW5nKFFGaWxlOjplbmNv ZGVOYW1lKGZuKS5kYXRhKCkpOw0KK0BAIC0zODMsOSArMzc0LDYgQEAgYm9vbCBQZGZQbHVnOjpj b252ZXJ0KGNvbnN0IFFTdHJpbmcmIGZuKQorIAkJCXsNCisgCQkJCWlmIChtX3Byb2dyZXNzRGlh bG9nKQ0KKyAJCQkJCW1fcHJvZ3Jlc3NEaWFsb2ctPmNsb3NlKCk7DQorLSNpZiBQT1BQTEVSX0VO Q09ERURfVkVSU0lPTiA8IFBPUFBMRVJfVkVSU0lPTl9FTkNPREUoMCwgODMsIDApDQorLQkJCQlk ZWxldGUgZ2xvYmFsUGFyYW1zOw0KKy0jZW5kaWYNCisgCQkJCXJldHVybiBmYWxzZTsNCisgCQkJ fQ0KKyAJCQlpZiAobV9wcm9ncmVzc0RpYWxvZykNCitAQCAtNDk1LDcgKzQ4Myw2IEBAIGJvb2wg UGRmUGx1Zzo6Y29udmVydChjb25zdCBRU3RyaW5nJiBmbikKKyAJCQkJCQkJfQ0KKyAJCQkJCQkJ ZWxzZQ0KKyAJCQkJCQkJew0KKy0jaWYgUE9QUExFUl9FTkNPREVEX1ZFUlNJT04gPj0gUE9QUExF Ul9WRVJTSU9OX0VOQ09ERSgwLCA2OSwgMCkNCisgCQkJCQkJCQljb25zdCBhdXRvJiBvY2dzID0g b2NnLT5nZXRPQ0dzICgpOw0KKyAJCQkJCQkJCWZvciAoY29uc3QgYXV0byYgb2NnIDogb2NncykN CisgCQkJCQkJCQl7DQorQEAgLTUwNywyNSArNDk0LDExIEBAIGJvb2wgUGRmUGx1Zzo6Y29udmVy dChjb25zdCBRU3RyaW5nJiBmbikKKyAJCQkJCQkJCQkJb2NnTmFtZXMuYXBwZW5kKG9jZ05hbWUp Ow0KKyAJCQkJCQkJCQl9DQorIAkJCQkJCQkJfQ0KKy0jZWxzZQ0KKy0JCQkJCQkJCUdvb0xpc3Qg Km9jZ3MgPSBvY2ctPmdldE9DR3MgKCk7DQorLQkJCQkJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBv Y2dzLT5nZXRMZW5ndGggKCk7ICsraSkNCistCQkJCQkJCQl7DQorLQkJCQkJCQkJCU9wdGlvbmFs Q29udGVudEdyb3VwICpvYyA9IChPcHRpb25hbENvbnRlbnRHcm91cCAqKW9jZ3MtPmdldChpKTsN CistCQkJCQkJCQkJUVN0cmluZyBvY2dOYW1lID0gVW5pY29kZVBhcnNlZFN0cmluZyhvYy0+Z2V0 TmFtZSgpKTsNCistCQkJCQkJCQkJaWYgKCFvY2dOYW1lcy5jb250YWlucyhvY2dOYW1lKSkNCist CQkJCQkJCQkJew0KKy0JCQkJCQkJCQkJb2NnR3JvdXBzLnByZXBlbmQob2MpOw0KKy0JCQkJCQkJ CQkJb2NnTmFtZXMuYXBwZW5kKG9jZ05hbWUpOw0KKy0JCQkJCQkJCQl9DQorLQkJCQkJCQkJfQ0K Ky0jZW5kaWYNCisgCQkJCQkJCX0NCisgCQkJCQkJfQ0KKyAJCQkJCX0NCisgCQkJCQllbHNlDQor IAkJCQkJew0KKy0jaWYgUE9QUExFUl9FTkNPREVEX1ZFUlNJT04gPj0gUE9QUExFUl9WRVJTSU9O X0VOQ09ERSgwLCA2OSwgMCkNCisgCQkJCQkJY29uc3QgYXV0byYgb2NncyA9IG9jZy0+Z2V0T0NH cyAoKTsNCisgCQkJCQkJZm9yIChjb25zdCBhdXRvJiBvY2cgOiBvY2dzKQ0KKyAJCQkJCQl7DQor QEAgLTUzNywxOSArNTEwLDYgQEAgYm9vbCBQZGZQbHVnOjpjb252ZXJ0KGNvbnN0IFFTdHJpbmcm IGZuKQorIAkJCQkJCQkJb2NnTmFtZXMuYXBwZW5kKG9jZ05hbWUpOw0KKyAJCQkJCQkJfQ0KKyAJ CQkJCQl9DQorLSNlbHNlDQorLQkJCQkJCUdvb0xpc3QgKm9jZ3MgPSBvY2ctPmdldE9DR3MgKCk7 DQorLQkJCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgb2Nncy0+Z2V0TGVuZ3RoICgpOyArK2kpDQor LQkJCQkJCXsNCistCQkJCQkJCU9wdGlvbmFsQ29udGVudEdyb3VwICpvYyA9IChPcHRpb25hbENv bnRlbnRHcm91cCAqKW9jZ3MtPmdldChpKTsNCistCQkJCQkJCVFTdHJpbmcgb2NnTmFtZSA9IFVu aWNvZGVQYXJzZWRTdHJpbmcob2MtPmdldE5hbWUoKSk7DQorLQkJCQkJCQlpZiAoIW9jZ05hbWVz LmNvbnRhaW5zKG9jZ05hbWUpKQ0KKy0JCQkJCQkJew0KKy0JCQkJCQkJCW9jZ0dyb3Vwcy5wcmVw ZW5kKG9jKTsNCistCQkJCQkJCQlvY2dOYW1lcy5hcHBlbmQob2NnTmFtZSk7DQorLQkJCQkJCQl9 DQorLQkJCQkJCX0NCistI2VuZGlmDQorIAkJCQkJfQ0KKyAJCQkJfQ0KKyANCitAQCAtNzg4LDEz ICs3NDgsOCBAQCBib29sIFBkZlBsdWc6OmNvbnZlcnQoY29uc3QgUVN0cmluZyYgZm4pCisgCQkJ CQkJCW5hbWVzID0gY2F0RGljdC5kaWN0TG9va3VwKCJPcGVuQWN0aW9uIik7DQorIAkJCQkJCQlp ZiAobmFtZXMuaXNEaWN0KCkpDQorIAkJCQkJCQl7DQorLSNpZiBQT1BQTEVSX0VOQ09ERURfVkVS U0lPTiA+PSBQT1BQTEVSX1ZFUlNJT05fRU5DT0RFKDAsIDg2LCAwKQ0KKyAJCQkJCQkJCXN0ZDo6 dW5pcXVlX3B0cjxMaW5rQWN0aW9uPiBsaW5rQWN0aW9uVVB0ciA9IExpbmtBY3Rpb246OnBhcnNl QWN0aW9uKCZuYW1lcywgcGRmRG9jLT5nZXRDYXRhbG9nKCktPmdldEJhc2VVUkkoKSk7DQorIAkJ CQkJCQkJTGlua0FjdGlvbiAqbGlua0FjdGlvbiA9IGxpbmtBY3Rpb25VUHRyLmdldCgpOw0KKy0j ZWxzZQ0KKy0JCQkJCQkJCUxpbmtBY3Rpb24gKmxpbmtBY3Rpb24gPSBudWxscHRyOw0KKy0JCQkJ CQkJCWxpbmtBY3Rpb24gPSBMaW5rQWN0aW9uOjpwYXJzZUFjdGlvbigmbmFtZXMsIHBkZkRvYy0+ Z2V0Q2F0YWxvZygpLT5nZXRCYXNlVVJJKCkpOw0KKy0jZW5kaWYNCisgCQkJCQkJCQlpZiAobGlu a0FjdGlvbiAmJiAobGlua0FjdGlvbi0+Z2V0S2luZCgpID09IGFjdGlvbkphdmFTY3JpcHQpKQ0K KyAJCQkJCQkJCXsNCisgCQkJCQkJCQkJTGlua0phdmFTY3JpcHQgKmpzYSA9IChMaW5rSmF2YVNj cmlwdCopIGxpbmtBY3Rpb247DQorQEAgLTg2MiwxMSArODE3LDcgQEAgYm9vbCBQZGZQbHVnOjpj b252ZXJ0KGNvbnN0IFFTdHJpbmcmIGZuKQorIAkJfQ0KKyAJCXBkZkRvYy5yZXNldCgpOw0KKyAJ fQ0KKy0jaWYgUE9QUExFUl9FTkNPREVEX1ZFUlNJT04gPj0gUE9QUExFUl9WRVJTSU9OX0VOQ09E RSgwLCA4MywgMCkNCisgCWdsb2JhbFBhcmFtcy5yZXNldCgpOw0KKy0jZWxzZQ0KKy0JZ2xvYmFs UGFyYW1zID0gbnVsbHB0cjsNCistI2VuZGlmDQorIA0KKyAvLwlxRGVidWcoKSA8PCAiY29udmVy dGluZyBmaW5pc2hlZCI7DQorIC8vCXFEZWJ1ZygpIDw8ICJJbXBvcnRlZCIgPDwgbV9lbGVtZW50 cy5jb3VudCgpIDw8ICJFbGVtZW50cyI7DQorLS0tIGEvc2NyaWJ1cy9wbHVnaW5zL2ltcG9ydC9w ZGYvc2xhb3V0cHV0LmNwcAorKysrIGIvc2NyaWJ1cy9wbHVnaW5zL2ltcG9ydC9wZGYvc2xhb3V0 cHV0LmNwcAorQEAgLTMzMiwxNSArMzMyLDkgQEAgTGlua0FjdGlvbiogU2xhT3V0cHV0RGV2OjpT Q19nZXRBY3Rpb24oQQorIH0NCisgDQorIC8qIFJlcGxhY2VtZW50IGZvciB0aGUgY3JpcHBsZWQg UG9wcGxlciBmdW5jdGlvbiBMaW5rQWN0aW9uKiBBbm5vdFdpZGdldDo6Z2V0QWRkaXRpb25hbEFj dGlvbihBZGRpdGlvbmFsQWN0aW9uc1R5cGUgdHlwZSkgKi8NCistI2lmIFBPUFBMRVJfRU5DT0RF RF9WRVJTSU9OID49IFBPUFBMRVJfVkVSU0lPTl9FTkNPREUoMCwgODYsIDApDQorIHN0ZDo6dW5p cXVlX3B0cjxMaW5rQWN0aW9uPiBTbGFPdXRwdXREZXY6OlNDX2dldEFkZGl0aW9uYWxBY3Rpb24o Y29uc3QgY2hhciAqa2V5LCBBbm5vdFdpZGdldCAqYW5vKQ0KKyB7DQorIAlzdGQ6OnVuaXF1ZV9w dHI8TGlua0FjdGlvbj4gbGlua0FjdGlvbjsNCistI2Vsc2UNCistTGlua0FjdGlvbiogU2xhT3V0 cHV0RGV2OjpTQ19nZXRBZGRpdGlvbmFsQWN0aW9uKGNvbnN0IGNoYXIgKmtleSwgQW5ub3RXaWRn ZXQgKmFubykNCistew0KKy0JTGlua0FjdGlvbiAqbGlua0FjdGlvbiA9IG51bGxwdHI7DQorLSNl bmRpZg0KKyAJT2JqZWN0IG9iajsNCisgCVJlZiByZWZhID0gYW5vLT5nZXRSZWYoKTsNCisgDQor QEAgLTQ2NywxMSArNDYxLDcgQEAgYm9vbCBTbGFPdXRwdXREZXY6OmhhbmRsZUxpbmtBbm5vdChB bm5vdAorIAkJCQlpZiAoZHN0LT5pc1BhZ2VSZWYoKSkNCisgCQkJCXsNCisgCQkJCQlSZWYgZHN0 ciA9IGRzdC0+Z2V0UGFnZVJlZigpOw0KKy0jaWYgUE9QUExFUl9FTkNPREVEX1ZFUlNJT04gPj0g UE9QUExFUl9WRVJTSU9OX0VOQ09ERSgwLCA3NiwgMCkNCisgCQkJCQlwYWdOdW0gPSBwZGZEb2Mt PmZpbmRQYWdlKGRzdHIpOw0KKy0jZWxzZQ0KKy0JCQkJCXBhZ051bSA9IHBkZkRvYy0+ZmluZFBh Z2UoZHN0ci5udW0sIGRzdHIuZ2VuKTsNCistI2VuZGlmDQorIAkJCQl9DQorIAkJCQllbHNlDQor IAkJCQkJcGFnTnVtID0gZHN0LT5nZXRQYWdlTnVtKCk7DQorQEAgLTQ4NSwxMSArNDc1LDcgQEAg Ym9vbCBTbGFPdXRwdXREZXY6OmhhbmRsZUxpbmtBbm5vdChBbm5vdAorIAkJCVBPUFBMRVJfQ09O U1QgR29vU3RyaW5nICpuZHN0ID0gZ3RvLT5nZXROYW1lZERlc3QoKTsNCisgCQkJaWYgKG5kc3Qp DQorIAkJCXsNCistI2lmIFBPUFBMRVJfRU5DT0RFRF9WRVJTSU9OID49IFBPUFBMRVJfVkVSU0lP Tl9FTkNPREUoMCwgODYsIDApDQorIAkJCQlzdGQ6OnVuaXF1ZV9wdHI8TGlua0Rlc3Q+IGRzdG4g PSBwZGZEb2MtPmZpbmREZXN0KG5kc3QpOw0KKy0jZWxzZQ0KKy0JCQkJTGlua0Rlc3QgKmRzdG4g PSBwZGZEb2MtPmZpbmREZXN0KG5kc3QpOw0KKy0jZW5kaWYNCisgCQkJCWlmIChkc3RuKQ0KKyAJ CQkJew0KKyAJCQkJCWlmIChkc3RuLT5nZXRLaW5kKCkgPT0gZGVzdFhZWikNCitAQCAtNDk3LDEx ICs0ODMsNyBAQCBib29sIFNsYU91dHB1dERldjo6aGFuZGxlTGlua0Fubm90KEFubm90CisgCQkJ CQkJaWYgKGRzdG4tPmlzUGFnZVJlZigpKQ0KKyAJCQkJCQl7DQorIAkJCQkJCQlSZWYgZHN0ciA9 IGRzdG4tPmdldFBhZ2VSZWYoKTsNCistI2lmIFBPUFBMRVJfRU5DT0RFRF9WRVJTSU9OID49IFBP UFBMRVJfVkVSU0lPTl9FTkNPREUoMCwgNzYsIDApDQorIAkJCQkJCQlwYWdOdW0gPSBwZGZEb2Mt PmZpbmRQYWdlKGRzdHIpOw0KKy0jZWxzZQ0KKy0JCQkJCQkJcGFnTnVtID0gcGRmRG9jLT5maW5k UGFnZShkc3RyLm51bSwgZHN0ci5nZW4pOw0KKy0jZW5kaWYNCisgCQkJCQkJfQ0KKyAJCQkJCQll bHNlDQorIAkJCQkJCQlwYWdOdW0gPSBkc3RuLT5nZXRQYWdlTnVtKCk7DQorQEAgLTUzMywxMSAr NTE1LDcgQEAgYm9vbCBTbGFPdXRwdXREZXY6OmhhbmRsZUxpbmtBbm5vdChBbm5vdAorIAkJCVBP UFBMRVJfQ09OU1QgR29vU3RyaW5nICpuZHN0ID0gZ3RvLT5nZXROYW1lZERlc3QoKTsNCisgCQkJ aWYgKG5kc3QpDQorIAkJCXsNCistI2lmIFBPUFBMRVJfRU5DT0RFRF9WRVJTSU9OID49IFBPUFBM RVJfVkVSU0lPTl9FTkNPREUoMCwgODYsIDApDQorIAkJCQlzdGQ6OnVuaXF1ZV9wdHI8TGlua0Rl c3Q+IGRzdG4gPSBwZGZEb2MtPmZpbmREZXN0KG5kc3QpOw0KKy0jZWxzZQ0KKy0JCQkJTGlua0Rl c3QgKmRzdG4gPSBwZGZEb2MtPmZpbmREZXN0KG5kc3QpOw0KKy0jZW5kaWYNCisgCQkJCWlmIChk c3RuKQ0KKyAJCQkJew0KKyAJCQkJCWlmIChkc3RuLT5nZXRLaW5kKCkgPT0gZGVzdFhZWikNCitA QCAtOTg1LDExICs5NjMsNyBAQCB2b2lkIFNsYU91dHB1dERldjo6aGFuZGxlQWN0aW9ucyhQYWdl SXRlCisgCQkJCQlpZiAoZHN0LT5pc1BhZ2VSZWYoKSkNCisgCQkJCQl7DQorIAkJCQkJCVJlZiBk c3RyID0gZHN0LT5nZXRQYWdlUmVmKCk7DQorLSNpZiBQT1BQTEVSX0VOQ09ERURfVkVSU0lPTiA+ PSBQT1BQTEVSX1ZFUlNJT05fRU5DT0RFKDAsIDc2LCAwKQ0KKyAJCQkJCQlwYWdOdW0gPSBwZGZE b2MtPmZpbmRQYWdlKGRzdHIpOw0KKy0jZWxzZQ0KKy0JCQkJCQlwYWdOdW0gPSBwZGZEb2MtPmZp bmRQYWdlKGRzdHIubnVtLCBkc3RyLmdlbik7DQorLSNlbmRpZg0KKyAJCQkJCX0NCisgCQkJCQll bHNlDQorIAkJCQkJCXBhZ051bSA9IGRzdC0+Z2V0UGFnZU51bSgpOw0KK0BAIC0xMDA1LDExICs5 NzksNyBAQCB2b2lkIFNsYU91dHB1dERldjo6aGFuZGxlQWN0aW9ucyhQYWdlSXRlCisgCQkJCVBP UFBMRVJfQ09OU1QgR29vU3RyaW5nICpuZHN0ID0gZ3RvLT5nZXROYW1lZERlc3QoKTsNCisgCQkJ CWlmIChuZHN0KQ0KKyAJCQkJew0KKy0jaWYgUE9QUExFUl9FTkNPREVEX1ZFUlNJT04gPj0gUE9Q UExFUl9WRVJTSU9OX0VOQ09ERSgwLCA4NiwgMCkNCisgCQkJCQlzdGQ6OnVuaXF1ZV9wdHI8TGlu a0Rlc3Q+IGRzdG4gPSBwZGZEb2MtPmZpbmREZXN0KG5kc3QpOw0KKy0jZWxzZQ0KKy0JCQkJCUxp bmtEZXN0ICpkc3RuID0gcGRmRG9jLT5maW5kRGVzdChuZHN0KTsNCistI2VuZGlmDQorIAkJCQkJ aWYgKGRzdG4pDQorIAkJCQkJew0KKyAJCQkJCQlpZiAoZHN0bi0+Z2V0S2luZCgpID09IGRlc3RY WVopDQorQEAgLTEwMTcsMTEgKzk4Nyw3IEBAIHZvaWQgU2xhT3V0cHV0RGV2OjpoYW5kbGVBY3Rp b25zKFBhZ2VJdGUKKyAJCQkJCQkJaWYgKGRzdG4tPmlzUGFnZVJlZigpKQ0KKyAJCQkJCQkJew0K KyAJCQkJCQkJCVJlZiBkc3RyID0gZHN0bi0+Z2V0UGFnZVJlZigpOw0KKy0jaWYgUE9QUExFUl9F TkNPREVEX1ZFUlNJT04gPj0gUE9QUExFUl9WRVJTSU9OX0VOQ09ERSgwLCA3NiwgMCkNCisgCQkJ CQkJCQlwYWdOdW0gPSBwZGZEb2MtPmZpbmRQYWdlKGRzdHIpOw0KKy0jZWxzZQ0KKy0JCQkJCQkJ CXBhZ051bSA9IHBkZkRvYy0+ZmluZFBhZ2UoZHN0ci5udW0sIGRzdHIuZ2VuKTsNCistI2VuZGlm DQorIAkJCQkJCQl9DQorIAkJCQkJCQllbHNlDQorIAkJCQkJCQkJcGFnTnVtID0gZHN0bi0+Z2V0 UGFnZU51bSgpOw0KK0BAIC0xMDYxLDExICsxMDI3LDcgQEAgdm9pZCBTbGFPdXRwdXREZXY6Omhh bmRsZUFjdGlvbnMoUGFnZUl0ZQorIAkJCQlQT1BQTEVSX0NPTlNUIEdvb1N0cmluZyAqbmRzdCA9 IGd0by0+Z2V0TmFtZWREZXN0KCk7DQorIAkJCQlpZiAobmRzdCkNCisgCQkJCXsNCistI2lmIFBP UFBMRVJfRU5DT0RFRF9WRVJTSU9OID49IFBPUFBMRVJfVkVSU0lPTl9FTkNPREUoMCwgODYsIDAp DQorIAkJCQkJc3RkOjp1bmlxdWVfcHRyPExpbmtEZXN0PiBkc3RuID0gcGRmRG9jLT5maW5kRGVz dChuZHN0KTsNCistI2Vsc2UNCistCQkJCQlMaW5rRGVzdCAqZHN0biA9IHBkZkRvYy0+ZmluZERl c3QobmRzdCk7DQorLSNlbmRpZg0KKyAJCQkJCWlmIChkc3RuKQ0KKyAJCQkJCXsNCisgCQkJCQkJ aWYgKGRzdG4tPmdldEtpbmQoKSA9PSBkZXN0WFlaKQ0KK0BAIC0xMTM5LDE0MyArMTEwMSw5MSBA QCB2b2lkIFNsYU91dHB1dERldjo6aGFuZGxlQWN0aW9ucyhQYWdlSXRlCisgCXsNCisgCQlpZiAo QWFjdC0+Z2V0S2luZCgpID09IGFjdGlvbkphdmFTY3JpcHQpDQorIAkJew0KKy0jaWYgUE9QUExF Ul9FTkNPREVEX1ZFUlNJT04gPj0gUE9QUExFUl9WRVJTSU9OX0VOQ09ERSgwLCA4NiwgMCkNCisg CQkJTGlua0phdmFTY3JpcHQgKmpzYSA9IChMaW5rSmF2YVNjcmlwdCopIEFhY3QuZ2V0KCk7DQor LSNlbHNlDQorLQkJCUxpbmtKYXZhU2NyaXB0ICpqc2EgPSAoTGlua0phdmFTY3JpcHQqKSBBYWN0 Ow0KKy0jZW5kaWYNCisgCQkJaWYgKGpzYS0+aXNPaygpKQ0KKyAJCQl7DQorIAkJCQlpdGUtPmFu bm90YXRpb24oKS5zZXREX2FjdChVbmljb2RlUGFyc2VkU3RyaW5nKGpzYS0+Z2V0U2NyaXB0KCkp KTsNCisgCQkJCWl0ZS0+YW5ub3RhdGlvbigpLnNldEFBYWN0KHRydWUpOw0KKyAJCQl9DQorIAkJ fQ0KKy0jaWYgUE9QUExFUl9FTkNPREVEX1ZFUlNJT04gPj0gUE9QUExFUl9WRVJTSU9OX0VOQ09E RSgwLCA4NiwgMCkNCisgCQlBYWN0LnJlc2V0KCk7DQorLSNlbHNlDQorLQkJQWFjdCA9IG51bGxw dHI7DQorLSNlbmRpZg0KKyAJfQ0KKyAJQWFjdCA9IFNDX2dldEFkZGl0aW9uYWxBY3Rpb24oIkUi LCBhbm8pOw0KKyAJaWYgKEFhY3QpDQorIAl7DQorIAkJaWYgKEFhY3QtPmdldEtpbmQoKSA9PSBh Y3Rpb25KYXZhU2NyaXB0KQ0KKyAJCXsNCistI2lmIFBPUFBMRVJfRU5DT0RFRF9WRVJTSU9OID49 IFBPUFBMRVJfVkVSU0lPTl9FTkNPREUoMCwgODYsIDApDQorIAkJCUxpbmtKYXZhU2NyaXB0ICpq c2EgPSAoTGlua0phdmFTY3JpcHQqKSBBYWN0LmdldCgpOw0KKy0jZWxzZQ0KKy0JCQlMaW5rSmF2 YVNjcmlwdCAqanNhID0gKExpbmtKYXZhU2NyaXB0KikgQWFjdDsNCistI2VuZGlmDQorIAkJCWlm IChqc2EtPmlzT2soKSkNCisgCQkJew0KKyAJCQkJaXRlLT5hbm5vdGF0aW9uKCkuc2V0RV9hY3Qo VW5pY29kZVBhcnNlZFN0cmluZyhqc2EtPmdldFNjcmlwdCgpKSk7DQorIAkJCQlpdGUtPmFubm90 YXRpb24oKS5zZXRBQWFjdCh0cnVlKTsNCisgCQkJfQ0KKyAJCX0NCistI2lmIFBPUFBMRVJfRU5D T0RFRF9WRVJTSU9OID49IFBPUFBMRVJfVkVSU0lPTl9FTkNPREUoMCwgODYsIDApDQorIAkJQWFj dC5yZXNldCgpOw0KKy0jZWxzZQ0KKy0JCUFhY3QgPSBudWxscHRyOw0KKy0jZW5kaWYNCisgCX0N CisgCUFhY3QgPSBTQ19nZXRBZGRpdGlvbmFsQWN0aW9uKCJYIiwgYW5vKTsNCisgCWlmIChBYWN0 KQ0KKyAJew0KKyAJCWlmIChBYWN0LT5nZXRLaW5kKCkgPT0gYWN0aW9uSmF2YVNjcmlwdCkNCisg CQl7DQorLSNpZiBQT1BQTEVSX0VOQ09ERURfVkVSU0lPTiA+PSBQT1BQTEVSX1ZFUlNJT05fRU5D T0RFKDAsIDg2LCAwKQ0KKyAJCQlMaW5rSmF2YVNjcmlwdCAqanNhID0gKExpbmtKYXZhU2NyaXB0 KikgQWFjdC5nZXQoKTsNCistI2Vsc2UNCistCQkJTGlua0phdmFTY3JpcHQgKmpzYSA9IChMaW5r SmF2YVNjcmlwdCopIEFhY3Q7DQorLSNlbmRpZg0KKyAJCQlpZiAoanNhLT5pc09rKCkpDQorIAkJ CXsNCisgCQkJCWl0ZS0+YW5ub3RhdGlvbigpLnNldFhfYWN0KFVuaWNvZGVQYXJzZWRTdHJpbmco anNhLT5nZXRTY3JpcHQoKSkpOw0KKyAJCQkJaXRlLT5hbm5vdGF0aW9uKCkuc2V0QUFhY3QodHJ1 ZSk7DQorIAkJCX0NCisgCQl9DQorLSNpZiBQT1BQTEVSX0VOQ09ERURfVkVSU0lPTiA+PSBQT1BQ TEVSX1ZFUlNJT05fRU5DT0RFKDAsIDg2LCAwKQ0KKyAJCUFhY3QucmVzZXQoKTsNCistI2Vsc2UN CistCQlBYWN0ID0gbnVsbHB0cjsNCistI2VuZGlmDQorIAl9DQorIAlBYWN0ID0gU0NfZ2V0QWRk aXRpb25hbEFjdGlvbigiRm8iLCBhbm8pOw0KKyAJaWYgKEFhY3QpDQorIAl7DQorIAkJaWYgKEFh Y3QtPmdldEtpbmQoKSA9PSBhY3Rpb25KYXZhU2NyaXB0KQ0KKyAJCXsNCistI2lmIFBPUFBMRVJf RU5DT0RFRF9WRVJTSU9OID49IFBPUFBMRVJfVkVSU0lPTl9FTkNPREUoMCwgODYsIDApDQorIAkJ CUxpbmtKYXZhU2NyaXB0ICpqc2EgPSAoTGlua0phdmFTY3JpcHQqKSBBYWN0LmdldCgpOw0KKy0j ZWxzZQ0KKy0JCQlMaW5rSmF2YVNjcmlwdCAqanNhID0gKExpbmtKYXZhU2NyaXB0KikgQWFjdDsN CistI2VuZGlmDQorIAkJCWlmIChqc2EtPmlzT2soKSkNCisgCQkJew0KKyAJCQkJaXRlLT5hbm5v dGF0aW9uKCkuc2V0Rm9fYWN0KFVuaWNvZGVQYXJzZWRTdHJpbmcoanNhLT5nZXRTY3JpcHQoKSkp Ow0KKyAJCQkJaXRlLT5hbm5vdGF0aW9uKCkuc2V0QUFhY3QodHJ1ZSk7DQorIAkJCX0NCisgCQl9 DQorLSNpZiBQT1BQTEVSX0VOQ09ERURfVkVSU0lPTiA+PSBQT1BQTEVSX1ZFUlNJT05fRU5DT0RF KDAsIDg2LCAwKQ0KKyAJCUFhY3QucmVzZXQoKTsNCistI2Vsc2UNCistCQlBYWN0ID0gbnVsbHB0 cjsNCistI2VuZGlmDQorIAl9DQorIAlBYWN0ID0gU0NfZ2V0QWRkaXRpb25hbEFjdGlvbigiQmwi LCBhbm8pOw0KKyAJaWYgKEFhY3QpDQorIAl7DQorIAkJaWYgKEFhY3QtPmdldEtpbmQoKSA9PSBh Y3Rpb25KYXZhU2NyaXB0KQ0KKyAJCXsNCistI2lmIFBPUFBMRVJfRU5DT0RFRF9WRVJTSU9OID49 IFBPUFBMRVJfVkVSU0lPTl9FTkNPREUoMCwgODYsIDApDQorIAkJCUxpbmtKYXZhU2NyaXB0ICpq c2EgPSAoTGlua0phdmFTY3JpcHQqKSBBYWN0LmdldCgpOw0KKy0jZWxzZQ0KKy0JCQlMaW5rSmF2 YVNjcmlwdCAqanNhID0gKExpbmtKYXZhU2NyaXB0KikgQWFjdDsNCistI2VuZGlmDQorIAkJCWlm IChqc2EtPmlzT2soKSkNCisgCQkJew0KKyAJCQkJaXRlLT5hbm5vdGF0aW9uKCkuc2V0QmxfYWN0 KFVuaWNvZGVQYXJzZWRTdHJpbmcoanNhLT5nZXRTY3JpcHQoKSkpOw0KKyAJCQkJaXRlLT5hbm5v dGF0aW9uKCkuc2V0QUFhY3QodHJ1ZSk7DQorIAkJCX0NCisgCQl9DQorLSNpZiBQT1BQTEVSX0VO Q09ERURfVkVSU0lPTiA+PSBQT1BQTEVSX1ZFUlNJT05fRU5DT0RFKDAsIDg2LCAwKQ0KKyAJCUFh Y3QucmVzZXQoKTsNCistI2Vsc2UNCistCQlBYWN0ID0gbnVsbHB0cjsNCistI2VuZGlmDQorIAl9 DQorIAlBYWN0ID0gU0NfZ2V0QWRkaXRpb25hbEFjdGlvbigiQyIsIGFubyk7DQorIAlpZiAoQWFj dCkNCisgCXsNCisgCQlpZiAoQWFjdC0+Z2V0S2luZCgpID09IGFjdGlvbkphdmFTY3JpcHQpDQor IAkJew0KKy0jaWYgUE9QUExFUl9FTkNPREVEX1ZFUlNJT04gPj0gUE9QUExFUl9WRVJTSU9OX0VO Q09ERSgwLCA4NiwgMCkNCisgCQkJTGlua0phdmFTY3JpcHQgKmpzYSA9IChMaW5rSmF2YVNjcmlw dCopIEFhY3QuZ2V0KCk7DQorLSNlbHNlDQorLQkJCUxpbmtKYXZhU2NyaXB0ICpqc2EgPSAoTGlu a0phdmFTY3JpcHQqKSBBYWN0Ow0KKy0jZW5kaWYNCisgCQkJaWYgKGpzYS0+aXNPaygpKQ0KKyAJ CQl7DQorIAkJCQlpdGUtPmFubm90YXRpb24oKS5zZXRDX2FjdChVbmljb2RlUGFyc2VkU3RyaW5n KGpzYS0+Z2V0U2NyaXB0KCkpKTsNCisgCQkJCWl0ZS0+YW5ub3RhdGlvbigpLnNldEFBYWN0KHRy dWUpOw0KKyAJCQl9DQorIAkJfQ0KKy0jaWYgUE9QUExFUl9FTkNPREVEX1ZFUlNJT04gPj0gUE9Q UExFUl9WRVJTSU9OX0VOQ09ERSgwLCA4NiwgMCkNCisgCQlBYWN0LnJlc2V0KCk7DQorLSNlbHNl DQorLQkJQWFjdCA9IG51bGxwdHI7DQorLSNlbmRpZg0KKyAJfQ0KKyAJQWFjdCA9IFNDX2dldEFk ZGl0aW9uYWxBY3Rpb24oIkYiLCBhbm8pOw0KKyAJaWYgKEFhY3QpDQorIAl7DQorIAkJaWYgKEFh Y3QtPmdldEtpbmQoKSA9PSBhY3Rpb25KYXZhU2NyaXB0KQ0KKyAJCXsNCistI2lmIFBPUFBMRVJf RU5DT0RFRF9WRVJTSU9OID49IFBPUFBMRVJfVkVSU0lPTl9FTkNPREUoMCwgODYsIDApDQorIAkJ CUxpbmtKYXZhU2NyaXB0ICpqc2EgPSAoTGlua0phdmFTY3JpcHQqKSBBYWN0LmdldCgpOw0KKy0j ZWxzZQ0KKy0JCQlMaW5rSmF2YVNjcmlwdCAqanNhID0gKExpbmtKYXZhU2NyaXB0KikgQWFjdDsN CistI2VuZGlmDQorIAkJCWlmIChqc2EtPmlzT2soKSkNCisgCQkJew0KKyAJCQkJaXRlLT5hbm5v dGF0aW9uKCkuc2V0Rl9hY3QoVW5pY29kZVBhcnNlZFN0cmluZyhqc2EtPmdldFNjcmlwdCgpKSk7 DQorQEAgLTEyODMsMjIgKzExOTMsMTQgQEAgdm9pZCBTbGFPdXRwdXREZXY6OmhhbmRsZUFjdGlv bnMoUGFnZUl0ZQorIAkJCQlpdGUtPmFubm90YXRpb24oKS5zZXRGb3JtYXQoNSk7DQorIAkJCX0N CisgCQl9DQorLSNpZiBQT1BQTEVSX0VOQ09ERURfVkVSU0lPTiA+PSBQT1BQTEVSX1ZFUlNJT05f RU5DT0RFKDAsIDg2LCAwKQ0KKyAJCUFhY3QucmVzZXQoKTsNCistI2Vsc2UNCistCQlBYWN0ID0g bnVsbHB0cjsNCistI2VuZGlmDQorIAl9DQorIAlBYWN0ID0gU0NfZ2V0QWRkaXRpb25hbEFjdGlv bigiSyIsIGFubyk7DQorIAlpZiAoQWFjdCkNCisgCXsNCisgCQlpZiAoQWFjdC0+Z2V0S2luZCgp ID09IGFjdGlvbkphdmFTY3JpcHQpDQorIAkJew0KKy0jaWYgUE9QUExFUl9FTkNPREVEX1ZFUlNJ T04gPj0gUE9QUExFUl9WRVJTSU9OX0VOQ09ERSgwLCA4NiwgMCkNCisgCQkJTGlua0phdmFTY3Jp cHQgKmpzYSA9IChMaW5rSmF2YVNjcmlwdCopIEFhY3QuZ2V0KCk7DQorLSNlbHNlDQorLQkJCUxp bmtKYXZhU2NyaXB0ICpqc2EgPSAoTGlua0phdmFTY3JpcHQqKSBBYWN0Ow0KKy0jZW5kaWYNCisg CQkJaWYgKGpzYS0+aXNPaygpKQ0KKyAJCQl7DQorIAkJCQlpdGUtPmFubm90YXRpb24oKS5zZXRL X2FjdChVbmljb2RlUGFyc2VkU3RyaW5nKGpzYS0+Z2V0U2NyaXB0KCkpKTsNCitAQCAtMTMwNiwz MyArMTIwOCwyMSBAQCB2b2lkIFNsYU91dHB1dERldjo6aGFuZGxlQWN0aW9ucyhQYWdlSXRlCisg CQkJCWl0ZS0+YW5ub3RhdGlvbigpLnNldEZvcm1hdCg1KTsNCisgCQkJfQ0KKyAJCX0NCistI2lm IFBPUFBMRVJfRU5DT0RFRF9WRVJTSU9OID49IFBPUFBMRVJfVkVSU0lPTl9FTkNPREUoMCwgODYs IDApDQorIAkJQWFjdC5yZXNldCgpOw0KKy0jZWxzZQ0KKy0JCUFhY3QgPSBudWxscHRyOw0KKy0j ZW5kaWYNCisgCX0NCisgCUFhY3QgPSBTQ19nZXRBZGRpdGlvbmFsQWN0aW9uKCJWIiwgYW5vKTsN CisgCWlmIChBYWN0KQ0KKyAJew0KKyAJCWlmIChBYWN0LT5nZXRLaW5kKCkgPT0gYWN0aW9uSmF2 YVNjcmlwdCkNCisgCQl7DQorLSNpZiBQT1BQTEVSX0VOQ09ERURfVkVSU0lPTiA+PSBQT1BQTEVS X1ZFUlNJT05fRU5DT0RFKDAsIDg2LCAwKQ0KKyAJCQlMaW5rSmF2YVNjcmlwdCAqanNhID0gKExp bmtKYXZhU2NyaXB0KikgQWFjdC5nZXQoKTsNCistI2Vsc2UNCistCQkJTGlua0phdmFTY3JpcHQg KmpzYSA9IChMaW5rSmF2YVNjcmlwdCopIEFhY3Q7DQorLSNlbmRpZg0KKyAJCQlpZiAoanNhLT5p c09rKCkpDQorIAkJCXsNCisgCQkJCWl0ZS0+YW5ub3RhdGlvbigpLnNldFZfYWN0KFVuaWNvZGVQ YXJzZWRTdHJpbmcoanNhLT5nZXRTY3JpcHQoKSkpOw0KKyAJCQkJaXRlLT5hbm5vdGF0aW9uKCku c2V0QUFhY3QodHJ1ZSk7DQorIAkJCX0NCisgCQl9DQorLSNpZiBQT1BQTEVSX0VOQ09ERURfVkVS U0lPTiA+PSBQT1BQTEVSX1ZFUlNJT05fRU5DT0RFKDAsIDg2LCAwKQ0KKyAJCUFhY3QucmVzZXQo KTsNCistI2Vsc2UNCistCQlBYWN0ID0gbnVsbHB0cjsNCistI2VuZGlmDQorIAl9DQorIH0NCisg DQorQEAgLTEzNDIsMTEgKzEyMzIsNyBAQCB2b2lkIFNsYU91dHB1dERldjo6c3RhcnREb2MoUERG RG9jICpkb2MsCisgCWNhdGFsb2cgPSBjYXRBOw0KKyAJcGRmRG9jID0gZG9jOw0KKyAJdXBkYXRl R1VJQ291bnRlciA9IDA7DQorLSNpZiBQT1BQTEVSX0VOQ09ERURfVkVSU0lPTiA+PSBQT1BQTEVS X1ZFUlNJT05fRU5DT0RFKDAsIDg0LCAwKQ0KKyAJbV9mb250RW5naW5lID0gbmV3IFNwbGFzaEZv bnRFbmdpbmUodHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKTsNCistI2Vsc2UNCistCW1fZm9udEVu Z2luZSA9IG5ldyBTcGxhc2hGb250RW5naW5lKGdsb2JhbFBhcmFtcy0+Z2V0RW5hYmxlRnJlZVR5 cGUoKSwgZmFsc2UsIGZhbHNlLCB0cnVlKTsNCistI2VuZGlmDQorIH0NCisgDQorIHZvaWQgU2xh T3V0cHV0RGV2OjpzdGFydFBhZ2UoaW50IHBhZ2VOdW0sIEdmeFN0YXRlICosIFhSZWYgKikNCist LS0gYS9zY3JpYnVzL3BsdWdpbnMvaW1wb3J0L3BkZi9zbGFvdXRwdXQuaAorKysrIGIvc2NyaWJ1 cy9wbHVnaW5zL2ltcG9ydC9wZGYvc2xhb3V0cHV0LmgKK0BAIC0zMCw5ICszMCw2IEBAIGZvciB3 aGljaCBhIG5ldyBsaWNlbnNlIChHUEwrZXhjZXB0aW9uKQorICNpbmNsdWRlICJzZWxlY3Rpb24u aCINCisgI2luY2x1ZGUgInZncmFkaWVudC5oIg0KKyANCistI2lmIFBPUFBMRVJfRU5DT0RFRF9W RVJTSU9OIDwgUE9QUExFUl9WRVJTSU9OX0VOQ09ERSgwLCA3MywgMCkNCistI2luY2x1ZGUgPHBv cHBsZXIvZ29vL2d0eXBlcy5oPg0KKy0jZW5kaWYNCisgI2luY2x1ZGUgPHBvcHBsZXIvT2JqZWN0 Lmg+DQorICNpbmNsdWRlIDxwb3BwbGVyL091dHB1dERldi5oPg0KKyAjaW5jbHVkZSA8cG9wcGxl ci9HZnguaD4NCitAQCAtMTYzLDExICsxNjAsNyBAQCBwdWJsaWM6CisgCXZpcnR1YWwgflNsYU91 dHB1dERldigpOw0KKyANCisgCUxpbmtBY3Rpb24qIFNDX2dldEFjdGlvbihBbm5vdFdpZGdldCAq YW5vKTsNCistI2lmIFBPUFBMRVJfRU5DT0RFRF9WRVJTSU9OID49IFBPUFBMRVJfVkVSU0lPTl9F TkNPREUoMCwgODYsIDApDQorIAlzdGQ6OnVuaXF1ZV9wdHI8TGlua0FjdGlvbj4gU0NfZ2V0QWRk aXRpb25hbEFjdGlvbihjb25zdCBjaGFyICprZXksIEFubm90V2lkZ2V0ICphbm8pOw0KKy0jZWxz ZQ0KKy0JTGlua0FjdGlvbiogU0NfZ2V0QWRkaXRpb25hbEFjdGlvbihjb25zdCBjaGFyICprZXks IEFubm90V2lkZ2V0ICphbm8pOw0KKy0jZW5kaWYNCisgCXN0YXRpYyBHQm9vbCBhbm5vdGF0aW9u c19jYWxsYmFjayhBbm5vdCAqYW5ub3RhLCB2b2lkICp1c2VyX2RhdGEpOw0KKyAJYm9vbCBoYW5k bGVUZXh0QW5ub3QoQW5ub3QqIGFubm90YSwgZG91YmxlIHhDb29yLCBkb3VibGUgeUNvb3IsIGRv dWJsZSB3aWR0aCwgZG91YmxlIGhlaWdodCk7DQorIAlib29sIGhhbmRsZUxpbmtBbm5vdChBbm5v dCogYW5ub3RhLCBkb3VibGUgeENvb3IsIGRvdWJsZSB5Q29vciwgZG91YmxlIHdpZHRoLCBkb3Vi bGUgaGVpZ2h0KTsNCmRpZmYgLS1naXQgYS9zcmNwa2dzL3NjcmlidXMvcGF0Y2hlcy8wMDAyLXBv cHBsZXItMjIuMDMuMC1tZW1sZWFrLnBhdGNoIGIvc3JjcGtncy9zY3JpYnVzL3BhdGNoZXMvMDAw Mi1wb3BwbGVyLTIyLjAzLjAtbWVtbGVhay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAwLi5kNDBmMzVhZDk2NmU5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjcGtn cy9zY3JpYnVzL3BhdGNoZXMvMDAwMi1wb3BwbGVyLTIyLjAzLjAtbWVtbGVhay5wYXRjaApAQCAt MCwwICsxLDk0IEBACitGcm9tIDQ4MjYzOTU0YTdkZWUwYmU4MTViMDBmNDE3YWUzNjVhYjI2Y2Rk ODUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKZWFuIEdoYWxpIDxqZ2hhbGlAbGli ZXJ0eXN1cmYuZnI+CitEYXRlOiBUaHUsIDMgTWFyIDIwMjIgMDA6MTg6MDYgKzAwMDAKK1N1Ympl Y3Q6IFtQQVRDSF0gIzE2NzY0OiBCZXR0ZXIgcGF0Y2gsIGF2b2lkIGEgbWVtb3J5IGxlYWsKKwor Z2l0LXN2bi1pZDogc3ZuOi8vc2NyaWJ1cy5uZXQvdHJ1bmsvU2NyaWJ1c0AyNDk4OSAxMWQyMDcw MS04NDMxLTA0MTAtYTcxMS1lM2M5NTllM2I4NzAKKy0tLQorIHNjcmlidXMvcGx1Z2lucy9pbXBv cnQvcGRmL2ltcG9ydHBkZi5jcHAgfCAzNCArKysrKysrKystLS0tLS0tLS0tLS0tLS0KKyBzY3Jp YnVzL3V0aWxfb3MuY3BwICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKysKKyAyIGZpbGVzIGNo YW5nZWQsIDE1IGluc2VydGlvbnMoKyksIDIxIGRlbGV0aW9ucygtKQorCistLS0gYS9zY3JpYnVz L3BsdWdpbnMvaW1wb3J0L3BkZi9pbXBvcnRwZGYuY3BwCisrKysgYi9zY3JpYnVzL3BsdWdpbnMv aW1wb3J0L3BkZi9pbXBvcnRwZGYuY3BwCitAQCAtNTgsNiArNTgsNyBAQCBmb3Igd2hpY2ggYSBu ZXcgbGljZW5zZSAoR1BMK2V4Y2VwdGlvbikKKyAjaW5jbHVkZSAidXRpbC5oIg0KKyAjaW5jbHVk ZSAidXRpbF9mb3JtYXRzLmgiDQorICNpbmNsdWRlICJ1dGlsX21hdGguaCINCisrI2luY2x1ZGUg InV0aWxfb3MuaCINCisgDQorICNpbmNsdWRlICJ1aS9jdXN0b21mZGlhbG9nLmgiDQorICNpbmNs dWRlICJ1aS9taXNzaW5nLmgiDQorQEAgLTc5LDE1ICs4MCwxMiBAQCBRSW1hZ2UgUGRmUGx1Zzo6 cmVhZFRodW1ibmFpbChjb25zdCBRU3RyCisgCWdsb2JhbFBhcmFtcy0+c2V0RXJyUXVpZXQoZ1Ry dWUpOw0KKyANCisgCVFTdHJpbmcgcGRmRmlsZSA9IFFEaXI6OnRvTmF0aXZlU2VwYXJhdG9ycyhm TmFtZSk7DQorLSNpZiBkZWZpbmVkKFFfT1NfV0lOMzIpDQorLQlhdXRvIGZuYW1lID0gbmV3IEdv b1N0cmluZyhwZGZGaWxlLnRvVXRmOCgpLmRhdGEoKSk7DQorLSNlbHNlDQorLQlhdXRvIGZuYW1l ID0gbmV3IEdvb1N0cmluZyhRRmlsZTo6ZW5jb2RlTmFtZShwZGZGaWxlKS5kYXRhKCkpOw0KKy0j ZW5kaWYNCistDQorKwlRQnl0ZUFycmF5IGVuY29kZWRGaWxlTmFtZSA9IG9zX2lzX3dpbigpID8g cGRmRmlsZS50b1V0ZjgoKSA6IFFGaWxlOjplbmNvZGVOYW1lKHBkZkZpbGUpOw0KKyAjaWYgUE9Q UExFUl9FTkNPREVEX1ZFUlNJT04gPj0gUE9QUExFUl9WRVJTSU9OX0VOQ09ERSgyMiwgMywgMCkN CistCVBERkRvYyBwZGZEb2N7IHN0ZDo6bWFrZV91bmlxdWU8R29vU3RyaW5nPihmbmFtZSkgfTsN CisrCWF1dG8gZm5hbWUgPSBzdGQ6Om1ha2VfdW5pcXVlPEdvb1N0cmluZz4oZW5jb2RlZEZpbGVO YW1lLmRhdGEoKSk7DQorKwlQREZEb2MgcGRmRG9jeyBzdGQ6Om1vdmUoZm5hbWUpIH07DQorICNl bHNlDQorKwlhdXRvIGZuYW1lID0gbmV3IEdvb1N0cmluZyhlbmNvZGVkRmlsZU5hbWUuZGF0YSgp KTsNCisgCVBERkRvYyBwZGZEb2N7Zm5hbWUsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHJ9Ow0K KyAjZW5kaWYNCisgCWlmICghcGRmRG9jLmlzT2soKSB8fCBwZGZEb2MuZ2V0RXJyb3JDb2RlKCkg PT0gZXJyRW5jcnlwdGVkKQ0KK0BAIC0zMzEsMTcgKzMyOSwxNCBAQCBib29sIFBkZlBsdWc6OmNv bnZlcnQoY29uc3QgUVN0cmluZyYgZm4pCisgCWdsb2JhbFBhcmFtcy5yZXNldChuZXcgR2xvYmFs UGFyYW1zKCkpOw0KKyAJZ2xvYmFsUGFyYW1zLT5zZXRFcnJRdWlldChnVHJ1ZSk7DQorIA0KKy0j aWYgZGVmaW5lZChRX09TX1dJTjMyKQ0KKy0JYXV0byBmbmFtZSA9IG5ldyBHb29TdHJpbmcoZm4u dG9VdGY4KCkuZGF0YSgpKTsNCistI2Vsc2UNCistCWF1dG8gZm5hbWUgPSBuZXcgR29vU3RyaW5n KFFGaWxlOjplbmNvZGVOYW1lKGZuKS5kYXRhKCkpOw0KKy0jZW5kaWYNCistDQorIAlRTGlzdDxP cHRpb25hbENvbnRlbnRHcm91cCo+IG9jZ0dyb3VwczsNCisrCVFCeXRlQXJyYXkgZW5jb2RlZEZp bGVOYW1lID0gb3NfaXNfd2luKCkgPyBmbi50b1V0ZjgoKSA6IFFGaWxlOjplbmNvZGVOYW1lKGZu KTsNCisgI2lmIFBPUFBMRVJfRU5DT0RFRF9WRVJTSU9OID49IFBPUFBMRVJfVkVSU0lPTl9FTkNP REUoMjIsIDMsIDApDQorLQlhdXRvIHBkZkRvYyA9IHN0ZDo6bWFrZV91bmlxdWU8UERGRG9jPihz dGQ6Om1ha2VfdW5pcXVlPEdvb1N0cmluZz4oZm5hbWUpKTsNCisrCWF1dG8gZm5hbWUgPSBzdGQ6 Om1ha2VfdW5pcXVlPEdvb1N0cmluZz4oZW5jb2RlZEZpbGVOYW1lLmRhdGEoKSk7DQorKwlhdXRv IHBkZkRvYyA9IHN0ZDo6bWFrZV91bmlxdWU8UERGRG9jPihzdGQ6Om1vdmUoZm5hbWUpKTsNCisg I2Vsc2UNCistCWF1dG8gcGRmRG9jID0gc3RkOjp1bmlxdWVfcHRyPFBERkRvYz4obmV3IFBERkRv YyhmbmFtZSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0cikpOw0KKysJYXV0byBmbmFtZSA9IG5l dyBHb29TdHJpbmcoZW5jb2RlZEZpbGVOYW1lLmRhdGEoKSk7DQorKwlhdXRvIHBkZkRvYyA9IHN0 ZDo6bWFrZV91bmlxdWU8UERGRG9jPihmbmFtZSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0cik7 DQorICNlbmRpZg0KKyAJaWYgKHBkZkRvYykNCisgCXsNCitAQCAtMzU2LDE1ICszNTEsMTIgQEAg Ym9vbCBQZGZQbHVnOjpjb252ZXJ0KGNvbnN0IFFTdHJpbmcmIGZuKQorIAkJCVFTdHJpbmcgdGV4 dCA9IFFJbnB1dERpYWxvZzo6Z2V0VGV4dChtdywgdHIoIk9wZW4gUERGLUZpbGUiKSwgdHIoIlBh c3N3b3JkIiksIFFMaW5lRWRpdDo6Tm9ybWFsLCAiIiwgJm9rKTsNCisgCQkJaWYgKG9rICYmICF0 ZXh0LmlzRW1wdHkoKSkNCisgCQkJew0KKy0jaWYgZGVmaW5lZChRX09TX1dJTjMyKQ0KKy0JCQkJ YXV0byBmbmFtZSA9IG5ldyBHb29TdHJpbmcoZm4udG9VdGY4KCkuZGF0YSgpKTsNCistI2Vsc2UN CistCQkJCWF1dG8gZm5hbWUgPSBuZXcgR29vU3RyaW5nKFFGaWxlOjplbmNvZGVOYW1lKGZuKS5k YXRhKCkpOw0KKy0jZW5kaWYNCisgI2lmIFBPUFBMRVJfRU5DT0RFRF9WRVJTSU9OID49IFBPUFBM RVJfVkVSU0lPTl9FTkNPREUoMjIsIDMsIDApDQorKwkJCQlhdXRvIGZuYW1lID0gc3RkOjptYWtl X3VuaXF1ZTxHb29TdHJpbmc+KGVuY29kZWRGaWxlTmFtZS5kYXRhKCkpOw0KKyAJCQkJc3RkOjpv cHRpb25hbDxHb29TdHJpbmc+IHVzZXJQVyhzdGQ6OmluX3BsYWNlLCB0ZXh0LnRvTG9jYWw4Qml0 KCkuZGF0YSgpKTsNCistCQkJCXBkZkRvYy5yZXNldChuZXcgUERGRG9jKHN0ZDo6bWFrZV91bmlx dWU8R29vU3RyaW5nPihmbmFtZSksIHVzZXJQVywgdXNlclBXLCBudWxscHRyKSk7DQorKwkJCQlw ZGZEb2MucmVzZXQobmV3IFBERkRvYyhzdGQ6Om1vdmUoZm5hbWUpLCB1c2VyUFcsIHVzZXJQVywg bnVsbHB0cikpOw0KKyAjZWxzZQ0KKysJCQkJYXV0byBmbmFtZSA9IG5ldyBHb29TdHJpbmcoZW5j b2RlZEZpbGVOYW1lLmRhdGEoKSk7DQorIAkJCQlhdXRvIHVzZXJQVyA9IG5ldyBHb29TdHJpbmco dGV4dC50b0xvY2FsOEJpdCgpLmRhdGEoKSk7DQorIAkJCQlwZGZEb2MucmVzZXQobmV3IFBERkRv YyhmbmFtZSwgdXNlclBXLCB1c2VyUFcsIG51bGxwdHIpKTsNCisgI2VuZGlmDQorLS0tIGEvc2Ny aWJ1cy91dGlsX29zLmNwcAorKysrIGIvc2NyaWJ1cy91dGlsX29zLmNwcAorQEAgLTIyLDYgKzIy LDggQEAgZm9yIHdoaWNoIGEgbmV3IGxpY2Vuc2UgKEdQTCtleGNlcHRpb24pCisgCisgI2luY2x1 ZGUgPFF0R2xvYmFsPgorIAorKyNpbmNsdWRlICJ1dGlsX29zLmgiCisrCisgYm9vbCBvc19pc19v c3goKQorIHsKKyAjaWZkZWYgUV9PU19NQUNPUwpkaWZmIC0tZ2l0IGEvc3JjcGtncy9zY3JpYnVz L3BhdGNoZXMvMDAwNS1wb2RvZm8tMC4xMC1maW5kLXBvZG9mby5wYXRjaCBiL3NyY3BrZ3Mvc2Ny aWJ1cy9wYXRjaGVzLzAwMDUtcG9kb2ZvLTAuMTAtZmluZC1wb2RvZm8ucGF0Y2gKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMjYxNDI4MTUzYTk2ZgotLS0gL2Rldi9u dWxsCisrKyBiL3NyY3BrZ3Mvc2NyaWJ1cy9wYXRjaGVzLzAwMDUtcG9kb2ZvLTAuMTAtZmluZC1w b2RvZm8ucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorRnJvbSAzZDAyZmFhYTJlMTdlZWY2NzgyNmFi ZDUyZDU2YjRhOWIyYjljMWJhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ3JhaWcg QnJhZG5leSA8bXJiQHNjcmlidXMuaW5mbz4KK0RhdGU6IFN1biwgNCBKdW4gMjAyMyAxNzowMDoz NCArMDAwMAorU3ViamVjdDogW1BBVENIIDAxLzEzXSBVcGRhdGUgQ01ha2UgUG9Eb0ZvIGZpbmRl ciB0byBhbGxvdyBmb3IgUG9Eb0ZvIDAuMTAuMAorIHBvZG9mby1jb25maWcuaCBsb2NhdGlvbgor CitnaXQtc3ZuLWlkOiBzdm46Ly9zY3JpYnVzLm5ldC90cnVuay9TY3JpYnVzQDI1NDkzIDExZDIw NzAxLTg0MzEtMDQxMC1hNzExLWUzYzk1OWUzYjg3MAorKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21t aXQgYmQ3MDcwNWMwNWJkMzgzZDFhOWIzYWIxMjIyNDk4OGZmODQ3NTcyMikKKy0tLQorIGNtYWtl L21vZHVsZXMvRmluZExJQlBPRE9GTy5jbWFrZSB8IDExICsrKysrKysrKystCisgMSBmaWxlIGNo YW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworLS0tIGEvY21ha2UvbW9k dWxlcy9GaW5kTElCUE9ET0ZPLmNtYWtlCisrKysgYi9jbWFrZS9tb2R1bGVzL0ZpbmRMSUJQT0RP Rk8uY21ha2UKK0BAIC0zMiw3ICszMiwxNCBAQCBmaW5kX2xpYnJhcnkoTElCUE9ET0ZPX0xJQlJB UlkKKyAKKyBpZihMSUJQT0RPRk9fSU5DTFVERV9ESVIgQU5EIExJQlBPRE9GT19MSUJSQVJZKQor IAlpZihOT1QgTElCUE9ET0ZPX0NPTkZJR19IKQorLQkJc2V0KExJQlBPRE9GT19DT05GSUdfSCAi JHtMSUJQT0RPRk9fSU5DTFVERV9ESVJ9L3BvZG9mby9iYXNlL3BvZG9mb19jb25maWcuaCIgQ0FD SEUgRklMRVBBVEggIkFsdGVybmF0aXZlIHBsYWNlIG9mIHBvZG9mb19jb25maWcuaCIpCisrCQkj UG9Eb0ZvIGJlZm9yZSAwLjEwLjAKKysJCWlmIChFWElTVFMgIiR7TElCUE9ET0ZPX0lOQ0xVREVf RElSfS9wb2RvZm8vYmFzZS9wb2RvZm9fY29uZmlnLmgiKQorKwkJCXNldChMSUJQT0RPRk9fQ09O RklHX0ggIiR7TElCUE9ET0ZPX0lOQ0xVREVfRElSfS9wb2RvZm8vYmFzZS9wb2RvZm9fY29uZmln LmgiIENBQ0hFIEZJTEVQQVRIICJBbHRlcm5hdGl2ZSBwbGFjZSBvZiBwb2RvZm9fY29uZmlnLmgu IFBvRG9GbyA8PTAuMTAuMCIpCisrCQllbmRpZigpCisrCQkjUG9Eb0ZvIDAuMTAuMCBvciBoaWdo ZXIKKysJCWlmIChFWElTVFMgIiR7TElCUE9ET0ZPX0lOQ0xVREVfRElSfS9wb2RvZm8vYXV4aWxp YXJ5L3BvZG9mb19jb25maWcuaCIpCisrCQkJc2V0KExJQlBPRE9GT19DT05GSUdfSCAiJHtMSUJQ T0RPRk9fSU5DTFVERV9ESVJ9L3BvZG9mby9hdXhpbGlhcnkvcG9kb2ZvX2NvbmZpZy5oIiBDQUNI RSBGSUxFUEFUSCAiQWx0ZXJuYXRpdmUgcGxhY2Ugb2YgcG9kb2ZvX2NvbmZpZy5oLiBQb0RvRm8g Pj0wLjEwLjAiKQorKwkJZW5kaWYoKQorIAllbmRpZigpCisgCisgCWZpbGUoU1RSSU5HUyAiJHtM SUJQT0RPRk9fQ09ORklHX0h9IiBQT0RPRk9fTUFKT1JfVkVSX0xJTkUgUkVHRVggIl4jZGVmaW5l WyBcdF0rUE9ET0ZPX1ZFUlNJT05fTUFKT1JbIFx0XStbMC05XSskIikKK0BAIC03OSw0ICs4Niw2 IEBAIGlmKE5PVCBMSUJQT0RPRk9fRklORF9RVUlFVExZKQorIAkJbWVzc2FnZSgicG9kb2ZvIGxp Yjogbm90IGZvdW5kIikKKyAJZW5kaWYoTElCUE9ET0ZPX0xJQlJBUlkpCisgCW1lc3NhZ2UoIlBv RG9GbyBjZmxhZ3M6ICR7dXNlc2hhcmVkfSIpCisrCW1lc3NhZ2UoIlBvRG9GbyBjb25maWcgZmls ZSAke0xJQlBPRE9GT19DT05GSUdfSH0iKQorKwltZXNzYWdlKCJQb0RvRm8gdmVyc2lvbiAke0xJ QlBPRE9GT19WRVJTSU9OfSIpCisgZW5kaWYoTk9UIExJQlBPRE9GT19GSU5EX1FVSUVUTFkpCmRp ZmYgLS1naXQgYS9zcmNwa2dzL3NjcmlidXMvcGF0Y2hlcy8wMDA2LXBvZG9mby0wLjEwLXN3YXAt cG9kb2ZvLXBvcHBsZXItZGVwLWNoZWNrLW9yZGVyLnBhdGNoIGIvc3JjcGtncy9zY3JpYnVzL3Bh dGNoZXMvMDAwNi1wb2RvZm8tMC4xMC1zd2FwLXBvZG9mby1wb3BwbGVyLWRlcC1jaGVjay1vcmRl ci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi40N2M2NDRm NDE4YjIyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjcGtncy9zY3JpYnVzL3BhdGNoZXMvMDAwNi1w b2RvZm8tMC4xMC1zd2FwLXBvZG9mby1wb3BwbGVyLWRlcC1jaGVjay1vcmRlci5wYXRjaApAQCAt MCwwICsxLDEwOSBAQAorRnJvbSA0NWVkNmI4NjY0Njc1ZDc4ZGUxYjNkYmRlMmM5Njg0MTExODA1 ODExIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ3JhaWcgQnJhZG5leSA8bXJiQHNj cmlidXMuaW5mbz4KK0RhdGU6IE1vbiwgNSBKdW4gMjAyMyAyMDo1Nzo0NyArMDAwMAorU3ViamVj dDogW1BBVENIIDAyLzEzXSBTd2FwIGRlcGVuZGVuY3kgY2hlY2tpbmcgZm9yIHBvZG9mbyBhbmQg cG9wcGxlciB0byB0aGUKKyBiZWdpbm5pbmcgdG8gZm9yY2UgQysrMTcgd2hlbiB0aGVpciB2ZXJz aW9ucyByZXF1aXJlIGl0CisKK2dpdC1zdm4taWQ6IHN2bjovL3NjcmlidXMubmV0L3RydW5rL1Nj cmlidXNAMjU1MDAgMTFkMjA3MDEtODQzMS0wNDEwLWE3MTEtZTNjOTU5ZTNiODcwCisoY2hlcnJ5 IHBpY2tlZCBmcm9tIGNvbW1pdCA4MWIzY2Y2MDlmZjAxNDAwZjZmODA0Yzk4ZWU1OGZlYmM0NDk0 OTA4KQorLS0tCisgQ01ha2VMaXN0c19EZXBlbmRlbmNpZXMuY21ha2UgfCA3NCArKysrKysrKysr KysrKysrKysrKystLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0NCBpbnNlcnRpb25z KCspLCAzMCBkZWxldGlvbnMoLSkKKworLS0tIGEvQ01ha2VMaXN0c19EZXBlbmRlbmNpZXMuY21h a2UKKysrKyBiL0NNYWtlTGlzdHNfRGVwZW5kZW5jaWVzLmNtYWtlCitAQCAtMSw2ICsxLDQ4IEBA CisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK KyAjIyMjIyMjIyMjIEZpbmQgRGVwZW5kZW5jaWVzICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMjIyMjIwor IAorKyM8PFBvRG9GbyBmb3IgQUkgUERGIGltcG9ydAorK29wdGlvbihXSVRIX1BPRE9GTyAiRW5h YmxlIHN1cHBvcnQgZm9yIFBERiBlbWJlZGRlZCBpbiBBSSIgT04pCisraWYgKFdJVEhfUE9ET0ZP KQorKwlmaW5kX3BhY2thZ2UoTElCUE9ET0ZPKQorKwlpZiAoTElCUE9ET0ZPX0ZPVU5EKQorKwkJ bWVzc2FnZSgiUG9Eb0ZvIGZvdW5kIE9LIikKKysJCXNldChIQVZFX1BPRE9GTyBPTikKKysJCWlm KExJQlBPRE9GT19WRVJTSU9OIFZFUlNJT05fR1JFQVRFUiAiMC4xMC4wIikKKysJCQltZXNzYWdl KFNUQVRVUyAiUG9Eb0ZvIFZlcnNpb246IiAke0xJQlBPRE9GT19WRVJTSU9OfSkKKysJCQlpZiAo Q01BS0VfQ1hYX1NUQU5EQVJEIExFU1MgMTcpCisrCQkJCW1lc3NhZ2UoU1RBVFVTICJDKysxNyBp cyB0aGUgbWluaW11bSBDKysgc3RhbmRhcmQgc2luY2UgcG9kb2ZvIDAuMTAuMCIpCisrCQkJCW1l c3NhZ2UoU1RBVFVTICJFbmFibGluZyBDKysxNyBjb21waWxlciBmZWF0dXJlcyIpCisrCQkJCXNl dChDTUFLRV9DWFhfU1RBTkRBUkQgMTcpCisrCQkJZW5kaWYoKQorKwkJZW5kaWYoKQorKwllbHNl KCkKKysJCW1lc3NhZ2UoIlBvRG9GbyBOT1QgZm91bmQgLSBEaXNhYmxpbmcgc3VwcG9ydCBmb3Ig UERGIGVtYmVkZGVkIGluIEFJIikKKysJZW5kaWYoKQorK2VuZGlmKCkKKysjPj5Qb0RvRm8gZm9y IEFJIFBERiBpbXBvcnQKKysKKysjPDxQb3BwbGVyIGZvciBQREYgaW1wb3J0CisrZmluZF9wYWNr YWdlKHBvcHBsZXIgUkVRVUlSRUQpCisraWYgKHBvcHBsZXJfRk9VTkQpCisrCXNldChIQVZFX1BP UFBMRVIgT04pCisrCW1lc3NhZ2UoU1RBVFVTICJGb3VuZCBwb3BwbGVyIikKKysJbWVzc2FnZShT VEFUVVMgIkZvdW5kIHBvcHBsZXIgbGliczogJHtwb3BwbGVyX0xJQlJBUll9IikKKysJbWVzc2Fn ZShTVEFUVVMgIkZvdW5kIHBvcHBsZXIgaW5jbHVkZXM6ICR7cG9wcGxlcl9JTkNMVURFX0RJUn0i KQorKwlpZiAocG9wcGxlcl9WRVJTSU9OIFZFUlNJT05fR1JFQVRFUl9FUVVBTCAyMi4wMS4wKQor KwkJbWVzc2FnZShTVEFUVVMgIlBvcHBsZXIgVmVyc2lvbjoiICR7cG9wcGxlcl9WRVJTSU9OfSkK KysJCWlmIChDTUFLRV9DWFhfU1RBTkRBUkQgTEVTUyAxNykKKysJCQltZXNzYWdlKFNUQVRVUyAi QysrMTcgaXMgdGhlIG1pbmltdW0gQysrIHN0YW5kYXJkIHNpbmNlIHBvcHBsZXIgMjIuMDEuMCIp CisrCQkJbWVzc2FnZShTVEFUVVMgIkVuYWJsaW5nIEMrKzE3IGNvbXBpbGVyIGZlYXR1cmVzIikK KysJCQlzZXQoQ01BS0VfQ1hYX1NUQU5EQVJEIDE3KQorKwkJZW5kaWYoKQorKwllbmRpZigpCisr ZWxzZSgpCisrCW1lc3NhZ2UoRkFUQUxfRVJST1IgIkNvdWxkIG5vdCBmaW5kIHBvcHBsZXIgbGli cmFyeSIpCisrZW5kaWYoKQorKyM+PlBvcHBsZXIgZm9yIFBERiBpbXBvcnQKKysKKysKKyAjPDwg UXQKKyAjUXQgbGVzcyB0aGFuIDYKKyBzZXQoQ01BS0VfUFJFRklYX1BBVEggIiR7UVRfUFJFRklY fS9saWIvY21ha2UiKQorQEAgLTI1NywxOCArMjk5LDcgQEAgaWYgKFdBTlRfSFVOU1BFTEwpCisg ZW5kaWYoKQorICM+PkhVTlNQRUxMIGZvciBTcGVsbGluZyBzdXBwb3J0CisgCistIzw8UG9Eb0Zv IGZvciBBSSBQREYgaW1wb3J0Cistb3B0aW9uKFdJVEhfUE9ET0ZPICJFbmFibGUgc3VwcG9ydCBm b3IgUERGIGVtYmVkZGVkIGluIEFJIiBPTikKKy1pZiAoV0lUSF9QT0RPRk8pCistCWZpbmRfcGFj a2FnZShMSUJQT0RPRk8pCistCWlmIChMSUJQT0RPRk9fRk9VTkQpCistCQltZXNzYWdlKCJQb0Rv Rm8gZm91bmQgT0siKQorLQkJc2V0KEhBVkVfUE9ET0ZPIE9OKQorLQllbHNlKCkKKy0JCW1lc3Nh Z2UoIlBvRG9GbyBOT1QgZm91bmQgLSBEaXNhYmxpbmcgc3VwcG9ydCBmb3IgUERGIGVtYmVkZGVk IGluIEFJIikKKy0JZW5kaWYoKQorLWVuZGlmKCkKKy0jPj5Qb0RvRm8gZm9yIEFJIFBERiBpbXBv cnQKKysKKyAKKyAjPDxCb29zdCBmb3IgMkdlb20gVG9vbHMKKyBvcHRpb24oV0lUSF9CT09TVCAi RW5hYmxlIHN1cHBvcnQgZm9yIEJvb3N0IGJhc2VkIGVuaGFuY2VtZW50cyIgT04pCitAQCAtMjk4 LDI0ICszMjksNyBAQCBlbHNlKCkKKyBlbmRpZigpCisgIz4+IEdyYXBoaWNzTWFnaWNrIGZvciBp bWFnZSBpbXBvcnQKKyAKKy0jPDxQb3BwbGVyIGZvciBQREYgaW1wb3J0CistZmluZF9wYWNrYWdl KHBvcHBsZXIgUkVRVUlSRUQpCistaWYgKHBvcHBsZXJfRk9VTkQpCistCXNldChIQVZFX1BPUFBM RVIgT04pCistCW1lc3NhZ2UoU1RBVFVTICJGb3VuZCBwb3BwbGVyIikKKy0JbWVzc2FnZShTVEFU VVMgIkZvdW5kIHBvcHBsZXIgbGliczogJHtwb3BwbGVyX0xJQlJBUll9IikKKy0JbWVzc2FnZShT VEFUVVMgIkZvdW5kIHBvcHBsZXIgaW5jbHVkZXM6ICR7cG9wcGxlcl9JTkNMVURFX0RJUn0iKQor LQlpZiAocG9wcGxlcl9WRVJTSU9OIFZFUlNJT05fR1JFQVRFUl9FUVVBTCAyMi4wMS4wKQorLQkJ bWVzc2FnZShTVEFUVVMgIlBvcHBsZXIgVmVyc2lvbjoiICR7cG9wcGxlcl9WRVJTSU9OfSkKKy0J CW1lc3NhZ2UoU1RBVFVTICJDKysxNyBpcyB0aGUgbWluaW11bSBDKysgc3RhbmRhcmQgc2luY2Ug cG9wcGxlciAyMi4wMS4wIikKKy0JCWlmIChDTUFLRV9DWFhfU1RBTkRBUkQgTEVTUyAxNykKKy0J CQltZXNzYWdlKEZBVEFMX0VSUk9SICJQbGVhc2Ugc2V0IC1EV0FOVF9DUFAxNz1PTiBvbiB5b3Vy IENNYWtlIGNvbW1hbmQgbGluZSIpCistCQllbmRpZigpCistCWVuZGlmKCkKKy1lbHNlKCkKKy0J bWVzc2FnZShGQVRBTF9FUlJPUiAiQ291bGQgbm90IGZpbmQgcG9wcGxlciBsaWJyYXJ5IikKKy1l bmRpZigpCistIz4+UG9wcGxlciBmb3IgUERGIGltcG9ydAorKworIAorICMgbGlicmV2ZW5nZSBm b3IgTXNQdWIgaW1wb3J0CisgcGtnX2NoZWNrX21vZHVsZXMoTElCUkVWRU5HRSBsaWJyZXZlbmdl LTAuMCkKZGlmZiAtLWdpdCBhL3NyY3BrZ3Mvc2NyaWJ1cy9wYXRjaGVzLzAwMDctcG9kb2ZvLTAu MTAtbWluaW11bS0wLjkuMC5wYXRjaCBiL3NyY3BrZ3Mvc2NyaWJ1cy9wYXRjaGVzLzAwMDctcG9k b2ZvLTAuMTAtbWluaW11bS0wLjkuMC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAwLi5kNTUwM2JmNTBkN2U2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjcGtncy9z Y3JpYnVzL3BhdGNoZXMvMDAwNy1wb2RvZm8tMC4xMC1taW5pbXVtLTAuOS4wLnBhdGNoCkBAIC0w LDAgKzEsMjIgQEAKK0Zyb20gMmEyYzk1ZmRhMDViYmIwODljMTI4MDcyNjFiN2E5MzM5NjM1YjQ4 OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENyYWlnIEJyYWRuZXkgPG1yYkBzY3Jp YnVzLmluZm8+CitEYXRlOiBNb24sIDUgSnVuIDIwMjMgMjE6MzI6MjcgKzAwMDAKK1N1YmplY3Q6 IFtQQVRDSCAwMy8xM10gQnVtcCBtaW5pbXVtIHBvZG9mbyB2ZXJzaW9uIHRvIDAuOS4wCisKK2dp dC1zdm4taWQ6IHN2bjovL3NjcmlidXMubmV0L3RydW5rL1NjcmlidXNAMjU1MDYgMTFkMjA3MDEt ODQzMS0wNDEwLWE3MTEtZTNjOTU5ZTNiODcwCisoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCA5 MjMzZTFlMjBhMDA2MTU1ZTkwZTI4OTNjYjJhMTMzOTQ5ZWM3YTY4KQorLS0tCisgQ01ha2VMaXN0 c19EZXBlbmRlbmNpZXMuY21ha2UgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9u KCspLCAxIGRlbGV0aW9uKC0pCisKKy0tLSBhL0NNYWtlTGlzdHNfRGVwZW5kZW5jaWVzLmNtYWtl CisrKysgYi9DTWFrZUxpc3RzX0RlcGVuZGVuY2llcy5jbWFrZQorQEAgLTQsNyArNCw3IEBACisg Izw8UG9Eb0ZvIGZvciBBSSBQREYgaW1wb3J0Cisgb3B0aW9uKFdJVEhfUE9ET0ZPICJFbmFibGUg c3VwcG9ydCBmb3IgUERGIGVtYmVkZGVkIGluIEFJIiBPTikKKyBpZiAoV0lUSF9QT0RPRk8pCist CWZpbmRfcGFja2FnZShMSUJQT0RPRk8pCisrCWZpbmRfcGFja2FnZShMSUJQT0RPRk8gMC45LjAp CisgCWlmIChMSUJQT0RPRk9fRk9VTkQpCisgCQltZXNzYWdlKCJQb0RvRm8gZm91bmQgT0siKQor IAkJc2V0KEhBVkVfUE9ET0ZPIE9OKQpkaWZmIC0tZ2l0IGEvc3JjcGtncy9zY3JpYnVzL3BhdGNo ZXMvMDAwOC1wb2RvZm8tMC4xMC1kcm9wLW9sZC1jb21wYXQucGF0Y2ggYi9zcmNwa2dzL3Njcmli dXMvcGF0Y2hlcy8wMDA4LXBvZG9mby0wLjEwLWRyb3Atb2xkLWNvbXBhdC5wYXRjaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi45Y2JmZDhlM2I5YWJmCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjcGtncy9zY3JpYnVzL3BhdGNoZXMvMDAwOC1wb2RvZm8tMC4xMC1kcm9w LW9sZC1jb21wYXQucGF0Y2gKQEAgLTAsMCArMSw0OCBAQAorRnJvbSA2MDAwNzMxNGExN2NmZDll ZjRkODE2ODk4NjhjYTFiNGU5MWQ1Yzg5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTog SmVhbiBHaGFsaSA8amdoYWxpQGxpYmVydHlzdXJmLmZyPgorRGF0ZTogTW9uLCA1IEp1biAyMDIz IDIxOjM3OjQwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDQvMTNdIENvZGUgY2xlYW51cCBub3cg cG9zc2libGUgdGhhbmtzIHRvIHBvZG9mbyA+PSAwLjkuMAorIHJlcXVpcmVtZW50CisKK2dpdC1z dm4taWQ6IHN2bjovL3NjcmlidXMubmV0L3RydW5rL1NjcmlidXNAMjU1MDkgMTFkMjA3MDEtODQz MS0wNDEwLWE3MTEtZTNjOTU5ZTNiODcwCisoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCBhNDNh ZDIwMzBmNmE2YTdjY2MxZDdmYzZjZGNkN2E2NTJlMTI2M2MzKQorLS0tCisgc2NyaWJ1cy9wZGZs aWJfY29yZS5jcHAgfCA4IC0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDggZGVsZXRpb25zKC0p CisKKy0tLSBhL3NjcmlidXMvcGRmbGliX2NvcmUuY3BwCisrKysgYi9zY3JpYnVzL3BkZmxpYl9j b3JlLmNwcAorQEAgLTk4NjEsMTYgKzk4NjEsMTIgQEAgYm9vbCBQREZMaWJDb3JlOjpQREZfRW1i ZWRkZWRQREYoUGFnZUl0ZQorIAkJCWNoYXIgKiBtYnVmZmVyID0gbnVsbHB0cjsKKyAJCQlsb25n IG1sZW4gPSAwOworIAorLSNpZiAoUE9ET0ZPX1ZFUlNJT04gPj0gUE9ET0ZPX01BS0VfVkVSU0lP TigwLCA3LCA5OSkpCisgCQkJLy8gc2VlbXMgbW9yZSBjb21wbGljYXRlZCBhdCBmaXJzdCwgYnV0 IGluIGZhY3QgaXQgbWFrZXMgdGhlIGNvZGUgbW9yZSBzdGFibGUgd3J0IHBvZG9mbyBjaGFuZ2Vz CisgCQkJUG9Eb0ZvOjpQZGZNZW1vcnlPdXRwdXRTdHJlYW0gb1N0cmVhbSgxKTsKKyAJCQlzdHJl YW0tPkdldENvcHkoJm9TdHJlYW0pOworIAkJCW9TdHJlYW0uQ2xvc2UoKTsKKyAJCQltbGVuID0g b1N0cmVhbS5HZXRMZW5ndGgoKTsKKyAJCQltYnVmZmVyID0gb1N0cmVhbS5UYWtlQnVmZmVyKCk7 CistI2Vsc2UKKy0JCQlzdHJlYW0tPkdldENvcHkoJm1idWZmZXIsICZtbGVuKTsKKy0jZW5kaWYK KyAJCQlpZiAobWJ1ZmZlclttbGVuLTFdID09ICdcbicpCisgCQkJCS0tbWxlbjsKKyAJCQlQdXRE b2MoIlxuL0xlbmd0aCAiICsgUGRmOjp0b1BkZihzdGF0aWNfY2FzdDxxbG9uZ2xvbmc+KG1sZW4p KSk7CitAQCAtMTAxNTgsMTYgKzEwMTU0LDEyIEBAIHZvaWQgUERGTGliQ29yZTo6Y29weVBvRG9G b09iamVjdChjb25zdAorIAkJY2hhciAqIG1idWZmZXIgPSBudWxscHRyOworIAkJbG9uZyBtbGVu ID0gMDsKKyAKKy0jaWYgKFBPRE9GT19WRVJTSU9OID49IFBPRE9GT19NQUtFX1ZFUlNJT04oMCwg NywgOTkpKQorIAkJLy8gc2VlbXMgbW9yZSBjb21wbGljYXRlZCBhdCBmaXJzdCwgYnV0IGluIGZh Y3QgaXQgbWFrZXMgdGhlIGNvZGUgbW9yZSBzdGFibGUgd3J0IHBvZG9mbyBjaGFuZ2VzCisgCQlQ b0RvRm86OlBkZk1lbW9yeU91dHB1dFN0cmVhbSBvU3RyZWFtKDEpOworIAkJc3RyZWFtLT5HZXRD b3B5KCZvU3RyZWFtKTsKKyAJCW9TdHJlYW0uQ2xvc2UoKTsKKyAJCW1sZW4gPSBvU3RyZWFtLkdl dExlbmd0aCgpOworIAkJbWJ1ZmZlciA9IG9TdHJlYW0uVGFrZUJ1ZmZlcigpOworLSNlbHNlCist CQlzdHJlYW0tPkdldENvcHkoJm1idWZmZXIsICZtbGVuKTsKKy0jZW5kaWYKKyAJCWlmIChtYnVm ZmVyW21sZW4tMV0gPT0gJ1xuJykKKyAJCQktLW1sZW47CisgCQlQdXREb2MoIlxuc3RyZWFtXG4i KTsKZGlmZiAtLWdpdCBhL3NyY3BrZ3Mvc2NyaWJ1cy9wYXRjaGVzLzAwMDktcG9kb2ZvLTAuMTAt YXZvaWQtY29uZnVzaW9uLXdpdGgtbV9kb2MucGF0Y2ggYi9zcmNwa2dzL3NjcmlidXMvcGF0Y2hl cy8wMDA5LXBvZG9mby0wLjEwLWF2b2lkLWNvbmZ1c2lvbi13aXRoLW1fZG9jLnBhdGNoCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ1NDVkMzQ3ZTI4ZTEKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmNwa2dzL3NjcmlidXMvcGF0Y2hlcy8wMDA5LXBvZG9mby0wLjEwLWF2 b2lkLWNvbmZ1c2lvbi13aXRoLW1fZG9jLnBhdGNoCkBAIC0wLDAgKzEsNjcgQEAKK0Zyb20gOTll MmQ0MDBhZDZhZDdmYmY0ZTJhZDFhNDI3NzUyMWVhYWQ0NmQyOCBNb24gU2VwIDE3IDAwOjAwOjAw IDIwMDEKK0Zyb206IENyYWlnIEJyYWRuZXkgPG1yYkBzY3JpYnVzLmluZm8+CitEYXRlOiBTdW4s IDQgSnVuIDIwMjMgMjE6MzE6NTMgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwNS8xM10gUmVuYW1l IG1fZG9jIGluIHBkZl9hbmFseXNlciB0byBhdm9pZCBjb25mdXNpb24gd2l0aAorIG1fZG9jIGlu IG90aGVyIGNvZGUKKworZ2l0LXN2bi1pZDogc3ZuOi8vc2NyaWJ1cy5uZXQvdHJ1bmsvU2NyaWJ1 c0AyNTQ5NSAxMWQyMDcwMS04NDMxLTA0MTAtYTcxMS1lM2M5NTllM2I4NzAKKyhjaGVycnkgcGlj a2VkIGZyb20gY29tbWl0IGI1YWVlZDgwOTNlMDZjZjNkZjQ1NmY1YWQyNmY3NmY2Y2E0NDJiZmYp CistLS0KKyBzY3JpYnVzL3BkZl9hbmFseXplci5jcHAgfCAxMiArKysrKystLS0tLS0KKyBzY3Jp YnVzL3BkZl9hbmFseXplci5oICAgfCAgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRp b25zKCspLCA3IGRlbGV0aW9ucygtKQorCistLS0gYS9zY3JpYnVzL3BkZl9hbmFseXplci5jcHAK KysrKyBiL3NjcmlidXMvcGRmX2FuYWx5emVyLmNwcAorQEAgLTc1LDExICs3NSwxMSBAQCBQREZB bmFseXplcjo6UERGQW5hbHl6ZXIoUVN0cmluZyAmIGZpbGVuCisgCQluYW1lTWFwSW5pdGVkID0g dHJ1ZTsNCisgCX0NCisgDQorLQltX2RvYyA9IG51bGxwdHI7DQorKwltX3BkZmRvYyA9IG51bGxw dHI7DQorIA0KKyAJUGRmRXJyb3I6OkVuYWJsZURlYnVnKCBmYWxzZSApOw0KKyAJdHJ5IHsNCist CQltX2RvYyA9IG5ldyBQZGZNZW1Eb2N1bWVudChmaWxlbmFtZS50b0xvY2FsOEJpdCgpLmRhdGEo KSk7DQorKwkJbV9wZGZkb2MgPSBuZXcgUGRmTWVtRG9jdW1lbnQoZmlsZW5hbWUudG9Mb2NhbDhC aXQoKS5kYXRhKCkpOw0KKyAJfQ0KKyAJY2F0Y2ggKFBkZkVycm9yICYgZSkNCisgCXsNCitAQCAt OTEsMTQgKzkxLDE0IEBAIFBERkFuYWx5emVyOjpQREZBbmFseXplcihRU3RyaW5nICYgZmlsZW4K KyANCisgUERGQW5hbHl6ZXI6On5QREZBbmFseXplcigpDQorIHsNCistCWRlbGV0ZSBtX2RvYzsN CisrCWRlbGV0ZSBtX3BkZmRvYzsNCisgfQ0KKyANCisgYm9vbCBQREZBbmFseXplcjo6aW5zcGVj dFBERihpbnQgcGFnZU51bSwgUUxpc3Q8UERGQ29sb3JTcGFjZT4gJiB1c2VkQ29sb3JTcGFjZXMs IGJvb2wgJiBoYXNUcmFuc3BhcmVuY3ksIFFMaXN0PFBERkZvbnQ+ICYgdXNlZEZvbnRzLCBRTGlz dDxQREZJbWFnZT4gJiBpbWdzKQ0KKyB7DQorLQlpZiAoIW1fZG9jKQ0KKysJaWYgKCFtX3BkZmRv YykNCisgCQlyZXR1cm4gZmFsc2U7DQorLQlQZGZQYWdlKiBwYWdlID0gbV9kb2MtPkdldFBhZ2Uo cGFnZU51bSk7DQorKwlQZGZQYWdlKiBwYWdlID0gbV9wZGZkb2MtPkdldFBhZ2UocGFnZU51bSk7 DQorIAlyZXR1cm4gcGFnZT9pbnNwZWN0Q2FudmFzKHBhZ2UsIHVzZWRDb2xvclNwYWNlcywgaGFz VHJhbnNwYXJlbmN5LCB1c2VkRm9udHMsIGltZ3MpOmZhbHNlOw0KKyB9DQorIA0KK0BAIC03MjUs NyArNzI1LDcgQEAgdm9pZCBQREZBbmFseXplcjo6aW5zcGVjdEV4dEdTdGF0ZU9iaihQZAorIAkJ aWYgKGFyclswXS5Jc1JlZmVyZW5jZSgpKQ0KKyAJCXsNCisgCQkJUGRmUmVmZXJlbmNlIHJlZiA9 IGFyclswXS5HZXRSZWZlcmVuY2UoKTsNCistCQkJUGRmT2JqZWN0KiBmb250T2JqZWN0ID0gbV9k b2MtPkdldE9iamVjdHMoKS5HZXRPYmplY3QocmVmKTsNCisrCQlQZGZPYmplY3QqIGZvbnRPYmpl Y3QgPSBtX3BkZmRvYy0+R2V0T2JqZWN0cygpLkdldE9iamVjdChyZWYpOw0KKyAJCQlpZiAoZm9u dE9iamVjdCkNCisgCQkJew0KKyAJCQkJUERGRm9udCBmb250ID0gZ2V0Rm9udEluZm8oZm9udE9i amVjdCk7DQorLS0tIGEvc2NyaWJ1cy9wZGZfYW5hbHl6ZXIuaAorKysrIGIvc2NyaWJ1cy9wZGZf YW5hbHl6ZXIuaAorQEAgLTE2Miw3ICsxNjIsNyBAQCBwdWJsaWM6CisgI2lmZGVmIEhBVkVfUE9E T0ZPDQorIHByaXZhdGU6DQorIAkvLyBwb2ludGVyIHRvIHRoZSBQb0RvRm8gUGRmJ3Mgb2JqZWN0 DQorLQlQb0RvRm86OlBkZk1lbURvY3VtZW50KiBtX2RvYzsNCisrCVBvRG9Gbzo6UGRmTWVtRG9j dW1lbnQqIG1fcGRmZG9jOw0KKyANCisgCS8vIFBhdGggdG8gdGhlIGFuYWx5emVkIGZpbGUNCisg CVFTdHJpbmcgbV9maWxlbmFtZTsNCmRpZmYgLS1naXQgYS9zcmNwa2dzL3NjcmlidXMvcGF0Y2hl cy8wMDEwLXBvZG9mby0wLjEwLWluZGVudGF0aW9uLWZpeC5wYXRjaCBiL3NyY3BrZ3Mvc2NyaWJ1 cy9wYXRjaGVzLzAwMTAtcG9kb2ZvLTAuMTAtaW5kZW50YXRpb24tZml4LnBhdGNoCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmY2Yzg5MGViZjYwZDkKLS0tIC9kZXYv bnVsbAorKysgYi9zcmNwa2dzL3NjcmlidXMvcGF0Y2hlcy8wMDEwLXBvZG9mby0wLjEwLWluZGVu dGF0aW9uLWZpeC5wYXRjaApAQCAtMCwwICsxLDIyIEBACitGcm9tIGVkODU0MDkxOTQ0YzkzYTc0 Y2RiM2E0ZGJkNmVkMTRlOTVhYjZhOWMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBK ZWFuIEdoYWxpIDxqZ2hhbGlAbGliZXJ0eXN1cmYuZnI+CitEYXRlOiBNb24sIDUgSnVuIDIwMjMg MjE6MDM6MDggKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwNi8xM10gU21hbGwgaW5kZW50YXRpb24g Zml4CisKK2dpdC1zdm4taWQ6IHN2bjovL3NjcmlidXMubmV0L3RydW5rL1NjcmlidXNAMjU1MDMg MTFkMjA3MDEtODQzMS0wNDEwLWE3MTEtZTNjOTU5ZTNiODcwCisoY2hlcnJ5IHBpY2tlZCBmcm9t IGNvbW1pdCBmZDU3NmNhNmQ0MDg1NmNhM2NmYjMyNDgyYjI0ZmExNTc4MzY2NWQ1KQorLS0tCisg c2NyaWJ1cy9wZGZfYW5hbHl6ZXIuY3BwIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2Vy dGlvbigrKSwgMSBkZWxldGlvbigtKQorCistLS0gYS9zY3JpYnVzL3BkZl9hbmFseXplci5jcHAK KysrKyBiL3NjcmlidXMvcGRmX2FuYWx5emVyLmNwcAorQEAgLTcyNSw3ICs3MjUsNyBAQCB2b2lk IFBERkFuYWx5emVyOjppbnNwZWN0RXh0R1N0YXRlT2JqKFBkCisgCQlpZiAoYXJyWzBdLklzUmVm ZXJlbmNlKCkpDQorIAkJew0KKyAJCQlQZGZSZWZlcmVuY2UgcmVmID0gYXJyWzBdLkdldFJlZmVy ZW5jZSgpOw0KKy0JCVBkZk9iamVjdCogZm9udE9iamVjdCA9IG1fcGRmZG9jLT5HZXRPYmplY3Rz KCkuR2V0T2JqZWN0KHJlZik7DQorKwkJCVBkZk9iamVjdCogZm9udE9iamVjdCA9IG1fcGRmZG9j LT5HZXRPYmplY3RzKCkuR2V0T2JqZWN0KHJlZik7DQorIAkJCWlmIChmb250T2JqZWN0KQ0KKyAJ CQl7DQorIAkJCQlQREZGb250IGZvbnQgPSBnZXRGb250SW5mbyhmb250T2JqZWN0KTsNCmRpZmYg LS1naXQgYS9zcmNwa2dzL3NjcmlidXMvcGF0Y2hlcy8wMDExLXBvZG9mby0wLjEwLWNvZGUtc3R5 bGUucGF0Y2ggYi9zcmNwa2dzL3NjcmlidXMvcGF0Y2hlcy8wMDExLXBvZG9mby0wLjEwLWNvZGUt c3R5bGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uOTcz ZWIxN2Y3MTRiNQotLS0gL2Rldi9udWxsCisrKyBiL3NyY3BrZ3Mvc2NyaWJ1cy9wYXRjaGVzLzAw MTEtcG9kb2ZvLTAuMTAtY29kZS1zdHlsZS5wYXRjaApAQCAtMCwwICsxLDE0MSBAQAorRnJvbSA5 Y2Q2MGVmNzgzMWZmZjY5ZjJkYWNjMmJmMjE2YzM1MzdiMmNkNmU5IE1vbiBTZXAgMTcgMDA6MDA6 MDAgMjAwMQorRnJvbTogSmVhbiBHaGFsaSA8amdoYWxpQGxpYmVydHlzdXJmLmZyPgorRGF0ZTog U2F0LCAxMiBBdWcgMjAyMyAyMToxMjo0OSArMDAwMAorU3ViamVjdDogW1BBVENIIDA3LzEzXSBQ REZBbmFseXplcjogY29kZSBzdHlsZSBmaXhlcyBhbmQgY2xlYW51cHMKKworZ2l0LXN2bi1pZDog c3ZuOi8vc2NyaWJ1cy5uZXQvdHJ1bmsvU2NyaWJ1c0AyNTU3MyAxMWQyMDcwMS04NDMxLTA0MTAt YTcxMS1lM2M5NTllM2I4NzAKKyhjaGVycnkgcGlja2VkIGZyb20gY29tbWl0IDliZTdhMjlmMDhh MDBiYjNjMTAwMjRjZDlhMzFhODI3NDJkNDJlMjIpCistLS0KKyBzY3JpYnVzL3BkZl9hbmFseXpl ci5jcHAgfCA1NiArKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBm aWxlIGNoYW5nZWQsIDMwIGluc2VydGlvbnMoKyksIDI2IGRlbGV0aW9ucygtKQorCistLS0gYS9z Y3JpYnVzL3BkZl9hbmFseXplci5jcHAKKysrKyBiL3NjcmlidXMvcGRmX2FuYWx5emVyLmNwcAor QEAgLTc4LDcgKzc4LDggQEAgUERGQW5hbHl6ZXI6OlBERkFuYWx5emVyKFFTdHJpbmcgJiBmaWxl bgorIAltX3BkZmRvYyA9IG51bGxwdHI7DQorIA0KKyAJUGRmRXJyb3I6OkVuYWJsZURlYnVnKCBm YWxzZSApOw0KKy0JdHJ5IHsNCisrCXRyeQ0KKysJew0KKyAJCW1fcGRmZG9jID0gbmV3IFBkZk1l bURvY3VtZW50KGZpbGVuYW1lLnRvTG9jYWw4Qml0KCkuZGF0YSgpKTsNCisgCX0NCisgCWNhdGNo IChQZGZFcnJvciAmIGUpDQorQEAgLTk5LDEyICsxMDAsMTMgQEAgYm9vbCBQREZBbmFseXplcjo6 aW5zcGVjdFBERihpbnQgcGFnZU51bQorIAlpZiAoIW1fcGRmZG9jKQ0KKyAJCXJldHVybiBmYWxz ZTsNCisgCVBkZlBhZ2UqIHBhZ2UgPSBtX3BkZmRvYy0+R2V0UGFnZShwYWdlTnVtKTsNCistCXJl dHVybiBwYWdlP2luc3BlY3RDYW52YXMocGFnZSwgdXNlZENvbG9yU3BhY2VzLCBoYXNUcmFuc3Bh cmVuY3ksIHVzZWRGb250cywgaW1ncyk6ZmFsc2U7DQorKwlyZXR1cm4gcGFnZSA/IGluc3BlY3RD YW52YXMocGFnZSwgdXNlZENvbG9yU3BhY2VzLCBoYXNUcmFuc3BhcmVuY3ksIHVzZWRGb250cywg aW1ncykgOiBmYWxzZTsNCisgfQ0KKyANCisgUERGQ29sb3JTcGFjZSBQREZBbmFseXplcjo6Z2V0 Q1NUeXBlKFBkZk9iamVjdCogY3MpDQorIHsNCistCXRyeSB7DQorKwl0cnkNCisrCXsNCisgCQkv LyBjb2xvcnNwYWNlIGlzIGVpdGhlciBhIG5hbWUgb3IgYW4gYXJyYXkNCisgCQlpZiAoY3MgJiYg Y3MtPklzTmFtZSgpKQ0KKyAJCXsNCitAQCAtMTY1LDIwICsxNjcsMjEgQEAgUERGQ29sb3JTcGFj ZSBQREZBbmFseXplcjo6Z2V0Q1NUeXBlKFBkZgorIGJvb2wgUERGQW5hbHl6ZXI6Omluc3BlY3RD YW52YXMoUGRmQ2FudmFzKiBjYW52YXMsIFFMaXN0PFBERkNvbG9yU3BhY2U+ICYgdXNlZENvbG9y U3BhY2VzLCBib29sICYgaGFzVHJhbnNwYXJlbmN5LCBRTGlzdDxQREZGb250PiAmIHVzZWRGb250 cywgUUxpc3Q8UERGSW1hZ2U+ICYgaW1ncykNCisgew0KKyAJLy8gdGhpcyBtZXRob2QgY2FuIGJl IHVzZWQgdG8gZ2V0IHVzZWQgY29sb3Igc3BhY2VzLCBkZXRlY3QgdHJhbnNwYXJlbmN5LCBhbmQg Z2V0IHVzZWQgZm9udHMgaW4gZWl0aGVyIFBkZlBhZ2Ugb3IgUGRmWE9iamVjdA0KKy0JUGRmT2Jq ZWN0KiBjb2xvclNwYWNlUmVzOw0KKy0JUGRmT2JqZWN0KiB4T2JqZWN0czsNCistCVBkZk9iamVj dCogdHJhbnNHcm91cDsNCistCVBkZk9iamVjdCogZXh0R1N0YXRlOw0KKy0JUGRmT2JqZWN0KiBm b250UmVzOw0KKysJUGRmT2JqZWN0KiBjb2xvclNwYWNlUmVzIHsgbnVsbHB0ciB9Ow0KKysJUGRm T2JqZWN0KiB4T2JqZWN0cyB7IG51bGxwdHIgfTsNCisrCVBkZk9iamVjdCogdHJhbnNHcm91cCB7 IG51bGxwdHIgfTsNCisrCVBkZk9iamVjdCogZXh0R1N0YXRlIHsgbnVsbHB0ciB9Ow0KKysJUGRm T2JqZWN0KiBmb250UmVzIHsgbnVsbHB0ciB9Ow0KKyAJUU1hcDxQZGZOYW1lLCBQREZDb2xvclNw YWNlPiBwcm9jZXNzZWROYW1lZENTOw0KKyAJUU1hcDxQZGZOYW1lLCBQREZGb250PiBwcm9jZXNz ZWROYW1lZEZvbnQ7DQorIAlRTGlzdDxQZGZOYW1lPiBwcm9jZXNzZWROYW1lZFhPYmo7DQorIAlR TGlzdDxQZGZOYW1lPiBwcm9jZXNzZWROYW1lZEdTOw0KKy0JdHJ5IHsNCisrCXRyeQ0KKysJew0K KyAJCS8vIGdldCBob2xkIG9mIGEgUGRmT2JqZWN0IHBvaW50ZXIgb2YgdGhpcyBjYW52YXMNCisg CQkvLyBuZWVkZWQgZm9yIHRoZSBmaW5kaW5nIHJlc291cmNlcyBjb2RlIGJlbG93IHRvIHdvcmsN CisgCQlQZGZQYWdlKiBwYWdlID0gZHluYW1pY19jYXN0PFBkZlBhZ2UqPihjYW52YXMpOw0KKy0J CVBkZk9iamVjdCogY2FudmFzT2JqZWN0ID0gcGFnZT8ocGFnZS0+R2V0T2JqZWN0KCkpOigoZHlu YW1pY19jYXN0PFBkZlhPYmplY3QqPihjYW52YXMpKS0+R2V0T2JqZWN0KCkpOw0KKysJCVBkZk9i amVjdCogY2FudmFzT2JqZWN0ID0gcGFnZSA/IChwYWdlLT5HZXRPYmplY3QoKSkgOiAoKGR5bmFt aWNfY2FzdDxQZGZYT2JqZWN0Kj4oY2FudmFzKSktPkdldE9iamVjdCgpKTsNCisgDQorIAkJLy8g ZmluZCBhIHJlc291cmNlIHdpdGggQ29sb3JTcGFjZSBlbnRyeQ0KKyAJCVBkZk9iamVjdCogcmVz b3VyY2VzID0gY2FudmFzLT5HZXRSZXNvdXJjZXMoKTsNCitAQCAtMTg2LDEzICsxODksMTMgQEAg Ym9vbCBQREZBbmFseXplcjo6aW5zcGVjdENhbnZhcyhQZGZDYW52YQorIAkJew0KKyAJCQlyZXNv dXJjZXMgPSBwYXItPkdldEluZGlyZWN0S2V5KCJSZXNvdXJjZXMiKTsNCisgCQl9DQorLQkJY29s b3JTcGFjZVJlcyA9IHJlc291cmNlcz9yZXNvdXJjZXMtPkdldEluZGlyZWN0S2V5KCJDb2xvclNw YWNlIik6bnVsbHB0cjsNCistCQl4T2JqZWN0cyA9IHJlc291cmNlcz9yZXNvdXJjZXMtPkdldElu ZGlyZWN0S2V5KCJYT2JqZWN0Iik6bnVsbHB0cjsNCistCQlleHRHU3RhdGUgPSByZXNvdXJjZXM/ cmVzb3VyY2VzLT5HZXRJbmRpcmVjdEtleSgiRXh0R1N0YXRlIik6bnVsbHB0cjsNCistCQlmb250 UmVzID0gcmVzb3VyY2VzP3Jlc291cmNlcy0+R2V0SW5kaXJlY3RLZXkoIkZvbnQiKTpudWxscHRy Ow0KKysJCWNvbG9yU3BhY2VSZXMgPSByZXNvdXJjZXMgPyByZXNvdXJjZXMtPkdldEluZGlyZWN0 S2V5KCJDb2xvclNwYWNlIikgOiBudWxscHRyOw0KKysJCXhPYmplY3RzID0gcmVzb3VyY2VzID8g cmVzb3VyY2VzLT5HZXRJbmRpcmVjdEtleSgiWE9iamVjdCIpIDogbnVsbHB0cjsNCisrCQlleHRH U3RhdGUgPSByZXNvdXJjZXMgPyByZXNvdXJjZXMtPkdldEluZGlyZWN0S2V5KCJFeHRHU3RhdGUi KSA6IG51bGxwdHI7DQorKwkJZm9udFJlcyA9IHJlc291cmNlcyA/IHJlc291cmNlcy0+R2V0SW5k aXJlY3RLZXkoIkZvbnQiKSA6IG51bGxwdHI7DQorIA0KKyAJCS8vIGdldHRpbmcgdGhlIHRyYW5z cGFyZW5jeSBncm91cCBvZiB0aGlzIGNvbnRlbnQgc3RyZWFtIChpZiBhdmFpbGFibGUpDQorLQkJ dHJhbnNHcm91cCA9IGNhbnZhc09iamVjdD9jYW52YXNPYmplY3QtPkdldEluZGlyZWN0S2V5KCJH cm91cCIpOm51bGxwdHI7DQorKwkJdHJhbnNHcm91cCA9IGNhbnZhc09iamVjdCA/IGNhbnZhc09i amVjdC0+R2V0SW5kaXJlY3RLZXkoIkdyb3VwIikgOiBudWxscHRyOw0KKyAJCWlmICh0cmFuc0dy b3VwKQ0KKyAJCXsNCisgCQkJUGRmT2JqZWN0KiBzdWJ0eXBlID0gdHJhbnNHcm91cC0+R2V0SW5k aXJlY3RLZXkoIlMiKTsNCitAQCAtMjE5LDcgKzIyMiw4IEBAIGJvb2wgUERGQW5hbHl6ZXI6Omlu c3BlY3RDYW52YXMoUGRmQ2FudmEKKyAJCXJldHVybiBmYWxzZTsNCisgCX0NCisgDQorLQl0cnkg ew0KKysJdHJ5DQorKwl7DQorIAkJLy8gc3RhcnQgcGFyc2luZyB0aGUgY29udGVudCBzdHJlYW0N CisgCQlQZGZDb250ZW50c1Rva2VuaXplciB0b2tlbml6ZXIoY2FudmFzKTsNCisgCQlFUGRmQ29u dGVudHNUeXBlIHQ7DQorQEAgLTUwMiw3ICs1MDYsNyBAQCBib29sIFBERkFuYWx5emVyOjppbnNw ZWN0Q2FudmFzKFBkZkNhbnZhCisgCQkJCQkJaWYgKGFyZ3Muc2l6ZSgpID09IDEgJiYgYXJnc1sw XS5Jc05hbWUoKSAmJiB4T2JqZWN0cykNCisgCQkJCQkJew0KKyAJCQkJCQkJUGRmT2JqZWN0KiB4 T2JqZWN0ID0geE9iamVjdHMtPkdldEluZGlyZWN0S2V5KGFyZ3NbMF0uR2V0TmFtZSgpKTsNCist CQkJCQkJCVBkZk9iamVjdCogc3VidHlwZU9iamVjdCA9IHhPYmplY3Q/eE9iamVjdC0+R2V0SW5k aXJlY3RLZXkoIlN1YnR5cGUiKTpudWxscHRyOw0KKysJCQkJCQkJUGRmT2JqZWN0KiBzdWJ0eXBl T2JqZWN0ID0geE9iamVjdCA/IHhPYmplY3QtPkdldEluZGlyZWN0S2V5KCJTdWJ0eXBlIikgOiBu dWxscHRyOw0KKyAJCQkJCQkJaWYgKHN1YnR5cGVPYmplY3QgJiYgc3VidHlwZU9iamVjdC0+SXNO YW1lKCkpDQorIAkJCQkJCQl7DQorIAkJCQkJCQkJaWYgKHN1YnR5cGVPYmplY3QtPkdldE5hbWUo KSA9PSAiSW1hZ2UiKQ0KK0BAIC01NTcsMTAgKzU2MSwxMCBAQCBib29sIFBERkFuYWx5emVyOjpp bnNwZWN0Q2FudmFzKFBkZkNhbnZhCisgCQkJCQkJUGRmTmFtZSBjcygiQ1MiKTsNCisgCQkJCQkJ aWYgKGFyZ3MuY29udGFpbnMoY29sb3JzcGFjZSkgfHwgYXJncy5jb250YWlucyhjcykpDQorIAkJ CQkJCXsNCistCQkJCQkJCWludCBjc0lkeCA9IGFyZ3MuY29udGFpbnMoY29sb3JzcGFjZSk/YXJn cy5pbmRleE9mKGNvbG9yc3BhY2UpOmFyZ3MuaW5kZXhPZihjcyk7DQorLQkJCQkJCQlpZiAoYXJn c1tjc0lkeCsxXS5Jc05hbWUoKSkNCisrCQkJCQkJCWludCBjc0lkeCA9IGFyZ3MuY29udGFpbnMo Y29sb3JzcGFjZSkgPyBhcmdzLmluZGV4T2YoY29sb3JzcGFjZSkgOiBhcmdzLmluZGV4T2YoY3Mp Ow0KKysJCQkJCQkJaWYgKGFyZ3NbY3NJZHggKyAxXS5Jc05hbWUoKSkNCisgCQkJCQkJCXsNCist CQkJCQkJCQlQZGZOYW1lIGNzTmFtZSA9IGFyZ3NbY3NJZHgrMV0uR2V0TmFtZSgpOw0KKysJCQkJ CQkJCVBkZk5hbWUgY3NOYW1lID0gYXJnc1tjc0lkeCArIDFdLkdldE5hbWUoKTsNCisgCQkJCQkJ CQlpZiAoKGNzTmFtZSA9PSAiRyIgfHwgY3NOYW1lID09ICJEZXZpY2VHcmF5IikgJiYgIXVzZWRD b2xvclNwYWNlcy5jb250YWlucyhDU19EZXZpY2VHcmF5KSkNCisgCQkJCQkJCQkJdXNlZENvbG9y U3BhY2VzLmFwcGVuZChDU19EZXZpY2VHcmF5KTsNCisgCQkJCQkJCQllbHNlIGlmICgoY3NOYW1l ID09ICJSR0IiIHx8IGNzTmFtZSA9PSAiRGV2aWNlUkdCIikgJiYgIXVzZWRDb2xvclNwYWNlcy5j b250YWlucyhDU19EZXZpY2VSR0IpKQ0KK0BAIC01OTQsMTQgKzU5OCwxNCBAQCBib29sIFBERkFu YWx5emVyOjppbnNwZWN0Q2FudmFzKFBkZkNhbnZhCisgCQkJCQkJUGRmTmFtZSB3KCJXIik7DQor IAkJCQkJCWlmICgoYXJncy5jb250YWlucyhoZWlnaHQpIHx8IGFyZ3MuY29udGFpbnMoaCkpICYm IChhcmdzLmNvbnRhaW5zKHdpZHRoKSB8fCBhcmdzLmNvbnRhaW5zKHcpKSkNCisgCQkJCQkJew0K Ky0JCQkJCQkJaW50IGhlaWdodElkeCA9IGFyZ3MuY29udGFpbnMoaGVpZ2h0KT9hcmdzLmluZGV4 T2YoaGVpZ2h0KTphcmdzLmluZGV4T2YoaCk7DQorLQkJCQkJCQlpbnQgd2lkdGhJZHggPSBhcmdz LmNvbnRhaW5zKHdpZHRoKT9hcmdzLmluZGV4T2Yod2lkdGgpOmFyZ3MuaW5kZXhPZih3KTsNCist CQkJCQkJCWRvdWJsZSBoZWlnaHQgPSBhcmdzW2hlaWdodElkeCsxXS5HZXRSZWFsKCk7DQorLQkJ CQkJCQlkb3VibGUgd2lkdGggPSBhcmdzW3dpZHRoSWR4KzFdLkdldFJlYWwoKTsNCisrCQkJCQkJ CWludCBoZWlnaHRJZHggPSBhcmdzLmNvbnRhaW5zKGhlaWdodCkgPyBhcmdzLmluZGV4T2YoaGVp Z2h0KSA6IGFyZ3MuaW5kZXhPZihoKTsNCisrCQkJCQkJCWludCB3aWR0aElkeCA9IGFyZ3MuY29u dGFpbnMod2lkdGgpID8gYXJncy5pbmRleE9mKHdpZHRoKSA6IGFyZ3MuaW5kZXhPZih3KTsNCisr CQkJCQkJCWRvdWJsZSBoZWlnaHQgPSBhcmdzW2hlaWdodElkeCArIDFdLkdldFJlYWwoKTsNCisr CQkJCQkJCWRvdWJsZSB3aWR0aCA9IGFyZ3Nbd2lkdGhJZHggKyAxXS5HZXRSZWFsKCk7DQorIAkJ CQkJCQlQREZJbWFnZSBpbWc7DQorIAkJCQkJCQlpbWcuaW1nTmFtZSA9ICJJbmxpbmUgSW1hZ2Ui Ow0KKy0JCQkJCQkJaW1nLmRwaVggPSBxUm91bmQod2lkdGgvKGN1cnJHUy5jdG0ubTExKCkvNzIp KTsNCistCQkJCQkJCWltZy5kcGlZID0gcVJvdW5kKGhlaWdodC8oY3VyckdTLmN0bS5tMjIoKS83 MikpOw0KKysJCQkJCQkJaW1nLmRwaVggPSBxUm91bmQod2lkdGggLyAoY3VyckdTLmN0bS5tMTEo KSAvIDcyKSk7DQorKwkJCQkJCQlpbWcuZHBpWSA9IHFSb3VuZChoZWlnaHQgLyAoY3VyckdTLmN0 bS5tMjIoKSAvIDcyKSk7DQorIAkJCQkJCQlpbWdzLmFwcGVuZChpbWcpOw0KKyAJCQkJCQl9DQor IAkJCQkJCWlubGluZUltZ0RpY3QgPSBmYWxzZTsNCmRpZmYgLS1naXQgYS9zcmNwa2dzL3Njcmli dXMvcGF0Y2hlcy8wMDEyLXBvZG9mby0wLjEwLXByZXBhcmF0aW9uLnBhdGNoIGIvc3JjcGtncy9z Y3JpYnVzL3BhdGNoZXMvMDAxMi1wb2RvZm8tMC4xMC1wcmVwYXJhdGlvbi5wYXRjaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi42NTRkODcwMTQwNjgzCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjcGtncy9zY3JpYnVzL3BhdGNoZXMvMDAxMi1wb2RvZm8tMC4xMC1wcmVw YXJhdGlvbi5wYXRjaApAQCAtMCwwICsxLDUxNCBAQAorRnJvbSBiYjZjMDcxNjAzNWJjZGM5ZmQ0 YmQ1MzZkMWVkNmYwMWExYzZlOWZhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSmVh biBHaGFsaSA8amdoYWxpQGxpYmVydHlzdXJmLmZyPgorRGF0ZTogU2F0LCAxMiBBdWcgMjAyMyAy MzoyODoxMSArMDAwMAorU3ViamVjdDogW1BBVENIIDA4LzEzXSBQcmVwYXJhdGlvbiB3b3JrIGZv ciBQb0RvRm8gMC4xMC4weCBzdXBwb3J0OiBnZXQgcmlkIG9mCisgR2V0SW5kaXJlY3RLZXkoKSBj YWxscworCitnaXQtc3ZuLWlkOiBzdm46Ly9zY3JpYnVzLm5ldC90cnVuay9TY3JpYnVzQDI1NTc5 IDExZDIwNzAxLTg0MzEtMDQxMC1hNzExLWUzYzk1OWUzYjg3MAorKGNoZXJyeSBwaWNrZWQgZnJv bSBjb21taXQgZmJkNWViNDc0ZTBlNmY1MjJjNjA4OTc1NjQyNDU5MmVjZjBkYzBhNCkKKy0tLQor IHNjcmlidXMvcGRmX2FuYWx5emVyLmNwcCAgICAgICAgICAgICAgIHwgMjA0ICsrKysrKysrKysr KysrLS0tLS0tLS0tLS0KKyBzY3JpYnVzL3BkZmxpYl9jb3JlLmNwcCAgICAgICAgICAgICAgICB8 ICAyOCArKy0tCisgc2NyaWJ1cy9wbHVnaW5zL2ltcG9ydC9haS9pbXBvcnRhaS5jcHAgfCAgMjEg KystCisgMyBmaWxlcyBjaGFuZ2VkLCAxNDggaW5zZXJ0aW9ucygrKSwgMTA1IGRlbGV0aW9ucygt KQorCistLS0gYS9zY3JpYnVzL3BkZl9hbmFseXplci5jcHAKKysrKyBiL3NjcmlidXMvcGRmX2Fu YWx5emVyLmNwcAorQEAgLTE2NywxMSArMTY3LDEwIEBAIFBERkNvbG9yU3BhY2UgUERGQW5hbHl6 ZXI6OmdldENTVHlwZShQZGYKKyBib29sIFBERkFuYWx5emVyOjppbnNwZWN0Q2FudmFzKFBkZkNh bnZhcyogY2FudmFzLCBRTGlzdDxQREZDb2xvclNwYWNlPiAmIHVzZWRDb2xvclNwYWNlcywgYm9v bCAmIGhhc1RyYW5zcGFyZW5jeSwgUUxpc3Q8UERGRm9udD4gJiB1c2VkRm9udHMsIFFMaXN0PFBE RkltYWdlPiAmIGltZ3MpDQorIHsNCisgCS8vIHRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIGdl dCB1c2VkIGNvbG9yIHNwYWNlcywgZGV0ZWN0IHRyYW5zcGFyZW5jeSwgYW5kIGdldCB1c2VkIGZv bnRzIGluIGVpdGhlciBQZGZQYWdlIG9yIFBkZlhPYmplY3QNCistCVBkZk9iamVjdCogY29sb3JT cGFjZVJlcyB7IG51bGxwdHIgfTsNCistCVBkZk9iamVjdCogeE9iamVjdHMgeyBudWxscHRyIH07 DQorLQlQZGZPYmplY3QqIHRyYW5zR3JvdXAgeyBudWxscHRyIH07DQorLQlQZGZPYmplY3QqIGV4 dEdTdGF0ZSB7IG51bGxwdHIgfTsNCistCVBkZk9iamVjdCogZm9udFJlcyB7IG51bGxwdHIgfTsN CisrCVBkZkRpY3Rpb25hcnkqIGNvbG9yU3BhY2VzRGljdCB7IG51bGxwdHIgfTsNCisrCVBkZkRp Y3Rpb25hcnkqIHhPYmplY3RzRGljdCB7IG51bGxwdHIgfTsNCisrCVBkZkRpY3Rpb25hcnkqIGV4 dEdTdGF0ZXNEaWN0IHsgbnVsbHB0ciB9Ow0KKysJUGRmRGljdGlvbmFyeSogZm9udHNEaWN0IHsg bnVsbHB0ciB9Ow0KKyAJUU1hcDxQZGZOYW1lLCBQREZDb2xvclNwYWNlPiBwcm9jZXNzZWROYW1l ZENTOw0KKyAJUU1hcDxQZGZOYW1lLCBQREZGb250PiBwcm9jZXNzZWROYW1lZEZvbnQ7DQorIAlR TGlzdDxQZGZOYW1lPiBwcm9jZXNzZWROYW1lZFhPYmo7DQorQEAgLTE4MiwzMCArMTgxLDQxIEBA IGJvb2wgUERGQW5hbHl6ZXI6Omluc3BlY3RDYW52YXMoUGRmQ2FudmEKKyAJCS8vIG5lZWRlZCBm b3IgdGhlIGZpbmRpbmcgcmVzb3VyY2VzIGNvZGUgYmVsb3cgdG8gd29yaw0KKyAJCVBkZlBhZ2Uq IHBhZ2UgPSBkeW5hbWljX2Nhc3Q8UGRmUGFnZSo+KGNhbnZhcyk7DQorIAkJUGRmT2JqZWN0KiBj YW52YXNPYmplY3QgPSBwYWdlID8gKHBhZ2UtPkdldE9iamVjdCgpKSA6ICgoZHluYW1pY19jYXN0 PFBkZlhPYmplY3QqPihjYW52YXMpKS0+R2V0T2JqZWN0KCkpOw0KKysJCVBkZkRpY3Rpb25hcnkq IGNhbnZhc0RpY3QgPSAoY2FudmFzT2JqZWN0ICYmIGNhbnZhc09iamVjdC0+SXNEaWN0aW9uYXJ5 KCkpID8gJihjYW52YXNPYmplY3QtPkdldERpY3Rpb25hcnkoKSkgOiBudWxscHRyOw0KKyANCisg CQkvLyBmaW5kIGEgcmVzb3VyY2Ugd2l0aCBDb2xvclNwYWNlIGVudHJ5DQorIAkJUGRmT2JqZWN0 KiByZXNvdXJjZXMgPSBjYW52YXMtPkdldFJlc291cmNlcygpOw0KKy0JCWZvciAoUGRmT2JqZWN0 KiBwYXIgPSBjYW52YXNPYmplY3Q7IHBhciAmJiAhcmVzb3VyY2VzOyBwYXIgPSBwYXItPkdldElu ZGlyZWN0S2V5KCJQYXJlbnQiKSkNCisrCQlmb3IgKFBkZkRpY3Rpb25hcnkqIHBhciA9IGNhbnZh c0RpY3QsICpwYXJlbnREaWN0ID0gbnVsbHB0cjsgcGFyICYmICFyZXNvdXJjZXM7IHBhciA9IHBh cmVudERpY3QpDQorIAkJew0KKy0JCQlyZXNvdXJjZXMgPSBwYXItPkdldEluZGlyZWN0S2V5KCJS ZXNvdXJjZXMiKTsNCisrCQkJcmVzb3VyY2VzID0gcGFyLT5GaW5kS2V5KCJSZXNvdXJjZXMiKTsN CisrCQkJUGRmT2JqZWN0KiBwYXJlbnRPYmogPSBwYXItPkZpbmRLZXkoIlBhcmVudCIpOw0KKysJ CQlwYXJlbnREaWN0ID0gKHBhcmVudE9iaiAmJiBwYXJlbnRPYmotPklzRGljdGlvbmFyeSgpKSA/ ICYocGFyZW50T2JqLT5HZXREaWN0aW9uYXJ5KCkpIDogbnVsbHB0cjsNCisgCQl9DQorLQkJY29s b3JTcGFjZVJlcyA9IHJlc291cmNlcyA/IHJlc291cmNlcy0+R2V0SW5kaXJlY3RLZXkoIkNvbG9y U3BhY2UiKSA6IG51bGxwdHI7DQorLQkJeE9iamVjdHMgPSByZXNvdXJjZXMgPyByZXNvdXJjZXMt PkdldEluZGlyZWN0S2V5KCJYT2JqZWN0IikgOiBudWxscHRyOw0KKy0JCWV4dEdTdGF0ZSA9IHJl c291cmNlcyA/IHJlc291cmNlcy0+R2V0SW5kaXJlY3RLZXkoIkV4dEdTdGF0ZSIpIDogbnVsbHB0 cjsNCistCQlmb250UmVzID0gcmVzb3VyY2VzID8gcmVzb3VyY2VzLT5HZXRJbmRpcmVjdEtleSgi Rm9udCIpIDogbnVsbHB0cjsNCisrDQorKwkJUGRmRGljdGlvbmFyeSogcmVzb3VyY2VzRGljdCA9 IChyZXNvdXJjZXMgJiYgcmVzb3VyY2VzLT5Jc0RpY3Rpb25hcnkoKSkgPyAmKHJlc291cmNlcy0+ R2V0RGljdGlvbmFyeSgpKSA6IG51bGxwdHI7DQorKwkJUGRmT2JqZWN0KiBjb2xvclNwYWNlUmVz ID0gcmVzb3VyY2VzRGljdCA/IHJlc291cmNlc0RpY3QtPkZpbmRLZXkoIkNvbG9yU3BhY2UiKSA6 IG51bGxwdHI7DQorKwkJUGRmT2JqZWN0KiB4T2JqZWN0cyA9IHJlc291cmNlc0RpY3QgPyByZXNv dXJjZXNEaWN0LT5GaW5kS2V5KCJYT2JqZWN0IikgOiBudWxscHRyOw0KKysJCVBkZk9iamVjdCog ZXh0R1N0YXRlID0gcmVzb3VyY2VzRGljdCA/IHJlc291cmNlc0RpY3QtPkZpbmRLZXkoIkV4dEdT dGF0ZSIpIDogbnVsbHB0cjsNCisrCQlQZGZPYmplY3QqIGZvbnRSZXMgPSByZXNvdXJjZXNEaWN0 ID8gcmVzb3VyY2VzRGljdC0+RmluZEtleSgiRm9udCIpIDogbnVsbHB0cjsNCisrDQorKwkJY29s b3JTcGFjZXNEaWN0ID0gKGNvbG9yU3BhY2VSZXMgJiYgY29sb3JTcGFjZVJlcy0+SXNEaWN0aW9u YXJ5KCkpID8gJihjb2xvclNwYWNlUmVzLT5HZXREaWN0aW9uYXJ5KCkpIDogbnVsbHB0cjsNCisr CQl4T2JqZWN0c0RpY3QgPSAoeE9iamVjdHMgJiYgeE9iamVjdHMtPklzRGljdGlvbmFyeSgpKSA/ ICYoeE9iamVjdHMtPkdldERpY3Rpb25hcnkoKSkgOiBudWxscHRyOw0KKysJCWV4dEdTdGF0ZXNE aWN0ID0gKGV4dEdTdGF0ZSAmJiBleHRHU3RhdGUtPklzRGljdGlvbmFyeSgpKSA/ICYoZXh0R1N0 YXRlLT5HZXREaWN0aW9uYXJ5KCkpIDogbnVsbHB0cjsNCisrCQlmb250c0RpY3QgPSAoZm9udFJl cyAmJiBmb250UmVzLT5Jc0RpY3Rpb25hcnkoKSkgPyAmKGZvbnRSZXMtPkdldERpY3Rpb25hcnko KSkgOiBudWxscHRyOw0KKyANCisgCQkvLyBnZXR0aW5nIHRoZSB0cmFuc3BhcmVuY3kgZ3JvdXAg b2YgdGhpcyBjb250ZW50IHN0cmVhbSAoaWYgYXZhaWxhYmxlKQ0KKy0JCXRyYW5zR3JvdXAgPSBj YW52YXNPYmplY3QgPyBjYW52YXNPYmplY3QtPkdldEluZGlyZWN0S2V5KCJHcm91cCIpIDogbnVs bHB0cjsNCistCQlpZiAodHJhbnNHcm91cCkNCisrCQlQZGZPYmplY3QqIHRyYW5zR3JvdXAgPSBj YW52YXNEaWN0ID8gY2FudmFzRGljdC0+RmluZEtleSgiR3JvdXAiKSA6IG51bGxwdHI7DQorKwkJ UGRmRGljdGlvbmFyeSogdHJhbnNHcm91cERpY3QgPSAodHJhbnNHcm91cCAmJiB0cmFuc0dyb3Vw LT5Jc0RpY3Rpb25hcnkoKSkgPyAmKHRyYW5zR3JvdXAtPkdldERpY3Rpb25hcnkoKSkgOiBudWxs cHRyOw0KKysJCWlmICh0cmFuc0dyb3VwRGljdCkNCisgCQl7DQorLQkJCVBkZk9iamVjdCogc3Vi dHlwZSA9IHRyYW5zR3JvdXAtPkdldEluZGlyZWN0S2V5KCJTIik7DQorKwkJCWNvbnN0IFBkZk9i amVjdCogc3VidHlwZSA9IHRyYW5zR3JvdXBEaWN0LT5GaW5kS2V5KCJTIik7DQorIAkJCWlmIChz dWJ0eXBlICYmIHN1YnR5cGUtPkdldE5hbWUoKSA9PSAiVHJhbnNwYXJlbmN5IikNCisgCQkJew0K KyAJCQkJLy8gaGF2aW5nIHRyYW5zcGFyZW5jeSBncm91cCBtZWFucyB0aGVyZSdzIHRyYW5zcGFy ZW5jeSBpbiB0aGUgUERGDQorIAkJCQloYXNUcmFuc3BhcmVuY3kgPSB0cnVlOw0KKyANCisgCQkJ CS8vIHJlcG9ydGluZyB0aGUgY29sb3Igc3BhY2UgdXNlZCBpbiB0cmFuc3BhcmVuY3kgZ3JvdXAg KFNlY3Rpb24gNy41LjUsIFBERiAxLjYgU3BlYykNCistCQkJCVBkZk9iamVjdCogY3MgPSB0cmFu c0dyb3VwLT5HZXRJbmRpcmVjdEtleSgiQ1MiKTsNCisrCQkJCVBkZk9iamVjdCogY3MgPSB0cmFu c0dyb3VwRGljdC0+RmluZEtleSgiQ1MiKTsNCisgCQkJCWlmIChjcykNCisgCQkJCXsNCisgCQkJ CQlQREZDb2xvclNwYWNlIHJldHZhbCA9IGdldENTVHlwZShjcyk7DQorQEAgLTM4MCw5ICszOTAs OSBAQCBib29sIFBERkFuYWx5emVyOjppbnNwZWN0Q2FudmFzKFBkZkNhbnZhCisgCQkJCQkJCX0N CisgCQkJCQkJCWVsc2UNCisgCQkJCQkJCXsNCistCQkJCQkJCQlpZiAoY29sb3JTcGFjZVJlcyAm JiBjb2xvclNwYWNlUmVzLT5HZXRJbmRpcmVjdEtleShhcmdzWzBdLkdldE5hbWUoKSkpDQorKwkJ CQkJCQkJaWYgKGNvbG9yU3BhY2VzRGljdCAmJiBjb2xvclNwYWNlc0RpY3QtPkZpbmRLZXkoYXJn c1swXS5HZXROYW1lKCkpKQ0KKyAJCQkJCQkJCXsNCistCQkJCQkJCQkJUGRmT2JqZWN0KiBjc0Vu dHJ5ID0gY29sb3JTcGFjZVJlcy0+R2V0SW5kaXJlY3RLZXkoYXJnc1swXS5HZXROYW1lKCkpOw0K KysJCQkJCQkJCQlQZGZPYmplY3QqIGNzRW50cnkgPSBjb2xvclNwYWNlc0RpY3QtPkZpbmRLZXko YXJnc1swXS5HZXROYW1lKCkpOw0KKyAJCQkJCQkJCQlQREZDb2xvclNwYWNlIHJldHZhbCA9IGdl dENTVHlwZShjc0VudHJ5KTsNCisgCQkJCQkJCQkJaWYgKHJldHZhbCAhPSBDU19Vbmtub3duICYm ICF1c2VkQ29sb3JTcGFjZXMuY29udGFpbnMocmV0dmFsKSkNCisgCQkJCQkJCQkJCXVzZWRDb2xv clNwYWNlcy5hcHBlbmQocmV0dmFsKTsNCitAQCAtNDQ5LDkgKzQ1OSw5IEBAIGJvb2wgUERGQW5h bHl6ZXI6Omluc3BlY3RDYW52YXMoUGRmQ2FudmEKKyAJCQkJCQkJfQ0KKyAJCQkJCQkJZWxzZQ0K KyAJCQkJCQkJew0KKy0JCQkJCQkJCWlmIChjb2xvclNwYWNlUmVzICYmIGNvbG9yU3BhY2VSZXMt PkdldEluZGlyZWN0S2V5KGFyZ3NbMF0uR2V0TmFtZSgpKSkNCisrCQkJCQkJCQlpZiAoY29sb3JT cGFjZXNEaWN0ICYmIGNvbG9yU3BhY2VzRGljdC0+RmluZEtleShhcmdzWzBdLkdldE5hbWUoKSkp DQorIAkJCQkJCQkJew0KKy0JCQkJCQkJCQlQZGZPYmplY3QqIGNzRW50cnkgPSBjb2xvclNwYWNl UmVzLT5HZXRJbmRpcmVjdEtleShhcmdzWzBdLkdldE5hbWUoKSk7DQorKwkJCQkJCQkJCVBkZk9i amVjdCogY3NFbnRyeSA9IGNvbG9yU3BhY2VzRGljdC0+RmluZEtleShhcmdzWzBdLkdldE5hbWUo KSk7DQorIAkJCQkJCQkJCVBERkNvbG9yU3BhY2UgcmV0dmFsID0gZ2V0Q1NUeXBlKGNzRW50cnkp Ow0KKyAJCQkJCQkJCQlpZiAocmV0dmFsICE9IENTX1Vua25vd24gJiYgIXVzZWRDb2xvclNwYWNl cy5jb250YWlucyhyZXR2YWwpKQ0KKyAJCQkJCQkJCQkJdXNlZENvbG9yU3BhY2VzLmFwcGVuZChy ZXR2YWwpOw0KK0BAIC01MDMsMjggKzUxMywyOSBAQCBib29sIFBERkFuYWx5emVyOjppbnNwZWN0 Q2FudmFzKFBkZkNhbnZhCisgCQkJCQl7DQorIAkJCQkJaWYgKCFwcm9jZXNzZWROYW1lZFhPYmou Y29udGFpbnMoYXJnc1swXS5HZXROYW1lKCkpKQ0KKyAJCQkJCXsNCistCQkJCQkJaWYgKGFyZ3Mu c2l6ZSgpID09IDEgJiYgYXJnc1swXS5Jc05hbWUoKSAmJiB4T2JqZWN0cykNCisrCQkJCQkJaWYg KGFyZ3Muc2l6ZSgpID09IDEgJiYgYXJnc1swXS5Jc05hbWUoKSAmJiB4T2JqZWN0c0RpY3QpDQor IAkJCQkJCXsNCistCQkJCQkJCVBkZk9iamVjdCogeE9iamVjdCA9IHhPYmplY3RzLT5HZXRJbmRp cmVjdEtleShhcmdzWzBdLkdldE5hbWUoKSk7DQorLQkJCQkJCQlQZGZPYmplY3QqIHN1YnR5cGVP YmplY3QgPSB4T2JqZWN0ID8geE9iamVjdC0+R2V0SW5kaXJlY3RLZXkoIlN1YnR5cGUiKSA6IG51 bGxwdHI7DQorKwkJCQkJCQlQZGZPYmplY3QqIHhPYmplY3QgPSB4T2JqZWN0c0RpY3QtPkZpbmRL ZXkoYXJnc1swXS5HZXROYW1lKCkpOw0KKysJCQkJCQkJUGRmRGljdGlvbmFyeSogeE9iamVjdERp Y3QgPSAoeE9iamVjdCAmJiB4T2JqZWN0LT5Jc0RpY3Rpb25hcnkoKSkgPyAmKHhPYmplY3QtPkdl dERpY3Rpb25hcnkoKSkgOiBudWxscHRyOw0KKysJCQkJCQkJUGRmT2JqZWN0KiBzdWJ0eXBlT2Jq ZWN0ID0geE9iamVjdERpY3QgPyB4T2JqZWN0RGljdC0+RmluZEtleSgiU3VidHlwZSIpIDogbnVs bHB0cjsNCisgCQkJCQkJCWlmIChzdWJ0eXBlT2JqZWN0ICYmIHN1YnR5cGVPYmplY3QtPklzTmFt ZSgpKQ0KKyAJCQkJCQkJew0KKyAJCQkJCQkJCWlmIChzdWJ0eXBlT2JqZWN0LT5HZXROYW1lKCkg PT0gIkltYWdlIikNCisgCQkJCQkJCQl7DQorLQkJCQkJCQkJCVBkZk9iamVjdCogaW1nQ29sb3JT cGFjZSA9IHhPYmplY3QtPkdldEluZGlyZWN0S2V5KCJDb2xvclNwYWNlIik7DQorKwkJCQkJCQkJ CVBkZk9iamVjdCogaW1nQ29sb3JTcGFjZSA9IHhPYmplY3REaWN0LT5GaW5kS2V5KCJDb2xvclNw YWNlIik7DQorIAkJCQkJCQkJCWlmIChpbWdDb2xvclNwYWNlKQ0KKyAJCQkJCQkJCQl7DQorIAkJ CQkJCQkJCQlQREZDb2xvclNwYWNlIHJldHZhbCA9IGdldENTVHlwZShpbWdDb2xvclNwYWNlKTsN CisgCQkJCQkJCQkJCWlmIChyZXR2YWwgIT0gQ1NfVW5rbm93biAmJiAhdXNlZENvbG9yU3BhY2Vz LmNvbnRhaW5zKHJldHZhbCkpDQorIAkJCQkJCQkJCQkJdXNlZENvbG9yU3BhY2VzLmFwcGVuZChy ZXR2YWwpOw0KKyAJCQkJCQkJCQl9DQorLQkJCQkJCQkJCVBkZk9iamVjdCogc01hc2tPYmogPSB4 T2JqZWN0LT5HZXRJbmRpcmVjdEtleSgiU01hc2siKTsNCisrCQkJCQkJCQkJUGRmT2JqZWN0KiBz TWFza09iaiA9IHhPYmplY3REaWN0LT5GaW5kS2V5KCJTTWFzayIpOw0KKyAJCQkJCQkJCQlpZiAo c01hc2tPYmopDQorIAkJCQkJCQkJCQloYXNUcmFuc3BhcmVuY3kgPSB0cnVlOw0KKyAJCQkJCQkJ CQlQREZJbWFnZSBpbWc7DQorIAkJCQkJCQkJCWltZy5pbWdOYW1lID0gYXJnc1swXS5HZXROYW1l KCkuR2V0RXNjYXBlZE5hbWUoKS5jX3N0cigpOw0KKy0JCQkJCQkJCQlkb3VibGUgd2lkdGggPSB4 T2JqZWN0LT5HZXRJbmRpcmVjdEtleSgiV2lkdGgiKS0+R2V0UmVhbCgpOw0KKy0JCQkJCQkJCQlk b3VibGUgaGVpZ2h0ID0geE9iamVjdC0+R2V0SW5kaXJlY3RLZXkoIkhlaWdodCIpLT5HZXRSZWFs KCk7DQorKwkJCQkJCQkJCWRvdWJsZSB3aWR0aCA9IHhPYmplY3REaWN0LT5GaW5kS2V5KCJXaWR0 aCIpLT5HZXRSZWFsKCk7DQorKwkJCQkJCQkJCWRvdWJsZSBoZWlnaHQgPSB4T2JqZWN0RGljdC0+ RmluZEtleSgiSGVpZ2h0IiktPkdldFJlYWwoKTsNCisgCQkJCQkJCQkJaW1nLmRwaVggPSBxUm91 bmQod2lkdGgvKGN1cnJHUy5jdG0ubTExKCkvNzIpKTsNCisgCQkJCQkJCQkJaW1nLmRwaVkgPSBx Um91bmQoaGVpZ2h0LyhjdXJyR1MuY3RtLm0yMigpLzcyKSk7DQorIAkJCQkJCQkJCWltZ3MuYXBw ZW5kKGltZyk7DQorQEAgLTU3Myw5ICs1ODQsOSBAQCBib29sIFBERkFuYWx5emVyOjppbnNwZWN0 Q2FudmFzKFBkZkNhbnZhCisgCQkJCQkJCQkJdXNlZENvbG9yU3BhY2VzLmFwcGVuZChDU19EZXZp Y2VDTVlLKTsNCisgCQkJCQkJCQllbHNlIGlmICghcHJvY2Vzc2VkTmFtZWRDUy5jb250YWlucyhj c05hbWUpKQ0KKyAJCQkJCQkJCXsNCistCQkJCQkJCQkJaWYgKGNvbG9yU3BhY2VSZXMgJiYgY29s b3JTcGFjZVJlcy0+R2V0SW5kaXJlY3RLZXkoY3NOYW1lKSkNCisrCQkJCQkJCQkJaWYgKGNvbG9y U3BhY2VzRGljdCAmJiBjb2xvclNwYWNlc0RpY3QtPkZpbmRLZXkoY3NOYW1lKSkNCisgCQkJCQkJ CQkJew0KKy0JCQkJCQkJCQkJUGRmT2JqZWN0KiBjc0VudHJ5ID0gY29sb3JTcGFjZVJlcy0+R2V0 SW5kaXJlY3RLZXkoY3NOYW1lKTsNCisrCQkJCQkJCQkJCVBkZk9iamVjdCogY3NFbnRyeSA9IGNv bG9yU3BhY2VzRGljdC0+RmluZEtleShjc05hbWUpOw0KKyAJCQkJCQkJCQkJaWYgKGNzRW50cnkp DQorIAkJCQkJCQkJCQl7DQorIAkJCQkJCQkJCQkJUERGQ29sb3JTcGFjZSByZXR2YWwgPSBnZXRD U1R5cGUoY3NFbnRyeSk7DQorQEAgLTYxNSw5ICs2MjYsOSBAQCBib29sIFBERkFuYWx5emVyOjpp bnNwZWN0Q2FudmFzKFBkZkNhbnZhCisgCQkJCQl7DQorIAkJCQkJaWYgKCFwcm9jZXNzZWROYW1l ZEdTLmNvbnRhaW5zKGFyZ3NbMF0uR2V0TmFtZSgpKSkNCisgCQkJCQl7DQorLQkJCQkJCWlmIChh cmdzLnNpemUoKSA9PSAxICYmIGFyZ3NbMF0uSXNOYW1lKCkgJiYgZXh0R1N0YXRlKQ0KKysJCQkJ CQlpZiAoYXJncy5zaXplKCkgPT0gMSAmJiBhcmdzWzBdLklzTmFtZSgpICYmIGV4dEdTdGF0ZXNE aWN0KQ0KKyAJCQkJCQl7DQorLQkJCQkJCQlQZGZPYmplY3QqIGV4dEdTdGF0ZU9iaiA9IGV4dEdT dGF0ZS0+R2V0SW5kaXJlY3RLZXkoYXJnc1swXS5HZXROYW1lKCkpOw0KKysJCQkJCQkJUGRmT2Jq ZWN0KiBleHRHU3RhdGVPYmogPSBleHRHU3RhdGVzRGljdC0+RmluZEtleShhcmdzWzBdLkdldE5h bWUoKSk7DQorIAkJCQkJCQlpZiAoZXh0R1N0YXRlT2JqKQ0KKyAJCQkJCQkJew0KKyAJCQkJCQkJ CWluc3BlY3RFeHRHU3RhdGVPYmooZXh0R1N0YXRlT2JqLCB1c2VkQ29sb3JTcGFjZXMsIGhhc1Ry YW5zcGFyZW5jeSwgdXNlZEZvbnRzLCBjdXJyR1MpOw0KK0BAIC02NDYsOSArNjU3LDkgQEAgYm9v bCBQREZBbmFseXplcjo6aW5zcGVjdENhbnZhcyhQZGZDYW52YQorIAkJCQkJfQ0KKyAJCQkJCWVs c2UNCisgCQkJCQl7DQorLQkJCQkJCWlmIChhcmdzLnNpemUoKSA9PSAyICYmIGFyZ3NbMF0uSXNO YW1lKCkgJiYgZm9udFJlcykNCisrCQkJCQkJaWYgKGFyZ3Muc2l6ZSgpID09IDIgJiYgYXJnc1sw XS5Jc05hbWUoKSAmJiBmb250c0RpY3QpDQorIAkJCQkJCXsNCistCQkJCQkJCVBkZk9iamVjdCog Zm9udE9iaiA9IGZvbnRSZXMtPkdldEluZGlyZWN0S2V5KGFyZ3NbMF0uR2V0TmFtZSgpKTsNCisr CQkJCQkJCVBkZk9iamVjdCogZm9udE9iaiA9IGZvbnRzRGljdC0+RmluZEtleShhcmdzWzBdLkdl dE5hbWUoKSk7DQorIAkJCQkJCQlpZiAoZm9udE9iaikNCisgCQkJCQkJCXsNCisgCQkJCQkJCQlQ REZGb250IHJldHZhbCA9IGdldEZvbnRJbmZvKGZvbnRPYmopOw0KK0BAIC02ODcsOSArNjk4LDEx IEBAIGJvb2wgUERGQW5hbHl6ZXI6Omluc3BlY3RDYW52YXMoUGRmQ2FudmEKKyAJfQ0KKyAJcmV0 dXJuIHRydWU7DQorIH0NCisrDQorIHZvaWQgUERGQW5hbHl6ZXI6Omluc3BlY3RFeHRHU3RhdGVP YmooUGRmT2JqZWN0KiBleHRHU3RhdGVPYmosIFFMaXN0PFBERkNvbG9yU3BhY2U+ICYgdXNlZENv bG9yU3BhY2VzLCBib29sICYgaGFzVHJhbnNwYXJlbmN5LCBRTGlzdDxQREZGb250PiAmIHVzZWRG b250cywgUERGR3JhcGhpY1N0YXRlICYgY3VyckdTKQ0KKyB7DQorLQlQZGZPYmplY3QqIGJtT2Jq ID0gZXh0R1N0YXRlT2JqLT5HZXRJbmRpcmVjdEtleSgiQk0iKTsNCisrCVBkZkRpY3Rpb25hcnkq IGV4dEdTdGF0ZURpY3QgPSBleHRHU3RhdGVPYmotPklzRGljdGlvbmFyeSgpID8gJihleHRHU3Rh dGVPYmotPkdldERpY3Rpb25hcnkoKSkgOiBudWxscHRyOw0KKysJUGRmT2JqZWN0KiBibU9iaiA9 IGV4dEdTdGF0ZURpY3QgPyBleHRHU3RhdGVEaWN0LT5GaW5kS2V5KCJCTSIpIDogbnVsbHB0cjsN CisgCWlmIChibU9iaiAmJiBibU9iai0+SXNOYW1lKCkpDQorIAl7DQorIAkJY3VyckdTLmJsZW5k TW9kZXMuY2xlYXIoKTsNCitAQCAtNzA2LDIzICs3MTksMjcgQEAgdm9pZCBQREZBbmFseXplcjo6 aW5zcGVjdEV4dEdTdGF0ZU9iaihQZAorIAkJaWYgKGFyclswXS5Jc05hbWUoKSAmJiAhKGFyclsw XS5HZXROYW1lKCkgPT0gIk5vcm1hbCIgfHwgYXJyWzBdLkdldE5hbWUoKSA9PSAiQ29tcGF0aWJs ZSIpKQ0KKyAJCQloYXNUcmFuc3BhcmVuY3kgPSB0cnVlOw0KKyAJfQ0KKy0JUGRmT2JqZWN0KiBj YU9iaiA9IGV4dEdTdGF0ZU9iai0+R2V0SW5kaXJlY3RLZXkoImNhIik7DQorKw0KKysJUGRmT2Jq ZWN0KiBjYU9iaiA9IGV4dEdTdGF0ZURpY3QgPyBleHRHU3RhdGVEaWN0LT5GaW5kS2V5KCJjYSIp IDogbnVsbHB0cjsNCisgCWlmIChjYU9iaiAmJiAoY2FPYmotPklzUmVhbCgpIHx8IGNhT2JqLT5J c051bWJlcigpKSkNCisgCXsNCisgCQljdXJyR1MuZmlsbEFscGhhQ29uc3RhbnQgPSBjYU9iai0+ R2V0UmVhbCgpOw0KKyAJCWlmIChjYU9iai0+R2V0UmVhbCgpIDwgMSkNCisgCQkJaGFzVHJhbnNw YXJlbmN5ID0gdHJ1ZTsNCisgCX0NCistCVBkZk9iamVjdCogY0FPYmogPSBleHRHU3RhdGVPYmot PkdldEluZGlyZWN0S2V5KCJDQSIpOw0KKysNCisrCVBkZk9iamVjdCogY0FPYmogPSBleHRHU3Rh dGVEaWN0ID8gZXh0R1N0YXRlRGljdC0+RmluZEtleSgiQ0EiKSA6IG51bGxwdHI7DQorIAlpZiAo Y0FPYmogJiYgKGNBT2JqLT5Jc1JlYWwoKSB8fCBjQU9iai0+SXNOdW1iZXIoKSkpDQorIAl7DQor IAkJaWYgKGNBT2JqLT5HZXRSZWFsKCkgPCAxKQ0KKy0JCWhhc1RyYW5zcGFyZW5jeSA9IHRydWU7 DQorKwkJCWhhc1RyYW5zcGFyZW5jeSA9IHRydWU7DQorIAl9DQorLQlQZGZPYmplY3QqIHNNYXNr T2JqID0gZXh0R1N0YXRlT2JqLT5HZXRJbmRpcmVjdEtleSgiU01hc2siKTsNCisrDQorKwlQZGZP YmplY3QqIHNNYXNrT2JqID0gZXh0R1N0YXRlRGljdCA/IGV4dEdTdGF0ZURpY3QtPkZpbmRLZXko IlNNYXNrIikgOiBudWxscHRyOw0KKyAJaWYgKHNNYXNrT2JqICYmICEoc01hc2tPYmotPklzTmFt ZSgpICYmIHNNYXNrT2JqLT5HZXROYW1lKCkgPT0gIk5vbmUiKSkNCisgCQloYXNUcmFuc3BhcmVu Y3kgPSB0cnVlOw0KKy0JUGRmT2JqZWN0KiBmb250T2JqID0gZXh0R1N0YXRlT2JqLT5HZXRJbmRp cmVjdEtleSgiRm9udCIpOw0KKysNCisrCVBkZk9iamVjdCogZm9udE9iaiA9IGV4dEdTdGF0ZURp Y3QgPyBleHRHU3RhdGVEaWN0LT5GaW5kS2V5KCJGb250IikgOiBudWxscHRyOw0KKyAJaWYgKGZv bnRPYmogJiYgZm9udE9iai0+SXNBcnJheSgpKQ0KKyAJew0KKyAJCVBkZkFycmF5IGFyciA9IGZv bnRPYmotPkdldEFycmF5KCk7DQorQEAgLTc0MCwxOSArNzU3LDI0IEBAIHZvaWQgUERGQW5hbHl6 ZXI6Omluc3BlY3RFeHRHU3RhdGVPYmooUGQKKyANCisgCQl9DQorIAl9DQorLQlQZGZPYmplY3Qq IGx3T2JqID0gZXh0R1N0YXRlT2JqLT5HZXRJbmRpcmVjdEtleSgiTFciKTsNCisrDQorKwlQZGZP YmplY3QqIGx3T2JqID0gZXh0R1N0YXRlRGljdCA/IGV4dEdTdGF0ZURpY3QtPkZpbmRLZXkoIkxX IikgOiBudWxscHRyOw0KKyAJaWYgKGx3T2JqKQ0KKyAJCWN1cnJHUy5saW5lV2lkdGggPSBsd09i ai0+R2V0UmVhbCgpOw0KKy0JUGRmT2JqZWN0KiBsY09iaiA9IGV4dEdTdGF0ZU9iai0+R2V0SW5k aXJlY3RLZXkoIkxDIik7DQorKw0KKysJUGRmT2JqZWN0KiBsY09iaiA9IGV4dEdTdGF0ZURpY3Qg PyBleHRHU3RhdGVEaWN0LT5GaW5kS2V5KCJMQyIpIDogbnVsbHB0cjsNCisgCWlmIChsY09iaikN CisgCQljdXJyR1MubGluZUNhcCA9IGxjT2JqLT5HZXROdW1iZXIoKTsNCistCVBkZk9iamVjdCog bGpPYmogPSBleHRHU3RhdGVPYmotPkdldEluZGlyZWN0S2V5KCJMSiIpOw0KKysNCisrCVBkZk9i amVjdCogbGpPYmogPSBleHRHU3RhdGVEaWN0ID8gZXh0R1N0YXRlRGljdC0+RmluZEtleSgiTEoi KSA6IG51bGxwdHI7DQorIAlpZiAobGpPYmopDQorIAkJY3VyckdTLmxpbmVKb2luID0gbGpPYmot PkdldE51bWJlcigpOw0KKy0JUGRmT2JqZWN0KiBtbE9iaiA9IGV4dEdTdGF0ZU9iai0+R2V0SW5k aXJlY3RLZXkoIk1MIik7DQorKw0KKysJUGRmT2JqZWN0KiBtbE9iaiA9IGV4dEdTdGF0ZURpY3Qg PyBleHRHU3RhdGVEaWN0LT5GaW5kS2V5KCJNTCIpIDogbnVsbHB0cjsNCisgCWlmIChtbE9iaikN CisgCQljdXJyR1MubWl0ZXJMaW1pdCA9IG1sT2JqLT5HZXRSZWFsKCk7DQorLQlQZGZPYmplY3Qq IGRPYmogPSBleHRHU3RhdGVPYmotPkdldEluZGlyZWN0S2V5KCJEIik7DQorKw0KKysJUGRmT2Jq ZWN0KiBkT2JqID0gZXh0R1N0YXRlRGljdCA/IGV4dEdTdGF0ZURpY3QtPkZpbmRLZXkoIkQiKSA6 IG51bGxwdHI7DQorIAlpZiAoZE9iaikNCisgCXsNCisgCQlQZGZPYmplY3QgZE9iakEgPSBkT2Jq LT5HZXRBcnJheSgpWzBdOw0KK0BAIC03NjcsNTYgKzc4OSw2NCBAQCB2b2lkIFBERkFuYWx5emVy OjppbnNwZWN0RXh0R1N0YXRlT2JqKFBkCisgUERGRm9udCBQREZBbmFseXplcjo6Z2V0Rm9udElu Zm8oUGRmT2JqZWN0KiBmb250T2JqKQ0KKyB7DQorIAlQREZGb250IGN1cnJGb250Ow0KKy0JUGRm T2JqZWN0KiBzdWJ0eXBlID0gZm9udE9iai0+R2V0SW5kaXJlY3RLZXkoIlN1YnR5cGUiKTsNCist CWlmIChzdWJ0eXBlICYmIHN1YnR5cGUtPklzTmFtZSgpKQ0KKysJY29uc3QgUGRmRGljdGlvbmFy eSogZm9udERpY3QgPSBmb250T2JqLT5Jc0RpY3Rpb25hcnkoKSA/ICYoZm9udE9iai0+R2V0RGlj dGlvbmFyeSgpKSA6IG51bGxwdHI7DQorKwlpZiAoIWZvbnREaWN0KQ0KKysJCXJldHVybiBjdXJy Rm9udDsNCisrDQorKwljb25zdCBQZGZPYmplY3QqIHN1YnR5cGUgPSBmb250RGljdC0+RmluZEtl eSgiU3VidHlwZSIpOw0KKysJaWYgKCFzdWJ0eXBlIHx8ICFzdWJ0eXBlLT5Jc05hbWUoKSkNCisr CQlyZXR1cm4gY3VyckZvbnQ7DQorKw0KKysJY29uc3QgUGRmT2JqZWN0KiBmb250RGVzYyA9IGZv bnREaWN0LT5GaW5kS2V5KCJGb250RGVzY3JpcHRvciIpOw0KKysJaWYgKHN1YnR5cGUtPkdldE5h bWUoKSA9PSAiVHlwZTEiKQ0KKysJCWN1cnJGb250LmZvbnRUeXBlID0gRl9UeXBlMTsNCisrCWVs c2UgaWYgKHN1YnR5cGUtPkdldE5hbWUoKSA9PSAiTU1UeXBlMSIpDQorKwkJY3VyckZvbnQuZm9u dFR5cGUgPSBGX01NVHlwZTE7DQorKwllbHNlIGlmIChzdWJ0eXBlLT5HZXROYW1lKCkgPT0gIlRy dWVUeXBlIikNCisrCQljdXJyRm9udC5mb250VHlwZSA9IEZfVHJ1ZVR5cGU7DQorKwllbHNlIGlm IChzdWJ0eXBlLT5HZXROYW1lKCkgPT0gIlR5cGUzIikNCisrCXsNCisrCQljdXJyRm9udC5mb250 VHlwZSA9IEZfVHlwZTM7DQorKwkJY3VyckZvbnQuaXNFbWJlZGRlZCA9IHRydWU7DQorKwkJZm9u dERlc2MgPSBudWxscHRyOw0KKysJfQ0KKysJZWxzZSBpZiAoc3VidHlwZS0+R2V0TmFtZSgpID09 ICJUeXBlMCIpDQorIAl7DQorLQkJUGRmT2JqZWN0KiBmb250RGVzYyA9IGZvbnRPYmotPkdldElu ZGlyZWN0S2V5KCJGb250RGVzY3JpcHRvciIpOw0KKy0JCWlmIChzdWJ0eXBlLT5HZXROYW1lKCkg PT0gIlR5cGUxIikNCistCQkJY3VyckZvbnQuZm9udFR5cGUgPSBGX1R5cGUxOw0KKy0JCWVsc2Ug aWYgKHN1YnR5cGUtPkdldE5hbWUoKSA9PSAiTU1UeXBlMSIpDQorLQkJCWN1cnJGb250LmZvbnRU eXBlID0gRl9NTVR5cGUxOw0KKy0JCWVsc2UgaWYgKHN1YnR5cGUtPkdldE5hbWUoKSA9PSAiVHJ1 ZVR5cGUiKQ0KKy0JCQljdXJyRm9udC5mb250VHlwZSA9IEZfVHJ1ZVR5cGU7DQorLQkJZWxzZSBp ZiAoc3VidHlwZS0+R2V0TmFtZSgpID09ICJUeXBlMyIpDQorLQkJew0KKy0JCQljdXJyRm9udC5m b250VHlwZSA9IEZfVHlwZTM7DQorLQkJCWN1cnJGb250LmlzRW1iZWRkZWQgPSB0cnVlOw0KKy0J CQlmb250RGVzYyA9IG51bGxwdHI7DQorLQkJfQ0KKy0JCWVsc2UgaWYgKHN1YnR5cGUtPkdldE5h bWUoKSA9PSAiVHlwZTAiKQ0KKysJCWNvbnN0IFBkZk9iamVjdCogZGVzY2VuZGFudEZvbnRzID0g Zm9udERpY3QtPkZpbmRLZXkoIkRlc2NlbmRhbnRGb250cyIpOw0KKysJCWlmIChkZXNjZW5kYW50 Rm9udHMgJiYgZGVzY2VuZGFudEZvbnRzLT5Jc0FycmF5KCkpDQorIAkJew0KKy0JCQlQZGZPYmpl Y3QqIGRlc2NlbmRhbnRGb250cyA9IGZvbnRPYmotPkdldEluZGlyZWN0S2V5KCJEZXNjZW5kYW50 Rm9udHMiKTsNCistCQkJaWYgKGRlc2NlbmRhbnRGb250cyAmJiBkZXNjZW5kYW50Rm9udHMtPklz QXJyYXkoKSkNCisrCQkJY29uc3QgUGRmUmVmZXJlbmNlJiByZWZEZXNjRm9udCA9IGRlc2NlbmRh bnRGb250cy0+R2V0QXJyYXkoKVswXS5HZXRSZWZlcmVuY2UoKTsNCisrCQkJUGRmT2JqZWN0KiBk ZXNjZW5kYW50Rm9udCA9IGRlc2NlbmRhbnRGb250cy0+R2V0T3duZXIoKS0+R2V0T2JqZWN0KHJl ZkRlc2NGb250KTsNCisrCQkJUGRmRGljdGlvbmFyeSogZGVzY2VuZGFudEZvbnREaWN0ID0gKGRl c2NlbmRhbnRGb250ICYmIGRlc2NlbmRhbnRGb250LT5Jc0RpY3Rpb25hcnkoKSkgPyAmKGRlc2Nl bmRhbnRGb250LT5HZXREaWN0aW9uYXJ5KCkpIDogbnVsbHB0cjsNCisrCQkJY29uc3QgUGRmT2Jq ZWN0KiBzdWJ0eXBlRGVzY0ZvbnQgPSBkZXNjZW5kYW50Rm9udERpY3QtPkZpbmRLZXkoIlN1YnR5 cGUiKTsNCisrCQkJZm9udERlc2MgPSAmKGRlc2NlbmRhbnRGb250RGljdC0+TXVzdEdldEtleSgi Rm9udERlc2NyaXB0b3IiKSk7DQorKwkJCWlmIChzdWJ0eXBlRGVzY0ZvbnQgJiYgc3VidHlwZURl c2NGb250LT5Jc05hbWUoKSkNCisgCQkJew0KKy0JCQkJUGRmUmVmZXJlbmNlIHJlZkRlc2NGb250 ID0gZGVzY2VuZGFudEZvbnRzLT5HZXRBcnJheSgpWzBdLkdldFJlZmVyZW5jZSgpOw0KKy0JCQkJ UGRmT2JqZWN0KiBkZXNjZW5kYW50Rm9udCA9IGRlc2NlbmRhbnRGb250cy0+R2V0T3duZXIoKS0+ R2V0T2JqZWN0KHJlZkRlc2NGb250KTsNCistCQkJCVBkZk9iamVjdCogc3VidHlwZURlc2NGb250 ID0gZGVzY2VuZGFudEZvbnQtPkdldEluZGlyZWN0S2V5KCJTdWJ0eXBlIik7DQorLQkJCQlmb250 RGVzYyA9IGRlc2NlbmRhbnRGb250LT5NdXN0R2V0SW5kaXJlY3RLZXkoIkZvbnREZXNjcmlwdG9y Iik7DQorLQkJCQlpZiAoc3VidHlwZURlc2NGb250ICYmIHN1YnR5cGVEZXNjRm9udC0+SXNOYW1l KCkpDQorLQkJCQl7DQorLQkJCQkJaWYgKHN1YnR5cGVEZXNjRm9udC0+R2V0TmFtZSgpID09ICJD SURGb250VHlwZTAiKQ0KKy0JCQkJCQljdXJyRm9udC5mb250VHlwZSA9IEZfQ0lERm9udFR5cGUw Ow0KKy0JCQkJCWVsc2UgaWYgKHN1YnR5cGVEZXNjRm9udC0+R2V0TmFtZSgpID09ICJDSURGb250 VHlwZTIiKQ0KKy0JCQkJCQljdXJyRm9udC5mb250VHlwZSA9IEZfQ0lERm9udFR5cGUyOw0KKy0J CQkJfQ0KKysJCQkJaWYgKHN1YnR5cGVEZXNjRm9udC0+R2V0TmFtZSgpID09ICJDSURGb250VHlw ZTAiKQ0KKysJCQkJCWN1cnJGb250LmZvbnRUeXBlID0gRl9DSURGb250VHlwZTA7DQorKwkJCQll bHNlIGlmIChzdWJ0eXBlRGVzY0ZvbnQtPkdldE5hbWUoKSA9PSAiQ0lERm9udFR5cGUyIikNCisr CQkJCQljdXJyRm9udC5mb250VHlwZSA9IEZfQ0lERm9udFR5cGUyOw0KKyAJCQl9DQorIAkJfQ0K Ky0JCWlmIChmb250RGVzYykNCisrCX0NCisrDQorKwljb25zdCBQZGZEaWN0aW9uYXJ5KiBmb250 RGVzY0RpY3QgPSAoZm9udERlc2MgJiYgZm9udERlc2MtPklzRGljdGlvbmFyeSgpKSA/ICYoZm9u dERlc2MtPkdldERpY3Rpb25hcnkoKSkgOiBudWxscHRyOw0KKysJaWYgKGZvbnREZXNjRGljdCkN CisrCXsNCisrCQljb25zdCBQZGZPYmplY3QqIGZvbnRGaWxlID0gZm9udERlc2NEaWN0LT5GaW5k S2V5KCJGb250RmlsZSIpOw0KKysJCWNvbnN0IFBkZk9iamVjdCogZm9udEZpbGUyID0gZm9udERl c2NEaWN0LT5GaW5kS2V5KCJGb250RmlsZTIiKTsNCisrCQljb25zdCBQZGZPYmplY3QqIGZvbnRG aWxlMyA9IGZvbnREZXNjRGljdC0+RmluZEtleSgiRm9udEZpbGUzIik7DQorKwkJaWYgKGZvbnRG aWxlICYmIGZvbnRGaWxlLT5IYXNTdHJlYW0oKSkNCisrCQkJY3VyckZvbnQuaXNFbWJlZGRlZCA9 IHRydWU7DQorKwkJaWYgKGZvbnRGaWxlMiAmJiBmb250RmlsZTItPkhhc1N0cmVhbSgpKQ0KKysJ CQljdXJyRm9udC5pc0VtYmVkZGVkID0gdHJ1ZTsNCisrCQlpZiAoZm9udEZpbGUzICYmIGZvbnRG aWxlMy0+SGFzU3RyZWFtKCkpDQorIAkJew0KKy0JCQlQZGZPYmplY3QqIGZvbnRGaWxlID0gZm9u dERlc2MtPkdldEluZGlyZWN0S2V5KCJGb250RmlsZSIpOw0KKy0JCQlQZGZPYmplY3QqIGZvbnRG aWxlMiA9IGZvbnREZXNjLT5HZXRJbmRpcmVjdEtleSgiRm9udEZpbGUyIik7DQorLQkJCVBkZk9i amVjdCogZm9udEZpbGUzID0gZm9udERlc2MtPkdldEluZGlyZWN0S2V5KCJGb250RmlsZTMiKTsN CistCQkJaWYgKGZvbnRGaWxlICYmIGZvbnRGaWxlLT5IYXNTdHJlYW0oKSkNCistCQkJCWN1cnJG b250LmlzRW1iZWRkZWQgPSB0cnVlOw0KKy0JCQlpZiAoZm9udEZpbGUyICYmIGZvbnRGaWxlMi0+ SGFzU3RyZWFtKCkpDQorLQkJCQljdXJyRm9udC5pc0VtYmVkZGVkID0gdHJ1ZTsNCistCQkJaWYg KGZvbnRGaWxlMyAmJiBmb250RmlsZTMtPkhhc1N0cmVhbSgpKQ0KKy0JCQl7DQorLQkJCQljdXJy Rm9udC5pc0VtYmVkZGVkID0gdHJ1ZTsNCistCQkJCVBkZk9iamVjdCogZmYzU3VidHlwZSA9IGZv bnRGaWxlMy0+R2V0SW5kaXJlY3RLZXkoIlN1YnR5cGUiKTsNCistCQkJCWlmIChmZjNTdWJ0eXBl ICYmIGZmM1N1YnR5cGUtPklzTmFtZSgpICYmIGZmM1N1YnR5cGUtPkdldE5hbWUoKSA9PSAiT3Bl blR5cGUiKQ0KKy0JCQkJCWN1cnJGb250LmlzT3BlblR5cGUgPSB0cnVlOw0KKy0JCQl9DQorKwkJ CWN1cnJGb250LmlzRW1iZWRkZWQgPSB0cnVlOw0KKysJCQljb25zdCBQZGZEaWN0aW9uYXJ5KiBm b250RmlsZTNEaWN0ID0gZm9udEZpbGUzLT5Jc0RpY3Rpb25hcnkoKSA/ICYoZm9udEZpbGUzLT5H ZXREaWN0aW9uYXJ5KCkpIDogbnVsbHB0cjsNCisrCQkJY29uc3QgUGRmT2JqZWN0KiBmZjNTdWJ0 eXBlID0gZm9udEZpbGUzRGljdCA/IGZvbnRGaWxlM0RpY3QtPkZpbmRLZXkoIlN1YnR5cGUiKSA6 IG51bGxwdHI7DQorKwkJCWlmIChmZjNTdWJ0eXBlICYmIGZmM1N1YnR5cGUtPklzTmFtZSgpICYm IGZmM1N1YnR5cGUtPkdldE5hbWUoKSA9PSAiT3BlblR5cGUiKQ0KKysJCQkJY3VyckZvbnQuaXNP cGVuVHlwZSA9IHRydWU7DQorIAkJfQ0KKyAJfQ0KKyAJcmV0dXJuIGN1cnJGb250Ow0KKy0tLSBh L3NjcmlidXMvcGRmbGliX2NvcmUuY3BwCisrKysgYi9zY3JpYnVzL3BkZmxpYl9jb3JlLmNwcAor QEAgLTk4MDAsMTYgKzk4MDAsMjAgQEAgYm9vbCBQREZMaWJDb3JlOjpQREZfRW1iZWRkZWRQREYo UGFnZUl0ZQorIAkJUG9Eb0ZvOjpQZGZPYmplY3QqIHBhZ2VPYmogICA9IHBhZ2UgPyBwYWdlLT5H ZXRPYmplY3QoKSA6IG51bGxwdHI7CisgCQlQb0RvRm86OlBkZk9iamVjdCogY29udGVudHMgID0g cGFnZSA/IHBhZ2UtPkdldENvbnRlbnRzKCkgOiBudWxscHRyOworIAkJUG9Eb0ZvOjpQZGZPYmpl Y3QqIHJlc291cmNlcyA9IHBhZ2UgPyBwYWdlLT5HZXRSZXNvdXJjZXMoKSA6IG51bGxwdHI7Cist CQlmb3IgKFBvRG9Gbzo6UGRmT2JqZWN0KiBwYXIgPSBwYWdlT2JqOyBwYXIgJiYgIXJlc291cmNl czsgcGFyID0gcGFyLT5HZXRJbmRpcmVjdEtleSgiUGFyZW50IikpCisrCQlQb0RvRm86OlBkZkRp Y3Rpb25hcnkqIHBhZ2VPYmpEaWN0ID0gKHBhZ2VPYmogJiYgcGFnZU9iai0+SXNEaWN0aW9uYXJ5 KCkpID8gJihwYWdlT2JqLT5HZXREaWN0aW9uYXJ5KCkpIDogbnVsbHB0cjsKKysJCWZvciAoUG9E b0ZvOjpQZGZEaWN0aW9uYXJ5KiBwYXIgPSBwYWdlT2JqRGljdCwgKnBhcmVudERpY3QgPSBudWxs cHRyOyBwYXIgJiYgIXJlc291cmNlczsgcGFyID0gcGFyZW50RGljdCkKKyAJCXsKKy0JCQlyZXNv dXJjZXMgPSBwYXItPkdldEluZGlyZWN0S2V5KCJSZXNvdXJjZXMiKTsKKysJCQlyZXNvdXJjZXMg PSBwYXItPkZpbmRLZXkoIlJlc291cmNlcyIpOworKwkJCVBvRG9Gbzo6UGRmT2JqZWN0KiBwYXJl bnRPYmogPSBwYXItPkZpbmRLZXkoIlBhcmVudCIpOworKwkJCXBhcmVudERpY3QgPSAocGFyZW50 T2JqICYmIHBhcmVudE9iai0+SXNEaWN0aW9uYXJ5KCkpID8gJihwYXJlbnRPYmotPkdldERpY3Rp b25hcnkoKSkgOiBudWxscHRyOworIAkJfQorIAkJaWYgKGNvbnRlbnRzICYmIGNvbnRlbnRzLT5H ZXREYXRhVHlwZSgpID09ICBQb0RvRm86OmVQZGZEYXRhVHlwZV9EaWN0aW9uYXJ5KQorIAkJewor KwkJCVBvRG9Gbzo6UGRmRGljdGlvbmFyeSYgY29udGVudHNEaWN0ID0gY29udGVudHMtPkdldERp Y3Rpb25hcnkoKTsKKyAJCQlQb0RvRm86OlBkZlN0cmVhbSogc3RyZWFtID0gY29udGVudHMtPkdl dFN0cmVhbSgpOworIAkJCVFNYXA8UG9Eb0ZvOjpQZGZSZWZlcmVuY2UsIFBkZklkPiBpbXBvcnRl ZE9iamVjdHM7CisgCQkJUUxpc3Q8UG9Eb0ZvOjpQZGZSZWZlcmVuY2U+IHJlZmVyZW5jZWRPYmpl Y3RzOworLQkJCVBvRG9Gbzo6UGRmT2JqZWN0KiBuZXh0T2JqOworKwkJCVBvRG9Gbzo6UGRmT2Jq ZWN0KiBuZXh0T2JqIHsgbnVsbHB0ciB9OworIAkJCVBkZklkIHhPYmogPSB3cml0ZXIubmV3T2Jq ZWN0KCk7CisgCQkJUGRmSWQgeFJlc291cmNlcyA9IHdyaXRlci5uZXdPYmplY3QoKTsKKyAJCQlQ ZGZJZCB4UGFyZW50cyA9IDA7CitAQCAtOTg0NCwxNCArOTg0OCwxNiBAQCBib29sIFBERkxpYkNv cmU6OlBERl9FbWJlZGRlZFBERihQYWdlSXRlCisgCQkJCQkJCQkgKyBQZGY6OnRvUGRmKHBhZ2VN LmR5KCkpICArICIgIik7CisgCQkJUHV0RG9jKCJdIik7CisgCQkJUHV0RG9jKCJcbi9SZXNvdXJj ZXMgIiArIFBkZjo6dG9QZGYoeFJlc291cmNlcykgKyAiIDAgUiIpOworLQkJCW5leHRPYmogPSBw YWdlLT5HZXRPYmplY3QoKS0+R2V0SW5kaXJlY3RLZXkoIkdyb3VwIik7CisrCQkJUG9Eb0ZvOjpQ ZGZPYmplY3QqIHBhZ2VPYmogPSBwYWdlLT5HZXRPYmplY3QoKTsKKysJCQlQb0RvRm86OlBkZkRp Y3Rpb25hcnkqIHBhZ2VEaWN0ID0gcGFnZU9iai0+SXNEaWN0aW9uYXJ5KCkgPyAmKHBhZ2VPYmot PkdldERpY3Rpb25hcnkoKSkgOiBudWxscHRyOworKwkJCW5leHRPYmogPSBwYWdlRGljdCA/IHBh Z2VEaWN0LT5GaW5kS2V5KCJHcm91cCIpIDogbnVsbHB0cjsKKyAJCQlpZiAobmV4dE9iaikKKyAJ CQl7CisgCQkJCVB1dERvYygiXG4vR3JvdXAgIik7IC8vIFBERiAxLjQKKyAJCQkJY29weVBvRG9G b0RpcmVjdChuZXh0T2JqLCByZWZlcmVuY2VkT2JqZWN0cywgaW1wb3J0ZWRPYmplY3RzKTsKKyAJ CQl9CisgCQkJLyoKKy0JCQlQb0RvRm86OlBkZk9iamVjdCBwYXJlbnRzID0gcGFnZS0+R2V0T2Jq ZWN0KCktPkdldEluZGlyZWN0S2V5KCJTdHJ1Y3RQYXJlbnRzIik7CisrCQkJUG9Eb0ZvOjpQZGZP YmplY3QgcGFyZW50cyA9IHBhZ2VEaWN0LT5GaW5kS2V5KCJTdHJ1Y3RQYXJlbnRzIik7CisgCQkJ aWYgKHBhcmVudHMpCisgCQkJeworIAkJCQl4UGFyZW50cyA9IHdyaXRlci5uZXdPYmplY3QoKTsK K0BAIC05ODcwLDEzICs5ODc2LDEzIEBAIGJvb2wgUERGTGliQ29yZTo6UERGX0VtYmVkZGVkUERG KFBhZ2VJdGUKKyAJCQlpZiAobWJ1ZmZlclttbGVuLTFdID09ICdcbicpCisgCQkJCS0tbWxlbjsK KyAJCQlQdXREb2MoIlxuL0xlbmd0aCAiICsgUGRmOjp0b1BkZihzdGF0aWNfY2FzdDxxbG9uZ2xv bmc+KG1sZW4pKSk7CistCQkJbmV4dE9iaiA9IGNvbnRlbnRzLT5HZXRJbmRpcmVjdEtleSgiRmls dGVyIik7CisrCQkJbmV4dE9iaiA9IGNvbnRlbnRzRGljdC5GaW5kS2V5KCJGaWx0ZXIiKTsKKyAJ CQlpZiAobmV4dE9iaikKKyAJCQl7CisgCQkJCVB1dERvYygiXG4vRmlsdGVyICIpOworIAkJCQlj b3B5UG9Eb0ZvRGlyZWN0KG5leHRPYmosIHJlZmVyZW5jZWRPYmplY3RzLCBpbXBvcnRlZE9iamVj dHMpOworIAkJCX0KKy0JCQluZXh0T2JqID0gY29udGVudHMtPkdldEluZGlyZWN0S2V5KCJEZWNv ZGVQYXJtcyIpOworKwkJCW5leHRPYmogPSBjb250ZW50c0RpY3QuRmluZEtleSgiRGVjb2RlUGFy bXMiKTsKKyAJCQlpZiAobmV4dE9iaikKKyAJCQl7CisgCQkJCVB1dERvYygiXG4vRGVjb2RlUGFy bXMgIik7CitAQCAtOTk2Nyw3ICs5OTczLDkgQEAgYm9vbCBQREZMaWJDb3JlOjpQREZfRW1iZWRk ZWRQREYoUGFnZUl0ZQorIAkJCQkJCQkJICsgUGRmOjp0b1BkZihwYWdlTS5keSgpKSAgKyAiICIp OworIAkJCVB1dERvYygiXSIpOworIAkJCVB1dERvYygiXG4vUmVzb3VyY2VzICIgKyBQZGY6OnRv UGRmKHhSZXNvdXJjZXMpICsgIiAwIFIiKTsKKy0JCQluZXh0T2JqID0gcGFnZS0+R2V0T2JqZWN0 KCktPkdldEluZGlyZWN0S2V5KCJHcm91cCIpOworKwkJCVBvRG9Gbzo6UGRmT2JqZWN0KiBwYWdl T2JqID0gcGFnZS0+R2V0T2JqZWN0KCk7CisrCQkJUG9Eb0ZvOjpQZGZEaWN0aW9uYXJ5KiBwYWdl RGljdCA9IHBhZ2VPYmotPklzRGljdGlvbmFyeSgpID8gJihwYWdlT2JqLT5HZXREaWN0aW9uYXJ5 KCkpIDogbnVsbHB0cjsKKysJCQluZXh0T2JqID0gcGFnZURpY3QgPyBwYWdlRGljdC0+RmluZEtl eSgiR3JvdXAiKSA6IG51bGxwdHI7CisgCQkJaWYgKG5leHRPYmopCisgCQkJeworIAkJCQlQdXRE b2MoIlxuL0dyb3VwICIpOyAvLyBQREYgMS40CitAQCAtMTAwMTIsMTMgKzEwMDIwLDEzIEBAIGJv b2wgUERGTGliQ29yZTo6UERGX0VtYmVkZGVkUERGKFBhZ2VJdGUKKyAvLwkJCQktLW1sZW47Cisg CQkJUHV0RG9jKCJcbi9MZW5ndGggIiArIFBkZjo6dG9QZGYoc3RhdGljX2Nhc3Q8cWxvbmdsb25n PihtbGVuKSkpOworIC8qCistIG5leHRPYmogPSBjb250ZW50cy0+R2V0SW5kaXJlY3RLZXkoIkZp bHRlciIpOworKwkJCW5leHRPYmogPSBjb250ZW50c0RpY3QuRmluZEtleSgiRmlsdGVyIik7Cisg CQkJaWYgKG5leHRPYmopCisgCQkJeworIAkJCQlQdXREb2MoIlxuL0ZpbHRlciAiKTsKKyAJCQkJ Y29weVBvRG9Gb0RpcmVjdChuZXh0T2JqLCByZWZlcmVuY2VkT2JqZWN0cywgaW1wb3J0ZWRPYmpl Y3RzKTsKKyAJCQl9CistCQkJbmV4dE9iaiA9IGNvbnRlbnRzLT5HZXRJbmRpcmVjdEtleSgiRGVj b2RlUGFybXMiKTsKKysJCQluZXh0T2JqID0gY29udGVudHNEaWN0LkZpbmRLZXkoIkRlY29kZVBh cm1zIik7CisgCQkJaWYgKG5leHRPYmopCisgCQkJeworIAkJCQlQdXREb2MoIlxuL0RlY29kZVBh cm1zICIpOworLS0tIGEvc2NyaWJ1cy9wbHVnaW5zL2ltcG9ydC9haS9pbXBvcnRhaS5jcHAKKysr KyBiL3NjcmlidXMvcGx1Z2lucy9pbXBvcnQvYWkvaW1wb3J0YWkuY3BwCitAQCAtNTg3LDM2ICs1 ODcsNDEgQEAgYm9vbCBBSVBsdWc6OmV4dHJhY3RGcm9tUERGKGNvbnN0IFFTdHJpbgorIAkJUG9E b0ZvOjpQZGZQYWdlICpjdXJQYWdlID0gZG9jLkdldFBhZ2UoMCk7DQorIAkJaWYgKGN1clBhZ2Ug IT0gbnVsbHB0cikNCisgCQl7DQorLQkJCVBvRG9Gbzo6UGRmT2JqZWN0ICpwaWVjZSA9IGN1clBh Z2UtPkdldE9iamVjdCgpLT5HZXRJbmRpcmVjdEtleSgiUGllY2VJbmZvIik7DQorKwkJCVBvRG9G bzo6UGRmT2JqZWN0KiBwYWdlT2JqID0gY3VyUGFnZS0+R2V0T2JqZWN0KCk7DQorKwkJCVBvRG9G bzo6UGRmRGljdGlvbmFyeSogcGFnZURpY3QgPSAocGFnZU9iaiAmJiBwYWdlT2JqLT5Jc0RpY3Rp b25hcnkoKSkgPyAmKHBhZ2VPYmotPkdldERpY3Rpb25hcnkoKSkgOiBudWxscHRyOw0KKysJCQlQ b0RvRm86OlBkZk9iamVjdCAqcGllY2UgPSBwYWdlRGljdCA/IHBhZ2VEaWN0LT5GaW5kS2V5KCJQ aWVjZUluZm8iKSA6IG51bGxwdHI7DQorIAkJCWlmIChwaWVjZSAhPSBudWxscHRyKQ0KKyAJCQl7 DQorLQkJCQlQb0RvRm86OlBkZk9iamVjdCAqaWxseSA9IHBpZWNlLT5HZXRJbmRpcmVjdEtleSgi SWxsdXN0cmF0b3IiKTsNCisrCQkJCVBvRG9Gbzo6UGRmRGljdGlvbmFyeSogcGllY2VEaWN0ID0g cGllY2UtPklzRGljdGlvbmFyeSgpID8gJihwaWVjZS0+R2V0RGljdGlvbmFyeSgpKSA6IG51bGxw dHI7DQorKwkJCQlQb0RvRm86OlBkZk9iamVjdCAqaWxseSA9IHBpZWNlRGljdCA/IHBpZWNlRGlj dC0+RmluZEtleSgiSWxsdXN0cmF0b3IiKSA6IG51bGxwdHI7DQorIAkJCQlpZiAoaWxseSAhPSBu dWxscHRyKQ0KKyAJCQkJew0KKy0JCQkJCVBvRG9Gbzo6UGRmT2JqZWN0ICpwcml2ID0gaWxseS0+ R2V0SW5kaXJlY3RLZXkoIlByaXZhdGUiKTsNCisrCQkJCQlQb0RvRm86OlBkZkRpY3Rpb25hcnkq IGlsbHlEaWN0ID0gaWxseS0+SXNEaWN0aW9uYXJ5KCkgPyAmKGlsbHktPkdldERpY3Rpb25hcnko KSkgOiBudWxscHRyOw0KKysJCQkJCVBvRG9Gbzo6UGRmT2JqZWN0ICpwcml2ID0gaWxseURpY3Qg PyBpbGx5RGljdC0+RmluZEtleSgiUHJpdmF0ZSIpIDogbnVsbHB0cjsNCisgCQkJCQlpZiAocHJp diA9PSBudWxscHRyKQ0KKyAJCQkJCQlwcml2ID0gaWxseTsNCisgCQkJCQlpbnQgbnVtID0gMDsN CistCQkJCQlQb0RvRm86OlBkZk9iamVjdCAqbnVtQmwgPSBwcml2LT5HZXRJbmRpcmVjdEtleSgi TnVtQmxvY2siKTsNCisrCQkJCQlQb0RvRm86OlBkZkRpY3Rpb25hcnkqIHByaXZEaWN0ID0gcHJp di0+SXNEaWN0aW9uYXJ5KCkgPyAmKHByaXYtPkdldERpY3Rpb25hcnkoKSkgOiBudWxscHRyOw0K KysJCQkJCVBvRG9Gbzo6UGRmT2JqZWN0ICpudW1CbCA9IHByaXZEaWN0ID8gcHJpdkRpY3QtPkZp bmRLZXkoIk51bUJsb2NrIikgOiBudWxscHRyOw0KKyAJCQkJCWlmIChudW1CbCAhPSBudWxscHRy KQ0KKyAJCQkJCQludW0gPSBudW1CbC0+R2V0TnVtYmVyKCkgKyAxOw0KKyAJCQkJCWlmIChudW0g PT0gMCkNCisgCQkJCQkJbnVtID0gOTk5OTk7DQorIAkJCQkJUVN0cmluZyBuYW1lID0gIkFJUHJp dmF0ZURhdGElMSI7DQorIAkJCQkJUVN0cmluZyBLZXkgPSBuYW1lLmFyZygxKTsNCistCQkJCQlQ b0RvRm86OlBkZk9iamVjdCAqZGF0YSA9IHByaXYtPkdldEluZGlyZWN0S2V5KFBvRG9Gbzo6UGRm TmFtZShLZXkudG9VdGY4KCkuZGF0YSgpKSk7DQorKwkJCQkJUG9Eb0ZvOjpQZGZPYmplY3QgKmRh dGEgPSBwcml2RGljdCA/IHByaXZEaWN0LT5GaW5kS2V5KFBvRG9Gbzo6UGRmTmFtZShLZXkudG9V dGY4KCkuZGF0YSgpKSkgOiBudWxscHRyOw0KKyAJCQkJCWlmIChkYXRhID09IG51bGxwdHIpDQor IAkJCQkJew0KKyAJCQkJCQluYW1lID0gIkFJUERGUHJpdmF0ZURhdGElMSI7DQorIAkJCQkJCUtl eSA9IG5hbWUuYXJnKDEpOw0KKy0JCQkJCQlkYXRhID0gcHJpdi0+R2V0SW5kaXJlY3RLZXkoUG9E b0ZvOjpQZGZOYW1lKEtleS50b1V0ZjgoKS5kYXRhKCkpKTsNCisrCQkJCQkJZGF0YSA9IHByaXZE aWN0ID8gcHJpdkRpY3QtPkZpbmRLZXkoUG9Eb0ZvOjpQZGZOYW1lKEtleS50b1V0ZjgoKS5kYXRh KCkpKSA6IG51bGxwdHI7DQorIAkJCQkJfQ0KKyAJCQkJCWlmIChkYXRhICE9IG51bGxwdHIpDQor IAkJCQkJew0KKyAJCQkJCQlpZiAobnVtID09IDIpDQorIAkJCQkJCXsNCisgCQkJCQkJCUtleSA9 IG5hbWUuYXJnKDEpOw0KKy0JCQkJCQkJZGF0YSA9IHByaXYtPkdldEluZGlyZWN0S2V5KFBvRG9G bzo6UGRmTmFtZShLZXkudG9VdGY4KCkuZGF0YSgpKSk7DQorKwkJCQkJCQlkYXRhID0gcHJpdkRp Y3QtPkZpbmRLZXkoUG9Eb0ZvOjpQZGZOYW1lKEtleS50b1V0ZjgoKS5kYXRhKCkpKTsNCisgCQkJ CQkJCVBvRG9Gbzo6UGRmU3RyZWFtIGNvbnN0ICpzdHJlYW0gPSBkYXRhLT5HZXRTdHJlYW0oKTsN CisgCQkJCQkJCVBvRG9Gbzo6UGRmTWVtb3J5T3V0cHV0U3RyZWFtIG9TdHJlYW0oMSk7DQorIAkJ CQkJCQlzdHJlYW0tPkdldEZpbHRlcmVkQ29weSgmb1N0cmVhbSk7DQorQEAgLTYzMSw3ICs2MzYs NyBAQCBib29sIEFJUGx1Zzo6ZXh0cmFjdEZyb21QREYoY29uc3QgUVN0cmluCisgCQkJCQkJCWZv ciAoaW50IGEgPSAyOyBhIDwgbnVtOyBhKyspDQorIAkJCQkJCQl7DQorIAkJCQkJCQkJS2V5ID0g bmFtZS5hcmcoYSk7DQorLQkJCQkJCQkJZGF0YSA9IHByaXYtPkdldEluZGlyZWN0S2V5KFBvRG9G bzo6UGRmTmFtZShLZXkudG9VdGY4KCkuZGF0YSgpKSk7DQorKwkJCQkJCQkJZGF0YSA9IHByaXZE aWN0LT5GaW5kS2V5KFBvRG9Gbzo6UGRmTmFtZShLZXkudG9VdGY4KCkuZGF0YSgpKSk7DQorIAkJ CQkJCQkJaWYgKGRhdGEgPT0gbnVsbHB0cikNCisgCQkJCQkJCQkJYnJlYWs7DQorIAkJCQkJCQkJ UG9Eb0ZvOjpQZGZTdHJlYW0gY29uc3QgKnN0cmVhbSA9IGRhdGEtPkdldFN0cmVhbSgpOw0KZGlm ZiAtLWdpdCBhL3NyY3BrZ3Mvc2NyaWJ1cy9wYXRjaGVzLzAwMTMtcG9kb2ZvLTAuMTAtY29tcGF0 LXBvZG9mby0wLjEwLngucGF0Y2ggYi9zcmNwa2dzL3NjcmlidXMvcGF0Y2hlcy8wMDEzLXBvZG9m by0wLjEwLWNvbXBhdC1wb2RvZm8tMC4xMC54LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMDAuLjU4MTBiZWNiNTY0NDYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmNw a2dzL3NjcmlidXMvcGF0Y2hlcy8wMDEzLXBvZG9mby0wLjEwLWNvbXBhdC1wb2RvZm8tMC4xMC54 LnBhdGNoCkBAIC0wLDAgKzEsMTYwMiBAQAorRnJvbSBiYmFhMTk0NGQ4M2EyYzY4ZTQ5OTI3ZDVi Y2M0NjJjZDg3MGJlYjJkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSmVhbiBHaGFs aSA8amdoYWxpQGxpYmVydHlzdXJmLmZyPgorRGF0ZTogVHVlLCAxNSBBdWcgMjAyMyAwMjo0Mzo1 MiArMDAwMAorU3ViamVjdDogW1BBVENIIDA5LzEzXSAjMTY5NDg6IEZpeCBidWlsZCB3aXRoIHBv ZG9mbyAwLjEwLngKKworZ2l0LXN2bi1pZDogc3ZuOi8vc2NyaWJ1cy5uZXQvdHJ1bmsvU2NyaWJ1 c0AyNTYwMSAxMWQyMDcwMS04NDMxLTA0MTAtYTcxMS1lM2M5NTllM2I4NzAKKyhjaGVycnkgcGlj a2VkIGZyb20gY29tbWl0IDMzNTgwYWU4MzcxZTk5M2I2ZTE5OWU3MTA5NTA3MDJjNzhkN2RkZTEp CistLS0KKyBzY3JpYnVzL2RvY3VtZW50Y2hlY2tlci5jcHAgICAgICAgICAgICAgICAgICAgfCAg MTggKy0KKyAuLi4vaW1hZ2VkYXRhbG9hZGVycy9zY2ltZ2RhdGFsb2FkZXJfcGRmLmNwcCAgfCAg MTIgKy0KKyBzY3JpYnVzL3BkZl9hbmFseXplci5jcHAgICAgICAgICAgICAgICAgICAgICAgfCA1 MzMgKysrKysrKysrKysrKysrKystCisgc2NyaWJ1cy9wZGZsaWJfY29yZS5jcHAgICAgICAgICAg ICAgICAgICAgICAgIHwgNDgwICsrKysrKysrKysrKystLS0KKyBzY3JpYnVzL3BkZmxpYl9jb3Jl LmggICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQgKy0KKyBzY3JpYnVzL3BsdWdpbnMvaW1w b3J0L2FpL2ltcG9ydGFpLmNwcCAgICAgICAgfCAgNDEgKy0KKyA2IGZpbGVzIGNoYW5nZWQsIDk4 NSBpbnNlcnRpb25zKCspLCAxMDMgZGVsZXRpb25zKC0pCisKKy0tLSBhL3NjcmlidXMvZG9jdW1l bnRjaGVja2VyLmNwcAorKysrIGIvc2NyaWJ1cy9kb2N1bWVudGNoZWNrZXIuY3BwCitAQCAtMTA5 LDcgKzEwOSw3IEBAIGJvb2wgRG9jdW1lbnRDaGVja2VyOjpjaGVja0RvY3VtZW50KFNjcmkKKyB2 b2lkIERvY3VtZW50Q2hlY2tlcjo6Y2hlY2tQYWdlcyhTY3JpYnVzRG9jICpjdXJyRG9jLCBjb25z dCBDaGVja2VyUHJlZnMmIGNoZWNrZXJTZXR0aW5ncykKKyB7CisgCWVycm9yQ29kZXMgcGFnZUVy cm9yOworLQlmb3IgKGludCBpPTA7IGkgPCBjdXJyRG9jLT5Eb2NQYWdlcy5jb3VudCgpOyArK2kg KQorKwlmb3IgKGludCBpID0gMDsgaSA8IGN1cnJEb2MtPkRvY1BhZ2VzLmNvdW50KCk7ICsraSkK KyAJeworIAkJcGFnZUVycm9yLmNsZWFyKCk7CisgCQlpZiAoY2hlY2tlclNldHRpbmdzLmNoZWNr QXBwbGllZE1hc3RlckRpZmZlcmVudFNpZGUpCitAQCAtMTI3LDExICsxMjcsMTEgQEAgdm9pZCBE b2N1bWVudENoZWNrZXI6OmNoZWNrUGFnZXMoU2NyaWJ1cworIAkJCX0KKyAJCQllbHNlCisgCQkJ eworLQkJCQlpZiAocGFnZUxvYz09TGVmdFBhZ2UgJiYgbWFzdGVyUGFnZUxvY2F0aW9uPT0xKQor KwkJCQlpZiAocGFnZUxvYyA9PSBMZWZ0UGFnZSAmJiBtYXN0ZXJQYWdlTG9jYXRpb24gPT0gMSkK KyAJCQkJCWVycm9yID0gZmFsc2U7CistCQkJCWVsc2UgaWYgKHBhZ2VMb2M9PVJpZ2h0UGFnZSAm JiBtYXN0ZXJQYWdlTG9jYXRpb249PTApCisrCQkJCWVsc2UgaWYgKHBhZ2VMb2MgPT0gUmlnaHRQ YWdlICYmIG1hc3RlclBhZ2VMb2NhdGlvbiA9PSAwKQorIAkJCQkJZXJyb3IgPSBmYWxzZTsKKy0J CQkJZWxzZSBpZiAocGFnZUxvYz09TWlkZGxlUGFnZSAmJiBtYXN0ZXJQYWdlTG9jYXRpb249PTIp CisrCQkJCWVsc2UgaWYgKHBhZ2VMb2MgPT0gTWlkZGxlUGFnZSAmJiBtYXN0ZXJQYWdlTG9jYXRp b24gPT0gMikKKyAJCQkJCWVycm9yID0gZmFsc2U7CisgCQkJCWVsc2UKKyAJCQkJCWVycm9yID0g dHJ1ZTsKK0BAIC01OTYsNyArNTk2LDcgQEAgdm9pZCBEb2N1bWVudENoZWNrZXI6OmNoZWNrSXRl bXMoU2NyaWJ1cworIAkJCQkJCQkJfQorIAkJCQkJCQkJaWYgKGNoZWNrZXJTZXR0aW5ncy5jaGVj a05vdENNWUtPclNwb3QpCisgCQkJCQkJCQl7CistCQkJCQkJCQkJZm9yIChpbnQgaT0wOyBpPHVz ZWRDb2xvclNwYWNlcy5zaXplKCk7ICsraSkKKysJCQkJCQkJCQlmb3IgKGludCBpID0gMDsgaSA8 IHVzZWRDb2xvclNwYWNlcy5zaXplKCk7ICsraSkKKyAJCQkJCQkJCQl7CisgCQkJCQkJCQkJCWlm ICh1c2VkQ29sb3JTcGFjZXNbaV0gPT0gQ1NfRGV2aWNlUkdCIHx8IHVzZWRDb2xvclNwYWNlc1tp XSA9PSBDU19JQ0NCYXNlZCB8fCB1c2VkQ29sb3JTcGFjZXNbaV0gPT0gQ1NfQ2FsR3JheQorIAkJ CQkJCQkJCQkJfHwgdXNlZENvbG9yU3BhY2VzW2ldID09IENTX0NhbFJHQiB8fCB1c2VkQ29sb3JT cGFjZXNbaV0gPT0gQ1NfTGFiKQorQEAgLTYwOCw3ICs2MDgsNyBAQCB2b2lkIERvY3VtZW50Q2hl Y2tlcjo6Y2hlY2tJdGVtcyhTY3JpYnVzCisgCQkJCQkJCQl9CisgCQkJCQkJCQlpZiAoY2hlY2tl clNldHRpbmdzLmNoZWNrRGV2aWNlQ29sb3JzQW5kT3V0cHV0SW50ZW50ICYmIGN1cnJEb2MtPkhh c0NNUykKKyAJCQkJCQkJCXsKKy0JCQkJCQkJCQlmb3IgKGludCBpPTA7IGk8dXNlZENvbG9yU3Bh Y2VzLnNpemUoKTsgKytpKQorKwkJCQkJCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgdXNlZENvbG9y U3BhY2VzLnNpemUoKTsgKytpKQorIAkJCQkJCQkJCXsKKyAJCQkJCQkJCQkJaWYgKGN1cnJQcmlu dFByb2ZDUyA9PSBDb2xvclNwYWNlX0NteWsgJiYgKHVzZWRDb2xvclNwYWNlc1tpXSA9PSBDU19E ZXZpY2VSR0IgfHwgdXNlZENvbG9yU3BhY2VzW2ldID09IENTX0RldmljZUdyYXkpKQorIAkJCQkJ CQkJCQl7CitAQCAtNjI3LDcgKzYyNyw3IEBAIHZvaWQgRG9jdW1lbnRDaGVja2VyOjpjaGVja0l0 ZW1zKFNjcmlidXMKKyAJCQkJCQkJCWl0ZW1FcnJvci5pbnNlcnQoVHJhbnNwYXJlbmN5LCAwKTsK KyAJCQkJCQkJaWYgKGNoZWNrZXJTZXR0aW5ncy5jaGVja0ZvbnROb3RFbWJlZGRlZCB8fCBjaGVj a2VyU2V0dGluZ3MuY2hlY2tGb250SXNPcGVuVHlwZSkKKyAJCQkJCQkJeworLQkJCQkJCQkJZm9y IChpbnQgaT0wOyBpPHVzZWRGb250cy5zaXplKCk7ICsraSkKKysJCQkJCQkJCWZvciAoaW50IGkg PSAwOyBpIDwgdXNlZEZvbnRzLnNpemUoKTsgKytpKQorIAkJCQkJCQkJeworIAkJCQkJCQkJCVBE RkZvbnQgY3VycmVudEZvbnQgPSB1c2VkRm9udHNbaV07CisgCQkJCQkJCQkJaWYgKCFjdXJyZW50 Rm9udC5pc0VtYmVkZGVkICYmIGNoZWNrZXJTZXR0aW5ncy5jaGVja0ZvbnROb3RFbWJlZGRlZCkK K0BAIC02MzgsNyArNjM4LDcgQEAgdm9pZCBEb2N1bWVudENoZWNrZXI6OmNoZWNrSXRlbXMoU2Ny aWJ1cworIAkJCQkJCQl9CisgCQkJCQkJCWlmIChjaGVja2VyU2V0dGluZ3MuY2hlY2tSZXNvbHV0 aW9uKQorIAkJCQkJCQl7CistCQkJCQkJCQlmb3IgKGludCBpPTA7IGk8aW1ncy5zaXplKCk7ICsr aSkKKysJCQkJCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgaW1ncy5zaXplKCk7ICsraSkKKyAJCQkJ CQkJCXsKKyAJCQkJCQkJCQlpZiAoKGltZ3NbaV0uZHBpWCA8IGNoZWNrZXJTZXR0aW5ncy5taW5S ZXNvbHV0aW9uKSB8fCAoaW1nc1tpXS5kcGlZIDwgY2hlY2tlclNldHRpbmdzLm1pblJlc29sdXRp b24pKQorIAkJCQkJCQkJCQlpdGVtRXJyb3IuaW5zZXJ0KEltYWdlRFBJVG9vTG93LCAwKTsKK0BA IC02NTUsNyArNjU1LDcgQEAgdm9pZCBEb2N1bWVudENoZWNrZXI6OmNoZWNrSXRlbXMoU2NyaWJ1 cworIAkJCQlpZiAoIGN1cnJJdGVtLT5mcmFtZU92ZXJmbG93cygpICYmIChjaGVja2VyU2V0dGlu Z3MuY2hlY2tPdmVyZmxvdykgJiYgKCEoKGN1cnJJdGVtLT5pc0Fubm90YXRpb24oKSkgJiYgKChj dXJySXRlbS0+YW5ub3RhdGlvbigpLlR5cGUoKSA9PSBBbm5vdGF0aW9uOjpDb21ib2JveCkgfHwg KGN1cnJJdGVtLT5hbm5vdGF0aW9uKCkuVHlwZSgpID09IEFubm90YXRpb246Okxpc3Rib3gpKSkp KQorIAkJCQkJaXRlbUVycm9yLmluc2VydChUZXh0T3ZlcmZsb3csIDApOworIAorLQkJCQlpZiAo Y2hlY2tlclNldHRpbmdzLmNoZWNrRW1wdHlUZXh0RnJhbWVzICYmIChjdXJySXRlbS0+aXRlbVRl eHQubGVuZ3RoKCk9PTAgfHwgY3Vyckl0ZW0tPmZyYW1lVW5kZXJmbG93cygpKSkKKysJCQkJaWYg KGNoZWNrZXJTZXR0aW5ncy5jaGVja0VtcHR5VGV4dEZyYW1lcyAmJiAoY3Vyckl0ZW0tPml0ZW1U ZXh0Lmxlbmd0aCgpID09IDAgfHwgY3Vyckl0ZW0tPmZyYW1lVW5kZXJmbG93cygpKSkKKyAJCQkJ eworIAkJCQkJYm9vbCBpc0VtcHR5QW5ub3RhdGlvbiA9IChjdXJySXRlbS0+aXNBbm5vdGF0aW9u KCkgJiYgCisgCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgKChjdXJySXRlbS0+YW5ub3Rh dGlvbigpLlR5cGUoKSA9PSBBbm5vdGF0aW9uOjpMaW5rKSB8fAorLS0tIGEvc2NyaWJ1cy9pbWFn ZWRhdGFsb2FkZXJzL3NjaW1nZGF0YWxvYWRlcl9wZGYuY3BwCisrKysgYi9zY3JpYnVzL2ltYWdl ZGF0YWxvYWRlcnMvc2NpbWdkYXRhbG9hZGVyX3BkZi5jcHAKK0BAIC01NSwxMCArNTUsMTYgQEAg Ym9vbCBTY0ltZ0RhdGFMb2FkZXJfUERGOjpsb2FkUGljdHVyZShjbworICNpZmRlZiBIQVZFX1BP RE9GTworIAl0cnkKKyAJeworLQkJUG9Eb0ZvOjpQZGZFcnJvcjo6RW5hYmxlRGVidWcoIGZhbHNl ICk7CistCQlQb0RvRm86OlBkZkVycm9yOjpFbmFibGVMb2dnaW5nKCBmYWxzZSApOworLQkJUG9E b0ZvOjpQZGZNZW1Eb2N1bWVudCBkb2MoIGZuLnRvTG9jYWw4Qml0KCkuZGF0YSgpICk7CisrI2lm IChQT0RPRk9fVkVSU0lPTiA+PSBQT0RPRk9fTUFLRV9WRVJTSU9OKDAsIDEwLCAwKSkKKysJCVBv RG9Gbzo6UGRmTWVtRG9jdW1lbnQgZG9jOworKwkJZG9jLkxvYWQoZm4udG9Mb2NhbDhCaXQoKS5k YXRhKCkpOworKwkJbV9pbWFnZUluZm9SZWNvcmQubnVtYmVyT2ZQYWdlcyA9IGRvYy5HZXRQYWdl cygpLkdldENvdW50KCk7CisrI2Vsc2UKKysJCVBvRG9Gbzo6UGRmRXJyb3I6OkVuYWJsZURlYnVn KGZhbHNlKTsKKysJCVBvRG9Gbzo6UGRmRXJyb3I6OkVuYWJsZUxvZ2dpbmcoZmFsc2UpOworKwkJ UG9Eb0ZvOjpQZGZNZW1Eb2N1bWVudCBkb2MoZm4udG9Mb2NhbDhCaXQoKS5kYXRhKCkpOworIAkJ bV9pbWFnZUluZm9SZWNvcmQubnVtYmVyT2ZQYWdlcyA9IGRvYy5HZXRQYWdlQ291bnQoKTsKKysj ZW5kaWYKKyAJCWlmIChwYWdlID4gbV9pbWFnZUluZm9SZWNvcmQubnVtYmVyT2ZQYWdlcykKKyAJ CXsKKyAJCQlxRGVidWcoKSA8PCAiSW5jb3JyZWN0IHBhZ2UgbnVtYmVyIHNwZWNpZmllZCEiOwor LS0tIGEvc2NyaWJ1cy9wZGZfYW5hbHl6ZXIuY3BwCisrKysgYi9zY3JpYnVzL3BkZl9hbmFseXpl ci5jcHAKK0BAIC0zMCw2ICszMCwxMCBAQCBmb3Igd2hpY2ggYSBuZXcgbGljZW5zZSAoR1BMK2V4 Y2VwdGlvbikKKyAjaWZkZWYgSEFWRV9QT0RPRk8NCisgdXNpbmcgbmFtZXNwYWNlIFBvRG9GbzsN CisgDQorKyNpZiAoUE9ET0ZPX1ZFUlNJT04gPCBQT0RPRk9fTUFLRV9WRVJTSU9OKDAsIDEwLCAw KSkNCisrI2RlZmluZSBJc1JlYWxTdHJpY3QgSXNSZWFsDQorKyNlbmRpZg0KKysNCisgc3RhdGlj IFFIYXNoPFFTdHJpbmcsIFBERkNvbnRlbnRTdHJlYW1LZXl3b3JkPiBrd05hbWVNYXA7DQorIA0K KyAvLyB3ZSBnb25uYSBuZWVkIGEgbWFwIGZyb20gc3RyaW5nIHZhbHVlcyB0byB0aGUgZGVmaW5l ZCBlbnVtIG9mIHBkZiBrZXl3b3Jkcw0KK0BAIC03NywxMCArODEsMTMgQEAgUERGQW5hbHl6ZXI6 OlBERkFuYWx5emVyKFFTdHJpbmcgJiBmaWxlbgorIA0KKyAJbV9wZGZkb2MgPSBudWxscHRyOw0K KyANCisrI2lmIChQT0RPRk9fVkVSU0lPTiA8IFBPRE9GT19NQUtFX1ZFUlNJT04oMCwgMTAsIDAp KQ0KKyAJUGRmRXJyb3I6OkVuYWJsZURlYnVnKCBmYWxzZSApOw0KKysjZW5kaWYNCisgCXRyeQ0K KyAJew0KKy0JCW1fcGRmZG9jID0gbmV3IFBkZk1lbURvY3VtZW50KGZpbGVuYW1lLnRvTG9jYWw4 Qml0KCkuZGF0YSgpKTsNCisrCQltX3BkZmRvYyA9IG5ldyBQZGZNZW1Eb2N1bWVudCgpOw0KKysJ CW1fcGRmZG9jLT5Mb2FkKGZpbGVuYW1lLnRvTG9jYWw4Qml0KCkuZGF0YSgpKTsNCisgCX0NCisg CWNhdGNoIChQZGZFcnJvciAmIGUpDQorIAl7DQorQEAgLTk5LDcgKzEwNiwxMiBAQCBib29sIFBE RkFuYWx5emVyOjppbnNwZWN0UERGKGludCBwYWdlTnVtCisgew0KKyAJaWYgKCFtX3BkZmRvYykN CisgCQlyZXR1cm4gZmFsc2U7DQorKw0KKysjaWYgKFBPRE9GT19WRVJTSU9OID49IFBPRE9GT19N QUtFX1ZFUlNJT04oMCwgMTAsIDApKQ0KKysJUGRmUGFnZSogcGFnZSA9ICYobV9wZGZkb2MtPkdl dFBhZ2VzKCkuR2V0UGFnZUF0KHBhZ2VOdW0pKTsNCisrI2Vsc2UNCisgCVBkZlBhZ2UqIHBhZ2Ug PSBtX3BkZmRvYy0+R2V0UGFnZShwYWdlTnVtKTsNCisrI2VuZGlmDQorIAlyZXR1cm4gcGFnZSA/ IGluc3BlY3RDYW52YXMocGFnZSwgdXNlZENvbG9yU3BhY2VzLCBoYXNUcmFuc3BhcmVuY3ksIHVz ZWRGb250cywgaW1ncykgOiBmYWxzZTsNCisgfQ0KKyANCitAQCAtMTM5LDcgKzE1MSwxMyBAQCBQ REZDb2xvclNwYWNlIFBERkFuYWx5emVyOjpnZXRDU1R5cGUoUGRmCisgCQkJCQlQZGZPYmplY3Qq IHBCYXNlID0gJmJhc2U7DQorIAkJCQkJaWYgKGJhc2UuSXNSZWZlcmVuY2UoKSkNCisgCQkJCQl7 DQorKyNpZiAoUE9ET0ZPX1ZFUlNJT04gPj0gUE9ET0ZPX01BS0VfVkVSU0lPTigwLCAxMCwgMCkp DQorKwkJCQkJCVBkZkRvY3VtZW50KiBwZGZkb2MgPSBjcy0+R2V0RG9jdW1lbnQoKTsNCisrCQkJ CQkJUGRmSW5kaXJlY3RPYmplY3RMaXN0JiBwZGZfaW9sID0gcGRmZG9jLT5HZXRPYmplY3RzKCk7 DQorKwkJCQkJCXBCYXNlID0gcGRmX2lvbC5HZXRPYmplY3QoYmFzZS5HZXRSZWZlcmVuY2UoKSk7 DQorKyNlbHNlDQorIAkJCQkJCXBCYXNlID0gY3MtPkdldE93bmVyKCktPkdldE9iamVjdChiYXNl LkdldFJlZmVyZW5jZSgpKTsNCisrI2VuZGlmDQorIAkJCQkJfQ0KKyAjaWYgKFBPRE9GT19WRVJT SU9OIDwgUE9ET0ZPX01BS0VfVkVSU0lPTigwLCA5LCA3KSkNCisgCQkJCQlwQmFzZS0+U2V0T3du ZXIoY3MtPkdldE93bmVyKCkpOw0KK0BAIC0xODAsMTEgKzE5OCwyMSBAQCBib29sIFBERkFuYWx5 emVyOjppbnNwZWN0Q2FudmFzKFBkZkNhbnZhCisgCQkvLyBnZXQgaG9sZCBvZiBhIFBkZk9iamVj dCBwb2ludGVyIG9mIHRoaXMgY2FudmFzDQorIAkJLy8gbmVlZGVkIGZvciB0aGUgZmluZGluZyBy ZXNvdXJjZXMgY29kZSBiZWxvdyB0byB3b3JrDQorIAkJUGRmUGFnZSogcGFnZSA9IGR5bmFtaWNf Y2FzdDxQZGZQYWdlKj4oY2FudmFzKTsNCisrI2lmIChQT0RPRk9fVkVSU0lPTiA+PSBQT0RPRk9f TUFLRV9WRVJTSU9OKDAsIDEwLCAwKSkNCisrCQlQZGZPYmplY3QqIGNhbnZhc09iamVjdCA9IHBh Z2UgPyAmKHBhZ2UtPkdldE9iamVjdCgpKSA6ICYoZHluYW1pY19jYXN0PFBkZlhPYmplY3QqPihj YW52YXMpLT5HZXRPYmplY3QoKSk7DQorKw0KKysjZWxzZQ0KKyAJCVBkZk9iamVjdCogY2FudmFz T2JqZWN0ID0gcGFnZSA/IChwYWdlLT5HZXRPYmplY3QoKSkgOiAoKGR5bmFtaWNfY2FzdDxQZGZY T2JqZWN0Kj4oY2FudmFzKSktPkdldE9iamVjdCgpKTsNCisrI2VuZGlmDQorIAkJUGRmRGljdGlv bmFyeSogY2FudmFzRGljdCA9IChjYW52YXNPYmplY3QgJiYgY2FudmFzT2JqZWN0LT5Jc0RpY3Rp b25hcnkoKSkgPyAmKGNhbnZhc09iamVjdC0+R2V0RGljdGlvbmFyeSgpKSA6IG51bGxwdHI7DQor IA0KKyAJCS8vIGZpbmQgYSByZXNvdXJjZSB3aXRoIENvbG9yU3BhY2UgZW50cnkNCisrI2lmIChQ T0RPRk9fVkVSU0lPTiA+PSBQT0RPRk9fTUFLRV9WRVJTSU9OKDAsIDEwLCAwKSkNCisrCQlQZGZS ZXNvdXJjZXMqIGNhbnZhc1JzcmMgPSBjYW52YXMtPkdldFJlc291cmNlcygpOw0KKysJCVBkZk9i amVjdCogcmVzb3VyY2VzID0gJihjYW52YXNSc3JjLT5HZXRPYmplY3QoKSk7DQorKyNlbHNlDQor IAkJUGRmT2JqZWN0KiByZXNvdXJjZXMgPSBjYW52YXMtPkdldFJlc291cmNlcygpOw0KKysjZW5k aWYNCisgCQlmb3IgKFBkZkRpY3Rpb25hcnkqIHBhciA9IGNhbnZhc0RpY3QsICpwYXJlbnREaWN0 ID0gbnVsbHB0cjsgcGFyICYmICFyZXNvdXJjZXM7IHBhciA9IHBhcmVudERpY3QpDQorIAkJew0K KyAJCQlyZXNvdXJjZXMgPSBwYXItPkZpbmRLZXkoIlJlc291cmNlcyIpOw0KK0BAIC0yMzQsNiAr MjYyLDQ2OCBAQCBib29sIFBERkFuYWx5emVyOjppbnNwZWN0Q2FudmFzKFBkZkNhbnZhCisgDQor IAl0cnkNCisgCXsNCisrI2lmIChQT0RPRk9fVkVSU0lPTiA+PSBQT0RPRk9fTUFLRV9WRVJTSU9O KDAsIDEwLCAwKSkNCisrCQkvLyBzdGFydCBwYXJzaW5nIHRoZSBjb250ZW50IHN0cmVhbQ0KKysJ CVBkZkNvbnRlbnRSZWFkZXJBcmdzIHRva2VuaXplckFyZ3MgPSB7IFBkZkNvbnRlbnRSZWFkZXJG bGFnczo6RG9udEZvbGxvd1hPYmplY3RGb3JtcyB9Ow0KKysJCVBkZkNvbnRlbnRTdHJlYW1SZWFk ZXIgdG9rZW5pemVyKCpjYW52YXMsIHRva2VuaXplckFyZ3MpOw0KKysJCVBkZkNvbnRlbnQgcGRm Q29udGVudDsNCisrCQlQZGZWYXJpYW50IHZhcjsNCisrCQlib29sIHJlYWRUb2tlbjsNCisrDQor KwkJaW50IHRva2VuTnVtYmVyID0gMDsNCisrCQlib29sIGlubGluZUltZ0RpY3QgPSBmYWxzZTsN CisrCQlRTGlzdDxQZGZWYXJpYW50PiBhcmdzOw0KKysJCVFTdGFjazxQREZHcmFwaGljU3RhdGU+ IGdzU3RhY2s7DQorKwkJUERGR3JhcGhpY1N0YXRlIGN1cnJHUzsNCisrCQl3aGlsZSAoKHJlYWRU b2tlbiA9IHRva2VuaXplci5UcnlSZWFkTmV4dChwZGZDb250ZW50KSkpDQorKwkJew0KKysJCQkr K3Rva2VuTnVtYmVyOw0KKysJCQlpZiAocGRmQ29udGVudC5UeXBlID09IFBkZkNvbnRlbnRUeXBl OjpPcGVyYXRvcikNCisrCQkJew0KKysJCQkJYXJncy5jbGVhcigpOw0KKysJCQkJaW50IHN0YWNr U2l6ZSA9IHBkZkNvbnRlbnQuU3RhY2suc2l6ZSgpOw0KKysJCQkJZm9yIChzaXplX3QgaSA9IDA7 IGkgPCBzdGFja1NpemU7ICsraSkNCisrCQkJCQlhcmdzLmFwcGVuZChwZGZDb250ZW50LlN0YWNr W3N0YWNrU2l6ZSAtIDEgLSBpXSk7DQorKwkJCQlzd2l0Y2ggKHBkZkNvbnRlbnQuT3BlcmF0b3Ip DQorKwkJCQl7DQorKwkJCQljYXNlIFBkZk9wZXJhdG9yOjpxOg0KKysJCQkJCWdzU3RhY2sucHVz aChjdXJyR1MpOw0KKysJCQkJCWJyZWFrOw0KKysJCQkJY2FzZSBQZGZPcGVyYXRvcjo6UToNCisr CQkJCQljdXJyR1MgPSBnc1N0YWNrLnBvcCgpOw0KKysJCQkJCWJyZWFrOw0KKysJCQkJY2FzZSBQ ZGZPcGVyYXRvcjo6Y206DQorKwkJCQl7DQorKwkJCQkJaWYgKGFyZ3Muc2l6ZSgpID09IDYpDQor KwkJCQkJew0KKysJCQkJCQlkb3VibGUgbXRbNl07DQorKwkJCQkJCWZvciAoaW50IGkgPSAwOyBp IDwgNjsgKytpKQ0KKysJCQkJCQl7DQorKwkJCQkJCQltdFtpXSA9IGFyZ3NbaV0uR2V0UmVhbCgp Ow0KKysJCQkJCQl9DQorKwkJCQkJCVFUcmFuc2Zvcm0gdHJhbnNNYXRyaXgobXRbMF0sIG10WzFd LCBtdFsyXSwgbXRbM10sIG10WzRdLCBtdFs1XSk7DQorKwkJCQkJCWN1cnJHUy5jdG0gPSB0cmFu c01hdHJpeCAqIGN1cnJHUy5jdG07DQorKwkJCQkJfQ0KKysJCQkJfQ0KKysJCQkJYnJlYWs7DQor KwkJCQljYXNlIFBkZk9wZXJhdG9yOjp3Og0KKysJCQkJCWN1cnJHUy5saW5lV2lkdGggPSBhcmdz WzBdLkdldFJlYWwoKTsNCisrCQkJCQlicmVhazsNCisrCQkJCWNhc2UgUGRmT3BlcmF0b3I6Oko6 DQorKwkJCQkJY3VyckdTLmxpbmVDYXAgPSBhcmdzWzBdLkdldE51bWJlcigpOw0KKysJCQkJCWJy ZWFrOw0KKysJCQkJY2FzZSBQZGZPcGVyYXRvcjo6ajoNCisrCQkJCQljdXJyR1MubGluZUpvaW4g PSBhcmdzWzBdLkdldE51bWJlcigpOw0KKysJCQkJCWJyZWFrOw0KKysJCQkJY2FzZSBQZGZPcGVy YXRvcjo6TToNCisrCQkJCQljdXJyR1MubGluZUpvaW4gPSBhcmdzWzBdLkdldFJlYWwoKTsNCisr CQkJCQlicmVhazsNCisrCQkJCWNhc2UgUGRmT3BlcmF0b3I6OmQ6DQorKwkJCQl7DQorKwkJCQkJ Y3VyckdTLmRhc2hQYXR0ZXJuLmZpcnN0LmNsZWFyKCk7DQorKwkJCQkJUGRmQXJyYXkgZGFzaEFy ciA9IGFyZ3NbMF0uR2V0QXJyYXkoKTsNCisrCQkJCQlmb3IgKHVpbnQgaSA9IDA7IGkgPCBkYXNo QXJyLnNpemUoKTsgKytpKQ0KKysJCQkJCQljdXJyR1MuZGFzaFBhdHRlcm4uZmlyc3QuYXBwZW5k KGRhc2hBcnJbaV0uR2V0TnVtYmVyKCkpOw0KKysJCQkJCWN1cnJHUy5kYXNoUGF0dGVybi5zZWNv bmQgPSBhcmdzWzFdLkdldE51bWJlcigpOw0KKysJCQkJfQ0KKysJCQkJYnJlYWs7DQorKwkJCQlj YXNlIFBkZk9wZXJhdG9yOjpnOg0KKysJCQkJCWlmICghdXNlZENvbG9yU3BhY2VzLmNvbnRhaW5z KENTX0RldmljZUdyYXkpKQ0KKysJCQkJCQl1c2VkQ29sb3JTcGFjZXMuYXBwZW5kKENTX0Rldmlj ZUdyYXkpOw0KKysJCQkJCWN1cnJHUy5maWxsQ1MgPSBDU19EZXZpY2VHcmF5Ow0KKysJCQkJCWN1 cnJHUy5maWxsQ29sb3IuY2xlYXIoKTsNCisrCQkJCQljdXJyR1MuZmlsbENvbG9yLmFwcGVuZChh cmdzWzBdLkdldFJlYWwoKSk7DQorKwkJCQkJYnJlYWs7DQorKwkJCQljYXNlIFBkZk9wZXJhdG9y OjpHOg0KKysJCQkJCWlmICghdXNlZENvbG9yU3BhY2VzLmNvbnRhaW5zKENTX0RldmljZUdyYXkp KQ0KKysJCQkJCQl1c2VkQ29sb3JTcGFjZXMuYXBwZW5kKENTX0RldmljZUdyYXkpOw0KKysJCQkJ CWN1cnJHUy5zdHJva2VDUyA9IENTX0RldmljZUdyYXk7DQorKwkJCQkJY3VyckdTLnN0cm9rZUNv bG9yLmNsZWFyKCk7DQorKwkJCQkJY3VyckdTLnN0cm9rZUNvbG9yLmFwcGVuZChhcmdzWzBdLkdl dFJlYWwoKSk7DQorKwkJCQkJYnJlYWs7DQorKwkJCQljYXNlIFBkZk9wZXJhdG9yOjpyZzoNCisr CQkJCQlpZiAoIXVzZWRDb2xvclNwYWNlcy5jb250YWlucyhDU19EZXZpY2VSR0IpKQ0KKysJCQkJ CQl1c2VkQ29sb3JTcGFjZXMuYXBwZW5kKENTX0RldmljZVJHQik7DQorKwkJCQkJY3VyckdTLmZp bGxDUyA9IENTX0RldmljZVJHQjsNCisrCQkJCQljdXJyR1MuZmlsbENvbG9yLmNsZWFyKCk7DQor KwkJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdzLnNpemUoKTsgKytpKQ0KKysJCQkJCQljdXJy R1MuZmlsbENvbG9yLmFwcGVuZChhcmdzW2ldLkdldFJlYWwoKSk7DQorKwkJCQkJYnJlYWs7DQor KwkJCQljYXNlIFBkZk9wZXJhdG9yOjpSRzoNCisrCQkJCQlpZiAoIXVzZWRDb2xvclNwYWNlcy5j b250YWlucyhDU19EZXZpY2VSR0IpKQ0KKysJCQkJCQl1c2VkQ29sb3JTcGFjZXMuYXBwZW5kKENT X0RldmljZVJHQik7DQorKwkJCQkJY3VyckdTLnN0cm9rZUNTID0gQ1NfRGV2aWNlUkdCOw0KKysJ CQkJCWN1cnJHUy5zdHJva2VDb2xvci5jbGVhcigpOw0KKysJCQkJCWZvciAoaW50IGkgPSAwOyBp IDwgYXJncy5zaXplKCk7ICsraSkNCisrCQkJCQkJY3VyckdTLnN0cm9rZUNvbG9yLmFwcGVuZChh cmdzW2ldLkdldFJlYWwoKSk7DQorKwkJCQkJYnJlYWs7DQorKwkJCQljYXNlIFBkZk9wZXJhdG9y OjprOg0KKysJCQkJCWlmICghdXNlZENvbG9yU3BhY2VzLmNvbnRhaW5zKENTX0RldmljZUNNWUsp KQ0KKysJCQkJCQl1c2VkQ29sb3JTcGFjZXMuYXBwZW5kKENTX0RldmljZUNNWUspOw0KKysJCQkJ CWN1cnJHUy5maWxsQ1MgPSBDU19EZXZpY2VDTVlLOw0KKysJCQkJCWN1cnJHUy5maWxsQ29sb3Iu Y2xlYXIoKTsNCisrCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyArK2kpDQor KwkJCQkJCWN1cnJHUy5maWxsQ29sb3IuYXBwZW5kKGFyZ3NbaV0uR2V0UmVhbCgpKTsNCisrCQkJ CQlicmVhazsNCisrCQkJCWNhc2UgUGRmT3BlcmF0b3I6Oks6DQorKwkJCQkJaWYgKCF1c2VkQ29s b3JTcGFjZXMuY29udGFpbnMoQ1NfRGV2aWNlQ01ZSykpDQorKwkJCQkJCXVzZWRDb2xvclNwYWNl cy5hcHBlbmQoQ1NfRGV2aWNlQ01ZSyk7DQorKwkJCQkJY3VyckdTLnN0cm9rZUNTID0gQ1NfRGV2 aWNlQ01ZSzsNCisrCQkJCQljdXJyR1Muc3Ryb2tlQ29sb3IuY2xlYXIoKTsNCisrCQkJCQlmb3Ig KGludCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyArK2kpDQorKwkJCQkJCWN1cnJHUy5zdHJva2VD b2xvci5hcHBlbmQoYXJnc1tpXS5HZXRSZWFsKCkpOw0KKysJCQkJCWJyZWFrOw0KKysJCQkJY2Fz ZSBQZGZPcGVyYXRvcjo6Y3M6DQorKwkJCQl7DQorKwkJCQkJaWYgKGFyZ3Muc2l6ZSgpID09IDEg JiYgYXJnc1swXS5Jc05hbWUoKSkNCisrCQkJCQl7DQorKwkJCQkJCWlmIChhcmdzWzBdLkdldE5h bWUoKSA9PSAiRGV2aWNlR3JheSIpDQorKwkJCQkJCXsNCisrCQkJCQkJCWN1cnJHUy5maWxsQ1Mg PSBDU19EZXZpY2VHcmF5Ow0KKysJCQkJCQkJY3VyckdTLmZpbGxDb2xvci5jbGVhcigpOw0KKysJ CQkJCQkJY3VyckdTLmZpbGxDb2xvci5hcHBlbmQoMCk7DQorKwkJCQkJCQlpZiAoIXVzZWRDb2xv clNwYWNlcy5jb250YWlucyhDU19EZXZpY2VHcmF5KSkNCisrCQkJCQkJCQl1c2VkQ29sb3JTcGFj ZXMuYXBwZW5kKENTX0RldmljZUdyYXkpOw0KKysJCQkJCQl9DQorKwkJCQkJCWVsc2UgaWYgKGFy Z3NbMF0uR2V0TmFtZSgpID09ICJEZXZpY2VSR0IiKQ0KKysJCQkJCQl7DQorKwkJCQkJCQljdXJy R1MuZmlsbENTID0gQ1NfRGV2aWNlUkdCOw0KKysJCQkJCQkJY3VyckdTLmZpbGxDb2xvci5jbGVh cigpOw0KKysJCQkJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpDQorKwkJCQkJCQkJY3Vy ckdTLmZpbGxDb2xvci5hcHBlbmQoMCk7DQorKwkJCQkJCQlpZiAoIXVzZWRDb2xvclNwYWNlcy5j b250YWlucyhDU19EZXZpY2VSR0IpKQ0KKysJCQkJCQkJCXVzZWRDb2xvclNwYWNlcy5hcHBlbmQo Q1NfRGV2aWNlUkdCKTsNCisrCQkJCQkJfQ0KKysJCQkJCQllbHNlIGlmIChhcmdzWzBdLkdldE5h bWUoKSA9PSAiRGV2aWNlQ01ZSyIpDQorKwkJCQkJCXsNCisrCQkJCQkJCWN1cnJHUy5maWxsQ1Mg PSBDU19EZXZpY2VDTVlLOw0KKysJCQkJCQkJY3VyckdTLmZpbGxDb2xvci5jbGVhcigpOw0KKysJ CQkJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpDQorKwkJCQkJCQkJY3VyckdTLmZpbGxD b2xvci5hcHBlbmQoMCk7DQorKwkJCQkJCQljdXJyR1MuZmlsbENvbG9yLmFwcGVuZCgxKTsNCisr CQkJCQkJCWlmICghdXNlZENvbG9yU3BhY2VzLmNvbnRhaW5zKENTX0RldmljZUNNWUspKQ0KKysJ CQkJCQkJCXVzZWRDb2xvclNwYWNlcy5hcHBlbmQoQ1NfRGV2aWNlQ01ZSyk7DQorKwkJCQkJCX0N CisrCQkJCQkJZWxzZSBpZiAoYXJnc1swXS5HZXROYW1lKCkgPT0gIlBhdHRlcm4iKQ0KKysJCQkJ CQl7DQorKwkJCQkJCQljdXJyR1MuZmlsbENTID0gQ1NfUGF0dGVybjsNCisrCQkJCQkJCWlmICgh dXNlZENvbG9yU3BhY2VzLmNvbnRhaW5zKENTX1BhdHRlcm4pKQ0KKysJCQkJCQkJCXVzZWRDb2xv clNwYWNlcy5hcHBlbmQoQ1NfUGF0dGVybik7DQorKwkJCQkJCX0NCisrCQkJCQkJZWxzZQ0KKysJ CQkJCQl7DQorKwkJCQkJCQlpZiAocHJvY2Vzc2VkTmFtZWRDUy5jb250YWlucyhhcmdzWzBdLkdl dE5hbWUoKSkpDQorKwkJCQkJCQl7DQorKwkJCQkJCQkJY3VyckdTLmZpbGxDUyA9IHByb2Nlc3Nl ZE5hbWVkQ1MudmFsdWUoYXJnc1swXS5HZXROYW1lKCkpOw0KKysJCQkJCQkJfQ0KKysJCQkJCQkJ ZWxzZQ0KKysJCQkJCQkJew0KKysJCQkJCQkJCWlmIChjb2xvclNwYWNlc0RpY3QgJiYgY29sb3JT cGFjZXNEaWN0LT5GaW5kS2V5KGFyZ3NbMF0uR2V0TmFtZSgpKSkNCisrCQkJCQkJCQl7DQorKwkJ CQkJCQkJCVBkZk9iamVjdCogY3NFbnRyeSA9IGNvbG9yU3BhY2VzRGljdC0+RmluZEtleShhcmdz WzBdLkdldE5hbWUoKSk7DQorKwkJCQkJCQkJCVBERkNvbG9yU3BhY2UgcmV0dmFsID0gZ2V0Q1NU eXBlKGNzRW50cnkpOw0KKysJCQkJCQkJCQlpZiAocmV0dmFsICE9IENTX1Vua25vd24gJiYgIXVz ZWRDb2xvclNwYWNlcy5jb250YWlucyhyZXR2YWwpKQ0KKysJCQkJCQkJCQkJdXNlZENvbG9yU3Bh Y2VzLmFwcGVuZChyZXR2YWwpOw0KKysJCQkJCQkJCQljdXJyR1MuZmlsbENTID0gcmV0dmFsOw0K KysJCQkJCQkJCQlwcm9jZXNzZWROYW1lZENTLmluc2VydChhcmdzWzBdLkdldE5hbWUoKSwgcmV0 dmFsKTsNCisrCQkJCQkJCQl9DQorKwkJCQkJCQkJZWxzZQ0KKysJCQkJCQkJCXsNCisrCQkJCQkJ CQkJcURlYnVnKCkgPDwgIlN1cHBsaWVkIGNvbG9yc3BhY2UgaXMgdW5kZWZpbmVkISBGaWxlOiIg PDwgbV9maWxlbmFtZTsNCisrCQkJCQkJCQkJcmV0dXJuIGZhbHNlOw0KKysJCQkJCQkJCX0NCisr CQkJCQkJCX0NCisrCQkJCQkJfQ0KKysJCQkJCX0NCisrCQkJCQllbHNlDQorKwkJCQkJew0KKysJ CQkJCQlxRGVidWcoKSA8PCAiV3Jvbmcgc3ludGF4IGluIHNwZWNpZnlpbmcgY29sb3Igc3BhY2Uh IEZpbGU6IiA8PCBtX2ZpbGVuYW1lOw0KKysJCQkJCQlyZXR1cm4gZmFsc2U7DQorKwkJCQkJfQ0K KysJCQkJfQ0KKysJCQkJYnJlYWs7DQorKwkJCQljYXNlIFBkZk9wZXJhdG9yOjpDUzoNCisrCQkJ CXsNCisrCQkJCQlpZiAoYXJncy5zaXplKCkgPT0gMSAmJiBhcmdzWzBdLklzTmFtZSgpKQ0KKysJ CQkJCXsNCisrCQkJCQkJaWYgKGFyZ3NbMF0uR2V0TmFtZSgpID09ICJEZXZpY2VHcmF5IikNCisr CQkJCQkJew0KKysJCQkJCQkJY3VyckdTLnN0cm9rZUNTID0gQ1NfRGV2aWNlR3JheTsNCisrCQkJ CQkJCWN1cnJHUy5zdHJva2VDb2xvci5jbGVhcigpOw0KKysJCQkJCQkJY3VyckdTLnN0cm9rZUNv bG9yLmFwcGVuZCgwKTsNCisrCQkJCQkJCWlmICghdXNlZENvbG9yU3BhY2VzLmNvbnRhaW5zKENT X0RldmljZUdyYXkpKQ0KKysJCQkJCQkJCXVzZWRDb2xvclNwYWNlcy5hcHBlbmQoQ1NfRGV2aWNl R3JheSk7DQorKwkJCQkJCX0NCisrCQkJCQkJZWxzZSBpZiAoYXJnc1swXS5HZXROYW1lKCkgPT0g IkRldmljZVJHQiIpDQorKwkJCQkJCXsNCisrCQkJCQkJCWN1cnJHUy5maWxsQ1MgPSBDU19EZXZp Y2VSR0I7DQorKwkJCQkJCQljdXJyR1Muc3Ryb2tlQ29sb3IuY2xlYXIoKTsNCisrCQkJCQkJCWZv ciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKQ0KKysJCQkJCQkJCWN1cnJHUy5zdHJva2VDb2xvci5h cHBlbmQoMCk7DQorKwkJCQkJCQlpZiAoIXVzZWRDb2xvclNwYWNlcy5jb250YWlucyhDU19EZXZp Y2VSR0IpKQ0KKysJCQkJCQkJCXVzZWRDb2xvclNwYWNlcy5hcHBlbmQoQ1NfRGV2aWNlUkdCKTsN CisrCQkJCQkJfQ0KKysJCQkJCQllbHNlIGlmIChhcmdzWzBdLkdldE5hbWUoKSA9PSAiRGV2aWNl Q01ZSyIpDQorKwkJCQkJCXsNCisrCQkJCQkJCWN1cnJHUy5maWxsQ1MgPSBDU19EZXZpY2VDTVlL Ow0KKysJCQkJCQkJY3VyckdTLnN0cm9rZUNvbG9yLmNsZWFyKCk7DQorKwkJCQkJCQlmb3IgKGlu dCBpID0gMDsgaSA8IDM7ICsraSkNCisrCQkJCQkJCQljdXJyR1Muc3Ryb2tlQ29sb3IuYXBwZW5k KDApOw0KKysJCQkJCQkJY3VyckdTLnN0cm9rZUNvbG9yLmFwcGVuZCgxKTsNCisrCQkJCQkJCWlm ICghdXNlZENvbG9yU3BhY2VzLmNvbnRhaW5zKENTX0RldmljZUNNWUspKQ0KKysJCQkJCQkJCXVz ZWRDb2xvclNwYWNlcy5hcHBlbmQoQ1NfRGV2aWNlQ01ZSyk7DQorKwkJCQkJCX0NCisrCQkJCQkJ ZWxzZSBpZiAoYXJnc1swXS5HZXROYW1lKCkgPT0gIlBhdHRlcm4iKQ0KKysJCQkJCQl7DQorKwkJ CQkJCQljdXJyR1MuZmlsbENTID0gQ1NfUGF0dGVybjsNCisrCQkJCQkJCWlmICghdXNlZENvbG9y U3BhY2VzLmNvbnRhaW5zKENTX1BhdHRlcm4pKQ0KKysJCQkJCQkJCXVzZWRDb2xvclNwYWNlcy5h cHBlbmQoQ1NfUGF0dGVybik7DQorKwkJCQkJCX0NCisrCQkJCQkJZWxzZQ0KKysJCQkJCQl7DQor KwkJCQkJCQlpZiAocHJvY2Vzc2VkTmFtZWRDUy5jb250YWlucyhhcmdzWzBdLkdldE5hbWUoKSkp DQorKwkJCQkJCQl7DQorKwkJCQkJCQkJY3VyckdTLnN0cm9rZUNTID0gcHJvY2Vzc2VkTmFtZWRD Uy52YWx1ZShhcmdzWzBdLkdldE5hbWUoKSk7DQorKwkJCQkJCQl9DQorKwkJCQkJCQllbHNlDQor KwkJCQkJCQl7DQorKwkJCQkJCQkJaWYgKGNvbG9yU3BhY2VzRGljdCAmJiBjb2xvclNwYWNlc0Rp Y3QtPkZpbmRLZXkoYXJnc1swXS5HZXROYW1lKCkpKQ0KKysJCQkJCQkJCXsNCisrCQkJCQkJCQkJ UGRmT2JqZWN0KiBjc0VudHJ5ID0gY29sb3JTcGFjZXNEaWN0LT5GaW5kS2V5KGFyZ3NbMF0uR2V0 TmFtZSgpKTsNCisrCQkJCQkJCQkJUERGQ29sb3JTcGFjZSByZXR2YWwgPSBnZXRDU1R5cGUoY3NF bnRyeSk7DQorKwkJCQkJCQkJCWlmIChyZXR2YWwgIT0gQ1NfVW5rbm93biAmJiAhdXNlZENvbG9y U3BhY2VzLmNvbnRhaW5zKHJldHZhbCkpDQorKwkJCQkJCQkJCQl1c2VkQ29sb3JTcGFjZXMuYXBw ZW5kKHJldHZhbCk7DQorKwkJCQkJCQkJCWN1cnJHUy5zdHJva2VDUyA9IHJldHZhbDsNCisrCQkJ CQkJCQkJcHJvY2Vzc2VkTmFtZWRDUy5pbnNlcnQoYXJnc1swXS5HZXROYW1lKCksIHJldHZhbCk7 DQorKwkJCQkJCQkJfQ0KKysJCQkJCQkJCWVsc2UNCisrCQkJCQkJCQl7DQorKwkJCQkJCQkJCXFE ZWJ1ZygpIDw8ICJTdXBwbGllZCBjb2xvcnNwYWNlIGlzIHVuZGVmaW5lZCEgRmlsZToiIDw8IG1f ZmlsZW5hbWU7DQorKwkJCQkJCQkJCXJldHVybiBmYWxzZTsNCisrCQkJCQkJCQl9DQorKwkJCQkJ CQl9DQorKwkJCQkJCX0NCisrCQkJCQl9DQorKwkJCQkJZWxzZQ0KKysJCQkJCXsNCisrCQkJCQkJ cURlYnVnKCkgPDwgIldyb25nIHN5bnRheCBpbiBzcGVjaWZ5aW5nIGNvbG9yIHNwYWNlISBGaWxl OiIgPDwgbV9maWxlbmFtZTsNCisrCQkJCQkJcmV0dXJuIGZhbHNlOw0KKysJCQkJCX0NCisrCQkJ CX0NCisrCQkJCWJyZWFrOw0KKysJCQkJY2FzZSBQZGZPcGVyYXRvcjo6c2M6DQorKwkJCQkJY3Vy ckdTLmZpbGxDb2xvci5jbGVhcigpOw0KKysJCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5z aXplKCk7ICsraSkNCisrCQkJCQkJY3VyckdTLmZpbGxDb2xvci5hcHBlbmQoYXJnc1tpXS5HZXRS ZWFsKCkpOw0KKysJCQkJCWJyZWFrOw0KKysJCQkJY2FzZSBQZGZPcGVyYXRvcjo6U0M6DQorKwkJ CQkJY3VyckdTLnN0cm9rZUNvbG9yLmNsZWFyKCk7DQorKwkJCQkJZm9yIChpbnQgaSA9IDA7IGkg PCBhcmdzLnNpemUoKTsgKytpKQ0KKysJCQkJCQljdXJyR1Muc3Ryb2tlQ29sb3IuYXBwZW5kKGFy Z3NbaV0uR2V0UmVhbCgpKTsNCisrCQkJCQlicmVhazsNCisrCQkJCWNhc2UgUGRmT3BlcmF0b3I6 OnNjbjoNCisrCQkJCQljdXJyR1MuZmlsbENvbG9yLmNsZWFyKCk7DQorKwkJCQkJZm9yIChpbnQg aSA9IDA7IGkgPCBhcmdzLnNpemUoKTsgKytpKQ0KKysJCQkJCXsNCisrCQkJCQkJaWYgKGFyZ3Nb aV0uSXNSZWFsU3RyaWN0KCkgfHwgYXJnc1tpXS5Jc051bWJlcigpKQ0KKysJCQkJCQkJY3VyckdT LmZpbGxDb2xvci5hcHBlbmQoYXJnc1tpXS5HZXRSZWFsKCkpOw0KKysJCQkJCX0NCisrCQkJCQli cmVhazsNCisrCQkJCWNhc2UgUGRmT3BlcmF0b3I6OlNDTjoNCisrCQkJCQljdXJyR1Muc3Ryb2tl Q29sb3IuY2xlYXIoKTsNCisrCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyAr K2kpDQorKwkJCQkJew0KKysJCQkJCQlpZiAoYXJnc1tpXS5Jc1JlYWxTdHJpY3QoKSB8fCBhcmdz W2ldLklzTnVtYmVyKCkpDQorKwkJCQkJCQljdXJyR1Muc3Ryb2tlQ29sb3IuYXBwZW5kKGFyZ3Nb aV0uR2V0UmVhbCgpKTsNCisrCQkJCQl9DQorKwkJCQkJYnJlYWs7DQorKwkJCQljYXNlIFBkZk9w ZXJhdG9yOjpEbzogLy8gaW1hZ2Ugb3IgZm9ybSBYT2JqZWN0DQorKwkJCQkJLy8gSGFuZGxlZCBp biBQZGZDb250ZW50VHlwZTo6RG9YT2JqZWN0DQorKwkJCQkJYnJlYWs7DQorKwkJCQljYXNlIFBk Zk9wZXJhdG9yOjpCSToNCisrCQkJCQlpbmxpbmVJbWdEaWN0ID0gdHJ1ZTsNCisrCQkJCQlicmVh azsNCisrCQkJCWNhc2UgUGRmT3BlcmF0b3I6OklEOg0KKysJCQkJCWlmIChpbmxpbmVJbWdEaWN0 KQ0KKysJCQkJCXsNCisrCQkJCQkJUGRmTmFtZSBjb2xvcnNwYWNlKCJDb2xvclNwYWNlIik7DQor KwkJCQkJCVBkZk5hbWUgY3MoIkNTIik7DQorKwkJCQkJCWlmIChhcmdzLmNvbnRhaW5zKGNvbG9y c3BhY2UpIHx8IGFyZ3MuY29udGFpbnMoY3MpKQ0KKysJCQkJCQl7DQorKwkJCQkJCQlpbnQgY3NJ ZHggPSBhcmdzLmNvbnRhaW5zKGNvbG9yc3BhY2UpID8gYXJncy5pbmRleE9mKGNvbG9yc3BhY2Up IDogYXJncy5pbmRleE9mKGNzKTsNCisrCQkJCQkJCWlmIChhcmdzW2NzSWR4ICsgMV0uSXNOYW1l KCkpDQorKwkJCQkJCQl7DQorKwkJCQkJCQkJUGRmTmFtZSBjc05hbWUgPSBhcmdzW2NzSWR4ICsg MV0uR2V0TmFtZSgpOw0KKysJCQkJCQkJCWlmICgoY3NOYW1lID09ICJHIiB8fCBjc05hbWUgPT0g IkRldmljZUdyYXkiKSAmJiAhdXNlZENvbG9yU3BhY2VzLmNvbnRhaW5zKENTX0RldmljZUdyYXkp KQ0KKysJCQkJCQkJCQl1c2VkQ29sb3JTcGFjZXMuYXBwZW5kKENTX0RldmljZUdyYXkpOw0KKysJ CQkJCQkJCWVsc2UgaWYgKChjc05hbWUgPT0gIlJHQiIgfHwgY3NOYW1lID09ICJEZXZpY2VSR0Ii KSAmJiAhdXNlZENvbG9yU3BhY2VzLmNvbnRhaW5zKENTX0RldmljZVJHQikpDQorKwkJCQkJCQkJ CXVzZWRDb2xvclNwYWNlcy5hcHBlbmQoQ1NfRGV2aWNlUkdCKTsNCisrCQkJCQkJCQllbHNlIGlm ICgoY3NOYW1lID09ICJDTVlLIiB8fCBjc05hbWUgPT0gIkRldmljZUNNWUsiKSAmJiAhdXNlZENv bG9yU3BhY2VzLmNvbnRhaW5zKENTX0RldmljZUNNWUspKQ0KKysJCQkJCQkJCQl1c2VkQ29sb3JT cGFjZXMuYXBwZW5kKENTX0RldmljZUNNWUspOw0KKysJCQkJCQkJCWVsc2UgaWYgKCFwcm9jZXNz ZWROYW1lZENTLmNvbnRhaW5zKGNzTmFtZSkpDQorKwkJCQkJCQkJew0KKysJCQkJCQkJCQlpZiAo Y29sb3JTcGFjZXNEaWN0ICYmIGNvbG9yU3BhY2VzRGljdC0+RmluZEtleShjc05hbWUpKQ0KKysJ CQkJCQkJCQl7DQorKwkJCQkJCQkJCQlQZGZPYmplY3QqIGNzRW50cnkgPSBjb2xvclNwYWNlc0Rp Y3QtPkZpbmRLZXkoY3NOYW1lKTsNCisrCQkJCQkJCQkJCWlmIChjc0VudHJ5KQ0KKysJCQkJCQkJ CQkJew0KKysJCQkJCQkJCQkJCVBERkNvbG9yU3BhY2UgcmV0dmFsID0gZ2V0Q1NUeXBlKGNzRW50 cnkpOw0KKysJCQkJCQkJCQkJCWlmIChyZXR2YWwgIT0gQ1NfVW5rbm93biAmJiAhdXNlZENvbG9y U3BhY2VzLmNvbnRhaW5zKHJldHZhbCkpDQorKwkJCQkJCQkJCQkJCXVzZWRDb2xvclNwYWNlcy5h cHBlbmQocmV0dmFsKTsNCisrCQkJCQkJCQkJCQlwcm9jZXNzZWROYW1lZENTLmluc2VydChjc05h bWUsIHJldHZhbCk7DQorKwkJCQkJCQkJCQl9DQorKwkJCQkJCQkJCX0NCisrCQkJCQkJCQkJZWxz ZQ0KKysJCQkJCQkJCQl7DQorKwkJCQkJCQkJCQlxRGVidWcoKSA8PCAiU3VwcGxpZWQgY29sb3Jz cGFjZSBmb3IgaW5saW5lIGltYWdlIGlzIHVuZGVmaW5lZCEiOw0KKysJCQkJCQkJCQkJcmV0dXJu IGZhbHNlOw0KKysJCQkJCQkJCQl9DQorKwkJCQkJCQkJfQ0KKysJCQkJCQkJfQ0KKysJCQkJCQl9 DQorKwkJCQkJCVBkZk5hbWUgaGVpZ2h0KCJIZWlnaHQiKTsNCisrCQkJCQkJUGRmTmFtZSBoKCJI Iik7DQorKwkJCQkJCVBkZk5hbWUgd2lkdGgoIldpZHRoIik7DQorKwkJCQkJCVBkZk5hbWUgdygi VyIpOw0KKysJCQkJCQlpZiAoKGFyZ3MuY29udGFpbnMoaGVpZ2h0KSB8fCBhcmdzLmNvbnRhaW5z KGgpKSAmJiAoYXJncy5jb250YWlucyh3aWR0aCkgfHwgYXJncy5jb250YWlucyh3KSkpDQorKwkJ CQkJCXsNCisrCQkJCQkJCWludCBoZWlnaHRJZHggPSBhcmdzLmNvbnRhaW5zKGhlaWdodCkgPyBh cmdzLmluZGV4T2YoaGVpZ2h0KSA6IGFyZ3MuaW5kZXhPZihoKTsNCisrCQkJCQkJCWludCB3aWR0 aElkeCA9IGFyZ3MuY29udGFpbnMod2lkdGgpID8gYXJncy5pbmRleE9mKHdpZHRoKSA6IGFyZ3Mu aW5kZXhPZih3KTsNCisrCQkJCQkJCWRvdWJsZSBoZWlnaHQgPSBhcmdzW2hlaWdodElkeCArIDFd LkdldFJlYWwoKTsNCisrCQkJCQkJCWRvdWJsZSB3aWR0aCA9IGFyZ3Nbd2lkdGhJZHggKyAxXS5H ZXRSZWFsKCk7DQorKwkJCQkJCQlQREZJbWFnZSBpbWc7DQorKwkJCQkJCQlpbWcuaW1nTmFtZSA9 ICJJbmxpbmUgSW1hZ2UiOw0KKysJCQkJCQkJaW1nLmRwaVggPSBxUm91bmQod2lkdGggLyAoY3Vy ckdTLmN0bS5tMTEoKSAvIDcyKSk7DQorKwkJCQkJCQlpbWcuZHBpWSA9IHFSb3VuZChoZWlnaHQg LyAoY3VyckdTLmN0bS5tMjIoKSAvIDcyKSk7DQorKwkJCQkJCQlpbWdzLmFwcGVuZChpbWcpOw0K KysJCQkJCQl9DQorKwkJCQkJCWlubGluZUltZ0RpY3QgPSBmYWxzZTsNCisrCQkJCQl9DQorKwkJ CQkJYnJlYWs7DQorKwkJCQljYXNlIFBkZk9wZXJhdG9yOjpnczoNCisrCQkJCXsNCisrCQkJCQlp ZiAoIXByb2Nlc3NlZE5hbWVkR1MuY29udGFpbnMoYXJnc1swXS5HZXROYW1lKCkpKQ0KKysJCQkJ CXsNCisrCQkJCQkJaWYgKGFyZ3Muc2l6ZSgpID09IDEgJiYgYXJnc1swXS5Jc05hbWUoKSAmJiBl eHRHU3RhdGVzRGljdCkNCisrCQkJCQkJew0KKysJCQkJCQkJUGRmT2JqZWN0KiBleHRHU3RhdGVP YmogPSBleHRHU3RhdGVzRGljdC0+RmluZEtleShhcmdzWzBdLkdldE5hbWUoKSk7DQorKwkJCQkJ CQlpZiAoZXh0R1N0YXRlT2JqKQ0KKysJCQkJCQkJew0KKysJCQkJCQkJCWluc3BlY3RFeHRHU3Rh dGVPYmooZXh0R1N0YXRlT2JqLCB1c2VkQ29sb3JTcGFjZXMsIGhhc1RyYW5zcGFyZW5jeSwgdXNl ZEZvbnRzLCBjdXJyR1MpOw0KKysJCQkJCQkJfQ0KKysJCQkJCQkJZWxzZQ0KKysJCQkJCQkJew0K KysJCQkJCQkJCXFEZWJ1ZygpIDw8ICJOYW1lZCBncmFwaGljIHN0YXRlIHVzZWQgd2l0aCBncyBv cGVyYXRvciBpcyB1bmRlZmluZWQgaW4gY3VycmVudCBFeHRHU3RhdGUuIEZpbGU6IiA8PCBtX2Zp bGVuYW1lOw0KKysJCQkJCQkJCXJldHVybiBmYWxzZTsNCisrCQkJCQkJCX0NCisrCQkJCQkJCXBy b2Nlc3NlZE5hbWVkR1MuYXBwZW5kKGFyZ3NbMF0uR2V0TmFtZSgpKTsNCisrCQkJCQkJfQ0KKysJ CQkJCQllbHNlDQorKwkJCQkJCXsNCisrCQkJCQkJCXFEZWJ1ZygpIDw8ICJXcm9uZyBzeW50YXgg aW4gYXBwbHlpbmcgZXh0ZW5kZWQgZ3JhcGhpYyBzdGF0ZSAoZ3Mgb3BlcmF0b3IpIG9yIHRoZXJl J3Mgbm8gRXh0R1N0YXRlIGRlZmluZWQhIEZpbGU6IiA8PCBtX2ZpbGVuYW1lOw0KKysJCQkJCQkJ cmV0dXJuIGZhbHNlOw0KKysJCQkJCQl9DQorKwkJCQkJfQ0KKysJCQkJfQ0KKysJCQkJYnJlYWs7 DQorKwkJCQljYXNlIFBkZk9wZXJhdG9yOjpUZjoNCisrCQkJCXsNCisrCQkJCQlpZiAocHJvY2Vz c2VkTmFtZWRGb250LmNvbnRhaW5zKGFyZ3NbMF0uR2V0TmFtZSgpKSkNCisrCQkJCQl7DQorKwkJ CQkJCWN1cnJHUy5mb250LmZpcnN0ID0gcHJvY2Vzc2VkTmFtZWRGb250LnZhbHVlKGFyZ3NbMF0u R2V0TmFtZSgpKTsNCisrCQkJCQkJY3VyckdTLmZvbnQuc2Vjb25kID0gYXJnc1sxXS5HZXRSZWFs KCk7DQorKwkJCQkJfQ0KKysJCQkJCWVsc2UNCisrCQkJCQl7DQorKwkJCQkJCWlmIChhcmdzLnNp emUoKSA9PSAyICYmIGFyZ3NbMF0uSXNOYW1lKCkgJiYgZm9udHNEaWN0KQ0KKysJCQkJCQl7DQor KwkJCQkJCQlQZGZPYmplY3QqIGZvbnRPYmogPSBmb250c0RpY3QtPkZpbmRLZXkoYXJnc1swXS5H ZXROYW1lKCkpOw0KKysJCQkJCQkJaWYgKGZvbnRPYmopDQorKwkJCQkJCQl7DQorKwkJCQkJCQkJ UERGRm9udCByZXR2YWwgPSBnZXRGb250SW5mbyhmb250T2JqKTsNCisrCQkJCQkJCQl1c2VkRm9u dHMuYXBwZW5kKHJldHZhbCk7DQorKwkJCQkJCQkJcHJvY2Vzc2VkTmFtZWRGb250Lmluc2VydChh cmdzWzBdLkdldE5hbWUoKSwgcmV0dmFsKTsNCisrCQkJCQkJCQljdXJyR1MuZm9udC5maXJzdCA9 IHJldHZhbDsNCisrCQkJCQkJCQljdXJyR1MuZm9udC5zZWNvbmQgPSBhcmdzWzFdLkdldFJlYWwo KTsNCisrCQkJCQkJCX0NCisrCQkJCQkJCWVsc2UNCisrCQkJCQkJCXsNCisrCQkJCQkJCQlxRGVi dWcoKSA8PCAiVGhlIHNwZWNpZmllZCBmb250IGNhbm5vdCBiZSBmb3VuZCBpbiBjdXJyZW50IFJl c291cmNlcyEgRmlsZToiIDw8IG1fZmlsZW5hbWU7DQorKwkJCQkJCQkJcmV0dXJuIGZhbHNlOw0K KysJCQkJCQkJfQ0KKysJCQkJCQl9DQorKwkJCQkJCWVsc2UNCisrCQkJCQkJew0KKysJCQkJCQkJ cURlYnVnKCkgPDwgIldyb25nIHN5bnRheCBpbiB1c2Ugb2YgVGYgb3BlcmF0b3Igb3IgdGhlcmUn cyBubyBGb250IGRlZmluZWQgaW4gY3VycmVudCBSZXNvdXJjZXMgZGljdGlvbmFyeSEgRmlsZToi IDw8IG1fZmlsZW5hbWU7DQorKwkJCQkJCQlyZXR1cm4gZmFsc2U7DQorKwkJCQkJCX0NCisrCQkJ CQl9DQorKwkJCQl9DQorKwkJCQlicmVhazsNCisrCQkJCWNhc2UgUGRmT3BlcmF0b3I6OlVua25v d246DQorKwkJCQlkZWZhdWx0Og0KKysJCQkJCWJyZWFrOw0KKysJCQkJfQ0KKysJCQkJYXJncy5j bGVhcigpOw0KKysJCQl9DQorKwkJCWlmIChwZGZDb250ZW50LlR5cGUgPT0gUGRmQ29udGVudFR5 cGU6OkRvWE9iamVjdCkNCisrCQkJew0KKysJCQkJYXJncy5jbGVhcigpOw0KKysJCQkJaW50IHN0 YWNrU2l6ZSA9IHBkZkNvbnRlbnQuU3RhY2suc2l6ZSgpOw0KKysJCQkJZm9yIChzaXplX3QgaSA9 IDA7IGkgPCBzdGFja1NpemU7ICsraSkNCisrCQkJCQlhcmdzLmFwcGVuZChwZGZDb250ZW50LlN0 YWNrW3N0YWNrU2l6ZSAtIDEgLSBpXSk7DQorKwkJCQlpZiAoIXByb2Nlc3NlZE5hbWVkWE9iai5j b250YWlucyhhcmdzWzBdLkdldE5hbWUoKSkpDQorKwkJCQl7DQorKwkJCQkJaWYgKGFyZ3Muc2l6 ZSgpID09IDEgJiYgYXJnc1swXS5Jc05hbWUoKSAmJiB4T2JqZWN0c0RpY3QpDQorKwkJCQkJew0K KysJCQkJCQlQZGZPYmplY3QqIHhPYmplY3QgPSB4T2JqZWN0c0RpY3QtPkZpbmRLZXkoYXJnc1sw XS5HZXROYW1lKCkpOw0KKysJCQkJCQlQZGZEaWN0aW9uYXJ5KiB4T2JqZWN0RGljdCA9ICh4T2Jq ZWN0ICYmIHhPYmplY3QtPklzRGljdGlvbmFyeSgpKSA/ICYoeE9iamVjdC0+R2V0RGljdGlvbmFy eSgpKSA6IG51bGxwdHI7DQorKwkJCQkJCVBkZk9iamVjdCogc3VidHlwZU9iamVjdCA9IHhPYmpl Y3REaWN0ID8geE9iamVjdERpY3QtPkZpbmRLZXkoIlN1YnR5cGUiKSA6IG51bGxwdHI7DQorKwkJ CQkJCWlmIChzdWJ0eXBlT2JqZWN0ICYmIHN1YnR5cGVPYmplY3QtPklzTmFtZSgpKQ0KKysJCQkJ CQl7DQorKwkJCQkJCQlpZiAoc3VidHlwZU9iamVjdC0+R2V0TmFtZSgpID09ICJJbWFnZSIpDQor KwkJCQkJCQl7DQorKwkJCQkJCQkJUGRmT2JqZWN0KiBpbWdDb2xvclNwYWNlID0geE9iamVjdERp Y3QtPkZpbmRLZXkoIkNvbG9yU3BhY2UiKTsNCisrCQkJCQkJCQlpZiAoaW1nQ29sb3JTcGFjZSkN CisrCQkJCQkJCQl7DQorKwkJCQkJCQkJCVBERkNvbG9yU3BhY2UgcmV0dmFsID0gZ2V0Q1NUeXBl KGltZ0NvbG9yU3BhY2UpOw0KKysJCQkJCQkJCQlpZiAocmV0dmFsICE9IENTX1Vua25vd24gJiYg IXVzZWRDb2xvclNwYWNlcy5jb250YWlucyhyZXR2YWwpKQ0KKysJCQkJCQkJCQkJdXNlZENvbG9y U3BhY2VzLmFwcGVuZChyZXR2YWwpOw0KKysJCQkJCQkJCX0NCisrCQkJCQkJCQlQZGZPYmplY3Qq IHNNYXNrT2JqID0geE9iamVjdERpY3QtPkZpbmRLZXkoIlNNYXNrIik7DQorKwkJCQkJCQkJaWYg KHNNYXNrT2JqKQ0KKysJCQkJCQkJCQloYXNUcmFuc3BhcmVuY3kgPSB0cnVlOw0KKysJCQkJCQkJ CVBERkltYWdlIGltZzsNCisrCQkJCQkJCQlpbWcuaW1nTmFtZSA9IGFyZ3NbMF0uR2V0TmFtZSgp LkdldEVzY2FwZWROYW1lKCkuY19zdHIoKTsNCisrCQkJCQkJCQlkb3VibGUgd2lkdGggPSB4T2Jq ZWN0RGljdC0+RmluZEtleSgiV2lkdGgiKS0+R2V0UmVhbCgpOw0KKysJCQkJCQkJCWRvdWJsZSBo ZWlnaHQgPSB4T2JqZWN0RGljdC0+RmluZEtleSgiSGVpZ2h0IiktPkdldFJlYWwoKTsNCisrCQkJ CQkJCQlpbWcuZHBpWCA9IHFSb3VuZCh3aWR0aCAvIChjdXJyR1MuY3RtLm0xMSgpIC8gNzIpKTsN CisrCQkJCQkJCQlpbWcuZHBpWSA9IHFSb3VuZChoZWlnaHQgLyAoY3VyckdTLmN0bS5tMjIoKSAv IDcyKSk7DQorKwkJCQkJCQkJaW1ncy5hcHBlbmQoaW1nKTsNCisrCQkJCQkJCX0NCisrCQkJCQkJ CWVsc2UgaWYgKHN1YnR5cGVPYmplY3QtPkdldE5hbWUoKSA9PSAiRm9ybSIpDQorKwkJCQkJCQl7 DQorKwkJCQkJCQkJc3RkOjp1bmlxdWVfcHRyPFBkZlhPYmplY3RGb3JtPiB4T2JqOw0KKysJCQkJ CQkJCVBkZlhPYmplY3Q6OlRyeUNyZWF0ZUZyb21PYmplY3QoKnhPYmplY3QsIHhPYmopOw0KKysJ CQkJCQkJCWluc3BlY3RDYW52YXMoeE9iai5nZXQoKSwgdXNlZENvbG9yU3BhY2VzLCBoYXNUcmFu c3BhcmVuY3ksIHVzZWRGb250cywgaW1ncyk7IC8vIHJlY3Vyc2l2ZSBjYWxsDQorKwkJCQkJCQl9 DQorKwkJCQkJCX0NCisrCQkJCQkJZWxzZQ0KKysJCQkJCQl7DQorKwkJCQkJCQlxRGVidWcoKSA8 PCAiU3VwcGxpZWQgZXh0ZXJuYWwgb2JqZWN0IGlzIHVuZGVmaW5lZCEgRmlsZToiIDw8IG1fZmls ZW5hbWU7DQorKwkJCQkJCQlyZXR1cm4gZmFsc2U7DQorKwkJCQkJCX0NCisrCQkJCQkJcHJvY2Vz c2VkTmFtZWRYT2JqLmFwcGVuZChhcmdzWzBdLkdldE5hbWUoKSk7DQorKwkJCQkJfQ0KKysJCQkJ CWVsc2UNCisrCQkJCQl7DQorKwkJCQkJCXFEZWJ1ZygpIDw8ICJXcm9uZyBzeW50YXggZm9yIERv IG9wZXJhdG9yIG9yIHRoZXJlJ3Mgbm8gWE9iamVjdCBkZWZpbmVkISBGaWxlOiIgPDwgbV9maWxl bmFtZTsNCisrCQkJCQkJcmV0dXJuIGZhbHNlOw0KKysJCQkJCX0NCisrCQkJCX0NCisrCQkJfQ0K KysJCX0NCisrI2Vsc2UNCisgCQkvLyBzdGFydCBwYXJzaW5nIHRoZSBjb250ZW50IHN0cmVhbQ0K KyAJCVBkZkNvbnRlbnRzVG9rZW5pemVyIHRva2VuaXplcihjYW52YXMpOw0KKyAJCUVQZGZDb250 ZW50c1R5cGUgdDsNCitAQCAtMjY5LDcgKzc1OSw3IEBAIGJvb2wgUERGQW5hbHl6ZXI6Omluc3Bl Y3RDYW52YXMoUGRmQ2FudmEKKyAJCQkJCWlmIChhcmdzLnNpemUoKSA9PSA2KQ0KKyAJCQkJCXsN CisgCQkJCQkJZG91YmxlIG10WzZdOw0KKy0JCQkJCQlmb3IgKGludCBpPTA7IGk8NjsgKytpKQ0K KysJCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IDY7ICsraSkNCisgCQkJCQkJew0KKyAJCQkJCQkJ bXRbaV0gPSBhcmdzW2ldLkdldFJlYWwoKTsNCisgCQkJCQkJfQ0KK0BAIC0yOTQsNyArNzg0LDcg QEAgYm9vbCBQREZBbmFseXplcjo6aW5zcGVjdENhbnZhcyhQZGZDYW52YQorIAkJCQkJew0KKyAJ CQkJCWN1cnJHUy5kYXNoUGF0dGVybi5maXJzdC5jbGVhcigpOw0KKyAJCQkJCVBkZkFycmF5IGRh c2hBcnIgPSBhcmdzWzBdLkdldEFycmF5KCk7DQorLQkJCQkJZm9yICh1aW50IGk9MDsgaTxkYXNo QXJyLnNpemUoKTsgKytpKQ0KKysJCQkJCWZvciAodWludCBpID0gMDsgaSA8IGRhc2hBcnIuc2l6 ZSgpOyArK2kpDQorIAkJCQkJCWN1cnJHUy5kYXNoUGF0dGVybi5maXJzdC5hcHBlbmQoZGFzaEFy cltpXS5HZXROdW1iZXIoKSk7DQorIAkJCQkJY3VyckdTLmRhc2hQYXR0ZXJuLnNlY29uZCA9IGFy Z3NbMV0uR2V0TnVtYmVyKCk7DQorIAkJCQkJfQ0KK0BAIC0zMTgsNyArODA4LDcgQEAgYm9vbCBQ REZBbmFseXplcjo6aW5zcGVjdENhbnZhcyhQZGZDYW52YQorIAkJCQkJCXVzZWRDb2xvclNwYWNl cy5hcHBlbmQoQ1NfRGV2aWNlUkdCKTsNCisgCQkJCQljdXJyR1MuZmlsbENTID0gQ1NfRGV2aWNl UkdCOw0KKyAJCQkJCWN1cnJHUy5maWxsQ29sb3IuY2xlYXIoKTsNCistCQkJCQlmb3IgKGludCBp PTA7IGk8YXJncy5zaXplKCk7ICsraSkNCisrCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IGFyZ3Mu c2l6ZSgpOyArK2kpDQorIAkJCQkJCWN1cnJHUy5maWxsQ29sb3IuYXBwZW5kKGFyZ3NbaV0uR2V0 UmVhbCgpKTsNCisgCQkJCQlicmVhazsNCisgCQkJCWNhc2UgS1dfUkc6DQorQEAgLTMyNiw3ICs4 MTYsNyBAQCBib29sIFBERkFuYWx5emVyOjppbnNwZWN0Q2FudmFzKFBkZkNhbnZhCisgCQkJCQkJ dXNlZENvbG9yU3BhY2VzLmFwcGVuZChDU19EZXZpY2VSR0IpOw0KKyAJCQkJCWN1cnJHUy5zdHJv a2VDUyA9IENTX0RldmljZVJHQjsNCisgCQkJCQljdXJyR1Muc3Ryb2tlQ29sb3IuY2xlYXIoKTsN CistCQkJCQlmb3IgKGludCBpPTA7IGk8YXJncy5zaXplKCk7ICsraSkNCisrCQkJCQlmb3IgKGlu dCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyArK2kpDQorIAkJCQkJCWN1cnJHUy5zdHJva2VDb2xv ci5hcHBlbmQoYXJnc1tpXS5HZXRSZWFsKCkpOw0KKyAJCQkJCWJyZWFrOw0KKyAJCQkJY2FzZSBL V19rOg0KK0BAIC0zMzQsNyArODI0LDcgQEAgYm9vbCBQREZBbmFseXplcjo6aW5zcGVjdENhbnZh cyhQZGZDYW52YQorIAkJCQkJCXVzZWRDb2xvclNwYWNlcy5hcHBlbmQoQ1NfRGV2aWNlQ01ZSyk7 DQorIAkJCQkJY3VyckdTLmZpbGxDUyA9IENTX0RldmljZUNNWUs7DQorIAkJCQkJY3VyckdTLmZp bGxDb2xvci5jbGVhcigpOw0KKy0JCQkJCWZvciAoaW50IGk9MDsgaTxhcmdzLnNpemUoKTsgKytp KQ0KKysJCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5zaXplKCk7ICsraSkNCisgCQkJCQkJ Y3VyckdTLmZpbGxDb2xvci5hcHBlbmQoYXJnc1tpXS5HZXRSZWFsKCkpOw0KKyAJCQkJCWJyZWFr Ow0KKyAJCQkJY2FzZSBLV19LOg0KK0BAIC0zNDIsNyArODMyLDcgQEAgYm9vbCBQREZBbmFseXpl cjo6aW5zcGVjdENhbnZhcyhQZGZDYW52YQorIAkJCQkJCXVzZWRDb2xvclNwYWNlcy5hcHBlbmQo Q1NfRGV2aWNlQ01ZSyk7DQorIAkJCQkJY3VyckdTLnN0cm9rZUNTID0gQ1NfRGV2aWNlQ01ZSzsN CisgCQkJCQljdXJyR1Muc3Ryb2tlQ29sb3IuY2xlYXIoKTsNCistCQkJCQlmb3IgKGludCBpPTA7 IGk8YXJncy5zaXplKCk7ICsraSkNCisrCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IGFyZ3Muc2l6 ZSgpOyArK2kpDQorIAkJCQkJCWN1cnJHUy5zdHJva2VDb2xvci5hcHBlbmQoYXJnc1tpXS5HZXRS ZWFsKCkpOw0KKyAJCQkJCWJyZWFrOw0KKyAJCQkJY2FzZSBLV19jczoNCitAQCAtMzYxLDcgKzg1 MSw3IEBAIGJvb2wgUERGQW5hbHl6ZXI6Omluc3BlY3RDYW52YXMoUGRmQ2FudmEKKyAJCQkJCQl7 DQorIAkJCQkJCQljdXJyR1MuZmlsbENTID0gQ1NfRGV2aWNlUkdCOw0KKyAJCQkJCQkJY3VyckdT LmZpbGxDb2xvci5jbGVhcigpOw0KKy0JCQkJCQkJZm9yIChpbnQgaT0wOyBpPDM7ICsraSkNCisr CQkJCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKQ0KKyAJCQkJCQkJCWN1cnJHUy5maWxs Q29sb3IuYXBwZW5kKDApOw0KKyAJCQkJCQkJaWYgKCF1c2VkQ29sb3JTcGFjZXMuY29udGFpbnMo Q1NfRGV2aWNlUkdCKSkNCisgCQkJCQkJCQl1c2VkQ29sb3JTcGFjZXMuYXBwZW5kKENTX0Rldmlj ZVJHQik7DQorQEAgLTM3MCw3ICs4NjAsNyBAQCBib29sIFBERkFuYWx5emVyOjppbnNwZWN0Q2Fu dmFzKFBkZkNhbnZhCisgCQkJCQkJew0KKyAJCQkJCQkJY3VyckdTLmZpbGxDUyA9IENTX0Rldmlj ZUNNWUs7DQorIAkJCQkJCQljdXJyR1MuZmlsbENvbG9yLmNsZWFyKCk7DQorLQkJCQkJCQlmb3Ig KGludCBpPTA7IGk8MzsgKytpKQ0KKysJCQkJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kp DQorIAkJCQkJCQkJY3VyckdTLmZpbGxDb2xvci5hcHBlbmQoMCk7DQorIAkJCQkJCQljdXJyR1Mu ZmlsbENvbG9yLmFwcGVuZCgxKTsNCisgCQkJCQkJCWlmICghdXNlZENvbG9yU3BhY2VzLmNvbnRh aW5zKENTX0RldmljZUNNWUspKQ0KK0BAIC00MzAsNyArOTIwLDcgQEAgYm9vbCBQREZBbmFseXpl cjo6aW5zcGVjdENhbnZhcyhQZGZDYW52YQorIAkJCQkJCXsNCisgCQkJCQkJCWN1cnJHUy5maWxs Q1MgPSBDU19EZXZpY2VSR0I7DQorIAkJCQkJCQljdXJyR1Muc3Ryb2tlQ29sb3IuY2xlYXIoKTsN CistCQkJCQkJCWZvciAoaW50IGk9MDsgaTwzOyArK2kpDQorKwkJCQkJCQlmb3IgKGludCBpID0g MDsgaSA8IDM7ICsraSkNCisgCQkJCQkJCQljdXJyR1Muc3Ryb2tlQ29sb3IuYXBwZW5kKDApOw0K KyAJCQkJCQkJaWYgKCF1c2VkQ29sb3JTcGFjZXMuY29udGFpbnMoQ1NfRGV2aWNlUkdCKSkNCisg CQkJCQkJCQl1c2VkQ29sb3JTcGFjZXMuYXBwZW5kKENTX0RldmljZVJHQik7DQorQEAgLTQzOSw3 ICs5MjksNyBAQCBib29sIFBERkFuYWx5emVyOjppbnNwZWN0Q2FudmFzKFBkZkNhbnZhCisgCQkJ CQkJew0KKyAJCQkJCQkJY3VyckdTLmZpbGxDUyA9IENTX0RldmljZUNNWUs7DQorIAkJCQkJCQlj dXJyR1Muc3Ryb2tlQ29sb3IuY2xlYXIoKTsNCistCQkJCQkJCWZvciAoaW50IGk9MDsgaTwzOyAr K2kpDQorKwkJCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkNCisgCQkJCQkJCQljdXJy R1Muc3Ryb2tlQ29sb3IuYXBwZW5kKDApOw0KKyAJCQkJCQkJY3VyckdTLnN0cm9rZUNvbG9yLmFw cGVuZCgxKTsNCisgCQkJCQkJCWlmICghdXNlZENvbG9yU3BhY2VzLmNvbnRhaW5zKENTX0Rldmlj ZUNNWUspKQ0KK0BAIC00ODUsMTcgKzk3NSwxNyBAQCBib29sIFBERkFuYWx5emVyOjppbnNwZWN0 Q2FudmFzKFBkZkNhbnZhCisgCQkJCQlicmVhazsNCisgCQkJCWNhc2UgS1dfc2M6DQorIAkJCQkJ Y3VyckdTLmZpbGxDb2xvci5jbGVhcigpOw0KKy0JCQkJCWZvciAoaW50IGk9MDsgaTxhcmdzLnNp emUoKTsgKytpKQ0KKysJCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5zaXplKCk7ICsraSkN CisgCQkJCQkJY3VyckdTLmZpbGxDb2xvci5hcHBlbmQoYXJnc1tpXS5HZXRSZWFsKCkpOw0KKyAJ CQkJCWJyZWFrOw0KKyAJCQkJY2FzZSBLV19TQzoNCisgCQkJCQljdXJyR1Muc3Ryb2tlQ29sb3Iu Y2xlYXIoKTsNCistCQkJCQlmb3IgKGludCBpPTA7IGk8YXJncy5zaXplKCk7ICsraSkNCisrCQkJ CQlmb3IgKGludCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyArK2kpDQorIAkJCQkJCWN1cnJHUy5z dHJva2VDb2xvci5hcHBlbmQoYXJnc1tpXS5HZXRSZWFsKCkpOw0KKyAJCQkJCWJyZWFrOw0KKyAJ CQkJY2FzZSBLV19zY246DQorIAkJCQkJY3VyckdTLmZpbGxDb2xvci5jbGVhcigpOw0KKy0JCQkJ CWZvciAoaW50IGk9MDsgaTxhcmdzLnNpemUoKTsgKytpKQ0KKysJCQkJCWZvciAoaW50IGkgPSAw OyBpIDwgYXJncy5zaXplKCk7ICsraSkNCisgCQkJCQl7DQorIAkJCQkJCWlmIChhcmdzW2ldLklz UmVhbCgpIHx8IGFyZ3NbaV0uSXNOdW1iZXIoKSkNCisgCQkJCQkJCWN1cnJHUy5maWxsQ29sb3Iu YXBwZW5kKGFyZ3NbaV0uR2V0UmVhbCgpKTsNCitAQCAtNTAzLDcgKzk5Myw3IEBAIGJvb2wgUERG QW5hbHl6ZXI6Omluc3BlY3RDYW52YXMoUGRmQ2FudmEKKyAJCQkJCWJyZWFrOw0KKyAJCQkJY2Fz ZSBLV19TQ046DQorIAkJCQkJY3VyckdTLnN0cm9rZUNvbG9yLmNsZWFyKCk7DQorLQkJCQkJZm9y IChpbnQgaT0wOyBpPGFyZ3Muc2l6ZSgpOyArK2kpDQorKwkJCQkJZm9yIChpbnQgaSA9IDA7IGkg PCBhcmdzLnNpemUoKTsgKytpKQ0KKyAJCQkJCXsNCisgCQkJCQkJaWYgKGFyZ3NbaV0uSXNSZWFs KCkgfHwgYXJnc1tpXS5Jc051bWJlcigpKQ0KKyAJCQkJCQkJY3VyckdTLnN0cm9rZUNvbG9yLmFw cGVuZChhcmdzW2ldLkdldFJlYWwoKSk7DQorQEAgLTY4OSw2ICsxMTc5LDcgQEAgYm9vbCBQREZB bmFseXplcjo6aW5zcGVjdENhbnZhcyhQZGZDYW52YQorIAkJCQlhcmdzLmNsZWFyKCk7DQorIAkJ CX0NCisgCQl9DQorKyNlbmRpZg0KKyAJfQ0KKyAJY2F0Y2ggKFBkZkVycm9yICYgZSkNCisgCXsN CitAQCAtNzE0LDE0ICsxMjA1LDE0IEBAIHZvaWQgUERGQW5hbHl6ZXI6Omluc3BlY3RFeHRHU3Rh dGVPYmooUGQKKyAJew0KKyAJCVBkZkFycmF5IGFyciA9IGJtT2JqLT5HZXRBcnJheSgpOw0KKyAJ CWN1cnJHUy5ibGVuZE1vZGVzLmNsZWFyKCk7DQorLQkJZm9yKHVpbnQgaT0wOyBpPGFyci5HZXRT aXplKCk7ICsraSkNCisrCQlmb3IgKHVpbnQgaSA9IDA7IGkgPCBhcnIuR2V0U2l6ZSgpOyArK2kp DQorIAkJCWN1cnJHUy5ibGVuZE1vZGVzLmFwcGVuZChhcnJbaV0uR2V0TmFtZSgpLkdldEVzY2Fw ZWROYW1lKCkuY19zdHIoKSk7DQorIAkJaWYgKGFyclswXS5Jc05hbWUoKSAmJiAhKGFyclswXS5H ZXROYW1lKCkgPT0gIk5vcm1hbCIgfHwgYXJyWzBdLkdldE5hbWUoKSA9PSAiQ29tcGF0aWJsZSIp KQ0KKyAJCQloYXNUcmFuc3BhcmVuY3kgPSB0cnVlOw0KKyAJfQ0KKyANCisgCVBkZk9iamVjdCog Y2FPYmogPSBleHRHU3RhdGVEaWN0ID8gZXh0R1N0YXRlRGljdC0+RmluZEtleSgiY2EiKSA6IG51 bGxwdHI7DQorLQlpZiAoY2FPYmogJiYgKGNhT2JqLT5Jc1JlYWwoKSB8fCBjYU9iai0+SXNOdW1i ZXIoKSkpDQorKwlpZiAoY2FPYmogJiYgKGNhT2JqLT5Jc1JlYWxTdHJpY3QoKSB8fCBjYU9iai0+ SXNOdW1iZXIoKSkpDQorIAl7DQorIAkJY3VyckdTLmZpbGxBbHBoYUNvbnN0YW50ID0gY2FPYmot PkdldFJlYWwoKTsNCisgCQlpZiAoY2FPYmotPkdldFJlYWwoKSA8IDEpDQorQEAgLTcyOSw3ICsx MjIwLDcgQEAgdm9pZCBQREZBbmFseXplcjo6aW5zcGVjdEV4dEdTdGF0ZU9iaihQZAorIAl9DQor IA0KKyAJUGRmT2JqZWN0KiBjQU9iaiA9IGV4dEdTdGF0ZURpY3QgPyBleHRHU3RhdGVEaWN0LT5G aW5kS2V5KCJDQSIpIDogbnVsbHB0cjsNCistCWlmIChjQU9iaiAmJiAoY0FPYmotPklzUmVhbCgp IHx8IGNBT2JqLT5Jc051bWJlcigpKSkNCisrCWlmIChjQU9iaiAmJiAoY0FPYmotPklzUmVhbFN0 cmljdCgpIHx8IGNBT2JqLT5Jc051bWJlcigpKSkNCisgCXsNCisgCQlpZiAoY0FPYmotPkdldFJl YWwoKSA8IDEpDQorIAkJCWhhc1RyYW5zcGFyZW5jeSA9IHRydWU7DQorQEAgLTc4MCw3ICsxMjcx LDcgQEAgdm9pZCBQREZBbmFseXplcjo6aW5zcGVjdEV4dEdTdGF0ZU9iaihQZAorIAkJUGRmT2Jq ZWN0IGRPYmpBID0gZE9iai0+R2V0QXJyYXkoKVswXTsNCisgCQlQZGZBcnJheSBkYXNoQXJyID0g ZE9iakEuR2V0QXJyYXkoKTsNCisgCQljdXJyR1MuZGFzaFBhdHRlcm4uZmlyc3QuY2xlYXIoKTsN CistCQlmb3IgKHVpbnQgaT0wOyBpPGRhc2hBcnIuR2V0U2l6ZSgpOyArK2kpDQorKwkJZm9yICh1 aW50IGkgPSAwOyBpIDwgZGFzaEFyci5HZXRTaXplKCk7ICsraSkNCisgCQkJY3VyckdTLmRhc2hQ YXR0ZXJuLmZpcnN0LmFwcGVuZChkYXNoQXJyW2ldLkdldE51bWJlcigpKTsNCisgCQlQZGZPYmpl Y3QgZE9iakIgPSBkT2JqLT5HZXRBcnJheSgpWzFdOw0KKyAJCWN1cnJHUy5kYXNoUGF0dGVybi5z ZWNvbmQgPSBkT2JqQi5HZXROdW1iZXIoKTsNCitAQCAtODE2LDcgKzEzMDcsMTEgQEAgUERGRm9u dCBQREZBbmFseXplcjo6Z2V0Rm9udEluZm8oUGRmT2JqZQorIAkJaWYgKGRlc2NlbmRhbnRGb250 cyAmJiBkZXNjZW5kYW50Rm9udHMtPklzQXJyYXkoKSkNCisgCQl7DQorIAkJCWNvbnN0IFBkZlJl ZmVyZW5jZSYgcmVmRGVzY0ZvbnQgPSBkZXNjZW5kYW50Rm9udHMtPkdldEFycmF5KClbMF0uR2V0 UmVmZXJlbmNlKCk7DQorKyNpZiAoUE9ET0ZPX1ZFUlNJT04gPj0gUE9ET0ZPX01BS0VfVkVSU0lP TigwLCAxMCwgMCkpDQorKwkJCVBkZk9iamVjdCogZGVzY2VuZGFudEZvbnQgPSBkZXNjZW5kYW50 Rm9udHMtPkdldERvY3VtZW50KCktPkdldE9iamVjdHMoKS5HZXRPYmplY3QocmVmRGVzY0ZvbnQp Ow0KKysjZWxzZQ0KKyAJCQlQZGZPYmplY3QqIGRlc2NlbmRhbnRGb250ID0gZGVzY2VuZGFudEZv bnRzLT5HZXRPd25lcigpLT5HZXRPYmplY3QocmVmRGVzY0ZvbnQpOw0KKysjZW5kaWYNCisgCQkJ UGRmRGljdGlvbmFyeSogZGVzY2VuZGFudEZvbnREaWN0ID0gKGRlc2NlbmRhbnRGb250ICYmIGRl c2NlbmRhbnRGb250LT5Jc0RpY3Rpb25hcnkoKSkgPyAmKGRlc2NlbmRhbnRGb250LT5HZXREaWN0 aW9uYXJ5KCkpIDogbnVsbHB0cjsNCisgCQkJY29uc3QgUGRmT2JqZWN0KiBzdWJ0eXBlRGVzY0Zv bnQgPSBkZXNjZW5kYW50Rm9udERpY3QtPkZpbmRLZXkoIlN1YnR5cGUiKTsNCisgCQkJZm9udERl c2MgPSAmKGRlc2NlbmRhbnRGb250RGljdC0+TXVzdEdldEtleSgiRm9udERlc2NyaXB0b3IiKSk7 DQorLS0tIGEvc2NyaWJ1cy9wZGZsaWJfY29yZS5jcHAKKysrKyBiL3NjcmlidXMvcGRmbGliX2Nv cmUuY3BwCitAQCAtOTc4MywyMiArOTc4MywyOTggQEAgYm9vbCBQREZMaWJDb3JlOjpQREZfRW1i ZWRkZWRQREYoUGFnZUl0ZQorIAlRU2NvcGVkUG9pbnRlcjxQb0RvRm86OlBkZk1lbURvY3VtZW50 PiBkb2M7CisgCXRyeQorIAl7CisrI2lmIChQT0RPRk9fVkVSU0lPTiA8IFBPRE9GT19NQUtFX1ZF UlNJT04oMCwgMTAsIDApKQorIAkJUG9Eb0ZvOjpQZGZFcnJvcjo6RW5hYmxlRGVidWcoZmFsc2Up OworIAkJUG9Eb0ZvOjpQZGZFcnJvcjo6RW5hYmxlTG9nZ2luZyhmYWxzZSk7CistCQlkb2MucmVz ZXQobmV3IFBvRG9Gbzo6UGRmTWVtRG9jdW1lbnQoZm4udG9Mb2NhbDhCaXQoKS5kYXRhKCkpKTsK KysjZW5kaWYKKysJCWRvYy5yZXNldChuZXcgUG9Eb0ZvOjpQZGZNZW1Eb2N1bWVudCgpKTsKKysJ CWRvYy0+TG9hZChmbi50b0xvY2FsOEJpdCgpLmRhdGEoKSk7CisgCX0KKy0JY2F0Y2goUG9Eb0Zv OjpQZGZFcnJvciYgZSkKKysJY2F0Y2ggKFBvRG9Gbzo6UGRmRXJyb3ImIGUpCisgCXsKKyAJCXFE ZWJ1ZygpIDw8ICJQb0RvRm8gZXJyb3IsIGZhbGxpbmcgYmFjayB0byByYXN0ZXIhIjsKKyAJCWUu UHJpbnRFcnJvck1zZygpOworIAkJcmV0dXJuIGZhbHNlOworIAl9CisgCisrI2lmIChQT0RPRk9f VkVSU0lPTiA+PSBQT0RPRk9fTUFLRV9WRVJTSU9OKDAsIDEwLCAwKSkKKyAJdHJ5CisgCXsKKy0J CVBvRG9Gbzo6UGRmUGFnZSogICBwYWdlICAgICAgPSBkb2MtPkdldFBhZ2UocU1pbihxTWF4KDEs IGMtPnBpeG0uaW1nSW5mby5hY3R1YWxQYWdlTnVtYmVyKSwgYy0+cGl4bS5pbWdJbmZvLm51bWJl ck9mUGFnZXMpIC0gMSk7CistCQlQb0RvRm86OlBkZk9iamVjdCogcGFnZU9iaiAgID0gcGFnZSA/ IHBhZ2UtPkdldE9iamVjdCgpIDogbnVsbHB0cjsKKy0JCVBvRG9Gbzo6UGRmT2JqZWN0KiBjb250 ZW50cyAgPSBwYWdlID8gcGFnZS0+R2V0Q29udGVudHMoKSA6IG51bGxwdHI7CisrCQlQb0RvRm86 OlBkZlBhZ2UmIHBhZ2UgPSBkb2MtPkdldFBhZ2VzKCkuR2V0UGFnZUF0KHFNaW4ocU1heCgxLCBj LT5waXhtLmltZ0luZm8uYWN0dWFsUGFnZU51bWJlciksIGMtPnBpeG0uaW1nSW5mby5udW1iZXJP ZlBhZ2VzKSAtIDEpOworKwkJUG9Eb0ZvOjpQZGZPYmplY3QmIHBhZ2VPYmogPSBwYWdlLkdldE9i amVjdCgpOworKwkJUG9Eb0ZvOjpQZGZPYmplY3QqIGNvbnRlbnRzID0gcGFnZS5HZXRDb250ZW50 cygpID8gJihwYWdlLkdldENvbnRlbnRzKCktPkdldE9iamVjdCgpKSA6IG51bGxwdHI7CisrCQlQ b0RvRm86OlBkZk9iamVjdCogcmVzb3VyY2VzID0gcGFnZS5HZXRSZXNvdXJjZXMoKSA/ICYocGFn ZS5HZXRSZXNvdXJjZXMoKS0+R2V0T2JqZWN0KCkpIDogbnVsbHB0cjsKKysJCVBvRG9Gbzo6UGRm RGljdGlvbmFyeSogcGFnZU9iakRpY3QgPSBwYWdlT2JqLklzRGljdGlvbmFyeSgpID8gJihwYWdl T2JqLkdldERpY3Rpb25hcnkoKSkgOiBudWxscHRyOworKwkJZm9yIChQb0RvRm86OlBkZkRpY3Rp b25hcnkqIHBhciA9IHBhZ2VPYmpEaWN0LCAqcGFyZW50RGljdCA9IG51bGxwdHI7IHBhciAmJiAh cmVzb3VyY2VzOyBwYXIgPSBwYXJlbnREaWN0KQorKwkJeworKwkJCXJlc291cmNlcyA9IHBhci0+ RmluZEtleSgiUmVzb3VyY2VzIik7CisrCQkJUG9Eb0ZvOjpQZGZPYmplY3QqIHBhcmVudE9iaiA9 IHBhci0+RmluZEtleSgiUGFyZW50Iik7CisrCQkJcGFyZW50RGljdCA9IChwYXJlbnRPYmogJiYg cGFyZW50T2JqLT5Jc0RpY3Rpb25hcnkoKSkgPyAmKHBhcmVudE9iai0+R2V0RGljdGlvbmFyeSgp KSA6IG51bGxwdHI7CisrCQl9CisrCQlpZiAoY29udGVudHMgJiYgY29udGVudHMtPkdldERhdGFU eXBlKCkgPT0gUG9Eb0ZvOjpQZGZEYXRhVHlwZTo6RGljdGlvbmFyeSkKKysJCXsKKysJCQlQb0Rv Rm86OlBkZkRpY3Rpb25hcnkmIGNvbnRlbnRzRGljdCA9IGNvbnRlbnRzLT5HZXREaWN0aW9uYXJ5 KCk7CisrCQkJUG9Eb0ZvOjpQZGZPYmplY3RTdHJlYW0qIHN0cmVhbSA9IGNvbnRlbnRzLT5HZXRT dHJlYW0oKTsKKysJCQlRTWFwPFBvRG9Gbzo6UGRmUmVmZXJlbmNlLCBQZGZJZD4gaW1wb3J0ZWRP YmplY3RzOworKwkJCVFMaXN0PFBvRG9Gbzo6UGRmUmVmZXJlbmNlPiByZWZlcmVuY2VkT2JqZWN0 czsKKysJCQlQb0RvRm86OlBkZk9iamVjdCogbmV4dE9iaiB7IG51bGxwdHIgfTsKKysJCQlQZGZJ ZCB4T2JqID0gd3JpdGVyLm5ld09iamVjdCgpOworKwkJCVBkZklkIHhSZXNvdXJjZXMgPSB3cml0 ZXIubmV3T2JqZWN0KCk7CisrCQkJUGRmSWQgeFBhcmVudHMgPSAwOworKwkJCWltcG9ydGVkT2Jq ZWN0c1twYWdlLkdldE9iamVjdCgpLkdldEluZGlyZWN0UmVmZXJlbmNlKCldID0geE9iajsKKysJ CQl3cml0ZXIuc3RhcnRPYmooeE9iaik7CisrCQkJUHV0RG9jKCI8PFxuL1R5cGUgL1hPYmplY3Rc bi9TdWJ0eXBlIC9Gb3JtXG4vRm9ybVR5cGUgMSIpOworKwkJCVBvRG9Gbzo6UmVjdCBwYWdlUmVj dCA9IHBhZ2UuR2V0QXJ0Qm94KCk7IC8vIEJlY2F1c2Ugc2NpbWFnZWRhdGFsb2FkZXJfcGRmIHVz ZSBBcnRCb3gKKysJCQlpbnQgcm90YXRpb24gPSBwYWdlLkdldFJvdGF0aW9uUmF3KCk7CisrCQkJ ZG91YmxlIGltZ1dpZHRoID0gKHJvdGF0aW9uID09IDkwIHx8IHJvdGF0aW9uID09IDI3MCkgPyBw YWdlUmVjdC5IZWlnaHQgOiBwYWdlUmVjdC5XaWR0aDsKKysJCQlkb3VibGUgaW1nSGVpZ2h0ID0g KHJvdGF0aW9uID09IDkwIHx8IHJvdGF0aW9uID09IDI3MCkgPyBwYWdlUmVjdC5XaWR0aCA6IHBh Z2VSZWN0LkhlaWdodDsKKysJCQlRVHJhbnNmb3JtIHBhZ2VNOworKwkJCXBhZ2VNLnRyYW5zbGF0 ZShwYWdlUmVjdC5HZXRMZWZ0KCksIHBhZ2VSZWN0LkdldEJvdHRvbSgpKTsKKysJCQlwYWdlTS5y b3RhdGUocm90YXRpb24pOworKwkJCWlmIChyb3RhdGlvbiA9PSA5MCkKKysJCQkJcGFnZU0udHJh bnNsYXRlKDAuMCwgLWltZ0hlaWdodCk7CisrCQkJZWxzZSBpZiAocm90YXRpb24gPT0gMTgwKQor KwkJCQlwYWdlTS50cmFuc2xhdGUoLWltZ1dpZHRoLCAtaW1nSGVpZ2h0KTsKKysJCQllbHNlIGlm IChyb3RhdGlvbiA9PSAyNzApCisrCQkJCXBhZ2VNLnRyYW5zbGF0ZSgtaW1nV2lkdGgsIDAuMCk7 CisrCQkJcGFnZU0uc2NhbGUoaW1nV2lkdGgsIGltZ0hlaWdodCk7CisrCQkJcGFnZU0gPSBwYWdl TS5pbnZlcnRlZCgpOworKwkJCVB1dERvYygiXG4vQkJveCBbIiArIFBkZjo6dG9QZGYocGFnZVJl Y3QuR2V0TGVmdCgpKSk7CisrCQkJUHV0RG9jKCIgIiArIFBkZjo6dG9QZGYocGFnZVJlY3QuR2V0 Qm90dG9tKCkpKTsKKysJCQlQdXREb2MoIiAiICsgUGRmOjp0b1BkZihwYWdlUmVjdC5HZXRMZWZ0 KCkgKyBwYWdlUmVjdC5XaWR0aCkpOworKwkJCVB1dERvYygiICIgKyBQZGY6OnRvUGRmKHBhZ2VS ZWN0LkdldEJvdHRvbSgpICsgcGFnZVJlY3QuSGVpZ2h0KSk7CisrCQkJUHV0RG9jKCJdIik7Cisr CQkJUHV0RG9jKCJcbi9NYXRyaXggWyIgKyBQZGY6OnRvUGRmKHBhZ2VNLm0xMSgpKSArICIgIgor KwkJCQkrIFBkZjo6dG9QZGYocGFnZU0ubTEyKCkpICsgIiAiCisrCQkJCSsgUGRmOjp0b1BkZihw YWdlTS5tMjEoKSkgKyAiICIKKysJCQkJKyBQZGY6OnRvUGRmKHBhZ2VNLm0yMigpKSArICIgIgor KwkJCQkrIFBkZjo6dG9QZGYocGFnZU0uZHgoKSkgKyAiICIKKysJCQkJKyBQZGY6OnRvUGRmKHBh Z2VNLmR5KCkpICsgIiAiKTsKKysJCQlQdXREb2MoIl0iKTsKKysJCQlQdXREb2MoIlxuL1Jlc291 cmNlcyAiICsgUGRmOjp0b1BkZih4UmVzb3VyY2VzKSArICIgMCBSIik7CisrCQkJUG9Eb0ZvOjpQ ZGZEaWN0aW9uYXJ5KiBwYWdlRGljdCA9IHBhZ2VPYmouSXNEaWN0aW9uYXJ5KCkgPyAmKHBhZ2VP YmouR2V0RGljdGlvbmFyeSgpKSA6IG51bGxwdHI7CisrCQkJbmV4dE9iaiA9IHBhZ2VEaWN0ID8g cGFnZURpY3QtPkZpbmRLZXkoIkdyb3VwIikgOiBudWxscHRyOworKwkJCWlmIChuZXh0T2JqKQor KwkJCXsKKysJCQkJUHV0RG9jKCJcbi9Hcm91cCAiKTsgLy8gUERGIDEuNAorKwkJCQljb3B5UG9E b0ZvRGlyZWN0KG5leHRPYmosIHJlZmVyZW5jZWRPYmplY3RzLCBpbXBvcnRlZE9iamVjdHMpOwor KwkJCX0KKysJCQkvKgorKwkJCVBvRG9Gbzo6UGRmT2JqZWN0IHBhcmVudHMgPSBwYWdlRGljdC0+ RmluZEtleSgiU3RydWN0UGFyZW50cyIpOworKwkJCWlmIChwYXJlbnRzKQorKwkJCXsKKysJCQkJ eFBhcmVudHMgPSB3cml0ZXIubmV3T2JqZWN0KCk7CisrCQkJCVB1dERvYygiXG4vU3RydWN0UGFy ZW50cyAiICsgUGRmOjp0b1BkZih4UGFyZW50cykpOyAvLyByZXF1aXJlZCBpZiBwYWdlIHVzZXMg c3RydWN0dXJlZCBjb250ZW50CisrCQkJfQorKwkJCSovCisrCisrCQkJY29uc3QgY2hhciogbWJ1 ZmZlciA9IG51bGxwdHI7CisrCQkJbG9uZyBtbGVuID0gMDsKKysJCQlQb0RvRm86OmNoYXJidWZm IHN0ckJ1ZmYgPSBzdHJlYW0tPkdldENvcHkodHJ1ZSk7CisrCQkJbWxlbiA9IHN0ckJ1ZmYuc2l6 ZSgpOworKwkJCW1idWZmZXIgPSBzdHJCdWZmLmNfc3RyKCk7CisrCQkJaWYgKG1idWZmZXJbbWxl biAtIDFdID09ICdcbicpCisrCQkJCS0tbWxlbjsKKysJCQlQdXREb2MoIlxuL0xlbmd0aCAiICsg UGRmOjp0b1BkZihzdGF0aWNfY2FzdDxxbG9uZ2xvbmc+KG1sZW4pKSk7CisrCQkJbmV4dE9iaiA9 IGNvbnRlbnRzRGljdC5GaW5kS2V5KCJGaWx0ZXIiKTsKKysJCQlpZiAobmV4dE9iaikKKysJCQl7 CisrCQkJCVB1dERvYygiXG4vRmlsdGVyICIpOworKwkJCQljb3B5UG9Eb0ZvRGlyZWN0KG5leHRP YmosIHJlZmVyZW5jZWRPYmplY3RzLCBpbXBvcnRlZE9iamVjdHMpOworKwkJCX0KKysJCQluZXh0 T2JqID0gY29udGVudHNEaWN0LkZpbmRLZXkoIkRlY29kZVBhcm1zIik7CisrCQkJaWYgKG5leHRP YmopCisrCQkJeworKwkJCQlQdXREb2MoIlxuL0RlY29kZVBhcm1zICIpOworKwkJCQljb3B5UG9E b0ZvRGlyZWN0KG5leHRPYmosIHJlZmVyZW5jZWRPYmplY3RzLCBpbXBvcnRlZE9iamVjdHMpOwor KwkJCX0KKysJCQlQdXREb2MoIlxuPj5cbnN0cmVhbVxuIik7CisrCQkJeworKwkJCQlRQnl0ZUFy cmF5IGJ1ZmZlciA9IFFCeXRlQXJyYXk6OmZyb21SYXdEYXRhKG1idWZmZXIsIG1sZW4pOworKwkJ CQlFbmNvZGVBcnJheVRvU3RyZWFtKGJ1ZmZlciwgeE9iaik7CisrCQkJfSAgLy8gZGlzY29ubmVj dCBRQnl0ZUFycmF5IGZyb20gcmF3IGRhdGEKKysJCQlQdXREb2MoIlxuZW5kc3RyZWFtIik7Cisr CQkJd3JpdGVyLmVuZE9iaih4T2JqKTsKKysJCQkvLyB3cml0ZSByZXNvdXJjZXMKKysJCQlpZiAo cmVzb3VyY2VzKQorKwkJCXsKKysJCQkJY29weVBvRG9Gb09iamVjdChyZXNvdXJjZXMsIHhSZXNv dXJjZXMsIGltcG9ydGVkT2JqZWN0cyk7CisrCQkJfQorKwkJCWVsc2UKKysJCQl7CisrCQkJCXdy aXRlci5zdGFydE9iaih4UmVzb3VyY2VzKTsKKysJCQkJUHV0RG9jKCI8PCA+PiIpOworKwkJCQl3 cml0ZXIuZW5kT2JqKHhSZXNvdXJjZXMpOworKwkJCX0KKysJCQlpZiAoeFBhcmVudHMpCisrCQkJ eworKwkJCQkvLyBjcmVhdGUgc3RydWN0dXJlZCBwYXJlbnRzCisrCQkJfQorKwkJCS8vIHdyaXRl IHJlZmVyZW5jZWQgb2JqZWN0cworKwkJCVBvRG9Gbzo6UGRmSW5kaXJlY3RPYmplY3RMaXN0JiBh bGxPYmplY3RzID0gY29udGVudHMtPkdldERvY3VtZW50KCktPkdldE9iamVjdHMoKTsKKysJCQlm b3IgKGludCBpID0gMDsgaSA8IHJlZmVyZW5jZWRPYmplY3RzLnNpemUoKTsgKytpKQorKwkJCXsK KysJCQkJY29uc3QgUG9Eb0ZvOjpQZGZSZWZlcmVuY2UmIHBkZlJlZiA9IHJlZmVyZW5jZWRPYmpl Y3RzW2ldOworKwkJCQluZXh0T2JqID0gYWxsT2JqZWN0cy5HZXRPYmplY3QocGRmUmVmKTsKKysJ CQkJY29weVBvRG9Gb09iamVjdChuZXh0T2JqLCBpbXBvcnRlZE9iamVjdHNbcGRmUmVmXSwgaW1w b3J0ZWRPYmplY3RzKTsKKysJCQl9CisrCisrCQkJcGFnZURhdGEuSW1nT2JqZWN0c1tSZXNOYW0g KyAiSSIgKyBQZGY6OnRvUGRmKFJlc0NvdW50KV0gPSB4T2JqOworKwkJCWltZ0luZm8uUmVzTnVt ID0gUmVzQ291bnQ7CisrCQkJUmVzQ291bnQrKzsKKysJCQkvLyBBdm9pZCBhIGRpdmlkZS1ieS16 ZXJvIGlmIHdpZHRoL2hlaWdodCBhcmUgbGVzcyB0aGFuIDEgcG9pbnQ6CisrCQkJaW1nSW5mby5X aWR0aCA9IHFNYXgoMSwgKGludCkgaW1nV2lkdGgpOworKwkJCWltZ0luZm8uSGVpZ2h0ID0gcU1h eCgxLCAoaW50KSBpbWdIZWlnaHQpOworKwkJCWltZ0luZm8ueGEgPSBzeCAqIGltZ1dpZHRoIC8g aW1nSW5mby5XaWR0aDsKKysJCQlpbWdJbmZvLnlhID0gc3kgKiBpbWdIZWlnaHQgLyBpbWdJbmZv LkhlaWdodDsKKysJCQkvLyBXaWR0aC9IZWlnaHQgYXJlIGludGVnZXJzIGFuZCBtYXkgbm90IGV4 YWN0bHkgZXF1YWwgcGFnZVJlY3QuR2V0V2lkdGgoKS8KKysJCQkvLyBwYWdlUmVjdC5HZXRIZWln aHQoKS4gQWRqdXN0IHNjYWxlIGZhY3RvciB0byBjb21wZW5zYXRlIGZvciB0aGUgZGlmZmVyZW5j ZS4KKysJCQlpbWdJbmZvLnN4YSA9IHN4ICogaW1nV2lkdGggLyBpbWdJbmZvLldpZHRoOworKwkJ CWltZ0luZm8uc3lhID0gc3kgKiBpbWdIZWlnaHQgLyBpbWdJbmZvLkhlaWdodDsKKysKKysJCQly ZXR1cm4gdHJ1ZTsKKysJCX0KKysJCWlmIChjb250ZW50cyAmJiBjb250ZW50cy0+R2V0RGF0YVR5 cGUoKSA9PSBQb0RvRm86OlBkZkRhdGFUeXBlOjpBcnJheSkvL1BhZ2UgY29udGVudHMgbWlnaHQg YmUgYW4gYXJyYXkKKysJCXsKKysJCQlRTWFwPFBvRG9Gbzo6UGRmUmVmZXJlbmNlLCBQZGZJZD4g aW1wb3J0ZWRPYmplY3RzOworKwkJCVFMaXN0PFBvRG9Gbzo6UGRmUmVmZXJlbmNlPiByZWZlcmVu Y2VkT2JqZWN0czsKKysJCQlQb0RvRm86OlBkZk9iamVjdCogbmV4dE9iajsKKysJCQlQZGZJZCB4 T2JqID0gd3JpdGVyLm5ld09iamVjdCgpOworKwkJCVBkZklkIHhSZXNvdXJjZXMgPSB3cml0ZXIu bmV3T2JqZWN0KCk7CisrCQkJUGRmSWQgeFBhcmVudHMgPSAwOworKwkJCWltcG9ydGVkT2JqZWN0 c1twYWdlLkdldE9iamVjdCgpLkdldEluZGlyZWN0UmVmZXJlbmNlKCldID0geE9iajsKKysJCQl3 cml0ZXIuc3RhcnRPYmooeE9iaik7CisrCQkJUHV0RG9jKCI8PFxuL1R5cGUgL1hPYmplY3Rcbi9T dWJ0eXBlIC9Gb3JtXG4vRm9ybVR5cGUgMSIpOworKwkJCVBvRG9Gbzo6UmVjdCBwYWdlUmVjdCA9 IHBhZ2UuR2V0QXJ0Qm94KCk7IC8vIEJlY2F1c2Ugc2NpbWFnZWRhdGFsb2FkZXJfcGRmIHVzZSBB cnRCb3gKKysJCQlpbnQgcm90YXRpb24gPSBwYWdlLkdldFJvdGF0aW9uUmF3KCk7CisrCQkJZG91 YmxlIGltZ1dpZHRoID0gKHJvdGF0aW9uID09IDkwIHx8IHJvdGF0aW9uID09IDI3MCkgPyBwYWdl UmVjdC5IZWlnaHQgOiBwYWdlUmVjdC5XaWR0aDsKKysJCQlkb3VibGUgaW1nSGVpZ2h0ID0gKHJv dGF0aW9uID09IDkwIHx8IHJvdGF0aW9uID09IDI3MCkgPyBwYWdlUmVjdC5XaWR0aCA6IHBhZ2VS ZWN0LkhlaWdodDsKKysJCQlRVHJhbnNmb3JtIHBhZ2VNOworKwkJCXBhZ2VNLnRyYW5zbGF0ZShw YWdlUmVjdC5HZXRMZWZ0KCksIHBhZ2VSZWN0LkdldEJvdHRvbSgpKTsKKysJCQlwYWdlTS5yb3Rh dGUocm90YXRpb24pOworKwkJCWlmIChyb3RhdGlvbiA9PSA5MCkKKysJCQkJcGFnZU0udHJhbnNs YXRlKDAuMCwgLWltZ0hlaWdodCk7CisrCQkJZWxzZSBpZiAocm90YXRpb24gPT0gMTgwKQorKwkJ CQlwYWdlTS50cmFuc2xhdGUoLWltZ1dpZHRoLCAtaW1nSGVpZ2h0KTsKKysJCQllbHNlIGlmIChy b3RhdGlvbiA9PSAyNzApCisrCQkJCXBhZ2VNLnRyYW5zbGF0ZSgtaW1nV2lkdGgsIDAuMCk7Cisr CQkJcGFnZU0uc2NhbGUoaW1nV2lkdGgsIGltZ0hlaWdodCk7CisrCQkJcGFnZU0gPSBwYWdlTS5p bnZlcnRlZCgpOworKwkJCVB1dERvYygiXG4vQkJveCBbIiArIFBkZjo6dG9QZGYocGFnZVJlY3Qu R2V0TGVmdCgpKSk7CisrCQkJUHV0RG9jKCIgIiArIFBkZjo6dG9QZGYocGFnZVJlY3QuR2V0Qm90 dG9tKCkpKTsKKysJCQlQdXREb2MoIiAiICsgUGRmOjp0b1BkZihwYWdlUmVjdC5HZXRMZWZ0KCkg KyBwYWdlUmVjdC5XaWR0aCkpOworKwkJCVB1dERvYygiICIgKyBQZGY6OnRvUGRmKHBhZ2VSZWN0 LkdldEJvdHRvbSgpICsgcGFnZVJlY3QuSGVpZ2h0KSk7CisrCQkJUHV0RG9jKCJdIik7CisrCQkJ UHV0RG9jKCJcbi9NYXRyaXggWyIgKyBQZGY6OnRvUGRmKHBhZ2VNLm0xMSgpKSArICIgIgorKwkJ CQkrIFBkZjo6dG9QZGYocGFnZU0ubTEyKCkpICsgIiAiCisrCQkJCSsgUGRmOjp0b1BkZihwYWdl TS5tMjEoKSkgKyAiICIKKysJCQkJKyBQZGY6OnRvUGRmKHBhZ2VNLm0yMigpKSArICIgIgorKwkJ CQkrIFBkZjo6dG9QZGYocGFnZU0uZHgoKSkgKyAiICIKKysJCQkJKyBQZGY6OnRvUGRmKHBhZ2VN LmR5KCkpICsgIiAiKTsKKysJCQlQdXREb2MoIl0iKTsKKysJCQlQdXREb2MoIlxuL1Jlc291cmNl cyAiICsgUGRmOjp0b1BkZih4UmVzb3VyY2VzKSArICIgMCBSIik7CisrCQkJUG9Eb0ZvOjpQZGZE aWN0aW9uYXJ5KiBwYWdlRGljdCA9IHBhZ2VPYmouSXNEaWN0aW9uYXJ5KCkgPyAmKHBhZ2VPYmou R2V0RGljdGlvbmFyeSgpKSA6IG51bGxwdHI7CisrCQkJbmV4dE9iaiA9IHBhZ2VEaWN0ID8gcGFn ZURpY3QtPkZpbmRLZXkoIkdyb3VwIikgOiBudWxscHRyOworKwkJCWlmIChuZXh0T2JqKQorKwkJ CXsKKysJCQkJUHV0RG9jKCJcbi9Hcm91cCAiKTsgLy8gUERGIDEuNAorKwkJCQljb3B5UG9Eb0Zv RGlyZWN0KG5leHRPYmosIHJlZmVyZW5jZWRPYmplY3RzLCBpbXBvcnRlZE9iamVjdHMpOworKwkJ CX0KKysKKysJCQljb25zdCBjaGFyKiBtYnVmZmVyID0gbnVsbHB0cjsKKysJCQlsb25nIG1sZW4g PSAwOworKwkJCVBvRG9Gbzo6Y2hhcmJ1ZmYgc3RyQnVmZmVyOworKwkJCVBvRG9Gbzo6U3RyaW5n U3RyZWFtRGV2aWNlIHN0clN0cmVhbURldihzdHJCdWZmZXIpOworKwkJCVBvRG9Gbzo6UGRmQXJy YXkgY2FycmF5KHBhZ2UuR2V0Q29udGVudHMoKS0+R2V0T2JqZWN0KCkuR2V0QXJyYXkoKSk7Cisr CQkJZm9yICh1bnNpZ25lZCBpbnQgY2kgPSAwOyBjaSA8IGNhcnJheS5zaXplKCk7ICsrY2kpCisr CQkJeworKwkJCQlpZiAoY2FycmF5W2NpXS5IYXNTdHJlYW0oKSkKKysJCQkJeworKwkJCQkJY2Fy cmF5W2NpXS5HZXRTdHJlYW0oKS0+Q29weVRvKHN0clN0cmVhbURldiwgZmFsc2UpOworKwkJCQl9 CisrCQkJCWVsc2UgaWYgKGNhcnJheVtjaV0uSXNSZWZlcmVuY2UoKSkKKysJCQkJeworKwkJCQkJ bmV4dE9iaiA9IGRvYy0+R2V0T2JqZWN0cygpLkdldE9iamVjdChjYXJyYXlbY2ldLkdldFJlZmVy ZW5jZSgpKTsKKysKKysJCQkJCXdoaWxlIChuZXh0T2JqICE9IG51bGxwdHIpCisrCQkJCQl7Cisr CQkJCQkJaWYgKG5leHRPYmotPklzUmVmZXJlbmNlKCkpCisrCQkJCQkJeworKwkJCQkJCQluZXh0 T2JqID0gZG9jLT5HZXRPYmplY3RzKCkuR2V0T2JqZWN0KG5leHRPYmotPkdldFJlZmVyZW5jZSgp KTsKKysJCQkJCQl9CisrCQkJCQkJZWxzZSBpZiAobmV4dE9iai0+SGFzU3RyZWFtKCkpCisrCQkJ CQkJeworKwkJCQkJCQluZXh0T2JqLT5HZXRTdHJlYW0oKS0+Q29weVRvKHN0clN0cmVhbURldiwg ZmFsc2UpOworKwkJCQkJCQlicmVhazsKKysJCQkJCQl9CisrCQkJCQl9CisrCQkJCX0KKysJCQl9 CisrCQkJLy8gZW5kIG9mIGNvcHkKKysJCQltbGVuID0gc3RyQnVmZmVyLnNpemUoKTsKKysJCQlt YnVmZmVyID0gc3RyQnVmZmVyLmNfc3RyKCk7CisrCisrCQkJUHV0RG9jKCJcbi9MZW5ndGggIiAr IFBkZjo6dG9QZGYoc3RhdGljX2Nhc3Q8cWxvbmdsb25nPihtbGVuKSkpOworKwkJCVB1dERvYygi XG4+Plxuc3RyZWFtXG4iKTsKKysJCQl7CisrCQkJCVFCeXRlQXJyYXkgYnVmZmVyID0gUUJ5dGVB cnJheTo6ZnJvbVJhd0RhdGEobWJ1ZmZlciwgbWxlbik7CisrCQkJCUVuY29kZUFycmF5VG9TdHJl YW0oYnVmZmVyLCB4T2JqKTsKKysJCQl9ICAvLyBkaXNjb25uZWN0IFFCeXRlQXJyYXkgZnJvbSBy YXcgZGF0YQorKwkJCVB1dERvYygiXG5lbmRzdHJlYW0iKTsKKysJCQl3cml0ZXIuZW5kT2JqKHhP YmopOworKwkJCS8vIHdyaXRlIHJlc291cmNlcworKwkJCWlmIChyZXNvdXJjZXMpCisrCQkJewor KwkJCQljb3B5UG9Eb0ZvT2JqZWN0KHJlc291cmNlcywgeFJlc291cmNlcywgaW1wb3J0ZWRPYmpl Y3RzKTsKKysJCQl9CisrCQkJZWxzZQorKwkJCXsKKysJCQkJd3JpdGVyLnN0YXJ0T2JqKHhSZXNv dXJjZXMpOworKwkJCQlQdXREb2MoIjw8ID4+Iik7CisrCQkJCXdyaXRlci5lbmRPYmooeFJlc291 cmNlcyk7CisrCQkJfQorKwkJCWlmICh4UGFyZW50cykKKysJCQl7CisrCQkJCS8vIGNyZWF0ZSBz dHJ1Y3R1cmVkIHBhcmVudHMKKysJCQl9CisrCQkJLy8gd3JpdGUgcmVmZXJlbmNlZCBvYmplY3Rz CisrCQkJUG9Eb0ZvOjpQZGZJbmRpcmVjdE9iamVjdExpc3QmIGFsbE9iamVjdHMgPSBjb250ZW50 cy0+R2V0RG9jdW1lbnQoKS0+R2V0T2JqZWN0cygpOworKwkJCWZvciAoaW50IGkgPSAwOyBpIDwg cmVmZXJlbmNlZE9iamVjdHMuc2l6ZSgpOyArK2kpCisrCQkJeworKwkJCQljb25zdCBQb0RvRm86 OlBkZlJlZmVyZW5jZSYgcGRmUmVmID0gcmVmZXJlbmNlZE9iamVjdHNbaV07CisrCQkJCW5leHRP YmogPSBhbGxPYmplY3RzLkdldE9iamVjdChwZGZSZWYpOworKwkJCQljb3B5UG9Eb0ZvT2JqZWN0 KG5leHRPYmosIGltcG9ydGVkT2JqZWN0c1twZGZSZWZdLCBpbXBvcnRlZE9iamVjdHMpOworKwkJ CX0KKysKKysJCQlwYWdlRGF0YS5JbWdPYmplY3RzW1Jlc05hbSArICJJIiArIFBkZjo6dG9QZGYo UmVzQ291bnQpXSA9IHhPYmo7CisrCQkJaW1nSW5mby5SZXNOdW0gPSBSZXNDb3VudDsKKysJCQlS ZXNDb3VudCsrOworKwkJCS8vIEF2b2lkIGEgZGl2aWRlLWJ5LXplcm8gaWYgd2lkdGgvaGVpZ2h0 IGFyZSBsZXNzIHRoYW4gMSBwb2ludDoKKysJCQlpbWdJbmZvLldpZHRoID0gcU1heCgxLCAoaW50 KSBpbWdXaWR0aCk7CisrCQkJaW1nSW5mby5IZWlnaHQgPSBxTWF4KDEsIChpbnQpIGltZ0hlaWdo dCk7CisrCQkJaW1nSW5mby54YSA9IHN4ICogaW1nV2lkdGggLyBpbWdJbmZvLldpZHRoOworKwkJ CWltZ0luZm8ueWEgPSBzeSAqIGltZ0hlaWdodCAvIGltZ0luZm8uSGVpZ2h0OworKwkJCS8vIFdp ZHRoL0hlaWdodCBhcmUgaW50ZWdlcnMgYW5kIG1heSBub3QgZXhhY3RseSBlcXVhbCBwYWdlUmVj dC5HZXRXaWR0aCgpLworKwkJCS8vIHBhZ2VSZWN0LkdldEhlaWdodCgpLiBBZGp1c3Qgc2NhbGUg ZmFjdG9yIHRvIGNvbXBlbnNhdGUgZm9yIHRoZSBkaWZmZXJlbmNlLgorKwkJCWltZ0luZm8uc3hh ID0gc3ggKiBpbWdXaWR0aCAvIGltZ0luZm8uV2lkdGg7CisrCQkJaW1nSW5mby5zeWEgPSBzeSAq IGltZ0hlaWdodCAvIGltZ0luZm8uSGVpZ2h0OworKworKwkJCXJldHVybiB0cnVlOworKwkJfQor Kwl9CisrCWNhdGNoIChQb0RvRm86OlBkZkVycm9yJiBlKQorKwl7CisrCQlmYXRhbEVycm9yID0g dHJ1ZTsKKysJCXFEZWJ1ZygpIDw8ICJQb0RvRm8gZXJyb3IhIjsKKysJCWUuUHJpbnRFcnJvck1z ZygpOworKwkJcmV0dXJuIGZhbHNlOworKwl9CisrI2Vsc2UKKysJdHJ5CisrCXsKKysJCVBvRG9G bzo6UGRmUGFnZSogcGFnZSA9IGRvYy0+R2V0UGFnZShxTWluKHFNYXgoMSwgYy0+cGl4bS5pbWdJ bmZvLmFjdHVhbFBhZ2VOdW1iZXIpLCBjLT5waXhtLmltZ0luZm8ubnVtYmVyT2ZQYWdlcykgLSAx KTsKKysJCVBvRG9Gbzo6UGRmT2JqZWN0KiBwYWdlT2JqID0gcGFnZSA/IHBhZ2UtPkdldE9iamVj dCgpIDogbnVsbHB0cjsKKysJCVBvRG9Gbzo6UGRmT2JqZWN0KiBjb250ZW50cyA9IHBhZ2UgPyBw YWdlLT5HZXRDb250ZW50cygpIDogbnVsbHB0cjsKKyAJCVBvRG9Gbzo6UGRmT2JqZWN0KiByZXNv dXJjZXMgPSBwYWdlID8gcGFnZS0+R2V0UmVzb3VyY2VzKCkgOiBudWxscHRyOworIAkJUG9Eb0Zv OjpQZGZEaWN0aW9uYXJ5KiBwYWdlT2JqRGljdCA9IChwYWdlT2JqICYmIHBhZ2VPYmotPklzRGlj dGlvbmFyeSgpKSA/ICYocGFnZU9iai0+R2V0RGljdGlvbmFyeSgpKSA6IG51bGxwdHI7CisgCQlm b3IgKFBvRG9Gbzo6UGRmRGljdGlvbmFyeSogcGFyID0gcGFnZU9iakRpY3QsICpwYXJlbnREaWN0 ID0gbnVsbHB0cjsgcGFyICYmICFyZXNvdXJjZXM7IHBhciA9IHBhcmVudERpY3QpCitAQCAtOTgw NywxMyArMTAwODMsMTMgQEAgYm9vbCBQREZMaWJDb3JlOjpQREZfRW1iZWRkZWRQREYoUGFnZUl0 ZQorIAkJCVBvRG9Gbzo6UGRmT2JqZWN0KiBwYXJlbnRPYmogPSBwYXItPkZpbmRLZXkoIlBhcmVu dCIpOworIAkJCXBhcmVudERpY3QgPSAocGFyZW50T2JqICYmIHBhcmVudE9iai0+SXNEaWN0aW9u YXJ5KCkpID8gJihwYXJlbnRPYmotPkdldERpY3Rpb25hcnkoKSkgOiBudWxscHRyOworIAkJfQor LQkJaWYgKGNvbnRlbnRzICYmIGNvbnRlbnRzLT5HZXREYXRhVHlwZSgpID09ICBQb0RvRm86OmVQ ZGZEYXRhVHlwZV9EaWN0aW9uYXJ5KQorKwkJaWYgKGNvbnRlbnRzICYmIGNvbnRlbnRzLT5HZXRE YXRhVHlwZSgpID09IFBvRG9Gbzo6ZVBkZkRhdGFUeXBlX0RpY3Rpb25hcnkpCisgCQl7CisgCQkJ UG9Eb0ZvOjpQZGZEaWN0aW9uYXJ5JiBjb250ZW50c0RpY3QgPSBjb250ZW50cy0+R2V0RGljdGlv bmFyeSgpOworIAkJCVBvRG9Gbzo6UGRmU3RyZWFtKiBzdHJlYW0gPSBjb250ZW50cy0+R2V0U3Ry ZWFtKCk7CisgCQkJUU1hcDxQb0RvRm86OlBkZlJlZmVyZW5jZSwgUGRmSWQ+IGltcG9ydGVkT2Jq ZWN0czsKKyAJCQlRTGlzdDxQb0RvRm86OlBkZlJlZmVyZW5jZT4gcmVmZXJlbmNlZE9iamVjdHM7 CistCQkJUG9Eb0ZvOjpQZGZPYmplY3QqIG5leHRPYmogeyBudWxscHRyIH07CisrCQkJY29uc3Qg UG9Eb0ZvOjpQZGZPYmplY3QqIG5leHRPYmogeyBudWxscHRyIH07CisgCQkJUGRmSWQgeE9iaiA9 IHdyaXRlci5uZXdPYmplY3QoKTsKKyAJCQlQZGZJZCB4UmVzb3VyY2VzID0gd3JpdGVyLm5ld09i amVjdCgpOworIAkJCVBkZklkIHhQYXJlbnRzID0gMDsKK0BAIC05ODIyLDcgKzEwMDk4LDcgQEAg Ym9vbCBQREZMaWJDb3JlOjpQREZfRW1iZWRkZWRQREYoUGFnZUl0ZQorIAkJCVB1dERvYygiPDxc bi9UeXBlIC9YT2JqZWN0XG4vU3VidHlwZSAvRm9ybVxuL0Zvcm1UeXBlIDEiKTsKKyAJCQlQb0Rv Rm86OlBkZlJlY3QgcGFnZVJlY3QgPSBwYWdlLT5HZXRBcnRCb3goKTsgLy8gQmVjYXVzZSBzY2lt YWdlZGF0YWxvYWRlcl9wZGYgdXNlIEFydEJveAorIAkJCWludCByb3RhdGlvbiA9IHBhZ2UtPkdl dFJvdGF0aW9uKCk7CistCQkJZG91YmxlIGltZ1dpZHRoICA9IChyb3RhdGlvbiA9PSA5MCB8fCBy b3RhdGlvbiA9PSAyNzApID8gcGFnZVJlY3QuR2V0SGVpZ2h0KCkgOiBwYWdlUmVjdC5HZXRXaWR0 aCgpOworKwkJCWRvdWJsZSBpbWdXaWR0aCA9IChyb3RhdGlvbiA9PSA5MCB8fCByb3RhdGlvbiA9 PSAyNzApID8gcGFnZVJlY3QuR2V0SGVpZ2h0KCkgOiBwYWdlUmVjdC5HZXRXaWR0aCgpOworIAkJ CWRvdWJsZSBpbWdIZWlnaHQgPSAocm90YXRpb24gPT0gOTAgfHwgcm90YXRpb24gPT0gMjcwKSA/ IHBhZ2VSZWN0LkdldFdpZHRoKCkgOiBwYWdlUmVjdC5HZXRIZWlnaHQoKTsKKyAJCQlRVHJhbnNm b3JtIHBhZ2VNOworIAkJCXBhZ2VNLnRyYW5zbGF0ZShwYWdlUmVjdC5HZXRMZWZ0KCksIHBhZ2VS ZWN0LkdldEJvdHRvbSgpKTsKK0BAIC05ODQxLDE0ICsxMDExNywxMyBAQCBib29sIFBERkxpYkNv cmU6OlBERl9FbWJlZGRlZFBERihQYWdlSXRlCisgCQkJUHV0RG9jKCIgIiArIFBkZjo6dG9QZGYo cGFnZVJlY3QuR2V0Qm90dG9tKCkgKyBwYWdlUmVjdC5HZXRIZWlnaHQoKSkpOworIAkJCVB1dERv YygiXSIpOworIAkJCVB1dERvYygiXG4vTWF0cml4IFsiICsgUGRmOjp0b1BkZihwYWdlTS5tMTEo KSkgKyAiICIKKy0JCQkJCQkJCSArIFBkZjo6dG9QZGYocGFnZU0ubTEyKCkpICsgIiAiCistCQkJ CQkJCQkgKyBQZGY6OnRvUGRmKHBhZ2VNLm0yMSgpKSArICIgIgorLQkJCQkJCQkJICsgUGRmOjp0 b1BkZihwYWdlTS5tMjIoKSkgKyAiICIKKy0JCQkJCQkJCSArIFBkZjo6dG9QZGYocGFnZU0uZHgo KSkgICsgIiAiCistCQkJCQkJCQkgKyBQZGY6OnRvUGRmKHBhZ2VNLmR5KCkpICArICIgIik7Cisr CQkJCSsgUGRmOjp0b1BkZihwYWdlTS5tMTIoKSkgKyAiICIKKysJCQkJKyBQZGY6OnRvUGRmKHBh Z2VNLm0yMSgpKSArICIgIgorKwkJCQkrIFBkZjo6dG9QZGYocGFnZU0ubTIyKCkpICsgIiAiCisr CQkJCSsgUGRmOjp0b1BkZihwYWdlTS5keCgpKSArICIgIgorKwkJCQkrIFBkZjo6dG9QZGYocGFn ZU0uZHkoKSkgKyAiICIpOworIAkJCVB1dERvYygiXSIpOworIAkJCVB1dERvYygiXG4vUmVzb3Vy Y2VzICIgKyBQZGY6OnRvUGRmKHhSZXNvdXJjZXMpICsgIiAwIFIiKTsKKy0JCQlQb0RvRm86OlBk Zk9iamVjdCogcGFnZU9iaiA9IHBhZ2UtPkdldE9iamVjdCgpOworIAkJCVBvRG9Gbzo6UGRmRGlj dGlvbmFyeSogcGFnZURpY3QgPSBwYWdlT2JqLT5Jc0RpY3Rpb25hcnkoKSA/ICYocGFnZU9iai0+ R2V0RGljdGlvbmFyeSgpKSA6IG51bGxwdHI7CisgCQkJbmV4dE9iaiA9IHBhZ2VEaWN0ID8gcGFn ZURpY3QtPkZpbmRLZXkoIkdyb3VwIikgOiBudWxscHRyOworIAkJCWlmIChuZXh0T2JqKQorQEAg LTk4NjQsMTYgKzEwMTM5LDE2IEBAIGJvb2wgUERGTGliQ29yZTo6UERGX0VtYmVkZGVkUERGKFBh Z2VJdGUKKyAJCQkJUHV0RG9jKCJcbi9TdHJ1Y3RQYXJlbnRzICIgKyBQZGY6OnRvUGRmKHhQYXJl bnRzKSk7IC8vIHJlcXVpcmVkIGlmIHBhZ2UgdXNlcyBzdHJ1Y3R1cmVkIGNvbnRlbnQKKyAJCQl9 CisgCQkJKi8KKy0JCQljaGFyICogbWJ1ZmZlciA9IG51bGxwdHI7CistCQkJbG9uZyBtbGVuID0g MDsKKyAKKyAJCQkvLyBzZWVtcyBtb3JlIGNvbXBsaWNhdGVkIGF0IGZpcnN0LCBidXQgaW4gZmFj dCBpdCBtYWtlcyB0aGUgY29kZSBtb3JlIHN0YWJsZSB3cnQgcG9kb2ZvIGNoYW5nZXMKKysJCQlj aGFyKiBtYnVmZmVyID0gbnVsbHB0cjsKKysJCQlsb25nIG1sZW4gPSAwOworIAkJCVBvRG9Gbzo6 UGRmTWVtb3J5T3V0cHV0U3RyZWFtIG9TdHJlYW0oMSk7CisgCQkJc3RyZWFtLT5HZXRDb3B5KCZv U3RyZWFtKTsKKyAJCQlvU3RyZWFtLkNsb3NlKCk7CisgCQkJbWxlbiA9IG9TdHJlYW0uR2V0TGVu Z3RoKCk7CisgCQkJbWJ1ZmZlciA9IG9TdHJlYW0uVGFrZUJ1ZmZlcigpOworLQkJCWlmIChtYnVm ZmVyW21sZW4tMV0gPT0gJ1xuJykKKysJCQlpZiAobWJ1ZmZlclttbGVuIC0gMV0gPT0gJ1xuJykK KyAJCQkJLS1tbGVuOworIAkJCVB1dERvYygiXG4vTGVuZ3RoICIgKyBQZGY6OnRvUGRmKHN0YXRp Y19jYXN0PHFsb25nbG9uZz4obWxlbikpKTsKKyAJCQluZXh0T2JqID0gY29udGVudHNEaWN0LkZp bmRLZXkoIkZpbHRlciIpOworQEAgLTk4OTMsNyArMTAxNjgsNyBAQCBib29sIFBERkxpYkNvcmU6 OlBERl9FbWJlZGRlZFBERihQYWdlSXRlCisgCQkJCVFCeXRlQXJyYXkgYnVmZmVyID0gUUJ5dGVB cnJheTo6ZnJvbVJhd0RhdGEobWJ1ZmZlciwgbWxlbik7CisgCQkJCUVuY29kZUFycmF5VG9TdHJl YW0oYnVmZmVyLCB4T2JqKTsKKyAJCQl9ICAvLyBkaXNjb25uZWN0IFFCeXRlQXJyYXkgZnJvbSBy YXcgZGF0YQorLQkJCWZyZWUgKG1idWZmZXIpOworKwkJCWZyZWUobWJ1ZmZlcik7CisgCQkJUHV0 RG9jKCJcbmVuZHN0cmVhbSIpOworIAkJCXdyaXRlci5lbmRPYmooeE9iaik7CisgCQkJLy8gd3Jp dGUgcmVzb3VyY2VzCitAQCAtOTkxNSwxOCArMTAxOTAsMTkgQEAgYm9vbCBQREZMaWJDb3JlOjpQ REZfRW1iZWRkZWRQREYoUGFnZUl0ZQorIAkJCVBvRG9Gbzo6UGRmVmVjT2JqZWN0cyogYWxsT2Jq ZWN0cyA9IGNvbnRlbnRzLT5HZXRPd25lcigpOworIAkJCWZvciAoaW50IGk9MDsgaSA8IHJlZmVy ZW5jZWRPYmplY3RzLnNpemUoKTsgKytpKQorIAkJCXsKKy0JCQkJbmV4dE9iaiA9IGFsbE9iamVj dHMtPkdldE9iamVjdChyZWZlcmVuY2VkT2JqZWN0c1tpXSk7CistCQkJCWNvcHlQb0RvRm9PYmpl Y3QobmV4dE9iaiwgaW1wb3J0ZWRPYmplY3RzW25leHRPYmotPlJlZmVyZW5jZSgpXSwgaW1wb3J0 ZWRPYmplY3RzKTsKKysJCQkJY29uc3QgUG9Eb0ZvOjpQZGZSZWZlcmVuY2UmIHBkZlJlZiA9IHJl ZmVyZW5jZWRPYmplY3RzW2ldOworKwkJCQluZXh0T2JqID0gYWxsT2JqZWN0cy0+R2V0T2JqZWN0 KHBkZlJlZik7CisrCQkJCWNvcHlQb0RvRm9PYmplY3QobmV4dE9iaiwgaW1wb3J0ZWRPYmplY3Rz W3BkZlJlZl0sIGltcG9ydGVkT2JqZWN0cyk7CisgCQkJfQorIAorIAkJCXBhZ2VEYXRhLkltZ09i amVjdHNbUmVzTmFtICsgIkkiICsgUGRmOjp0b1BkZihSZXNDb3VudCldID0geE9iajsKKyAJCQlp bWdJbmZvLlJlc051bSA9IFJlc0NvdW50OworIAkJCVJlc0NvdW50Kys7CisgCQkJLy8gQXZvaWQg YSBkaXZpZGUtYnktemVybyBpZiB3aWR0aC9oZWlnaHQgYXJlIGxlc3MgdGhhbiAxIHBvaW50Ogor LQkJCWltZ0luZm8uV2lkdGggID0gcU1heCgxLCAoaW50KSBpbWdXaWR0aCk7CisrCQkJaW1nSW5m by5XaWR0aCA9IHFNYXgoMSwgKGludCkgaW1nV2lkdGgpOworIAkJCWltZ0luZm8uSGVpZ2h0ID0g cU1heCgxLCAoaW50KSBpbWdIZWlnaHQpOworLQkJCWltZ0luZm8ueGEgID0gc3ggKiBpbWdXaWR0 aCAvIGltZ0luZm8uV2lkdGg7CistCQkJaW1nSW5mby55YSAgPSBzeSAqIGltZ0hlaWdodCAvIGlt Z0luZm8uSGVpZ2h0OworKwkJCWltZ0luZm8ueGEgPSBzeCAqIGltZ1dpZHRoIC8gaW1nSW5mby5X aWR0aDsKKysJCQlpbWdJbmZvLnlhID0gc3kgKiBpbWdIZWlnaHQgLyBpbWdJbmZvLkhlaWdodDsK KyAJCQkvLyBXaWR0aC9IZWlnaHQgYXJlIGludGVnZXJzIGFuZCBtYXkgbm90IGV4YWN0bHkgZXF1 YWwgcGFnZVJlY3QuR2V0V2lkdGgoKS8KKyAJCQkvLyBwYWdlUmVjdC5HZXRIZWlnaHQoKS4gQWRq dXN0IHNjYWxlIGZhY3RvciB0byBjb21wZW5zYXRlIGZvciB0aGUgZGlmZmVyZW5jZS4KKyAJCQlp bWdJbmZvLnN4YSA9IHN4ICogaW1nV2lkdGggLyBpbWdJbmZvLldpZHRoOworQEAgLTk5MzQsNyAr MTAyMTAsNyBAQCBib29sIFBERkxpYkNvcmU6OlBERl9FbWJlZGRlZFBERihQYWdlSXRlCisgCisg CQkJcmV0dXJuIHRydWU7CisgCQl9CistCQlpZiAoY29udGVudHMgJiYgY29udGVudHMtPkdldERh dGFUeXBlKCkgPT0gIFBvRG9Gbzo6ZVBkZkRhdGFUeXBlX0FycmF5KS8vUGFnZSBjb250ZW50cyBt aWdodCBiZSBhbiBhcnJheQorKwkJaWYgKGNvbnRlbnRzICYmIGNvbnRlbnRzLT5HZXREYXRhVHlw ZSgpID09IFBvRG9Gbzo6ZVBkZkRhdGFUeXBlX0FycmF5KS8vUGFnZSBjb250ZW50cyBtaWdodCBi ZSBhbiBhcnJheQorIAkJeworIAkJCVFNYXA8UG9Eb0ZvOjpQZGZSZWZlcmVuY2UsIFBkZklkPiBp bXBvcnRlZE9iamVjdHM7CisgCQkJUUxpc3Q8UG9Eb0ZvOjpQZGZSZWZlcmVuY2U+IHJlZmVyZW5j ZWRPYmplY3RzOworQEAgLTk5NDcsNyArMTAyMjMsNyBAQCBib29sIFBERkxpYkNvcmU6OlBERl9F bWJlZGRlZFBERihQYWdlSXRlCisgCQkJUHV0RG9jKCI8PFxuL1R5cGUgL1hPYmplY3Rcbi9TdWJ0 eXBlIC9Gb3JtXG4vRm9ybVR5cGUgMSIpOworIAkJCVBvRG9Gbzo6UGRmUmVjdCBwYWdlUmVjdCA9 IHBhZ2UtPkdldEFydEJveCgpOyAvLyBCZWNhdXNlIHNjaW1hZ2VkYXRhbG9hZGVyX3BkZiB1c2Ug QXJ0Qm94CisgCQkJaW50IHJvdGF0aW9uID0gcGFnZS0+R2V0Um90YXRpb24oKTsKKy0JCQlkb3Vi bGUgaW1nV2lkdGggID0gKHJvdGF0aW9uID09IDkwIHx8IHJvdGF0aW9uID09IDI3MCkgPyBwYWdl UmVjdC5HZXRIZWlnaHQoKSA6IHBhZ2VSZWN0LkdldFdpZHRoKCk7CisrCQkJZG91YmxlIGltZ1dp ZHRoID0gKHJvdGF0aW9uID09IDkwIHx8IHJvdGF0aW9uID09IDI3MCkgPyBwYWdlUmVjdC5HZXRI ZWlnaHQoKSA6IHBhZ2VSZWN0LkdldFdpZHRoKCk7CisgCQkJZG91YmxlIGltZ0hlaWdodCA9IChy b3RhdGlvbiA9PSA5MCB8fCByb3RhdGlvbiA9PSAyNzApID8gcGFnZVJlY3QuR2V0V2lkdGgoKSA6 IHBhZ2VSZWN0LkdldEhlaWdodCgpOworIAkJCVFUcmFuc2Zvcm0gcGFnZU07CisgCQkJcGFnZU0u dHJhbnNsYXRlKHBhZ2VSZWN0LkdldExlZnQoKSwgcGFnZVJlY3QuR2V0Qm90dG9tKCkpOworQEAg LTk5NjYsMTQgKzEwMjQyLDEzIEBAIGJvb2wgUERGTGliQ29yZTo6UERGX0VtYmVkZGVkUERGKFBh Z2VJdGUKKyAJCQlQdXREb2MoIiAiICsgUGRmOjp0b1BkZihwYWdlUmVjdC5HZXRCb3R0b20oKSAr IHBhZ2VSZWN0LkdldEhlaWdodCgpKSk7CisgCQkJUHV0RG9jKCJdIik7CisgCQkJUHV0RG9jKCJc bi9NYXRyaXggWyIgKyBQZGY6OnRvUGRmKHBhZ2VNLm0xMSgpKSArICIgIgorLQkJCQkJCQkJICsg UGRmOjp0b1BkZihwYWdlTS5tMTIoKSkgKyAiICIKKy0JCQkJCQkJCSArIFBkZjo6dG9QZGYocGFn ZU0ubTIxKCkpICsgIiAiCistCQkJCQkJCQkgKyBQZGY6OnRvUGRmKHBhZ2VNLm0yMigpKSArICIg IgorLQkJCQkJCQkJICsgUGRmOjp0b1BkZihwYWdlTS5keCgpKSAgKyAiICIKKy0JCQkJCQkJCSAr IFBkZjo6dG9QZGYocGFnZU0uZHkoKSkgICsgIiAiKTsKKysJCQkJKyBQZGY6OnRvUGRmKHBhZ2VN Lm0xMigpKSArICIgIgorKwkJCQkrIFBkZjo6dG9QZGYocGFnZU0ubTIxKCkpICsgIiAiCisrCQkJ CSsgUGRmOjp0b1BkZihwYWdlTS5tMjIoKSkgKyAiICIKKysJCQkJKyBQZGY6OnRvUGRmKHBhZ2VN LmR4KCkpICsgIiAiCisrCQkJCSsgUGRmOjp0b1BkZihwYWdlTS5keSgpKSArICIgIik7CisgCQkJ UHV0RG9jKCJdIik7CisgCQkJUHV0RG9jKCJcbi9SZXNvdXJjZXMgIiArIFBkZjo6dG9QZGYoeFJl c291cmNlcykgKyAiIDAgUiIpOworLQkJCVBvRG9Gbzo6UGRmT2JqZWN0KiBwYWdlT2JqID0gcGFn ZS0+R2V0T2JqZWN0KCk7CisgCQkJUG9Eb0ZvOjpQZGZEaWN0aW9uYXJ5KiBwYWdlRGljdCA9IHBh Z2VPYmotPklzRGljdGlvbmFyeSgpID8gJihwYWdlT2JqLT5HZXREaWN0aW9uYXJ5KCkpIDogbnVs bHB0cjsKKyAJCQluZXh0T2JqID0gcGFnZURpY3QgPyBwYWdlRGljdC0+RmluZEtleSgiR3JvdXAi KSA6IG51bGxwdHI7CisgCQkJaWYgKG5leHRPYmopCitAQCAtOTk4MiwxMSArMTAyNTcsMTAgQEAg Ym9vbCBQREZMaWJDb3JlOjpQREZfRW1iZWRkZWRQREYoUGFnZUl0ZQorIAkJCQljb3B5UG9Eb0Zv RGlyZWN0KG5leHRPYmosIHJlZmVyZW5jZWRPYmplY3RzLCBpbXBvcnRlZE9iamVjdHMpOworIAkJ CX0KKyAKKy0JCQljaGFyICogbWJ1ZmZlciA9IG51bGxwdHI7CistCQkJbG9uZyBtbGVuID0gMDsK KyAJCQkvLyBjb3BpZWQgZnJvbSBwb2RvZm9pbXBvc2UKKy0JCQlQb0RvRm86OlBkZk1lbW9yeU91 dHB1dFN0cmVhbSBvdXRNZW1TdHJlYW0gKDEpOworLS8vCQkJUG9Eb0ZvOjpQZGZGaWx0ZXJlZEVu Y29kZVN0cmVhbSBvdXRNZW1TdHJlYW0gKG91dE1lbVN0cmVhbVJhdywgZVBkZkZpbHRlcl9GbGF0 ZURlY29kZSwgZmFsc2UpOworKwkJCWNoYXIqIG1idWZmZXIgPSBudWxscHRyOworKwkJCWxvbmcg bWxlbiA9IDA7CisrCQkJUG9Eb0ZvOjpQZGZNZW1vcnlPdXRwdXRTdHJlYW0gb3V0TWVtU3RyZWFt KDEpOworIAkJCVBvRG9Gbzo6UGRmQXJyYXkgY2FycmF5KHBhZ2UtPkdldENvbnRlbnRzKCktPkdl dEFycmF5KCkpOworIAkJCWZvciAodW5zaWduZWQgaW50IGNpID0gMDsgY2kgPCBjYXJyYXkuc2l6 ZSgpOyArK2NpKQorIAkJCXsKK0BAIC0xMDAwMCw3ICsxMDI3NCw2IEBAIGJvb2wgUERGTGliQ29y ZTo6UERGX0VtYmVkZGVkUERGKFBhZ2VJdGUKKyAKKyAJCQkJCXdoaWxlIChuZXh0T2JqICE9IG51 bGxwdHIpCisgCQkJCQl7CistCisgCQkJCQkJaWYgKG5leHRPYmotPklzUmVmZXJlbmNlKCkpCisg CQkJCQkJeworIAkJCQkJCQluZXh0T2JqID0gZG9jLT5HZXRPYmplY3RzKCkuR2V0T2JqZWN0KG5l eHRPYmotPkdldFJlZmVyZW5jZSgpKTsKK0BAIC0xMDAxNiwyOSArMTAyODksMTMgQEAgYm9vbCBQ REZMaWJDb3JlOjpQREZfRW1iZWRkZWRQREYoUGFnZUl0ZQorIAkJCS8vIGVuZCBvZiBjb3B5Cisg CQkJbWxlbiA9IG91dE1lbVN0cmVhbS5HZXRMZW5ndGgoKTsKKyAJCQltYnVmZmVyID0gb3V0TWVt U3RyZWFtLlRha2VCdWZmZXIoKTsKKy0vLwkJCWlmIChtYnVmZmVyW21sZW4tMV0gPT0gJ1xuJykK Ky0vLwkJCQktLW1sZW47CisgCQkJUHV0RG9jKCJcbi9MZW5ndGggIiArIFBkZjo6dG9QZGYoc3Rh dGljX2Nhc3Q8cWxvbmdsb25nPihtbGVuKSkpOworLS8qCistCQkJbmV4dE9iaiA9IGNvbnRlbnRz RGljdC5GaW5kS2V5KCJGaWx0ZXIiKTsKKy0JCQlpZiAobmV4dE9iaikKKy0JCQl7CistCQkJCVB1 dERvYygiXG4vRmlsdGVyICIpOworLQkJCQljb3B5UG9Eb0ZvRGlyZWN0KG5leHRPYmosIHJlZmVy ZW5jZWRPYmplY3RzLCBpbXBvcnRlZE9iamVjdHMpOworLQkJCX0KKy0JCQluZXh0T2JqID0gY29u dGVudHNEaWN0LkZpbmRLZXkoIkRlY29kZVBhcm1zIik7CistCQkJaWYgKG5leHRPYmopCistCQkJ eworLQkJCQlQdXREb2MoIlxuL0RlY29kZVBhcm1zICIpOworLQkJCQljb3B5UG9Eb0ZvRGlyZWN0 KG5leHRPYmosIHJlZmVyZW5jZWRPYmplY3RzLCBpbXBvcnRlZE9iamVjdHMpOworLQkJCX0KKy0q LworIAkJCVB1dERvYygiXG4+Plxuc3RyZWFtXG4iKTsKKyAJCQl7CisgCQkJCVFCeXRlQXJyYXkg YnVmZmVyID0gUUJ5dGVBcnJheTo6ZnJvbVJhd0RhdGEobWJ1ZmZlciwgbWxlbik7CisgCQkJCUVu Y29kZUFycmF5VG9TdHJlYW0oYnVmZmVyLCB4T2JqKTsKKyAJCQl9ICAvLyBkaXNjb25uZWN0IFFC eXRlQXJyYXkgZnJvbSByYXcgZGF0YQorLQkJCWZyZWUgKG1idWZmZXIpOworKwkJCWZyZWUobWJ1 ZmZlcik7CisgCQkJUHV0RG9jKCJcbmVuZHN0cmVhbSIpOworIAkJCXdyaXRlci5lbmRPYmooeE9i aik7CisgCQkJLy8gd3JpdGUgcmVzb3VyY2VzCitAQCAtMTAwNTgsMjAgKzEwMzE1LDIxIEBAIGJv b2wgUERGTGliQ29yZTo6UERGX0VtYmVkZGVkUERGKFBhZ2VJdGUKKyAJCQl9CisgCQkJLy8gd3Jp dGUgcmVmZXJlbmNlZCBvYmplY3RzCisgCQkJUG9Eb0ZvOjpQZGZWZWNPYmplY3RzKiBhbGxPYmpl Y3RzID0gY29udGVudHMtPkdldE93bmVyKCk7CistCQkJZm9yIChpbnQgaT0wOyBpIDwgcmVmZXJl bmNlZE9iamVjdHMuc2l6ZSgpOyArK2kpCisrCQkJZm9yIChpbnQgaSA9IDA7IGkgPCByZWZlcmVu Y2VkT2JqZWN0cy5zaXplKCk7ICsraSkKKyAJCQl7CistCQkJCW5leHRPYmogPSBhbGxPYmplY3Rz LT5HZXRPYmplY3QocmVmZXJlbmNlZE9iamVjdHNbaV0pOworLQkJCQljb3B5UG9Eb0ZvT2JqZWN0 KG5leHRPYmosIGltcG9ydGVkT2JqZWN0c1tuZXh0T2JqLT5SZWZlcmVuY2UoKV0sIGltcG9ydGVk T2JqZWN0cyk7CisrCQkJCWNvbnN0IFBvRG9Gbzo6UGRmUmVmZXJlbmNlJiBwZGZSZWYgPSByZWZl cmVuY2VkT2JqZWN0c1tpXTsKKysJCQkJbmV4dE9iaiA9IGFsbE9iamVjdHMtPkdldE9iamVjdChw ZGZSZWYpOworKwkJCQljb3B5UG9Eb0ZvT2JqZWN0KG5leHRPYmosIGltcG9ydGVkT2JqZWN0c1tw ZGZSZWZdLCBpbXBvcnRlZE9iamVjdHMpOworIAkJCX0KKyAKKyAJCQlwYWdlRGF0YS5JbWdPYmpl Y3RzW1Jlc05hbSArICJJIiArIFBkZjo6dG9QZGYoUmVzQ291bnQpXSA9IHhPYmo7CisgCQkJaW1n SW5mby5SZXNOdW0gPSBSZXNDb3VudDsKKyAJCQlSZXNDb3VudCsrOworIAkJCS8vIEF2b2lkIGEg ZGl2aWRlLWJ5LXplcm8gaWYgd2lkdGgvaGVpZ2h0IGFyZSBsZXNzIHRoYW4gMSBwb2ludDoKKy0J CQlpbWdJbmZvLldpZHRoICA9IHFNYXgoMSwgKGludCkgaW1nV2lkdGgpOworKwkJCWltZ0luZm8u V2lkdGggPSBxTWF4KDEsIChpbnQpIGltZ1dpZHRoKTsKKyAJCQlpbWdJbmZvLkhlaWdodCA9IHFN YXgoMSwgKGludCkgaW1nSGVpZ2h0KTsKKy0JCQlpbWdJbmZvLnhhICA9IHN4ICogaW1nV2lkdGgg LyBpbWdJbmZvLldpZHRoOworLQkJCWltZ0luZm8ueWEgID0gc3kgKiBpbWdIZWlnaHQgLyBpbWdJ bmZvLkhlaWdodDsKKysJCQlpbWdJbmZvLnhhID0gc3ggKiBpbWdXaWR0aCAvIGltZ0luZm8uV2lk dGg7CisrCQkJaW1nSW5mby55YSA9IHN5ICogaW1nSGVpZ2h0IC8gaW1nSW5mby5IZWlnaHQ7Cisg CQkJLy8gV2lkdGgvSGVpZ2h0IGFyZSBpbnRlZ2VycyBhbmQgbWF5IG5vdCBleGFjdGx5IGVxdWFs IHBhZ2VSZWN0LkdldFdpZHRoKCkvCisgCQkJLy8gcGFnZVJlY3QuR2V0SGVpZ2h0KCkuIEFkanVz dCBzY2FsZSBmYWN0b3IgdG8gY29tcGVuc2F0ZSBmb3IgdGhlIGRpZmZlcmVuY2UuCisgCQkJaW1n SW5mby5zeGEgPSBzeCAqIGltZ1dpZHRoIC8gaW1nSW5mby5XaWR0aDsKK0BAIC0xMDA3OSwyNCAr MTAzMzcsNzYgQEAgYm9vbCBQREZMaWJDb3JlOjpQREZfRW1iZWRkZWRQREYoUGFnZUl0ZQorIAor IAkJCXJldHVybiB0cnVlOworIAkJfQorLQorIAl9CistCWNhdGNoKFBvRG9Gbzo6UGRmRXJyb3Im IGUpCisrCWNhdGNoIChQb0RvRm86OlBkZkVycm9yJiBlKQorIAl7CisgCQlmYXRhbEVycm9yID0g dHJ1ZTsKKyAJCXFEZWJ1ZygpIDw8ICJQb0RvRm8gZXJyb3IhIjsKKyAJCWUuUHJpbnRFcnJvck1z ZygpOworIAkJcmV0dXJuIGZhbHNlOworIAl9CistI2VuZGlmCisrI2VuZGlmIC8vIFBPRE9GT19W RVJTSU9OID49IFBPRE9GT19NQUtFX1ZFUlNJT04oMCwgMTAsIDApCisrCisrI2VuZGlmIC8vIEhB VkVfUE9ET0ZPCisgCXJldHVybiBmYWxzZTsKKyB9CisgCisgCisgI2lmIEhBVkVfUE9ET0ZPCisg Cistdm9pZCBQREZMaWJDb3JlOjpjb3B5UG9Eb0ZvRGlyZWN0KGNvbnN0IFBvRG9Gbzo6UGRmVmFy aWFudCogb2JqLCBRTGlzdDxQb0RvRm86OlBkZlJlZmVyZW5jZT4mIHJlZmVyZW5jZWRPYmplY3Rz LCBRTWFwPFBvRG9Gbzo6UGRmUmVmZXJlbmNlLCBQZGZJZD4mIGltcG9ydGVkT2JqZWN0cykKKyt2 b2lkIFBERkxpYkNvcmU6OmNvcHlQb0RvRm9EaXJlY3QoY29uc3QgUG9Eb0ZvOjpQZGZPYmplY3Qq IG9iaiwgUUxpc3Q8UG9Eb0ZvOjpQZGZSZWZlcmVuY2U+JiByZWZlcmVuY2VkT2JqZWN0cywgUU1h cDxQb0RvRm86OlBkZlJlZmVyZW5jZSwgUGRmSWQ+JiBpbXBvcnRlZE9iamVjdHMpCisgeworKyNp ZiAoUE9ET0ZPX1ZFUlNJT04gPj0gUE9ET0ZPX01BS0VfVkVSU0lPTigwLCAxMCwgMCkpCisrCXN3 aXRjaCAob2JqLT5HZXREYXRhVHlwZSgpKQorKwl7CisrCWNhc2UgUG9Eb0ZvOjpQZGZEYXRhVHlw ZTo6UmVmZXJlbmNlOgorKwl7CisrCQljb25zdCBQb0RvRm86OlBkZlJlZmVyZW5jZSYgcmVmZXJl bmNlKG9iai0+R2V0UmVmZXJlbmNlKCkpOworKwkJUGRmSWQgb2JqTnI7CisrCQlpZiAoIWltcG9y dGVkT2JqZWN0cy5jb250YWlucyhyZWZlcmVuY2UpKQorKwkJeworKwkJCW9iak5yID0gd3JpdGVy Lm5ld09iamVjdCgpOworKwkJCWltcG9ydGVkT2JqZWN0c1tyZWZlcmVuY2VdID0gb2JqTnI7Cisr CQkJcmVmZXJlbmNlZE9iamVjdHMuYXBwZW5kKHJlZmVyZW5jZSk7CisrCQl9CisrCQllbHNlCisr CQl7CisrCQkJb2JqTnIgPSBpbXBvcnRlZE9iamVjdHNbcmVmZXJlbmNlXTsKKysJCX0KKysJCVB1 dERvYygiICIgKyBQZGY6OnRvUGRmKG9iak5yKSArICIgMCBSIik7CisrCQlicmVhazsKKysJfQor KwljYXNlIFBvRG9Gbzo6UGRmRGF0YVR5cGU6OkFycmF5OgorKwl7CisrCQljb25zdCBQb0RvRm86 OlBkZkFycmF5JiBhcnJheShvYmotPkdldEFycmF5KCkpOworKwkJUHV0RG9jKCJbIik7CisrCQlm b3IgKHVpbnQgaSA9IDA7IGkgPCBhcnJheS5zaXplKCk7ICsraSkKKysJCQljb3B5UG9Eb0ZvRGly ZWN0KCYoYXJyYXlbaV0pLCByZWZlcmVuY2VkT2JqZWN0cywgaW1wb3J0ZWRPYmplY3RzKTsKKysJ CVB1dERvYygiXSIpOworKwkJYnJlYWs7CisrCX0KKysJY2FzZSBQb0RvRm86OlBkZkRhdGFUeXBl OjpEaWN0aW9uYXJ5OgorKwl7CisrCQljb25zdCBQb0RvRm86OlBkZkRpY3Rpb25hcnkmIGRpY3Qo b2JqLT5HZXREaWN0aW9uYXJ5KCkpOworKwkJUHV0RG9jKCI8PCIpOworKwkJZm9yIChhdXRvIGsg PSBkaWN0LmJlZ2luKCk7IGsgIT0gZGljdC5lbmQoKTsgKytrKQorKwkJeworKwkJCXN0ZDo6c3Ry aW5nIHN0cigiXG4vIiArIGstPmZpcnN0LkdldEVzY2FwZWROYW1lKCkpOworKwkJCVB1dERvYyhR Qnl0ZUFycmF5Ojpmcm9tUmF3RGF0YShzdHIuZGF0YSgpLCBzdHIuc2l6ZSgpKSk7CisrCQkJY29w eVBvRG9Gb0RpcmVjdCgmay0+c2Vjb25kLCByZWZlcmVuY2VkT2JqZWN0cywgaW1wb3J0ZWRPYmpl Y3RzKTsKKysJCX0KKysJCVB1dERvYygiID4+Iik7CisrCQlicmVhazsKKysJfQorKwlkZWZhdWx0 OgorKwl7CisrCQlzdGQ6OnN0cmluZyBzdHI7CisrCQlvYmotPkdldFZhcmlhbnQoKS5Ub1N0cmlu ZyhzdHIpOworKwkJc3RyID0gIiAiICsgc3RyOworKwkJUHV0RG9jKFFCeXRlQXJyYXk6OmZyb21S YXdEYXRhKHN0ci5kYXRhKCksIHN0ci5zaXplKCkpKTsKKysJfQorKwl9CisrI2Vsc2UKKyAJc3dp dGNoIChvYmotPkdldERhdGFUeXBlKCkpCisgCXsKKyAJCWNhc2UgUG9Eb0ZvOjplUGRmRGF0YVR5 cGVfUmVmZXJlbmNlOgorQEAgLTEwMTQ3LDExICsxMDQ1Nyw0MSBAQCB2b2lkIFBERkxpYkNvcmU6 OmNvcHlQb0RvRm9EaXJlY3QoY29uc3QKKyAJCQlQdXREb2MoUUJ5dGVBcnJheTo6ZnJvbVJhd0Rh dGEoc3RyLmRhdGEoKSwgc3RyLnNpemUoKSkpOworIAkJfQorIAl9CistCisrI2VuZGlmCisgfQor IAorIHZvaWQgUERGTGliQ29yZTo6Y29weVBvRG9Gb09iamVjdChjb25zdCBQb0RvRm86OlBkZk9i amVjdCogb2JqLCBQZGZJZCBzY09iaklELCBRTWFwPFBvRG9Gbzo6UGRmUmVmZXJlbmNlLCBQZGZJ ZD4mIGltcG9ydGVkT2JqZWN0cykKKyB7CisrI2lmIChQT0RPRk9fVkVSU0lPTiA+PSBQT0RPRk9f TUFLRV9WRVJTSU9OKDAsIDEwLCAwKSkKKysJY29uc3QgUG9Eb0ZvOjpQZGZJbmRpcmVjdE9iamVj dExpc3QmIGFsbE9iamVjdHMgPSBvYmotPkdldERvY3VtZW50KCktPkdldE9iamVjdHMoKTsKKysJ UUxpc3Q8UG9Eb0ZvOjpQZGZSZWZlcmVuY2U+IHJlZmVyZW5jZWRPYmplY3RzOworKwl3cml0ZXIu c3RhcnRPYmooc2NPYmpJRCk7CisrCWNvcHlQb0RvRm9EaXJlY3Qob2JqLCByZWZlcmVuY2VkT2Jq ZWN0cywgaW1wb3J0ZWRPYmplY3RzKTsKKysJaWYgKG9iai0+SGFzU3RyZWFtKCkpCisrCXsKKysJ CWNvbnN0IFBvRG9Gbzo6UGRmT2JqZWN0U3RyZWFtKiBzdHJlYW0gPSBvYmotPkdldFN0cmVhbSgp OworKwkJUG9Eb0ZvOjpjaGFyYnVmZiBzdHJCdWZmID0gc3RyZWFtLT5HZXRDb3B5KHRydWUpOwor KwkJY29uc3QgY2hhciogbWJ1ZmZlciA9IHN0ckJ1ZmYuY19zdHIoKTsKKysJCXNpemVfdCBtbGVu ID0gc3RyQnVmZi5zaXplKCk7CisrCQlpZiAobWJ1ZmZlclttbGVuIC0gMV0gPT0gJ1xuJykKKysJ CQktLW1sZW47CisrCQlQdXREb2MoIlxuc3RyZWFtXG4iKTsKKysJCXsKKysJCQlRQnl0ZUFycmF5 IGJ1ZmZlciA9IFFCeXRlQXJyYXk6OmZyb21SYXdEYXRhKG1idWZmZXIsIG1sZW4pOworKwkJCUVu Y29kZUFycmF5VG9TdHJlYW0oYnVmZmVyLCBzY09iaklEKTsKKysJCX0KKysJCVB1dERvYygiXG5l bmRzdHJlYW0iKTsKKysJfQorKwlQdXREb2MoIiIpOworKwl3cml0ZXIuZW5kT2JqKHNjT2JqSUQp OworKwkvLyByZWN1cnNlOgorKwlmb3IgKGludCBpID0gMDsgaSA8IHJlZmVyZW5jZWRPYmplY3Rz LnNpemUoKTsgKytpKQorKwl7CisrCQljb25zdCBQb0RvRm86OlBkZlJlZmVyZW5jZSYgcGRmUmVm ID0gcmVmZXJlbmNlZE9iamVjdHNbaV07CisrCQljb25zdCBQb0RvRm86OlBkZk9iamVjdCogbmV4 dE9iaiA9IGFsbE9iamVjdHMuR2V0T2JqZWN0KHBkZlJlZik7CisrCQljb3B5UG9Eb0ZvT2JqZWN0 KG5leHRPYmosIGltcG9ydGVkT2JqZWN0c1twZGZSZWZdLCBpbXBvcnRlZE9iamVjdHMpOworKwl9 CisrI2Vsc2UKKyAJUG9Eb0ZvOjpQZGZWZWNPYmplY3RzKiBhbGxPYmplY3RzID0gb2JqLT5HZXRP d25lcigpOworIAlRTGlzdDxQb0RvRm86OlBkZlJlZmVyZW5jZT4gcmVmZXJlbmNlZE9iamVjdHM7 CisgCXdyaXRlci5zdGFydE9iaihzY09iaklEKTsKK0BAIC0xMDE1OSw3ICsxMDQ5OSw3IEBAIHZv aWQgUERGTGliQ29yZTo6Y29weVBvRG9Gb09iamVjdChjb25zdAorIAlpZiAob2JqLT5IYXNTdHJl YW0oKSkKKyAJeworIAkJY29uc3QgUG9Eb0ZvOjpQZGZTdHJlYW0qIHN0cmVhbSA9IG9iai0+R2V0 U3RyZWFtKCk7CistCQljaGFyICogbWJ1ZmZlciA9IG51bGxwdHI7CisrCQljaGFyKiBtYnVmZmVy ID0gbnVsbHB0cjsKKyAJCWxvbmcgbWxlbiA9IDA7CisgCisgCQkvLyBzZWVtcyBtb3JlIGNvbXBs aWNhdGVkIGF0IGZpcnN0LCBidXQgaW4gZmFjdCBpdCBtYWtlcyB0aGUgY29kZSBtb3JlIHN0YWJs ZSB3cnQgcG9kb2ZvIGNoYW5nZXMKK0BAIC0xMDE2OCwxNCArMTA1MDgsMTQgQEAgdm9pZCBQREZM aWJDb3JlOjpjb3B5UG9Eb0ZvT2JqZWN0KGNvbnN0CisgCQlvU3RyZWFtLkNsb3NlKCk7CisgCQlt bGVuID0gb1N0cmVhbS5HZXRMZW5ndGgoKTsKKyAJCW1idWZmZXIgPSBvU3RyZWFtLlRha2VCdWZm ZXIoKTsKKy0JCWlmIChtYnVmZmVyW21sZW4tMV0gPT0gJ1xuJykKKysJCWlmIChtYnVmZmVyW21s ZW4gLSAxXSA9PSAnXG4nKQorIAkJCS0tbWxlbjsKKyAJCVB1dERvYygiXG5zdHJlYW1cbiIpOwor IAkJeworIAkJCVFCeXRlQXJyYXkgYnVmZmVyID0gUUJ5dGVBcnJheTo6ZnJvbVJhd0RhdGEobWJ1 ZmZlciwgbWxlbik7CisgCQkJRW5jb2RlQXJyYXlUb1N0cmVhbShidWZmZXIsIHNjT2JqSUQpOwor IAkJfSAgLy8gZGlzY29ubmVjdCBRQnl0ZUFycmF5IGZyb20gcmF3IGRhdGEKKy0JCWZyZWUgKG1i dWZmZXIpOworKwkJZnJlZShtYnVmZmVyKTsKKyAJCVB1dERvYygiXG5lbmRzdHJlYW0iKTsKKyAJ fQorIAlQdXREb2MoIiIpOworQEAgLTEwMTgzLDkgKzEwNTIzLDExIEBAIHZvaWQgUERGTGliQ29y ZTo6Y29weVBvRG9Gb09iamVjdChjb25zdAorIAkvLyByZWN1cnNlOgorIAlmb3IgKGludCBpPTA7 IGkgPCByZWZlcmVuY2VkT2JqZWN0cy5zaXplKCk7ICsraSkKKyAJeworLQkJUG9Eb0ZvOjpQZGZP YmplY3QqIG5leHRPYmogPSBhbGxPYmplY3RzLT5HZXRPYmplY3QocmVmZXJlbmNlZE9iamVjdHNb aV0pOworLQkJY29weVBvRG9Gb09iamVjdChuZXh0T2JqLCBpbXBvcnRlZE9iamVjdHNbbmV4dE9i ai0+UmVmZXJlbmNlKCldLCBpbXBvcnRlZE9iamVjdHMpOworKwkJY29uc3QgUG9Eb0ZvOjpQZGZS ZWZlcmVuY2UmIHBkZlJlZiA9IHJlZmVyZW5jZWRPYmplY3RzW2ldOworKwkJY29uc3QgUG9Eb0Zv OjpQZGZPYmplY3QqIG5leHRPYmogPSBhbGxPYmplY3RzLT5HZXRPYmplY3QocGRmUmVmKTsKKysJ CWNvcHlQb0RvRm9PYmplY3QobmV4dE9iaiwgaW1wb3J0ZWRPYmplY3RzW3BkZlJlZl0sIGltcG9y dGVkT2JqZWN0cyk7CisgCX0KKysjZW5kaWYKKyB9CisgI2VuZGlmCisgCistLS0gYS9zY3JpYnVz L3BkZmxpYl9jb3JlLmgKKysrKyBiL3NjcmlidXMvcGRmbGliX2NvcmUuaAorQEAgLTIyNSw4ICsy MjUsOCBAQCBwcml2YXRlOgorIAlib29sICAgIFBERl9JbWFnZShQYWdlSXRlbSogYywgY29uc3Qg UVN0cmluZyYgZm4sIGRvdWJsZSBzeCwgZG91YmxlIHN5LCBkb3VibGUgeCwgZG91YmxlIHksIGJv b2wgZnJvbUFOID0gZmFsc2UsIGNvbnN0IFFTdHJpbmcmIFByb2ZpbCA9ICIiLCBib29sIEVtYmVk ZGVkID0gZmFsc2UsIGVSZW5kZXJJbnRlbnQgSW50ZW50ID0gSW50ZW50X1JlbGF0aXZlX0NvbG9y aW1ldHJpYywgUUJ5dGVBcnJheSogb3V0cHV0ID0gbnVsbHB0cik7CisgCWJvb2wgICAgUERGX0Vt YmVkZGVkUERGKFBhZ2VJdGVtKiBjLCBjb25zdCBRU3RyaW5nJiBmbiwgZG91YmxlIHN4LCBkb3Vi bGUgc3ksIGRvdWJsZSB4LCBkb3VibGUgeSwgU2hJbSYgaW1nSW5mbywgYm9vbCAmZmF0YWxFcnJv cik7CisgI2lmIEhBVkVfUE9ET0ZPCistCXZvaWQgY29weVBvRG9Gb09iamVjdChjb25zdCBQb0Rv Rm86OlBkZk9iamVjdCogb2JqLCB1aW50IHNjT2JqSUQsIFFNYXA8UG9Eb0ZvOjpQZGZSZWZlcmVu Y2UsIHVpbnQ+JiBpbXBvcnRlZE9iamVjdHMpOworLQl2b2lkIGNvcHlQb0RvRm9EaXJlY3QoY29u c3QgUG9Eb0ZvOjpQZGZWYXJpYW50KiBvYmosIFFMaXN0PFBvRG9Gbzo6UGRmUmVmZXJlbmNlPiYg cmVmZXJlbmNlZE9iamVjdHMsIFFNYXA8UG9Eb0ZvOjpQZGZSZWZlcmVuY2UsIHVpbnQ+JiBpbXBv cnRlZE9iamVjdHMpOworKwl2b2lkIGNvcHlQb0RvRm9PYmplY3QoY29uc3QgUG9Eb0ZvOjpQZGZP YmplY3QqIG9iaiwgUGRmSWQgc2NPYmpJRCwgUU1hcDxQb0RvRm86OlBkZlJlZmVyZW5jZSwgdWlu dD4mIGltcG9ydGVkT2JqZWN0cyk7CisrCXZvaWQgY29weVBvRG9Gb0RpcmVjdChjb25zdCBQb0Rv Rm86OlBkZk9iamVjdCogb2JqLCBRTGlzdDxQb0RvRm86OlBkZlJlZmVyZW5jZT4mIHJlZmVyZW5j ZWRPYmplY3RzLCBRTWFwPFBvRG9Gbzo6UGRmUmVmZXJlbmNlLCB1aW50PiYgaW1wb3J0ZWRPYmpl Y3RzKTsKKyAjZW5kaWYKKyAKKyAJcXVpbnQzMiBlbmNvZGUzMmRWYWwoZG91YmxlIHZhbCkgY29u c3Q7CistLS0gYS9zY3JpYnVzL3BsdWdpbnMvaW1wb3J0L2FpL2ltcG9ydGFpLmNwcAorKysrIGIv c2NyaWJ1cy9wbHVnaW5zL2ltcG9ydC9haS9pbXBvcnRhaS5jcHAKK0BAIC01ODEsMTMgKzU4MSwy NCBAQCBib29sIEFJUGx1Zzo6ZXh0cmFjdEZyb21QREYoY29uc3QgUVN0cmluCisgCX0NCisgCXRy eQ0KKyAJew0KKysjaWYgKFBPRE9GT19WRVJTSU9OIDwgUE9ET0ZPX01BS0VfVkVSU0lPTigwLCAx MCwgMCkpDQorIAkJUG9Eb0ZvOjpQZGZFcnJvcjo6RW5hYmxlRGVidWcoIGZhbHNlICk7DQorIAkJ UG9Eb0ZvOjpQZGZFcnJvcjo6RW5hYmxlTG9nZ2luZyggZmFsc2UgKTsNCistCQlQb0RvRm86OlBk Zk1lbURvY3VtZW50IGRvYyggaW5maWxlLnRvTG9jYWw4Qml0KCkuZGF0YSgpICk7DQorKyNlbmRp Zg0KKysJCVBvRG9Gbzo6UGRmTWVtRG9jdW1lbnQgZG9jOw0KKysJCWRvYy5Mb2FkKGluZmlsZS50 b0xvY2FsOEJpdCgpLmRhdGEoKSk7DQorKyNpZiAoUE9ET0ZPX1ZFUlNJT04gPj0gUE9ET0ZPX01B S0VfVkVSU0lPTigwLCAxMCwgMCkpDQorKwkJUG9Eb0ZvOjpQZGZQYWdlKiBjdXJQYWdlID0gJihk b2MuR2V0UGFnZXMoKS5HZXRQYWdlQXQoMCkpOw0KKysjZWxzZQ0KKyAJCVBvRG9Gbzo6UGRmUGFn ZSAqY3VyUGFnZSA9IGRvYy5HZXRQYWdlKDApOw0KKysjZW5kaWYNCisgCQlpZiAoY3VyUGFnZSAh PSBudWxscHRyKQ0KKyAJCXsNCisrI2lmIChQT0RPRk9fVkVSU0lPTiA+PSBQT0RPRk9fTUFLRV9W RVJTSU9OKDAsIDEwLCAwKSkNCisrCQkJUG9Eb0ZvOjpQZGZPYmplY3QqIHBhZ2VPYmogPSAmKGN1 clBhZ2UtPkdldE9iamVjdCgpKTsNCisrI2Vsc2UNCisgCQkJUG9Eb0ZvOjpQZGZPYmplY3QqIHBh Z2VPYmogPSBjdXJQYWdlLT5HZXRPYmplY3QoKTsNCisrI2VuZGlmDQorIAkJCVBvRG9Gbzo6UGRm RGljdGlvbmFyeSogcGFnZURpY3QgPSAocGFnZU9iaiAmJiBwYWdlT2JqLT5Jc0RpY3Rpb25hcnko KSkgPyAmKHBhZ2VPYmotPkdldERpY3Rpb25hcnkoKSkgOiBudWxscHRyOw0KKyAJCQlQb0RvRm86 OlBkZk9iamVjdCAqcGllY2UgPSBwYWdlRGljdCA/IHBhZ2VEaWN0LT5GaW5kS2V5KCJQaWVjZUlu Zm8iKSA6IG51bGxwdHI7DQorIAkJCWlmIChwaWVjZSAhPSBudWxscHRyKQ0KK0BAIC02MTgsNiAr NjI5LDMzIEBAIGJvb2wgQUlQbHVnOjpleHRyYWN0RnJvbVBERihjb25zdCBRU3RyaW4KKyAJCQkJ CX0NCisgCQkJCQlpZiAoZGF0YSAhPSBudWxscHRyKQ0KKyAJCQkJCXsNCisrI2lmIChQT0RPRk9f VkVSU0lPTiA+PSBQT0RPRk9fTUFLRV9WRVJTSU9OKDAsIDEwLCAwKSkNCisrCQkJCQkJaWYgKG51 bSA9PSAyKQ0KKysJCQkJCQl7DQorKwkJCQkJCQlLZXkgPSBuYW1lLmFyZygxKTsNCisrCQkJCQkJ CWRhdGEgPSBwcml2RGljdC0+RmluZEtleShQb0RvRm86OlBkZk5hbWUoS2V5LnRvVXRmOCgpLmRh dGEoKSkpOw0KKysJCQkJCQkJUG9Eb0ZvOjpQZGZPYmplY3RTdHJlYW0gY29uc3QqIHN0cmVhbSA9 IGRhdGEtPkdldFN0cmVhbSgpOw0KKysJCQkJCQkJUG9Eb0ZvOjpjaGFyYnVmZiBzdHJCdWZmZXIg PSBzdHJlYW0tPkdldENvcHkoZmFsc2UpOw0KKysJCQkJCQkJcWludDY0IGJMZW4gPSBzdHJCdWZm ZXIuc2l6ZSgpOw0KKysJCQkJCQkJY29uc3QgY2hhciogQnVmZmVyID0gc3RyQnVmZmVyLmNfc3Ry KCk7DQorKwkJCQkJCQlvdXRmLndyaXRlKEJ1ZmZlciwgYkxlbik7DQorKwkJCQkJCX0NCisrCQkJ CQkJZWxzZQ0KKysJCQkJCQl7DQorKwkJCQkJCQlmb3IgKGludCBhID0gMjsgYSA8IG51bTsgYSsr KQ0KKysJCQkJCQkJew0KKysJCQkJCQkJCUtleSA9IG5hbWUuYXJnKGEpOw0KKysJCQkJCQkJCWRh dGEgPSBwcml2RGljdC0+RmluZEtleShQb0RvRm86OlBkZk5hbWUoS2V5LnRvVXRmOCgpLmRhdGEo KSkpOw0KKysJCQkJCQkJCWlmIChkYXRhID09IG51bGxwdHIpDQorKwkJCQkJCQkJCWJyZWFrOw0K KysJCQkJCQkJCVBvRG9Gbzo6UGRmT2JqZWN0U3RyZWFtIGNvbnN0KiBzdHJlYW0gPSBkYXRhLT5H ZXRTdHJlYW0oKTsNCisrCQkJCQkJCQlQb0RvRm86OmNoYXJidWZmIHN0ckJ1ZmZlciA9IHN0cmVh bS0+R2V0Q29weShmYWxzZSk7DQorKwkJCQkJCQkJcWludDY0IGJMZW4gPSBzdHJCdWZmZXIuc2l6 ZSgpOw0KKysJCQkJCQkJCWNvbnN0IGNoYXIqIEJ1ZmZlciA9IHN0ckJ1ZmZlci5jX3N0cigpOw0K KysJCQkJCQkJCW91dGYud3JpdGUoQnVmZmVyLCBiTGVuKTsNCisrCQkJCQkJCX0NCisrCQkJCQkJ fQ0KKysjZWxzZQ0KKyAJCQkJCQlpZiAobnVtID09IDIpDQorIAkJCQkJCXsNCisgCQkJCQkJCUtl eSA9IG5hbWUuYXJnKDEpOw0KK0BAIC02NDksNiArNjg3LDcgQEAgYm9vbCBBSVBsdWc6OmV4dHJh Y3RGcm9tUERGKGNvbnN0IFFTdHJpbgorIAkJCQkJCQkJZnJlZSggQnVmZmVyICk7DQorIAkJCQkJ CQl9DQorIAkJCQkJCX0NCisrI2VuZGlmDQorIAkJCQkJfQ0KKyAJCQkJCXJldCA9IHRydWU7DQor IAkJCQl9DQpkaWZmIC0tZ2l0IGEvc3JjcGtncy9zY3JpYnVzL3BhdGNoZXMvMDAxNC1wb2RvZm8t MC4xMC1jb21wYXQtcG9kb2ZvLTAuOS42LnBhdGNoIGIvc3JjcGtncy9zY3JpYnVzL3BhdGNoZXMv MDAxNC1wb2RvZm8tMC4xMC1jb21wYXQtcG9kb2ZvLTAuOS42LnBhdGNoCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjc1MGQ4ZmEwYTk0NDAKLS0tIC9kZXYvbnVsbAor KysgYi9zcmNwa2dzL3NjcmlidXMvcGF0Y2hlcy8wMDE0LXBvZG9mby0wLjEwLWNvbXBhdC1wb2Rv Zm8tMC45LjYucGF0Y2gKQEAgLTAsMCArMSw4NTMgQEAKK0Zyb20gMDAwZDczZDIyYjM2MmEwMTBi ZDRjODBlNjA3NjM0M2JjNjIxMTlmMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEpl YW4gR2hhbGkgPGpnaGFsaUBsaWJlcnR5c3VyZi5mcj4KK0RhdGU6IFdlZCwgMTYgQXVnIDIwMjMg MjA6NTQ6NDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxMC8xM10gIzE3MDA1OiBSZXN0b3JlIGNv bXBhdGliaWxpdHkgd2l0aCBwb2RvZm8gPD0gMC45LjYKKworZ2l0LXN2bi1pZDogc3ZuOi8vc2Ny aWJ1cy5uZXQvdHJ1bmsvU2NyaWJ1c0AyNTYwNCAxMWQyMDcwMS04NDMxLTA0MTAtYTcxMS1lM2M5 NTllM2I4NzAKKyhjaGVycnkgcGlja2VkIGZyb20gY29tbWl0IDZjYTQ5ODRmMTIyYjQ2YTZhYjAz MzAwZWZhYjZiODU4YjVjNzdhMmQpCistLS0KKyBzY3JpYnVzL3BkZl9hbmFseXplci5jcHAgICAg ICAgICAgICAgICB8IDI3NCArKysrKysrKysrKysrKysrKysrKystLS0tCisgc2NyaWJ1cy9wZGZs aWJfY29yZS5jcHAgICAgICAgICAgICAgICAgfCAgODAgKysrKy0tLS0KKyBzY3JpYnVzL3BsdWdp bnMvaW1wb3J0L2FpL2ltcG9ydGFpLmNwcCB8IDEzNCArKysrKysrLS0tLS0KKyAzIGZpbGVzIGNo YW5nZWQsIDM1MCBpbnNlcnRpb25zKCspLCAxMzggZGVsZXRpb25zKC0pCisKKy0tLSBhL3Njcmli dXMvcGRmX2FuYWx5emVyLmNwcAorKysrIGIvc2NyaWJ1cy9wZGZfYW5hbHl6ZXIuY3BwCitAQCAt MzAsMTAgKzMwLDYgQEAgZm9yIHdoaWNoIGEgbmV3IGxpY2Vuc2UgKEdQTCtleGNlcHRpb24pCisg I2lmZGVmIEhBVkVfUE9ET0ZPDQorIHVzaW5nIG5hbWVzcGFjZSBQb0RvRm87DQorIA0KKy0jaWYg KFBPRE9GT19WRVJTSU9OIDwgUE9ET0ZPX01BS0VfVkVSU0lPTigwLCAxMCwgMCkpDQorLSNkZWZp bmUgSXNSZWFsU3RyaWN0IElzUmVhbA0KKy0jZW5kaWYNCistDQorIHN0YXRpYyBRSGFzaDxRU3Ry aW5nLCBQREZDb250ZW50U3RyZWFtS2V5d29yZD4ga3dOYW1lTWFwOw0KKyANCisgLy8gd2UgZ29u bmEgbmVlZCBhIG1hcCBmcm9tIHN0cmluZyB2YWx1ZXMgdG8gdGhlIGRlZmluZWQgZW51bSBvZiBw ZGYga2V5d29yZHMNCitAQCAtMTg0LDYgKzE4MCw3IEBAIFBERkNvbG9yU3BhY2UgUERGQW5hbHl6 ZXI6OmdldENTVHlwZShQZGYKKyANCisgYm9vbCBQREZBbmFseXplcjo6aW5zcGVjdENhbnZhcyhQ ZGZDYW52YXMqIGNhbnZhcywgUUxpc3Q8UERGQ29sb3JTcGFjZT4gJiB1c2VkQ29sb3JTcGFjZXMs IGJvb2wgJiBoYXNUcmFuc3BhcmVuY3ksIFFMaXN0PFBERkZvbnQ+ICYgdXNlZEZvbnRzLCBRTGlz dDxQREZJbWFnZT4gJiBpbWdzKQ0KKyB7DQorKyNpZiAoUE9ET0ZPX1ZFUlNJT04gPj0gUE9ET0ZP X01BS0VfVkVSU0lPTigwLCAxMCwgMCkpDQorIAkvLyB0aGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0 byBnZXQgdXNlZCBjb2xvciBzcGFjZXMsIGRldGVjdCB0cmFuc3BhcmVuY3ksIGFuZCBnZXQgdXNl ZCBmb250cyBpbiBlaXRoZXIgUGRmUGFnZSBvciBQZGZYT2JqZWN0DQorIAlQZGZEaWN0aW9uYXJ5 KiBjb2xvclNwYWNlc0RpY3QgeyBudWxscHRyIH07DQorIAlQZGZEaWN0aW9uYXJ5KiB4T2JqZWN0 c0RpY3QgeyBudWxscHRyIH07DQorQEAgLTE5OCwyMSArMTk1LDEyIEBAIGJvb2wgUERGQW5hbHl6 ZXI6Omluc3BlY3RDYW52YXMoUGRmQ2FudmEKKyAJCS8vIGdldCBob2xkIG9mIGEgUGRmT2JqZWN0 IHBvaW50ZXIgb2YgdGhpcyBjYW52YXMNCisgCQkvLyBuZWVkZWQgZm9yIHRoZSBmaW5kaW5nIHJl c291cmNlcyBjb2RlIGJlbG93IHRvIHdvcmsNCisgCQlQZGZQYWdlKiBwYWdlID0gZHluYW1pY19j YXN0PFBkZlBhZ2UqPihjYW52YXMpOw0KKy0jaWYgKFBPRE9GT19WRVJTSU9OID49IFBPRE9GT19N QUtFX1ZFUlNJT04oMCwgMTAsIDApKQ0KKyAJCVBkZk9iamVjdCogY2FudmFzT2JqZWN0ID0gcGFn ZSA/ICYocGFnZS0+R2V0T2JqZWN0KCkpIDogJihkeW5hbWljX2Nhc3Q8UGRmWE9iamVjdCo+KGNh bnZhcyktPkdldE9iamVjdCgpKTsNCistDQorLSNlbHNlDQorLQkJUGRmT2JqZWN0KiBjYW52YXNP YmplY3QgPSBwYWdlID8gKHBhZ2UtPkdldE9iamVjdCgpKSA6ICgoZHluYW1pY19jYXN0PFBkZlhP YmplY3QqPihjYW52YXMpKS0+R2V0T2JqZWN0KCkpOw0KKy0jZW5kaWYNCisgCQlQZGZEaWN0aW9u YXJ5KiBjYW52YXNEaWN0ID0gKGNhbnZhc09iamVjdCAmJiBjYW52YXNPYmplY3QtPklzRGljdGlv bmFyeSgpKSA/ICYoY2FudmFzT2JqZWN0LT5HZXREaWN0aW9uYXJ5KCkpIDogbnVsbHB0cjsNCisg DQorIAkJLy8gZmluZCBhIHJlc291cmNlIHdpdGggQ29sb3JTcGFjZSBlbnRyeQ0KKy0jaWYgKFBP RE9GT19WRVJTSU9OID49IFBPRE9GT19NQUtFX1ZFUlNJT04oMCwgMTAsIDApKQ0KKyAJCVBkZlJl c291cmNlcyogY2FudmFzUnNyYyA9IGNhbnZhcy0+R2V0UmVzb3VyY2VzKCk7DQorIAkJUGRmT2Jq ZWN0KiByZXNvdXJjZXMgPSAmKGNhbnZhc1JzcmMtPkdldE9iamVjdCgpKTsNCistI2Vsc2UNCist CQlQZGZPYmplY3QqIHJlc291cmNlcyA9IGNhbnZhcy0+R2V0UmVzb3VyY2VzKCk7DQorLSNlbmRp Zg0KKyAJCWZvciAoUGRmRGljdGlvbmFyeSogcGFyID0gY2FudmFzRGljdCwgKnBhcmVudERpY3Qg PSBudWxscHRyOyBwYXIgJiYgIXJlc291cmNlczsgcGFyID0gcGFyZW50RGljdCkNCisgCQl7DQor IAkJCXJlc291cmNlcyA9IHBhci0+RmluZEtleSgiUmVzb3VyY2VzIik7DQorQEAgLTI2MiwyNiAr MjUwLDI0IEBAIGJvb2wgUERGQW5hbHl6ZXI6Omluc3BlY3RDYW52YXMoUGRmQ2FudmEKKyANCisg CXRyeQ0KKyAJew0KKy0jaWYgKFBPRE9GT19WRVJTSU9OID49IFBPRE9GT19NQUtFX1ZFUlNJT04o MCwgMTAsIDApKQ0KKyAJCS8vIHN0YXJ0IHBhcnNpbmcgdGhlIGNvbnRlbnQgc3RyZWFtDQorIAkJ UGRmQ29udGVudFJlYWRlckFyZ3MgdG9rZW5pemVyQXJncyA9IHsgUGRmQ29udGVudFJlYWRlckZs YWdzOjpEb250Rm9sbG93WE9iamVjdEZvcm1zIH07DQorIAkJUGRmQ29udGVudFN0cmVhbVJlYWRl ciB0b2tlbml6ZXIoKmNhbnZhcywgdG9rZW5pemVyQXJncyk7DQorIAkJUGRmQ29udGVudCBwZGZD b250ZW50Ow0KKyAJCVBkZlZhcmlhbnQgdmFyOw0KKy0JCWJvb2wgcmVhZFRva2VuOw0KKyANCisg CQlpbnQgdG9rZW5OdW1iZXIgPSAwOw0KKyAJCWJvb2wgaW5saW5lSW1nRGljdCA9IGZhbHNlOw0K KyAJCVFMaXN0PFBkZlZhcmlhbnQ+IGFyZ3M7DQorIAkJUVN0YWNrPFBERkdyYXBoaWNTdGF0ZT4g Z3NTdGFjazsNCisgCQlQREZHcmFwaGljU3RhdGUgY3VyckdTOw0KKy0JCXdoaWxlICgocmVhZFRv a2VuID0gdG9rZW5pemVyLlRyeVJlYWROZXh0KHBkZkNvbnRlbnQpKSkNCisrCQl3aGlsZSAodG9r ZW5pemVyLlRyeVJlYWROZXh0KHBkZkNvbnRlbnQpKQ0KKyAJCXsNCisgCQkJKyt0b2tlbk51bWJl cjsNCisgCQkJaWYgKHBkZkNvbnRlbnQuVHlwZSA9PSBQZGZDb250ZW50VHlwZTo6T3BlcmF0b3Ip DQorIAkJCXsNCisgCQkJCWFyZ3MuY2xlYXIoKTsNCistCQkJCWludCBzdGFja1NpemUgPSBwZGZD b250ZW50LlN0YWNrLnNpemUoKTsNCisrCQkJCXNpemVfdCBzdGFja1NpemUgPSBwZGZDb250ZW50 LlN0YWNrLnNpemUoKTsNCisgCQkJCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhY2tTaXplOyAr K2kpDQorIAkJCQkJYXJncy5hcHBlbmQocGRmQ29udGVudC5TdGFja1tzdGFja1NpemUgLSAxIC0g aV0pOw0KKyAJCQkJc3dpdGNoIChwZGZDb250ZW50Lk9wZXJhdG9yKQ0KK0BAIC02NjksNyArNjU1 LDcgQEAgYm9vbCBQREZBbmFseXplcjo6aW5zcGVjdENhbnZhcyhQZGZDYW52YQorIAkJCWlmIChw ZGZDb250ZW50LlR5cGUgPT0gUGRmQ29udGVudFR5cGU6OkRvWE9iamVjdCkNCisgCQkJew0KKyAJ CQkJYXJncy5jbGVhcigpOw0KKy0JCQkJaW50IHN0YWNrU2l6ZSA9IHBkZkNvbnRlbnQuU3RhY2su c2l6ZSgpOw0KKysJCQkJc2l6ZV90IHN0YWNrU2l6ZSA9IHBkZkNvbnRlbnQuU3RhY2suc2l6ZSgp Ow0KKyAJCQkJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGFja1NpemU7ICsraSkNCisgCQkJCQlh cmdzLmFwcGVuZChwZGZDb250ZW50LlN0YWNrW3N0YWNrU2l6ZSAtIDEgLSBpXSk7DQorIAkJCQlp ZiAoIXByb2Nlc3NlZE5hbWVkWE9iai5jb250YWlucyhhcmdzWzBdLkdldE5hbWUoKSkpDQorQEAg LTcyMyw3ICs3MDksNzMgQEAgYm9vbCBQREZBbmFseXplcjo6aW5zcGVjdENhbnZhcyhQZGZDYW52 YQorIAkJCQl9DQorIAkJCX0NCisgCQl9DQorKwl9DQorKwljYXRjaCAoUGRmRXJyb3IgJiBlKQ0K KysJew0KKysJCXFEZWJ1ZygpIDw8ICJFcnJvciBpbiBwYXJzaW5nIGNvbnRlbnQgc3RyZWFtIEZp bGU6IiA8PCBtX2ZpbGVuYW1lOw0KKysJCWUuUHJpbnRFcnJvck1zZygpOw0KKysJCXJldHVybiBm YWxzZTsNCisrCX0NCisrCXJldHVybiB0cnVlOw0KKyAjZWxzZQ0KKysJLy8gdGhpcyBtZXRob2Qg Y2FuIGJlIHVzZWQgdG8gZ2V0IHVzZWQgY29sb3Igc3BhY2VzLCBkZXRlY3QgdHJhbnNwYXJlbmN5 LCBhbmQgZ2V0IHVzZWQgZm9udHMgaW4gZWl0aGVyIFBkZlBhZ2Ugb3IgUGRmWE9iamVjdA0KKysJ UGRmT2JqZWN0KiBjb2xvclNwYWNlUmVzIHsgbnVsbHB0ciB9Ow0KKysJUGRmT2JqZWN0KiB4T2Jq ZWN0cyB7IG51bGxwdHIgfTsNCisrCVBkZk9iamVjdCogdHJhbnNHcm91cCB7IG51bGxwdHIgfTsN CisrCVBkZk9iamVjdCogZXh0R1N0YXRlIHsgbnVsbHB0ciB9Ow0KKysJUGRmT2JqZWN0KiBmb250 UmVzIHsgbnVsbHB0ciB9Ow0KKysJUU1hcDxQZGZOYW1lLCBQREZDb2xvclNwYWNlPiBwcm9jZXNz ZWROYW1lZENTOw0KKysJUU1hcDxQZGZOYW1lLCBQREZGb250PiBwcm9jZXNzZWROYW1lZEZvbnQ7 DQorKwlRTGlzdDxQZGZOYW1lPiBwcm9jZXNzZWROYW1lZFhPYmo7DQorKwlRTGlzdDxQZGZOYW1l PiBwcm9jZXNzZWROYW1lZEdTOw0KKysJdHJ5DQorKwl7DQorKwkJLy8gZ2V0IGhvbGQgb2YgYSBQ ZGZPYmplY3QgcG9pbnRlciBvZiB0aGlzIGNhbnZhcw0KKysJCS8vIG5lZWRlZCBmb3IgdGhlIGZp bmRpbmcgcmVzb3VyY2VzIGNvZGUgYmVsb3cgdG8gd29yaw0KKysJCVBkZlBhZ2UqIHBhZ2UgPSBk eW5hbWljX2Nhc3Q8UGRmUGFnZSo+KGNhbnZhcyk7DQorKwkJUGRmT2JqZWN0KiBjYW52YXNPYmpl Y3QgPSBwYWdlID8gKHBhZ2UtPkdldE9iamVjdCgpKSA6ICgoZHluYW1pY19jYXN0PFBkZlhPYmpl Y3QqPihjYW52YXMpKS0+R2V0T2JqZWN0KCkpOw0KKysNCisrCQkvLyBmaW5kIGEgcmVzb3VyY2Ug d2l0aCBDb2xvclNwYWNlIGVudHJ5DQorKwkJUGRmT2JqZWN0KiByZXNvdXJjZXMgPSBjYW52YXMt PkdldFJlc291cmNlcygpOw0KKysJCWZvciAoUGRmT2JqZWN0KiBwYXIgPSBjYW52YXNPYmplY3Q7 IHBhciAmJiAhcmVzb3VyY2VzOyBwYXIgPSBwYXItPkdldEluZGlyZWN0S2V5KCJQYXJlbnQiKSkN CisrCQl7DQorKwkJCXJlc291cmNlcyA9IHBhci0+R2V0SW5kaXJlY3RLZXkoIlJlc291cmNlcyIp Ow0KKysJCX0NCisrCQljb2xvclNwYWNlUmVzID0gcmVzb3VyY2VzID8gcmVzb3VyY2VzLT5HZXRJ bmRpcmVjdEtleSgiQ29sb3JTcGFjZSIpIDogbnVsbHB0cjsNCisrCQl4T2JqZWN0cyA9IHJlc291 cmNlcyA/IHJlc291cmNlcy0+R2V0SW5kaXJlY3RLZXkoIlhPYmplY3QiKSA6IG51bGxwdHI7DQor KwkJZXh0R1N0YXRlID0gcmVzb3VyY2VzID8gcmVzb3VyY2VzLT5HZXRJbmRpcmVjdEtleSgiRXh0 R1N0YXRlIikgOiBudWxscHRyOw0KKysJCWZvbnRSZXMgPSByZXNvdXJjZXMgPyByZXNvdXJjZXMt PkdldEluZGlyZWN0S2V5KCJGb250IikgOiBudWxscHRyOw0KKysNCisrCQkvLyBnZXR0aW5nIHRo ZSB0cmFuc3BhcmVuY3kgZ3JvdXAgb2YgdGhpcyBjb250ZW50IHN0cmVhbSAoaWYgYXZhaWxhYmxl KQ0KKysJCXRyYW5zR3JvdXAgPSBjYW52YXNPYmplY3QgPyBjYW52YXNPYmplY3QtPkdldEluZGly ZWN0S2V5KCJHcm91cCIpIDogbnVsbHB0cjsNCisrCQlpZiAodHJhbnNHcm91cCkNCisrCQl7DQor KwkJCVBkZk9iamVjdCogc3VidHlwZSA9IHRyYW5zR3JvdXAtPkdldEluZGlyZWN0S2V5KCJTIik7 DQorKwkJCWlmIChzdWJ0eXBlICYmIHN1YnR5cGUtPkdldE5hbWUoKSA9PSAiVHJhbnNwYXJlbmN5 IikNCisrCQkJew0KKysJCQkJLy8gaGF2aW5nIHRyYW5zcGFyZW5jeSBncm91cCBtZWFucyB0aGVy ZSdzIHRyYW5zcGFyZW5jeSBpbiB0aGUgUERGDQorKwkJCQloYXNUcmFuc3BhcmVuY3kgPSB0cnVl Ow0KKysNCisrCQkJCS8vIHJlcG9ydGluZyB0aGUgY29sb3Igc3BhY2UgdXNlZCBpbiB0cmFuc3Bh cmVuY3kgZ3JvdXAgKFNlY3Rpb24gNy41LjUsIFBERiAxLjYgU3BlYykNCisrCQkJCVBkZk9iamVj dCogY3MgPSB0cmFuc0dyb3VwLT5HZXRJbmRpcmVjdEtleSgiQ1MiKTsNCisrCQkJCWlmIChjcykN CisrCQkJCXsNCisrCQkJCQlQREZDb2xvclNwYWNlIHJldHZhbCA9IGdldENTVHlwZShjcyk7DQor KwkJCQkJaWYgKHJldHZhbCAhPSBDU19Vbmtub3duICYmICF1c2VkQ29sb3JTcGFjZXMuY29udGFp bnMocmV0dmFsKSkNCisrCQkJCQkJdXNlZENvbG9yU3BhY2VzLmFwcGVuZChyZXR2YWwpOw0KKysJ CQkJfQ0KKysJCQl9DQorKwkJfQ0KKysJfQ0KKysJY2F0Y2ggKFBkZkVycm9yICYgZSkNCisrCXsN CisrCQlxRGVidWcoKSA8PCAiRXJyb3IgaW4gYW5hbHl6aW5nIHN0cmVhbSdzIHJlc291cmNlcy4g RmlsZToiIDw8IG1fZmlsZW5hbWU7DQorKwkJZS5QcmludEVycm9yTXNnKCk7DQorKwkJcmV0dXJu IGZhbHNlOw0KKysJfQ0KKysNCisrCXRyeQ0KKysJew0KKyAJCS8vIHN0YXJ0IHBhcnNpbmcgdGhl IGNvbnRlbnQgc3RyZWFtDQorIAkJUGRmQ29udGVudHNUb2tlbml6ZXIgdG9rZW5pemVyKGNhbnZh cyk7DQorIAkJRVBkZkNvbnRlbnRzVHlwZSB0Ow0KK0BAIC04ODAsOSArOTMyLDkgQEAgYm9vbCBQ REZBbmFseXplcjo6aW5zcGVjdENhbnZhcyhQZGZDYW52YQorIAkJCQkJCQl9DQorIAkJCQkJCQll bHNlDQorIAkJCQkJCQl7DQorLQkJCQkJCQkJaWYgKGNvbG9yU3BhY2VzRGljdCAmJiBjb2xvclNw YWNlc0RpY3QtPkZpbmRLZXkoYXJnc1swXS5HZXROYW1lKCkpKQ0KKysJCQkJCQkJCWlmIChjb2xv clNwYWNlUmVzICYmIGNvbG9yU3BhY2VSZXMtPkdldEluZGlyZWN0S2V5KGFyZ3NbMF0uR2V0TmFt ZSgpKSkNCisgCQkJCQkJCQl7DQorLQkJCQkJCQkJCVBkZk9iamVjdCogY3NFbnRyeSA9IGNvbG9y U3BhY2VzRGljdC0+RmluZEtleShhcmdzWzBdLkdldE5hbWUoKSk7DQorKwkJCQkJCQkJCVBkZk9i amVjdCogY3NFbnRyeSA9IGNvbG9yU3BhY2VSZXMtPkdldEluZGlyZWN0S2V5KGFyZ3NbMF0uR2V0 TmFtZSgpKTsNCisgCQkJCQkJCQkJUERGQ29sb3JTcGFjZSByZXR2YWwgPSBnZXRDU1R5cGUoY3NF bnRyeSk7DQorIAkJCQkJCQkJCWlmIChyZXR2YWwgIT0gQ1NfVW5rbm93biAmJiAhdXNlZENvbG9y U3BhY2VzLmNvbnRhaW5zKHJldHZhbCkpDQorIAkJCQkJCQkJCQl1c2VkQ29sb3JTcGFjZXMuYXBw ZW5kKHJldHZhbCk7DQorQEAgLTk0OSw5ICsxMDAxLDkgQEAgYm9vbCBQREZBbmFseXplcjo6aW5z cGVjdENhbnZhcyhQZGZDYW52YQorIAkJCQkJCQl9DQorIAkJCQkJCQllbHNlDQorIAkJCQkJCQl7 DQorLQkJCQkJCQkJaWYgKGNvbG9yU3BhY2VzRGljdCAmJiBjb2xvclNwYWNlc0RpY3QtPkZpbmRL ZXkoYXJnc1swXS5HZXROYW1lKCkpKQ0KKysJCQkJCQkJCWlmIChjb2xvclNwYWNlUmVzICYmIGNv bG9yU3BhY2VSZXMtPkdldEluZGlyZWN0S2V5KGFyZ3NbMF0uR2V0TmFtZSgpKSkNCisgCQkJCQkJ CQl7DQorLQkJCQkJCQkJCVBkZk9iamVjdCogY3NFbnRyeSA9IGNvbG9yU3BhY2VzRGljdC0+Rmlu ZEtleShhcmdzWzBdLkdldE5hbWUoKSk7DQorKwkJCQkJCQkJCVBkZk9iamVjdCogY3NFbnRyeSA9 IGNvbG9yU3BhY2VSZXMtPkdldEluZGlyZWN0S2V5KGFyZ3NbMF0uR2V0TmFtZSgpKTsNCisgCQkJ CQkJCQkJUERGQ29sb3JTcGFjZSByZXR2YWwgPSBnZXRDU1R5cGUoY3NFbnRyeSk7DQorIAkJCQkJ CQkJCWlmIChyZXR2YWwgIT0gQ1NfVW5rbm93biAmJiAhdXNlZENvbG9yU3BhY2VzLmNvbnRhaW5z KHJldHZhbCkpDQorIAkJCQkJCQkJCQl1c2VkQ29sb3JTcGFjZXMuYXBwZW5kKHJldHZhbCk7DQor QEAgLTEwMDMsMjkgKzEwNTUsMjggQEAgYm9vbCBQREZBbmFseXplcjo6aW5zcGVjdENhbnZhcyhQ ZGZDYW52YQorIAkJCQkJew0KKyAJCQkJCWlmICghcHJvY2Vzc2VkTmFtZWRYT2JqLmNvbnRhaW5z KGFyZ3NbMF0uR2V0TmFtZSgpKSkNCisgCQkJCQl7DQorLQkJCQkJCWlmIChhcmdzLnNpemUoKSA9 PSAxICYmIGFyZ3NbMF0uSXNOYW1lKCkgJiYgeE9iamVjdHNEaWN0KQ0KKysJCQkJCQlpZiAoYXJn cy5zaXplKCkgPT0gMSAmJiBhcmdzWzBdLklzTmFtZSgpICYmIHhPYmplY3RzKQ0KKyAJCQkJCQl7 DQorLQkJCQkJCQlQZGZPYmplY3QqIHhPYmplY3QgPSB4T2JqZWN0c0RpY3QtPkZpbmRLZXkoYXJn c1swXS5HZXROYW1lKCkpOw0KKy0JCQkJCQkJUGRmRGljdGlvbmFyeSogeE9iamVjdERpY3QgPSAo eE9iamVjdCAmJiB4T2JqZWN0LT5Jc0RpY3Rpb25hcnkoKSkgPyAmKHhPYmplY3QtPkdldERpY3Rp b25hcnkoKSkgOiBudWxscHRyOw0KKy0JCQkJCQkJUGRmT2JqZWN0KiBzdWJ0eXBlT2JqZWN0ID0g eE9iamVjdERpY3QgPyB4T2JqZWN0RGljdC0+RmluZEtleSgiU3VidHlwZSIpIDogbnVsbHB0cjsN CisrCQkJCQkJCVBkZk9iamVjdCogeE9iamVjdCA9IHhPYmplY3RzLT5HZXRJbmRpcmVjdEtleShh cmdzWzBdLkdldE5hbWUoKSk7DQorKwkJCQkJCQlQZGZPYmplY3QqIHN1YnR5cGVPYmplY3QgPSB4 T2JqZWN0ID8geE9iamVjdC0+R2V0SW5kaXJlY3RLZXkoIlN1YnR5cGUiKSA6IG51bGxwdHI7DQor IAkJCQkJCQlpZiAoc3VidHlwZU9iamVjdCAmJiBzdWJ0eXBlT2JqZWN0LT5Jc05hbWUoKSkNCisg CQkJCQkJCXsNCisgCQkJCQkJCQlpZiAoc3VidHlwZU9iamVjdC0+R2V0TmFtZSgpID09ICJJbWFn ZSIpDQorIAkJCQkJCQkJew0KKy0JCQkJCQkJCQlQZGZPYmplY3QqIGltZ0NvbG9yU3BhY2UgPSB4 T2JqZWN0RGljdC0+RmluZEtleSgiQ29sb3JTcGFjZSIpOw0KKysJCQkJCQkJCQlQZGZPYmplY3Qq IGltZ0NvbG9yU3BhY2UgPSB4T2JqZWN0LT5HZXRJbmRpcmVjdEtleSgiQ29sb3JTcGFjZSIpOw0K KyAJCQkJCQkJCQlpZiAoaW1nQ29sb3JTcGFjZSkNCisgCQkJCQkJCQkJew0KKyAJCQkJCQkJCQkJ UERGQ29sb3JTcGFjZSByZXR2YWwgPSBnZXRDU1R5cGUoaW1nQ29sb3JTcGFjZSk7DQorIAkJCQkJ CQkJCQlpZiAocmV0dmFsICE9IENTX1Vua25vd24gJiYgIXVzZWRDb2xvclNwYWNlcy5jb250YWlu cyhyZXR2YWwpKQ0KKyAJCQkJCQkJCQkJCXVzZWRDb2xvclNwYWNlcy5hcHBlbmQocmV0dmFsKTsN CisgCQkJCQkJCQkJfQ0KKy0JCQkJCQkJCQlQZGZPYmplY3QqIHNNYXNrT2JqID0geE9iamVjdERp Y3QtPkZpbmRLZXkoIlNNYXNrIik7DQorKwkJCQkJCQkJCVBkZk9iamVjdCogc01hc2tPYmogPSB4 T2JqZWN0LT5HZXRJbmRpcmVjdEtleSgiU01hc2siKTsNCisgCQkJCQkJCQkJaWYgKHNNYXNrT2Jq KQ0KKyAJCQkJCQkJCQkJaGFzVHJhbnNwYXJlbmN5ID0gdHJ1ZTsNCisgCQkJCQkJCQkJUERGSW1h Z2UgaW1nOw0KKyAJCQkJCQkJCQlpbWcuaW1nTmFtZSA9IGFyZ3NbMF0uR2V0TmFtZSgpLkdldEVz Y2FwZWROYW1lKCkuY19zdHIoKTsNCistCQkJCQkJCQkJZG91YmxlIHdpZHRoID0geE9iamVjdERp Y3QtPkZpbmRLZXkoIldpZHRoIiktPkdldFJlYWwoKTsNCistCQkJCQkJCQkJZG91YmxlIGhlaWdo dCA9IHhPYmplY3REaWN0LT5GaW5kS2V5KCJIZWlnaHQiKS0+R2V0UmVhbCgpOw0KKysJCQkJCQkJ CQlkb3VibGUgd2lkdGggPSB4T2JqZWN0LT5HZXRJbmRpcmVjdEtleSgiV2lkdGgiKS0+R2V0UmVh bCgpOw0KKysJCQkJCQkJCQlkb3VibGUgaGVpZ2h0ID0geE9iamVjdC0+R2V0SW5kaXJlY3RLZXko IkhlaWdodCIpLT5HZXRSZWFsKCk7DQorIAkJCQkJCQkJCWltZy5kcGlYID0gcVJvdW5kKHdpZHRo LyhjdXJyR1MuY3RtLm0xMSgpLzcyKSk7DQorIAkJCQkJCQkJCWltZy5kcGlZID0gcVJvdW5kKGhl aWdodC8oY3VyckdTLmN0bS5tMjIoKS83MikpOw0KKyAJCQkJCQkJCQlpbWdzLmFwcGVuZChpbWcp Ow0KK0BAIC0xMDc0LDkgKzExMjUsOSBAQCBib29sIFBERkFuYWx5emVyOjppbnNwZWN0Q2FudmFz KFBkZkNhbnZhCisgCQkJCQkJCQkJdXNlZENvbG9yU3BhY2VzLmFwcGVuZChDU19EZXZpY2VDTVlL KTsNCisgCQkJCQkJCQllbHNlIGlmICghcHJvY2Vzc2VkTmFtZWRDUy5jb250YWlucyhjc05hbWUp KQ0KKyAJCQkJCQkJCXsNCistCQkJCQkJCQkJaWYgKGNvbG9yU3BhY2VzRGljdCAmJiBjb2xvclNw YWNlc0RpY3QtPkZpbmRLZXkoY3NOYW1lKSkNCisrCQkJCQkJCQkJaWYgKGNvbG9yU3BhY2VSZXMg JiYgY29sb3JTcGFjZVJlcy0+R2V0SW5kaXJlY3RLZXkoY3NOYW1lKSkNCisgCQkJCQkJCQkJew0K Ky0JCQkJCQkJCQkJUGRmT2JqZWN0KiBjc0VudHJ5ID0gY29sb3JTcGFjZXNEaWN0LT5GaW5kS2V5 KGNzTmFtZSk7DQorKwkJCQkJCQkJCQlQZGZPYmplY3QqIGNzRW50cnkgPSBjb2xvclNwYWNlUmVz LT5HZXRJbmRpcmVjdEtleShjc05hbWUpOw0KKyAJCQkJCQkJCQkJaWYgKGNzRW50cnkpDQorIAkJ CQkJCQkJCQl7DQorIAkJCQkJCQkJCQkJUERGQ29sb3JTcGFjZSByZXR2YWwgPSBnZXRDU1R5cGUo Y3NFbnRyeSk7DQorQEAgLTExMTYsOSArMTE2Nyw5IEBAIGJvb2wgUERGQW5hbHl6ZXI6Omluc3Bl Y3RDYW52YXMoUGRmQ2FudmEKKyAJCQkJCXsNCisgCQkJCQlpZiAoIXByb2Nlc3NlZE5hbWVkR1Mu Y29udGFpbnMoYXJnc1swXS5HZXROYW1lKCkpKQ0KKyAJCQkJCXsNCistCQkJCQkJaWYgKGFyZ3Mu c2l6ZSgpID09IDEgJiYgYXJnc1swXS5Jc05hbWUoKSAmJiBleHRHU3RhdGVzRGljdCkNCisrCQkJ CQkJaWYgKGFyZ3Muc2l6ZSgpID09IDEgJiYgYXJnc1swXS5Jc05hbWUoKSAmJiBleHRHU3RhdGUp DQorIAkJCQkJCXsNCistCQkJCQkJCVBkZk9iamVjdCogZXh0R1N0YXRlT2JqID0gZXh0R1N0YXRl c0RpY3QtPkZpbmRLZXkoYXJnc1swXS5HZXROYW1lKCkpOw0KKysJCQkJCQkJUGRmT2JqZWN0KiBl eHRHU3RhdGVPYmogPSBleHRHU3RhdGUtPkdldEluZGlyZWN0S2V5KGFyZ3NbMF0uR2V0TmFtZSgp KTsNCisgCQkJCQkJCWlmIChleHRHU3RhdGVPYmopDQorIAkJCQkJCQl7DQorIAkJCQkJCQkJaW5z cGVjdEV4dEdTdGF0ZU9iaihleHRHU3RhdGVPYmosIHVzZWRDb2xvclNwYWNlcywgaGFzVHJhbnNw YXJlbmN5LCB1c2VkRm9udHMsIGN1cnJHUyk7DQorQEAgLTExNDcsOSArMTE5OCw5IEBAIGJvb2wg UERGQW5hbHl6ZXI6Omluc3BlY3RDYW52YXMoUGRmQ2FudmEKKyAJCQkJCX0NCisgCQkJCQllbHNl DQorIAkJCQkJew0KKy0JCQkJCQlpZiAoYXJncy5zaXplKCkgPT0gMiAmJiBhcmdzWzBdLklzTmFt ZSgpICYmIGZvbnRzRGljdCkNCisrCQkJCQkJaWYgKGFyZ3Muc2l6ZSgpID09IDIgJiYgYXJnc1sw XS5Jc05hbWUoKSAmJiBmb250UmVzKQ0KKyAJCQkJCQl7DQorLQkJCQkJCQlQZGZPYmplY3QqIGZv bnRPYmogPSBmb250c0RpY3QtPkZpbmRLZXkoYXJnc1swXS5HZXROYW1lKCkpOw0KKysJCQkJCQkJ UGRmT2JqZWN0KiBmb250T2JqID0gZm9udFJlcy0+R2V0SW5kaXJlY3RLZXkoYXJnc1swXS5HZXRO YW1lKCkpOw0KKyAJCQkJCQkJaWYgKGZvbnRPYmopDQorIAkJCQkJCQl7DQorIAkJCQkJCQkJUERG Rm9udCByZXR2YWwgPSBnZXRGb250SW5mbyhmb250T2JqKTsNCitAQCAtMTE3OSw3ICsxMjMwLDYg QEAgYm9vbCBQREZBbmFseXplcjo6aW5zcGVjdENhbnZhcyhQZGZDYW52YQorIAkJCQlhcmdzLmNs ZWFyKCk7DQorIAkJCX0NCisgCQl9DQorLSNlbmRpZg0KKyAJfQ0KKyAJY2F0Y2ggKFBkZkVycm9y ICYgZSkNCisgCXsNCitAQCAtMTE4OCwxMCArMTIzOCwxMiBAQCBib29sIFBERkFuYWx5emVyOjpp bnNwZWN0Q2FudmFzKFBkZkNhbnZhCisgCQlyZXR1cm4gZmFsc2U7DQorIAl9DQorIAlyZXR1cm4g dHJ1ZTsNCisrI2VuZGlmDQorIH0NCisgDQorIHZvaWQgUERGQW5hbHl6ZXI6Omluc3BlY3RFeHRH U3RhdGVPYmooUGRmT2JqZWN0KiBleHRHU3RhdGVPYmosIFFMaXN0PFBERkNvbG9yU3BhY2U+ICYg dXNlZENvbG9yU3BhY2VzLCBib29sICYgaGFzVHJhbnNwYXJlbmN5LCBRTGlzdDxQREZGb250PiAm IHVzZWRGb250cywgUERGR3JhcGhpY1N0YXRlICYgY3VyckdTKQ0KKyB7DQorKyNpZiAoUE9ET0ZP X1ZFUlNJT04gPj0gUE9ET0ZPX01BS0VfVkVSU0lPTigwLCAxMCwgMCkpDQorIAlQZGZEaWN0aW9u YXJ5KiBleHRHU3RhdGVEaWN0ID0gZXh0R1N0YXRlT2JqLT5Jc0RpY3Rpb25hcnkoKSA/ICYoZXh0 R1N0YXRlT2JqLT5HZXREaWN0aW9uYXJ5KCkpIDogbnVsbHB0cjsNCisgCVBkZk9iamVjdCogYm1P YmogPSBleHRHU3RhdGVEaWN0ID8gZXh0R1N0YXRlRGljdC0+RmluZEtleSgiQk0iKSA6IG51bGxw dHI7DQorIAlpZiAoYm1PYmogJiYgYm1PYmotPklzTmFtZSgpKQ0KK0BAIC0xMjQ1LDcgKzEyOTcs NiBAQCB2b2lkIFBERkFuYWx5emVyOjppbnNwZWN0RXh0R1N0YXRlT2JqKFBkCisgCQkJCWN1cnJH Uy5mb250LmZpcnN0ID0gZm9udDsNCisgCQkJCWN1cnJHUy5mb250LnNlY29uZCA9IGFyclsxXS5H ZXRSZWFsKCk7DQorIAkJCX0NCistDQorIAkJfQ0KKyAJfQ0KKyANCitAQCAtMTI3Niw5ICsxMzI3 LDk2IEBAIHZvaWQgUERGQW5hbHl6ZXI6Omluc3BlY3RFeHRHU3RhdGVPYmooUGQKKyAJCVBkZk9i amVjdCBkT2JqQiA9IGRPYmotPkdldEFycmF5KClbMV07DQorIAkJY3VyckdTLmRhc2hQYXR0ZXJu LnNlY29uZCA9IGRPYmpCLkdldE51bWJlcigpOw0KKyAJfQ0KKysjZWxzZQ0KKysJUGRmT2JqZWN0 KiBibU9iaiA9IGV4dEdTdGF0ZU9iai0+R2V0SW5kaXJlY3RLZXkoIkJNIik7DQorKwlpZiAoYm1P YmogJiYgYm1PYmotPklzTmFtZSgpKQ0KKysJew0KKysJCWN1cnJHUy5ibGVuZE1vZGVzLmNsZWFy KCk7DQorKwkJY3VyckdTLmJsZW5kTW9kZXMuYXBwZW5kKGJtT2JqLT5HZXROYW1lKCkuR2V0RXNj YXBlZE5hbWUoKS5jX3N0cigpKTsNCisrCQlpZiAoIShibU9iai0+R2V0TmFtZSgpID09ICJOb3Jt YWwiIHx8IGJtT2JqLT5HZXROYW1lKCkgPT0gIkNvbXBhdGlibGUiKSkNCisrCQkJaGFzVHJhbnNw YXJlbmN5ID0gdHJ1ZTsNCisrCX0NCisrCWVsc2UgaWYgKGJtT2JqICYmIGJtT2JqLT5Jc0FycmF5 KCkpDQorKwl7DQorKwkJUGRmQXJyYXkgYXJyID0gYm1PYmotPkdldEFycmF5KCk7DQorKwkJY3Vy ckdTLmJsZW5kTW9kZXMuY2xlYXIoKTsNCisrCQlmb3IgKHVpbnQgaSA9IDA7IGkgPCBhcnIuR2V0 U2l6ZSgpOyArK2kpDQorKwkJCWN1cnJHUy5ibGVuZE1vZGVzLmFwcGVuZChhcnJbaV0uR2V0TmFt ZSgpLkdldEVzY2FwZWROYW1lKCkuY19zdHIoKSk7DQorKwkJaWYgKGFyclswXS5Jc05hbWUoKSAm JiAhKGFyclswXS5HZXROYW1lKCkgPT0gIk5vcm1hbCIgfHwgYXJyWzBdLkdldE5hbWUoKSA9PSAi Q29tcGF0aWJsZSIpKQ0KKysJCQloYXNUcmFuc3BhcmVuY3kgPSB0cnVlOw0KKysJfQ0KKysNCisr CVBkZk9iamVjdCogY2FPYmogPSBleHRHU3RhdGVPYmotPkdldEluZGlyZWN0S2V5KCJjYSIpOw0K KysJaWYgKGNhT2JqICYmIChjYU9iai0+SXNSZWFsKCkgfHwgY2FPYmotPklzTnVtYmVyKCkpKQ0K KysJew0KKysJCWN1cnJHUy5maWxsQWxwaGFDb25zdGFudCA9IGNhT2JqLT5HZXRSZWFsKCk7DQor KwkJaWYgKGNhT2JqLT5HZXRSZWFsKCkgPCAxKQ0KKysJCQloYXNUcmFuc3BhcmVuY3kgPSB0cnVl Ow0KKysJfQ0KKysNCisrCVBkZk9iamVjdCogY0FPYmogPSBleHRHU3RhdGVPYmotPkdldEluZGly ZWN0S2V5KCJDQSIpOw0KKysJaWYgKGNBT2JqICYmIChjQU9iai0+SXNSZWFsKCkgfHwgY0FPYmot PklzTnVtYmVyKCkpKQ0KKysJew0KKysJCWlmIChjQU9iai0+R2V0UmVhbCgpIDwgMSkNCisrCQkJ aGFzVHJhbnNwYXJlbmN5ID0gdHJ1ZTsNCisrCX0NCisrDQorKwlQZGZPYmplY3QqIHNNYXNrT2Jq ID0gZXh0R1N0YXRlT2JqLT5HZXRJbmRpcmVjdEtleSgiU01hc2siKTsNCisrCWlmIChzTWFza09i aiAmJiAhKHNNYXNrT2JqLT5Jc05hbWUoKSAmJiBzTWFza09iai0+R2V0TmFtZSgpID09ICJOb25l IikpDQorKwkJaGFzVHJhbnNwYXJlbmN5ID0gdHJ1ZTsNCisrDQorKwlQZGZPYmplY3QqIGZvbnRP YmogPSBleHRHU3RhdGVPYmotPkdldEluZGlyZWN0S2V5KCJGb250Iik7DQorKwlpZiAoZm9udE9i aiAmJiBmb250T2JqLT5Jc0FycmF5KCkpDQorKwl7DQorKwkJUGRmQXJyYXkgYXJyID0gZm9udE9i ai0+R2V0QXJyYXkoKTsNCisrCQlpZiAoYXJyWzBdLklzUmVmZXJlbmNlKCkpDQorKwkJew0KKysJ CQlQZGZSZWZlcmVuY2UgcmVmID0gYXJyWzBdLkdldFJlZmVyZW5jZSgpOw0KKysJCQlQZGZPYmpl Y3QqIGZvbnRPYmplY3QgPSBtX3BkZmRvYy0+R2V0T2JqZWN0cygpLkdldE9iamVjdChyZWYpOw0K KysJCQlpZiAoZm9udE9iamVjdCkNCisrCQkJew0KKysJCQkJUERGRm9udCBmb250ID0gZ2V0Rm9u dEluZm8oZm9udE9iamVjdCk7DQorKwkJCQl1c2VkRm9udHMuYXBwZW5kKGZvbnQpOw0KKysJCQkJ Y3VyckdTLmZvbnQuZmlyc3QgPSBmb250Ow0KKysJCQkJY3VyckdTLmZvbnQuc2Vjb25kID0gYXJy WzFdLkdldFJlYWwoKTsNCisrCQkJfQ0KKysNCisrCQl9DQorKwl9DQorKw0KKysJUGRmT2JqZWN0 KiBsd09iaiA9IGV4dEdTdGF0ZU9iai0+R2V0SW5kaXJlY3RLZXkoIkxXIik7DQorKwlpZiAobHdP YmopDQorKwkJY3VyckdTLmxpbmVXaWR0aCA9IGx3T2JqLT5HZXRSZWFsKCk7DQorKw0KKysJUGRm T2JqZWN0KiBsY09iaiA9IGV4dEdTdGF0ZU9iai0+R2V0SW5kaXJlY3RLZXkoIkxDIik7DQorKwlp ZiAobGNPYmopDQorKwkJY3VyckdTLmxpbmVDYXAgPSBsY09iai0+R2V0TnVtYmVyKCk7DQorKw0K KysJUGRmT2JqZWN0KiBsak9iaiA9IGV4dEdTdGF0ZU9iai0+R2V0SW5kaXJlY3RLZXkoIkxKIik7 DQorKwlpZiAobGpPYmopDQorKwkJY3VyckdTLmxpbmVKb2luID0gbGpPYmotPkdldE51bWJlcigp Ow0KKysNCisrCVBkZk9iamVjdCogbWxPYmogPSBleHRHU3RhdGVPYmotPkdldEluZGlyZWN0S2V5 KCJNTCIpOw0KKysJaWYgKG1sT2JqKQ0KKysJCWN1cnJHUy5taXRlckxpbWl0ID0gbWxPYmotPkdl dFJlYWwoKTsNCisrDQorKwlQZGZPYmplY3QqIGRPYmogPSBleHRHU3RhdGVPYmotPkdldEluZGly ZWN0S2V5KCJEIik7DQorKwlpZiAoZE9iaikNCisrCXsNCisrCQlQZGZPYmplY3QgZE9iakEgPSBk T2JqLT5HZXRBcnJheSgpWzBdOw0KKysJCVBkZkFycmF5IGRhc2hBcnIgPSBkT2JqQS5HZXRBcnJh eSgpOw0KKysJCWN1cnJHUy5kYXNoUGF0dGVybi5maXJzdC5jbGVhcigpOw0KKysJCWZvciAodWlu dCBpID0gMDsgaSA8IGRhc2hBcnIuR2V0U2l6ZSgpOyArK2kpDQorKwkJCWN1cnJHUy5kYXNoUGF0 dGVybi5maXJzdC5hcHBlbmQoZGFzaEFycltpXS5HZXROdW1iZXIoKSk7DQorKwkJUGRmT2JqZWN0 IGRPYmpCID0gZE9iai0+R2V0QXJyYXkoKVsxXTsNCisrCQljdXJyR1MuZGFzaFBhdHRlcm4uc2Vj b25kID0gZE9iakIuR2V0TnVtYmVyKCk7DQorKwl9DQorKyNlbmRpZg0KKyB9DQorKw0KKyBQREZG b250IFBERkFuYWx5emVyOjpnZXRGb250SW5mbyhQZGZPYmplY3QqIGZvbnRPYmopDQorIHsNCisr I2lmIChQT0RPRk9fVkVSU0lPTiA+PSBQT0RPRk9fTUFLRV9WRVJTSU9OKDAsIDEwLCAwKSkNCisg CVBERkZvbnQgY3VyckZvbnQ7DQorIAljb25zdCBQZGZEaWN0aW9uYXJ5KiBmb250RGljdCA9IGZv bnRPYmotPklzRGljdGlvbmFyeSgpID8gJihmb250T2JqLT5HZXREaWN0aW9uYXJ5KCkpIDogbnVs bHB0cjsNCisgCWlmICghZm9udERpY3QpDQorQEAgLTEzMDcsMTEgKzE0NDUsNyBAQCBQREZGb250 IFBERkFuYWx5emVyOjpnZXRGb250SW5mbyhQZGZPYmplCisgCQlpZiAoZGVzY2VuZGFudEZvbnRz ICYmIGRlc2NlbmRhbnRGb250cy0+SXNBcnJheSgpKQ0KKyAJCXsNCisgCQkJY29uc3QgUGRmUmVm ZXJlbmNlJiByZWZEZXNjRm9udCA9IGRlc2NlbmRhbnRGb250cy0+R2V0QXJyYXkoKVswXS5HZXRS ZWZlcmVuY2UoKTsNCistI2lmIChQT0RPRk9fVkVSU0lPTiA+PSBQT0RPRk9fTUFLRV9WRVJTSU9O KDAsIDEwLCAwKSkNCisgCQkJUGRmT2JqZWN0KiBkZXNjZW5kYW50Rm9udCA9IGRlc2NlbmRhbnRG b250cy0+R2V0RG9jdW1lbnQoKS0+R2V0T2JqZWN0cygpLkdldE9iamVjdChyZWZEZXNjRm9udCk7 DQorLSNlbHNlDQorLQkJCVBkZk9iamVjdCogZGVzY2VuZGFudEZvbnQgPSBkZXNjZW5kYW50Rm9u dHMtPkdldE93bmVyKCktPkdldE9iamVjdChyZWZEZXNjRm9udCk7DQorLSNlbmRpZg0KKyAJCQlQ ZGZEaWN0aW9uYXJ5KiBkZXNjZW5kYW50Rm9udERpY3QgPSAoZGVzY2VuZGFudEZvbnQgJiYgZGVz Y2VuZGFudEZvbnQtPklzRGljdGlvbmFyeSgpKSA/ICYoZGVzY2VuZGFudEZvbnQtPkdldERpY3Rp b25hcnkoKSkgOiBudWxscHRyOw0KKyAJCQljb25zdCBQZGZPYmplY3QqIHN1YnR5cGVEZXNjRm9u dCA9IGRlc2NlbmRhbnRGb250RGljdC0+RmluZEtleSgiU3VidHlwZSIpOw0KKyAJCQlmb250RGVz YyA9ICYoZGVzY2VuZGFudEZvbnREaWN0LT5NdXN0R2V0S2V5KCJGb250RGVzY3JpcHRvciIpKTsN CitAQCAtMTM0NSw2ICsxNDc5LDYyIEBAIFBERkZvbnQgUERGQW5hbHl6ZXI6OmdldEZvbnRJbmZv KFBkZk9iamUKKyAJCX0NCisgCX0NCisgCXJldHVybiBjdXJyRm9udDsNCisrI2Vsc2UNCisrCVBE RkZvbnQgY3VyckZvbnQ7DQorKwlQZGZPYmplY3QqIHN1YnR5cGUgPSBmb250T2JqLT5HZXRJbmRp cmVjdEtleSgiU3VidHlwZSIpOw0KKysJaWYgKCFzdWJ0eXBlIHx8ICFzdWJ0eXBlLT5Jc05hbWUo KSkNCisrCQlyZXR1cm4gY3VyckZvbnQ7DQorKw0KKysJUGRmT2JqZWN0KiBmb250RGVzYyA9IGZv bnRPYmotPkdldEluZGlyZWN0S2V5KCJGb250RGVzY3JpcHRvciIpOw0KKysJaWYgKHN1YnR5cGUt PkdldE5hbWUoKSA9PSAiVHlwZTEiKQ0KKysJCWN1cnJGb250LmZvbnRUeXBlID0gRl9UeXBlMTsN CisrCWVsc2UgaWYgKHN1YnR5cGUtPkdldE5hbWUoKSA9PSAiTU1UeXBlMSIpDQorKwkJY3VyckZv bnQuZm9udFR5cGUgPSBGX01NVHlwZTE7DQorKwllbHNlIGlmIChzdWJ0eXBlLT5HZXROYW1lKCkg PT0gIlRydWVUeXBlIikNCisrCQljdXJyRm9udC5mb250VHlwZSA9IEZfVHJ1ZVR5cGU7DQorKwll bHNlIGlmIChzdWJ0eXBlLT5HZXROYW1lKCkgPT0gIlR5cGUzIikNCisrCXsNCisrCQljdXJyRm9u dC5mb250VHlwZSA9IEZfVHlwZTM7DQorKwkJY3VyckZvbnQuaXNFbWJlZGRlZCA9IHRydWU7DQor KwkJZm9udERlc2MgPSBudWxscHRyOw0KKysJfQ0KKysJZWxzZSBpZiAoc3VidHlwZS0+R2V0TmFt ZSgpID09ICJUeXBlMCIpDQorKwl7DQorKwkJUGRmT2JqZWN0KiBkZXNjZW5kYW50Rm9udHMgPSBm b250T2JqLT5HZXRJbmRpcmVjdEtleSgiRGVzY2VuZGFudEZvbnRzIik7DQorKwkJaWYgKGRlc2Nl bmRhbnRGb250cyAmJiBkZXNjZW5kYW50Rm9udHMtPklzQXJyYXkoKSkNCisrCQl7DQorKwkJCVBk ZlJlZmVyZW5jZSByZWZEZXNjRm9udCA9IGRlc2NlbmRhbnRGb250cy0+R2V0QXJyYXkoKVswXS5H ZXRSZWZlcmVuY2UoKTsNCisrCQkJUGRmT2JqZWN0KiBkZXNjZW5kYW50Rm9udCA9IGRlc2NlbmRh bnRGb250cy0+R2V0T3duZXIoKS0+R2V0T2JqZWN0KHJlZkRlc2NGb250KTsNCisrCQkJUGRmT2Jq ZWN0KiBzdWJ0eXBlRGVzY0ZvbnQgPSBkZXNjZW5kYW50Rm9udC0+R2V0SW5kaXJlY3RLZXkoIlN1 YnR5cGUiKTsNCisrCQkJZm9udERlc2MgPSBkZXNjZW5kYW50Rm9udC0+TXVzdEdldEluZGlyZWN0 S2V5KCJGb250RGVzY3JpcHRvciIpOw0KKysJCQlpZiAoc3VidHlwZURlc2NGb250ICYmIHN1YnR5 cGVEZXNjRm9udC0+SXNOYW1lKCkpDQorKwkJCXsNCisrCQkJCWlmIChzdWJ0eXBlRGVzY0ZvbnQt PkdldE5hbWUoKSA9PSAiQ0lERm9udFR5cGUwIikNCisrCQkJCQljdXJyRm9udC5mb250VHlwZSA9 IEZfQ0lERm9udFR5cGUwOw0KKysJCQkJZWxzZSBpZiAoc3VidHlwZURlc2NGb250LT5HZXROYW1l KCkgPT0gIkNJREZvbnRUeXBlMiIpDQorKwkJCQkJY3VyckZvbnQuZm9udFR5cGUgPSBGX0NJREZv bnRUeXBlMjsNCisrCQkJfQ0KKysJCX0NCisrCX0NCisrCWlmIChmb250RGVzYykNCisrCXsNCisr CQlQZGZPYmplY3QqIGZvbnRGaWxlID0gZm9udERlc2MtPkdldEluZGlyZWN0S2V5KCJGb250Rmls ZSIpOw0KKysJCVBkZk9iamVjdCogZm9udEZpbGUyID0gZm9udERlc2MtPkdldEluZGlyZWN0S2V5 KCJGb250RmlsZTIiKTsNCisrCQlQZGZPYmplY3QqIGZvbnRGaWxlMyA9IGZvbnREZXNjLT5HZXRJ bmRpcmVjdEtleSgiRm9udEZpbGUzIik7DQorKwkJaWYgKGZvbnRGaWxlICYmIGZvbnRGaWxlLT5I YXNTdHJlYW0oKSkNCisrCQkJY3VyckZvbnQuaXNFbWJlZGRlZCA9IHRydWU7DQorKwkJaWYgKGZv bnRGaWxlMiAmJiBmb250RmlsZTItPkhhc1N0cmVhbSgpKQ0KKysJCQljdXJyRm9udC5pc0VtYmVk ZGVkID0gdHJ1ZTsNCisrCQlpZiAoZm9udEZpbGUzICYmIGZvbnRGaWxlMy0+SGFzU3RyZWFtKCkp DQorKwkJew0KKysJCQljdXJyRm9udC5pc0VtYmVkZGVkID0gdHJ1ZTsNCisrCQkJUGRmT2JqZWN0 KiBmZjNTdWJ0eXBlID0gZm9udEZpbGUzLT5HZXRJbmRpcmVjdEtleSgiU3VidHlwZSIpOw0KKysJ CQlpZiAoZmYzU3VidHlwZSAmJiBmZjNTdWJ0eXBlLT5Jc05hbWUoKSAmJiBmZjNTdWJ0eXBlLT5H ZXROYW1lKCkgPT0gIk9wZW5UeXBlIikNCisrCQkJCWN1cnJGb250LmlzT3BlblR5cGUgPSB0cnVl Ow0KKysJCX0NCisrCX0NCisrCXJldHVybiBjdXJyRm9udDsNCisrI2VuZGlmDQorIH0NCisgI2Vs c2UNCisgUERGQW5hbHl6ZXI6OlBERkFuYWx5emVyKFFTdHJpbmcgJiBmaWxlbmFtZSkgOiBRT2Jq ZWN0KCkNCistLS0gYS9zY3JpYnVzL3BkZmxpYl9jb3JlLmNwcAorKysrIGIvc2NyaWJ1cy9wZGZs aWJfY29yZS5jcHAKK0BAIC05ODI2LDcgKzk4MjYsNyBAQCBib29sIFBERkxpYkNvcmU6OlBERl9F bWJlZGRlZFBERihQYWdlSXRlCisgCQkJUHV0RG9jKCI8PFxuL1R5cGUgL1hPYmplY3Rcbi9TdWJ0 eXBlIC9Gb3JtXG4vRm9ybVR5cGUgMSIpOworIAkJCVBvRG9Gbzo6UmVjdCBwYWdlUmVjdCA9IHBh Z2UuR2V0QXJ0Qm94KCk7IC8vIEJlY2F1c2Ugc2NpbWFnZWRhdGFsb2FkZXJfcGRmIHVzZSBBcnRC b3gKKyAJCQlpbnQgcm90YXRpb24gPSBwYWdlLkdldFJvdGF0aW9uUmF3KCk7CistCQkJZG91Ymxl IGltZ1dpZHRoID0gKHJvdGF0aW9uID09IDkwIHx8IHJvdGF0aW9uID09IDI3MCkgPyBwYWdlUmVj dC5IZWlnaHQgOiBwYWdlUmVjdC5XaWR0aDsKKysJCQlkb3VibGUgaW1nV2lkdGggID0gKHJvdGF0 aW9uID09IDkwIHx8IHJvdGF0aW9uID09IDI3MCkgPyBwYWdlUmVjdC5IZWlnaHQgOiBwYWdlUmVj dC5XaWR0aDsKKyAJCQlkb3VibGUgaW1nSGVpZ2h0ID0gKHJvdGF0aW9uID09IDkwIHx8IHJvdGF0 aW9uID09IDI3MCkgPyBwYWdlUmVjdC5XaWR0aCA6IHBhZ2VSZWN0LkhlaWdodDsKKyAJCQlRVHJh bnNmb3JtIHBhZ2VNOworIAkJCXBhZ2VNLnRyYW5zbGF0ZShwYWdlUmVjdC5HZXRMZWZ0KCksIHBh Z2VSZWN0LkdldEJvdHRvbSgpKTsKK0BAIC05ODQ1LDExICs5ODQ1LDExIEBAIGJvb2wgUERGTGli Q29yZTo6UERGX0VtYmVkZGVkUERGKFBhZ2VJdGUKKyAJCQlQdXREb2MoIiAiICsgUGRmOjp0b1Bk ZihwYWdlUmVjdC5HZXRCb3R0b20oKSArIHBhZ2VSZWN0LkhlaWdodCkpOworIAkJCVB1dERvYygi XSIpOworIAkJCVB1dERvYygiXG4vTWF0cml4IFsiICsgUGRmOjp0b1BkZihwYWdlTS5tMTEoKSkg KyAiICIKKy0JCQkJKyBQZGY6OnRvUGRmKHBhZ2VNLm0xMigpKSArICIgIgorLQkJCQkrIFBkZjo6 dG9QZGYocGFnZU0ubTIxKCkpICsgIiAiCistCQkJCSsgUGRmOjp0b1BkZihwYWdlTS5tMjIoKSkg KyAiICIKKy0JCQkJKyBQZGY6OnRvUGRmKHBhZ2VNLmR4KCkpICsgIiAiCistCQkJCSsgUGRmOjp0 b1BkZihwYWdlTS5keSgpKSArICIgIik7CisrCQkJCQkJCQkgKyBQZGY6OnRvUGRmKHBhZ2VNLm0x MigpKSArICIgIgorKwkJCQkJCQkJICsgUGRmOjp0b1BkZihwYWdlTS5tMjEoKSkgKyAiICIKKysJ CQkJCQkJCSArIFBkZjo6dG9QZGYocGFnZU0ubTIyKCkpICsgIiAiCisrCQkJCQkJCQkgKyBQZGY6 OnRvUGRmKHBhZ2VNLmR4KCkpICsgIiAiCisrCQkJCQkJCQkgKyBQZGY6OnRvUGRmKHBhZ2VNLmR5 KCkpICsgIiAiKTsKKyAJCQlQdXREb2MoIl0iKTsKKyAJCQlQdXREb2MoIlxuL1Jlc291cmNlcyAi ICsgUGRmOjp0b1BkZih4UmVzb3VyY2VzKSArICIgMCBSIik7CisgCQkJUG9Eb0ZvOjpQZGZEaWN0 aW9uYXJ5KiBwYWdlRGljdCA9IHBhZ2VPYmouSXNEaWN0aW9uYXJ5KCkgPyAmKHBhZ2VPYmouR2V0 RGljdGlvbmFyeSgpKSA6IG51bGxwdHI7CitAQCAtOTk0Nyw3ICs5OTQ3LDcgQEAgYm9vbCBQREZM aWJDb3JlOjpQREZfRW1iZWRkZWRQREYoUGFnZUl0ZQorIAkJCVB1dERvYygiPDxcbi9UeXBlIC9Y T2JqZWN0XG4vU3VidHlwZSAvRm9ybVxuL0Zvcm1UeXBlIDEiKTsKKyAJCQlQb0RvRm86OlJlY3Qg cGFnZVJlY3QgPSBwYWdlLkdldEFydEJveCgpOyAvLyBCZWNhdXNlIHNjaW1hZ2VkYXRhbG9hZGVy X3BkZiB1c2UgQXJ0Qm94CisgCQkJaW50IHJvdGF0aW9uID0gcGFnZS5HZXRSb3RhdGlvblJhdygp OworLQkJCWRvdWJsZSBpbWdXaWR0aCA9IChyb3RhdGlvbiA9PSA5MCB8fCByb3RhdGlvbiA9PSAy NzApID8gcGFnZVJlY3QuSGVpZ2h0IDogcGFnZVJlY3QuV2lkdGg7CisrCQkJZG91YmxlIGltZ1dp ZHRoICA9IChyb3RhdGlvbiA9PSA5MCB8fCByb3RhdGlvbiA9PSAyNzApID8gcGFnZVJlY3QuSGVp Z2h0IDogcGFnZVJlY3QuV2lkdGg7CisgCQkJZG91YmxlIGltZ0hlaWdodCA9IChyb3RhdGlvbiA9 PSA5MCB8fCByb3RhdGlvbiA9PSAyNzApID8gcGFnZVJlY3QuV2lkdGggOiBwYWdlUmVjdC5IZWln aHQ7CisgCQkJUVRyYW5zZm9ybSBwYWdlTTsKKyAJCQlwYWdlTS50cmFuc2xhdGUocGFnZVJlY3Qu R2V0TGVmdCgpLCBwYWdlUmVjdC5HZXRCb3R0b20oKSk7CitAQCAtOTk2NiwxMSArOTk2NiwxMSBA QCBib29sIFBERkxpYkNvcmU6OlBERl9FbWJlZGRlZFBERihQYWdlSXRlCisgCQkJUHV0RG9jKCIg IiArIFBkZjo6dG9QZGYocGFnZVJlY3QuR2V0Qm90dG9tKCkgKyBwYWdlUmVjdC5IZWlnaHQpKTsK KyAJCQlQdXREb2MoIl0iKTsKKyAJCQlQdXREb2MoIlxuL01hdHJpeCBbIiArIFBkZjo6dG9QZGYo cGFnZU0ubTExKCkpICsgIiAiCistCQkJCSsgUGRmOjp0b1BkZihwYWdlTS5tMTIoKSkgKyAiICIK Ky0JCQkJKyBQZGY6OnRvUGRmKHBhZ2VNLm0yMSgpKSArICIgIgorLQkJCQkrIFBkZjo6dG9QZGYo cGFnZU0ubTIyKCkpICsgIiAiCistCQkJCSsgUGRmOjp0b1BkZihwYWdlTS5keCgpKSArICIgIgor LQkJCQkrIFBkZjo6dG9QZGYocGFnZU0uZHkoKSkgKyAiICIpOworKwkJCQkJCQkJICsgUGRmOjp0 b1BkZihwYWdlTS5tMTIoKSkgKyAiICIKKysJCQkJCQkJCSArIFBkZjo6dG9QZGYocGFnZU0ubTIx KCkpICsgIiAiCisrCQkJCQkJCQkgKyBQZGY6OnRvUGRmKHBhZ2VNLm0yMigpKSArICIgIgorKwkJ CQkJCQkJICsgUGRmOjp0b1BkZihwYWdlTS5keCgpKSArICIgIgorKwkJCQkJCQkJICsgUGRmOjp0 b1BkZihwYWdlTS5keSgpKSArICIgIik7CisgCQkJUHV0RG9jKCJdIik7CisgCQkJUHV0RG9jKCJc bi9SZXNvdXJjZXMgIiArIFBkZjo6dG9QZGYoeFJlc291cmNlcykgKyAiIDAgUiIpOworIAkJCVBv RG9Gbzo6UGRmRGljdGlvbmFyeSogcGFnZURpY3QgPSBwYWdlT2JqLklzRGljdGlvbmFyeSgpID8g JihwYWdlT2JqLkdldERpY3Rpb25hcnkoKSkgOiBudWxscHRyOworQEAgLTEwMDcyLDIwICsxMDA3 MiwxNiBAQCBib29sIFBERkxpYkNvcmU6OlBERl9FbWJlZGRlZFBERihQYWdlSXRlCisgI2Vsc2UK KyAJdHJ5CisgCXsKKy0JCVBvRG9Gbzo6UGRmUGFnZSogcGFnZSA9IGRvYy0+R2V0UGFnZShxTWlu KHFNYXgoMSwgYy0+cGl4bS5pbWdJbmZvLmFjdHVhbFBhZ2VOdW1iZXIpLCBjLT5waXhtLmltZ0lu Zm8ubnVtYmVyT2ZQYWdlcykgLSAxKTsKKy0JCVBvRG9Gbzo6UGRmT2JqZWN0KiBwYWdlT2JqID0g cGFnZSA/IHBhZ2UtPkdldE9iamVjdCgpIDogbnVsbHB0cjsKKy0JCVBvRG9Gbzo6UGRmT2JqZWN0 KiBjb250ZW50cyA9IHBhZ2UgPyBwYWdlLT5HZXRDb250ZW50cygpIDogbnVsbHB0cjsKKysJCVBv RG9Gbzo6UGRmUGFnZSogICBwYWdlICAgICAgPSBkb2MtPkdldFBhZ2UocU1pbihxTWF4KDEsIGMt PnBpeG0uaW1nSW5mby5hY3R1YWxQYWdlTnVtYmVyKSwgYy0+cGl4bS5pbWdJbmZvLm51bWJlck9m UGFnZXMpIC0gMSk7CisrCQlQb0RvRm86OlBkZk9iamVjdCogcGFnZU9iaiAgID0gcGFnZSA/IHBh Z2UtPkdldE9iamVjdCgpIDogbnVsbHB0cjsKKysJCVBvRG9Gbzo6UGRmT2JqZWN0KiBjb250ZW50 cyAgPSBwYWdlID8gcGFnZS0+R2V0Q29udGVudHMoKSA6IG51bGxwdHI7CisgCQlQb0RvRm86OlBk Zk9iamVjdCogcmVzb3VyY2VzID0gcGFnZSA/IHBhZ2UtPkdldFJlc291cmNlcygpIDogbnVsbHB0 cjsKKy0JCVBvRG9Gbzo6UGRmRGljdGlvbmFyeSogcGFnZU9iakRpY3QgPSAocGFnZU9iaiAmJiBw YWdlT2JqLT5Jc0RpY3Rpb25hcnkoKSkgPyAmKHBhZ2VPYmotPkdldERpY3Rpb25hcnkoKSkgOiBu dWxscHRyOworLQkJZm9yIChQb0RvRm86OlBkZkRpY3Rpb25hcnkqIHBhciA9IHBhZ2VPYmpEaWN0 LCAqcGFyZW50RGljdCA9IG51bGxwdHI7IHBhciAmJiAhcmVzb3VyY2VzOyBwYXIgPSBwYXJlbnRE aWN0KQorKwkJZm9yIChQb0RvRm86OlBkZk9iamVjdCogcGFyID0gcGFnZU9iajsgcGFyICYmICFy ZXNvdXJjZXM7IHBhciA9IHBhci0+R2V0SW5kaXJlY3RLZXkoIlBhcmVudCIpKQorIAkJeworLQkJ CXJlc291cmNlcyA9IHBhci0+RmluZEtleSgiUmVzb3VyY2VzIik7CistCQkJUG9Eb0ZvOjpQZGZP YmplY3QqIHBhcmVudE9iaiA9IHBhci0+RmluZEtleSgiUGFyZW50Iik7CistCQkJcGFyZW50RGlj dCA9IChwYXJlbnRPYmogJiYgcGFyZW50T2JqLT5Jc0RpY3Rpb25hcnkoKSkgPyAmKHBhcmVudE9i ai0+R2V0RGljdGlvbmFyeSgpKSA6IG51bGxwdHI7CisrCQkJcmVzb3VyY2VzID0gcGFyLT5HZXRJ bmRpcmVjdEtleSgiUmVzb3VyY2VzIik7CisgCQl9CistCQlpZiAoY29udGVudHMgJiYgY29udGVu dHMtPkdldERhdGFUeXBlKCkgPT0gUG9Eb0ZvOjplUGRmRGF0YVR5cGVfRGljdGlvbmFyeSkKKysJ CWlmIChjb250ZW50cyAmJiBjb250ZW50cy0+R2V0RGF0YVR5cGUoKSA9PSAgUG9Eb0ZvOjplUGRm RGF0YVR5cGVfRGljdGlvbmFyeSkKKyAJCXsKKy0JCQlQb0RvRm86OlBkZkRpY3Rpb25hcnkmIGNv bnRlbnRzRGljdCA9IGNvbnRlbnRzLT5HZXREaWN0aW9uYXJ5KCk7CisgCQkJUG9Eb0ZvOjpQZGZT dHJlYW0qIHN0cmVhbSA9IGNvbnRlbnRzLT5HZXRTdHJlYW0oKTsKKyAJCQlRTWFwPFBvRG9Gbzo6 UGRmUmVmZXJlbmNlLCBQZGZJZD4gaW1wb3J0ZWRPYmplY3RzOworIAkJCVFMaXN0PFBvRG9Gbzo6 UGRmUmVmZXJlbmNlPiByZWZlcmVuY2VkT2JqZWN0czsKK0BAIC0xMDA5OCw3ICsxMDA5NCw3IEBA IGJvb2wgUERGTGliQ29yZTo6UERGX0VtYmVkZGVkUERGKFBhZ2VJdGUKKyAJCQlQdXREb2MoIjw8 XG4vVHlwZSAvWE9iamVjdFxuL1N1YnR5cGUgL0Zvcm1cbi9Gb3JtVHlwZSAxIik7CisgCQkJUG9E b0ZvOjpQZGZSZWN0IHBhZ2VSZWN0ID0gcGFnZS0+R2V0QXJ0Qm94KCk7IC8vIEJlY2F1c2Ugc2Np bWFnZWRhdGFsb2FkZXJfcGRmIHVzZSBBcnRCb3gKKyAJCQlpbnQgcm90YXRpb24gPSBwYWdlLT5H ZXRSb3RhdGlvbigpOworLQkJCWRvdWJsZSBpbWdXaWR0aCA9IChyb3RhdGlvbiA9PSA5MCB8fCBy b3RhdGlvbiA9PSAyNzApID8gcGFnZVJlY3QuR2V0SGVpZ2h0KCkgOiBwYWdlUmVjdC5HZXRXaWR0 aCgpOworKwkJCWRvdWJsZSBpbWdXaWR0aCAgPSAocm90YXRpb24gPT0gOTAgfHwgcm90YXRpb24g PT0gMjcwKSA/IHBhZ2VSZWN0LkdldEhlaWdodCgpIDogcGFnZVJlY3QuR2V0V2lkdGgoKTsKKyAJ CQlkb3VibGUgaW1nSGVpZ2h0ID0gKHJvdGF0aW9uID09IDkwIHx8IHJvdGF0aW9uID09IDI3MCkg PyBwYWdlUmVjdC5HZXRXaWR0aCgpIDogcGFnZVJlY3QuR2V0SGVpZ2h0KCk7CisgCQkJUVRyYW5z Zm9ybSBwYWdlTTsKKyAJCQlwYWdlTS50cmFuc2xhdGUocGFnZVJlY3QuR2V0TGVmdCgpLCBwYWdl UmVjdC5HZXRCb3R0b20oKSk7CitAQCAtMTAxMTcsMjIgKzEwMTEzLDIxIEBAIGJvb2wgUERGTGli Q29yZTo6UERGX0VtYmVkZGVkUERGKFBhZ2VJdGUKKyAJCQlQdXREb2MoIiAiICsgUGRmOjp0b1Bk ZihwYWdlUmVjdC5HZXRCb3R0b20oKSArIHBhZ2VSZWN0LkdldEhlaWdodCgpKSk7CisgCQkJUHV0 RG9jKCJdIik7CisgCQkJUHV0RG9jKCJcbi9NYXRyaXggWyIgKyBQZGY6OnRvUGRmKHBhZ2VNLm0x MSgpKSArICIgIgorLQkJCQkrIFBkZjo6dG9QZGYocGFnZU0ubTEyKCkpICsgIiAiCistCQkJCSsg UGRmOjp0b1BkZihwYWdlTS5tMjEoKSkgKyAiICIKKy0JCQkJKyBQZGY6OnRvUGRmKHBhZ2VNLm0y MigpKSArICIgIgorLQkJCQkrIFBkZjo6dG9QZGYocGFnZU0uZHgoKSkgKyAiICIKKy0JCQkJKyBQ ZGY6OnRvUGRmKHBhZ2VNLmR5KCkpICsgIiAiKTsKKysJCQkJCQkJCSArIFBkZjo6dG9QZGYocGFn ZU0ubTEyKCkpICsgIiAiCisrCQkJCQkJCQkgKyBQZGY6OnRvUGRmKHBhZ2VNLm0yMSgpKSArICIg IgorKwkJCQkJCQkJICsgUGRmOjp0b1BkZihwYWdlTS5tMjIoKSkgKyAiICIKKysJCQkJCQkJCSAr IFBkZjo6dG9QZGYocGFnZU0uZHgoKSkgICsgIiAiCisrCQkJCQkJCQkgKyBQZGY6OnRvUGRmKHBh Z2VNLmR5KCkpICArICIgIik7CisgCQkJUHV0RG9jKCJdIik7CisgCQkJUHV0RG9jKCJcbi9SZXNv dXJjZXMgIiArIFBkZjo6dG9QZGYoeFJlc291cmNlcykgKyAiIDAgUiIpOworLQkJCVBvRG9Gbzo6 UGRmRGljdGlvbmFyeSogcGFnZURpY3QgPSBwYWdlT2JqLT5Jc0RpY3Rpb25hcnkoKSA/ICYocGFn ZU9iai0+R2V0RGljdGlvbmFyeSgpKSA6IG51bGxwdHI7CistCQkJbmV4dE9iaiA9IHBhZ2VEaWN0 ID8gcGFnZURpY3QtPkZpbmRLZXkoIkdyb3VwIikgOiBudWxscHRyOworKwkJCW5leHRPYmogPSBw YWdlLT5HZXRPYmplY3QoKS0+R2V0SW5kaXJlY3RLZXkoIkdyb3VwIik7CisgCQkJaWYgKG5leHRP YmopCisgCQkJeworIAkJCQlQdXREb2MoIlxuL0dyb3VwICIpOyAvLyBQREYgMS40CisgCQkJCWNv cHlQb0RvRm9EaXJlY3QobmV4dE9iaiwgcmVmZXJlbmNlZE9iamVjdHMsIGltcG9ydGVkT2JqZWN0 cyk7CisgCQkJfQorIAkJCS8qCistCQkJUG9Eb0ZvOjpQZGZPYmplY3QgcGFyZW50cyA9IHBhZ2VE aWN0LT5GaW5kS2V5KCJTdHJ1Y3RQYXJlbnRzIik7CisrCQkJUG9Eb0ZvOjpQZGZPYmplY3QgcGFy ZW50cyA9IHBhZ2UtPkdldE9iamVjdCgpLT5HZXRJbmRpcmVjdEtleSgiU3RydWN0UGFyZW50cyIp OworIAkJCWlmIChwYXJlbnRzKQorIAkJCXsKKyAJCQkJeFBhcmVudHMgPSB3cml0ZXIubmV3T2Jq ZWN0KCk7CitAQCAtMTAxNTEsMTMgKzEwMTQ2LDEzIEBAIGJvb2wgUERGTGliQ29yZTo6UERGX0Vt YmVkZGVkUERGKFBhZ2VJdGUKKyAJCQlpZiAobWJ1ZmZlclttbGVuIC0gMV0gPT0gJ1xuJykKKyAJ CQkJLS1tbGVuOworIAkJCVB1dERvYygiXG4vTGVuZ3RoICIgKyBQZGY6OnRvUGRmKHN0YXRpY19j YXN0PHFsb25nbG9uZz4obWxlbikpKTsKKy0JCQluZXh0T2JqID0gY29udGVudHNEaWN0LkZpbmRL ZXkoIkZpbHRlciIpOworKwkJCW5leHRPYmogPSBjb250ZW50cy0+R2V0SW5kaXJlY3RLZXkoIkZp bHRlciIpOworIAkJCWlmIChuZXh0T2JqKQorIAkJCXsKKyAJCQkJUHV0RG9jKCJcbi9GaWx0ZXIg Iik7CisgCQkJCWNvcHlQb0RvRm9EaXJlY3QobmV4dE9iaiwgcmVmZXJlbmNlZE9iamVjdHMsIGlt cG9ydGVkT2JqZWN0cyk7CisgCQkJfQorLQkJCW5leHRPYmogPSBjb250ZW50c0RpY3QuRmluZEtl eSgiRGVjb2RlUGFybXMiKTsKKysJCQluZXh0T2JqID0gY29udGVudHMtPkdldEluZGlyZWN0S2V5 KCJEZWNvZGVQYXJtcyIpOworIAkJCWlmIChuZXh0T2JqKQorIAkJCXsKKyAJCQkJUHV0RG9jKCJc bi9EZWNvZGVQYXJtcyAiKTsKK0BAIC0xMDE2OCw3ICsxMDE2Myw3IEBAIGJvb2wgUERGTGliQ29y ZTo6UERGX0VtYmVkZGVkUERGKFBhZ2VJdGUKKyAJCQkJUUJ5dGVBcnJheSBidWZmZXIgPSBRQnl0 ZUFycmF5Ojpmcm9tUmF3RGF0YShtYnVmZmVyLCBtbGVuKTsKKyAJCQkJRW5jb2RlQXJyYXlUb1N0 cmVhbShidWZmZXIsIHhPYmopOworIAkJCX0gIC8vIGRpc2Nvbm5lY3QgUUJ5dGVBcnJheSBmcm9t IHJhdyBkYXRhCistCQkJZnJlZShtYnVmZmVyKTsKKysJCQlmcmVlIChtYnVmZmVyKTsKKyAJCQlQ dXREb2MoIlxuZW5kc3RyZWFtIik7CisgCQkJd3JpdGVyLmVuZE9iaih4T2JqKTsKKyAJCQkvLyB3 cml0ZSByZXNvdXJjZXMKK0BAIC0xMDIyMyw3ICsxMDIxOCw3IEBAIGJvb2wgUERGTGliQ29yZTo6 UERGX0VtYmVkZGVkUERGKFBhZ2VJdGUKKyAJCQlQdXREb2MoIjw8XG4vVHlwZSAvWE9iamVjdFxu L1N1YnR5cGUgL0Zvcm1cbi9Gb3JtVHlwZSAxIik7CisgCQkJUG9Eb0ZvOjpQZGZSZWN0IHBhZ2VS ZWN0ID0gcGFnZS0+R2V0QXJ0Qm94KCk7IC8vIEJlY2F1c2Ugc2NpbWFnZWRhdGFsb2FkZXJfcGRm IHVzZSBBcnRCb3gKKyAJCQlpbnQgcm90YXRpb24gPSBwYWdlLT5HZXRSb3RhdGlvbigpOworLQkJ CWRvdWJsZSBpbWdXaWR0aCA9IChyb3RhdGlvbiA9PSA5MCB8fCByb3RhdGlvbiA9PSAyNzApID8g cGFnZVJlY3QuR2V0SGVpZ2h0KCkgOiBwYWdlUmVjdC5HZXRXaWR0aCgpOworKwkJCWRvdWJsZSBp bWdXaWR0aCAgPSAocm90YXRpb24gPT0gOTAgfHwgcm90YXRpb24gPT0gMjcwKSA/IHBhZ2VSZWN0 LkdldEhlaWdodCgpIDogcGFnZVJlY3QuR2V0V2lkdGgoKTsKKyAJCQlkb3VibGUgaW1nSGVpZ2h0 ID0gKHJvdGF0aW9uID09IDkwIHx8IHJvdGF0aW9uID09IDI3MCkgPyBwYWdlUmVjdC5HZXRXaWR0 aCgpIDogcGFnZVJlY3QuR2V0SGVpZ2h0KCk7CisgCQkJUVRyYW5zZm9ybSBwYWdlTTsKKyAJCQlw YWdlTS50cmFuc2xhdGUocGFnZVJlY3QuR2V0TGVmdCgpLCBwYWdlUmVjdC5HZXRCb3R0b20oKSk7 CitAQCAtMTAyNDIsMTUgKzEwMjM3LDE0IEBAIGJvb2wgUERGTGliQ29yZTo6UERGX0VtYmVkZGVk UERGKFBhZ2VJdGUKKyAJCQlQdXREb2MoIiAiICsgUGRmOjp0b1BkZihwYWdlUmVjdC5HZXRCb3R0 b20oKSArIHBhZ2VSZWN0LkdldEhlaWdodCgpKSk7CisgCQkJUHV0RG9jKCJdIik7CisgCQkJUHV0 RG9jKCJcbi9NYXRyaXggWyIgKyBQZGY6OnRvUGRmKHBhZ2VNLm0xMSgpKSArICIgIgorLQkJCQkr IFBkZjo6dG9QZGYocGFnZU0ubTEyKCkpICsgIiAiCistCQkJCSsgUGRmOjp0b1BkZihwYWdlTS5t MjEoKSkgKyAiICIKKy0JCQkJKyBQZGY6OnRvUGRmKHBhZ2VNLm0yMigpKSArICIgIgorLQkJCQkr IFBkZjo6dG9QZGYocGFnZU0uZHgoKSkgKyAiICIKKy0JCQkJKyBQZGY6OnRvUGRmKHBhZ2VNLmR5 KCkpICsgIiAiKTsKKysJCQkJCQkJCSArIFBkZjo6dG9QZGYocGFnZU0ubTEyKCkpICsgIiAiCisr CQkJCQkJCQkgKyBQZGY6OnRvUGRmKHBhZ2VNLm0yMSgpKSArICIgIgorKwkJCQkJCQkJICsgUGRm Ojp0b1BkZihwYWdlTS5tMjIoKSkgKyAiICIKKysJCQkJCQkJCSArIFBkZjo6dG9QZGYocGFnZU0u ZHgoKSkgICsgIiAiCisrCQkJCQkJCQkgKyBQZGY6OnRvUGRmKHBhZ2VNLmR5KCkpICArICIgIik7 CisgCQkJUHV0RG9jKCJdIik7CisgCQkJUHV0RG9jKCJcbi9SZXNvdXJjZXMgIiArIFBkZjo6dG9Q ZGYoeFJlc291cmNlcykgKyAiIDAgUiIpOworLQkJCVBvRG9Gbzo6UGRmRGljdGlvbmFyeSogcGFn ZURpY3QgPSBwYWdlT2JqLT5Jc0RpY3Rpb25hcnkoKSA/ICYocGFnZU9iai0+R2V0RGljdGlvbmFy eSgpKSA6IG51bGxwdHI7CistCQkJbmV4dE9iaiA9IHBhZ2VEaWN0ID8gcGFnZURpY3QtPkZpbmRL ZXkoIkdyb3VwIikgOiBudWxscHRyOworKwkJCW5leHRPYmogPSBwYWdlLT5HZXRPYmplY3QoKS0+ R2V0SW5kaXJlY3RLZXkoIkdyb3VwIik7CisgCQkJaWYgKG5leHRPYmopCisgCQkJeworIAkJCQlQ dXREb2MoIlxuL0dyb3VwICIpOyAvLyBQREYgMS40CitAQCAtMTAzMjYsNyArMTAzMjAsNyBAQCBi b29sIFBERkxpYkNvcmU6OlBERl9FbWJlZGRlZFBERihQYWdlSXRlCisgCQkJaW1nSW5mby5SZXNO dW0gPSBSZXNDb3VudDsKKyAJCQlSZXNDb3VudCsrOworIAkJCS8vIEF2b2lkIGEgZGl2aWRlLWJ5 LXplcm8gaWYgd2lkdGgvaGVpZ2h0IGFyZSBsZXNzIHRoYW4gMSBwb2ludDoKKy0JCQlpbWdJbmZv LldpZHRoID0gcU1heCgxLCAoaW50KSBpbWdXaWR0aCk7CisrCQkJaW1nSW5mby5XaWR0aCAgPSBx TWF4KDEsIChpbnQpIGltZ1dpZHRoKTsKKyAJCQlpbWdJbmZvLkhlaWdodCA9IHFNYXgoMSwgKGlu dCkgaW1nSGVpZ2h0KTsKKyAJCQlpbWdJbmZvLnhhID0gc3ggKiBpbWdXaWR0aCAvIGltZ0luZm8u V2lkdGg7CisgCQkJaW1nSW5mby55YSA9IHN5ICogaW1nSGVpZ2h0IC8gaW1nSW5mby5IZWlnaHQ7 CistLS0gYS9zY3JpYnVzL3BsdWdpbnMvaW1wb3J0L2FpL2ltcG9ydGFpLmNwcAorKysrIGIvc2Ny aWJ1cy9wbHVnaW5zL2ltcG9ydC9haS9pbXBvcnRhaS5jcHAKK0BAIC01NzksODcgKzU3OSwxMTUg QEAgYm9vbCBBSVBsdWc6OmV4dHJhY3RGcm9tUERGKGNvbnN0IFFTdHJpbgorIAkJcURlYnVnKCkg PDwgIkZhaWxlZCB0byBvcGVuIFFGaWxlIG91dGYgaW4gQUlQbHVnOjpleHRyYWN0RnJvbVBERiI7 DQorIAkJcmV0dXJuIGZhbHNlOw0KKyAJfQ0KKysNCisrI2lmIChQT0RPRk9fVkVSU0lPTiA+PSBQ T0RPRk9fTUFLRV9WRVJTSU9OKDAsIDEwLCAwKSkNCisgCXRyeQ0KKyAJew0KKy0jaWYgKFBPRE9G T19WRVJTSU9OIDwgUE9ET0ZPX01BS0VfVkVSU0lPTigwLCAxMCwgMCkpDQorLQkJUG9Eb0ZvOjpQ ZGZFcnJvcjo6RW5hYmxlRGVidWcoIGZhbHNlICk7DQorLQkJUG9Eb0ZvOjpQZGZFcnJvcjo6RW5h YmxlTG9nZ2luZyggZmFsc2UgKTsNCistI2VuZGlmDQorIAkJUG9Eb0ZvOjpQZGZNZW1Eb2N1bWVu dCBkb2M7DQorIAkJZG9jLkxvYWQoaW5maWxlLnRvTG9jYWw4Qml0KCkuZGF0YSgpKTsNCistI2lm IChQT0RPRk9fVkVSU0lPTiA+PSBQT0RPRk9fTUFLRV9WRVJTSU9OKDAsIDEwLCAwKSkNCistCQlQ b0RvRm86OlBkZlBhZ2UqIGN1clBhZ2UgPSAmKGRvYy5HZXRQYWdlcygpLkdldFBhZ2VBdCgwKSk7 DQorKw0KKysJCVBvRG9Gbzo6UGRmUGFnZSYgY3VyUGFnZSA9IGRvYy5HZXRQYWdlcygpLkdldFBh Z2VBdCgwKTsNCisrCQlQb0RvRm86OlBkZk9iamVjdCYgcGFnZU9iaiA9IGN1clBhZ2UuR2V0T2Jq ZWN0KCk7DQorKwkJUG9Eb0ZvOjpQZGZEaWN0aW9uYXJ5KiBwYWdlRGljdCA9IHBhZ2VPYmouSXNE aWN0aW9uYXJ5KCkgPyAmKHBhZ2VPYmouR2V0RGljdGlvbmFyeSgpKSA6IG51bGxwdHI7DQorKwkJ UG9Eb0ZvOjpQZGZPYmplY3QgKnBpZWNlID0gcGFnZURpY3QgPyBwYWdlRGljdC0+RmluZEtleSgi UGllY2VJbmZvIikgOiBudWxscHRyOw0KKysJCWlmIChwaWVjZSAhPSBudWxscHRyKQ0KKysJCXsN CisrCQkJUG9Eb0ZvOjpQZGZEaWN0aW9uYXJ5KiBwaWVjZURpY3QgPSBwaWVjZS0+SXNEaWN0aW9u YXJ5KCkgPyAmKHBpZWNlLT5HZXREaWN0aW9uYXJ5KCkpIDogbnVsbHB0cjsNCisrCQkJUG9Eb0Zv OjpQZGZPYmplY3QgKmlsbHkgPSBwaWVjZURpY3QgPyBwaWVjZURpY3QtPkZpbmRLZXkoIklsbHVz dHJhdG9yIikgOiBudWxscHRyOw0KKysJCQlpZiAoaWxseSAhPSBudWxscHRyKQ0KKysJCQl7DQor KwkJCQlQb0RvRm86OlBkZkRpY3Rpb25hcnkqIGlsbHlEaWN0ID0gaWxseS0+SXNEaWN0aW9uYXJ5 KCkgPyAmKGlsbHktPkdldERpY3Rpb25hcnkoKSkgOiBudWxscHRyOw0KKysJCQkJUG9Eb0ZvOjpQ ZGZPYmplY3QgKnByaXYgPSBpbGx5RGljdCA/IGlsbHlEaWN0LT5GaW5kS2V5KCJQcml2YXRlIikg OiBudWxscHRyOw0KKysJCQkJaWYgKHByaXYgPT0gbnVsbHB0cikNCisrCQkJCQlwcml2ID0gaWxs eTsNCisrCQkJCWludCBudW0gPSAwOw0KKysJCQkJUG9Eb0ZvOjpQZGZEaWN0aW9uYXJ5KiBwcml2 RGljdCA9IHByaXYtPklzRGljdGlvbmFyeSgpID8gJihwcml2LT5HZXREaWN0aW9uYXJ5KCkpIDog bnVsbHB0cjsNCisrCQkJCVBvRG9Gbzo6UGRmT2JqZWN0ICpudW1CbCA9IHByaXZEaWN0ID8gcHJp dkRpY3QtPkZpbmRLZXkoIk51bUJsb2NrIikgOiBudWxscHRyOw0KKysJCQkJaWYgKG51bUJsICE9 IG51bGxwdHIpDQorKwkJCQkJbnVtID0gbnVtQmwtPkdldE51bWJlcigpICsgMTsNCisrCQkJCWlm IChudW0gPT0gMCkNCisrCQkJCQludW0gPSA5OTk5OTsNCisrCQkJCVFTdHJpbmcgbmFtZSA9ICJB SVByaXZhdGVEYXRhJTEiOw0KKysJCQkJUVN0cmluZyBLZXkgPSBuYW1lLmFyZygxKTsNCisrCQkJ CVBvRG9Gbzo6UGRmT2JqZWN0ICpkYXRhID0gcHJpdkRpY3QgPyBwcml2RGljdC0+RmluZEtleShQ b0RvRm86OlBkZk5hbWUoS2V5LnRvVXRmOCgpLmRhdGEoKSkpIDogbnVsbHB0cjsNCisrCQkJCWlm IChkYXRhID09IG51bGxwdHIpDQorKwkJCQl7DQorKwkJCQkJbmFtZSA9ICJBSVBERlByaXZhdGVE YXRhJTEiOw0KKysJCQkJCUtleSA9IG5hbWUuYXJnKDEpOw0KKysJCQkJCWRhdGEgPSBwcml2RGlj dCA/IHByaXZEaWN0LT5GaW5kS2V5KFBvRG9Gbzo6UGRmTmFtZShLZXkudG9VdGY4KCkuZGF0YSgp KSkgOiBudWxscHRyOw0KKysJCQkJfQ0KKysJCQkJaWYgKGRhdGEgIT0gbnVsbHB0cikNCisrCQkJ CXsNCisrCQkJCQlpZiAobnVtID09IDIpDQorKwkJCQkJew0KKysJCQkJCQlLZXkgPSBuYW1lLmFy ZygxKTsNCisrCQkJCQkJZGF0YSA9IHByaXZEaWN0LT5GaW5kS2V5KFBvRG9Gbzo6UGRmTmFtZShL ZXkudG9VdGY4KCkuZGF0YSgpKSk7DQorKwkJCQkJCVBvRG9Gbzo6UGRmT2JqZWN0U3RyZWFtIGNv bnN0KiBzdHJlYW0gPSBkYXRhLT5HZXRTdHJlYW0oKTsNCisrCQkJCQkJUG9Eb0ZvOjpjaGFyYnVm ZiBzdHJCdWZmZXIgPSBzdHJlYW0tPkdldENvcHkoZmFsc2UpOw0KKysJCQkJCQlxaW50NjQgYkxl biA9IHN0ckJ1ZmZlci5zaXplKCk7DQorKwkJCQkJCWNvbnN0IGNoYXIqIEJ1ZmZlciA9IHN0ckJ1 ZmZlci5jX3N0cigpOw0KKysJCQkJCQlvdXRmLndyaXRlKEJ1ZmZlciwgYkxlbik7DQorKwkJCQkJ fQ0KKysJCQkJCWVsc2UNCisrCQkJCQl7DQorKwkJCQkJCWZvciAoaW50IGEgPSAyOyBhIDwgbnVt OyBhKyspDQorKwkJCQkJCXsNCisrCQkJCQkJCUtleSA9IG5hbWUuYXJnKGEpOw0KKysJCQkJCQkJ ZGF0YSA9IHByaXZEaWN0LT5GaW5kS2V5KFBvRG9Gbzo6UGRmTmFtZShLZXkudG9VdGY4KCkuZGF0 YSgpKSk7DQorKwkJCQkJCQlpZiAoZGF0YSA9PSBudWxscHRyKQ0KKysJCQkJCQkJCWJyZWFrOw0K KysJCQkJCQkJUG9Eb0ZvOjpQZGZPYmplY3RTdHJlYW0gY29uc3QqIHN0cmVhbSA9IGRhdGEtPkdl dFN0cmVhbSgpOw0KKysJCQkJCQkJUG9Eb0ZvOjpjaGFyYnVmZiBzdHJCdWZmZXIgPSBzdHJlYW0t PkdldENvcHkoZmFsc2UpOw0KKysJCQkJCQkJcWludDY0IGJMZW4gPSBzdHJCdWZmZXIuc2l6ZSgp Ow0KKysJCQkJCQkJY29uc3QgY2hhciogQnVmZmVyID0gc3RyQnVmZmVyLmNfc3RyKCk7DQorKwkJ CQkJCQlvdXRmLndyaXRlKEJ1ZmZlciwgYkxlbik7DQorKwkJCQkJCX0NCisrCQkJCQl9DQorKwkJ CQl9DQorKwkJCQlyZXQgPSB0cnVlOw0KKysJCQl9DQorKwkJfQ0KKysJCW91dGYuY2xvc2UoKTsN CisrCX0NCisgI2Vsc2UNCisrCXRyeQ0KKysJew0KKysJCVBvRG9Gbzo6UGRmRXJyb3I6OkVuYWJs ZURlYnVnKCBmYWxzZSApOw0KKysJCVBvRG9Gbzo6UGRmRXJyb3I6OkVuYWJsZUxvZ2dpbmcoIGZh bHNlICk7DQorKwkJUG9Eb0ZvOjpQZGZNZW1Eb2N1bWVudCBkb2MoIGluZmlsZS50b0xvY2FsOEJp dCgpLmRhdGEoKSApOw0KKyAJCVBvRG9Gbzo6UGRmUGFnZSAqY3VyUGFnZSA9IGRvYy5HZXRQYWdl KDApOw0KKy0jZW5kaWYNCisgCQlpZiAoY3VyUGFnZSAhPSBudWxscHRyKQ0KKyAJCXsNCistI2lm IChQT0RPRk9fVkVSU0lPTiA+PSBQT0RPRk9fTUFLRV9WRVJTSU9OKDAsIDEwLCAwKSkNCistCQkJ UG9Eb0ZvOjpQZGZPYmplY3QqIHBhZ2VPYmogPSAmKGN1clBhZ2UtPkdldE9iamVjdCgpKTsNCist I2Vsc2UNCistCQkJUG9Eb0ZvOjpQZGZPYmplY3QqIHBhZ2VPYmogPSBjdXJQYWdlLT5HZXRPYmpl Y3QoKTsNCistI2VuZGlmDQorLQkJCVBvRG9Gbzo6UGRmRGljdGlvbmFyeSogcGFnZURpY3QgPSAo cGFnZU9iaiAmJiBwYWdlT2JqLT5Jc0RpY3Rpb25hcnkoKSkgPyAmKHBhZ2VPYmotPkdldERpY3Rp b25hcnkoKSkgOiBudWxscHRyOw0KKy0JCQlQb0RvRm86OlBkZk9iamVjdCAqcGllY2UgPSBwYWdl RGljdCA/IHBhZ2VEaWN0LT5GaW5kS2V5KCJQaWVjZUluZm8iKSA6IG51bGxwdHI7DQorKwkJCVBv RG9Gbzo6UGRmT2JqZWN0ICpwaWVjZSA9IGN1clBhZ2UtPkdldE9iamVjdCgpLT5HZXRJbmRpcmVj dEtleSgiUGllY2VJbmZvIik7DQorIAkJCWlmIChwaWVjZSAhPSBudWxscHRyKQ0KKyAJCQl7DQor LQkJCQlQb0RvRm86OlBkZkRpY3Rpb25hcnkqIHBpZWNlRGljdCA9IHBpZWNlLT5Jc0RpY3Rpb25h cnkoKSA/ICYocGllY2UtPkdldERpY3Rpb25hcnkoKSkgOiBudWxscHRyOw0KKy0JCQkJUG9Eb0Zv OjpQZGZPYmplY3QgKmlsbHkgPSBwaWVjZURpY3QgPyBwaWVjZURpY3QtPkZpbmRLZXkoIklsbHVz dHJhdG9yIikgOiBudWxscHRyOw0KKysJCQkJUG9Eb0ZvOjpQZGZPYmplY3QgKmlsbHkgPSBwaWVj ZS0+R2V0SW5kaXJlY3RLZXkoIklsbHVzdHJhdG9yIik7DQorIAkJCQlpZiAoaWxseSAhPSBudWxs cHRyKQ0KKyAJCQkJew0KKy0JCQkJCVBvRG9Gbzo6UGRmRGljdGlvbmFyeSogaWxseURpY3QgPSBp bGx5LT5Jc0RpY3Rpb25hcnkoKSA/ICYoaWxseS0+R2V0RGljdGlvbmFyeSgpKSA6IG51bGxwdHI7 DQorLQkJCQkJUG9Eb0ZvOjpQZGZPYmplY3QgKnByaXYgPSBpbGx5RGljdCA/IGlsbHlEaWN0LT5G aW5kS2V5KCJQcml2YXRlIikgOiBudWxscHRyOw0KKysJCQkJCVBvRG9Gbzo6UGRmT2JqZWN0ICpw cml2ID0gaWxseS0+R2V0SW5kaXJlY3RLZXkoIlByaXZhdGUiKTsNCisgCQkJCQlpZiAocHJpdiA9 PSBudWxscHRyKQ0KKyAJCQkJCQlwcml2ID0gaWxseTsNCisgCQkJCQlpbnQgbnVtID0gMDsNCist CQkJCQlQb0RvRm86OlBkZkRpY3Rpb25hcnkqIHByaXZEaWN0ID0gcHJpdi0+SXNEaWN0aW9uYXJ5 KCkgPyAmKHByaXYtPkdldERpY3Rpb25hcnkoKSkgOiBudWxscHRyOw0KKy0JCQkJCVBvRG9Gbzo6 UGRmT2JqZWN0ICpudW1CbCA9IHByaXZEaWN0ID8gcHJpdkRpY3QtPkZpbmRLZXkoIk51bUJsb2Nr IikgOiBudWxscHRyOw0KKysJCQkJCVBvRG9Gbzo6UGRmT2JqZWN0ICpudW1CbCA9IHByaXYtPkdl dEluZGlyZWN0S2V5KCJOdW1CbG9jayIpOw0KKyAJCQkJCWlmIChudW1CbCAhPSBudWxscHRyKQ0K KyAJCQkJCQludW0gPSBudW1CbC0+R2V0TnVtYmVyKCkgKyAxOw0KKyAJCQkJCWlmIChudW0gPT0g MCkNCisgCQkJCQkJbnVtID0gOTk5OTk7DQorIAkJCQkJUVN0cmluZyBuYW1lID0gIkFJUHJpdmF0 ZURhdGElMSI7DQorIAkJCQkJUVN0cmluZyBLZXkgPSBuYW1lLmFyZygxKTsNCistCQkJCQlQb0Rv Rm86OlBkZk9iamVjdCAqZGF0YSA9IHByaXZEaWN0ID8gcHJpdkRpY3QtPkZpbmRLZXkoUG9Eb0Zv OjpQZGZOYW1lKEtleS50b1V0ZjgoKS5kYXRhKCkpKSA6IG51bGxwdHI7DQorKwkJCQkJUG9Eb0Zv OjpQZGZPYmplY3QgKmRhdGEgPSBwcml2LT5HZXRJbmRpcmVjdEtleShQb0RvRm86OlBkZk5hbWUo S2V5LnRvVXRmOCgpLmRhdGEoKSkpOw0KKyAJCQkJCWlmIChkYXRhID09IG51bGxwdHIpDQorIAkJ CQkJew0KKyAJCQkJCQluYW1lID0gIkFJUERGUHJpdmF0ZURhdGElMSI7DQorIAkJCQkJCUtleSA9 IG5hbWUuYXJnKDEpOw0KKy0JCQkJCQlkYXRhID0gcHJpdkRpY3QgPyBwcml2RGljdC0+RmluZEtl eShQb0RvRm86OlBkZk5hbWUoS2V5LnRvVXRmOCgpLmRhdGEoKSkpIDogbnVsbHB0cjsNCisrCQkJ CQkJZGF0YSA9IHByaXYtPkdldEluZGlyZWN0S2V5KFBvRG9Gbzo6UGRmTmFtZShLZXkudG9VdGY4 KCkuZGF0YSgpKSk7DQorIAkJCQkJfQ0KKyAJCQkJCWlmIChkYXRhICE9IG51bGxwdHIpDQorIAkJ CQkJew0KKy0jaWYgKFBPRE9GT19WRVJTSU9OID49IFBPRE9GT19NQUtFX1ZFUlNJT04oMCwgMTAs IDApKQ0KKyAJCQkJCQlpZiAobnVtID09IDIpDQorIAkJCQkJCXsNCisgCQkJCQkJCUtleSA9IG5h bWUuYXJnKDEpOw0KKy0JCQkJCQkJZGF0YSA9IHByaXZEaWN0LT5GaW5kS2V5KFBvRG9Gbzo6UGRm TmFtZShLZXkudG9VdGY4KCkuZGF0YSgpKSk7DQorLQkJCQkJCQlQb0RvRm86OlBkZk9iamVjdFN0 cmVhbSBjb25zdCogc3RyZWFtID0gZGF0YS0+R2V0U3RyZWFtKCk7DQorLQkJCQkJCQlQb0RvRm86 OmNoYXJidWZmIHN0ckJ1ZmZlciA9IHN0cmVhbS0+R2V0Q29weShmYWxzZSk7DQorLQkJCQkJCQlx aW50NjQgYkxlbiA9IHN0ckJ1ZmZlci5zaXplKCk7DQorLQkJCQkJCQljb25zdCBjaGFyKiBCdWZm ZXIgPSBzdHJCdWZmZXIuY19zdHIoKTsNCistCQkJCQkJCW91dGYud3JpdGUoQnVmZmVyLCBiTGVu KTsNCistCQkJCQkJfQ0KKy0JCQkJCQllbHNlDQorLQkJCQkJCXsNCistCQkJCQkJCWZvciAoaW50 IGEgPSAyOyBhIDwgbnVtOyBhKyspDQorLQkJCQkJCQl7DQorLQkJCQkJCQkJS2V5ID0gbmFtZS5h cmcoYSk7DQorLQkJCQkJCQkJZGF0YSA9IHByaXZEaWN0LT5GaW5kS2V5KFBvRG9Gbzo6UGRmTmFt ZShLZXkudG9VdGY4KCkuZGF0YSgpKSk7DQorLQkJCQkJCQkJaWYgKGRhdGEgPT0gbnVsbHB0cikN CistCQkJCQkJCQkJYnJlYWs7DQorLQkJCQkJCQkJUG9Eb0ZvOjpQZGZPYmplY3RTdHJlYW0gY29u c3QqIHN0cmVhbSA9IGRhdGEtPkdldFN0cmVhbSgpOw0KKy0JCQkJCQkJCVBvRG9Gbzo6Y2hhcmJ1 ZmYgc3RyQnVmZmVyID0gc3RyZWFtLT5HZXRDb3B5KGZhbHNlKTsNCistCQkJCQkJCQlxaW50NjQg YkxlbiA9IHN0ckJ1ZmZlci5zaXplKCk7DQorLQkJCQkJCQkJY29uc3QgY2hhciogQnVmZmVyID0g c3RyQnVmZmVyLmNfc3RyKCk7DQorLQkJCQkJCQkJb3V0Zi53cml0ZShCdWZmZXIsIGJMZW4pOw0K Ky0JCQkJCQkJfQ0KKy0JCQkJCQl9DQorLSNlbHNlDQorLQkJCQkJCWlmIChudW0gPT0gMikNCist CQkJCQkJew0KKy0JCQkJCQkJS2V5ID0gbmFtZS5hcmcoMSk7DQorLQkJCQkJCQlkYXRhID0gcHJp dkRpY3QtPkZpbmRLZXkoUG9Eb0ZvOjpQZGZOYW1lKEtleS50b1V0ZjgoKS5kYXRhKCkpKTsNCisr CQkJCQkJCWRhdGEgPSBwcml2LT5HZXRJbmRpcmVjdEtleShQb0RvRm86OlBkZk5hbWUoS2V5LnRv VXRmOCgpLmRhdGEoKSkpOw0KKyAJCQkJCQkJUG9Eb0ZvOjpQZGZTdHJlYW0gY29uc3QgKnN0cmVh bSA9IGRhdGEtPkdldFN0cmVhbSgpOw0KKyAJCQkJCQkJUG9Eb0ZvOjpQZGZNZW1vcnlPdXRwdXRT dHJlYW0gb1N0cmVhbSgxKTsNCisgCQkJCQkJCXN0cmVhbS0+R2V0RmlsdGVyZWRDb3B5KCZvU3Ry ZWFtKTsNCitAQCAtNjc0LDcgKzcwMiw3IEBAIGJvb2wgQUlQbHVnOjpleHRyYWN0RnJvbVBERihj b25zdCBRU3RyaW4KKyAJCQkJCQkJZm9yIChpbnQgYSA9IDI7IGEgPCBudW07IGErKykNCisgCQkJ CQkJCXsNCisgCQkJCQkJCQlLZXkgPSBuYW1lLmFyZyhhKTsNCistCQkJCQkJCQlkYXRhID0gcHJp dkRpY3QtPkZpbmRLZXkoUG9Eb0ZvOjpQZGZOYW1lKEtleS50b1V0ZjgoKS5kYXRhKCkpKTsNCisr CQkJCQkJCQlkYXRhID0gcHJpdi0+R2V0SW5kaXJlY3RLZXkoUG9Eb0ZvOjpQZGZOYW1lKEtleS50 b1V0ZjgoKS5kYXRhKCkpKTsNCisgCQkJCQkJCQlpZiAoZGF0YSA9PSBudWxscHRyKQ0KKyAJCQkJ CQkJCQlicmVhazsNCisgCQkJCQkJCQlQb0RvRm86OlBkZlN0cmVhbSBjb25zdCAqc3RyZWFtID0g ZGF0YS0+R2V0U3RyZWFtKCk7DQorQEAgLTY4Nyw3ICs3MTUsNiBAQCBib29sIEFJUGx1Zzo6ZXh0 cmFjdEZyb21QREYoY29uc3QgUVN0cmluCisgCQkJCQkJCQlmcmVlKCBCdWZmZXIgKTsNCisgCQkJ CQkJCX0NCisgCQkJCQkJfQ0KKy0jZW5kaWYNCisgCQkJCQl9DQorIAkJCQkJcmV0ID0gdHJ1ZTsN CisgCQkJCX0NCitAQCAtNjk1LDYgKzcyMiw3IEBAIGJvb2wgQUlQbHVnOjpleHRyYWN0RnJvbVBE Rihjb25zdCBRU3RyaW4KKyAJCX0NCisgCQlvdXRmLmNsb3NlKCk7DQorIAl9DQorKyNlbmRpZiAv LyAoUE9ET0ZPX1ZFUlNJT04gPj0gUE9ET0ZPX01BS0VfVkVSU0lPTigwLCAxMCwgMCkpDQorIAlj YXRjaCAoUG9Eb0ZvOjpQZGZFcnJvciYgZSkNCisgCXsNCisgCQlvdXRmLmNsb3NlKCk7DQorQEAg LTcwNCw3ICs3MzIsNyBAQCBib29sIEFJUGx1Zzo6ZXh0cmFjdEZyb21QREYoY29uc3QgUVN0cmlu CisgCQlRRmlsZTo6cmVtb3ZlKG91dGZpbGUpOw0KKyAJCXJldHVybiBmYWxzZTsNCisgCX0NCist I2VuZGlmDQorKyNlbmRpZiAvLyBIQVZFX1BPRE9GTw0KKyAJcmV0dXJuIHJldDsNCisgfQ0KKyAN CmRpZmYgLS1naXQgYS9zcmNwa2dzL3NjcmlidXMvcGF0Y2hlcy8wMDE1LXBvZG9mby0wLjEwLWNt YWtlLWZpeC5wYXRjaCBiL3NyY3BrZ3Mvc2NyaWJ1cy9wYXRjaGVzLzAwMTUtcG9kb2ZvLTAuMTAt Y21ha2UtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAu LmMwMTU1OGMwNGY5OGQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmNwa2dzL3NjcmlidXMvcGF0Y2hl cy8wMDE1LXBvZG9mby0wLjEwLWNtYWtlLWZpeC5wYXRjaApAQCAtMCwwICsxLDIyIEBACitGcm9t IDE0OGZjMDU1NTc5NzUyNjdiMDVlYmU2NzA4MjI3OTM5OTllYTNlMGEgTW9uIFNlcCAxNyAwMDow MDowMCAyMDAxCitGcm9tOiBDcmFpZyBCcmFkbmV5IDxtcmJAc2NyaWJ1cy5pbmZvPgorRGF0ZTog TW9uLCA1IEp1biAyMDIzIDIxOjE1OjM1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMTEvMTNdIEZp eCB0eXBvCisKK2dpdC1zdm4taWQ6IHN2bjovL3NjcmlidXMubmV0L3RydW5rL1NjcmlidXNAMjU1 MDQgMTFkMjA3MDEtODQzMS0wNDEwLWE3MTEtZTNjOTU5ZTNiODcwCisoY2hlcnJ5IHBpY2tlZCBm cm9tIGNvbW1pdCBiZDJiYTI5YzE2MjE4YmM3MTVjZGU5MzEwOWU2YzBiOWJlNDhlNGJlKQorLS0t CisgQ01ha2VMaXN0c19EZXBlbmRlbmNpZXMuY21ha2UgfCAyICstCisgMSBmaWxlIGNoYW5nZWQs IDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKKy0tLSBhL0NNYWtlTGlzdHNfRGVwZW5k ZW5jaWVzLmNtYWtlCisrKysgYi9DTWFrZUxpc3RzX0RlcGVuZGVuY2llcy5jbWFrZQorQEAgLTgs NyArOCw3IEBAIGlmIChXSVRIX1BPRE9GTykKKyAJaWYgKExJQlBPRE9GT19GT1VORCkKKyAJCW1l c3NhZ2UoIlBvRG9GbyBmb3VuZCBPSyIpCisgCQlzZXQoSEFWRV9QT0RPRk8gT04pCistCQlpZihM SUJQT0RPRk9fVkVSU0lPTiBWRVJTSU9OX0dSRUFURVIgIjAuMTAuMCIpCisrCQlpZihMSUJQT0RP Rk9fVkVSU0lPTiBWRVJTSU9OX0dSRUFURVJfRVFVQUwgIjAuMTAuMCIpCisgCQkJbWVzc2FnZShT VEFUVVMgIlBvRG9GbyBWZXJzaW9uOiIgJHtMSUJQT0RPRk9fVkVSU0lPTn0pCisgCQkJaWYgKENN QUtFX0NYWF9TVEFOREFSRCBMRVNTIDE3KQorIAkJCQltZXNzYWdlKFNUQVRVUyAiQysrMTcgaXMg dGhlIG1pbmltdW0gQysrIHN0YW5kYXJkIHNpbmNlIHBvZG9mbyAwLjEwLjAiKQpkaWZmIC0tZ2l0 IGEvc3JjcGtncy9zY3JpYnVzL3BhdGNoZXMvMDAxNi1wb2RvZm8tMC4xMC11c2UtcGtnY29uZmln LnBhdGNoIGIvc3JjcGtncy9zY3JpYnVzL3BhdGNoZXMvMDAxNi1wb2RvZm8tMC4xMC11c2UtcGtn Y29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjJk NTFhOGVmOWI3OTMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmNwa2dzL3NjcmlidXMvcGF0Y2hlcy8w MDE2LXBvZG9mby0wLjEwLXVzZS1wa2djb25maWcucGF0Y2gKQEAgLTAsMCArMSwxMDcgQEAKK0Zy b20gNmFlNzI5ZTFiNDVmOTI0MjgxNjg0NzVjMzE2ZjNiNDVhOGU5OWQ3NCBNb24gU2VwIDE3IDAw OjAwOjAwIDIwMDEKK0Zyb206IENyYWlnIEJyYWRuZXkgPG1yYkBzY3JpYnVzLmluZm8+CitEYXRl OiBNb24sIDQgU2VwIDIwMjMgMjE6NTg6MzggKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxMi8xM10g QWRhcHQgQ01ha2UgRmluZExJQlBPRE9GTy5jbWFrZSB0byB1c2UgcGtnY29uZmlnLCBhbmQKKyBh bGxvdyBjdXN0b20gZmluZCBwYXRoLiBTdGlsbCB0ZXN0aW5nLgorCitnaXQtc3ZuLWlkOiBzdm46 Ly9zY3JpYnVzLm5ldC90cnVuay9TY3JpYnVzQDI1NjI1IDExZDIwNzAxLTg0MzEtMDQxMC1hNzEx LWUzYzk1OWUzYjg3MAorKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgNjI4YTYzMGQ3YzQ1ZDk0 MjYwNWFjMjI3YzUzMGY5Yzg4OTM5NTgzMikKKy0tLQorIGNtYWtlL21vZHVsZXMvRmluZExJQlBP RE9GTy5jbWFrZSAgICAgICAgfCA0OCArKysrKysrKysrKysrKysrKy0tLS0tLS0KKyBzY3JpYnVz L3BsdWdpbnMvaW1wb3J0L2FpL0NNYWtlTGlzdHMudHh0IHwgMTMgKysrLS0tLQorIDIgZmlsZXMg Y2hhbmdlZCwgNDEgaW5zZXJ0aW9ucygrKSwgMjAgZGVsZXRpb25zKC0pCisKKy0tLSBhL2NtYWtl L21vZHVsZXMvRmluZExJQlBPRE9GTy5jbWFrZQorKysrIGIvY21ha2UvbW9kdWxlcy9GaW5kTElC UE9ET0ZPLmNtYWtlCitAQCAtMTIsMjMgKzEyLDQ1IEBAIGlmKFdJTjMyKQorIAllbmRpZihOT1Qg REVGSU5FRCBMSUJQT0RPRk9fU0hBUkVEKQorIGVuZGlmKFdJTjMyKQorIAorLWZpbmRfcGF0aChM SUJQT0RPRk9fSU5DTFVERV9ESVIKKy0JTkFNRVMgcG9kb2ZvL3BvZG9mby5oCistCVBBVEhTCist CSIke0xJQlBPRE9GT19ESVJ9L2luY2x1ZGUiCistCSIke0xJQlBPRE9GT19ESVJ9L3NyYyIKKy0J IiR7TElCUE9ET0ZPX0RJUn0iCisrc2V0KExJQlBPRE9GT19GSU5EX1FVSUVUTFkgT0ZGKQorKwor K2ZpbmRfcGFja2FnZShQa2dDb25maWcgUVVJRVQpCisraWYoREVGSU5FRCBMSUJQT0RPRk9fRElS X0NVU1RPTSkKKysJc2V0KEVOVntQS0dfQ09ORklHX1BBVEh9ICIke0xJQlBPRE9GT19ESVJfQ1VT VE9NfS9saWIvcGtnY29uZmlnOiRFTlZ7UEtHX0NPTkZJR19QQVRIfSIpCisrZW5kaWYoKQorK3Br Z19zZWFyY2hfbW9kdWxlKGxpYnBvZG9mbyBSRVFVSVJFRCBsaWJwb2RvZm8gcG9kb2ZvKQorKwor K2lmIChERUZJTkVEIExJQlBPRE9GT19ESVJfQ1VTVE9NKQorKwlmaW5kX3BhdGgoTElCUE9ET0ZP X0lOQ0xVREVfRElSCisrCQlOQU1FUyBwb2RvZm8vcG9kb2ZvLmgKKysJCVBBVEhTCisrCQkiJHtM SUJQT0RPRk9fRElSX0NVU1RPTX0vaW5jbHVkZSIKKysJCSIke0xJQlBPRE9GT19ESVJfQ1VTVE9N fSIKKysJCVBBVEhfU1VGRklYRVMgcG9kb2ZvCisrCQlOT19ERUZBVUxUX1BBVEgKKyAJKQorIAor LXNldChMSUJQT0RPRk9fRklORF9RVUlFVExZIE9OKQorKwlmaW5kX2xpYnJhcnkoTElCUE9ET0ZP X0xJQlJBUlkKKysJCU5BTUVTIGxpYnBvZG9mbyBwb2RvZm8KKysJCVBBVEhTCisrCQkiJHtMSUJQ T0RPRk9fRElSX0NVU1RPTX0vbGliIgorKwkJIiR7TElCUE9ET0ZPX0RJUl9DVVNUT019IgorKwkJ Tk9fREVGQVVMVF9QQVRICisrCSkKKytlbHNlKCkKKysJZmluZF9wYXRoKExJQlBPRE9GT19JTkNM VURFX0RJUgorKwkJTkFNRVMgcG9kb2ZvL3BvZG9mby5oCisrCQlQQVRIUworKwkJJHtsaWJwb2Rv Zm9fSU5DTFVERV9ESVJTfQorKwkpCisgCistZmluZF9saWJyYXJ5KExJQlBPRE9GT19MSUJSQVJZ CistCU5BTUVTIGxpYnBvZG9mbyBwb2RvZm8KKy0JUEFUSFMKKy0JIiR7TElCUE9ET0ZPX0RJUn0v bGliIgorLQkiJHtMSUJQT0RPRk9fRElSfS9zcmMiCistCSIke0xJQlBPRE9GT19ESVJ9IgorKwlm aW5kX2xpYnJhcnkoTElCUE9ET0ZPX0xJQlJBUlkKKysJCU5BTUVTIGxpYnBvZG9mbyBwb2RvZm8K KysJCVBBVEhTCisrCQkke2xpYnBvZG9mb19MSUJSQVJZX0RJUlN9CisgCSkKKytlbmRpZigpCisr CisgCisgaWYoTElCUE9ET0ZPX0lOQ0xVREVfRElSIEFORCBMSUJQT0RPRk9fTElCUkFSWSkKKyAJ aWYoTk9UIExJQlBPRE9GT19DT05GSUdfSCkKKy0tLSBhL3NjcmlidXMvcGx1Z2lucy9pbXBvcnQv YWkvQ01ha2VMaXN0cy50eHQKKysrKyBiL3NjcmlidXMvcGx1Z2lucy9pbXBvcnQvYWkvQ01ha2VM aXN0cy50eHQKK0BAIC0xLDE0ICsxLDE1IEBACisgaW5jbHVkZV9kaXJlY3RvcmllcygKKyAJJHtD TUFLRV9TT1VSQ0VfRElSfQorIAkke0NNQUtFX1NPVVJDRV9ESVJ9L3NjcmlidXMKKy0JJHtQT0RP Rk9fSU5DTFVERVN9CisrCSR7TElCUE9ET0ZPX0lOQ0xVREVfRElSfQorIAkke1NDUklCVVNfQVVU T0dFTl9JTkNMVURFX1BBVEh9CisgKQorIAorIGlmKEhBVkVfUE9ET0ZPKQorLQlpbmNsdWRlX2Rp cmVjdG9yaWVzKAorLQkJJHtMSUJQT0RPRk9fSU5DTFVERV9ESVJ9CistCSkKKysJaWYoT1BFTlNT TF9GT1VORCkKKysJCWluY2x1ZGVfZGlyZWN0b3JpZXMoJHtPUEVOU1NMX0lOQ0xVREVfRElSfSkK KysJZW5kaWYoKQorKwlpbmNsdWRlX2RpcmVjdG9yaWVzKEJFRk9SRSAke0xJQlBPRE9GT19JTkNM VURFX0RJUn0pCisgZW5kaWYoKQorIAorIHNldChJTVBPUlRBSV9QTFVHSU5fU09VUkNFUworQEAg LTMyLDkgKzMzLDcgQEAgZWxzZSgpCisgZW5kaWYoKQorIAorIGlmKEhBVkVfUE9ET0ZPKQorLQl0 YXJnZXRfbGlua19saWJyYXJpZXMoJHtTQ1JJQlVTX0lNUE9SVEFJX1BMVUdJTn0KKy0JCSR7TElC UE9ET0ZPX0xJQlJBUll9CistCSkKKysJdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7U0NSSUJVU19J TVBPUlRBSV9QTFVHSU59ICR7TElCUE9ET0ZPX0xJQlJBUll9KQorIGVuZGlmKCkKKyAKKyBpZihX QU5UX1BDSCkKZGlmZiAtLWdpdCBhL3NyY3BrZ3Mvc2NyaWJ1cy9wYXRjaGVzL2NtYWtlLWJ1aWxk dHlwZS1ub25lLnBhdGNoIGIvc3JjcGtncy9zY3JpYnVzL3BhdGNoZXMvY21ha2UtYnVpbGR0eXBl LW5vbmUucGF0Y2gKaW5kZXggZWExZGY0OTQxMGVkNi4uOTVhM2RhMzM5YjI5YiAxMDA2NDQKLS0t IGEvc3JjcGtncy9zY3JpYnVzL3BhdGNoZXMvY21ha2UtYnVpbGR0eXBlLW5vbmUucGF0Y2gKKysr IGIvc3JjcGtncy9zY3JpYnVzL3BhdGNoZXMvY21ha2UtYnVpbGR0eXBlLW5vbmUucGF0Y2gKQEAg LTEsNSArMSwzIEBACi1JbmRleDogQ01ha2VMaXN0cy50eHQKLT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC0tLSBhL0NN YWtlTGlzdHMudHh0CiArKysgYi9DTWFrZUxpc3RzLnR4dAogQEAgLTc1LDExICs3NSw2IEBAIHNl dChDTUFLRV9JTkNMVURFX0NVUlJFTlRfRElSIE9OKQpAQCAtMTQsNyArMTIsNyBAQCBJbmRleDog Q01ha2VMaXN0cy50eHQKICBzZXQoQ01BS0VfSU5TVEFMTF9SUEFUSF9VU0VfTElOS19QQVRIIFRS VUUpCiAgc2V0KENNQUtFX1NLSVBfUlVMRV9ERVBFTkRFTkNZIFRSVUUpCiAgc2V0KENNQUtFX1NL SVBfQlVJTERfUlBBVEggVFJVRSkKLUBAIC0zMzAsMTUgKzMyNSw2IEBAIGluY2x1ZGUgKENNYWtl TGlzdHNfRGlyZWN0b3JpZXMuY21ha2UpCitAQCAtMzQ0LDE1ICszMzksNiBAQCBpbmNsdWRlIChD TWFrZUxpc3RzX0RpcmVjdG9yaWVzLmNtYWtlKQogIAogICNDb252ZXJ0IG91ciBzaW1wbGVyIGNv bW1hbmQgbGluZSBvcHRpb24gdG8gdGhlIENNYWtlIHN0eWxlCiAgI05vbmUsIERlYnVnLCBSZWxl YXNlLCAuLiBvciBjdXN0b20gb25lcwpAQCAtMjcsMyArMjUsNiBAQCBJbmRleDogQ01ha2VMaXN0 cy50eHQKIC1pZihOT1QgV0FOVF9ERUJVRyBBTkQgTk9UIFdBTlRfUkVMRUFTRVdJVEhERUJVRykK IC0Jc2V0KENNQUtFX0JVSUxEX1RZUEUgIlJlbGVhc2UiIENBQ0hFIFNUUklORyAiU2V0IFJlbGVh c2UgQnVpbGQgVHlwZSIgRk9SQ0UpCiAtZW5kaWYoKQorIAorIHNldChDTUFLRV9FTkFCTEVfRVhQ T1JUUyBPTikKKyBzZXQoQ01BS0VfQ1hYX1ZJU0lCSUxJVFlfUFJFU0VUIGhpZGRlbikKZGlmZiAt LWdpdCBhL3NyY3BrZ3Mvc2NyaWJ1cy90ZW1wbGF0ZSBiL3NyY3BrZ3Mvc2NyaWJ1cy90ZW1wbGF0 ZQppbmRleCAzMTM4YTg0MjU0NmFmLi5hNDNhY2Y3Y2NkNzYxIDEwMDY0NAotLS0gYS9zcmNwa2dz L3NjcmlidXMvdGVtcGxhdGUKKysrIGIvc3JjcGtncy9zY3JpYnVzL3RlbXBsYXRlCkBAIC0xLDcg KzEsNyBAQAogIyBUZW1wbGF0ZSBmaWxlIGZvciAnc2NyaWJ1cycKIHBrZ25hbWU9c2NyaWJ1cwog dmVyc2lvbj0xLjUuOAotcmV2aXNpb249MTIKK3JldmlzaW9uPTEzCiBidWlsZF9zdHlsZT1jbWFr ZQogY29uZmlndXJlX2FyZ3M9Ii1EQ01BS0VfU0tJUF9SUEFUSD1UUlVFIC1EUVRfUFJFRklYPSR7 WEJQU19DUk9TU19CQVNFfS91c3IKICAtRFdBTlRfR1JBUEhJQ1NNQUdJQ0s9MSAtRFdBTlRfQ1BQ MTc9T04iCkBAIC05LDcgKzksNyBAQCBob3N0bWFrZWRlcGVuZHM9InBrZy1jb25maWcgcXQ1LXFt YWtlIHF0NS1ob3N0LXRvb2xzIHB5dGhvbjMiCiBtYWtlZGVwZW5kcz0icXQ1LWRldmVsIHF0NS10 b29scy1kZXZlbCB6bGliLWRldmVsIGNhaXJvLWRldmVsIGxjbXMyLWRldmVsCiAgY3Vwcy1kZXZl bCBsaWJ4bWwyLWRldmVsIGh5cGhlbi1kZXZlbCBnaG9zdHNjcmlwdC1kZXZlbCBib29zdC1kZXZl bAogIGh1bnNwZWxsLWRldmVsIHBvcHBsZXItY3BwLWRldmVsIHB5dGhvbjMtZGV2ZWwgaGFyZmJ1 enotZGV2ZWwKLSBsaWJncmFwaGljc21hZ2ljay1kZXZlbCBsaWJwb2RvZm8wLjkuNy1kZXZlbCBs aWJwYWdlbWFrZXItZGV2ZWwgbGlicXhwLWRldmVsCisgbGliZ3JhcGhpY3NtYWdpY2stZGV2ZWwg bGlicG9kb2ZvLWRldmVsIGxpYnBhZ2VtYWtlci1kZXZlbCBsaWJxeHAtZGV2ZWwKICBsaWJtc3B1 Yi1kZXZlbCBsaWJjZHItZGV2ZWwgbGliZnJlZWhhbmQtZGV2ZWwgbGlidmlzaW8tZGV2ZWwiCiBk ZXBlbmRzPSJnaG9zdHNjcmlwdCIKIHNob3J0X2Rlc2M9Ik9wZW4gU291cmNlIERUUCAoRGVza3Rv cCBQdWJsaXNoaW5nKSBhcHBsaWNhdGlvbiIKCkZyb20gZTg0NGNhYzExYzZjZjE1OWNlOWRmNzI4 ZWU3MDlkMzVkOGZjMTNkMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogPT9VVEYtOD9x Pz1DND05MG89QzM9QTBuPTIwVHI9RTE9QkE9QTduPTIwQz1DMz1CNG5nPTIwRGFuaD89CiA8Y29u Z2RhbmhxeEBnbWFpbC5jb20+CkRhdGU6IFRodSwgMTQgRGVjIDIwMjMgMTk6MzM6MzAgKzA3MDAK U3ViamVjdDogW1BBVENIIDgvOF0gbGlicmVvZmZpY2U6IHVwZGF0ZSB0byA3LjYuNC4xLgoKLS0t CiBzcmNwa2dzL2xpYnJlb2ZmaWNlL3RlbXBsYXRlIHwgMjAgKysrKysrKysrKy0tLS0tLS0tLS0K IDEgZmlsZSBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmNwa2dzL2xpYnJlb2ZmaWNlL3RlbXBsYXRlIGIvc3JjcGtncy9saWJyZW9mZmlj ZS90ZW1wbGF0ZQppbmRleCBlNGNjMTViM2I5OTE5Li41ZTgyYzdjOWFlNjNiIDEwMDY0NAotLS0g YS9zcmNwa2dzL2xpYnJlb2ZmaWNlL3RlbXBsYXRlCisrKyBiL3NyY3BrZ3MvbGlicmVvZmZpY2Uv dGVtcGxhdGUKQEAgLTEsMTEgKzEsMTEgQEAKICMgVGVtcGxhdGUgZmlsZSBmb3IgJ2xpYnJlb2Zm aWNlJwogcGtnbmFtZT1saWJyZW9mZmljZQotdmVyc2lvbj03LjYuMC4zCi1yZXZpc2lvbj0zCit2 ZXJzaW9uPTcuNi40LjEKK3JldmlzaW9uPTEKIGJ1aWxkX3N0eWxlPW1ldGEKIG1ha2VfYnVpbGRf dGFyZ2V0PSJidWlsZCIKIGhvc3RtYWtlZGVwZW5kcz0iYXV0b21ha2UgZmxleCBncGVyZiBoeXBo ZW4gaWN1IGxpYnRvb2wgb3BlbmxkYXAgd2hpY2ggZ2V0dGV4dCB4egotIHBlcmwtQXJjaGl2ZS1a aXAgcGtnLWNvbmZpZyBxdDUtcW1ha2Ugc2FuZSB1bnppcCB6aXAgcHl0aG9uMy1zZXR1cHRvb2xz CisgdGFyIHBlcmwtQXJjaGl2ZS1aaXAgcGtnLWNvbmZpZyBxdDUtcW1ha2Ugc2FuZSB1bnppcCB6 aXAgcHl0aG9uMy1zZXR1cHRvb2xzCiAgZm9udGZvcmdlIHB5dGhvbjMtbHhtbCBxdDYtYmFzZSBn dGs0LWRldmVsIGdvYmplY3QtaW50cm9zcGVjdGlvbiBnbnVwZyIKIG1ha2VkZXBlbmRzPSJDb2lu TVAtZGV2ZWwgYXByLWRldmVsIGF2YWhpLWxpYnMtZGV2ZWwgY2x1Y2VuZS1kZXZlbAogIGZyYW1l d29ya2ludGVncmF0aW9uLWRldmVsIGdseXBoeS1kZXZlbCBncGdtZXBwLWRldmVsIGdzdC1wbHVn aW5zLWJhc2UxLWRldmVsCkBAIC03Miw3ICs3Miw3IEBAIGRpc3RmaWxlcz0iCiAgJHtfYWRkdXJs fS9kOGJkNWVlZDE3OGRiNmUyYjE4ZWVlZDI0M2Y4NWFhOC1mbHV0ZS0xLjEuNi56aXAKICAke19h ZGR1cmx9L2JhMjkzMDIwMGM5ZjAxOWMyZDkzYThjODhjNjUxYTBmLWZsb3ctZW5naW5lLTAuOS40 LnppcAogICR7X2FkZHVybH0vYm94MmQtMi40LjEudGFyLmd6Ci0gJHtfYWRkdXJsfS9saWJjbWlz LTAuNS4yLnRhci54egorICR7X2FkZHVybH0vbGliY21pcy0wLjYuMS50YXIueHoKICAke19hZGR1 cmx9L2xpYnN0YXJvZmZpY2UtMC4wLjcudGFyLnh6CiAgJHtfYWRkdXJsfS9saWJ6bWYtMC4wLjIu dGFyLnh6CiAgJHtfYWRkdXJsfS9wZGZpdW0tNTc3OC50YXIuYnoyCkBAIC05NCwxMCArOTQsMTAg QEAgZGlzdGZpbGVzPSIKICAke19hZGR1cmx9L2Zyb3plbi0xLjEuMS50YXIuZ3oKICAke19hZGR1 cmx9L2RyYWdvbmJveC0xLjEuMy50YXIuZ3oKICIKLWNoZWNrc3VtPSIwN2YzM2YxMWE3NWI3MmEz MDQ0NzQ5ZDRmMmY3ZDAyYTBmZDc5ZWFlZDRmYjczZTYxOGVjNWZlMzU3NmQwYzI1Ci0gYjkzMmNk ZDZiZDJlZTcxN2YzYTA5NzY2Yzg4ZmU5MDEwMGIwYzJjMDUwOTMxM2MzZWUyOTdmOTVjMDg0ZWUy ZQotIDIxMGYxOGZmNjBlOTNkMzY2ODU2ZDg0ZTcxNGQzZmQ2ZjE4NGYzOTliNTE2M2FmYzkyYjdl MTExNTVjYmU3NjgKLSA2NjdlNGZmZWFjYzAxYmQwZjgzMGMyZWRjYzU2ZTIzMjhmOTI0ZWVhYzIy NDYzOWJhYmViMzg0MWE0NGVjNWY0CitjaGVja3N1bT0iMTNmZWE3YjhmMjRjNzc2MzEzYjllMDg2 MjhhYTU5MDM5MGJlYTQ1MDY0YmU3M2JjNzBlZTdiMWI3MGFhNmExZQorIDM2YzA1MjZlNGMxMmFi MzhkZDFlMTc2NmNkODc4MTE4ZGQ1NjkyNTc4YjgwNDExYjliNDQzZTM4OWUzNzEyZmEKKyBlZDc4 NGMwMTQwOTZlMGU3ZmY4NjI5NGViYTYyNGJkOTJlY2JlNWJlODgxYjAxOTUwZWVjZDY5YWVkN2Q4 Njc4CisgM2E1YTBkYmU0MGFiZGM1NWNkZDk5OTQ4OTVmNjU3N2Q3ZTU0N2QyNmEzNmIyMDY0MWYz MmYzNjQwYTNiNzY3OQogIDFmYjQ1OGQ2YWFiMDY5MzI2OTNjYzhhOWI2ZTRlNzA5NDRlZTFmZjA1 MmZhNjM2MDZlMzEzMWRmMzRlMjE3NTMKICA3NTgyMzc3NmZiNTFhOWM1MjZhZjkwNGYxNTAzYTdh ZmFhYWI5MDBmYmE4M2VkYTY0ZjhhNDEwNzM3MjRjODcwCiAgN2QyNzk3ZmU5Zjc5YTc3MDA5NzIx ZTNmMTRmYTRhMWRlYzE3YTZkNzA2YmRjOTNmODVmMWYwMWQxMjRmYWI2NgpAQCAtMTA2LDcgKzEw Niw3IEBAIGNoZWNrc3VtPSIwN2YzM2YxMWE3NWI3MmEzMDQ0NzQ5ZDRmMmY3ZDAyYTBmZDc5ZWFl ZDRmYjczZTYxOGVjNWZlMzU3NmQwYzI1CiAgMWI1YjI0ZjdiYzU0M2MwMzYyYjY2NzY5MmY3OGRi OGJhYjRlZDZkYWZjNjE3MmYxMDRkMGJkMzc1N2Q4YTEzMwogIDIzM2Y2NmU4ZDI1YzVkZDk3MTcx NmQ0MjAwMjAzYTYxMmE0MDc2NDk2ODZlZjNiNTIwNzVkMDRiNGM5ZGYwZGQKICBkNmI0NjUwZmY4 OTdlZTFlYWQyN2NmNzdhNTkzM2VhMTk3Y2JlZWY2NzA1NjM4ZGQxODFhZGMyZTgxNmIyM2MyCi0g ZDdiMThkOTYwMjE5MGUxMGQ0MzdmOGE5NjRhMzJlOTgzYWZkNTdlMmRiMzE2YTA3ZDg3NDc3YTc5 ZjUwMDBhMgorIGQ1NGQxOWQ4NjE1M2RiYzg4ZTJkNDY4ZjcxMzYyNjlhMmNmZTcxYjczMjI3ZTEy ZmRlZDAxZDI5YWMyNjgwNzQKICBmOTRmYjBhZDgyMTZmOTcxMjdiZWRlZjE2M2E0NTg4NmI0M2M2 MmRlYWM1ZTViMGY1ZTYyOGUyMzQyMjBjOGRiCiAgMjcwNTFhMzBjYjA1N2ZkYjVkNWRlNjVhMWYx NjVjNzE1M2RjNzZlMjdmZTYyMjUxY2JiODY2MzllYjJjYWYyMgogIGIxMDUyZmYyNGU5ZmZiMTFh ZjAxN2M0NDRiYjBmNmFkNTA4ZDY0YzlhMGZiODhjYWNiMGU4MjEwMjQ1ZGRlMDYKQEAgLTEzNiw3 ICsxMzYsNyBAQCBza2lwX2V4dHJhY3Rpb249IgogIGQ4YmQ1ZWVkMTc4ZGI2ZTJiMThlZWVkMjQz Zjg1YWE4LWZsdXRlLTEuMS42LnppcAogIGJhMjkzMDIwMGM5ZjAxOWMyZDkzYThjODhjNjUxYTBm LWZsb3ctZW5naW5lLTAuOS40LnppcAogIGJveDJkLTIuNC4xLnRhci5negotIGxpYmNtaXMtMC41 LjIudGFyLnh6CisgbGliY21pcy0wLjYuMS50YXIueHoKICBsaWJzdGFyb2ZmaWNlLTAuMC43LnRh ci54egogIGxpYnptZi0wLjAuMi50YXIueHoKICBwZGZpdW0tNTc3OC50YXIuYnoyCg== --===============9221531594149100553==--