LyoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIENvcHlyaWdodCAoQykgMTk5Ny0xOTk5LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCiogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogRmlsZSBDSEJLREFULkNQUAoqCiogTW9kaWZpY2F0aW9uIEhpc3Rvcnk6CioKKiAgIERhdGUgICAgICAgIE5hbWUgICAgICAgIERlc2NyaXB0aW9uCiogICAwMi8xOC85NyAgICBhbGl1ICAgICAgICBDb252ZXJ0ZWQgZnJvbSBPcGVuQ2xhc3MuCiogICAgICAgICAgICAgICAgICAgICAgICAgICBSZWNvZGVkIGtSYXdNYXBwaW5nIHRhYmxlIGZvciBVbmljb2RlOjpnZXRUeXBlKCkgdHlwZSBjb2Rlcy4KKiAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hZGUgc3RhdGljIGRhdGEgbWVtYmVycyBjb25zdCB3aGVyZSBhcHByb3ByaWF0ZS4KKiAgIDAzLzI1Lzk3ICAgIGFsaXUgICAgICAgIE1vdmVkIGludG8gVGV4dEJvdW5kYXJ5RGF0YTsgbm8gbG9uZ2VyIGEgc3ViY2xhc3MuCiogICAwNC8xNS85NyAgICBhbGl1ICAgICAgICBXb3JrZWQgYXJvdW5kIGJ1ZyBpbiBBSVggeGxDIGNvbXBpbGVyIHdoaWNoIG9jY3VycyBpZiBzdGF0aWMKKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5cyBjb250YWluIGNvbnN0IGVsZW1lbnRzLgoqICAgMDUvMDYvOTcgICAgYWxpdSAgICAgICAgTWFkZSBTcGVjaWFsTWFwcGluZyBhbiBhcnJheSBvZiBvYmplY3RzIGluc3RlYWQgb2YgcG9pbnRlcnMsCiogICAgICAgICAgICAgICAgICAgICAgICAgICB0byBoZWxwIG91dCBub24tY29tcGxpYW50IGNvbXBpbGVycy4KKiAgIDA4LzE0Lzk4ICAgIGhlbGVuYSAgICAgIFN5bmMtdXAgSkRLMS4yLgoqICAgMDcvMTIvOTkgICAgaGVsZW5hICAgICAgSFBVWCAxMSBDQyBwb3J0LgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqLwoKLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLy8gVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZnJvbSB0aGUgamF2YSBzb3VyY2UgZmlsZSBDaGFyYWN0ZXJCcmVha0RhdGEuamF2YQovLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKI2luY2x1ZGUgInR4dGJkYXQuaCIKI2luY2x1ZGUgIndkYmt0YmwuaCIKI2luY2x1ZGUgInVuaWNkY20uaCIKLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLy8gY2xhc3MgQ2hhcmFjdGVyQnJlYWtEYXRhCi8vIFRoZSBmb2xsb3dpbmcgdGFibGVzIGNvbnRhaW4gdGhlIHRyYW5zaXRpb24gc3RhdGUgZGF0YSBmb3IgY2hhcmFjdGVyIGJyZWFrLgovLyBUYWtlIGZvcndhcmQgZGF0YSBmb3IgZXhhbXBsZSwgdGhlIHN0YXRlIG1hY2hpbmUgbG9va3MgbGlrZSwKLy8gICAgRGlhZ3JhbSAxIDogdGhlIGZvcndhcmQgc3RhdGUgbWFjaGluZSBmb3IgYWNjZW50IGFuZCBiYXNlCi8vCi8vICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NlbnQKLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tCi8vICAgICAgICAgICAgYWNjZW50ICArLS0tLSsvICAgIFwgCi8vICAgICAgICAgICAtLS0tLS0tPiB8U0krMnwgICAgICB8Ci8vICAgICAgICAgIC8gICAgICAgICArLS0tLSs8LS0tLS8gCi8vICAgICstLS0tKyAgICAgICAgICAgIHwgICAgICAgIGJhc2UgICAgICAgKy0tLS0tLS0rCi8vIDAtPnxzdG9wfCAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLT4gfFNJX3N0b3B8Ci8vICAgICstLS0tK1wtLS0tLS0tPiArLS0tLSstLS0tLS0tLS0tLS0tLT4gKy0tLS0tLS0rCi8vICAgICAgICAgICAgYmFzZSAgICB8U0krMnwgICAgIGJhc2UgICAgICAgCi8vICAgICAgICAgICAgICAgICAgICArLS0tLSsKLy8gICAgICAgICAgICAgICAgICAgIF4gICAgXCAKLy8gICAgICAgICAgICAgICAgICAgIHwgICAgIHwKLy8gICAgICAgICAgICAgICAgICAgIFwtLS0tLwovLyAgICAgICAgICAgICAgICAgICAgYWNjZW50Ci8vCi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi8vIFRoZSBmb3J3YXJkIHRyYW5zaXRpb24gc3RhdGVzIG9mIGNoYXJhY3RlciBib3VuZGFyeSBkYXRhLgpUZXh0Qm91bmRhcnlEYXRhOjpOb2RlIFRleHRCb3VuZGFyeURhdGE6OmtDaGFyYWN0ZXJGb3J3YXJkRGF0YVtdID0gewogICAgICAgIC8vIGFjY3QgICAgICAgICBiYXNlICAgICAgICAgICAgY3IgICAgICAgICAgICAgIGxmCiAgICAgICAgLy8gY2hvICAgICAgICAgIGp1bmcgICAgICAgICAgICBqb25nICAgICAgICAgICAgRU9TCiAgICAgICAga1N0b3AsICAgICAgICAgIGtTdG9wLCAgICAgICAgICBrU3RvcCwgICAgICAgICAga1N0b3AsCiAgICAgICAga1N0b3AsICAgICAgICAgIGtTdG9wLCAgICAgICAgICBrU3RvcCwgICAgICAgICAga1N0b3AsCgogICAgICAgIC8vIDEKICAgICAgICBrU0lfMiwgICAgICAgICAga1NJXzIsICAgICAgICAgIGtTSV8zLCAgICAgICAgICBrU0lfNywKICAgICAgICBrU0lfNCwgICAgICAgICAga1NJXzUsICAgICAgICAgIGtTSV82LCAgICAgICAgICBrU0lfU3RvcCwKCiAgICAgICAgLy8gMgogICAgICAgIGtTSV8yLCAgICAgICAgICBrU0lfU3RvcCwgICAgICAga1NJX1N0b3AsICAgICAgIGtTSV9TdG9wLAogICAgICAgIGtTSV9TdG9wLCAgICAgICBrU0lfU3RvcCwgICAgICAga1NJX1N0b3AsICAgICAgIGtTSV9TdG9wLAoKICAgICAgICAvLyAzCiAgICAgICAga1NJX1N0b3AsICAgICAgIGtTSV9TdG9wLCAgICAgICBrU0lfU3RvcCwgICAgICAga1NJXzcsCiAgICAgICAga1NJX1N0b3AsICAgICAgIGtTSV9TdG9wLCAgICAgICBrU0lfU3RvcCwgICAgICAga1NJX1N0b3AsCgogICAgICAgIC8vIDQKICAgICAgICBrU0lfMiwgICAgICAgICAga1NJX1N0b3AsICAgICAgIGtTSV9TdG9wLCAgICAgICBrU0lfU3RvcCwKICAgICAgICBrU0lfNCwgICAgICAgICAga1NJXzUsICAgICAgICAgIGtTSV82LCAgICAgICAgICBrU0lfU3RvcCwKCiAgICAgICAgLy8gNQogICAgICAgIGtTSV8yLCAgICAgICAgICBrU0lfU3RvcCwgICAgICAga1NJX1N0b3AsICAgICAgIGtTSV9TdG9wLAogICAgICAgIGtTSV9TdG9wLCAgICAgICBrU0lfNSwgICAgICAgICAga1NJXzYsICAgICAgICAgIGtTSV9TdG9wLAoKICAgICAgICAvLyA2CiAgICAgICAga1NJXzIsICAgICAgICAgIGtTSV9TdG9wLCAgICAgICBrU0lfU3RvcCwgICAgICAga1NJX1N0b3AsCiAgICAgICAga1NJX1N0b3AsICAgICAgIGtTSV9TdG9wLCAgICAgICBrU0lfNiwgICAgICAgICAga1NJX1N0b3AsCgogICAgICAgIC8vIDcKICAgICAgICBrU0lfU3RvcCwgICAgICAga1NJX1N0b3AsICAgICAgIGtTSV9TdG9wLCAgICAgICBrU0lfU3RvcCwKICAgICAgICBrU0lfU3RvcCwgICAgICAga1NJX1N0b3AsICAgICAgIGtTSV9TdG9wLCAgICAgICBrU0lfU3RvcAp9OwoKY29uc3QgaW50MzJfdCBUZXh0Qm91bmRhcnlEYXRhOjprQ2hhcmFjdGVyRm9yd2FyZERhdGFfbGVuZ3RoID0KICAgIHNpemVvZihUZXh0Qm91bmRhcnlEYXRhOjprQ2hhcmFjdGVyRm9yd2FyZERhdGEpIC8gc2l6ZW9mKFRleHRCb3VuZGFyeURhdGE6OmtDaGFyYWN0ZXJGb3J3YXJkRGF0YVswXSk7CgpXb3JkQnJlYWtUYWJsZSogVGV4dEJvdW5kYXJ5RGF0YTo6a0NoYXJhY3RlckZvcndhcmQgPSBuZXcgV29yZEJyZWFrVGFibGUoa0NoYXJhY3RlckNvbF9jb3VudCwga0NoYXJhY3RlckZvcndhcmREYXRhLCBrQ2hhcmFjdGVyRm9yd2FyZERhdGFfbGVuZ3RoKTsKCgovLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgovLwovLyAgICBEaWFncmFtIDIgOiB0aGUgYmFja3dhcmQgc3RhdGUgbWFjaGluZSBmb3IgYWNjZW50IGFuZCBiYXNlCi8vCi8vICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NlbnQKLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tCi8vICAgICAgICAgICAgYWNjZW50ICArLS0tLSsvICAgIFwKLy8gICAgICAgICAgIC0tLS0tLS0+IHxTSSsxfCAgICAgIHwKLy8gICAgICAgICAgLyAgICAgICAgICstLS0tKzwtLS0tLyAKLy8gICAgKy0tLS0rICAgICAgICAgICAgfCAgICAgICAgYmFzZSAgICAgICArLS0tLS0tLSsKLy8gMC0+fHN0b3B8ICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tPiB8U0lfc3RvcHwKLy8gICAgKy0tLS0rXC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiArLS0tLS0tLSsKLy8gICAgICAgICAgICAgICAgICAgICAgYmFzZSAgICAgICAKLy8KLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLy8gVGhlIGJhY2t3YXJkIHRyYW5zaXRpb24gc3RhdGVzIG9mIGNoYXJhY3RlciBib3VuZGFyeSBkYXRhLgpUZXh0Qm91bmRhcnlEYXRhOjpOb2RlIFRleHRCb3VuZGFyeURhdGE6OmtDaGFyYWN0ZXJCYWNrd2FyZERhdGFbXSA9IHsKICAgICAgICAvLyBhY2N0ICAgICAgICAgYmFzZSAgICAgICAgICAgIGNyICAgICAgICAgICAgICBsZgogICAgICAgIC8vIGNobyAgICAgICAgICBqdW5nICAgICAgICAgICAgam9uZyAgICAgICAgICAgIEVPUwogICAgICAgIGtTdG9wLCAgICAgICAgICBrU3RvcCwgICAgICAgICAga1N0b3AsICAgICAgICAgIGtTdG9wLAogICAgICAgIGtTdG9wLCAgICAgICAgICBrU3RvcCwgICAgICAgICAga1N0b3AsICAgICAgICAgIGtTdG9wLAoKICAgICAgICAvLyAxCiAgICAgICAga1NJXzEsICAgICAgICAgIGtTSV9TdG9wLCAgICAgICBrU0lfU3RvcCwgICAgICAga1NJXzEsCiAgICAgICAga1NJX1N0b3AsICAgICAgIGtTSV8xLCAgICAgICAgICBrU0lfMSwgICAgICAgICAga1NJX1N0b3AKfTsKCmNvbnN0IGludDMyX3QgVGV4dEJvdW5kYXJ5RGF0YTo6a0NoYXJhY3RlckJhY2t3YXJkRGF0YV9sZW5ndGggPQogICAgc2l6ZW9mKFRleHRCb3VuZGFyeURhdGE6OmtDaGFyYWN0ZXJCYWNrd2FyZERhdGEpIC8gc2l6ZW9mKFRleHRCb3VuZGFyeURhdGE6OmtDaGFyYWN0ZXJCYWNrd2FyZERhdGFbMF0pOwoKV29yZEJyZWFrVGFibGUqIFRleHRCb3VuZGFyeURhdGE6OmtDaGFyYWN0ZXJCYWNrd2FyZCA9IG5ldyBXb3JkQnJlYWtUYWJsZShrQ2hhcmFjdGVyQ29sX2NvdW50LCBrQ2hhcmFjdGVyQmFja3dhcmREYXRhLCBrQ2hhcmFjdGVyQmFja3dhcmREYXRhX2xlbmd0aCk7CgovLyBUaGUgY2hhcmFjdGVyIHR5cGUgbWFwcGluZyBvZiB0aGUgYnJlYWsgdGFibGUuClRleHRCb3VuZGFyeURhdGE6OlR5cGUgVGV4dEJvdW5kYXJ5RGF0YTo6a0NoYXJhY3RlclJhd01hcHBpbmdbXSA9IHsKICAgIC8vIFJlLWNvZGVkIHRvIG1hdGNoIFVuaWNvZGUgMiB0eXBlcyBbTElVXQogICAga0Jhc2VGb3JtLCAgICAgICAgICAvLyBVTkFTU0lHTkVEICAgICAgICAgICAgICAgPSAwLAogICAga0Jhc2VGb3JtLCAgICAgICAgICAvLyBVUFBFUkNBU0VfTEVUVEVSICAgICAgICAgPSAxLAogICAga0Jhc2VGb3JtLCAgICAgICAgICAvLyBMT1dFUkNBU0VfTEVUVEVSICAgICAgICAgPSAyLAogICAga0Jhc2VGb3JtLCAgICAgICAgICAvLyBUSVRMRUNBU0VfTEVUVEVSICAgICAgICAgPSAzLAogICAga0Jhc2VGb3JtLCAgICAgICAgICAvLyBNT0RJRklFUl9MRVRURVIgICAgICAgICAgPSA0LAogICAga0Jhc2VGb3JtLCAgICAgICAgICAvLyBPVEhFUl9MRVRURVIgICAgICAgICAgICAgPSA1LAogICAga0FjY2VudF9kaWFjcml0aWMsICAvLyBOT05fU1BBQ0lOR19NQVJLICAgICAgICAgPSA2LAogICAga0FjY2VudF9kaWFjcml0aWMsICAvLyBFTkNMT1NJTkdfTUFSSyAgICAgICAgICAgPSA3LAogICAga0Jhc2VGb3JtLCAgICAgICAgICAvLyBDT01CSU5JTkdfU1BBQ0lOR19NQVJLICAgPSA4LAogICAga0Jhc2VGb3JtLCAgICAgICAgICAvLyBERUNJTUFMX0RJR0lUX05VTUJFUiAgICAgPSA5LAogICAga0Jhc2VGb3JtLCAgICAgICAgICAvLyBMRVRURVJfTlVNQkVSICAgICAgICAgICAgPSAxMCwKICAgIGtCYXNlRm9ybSwgICAgICAgICAgLy8gT1RIRVJfTlVNQkVSICAgICAgICAgICAgID0gMTEsCiAgICBrQmFzZUZvcm0sICAgICAgICAgIC8vIFNQQUNFX1NFUEFSQVRPUiAgICAgICAgICA9IDEyLAogICAga0Jhc2VGb3JtLCAgICAgICAgICAvLyBMSU5FX1NFUEFSQVRPUiAgICAgICAgICAgPSAxMywKICAgIGtCYXNlRm9ybSwgICAgICAgICAgLy8gUEFSQUdSQVBIX1NFUEFSQVRPUiAgICAgID0gMTQsCiAgICBrQmFzZUZvcm0sICAgICAgICAgIC8vIENPTlRST0wgICAgICAgICAgICAgICAgICA9IDE1LAogICAga0Jhc2VGb3JtLCAgICAgICAgICAvLyBGT1JNQVQgICAgICAgICAgICAgICAgICAgPSAxNiwKICAgIGtCYXNlRm9ybSwgICAgICAgICAgLy8gUFJJVkFURV9VU0UgICAgICAgICAgICAgID0gMTcsCiAgICBrQmFzZUZvcm0sICAgICAgICAgIC8vIFNVUlJPR0FURSAgICAgICAgICAgICAgICA9IDE4LAogICAga0Jhc2VGb3JtLCAgICAgICAgICAvLyBEQVNIX1BVTkNUVUFUSU9OICAgICAgICAgPSAxOSwKICAgIGtCYXNlRm9ybSwgICAgICAgICAgLy8gU1RBUlRfUFVOQ1RVQVRJT04gICAgICAgID0gMjAsCiAgICBrQmFzZUZvcm0sICAgICAgICAgIC8vIEVORF9QVU5DVFVBVElPTiAgICAgICAgICA9IDIxLAogICAga0Jhc2VGb3JtLCAgICAgICAgICAvLyBDT05ORUNUT1JfUFVOQ1RVQVRJT04gICAgPSAyMiwKICAgIGtCYXNlRm9ybSwgICAgICAgICAgLy8gT1RIRVJfUFVOQ1RVQVRJT04gICAgICAgID0gMjMsCiAgICBrQmFzZUZvcm0sICAgICAgICAgIC8vIE1BVEhfU1lNQk9MICAgICAgICAgICAgICA9IDI0LAogICAga0Jhc2VGb3JtLCAgICAgICAgICAvLyBDVVJSRU5DWV9TWU1CT0wgICAgICAgICAgPSAyNSwKICAgIGtCYXNlRm9ybSwgICAgICAgICAgLy8gTU9ESUZJRVJfU1lNQk9MICAgICAgICAgID0gMjYsCiAgICBrQmFzZUZvcm0sICAgICAgICAgIC8vIE9USEVSX1NZTUJPTCAgICAgICAgICAgICA9IDI3LAogICAga0Jhc2VGb3JtICAgICAgICAgICAvLyBVTkRFRklORUQgICAgICAgICAgICAgICAgPSAyOAp9OwoKY29uc3QgaW50MzJfdCBUZXh0Qm91bmRhcnlEYXRhOjprQ2hhcmFjdGVyUmF3TWFwcGluZ19sZW5ndGggPQogICAgc2l6ZW9mKFRleHRCb3VuZGFyeURhdGE6OmtDaGFyYWN0ZXJSYXdNYXBwaW5nKSAvIHNpemVvZihUZXh0Qm91bmRhcnlEYXRhOjprQ2hhcmFjdGVyUmF3TWFwcGluZ1swXSk7CgpTcGVjaWFsTWFwcGluZyBUZXh0Qm91bmRhcnlEYXRhOjprQ2hhcmFjdGVyRXhjZXB0aW9uQ2hhcltdID0gewogICAgICAgIFNwZWNpYWxNYXBwaW5nKFRleHRCb3VuZGFyeURhdGE6OkFTQ0lJX0xJTkVGRUVELCBUZXh0Qm91bmRhcnlEYXRhOjprQmFzZUxGKSwKICAgICAgICBTcGVjaWFsTWFwcGluZyhUZXh0Qm91bmRhcnlEYXRhOjpBU0NJSV9DQVJSSUFHRV9SRVRVUk4sIFRleHRCb3VuZGFyeURhdGE6OmtCYXNlQ1IpLAogICAgICAgIFNwZWNpYWxNYXBwaW5nKFRleHRCb3VuZGFyeURhdGE6OkhBTkdVTF9DSE9TRU9OR19MT1csIFRleHRCb3VuZGFyeURhdGE6OkhBTkdVTF9DSE9TRU9OR19ISUdILCBUZXh0Qm91bmRhcnlEYXRhOjprQ2hvc2VvbmcpLAogICAgICAgIFNwZWNpYWxNYXBwaW5nKFRleHRCb3VuZGFyeURhdGE6OkhBTkdVTF9KVU5HU0VPTkdfTE9XLCBUZXh0Qm91bmRhcnlEYXRhOjpIQU5HVUxfSlVOR1NFT05HX0hJR0gsIFRleHRCb3VuZGFyeURhdGE6OmtKdW5nc2VvbmcpLAogICAgICAgIFNwZWNpYWxNYXBwaW5nKFRleHRCb3VuZGFyeURhdGE6OkhBTkdVTF9KT05HU0VPTkdfTE9XLCBUZXh0Qm91bmRhcnlEYXRhOjpIQU5HVUxfSk9OR1NFT05HX0hJR0gsIFRleHRCb3VuZGFyeURhdGE6OmtKb25nc2VvbmcpLAogICAgICAgIFNwZWNpYWxNYXBwaW5nKFRleHRCb3VuZGFyeURhdGE6OlBVTkNUVUFUSU9OX0xJTkVfU0VQQVJBVE9SLCBUZXh0Qm91bmRhcnlEYXRhOjpQVU5DVFVBVElPTl9QQVJBR1JBUEhfU0VQQVJBVE9SLCBUZXh0Qm91bmRhcnlEYXRhOjprQmFzZUxGKSwKICAgICAgICBTcGVjaWFsTWFwcGluZyhUZXh0Qm91bmRhcnlEYXRhOjpFTkRfT0ZfU1RSSU5HLCBUZXh0Qm91bmRhcnlEYXRhOjprRU9TKQp9OwoKY29uc3QgaW50MzJfdCBUZXh0Qm91bmRhcnlEYXRhOjprQ2hhcmFjdGVyRXhjZXB0aW9uQ2hhcl9sZW5ndGggPSAKICAgIHNpemVvZihUZXh0Qm91bmRhcnlEYXRhOjprQ2hhcmFjdGVyRXhjZXB0aW9uQ2hhcikgLyBzaXplb2YoVGV4dEJvdW5kYXJ5RGF0YTo6a0NoYXJhY3RlckV4Y2VwdGlvbkNoYXJbMF0pOwoKY29uc3QgVUJvb2wgVGV4dEJvdW5kYXJ5RGF0YTo6a0NoYXJhY3RlckV4Y2VwdGlvbkZsYWdzW10gPSB7CiAgICAgICAgRkFMU0UsICAgICAgICAgIC8vIGtOb25DaGFyYWN0ZXIgICAgICAgICAgICA9IDAsCiAgICAgICAgRkFMU0UsICAgICAgICAgIC8vIGtVcHBlcmNhc2VMZXR0ZXIgICAgICAgICA9IDEsCiAgICAgICAgRkFMU0UsICAgICAgICAgIC8vIGtMb3dlcmNhc2VMZXR0ZXIgICAgICAgICA9IDIsCiAgICAgICAgRkFMU0UsICAgICAgICAgIC8vIGtUaXRsZWNhc2VMZXR0ZXIgICAgICAgICA9IDMsCiAgICAgICAgRkFMU0UsICAgICAgICAgIC8vIGtNb2RpZmllckxldHRlciAgICAgICAgICA9IDQsCiAgICAgICAgVFJVRSwgICAgICAgICAgIC8vIGtPdGhlckxldHRlciAgICAgICAgICAgICA9IDUsCiAgICAgICAgRkFMU0UsICAgICAgICAgIC8vIGtOb25TcGFjaW5nTWFyayAgICAgICAgICA9IDYsCiAgICAgICAgRkFMU0UsICAgICAgICAgIC8vIGtFbmNsb3NpbmdNYXJrICAgICAgICAgICA9IDcsCiAgICAgICAgRkFMU0UsICAgICAgICAgIC8vIGtDb21iaW5pbmdTcGFjaW5nTWFyayAgICA9IDgsCiAgICAgICAgRkFMU0UsICAgICAgICAgIC8vIGtEZWNpbWFsTnVtYmVyICAgICAgICAgICA9IDksCiAgICAgICAgRkFMU0UsICAgICAgICAgIC8vIGtMZXR0ZXJOdW1iZXIgICAgICAgICAgICA9IDEwLAogICAgICAgIEZBTFNFLCAgICAgICAgICAvLyBrT3RoZXJOdW1iZXIgICAgICAgICAgICAgPSAxMSwKICAgICAgICBGQUxTRSwgICAgICAgICAgLy8ga1NwYWNlU2VwYXJhdG9yICAgICAgICAgID0gMTIsCiAgICAgICAgVFJVRSwgICAgICAgICAgIC8vIGtMaW5lU2VwYXJhdG9yICAgICAgICAgICA9IDEzLAogICAgICAgIFRSVUUsICAgICAgICAgICAvLyBrUGFyYWdyYXBoU2VwYXJhdG9yICAgICAgPSAxNCwKICAgICAgICBUUlVFLCAgICAgICAgICAgLy8ga0NvbnRyb2xDaGFyYWN0ZXIgICAgICAgID0gMTUsCiAgICAgICAgRkFMU0UsICAgICAgICAgIC8vIGtGb3JtYXRDaGFyYWN0ZXIgICAgICAgICA9IDE2LAogICAgICAgIEZBTFNFLCAgICAgICAgICAvLyBrUHJpdmF0ZVVzZUNoYXJhY3RlciAgICAgPSAxNywKICAgICAgICBGQUxTRSwgICAgICAgICAgLy8ga1N1cnJvZ2F0ZSAgICAgICAgICAgICAgID0gMTgsCiAgICAgICAgRkFMU0UsICAgICAgICAgIC8vIGtEYXNoUHVuY3R1YXRpb24gICAgICAgICA9IDE5LAogICAgICAgIEZBTFNFLCAgICAgICAgICAvLyBrT3BlblB1bmN0dWF0aW9uICAgICAgICAgPSAyMCwKICAgICAgICBGQUxTRSwgICAgICAgICAgLy8ga0Nsb3NlUHVuY3R1YXRpb24gICAgICAgID0gMjEsCiAgICAgICAgRkFMU0UsICAgICAgICAgIC8vIGtDb25uZWN0b3JQdW5jdHVhdGlvbiAgICA9IDIyLAogICAgICAgIEZBTFNFLCAgICAgICAgICAvLyBrT3RoZXJQdW5jdHVhdGlvbiAgICAgICAgPSAyMywKICAgICAgICBGQUxTRSwgICAgICAgICAgLy8ga01hdGhTeW1ib2wgICAgICAgICAgICAgID0gMjQsCiAgICAgICAgRkFMU0UsICAgICAgICAgIC8vIGtDdXJyZW5jeVN5bWJvbCAgICAgICAgICA9IDI1LAogICAgICAgIEZBTFNFLCAgICAgICAgICAvLyBrTW9kaWZpZXJTeW1ib2wgICAgICAgICAgPSAyNiwKICAgICAgICBGQUxTRSwgICAgICAgICAgLy8ga090aGVyU3ltYm9sICAgICAgICAgICAgID0gMjcKICAgICAgICBGQUxTRSAgICAgICAgICAgLy8gVU5ERUZJTkVEICAgICAgICAgICAgICAgID0gMjgsCiAgICB9OwoKVGV4dEJvdW5kYXJ5RGF0YTo6VHlwZSBUZXh0Qm91bmRhcnlEYXRhOjprQ2hhcmFjdGVyQXNjaWlWYWx1ZXNbXSA9IHsKICAgICAgICAvLyAgbnVsbCAgICAgICBzb2ggICAgICAgIHN0eCAgICAgICAgZXR4ICAgICAgICBlb3QgICAgICAgIGVucSAgICAgICAgYXNrICAgICAgICBiZWxsCiAgICAgICAgICAgIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLAogICAgICAgIC8vICBicyAgICAgICAgIGh0ICAgICAgICAgbGYgICAgICAgICB2dCAgICAgICAgIGZmICAgICAgICAgY3IgICAgICAgICBzbyAgICAgICAgIHNpCiAgICAgICAgICAgIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUxGLCAgIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUNSLCAgIGtCYXNlRm9ybSwga0Jhc2VGb3JtLAogICAgICAgIC8vICBkbGUgICAgICAgIGRjMSAgICAgICAgZGMyICAgICAgICBkYzMgICAgICAgIGRjNCAgICAgICAgbmFrICAgICAgICBzeW4gICAgICAgIGV0YgogICAgICAgICAgICBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwKICAgICAgICAvLyAgY2FuICAgICAgICBlbSAgICAgICAgIHN1YiAgICAgICAgZXNjICAgICAgICBmcyAgICAgICAgIGdzICAgICAgICAgcnMgICAgICAgICB1cwogICAgICAgICAgICBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwKICAgICAgICAvLyAgc3AgICAgICAgICAhICAgICAgICAgICIgICAgICAgICAgIyAgICAgICAgICAkICAgICAgICAgICUgICAgICAgICAgJiAgICAgICAgICAnCiAgICAgICAgICAgIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLAogICAgICAgIC8vICAoICAgICAgICAgICkgICAgICAgICAgKiAgICAgICAgICArICAgICAgICAgICwgICAgICAgICAgLSAgICAgICAgICAuICAgICAgICAgIC8KICAgICAgICAgICAga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sCiAgICAgICAgLy8gIDAgICAgICAgICAgMSAgICAgICAgICAyICAgICAgICAgIDMgICAgICAgICAgNCAgICAgICAgICA1ICAgICAgICAgIDYgICAgICAgICAgNwogICAgICAgICAgICBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwKICAgICAgICAvLyAgOCAgICAgICAgICA5ICAgICAgICAgIDogICAgICAgICAgOyAgICAgICAgICA8ICAgICAgICAgID0gICAgICAgICAgPiAgICAgICAgICA/CiAgICAgICAgICAgIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLAogICAgICAgIC8vICBAICAgICAgICAgIEEgICAgICAgICAgQiAgICAgICAgICBDICAgICAgICAgIEQgICAgICAgICAgRSAgICAgICAgICBGICAgICAgICAgIEcKICAgICAgICAgICAga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sCiAgICAgICAgLy8gIEggICAgICAgICAgSSAgICAgICAgICBKICAgICAgICAgIEsgICAgICAgICAgTCAgICAgICAgICBNICAgICAgICAgIE4gICAgICAgICAgTwogICAgICAgICAgICBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwKICAgICAgICAvLyAgUCAgICAgICAgICBRICAgICAgICAgIFIgICAgICAgICAgUyAgICAgICAgICBUICAgICAgICAgIFUgICAgICAgICAgViAgICAgICAgICBXCiAgICAgICAgICAgIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLAogICAgICAgIC8vICBYICAgICAgICAgIFkgICAgICAgICAgWiAgICAgICAgICBbICAgICAgICAgIFwgICAgICAgICAgXSAgICAgICAgICBeICAgICAgICAgIF8KICAgICAgICAgICAga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sCiAgICAgICAgLy8gIGAgICAgICAgICAgYSAgICAgICAgICBiICAgICAgICAgIGMgICAgICAgICAgZCAgICAgICAgICBlICAgICAgICAgIGYgICAgICAgICAgZwogICAgICAgICAgICBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwKICAgICAgICAvLyAgaCAgICAgICAgICBpICAgICAgICAgIGogICAgICAgICAgayAgICAgICAgICBsICAgICAgICAgIG0gICAgICAgICAgbiAgICAgICAgICBvCiAgICAgICAgICAgIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLAogICAgICAgIC8vICBwICAgICAgICAgIHEgICAgICAgICAgciAgICAgICAgICBzICAgICAgICAgIHQgICAgICAgICAgdSAgICAgICAgICB2ICAgICAgICAgIHcKICAgICAgICAgICAga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sCiAgICAgICAgLy8gIHggICAgICAgICAgeSAgICAgICAgICB6ICAgICAgICAgIHsgICAgICAgICAgfCAgICAgICAgICB9ICAgICAgICAgIH4gICAgICAgICAgZGVsCiAgICAgICAgICAgIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLAogICAgICAgIC8vICBjdHJsICAgICAgIGN0cmwgICAgICAgY3RybCAgICAgICBjdHJsICAgICAgIGN0cmwgICAgICAgY3RybCAgICAgICBjdHJsICAgICAgIGN0cmwKICAgICAgICAgICAga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sCiAgICAgICAgLy8gIGN0cmwgICAgICAgY3RybCAgICAgICBjdHJsICAgICAgIGN0cmwgICAgICAgY3RybCAgICAgICBjdHJsICAgICAgIGN0cmwgICAgICAgY3RybAogICAgICAgICAgICBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwKICAgICAgICAvLyAgY3RybCAgICAgICBjdHJsICAgICAgIGN0cmwgICAgICAgY3RybCAgICAgICBjdHJsICAgICAgIGN0cmwgICAgICAgY3RybCAgICAgICBjdHJsCiAgICAgICAgICAgIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLAogICAgICAgIC8vICBjdHJsICAgICAgIGN0cmwgICAgICAgY3RybCAgICAgICBjdHJsICAgICAgIGN0cmwgICAgICAgY3RybCAgICAgICBjdHJsICAgICAgIGN0cmwKICAgICAgICAgICAga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sCiAgICAgICAgLy8gIG5ic3AgICAgICAgoSAgICAgICAgICCiICAgICAgICAgIKMgICAgICAgICAgpCAgICAgICAgICClICAgICAgICAgIKYKICAgICAgICAgICAga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sCiAgICAgICAgLy8gIKggICAgICAgICAgqSAgICAgICAgICCqICAgICAgICAgIKsgICAgICAgICAgrCAgICAgICAgICCtICAgICAgICAgIK4gICAgICAgICAgrwogICAgICAgICAgICBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwKICAgICAgICAvLyAgsCAgICAgICAgICCxICAgICAgICAgILIgICAgICAgICAgsyAgICAgICAgICC0ICAgICAgICAgILUgICAgICAgICAgtiAgICAgICAgICC3CiAgICAgICAgICAgIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLAogICAgICAgIC8vICC4ICAgICAgICAgILkgICAgICAgICAguiAgICAgICAgICC7ICAgICAgICAgILwgICAgICAgICAgvSAgICAgICAgICC+ICAgICAgICAgIL8KICAgICAgICAgICAga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sCiAgICAgICAgLy8gIMAgICAgICAgICAgwSAgICAgICAgICDCICAgICAgICAgIMMgICAgICAgICAgxCAgICAgICAgICDFICAgICAgICAgIMYgICAgICAgICAgxwogICAgICAgICAgICBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwKICAgICAgICAvLyAgyCAgICAgICAgICDJICAgICAgICAgIMogICAgICAgICAgyyAgICAgICAgICDMICAgICAgICAgIM0gICAgICAgICAgziAgICAgICAgICDPCiAgICAgICAgICAgIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLAogICAgICAgIC8vICDQICAgICAgICAgINEgICAgICAgICAg0iAgICAgICAgICDTICAgICAgICAgINQgICAgICAgICAg1SAgICAgICAgICDWICAgICAgICAgINcKICAgICAgICAgICAga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sCiAgICAgICAgLy8gINggICAgICAgICAg2SAgICAgICAgICDaICAgICAgICAgINsgICAgICAgICAg3CAgICAgICAgICDdICAgICAgICAgIN4gICAgICAgICAg3wogICAgICAgICAgICBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwKICAgICAgICAvLyAg4CAgICAgICAgICDhICAgICAgICAgIOIgICAgICAgICAg4yAgICAgICAgICDkICAgICAgICAgIOUgICAgICAgICAg5iAgICAgICAgICDnCiAgICAgICAgICAgIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLAogICAgICAgIC8vICDoICAgICAgICAgIOkgICAgICAgICAg6iAgICAgICAgICDrICAgICAgICAgIOwgICAgICAgICAg7SAgICAgICAgICDuICAgICAgICAgIO8KICAgICAgICAgICAga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sCiAgICAgICAgLy8gIPAgICAgICAgICAg8SAgICAgICAgICDyICAgICAgICAgIPMgICAgICAgICAg9CAgICAgICAgICD1ICAgICAgICAgIPYgICAgICAgICAg9wogICAgICAgICAgICBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwKICAgICAgICAvLyAg+CAgICAgICAgICD5ICAgICAgICAgIPogICAgICAgICAg+yAgICAgICAgICD8ICAgICAgICAgIP0gICAgICAgICAg/iAgICAgICAgICD/CiAgICAgICAgICAgIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtCn07CgoKClVuaWNvZGVDbGFzc01hcHBpbmcqIFRleHRCb3VuZGFyeURhdGE6OmtDaGFyYWN0ZXJNYXAgPSAKICAgIG5ldyBVbmljb2RlQ2xhc3NNYXBwaW5nKGtDaGFyYWN0ZXJSYXdNYXBwaW5nLCBrQ2hhcmFjdGVyUmF3TWFwcGluZ19sZW5ndGgsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAga0NoYXJhY3RlckV4Y2VwdGlvbkNoYXIsIGtDaGFyYWN0ZXJFeGNlcHRpb25DaGFyX2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDaGFyYWN0ZXJFeGNlcHRpb25GbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDaGFyYWN0ZXJBc2NpaVZhbHVlcyApOwoKLyoqCiAqIFRoaXMgaXMgdGhlIHNpbmdsZSBpbnN0YW5jZSBvZiBUZXh0Qm91bmRhcnlEYXRhIGNvbnRhaW5pbmcgY2hhcmFjdGVyCiAqIGJyZWFrIGRhdGEuCiAqLwpjb25zdCBUZXh0Qm91bmRhcnlEYXRhIFRleHRCb3VuZGFyeURhdGE6OmtDaGFyYWN0ZXJCcmVha0RhdGEoVGV4dEJvdW5kYXJ5RGF0YTo6a0NoYXJhY3RlckZvcndhcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0Qm91bmRhcnlEYXRhOjprQ2hhcmFjdGVyQmFja3dhcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0Qm91bmRhcnlEYXRhOjprQ2hhcmFjdGVyTWFwKTsKCi8vZW9mCg==