<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>175275</bug_id>
          
          <creation_ts>2017-08-07 11:28:48 -0700</creation_ts>
          <short_desc>[Win] Detect Visual Studio 2017 location</short_desc>
          <delta_ts>2017-11-15 13:11:50 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>175279</dependson>
    
    <dependson>179091</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Don Olmstead">don.olmstead</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>fujii</cc>
    
    <cc>lforschler</cc>
    
    <cc>pvollan</cc>
    
    <cc>stephan.szabo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1336054</commentid>
    <comment_count>0</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2017-08-07 11:28:48 -0700</bug_when>
    <thetext>Currently the build scripts try to find a Visual Studio install through a standard location. With Visual Studio 2017 there is now a way to detect where a VS install is. This is similar in concept to xcode-select.

At present the build scripts look for the standard location of VS Community Edition. There is also a build tools variant that does not install the IDE which is what we&apos;re using for our WinCairo buildbot and will not be picked up at that location.

Information on how to find a VS install is documented at https://blogs.msdn.microsoft.com/vcblog/2017/03/06/finding-the-visual-c-compiler-tools-in-visual-studio-2017/. One option is a redistributable executable vswhere, whose source is MIT licensed and available at https://github.com/Microsoft/vswhere. Checking in a built version of this executable is probably the easiest way forward.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1336090</commentid>
    <comment_count>1</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2017-08-07 12:53:40 -0700</bug_when>
    <thetext>After talking to Brent on IRC it seems like the safest bet is to actually go and download the vswhere executable during the build and then running that. Executables are built and distributed through GitHub releases so that should be used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343988</commentid>
    <comment_count>2</comment_count>
      <attachid>319477</attachid>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2017-08-31 10:42:07 -0700</bug_when>
    <thetext>Created attachment 319477
[WIP] Use vswhere to determine visual studio location

Work in progress patch for grabbing vswhere and using it in webkitdirs for getting the install dir, version and msbuild location.

vswhere is limited with its handling of &quot;legacy&quot; pre-2017 versions, as you get a subset of data for those and cannot search by product or requirements, but it will give you a version and install dir.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344212</commentid>
    <comment_count>3</comment_count>
      <attachid>319545</attachid>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2017-08-31 17:12:43 -0700</bug_when>
    <thetext>Created attachment 319545
[WIP] Use vswhere to determine visual studio location

Update to WIP vswhere patch with encoding changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1346862</commentid>
    <comment_count>4</comment_count>
      <attachid>320278</attachid>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2017-09-08 10:56:11 -0700</bug_when>
    <thetext>Created attachment 320278
Use vswhere to determine visual studio location

Now for 2017, will check without products after trying each prioritized product for any other installation that provides MSBuild.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1346916</commentid>
    <comment_count>5</comment_count>
      <attachid>320291</attachid>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2017-09-08 12:52:45 -0700</bug_when>
    <thetext>Created attachment 320291
Use vswhere to determine visual studio location

Updating vswhere for isAnyWindows rather than in wincairo block.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348388</commentid>
    <comment_count>6</comment_count>
      <attachid>320661</attachid>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2017-09-13 11:22:32 -0700</bug_when>
    <thetext>Created attachment 320661
Use vswhere to determine visual studio location

Added chmod to update-vswhere script in order to allow execution when downloaded from Cygwin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1359641</commentid>
    <comment_count>7</comment_count>
      <attachid>323538</attachid>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2017-10-12 11:14:24 -0700</bug_when>
    <thetext>Created attachment 323538
Use vswhere to determine visual studio location

Update for changes to webkitdirs.pm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360674</commentid>
    <comment_count>8</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2017-10-15 22:40:01 -0700</bug_when>
    <thetext>You use unnecessary single-quote like:

&gt; $vsWhereFoundInstallation-&gt;{&apos;shortVersion&apos;}

But, other codes in webkitdirs.pm look like:

&gt; $device-&gt;{state}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360834</commentid>
    <comment_count>9</comment_count>
      <attachid>323909</attachid>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2017-10-16 11:05:14 -0700</bug_when>
    <thetext>Created attachment 323909
Use vswhere to determine visual studio location - 2017 only</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360908</commentid>
    <comment_count>10</comment_count>
      <attachid>323930</attachid>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2017-10-16 12:57:25 -0700</bug_when>
    <thetext>Created attachment 323930
Use vswhere to determine visual studio location - choose generator</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360987</commentid>
    <comment_count>11</comment_count>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2017-10-16 15:50:39 -0700</bug_when>
    <thetext>Choose generator patch should pick the 2015 or 2017 generator to cmake based on the version of visual studio found by vswhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1361265</commentid>
    <comment_count>12</comment_count>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2017-10-17 09:38:10 -0700</bug_when>
    <thetext>I have tested the latest patch, and it seems my old MSBuild is being used:

Using Visual Studio: /cygdrive/c/Program Files (x86)/Microsoft Visual Studio/2017/Community
Using Visual Studio 15.3

Using MSBuild: /cygdrive/c/Program Files (x86)/MSBuild/14.0/Bin

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.Cpp.Platform.targets(57,5): error MSB8020: The build tools for v141 (Platform Toolset = &apos;v141&apos;) cannot be found. To build using the v141 build tools, please install v141 build tools.  Alternatively, you may upgrade to the current Visual Studio tools by selecting the Project menu or right-click the solution, and then selecting &quot;Retarget solution&quot;. [C:\Projects\WebKit3\OpenSource\WebKitBuild\Release\ZERO_CHECK.vcxproj]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1361275</commentid>
    <comment_count>13</comment_count>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2017-10-17 09:56:25 -0700</bug_when>
    <thetext>VSWhere thinks MSBuild is located in:

C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/MSBuild/15.3/Bin

but it seems to be located in:

C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/MSBuild/15.0/Bin</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1361320</commentid>
    <comment_count>14</comment_count>
      <attachid>324032</attachid>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2017-10-17 11:19:12 -0700</bug_when>
    <thetext>Created attachment 324032
Use vswhere to determine visual studio location - choose generator

MSBuild path can use major.0 rather than major.minor, so check for both options.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1363461</commentid>
    <comment_count>15</comment_count>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2017-10-23 16:45:28 -0700</bug_when>
    <thetext>(In reply to Stephan Szabo from comment #14)
&gt; Created attachment 324032 [details]
&gt; Use vswhere to determine visual studio location - choose generator
&gt; 
&gt; MSBuild path can use major.0 rather than major.minor, so check for both
&gt; options.

Yes, that fixed the problem I had :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1364648</commentid>
    <comment_count>16</comment_count>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2017-10-25 20:09:36 -0700</bug_when>
    <thetext>Do we have a fallback in case we for some reason were unable to download vswhere?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1364910</commentid>
    <comment_count>17</comment_count>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2017-10-26 10:55:24 -0700</bug_when>
    <thetext>Currently, there isn&apos;t one as the build-jsc and build-webkit scripts have a &quot;or die&quot; on the update lines.

Without dying there, the webkitdirs.pm functions should (and appear to) fall back to the older 2015 constant values if vswhere is missing, with some noise about being unable to run it and being unable to get the location.

So, it seems like we could relax the &quot;or die&quot;. Although we might then want to have the 2017/community fallback back in as well?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1364935</commentid>
    <comment_count>18</comment_count>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2017-10-26 11:37:01 -0700</bug_when>
    <thetext>(In reply to Stephan Szabo from comment #17)
&gt; Currently, there isn&apos;t one as the build-jsc and build-webkit scripts have a
&gt; &quot;or die&quot; on the update lines.
&gt; 
&gt; Without dying there, the webkitdirs.pm functions should (and appear to) fall
&gt; back to the older 2015 constant values if vswhere is missing, with some
&gt; noise about being unable to run it and being unable to get the location.
&gt; 
&gt; So, it seems like we could relax the &quot;or die&quot;. Although we might then want
&gt; to have the 2017/community fallback back in as well?

Yes, I think we could have a fallback to 2017/community also.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1365064</commentid>
    <comment_count>19</comment_count>
      <attachid>325068</attachid>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2017-10-26 15:52:36 -0700</bug_when>
    <thetext>Created attachment 325068
Alternate patch for getting visual studio location w/vswhere

Putting this up to check happiness on bots (w/2015), it&apos;s an alternate version which should be more resilient to failing to get vswhere.

It checks the location in your environment if it&apos;s there, then uses vswhere for each 2017 and then 2015, then tries a default location for each 2017 (like the old community one but for each) then 2015.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1365217</commentid>
    <comment_count>20</comment_count>
      <attachid>325105</attachid>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2017-10-26 20:02:46 -0700</bug_when>
    <thetext>Created attachment 325105
Use vswhere to determine visual studio location

After discussion, add the 2017 fallbacks to the original patch version.

While testing noticed that if you had VSINSTALLDIR set to a 2015 version, you&apos;d still potentially get a 2017 msbuild location and version if vswhere found that (while leaving the install dir pointing to 2015). Similarly, if you had it pointed to a 2017 install and did not have vswhere available, you&apos;d get version 14 because it didn&apos;t handle the directory format. This version tries to make it consistent when using VSINSTALLDIR from the environment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1365371</commentid>
    <comment_count>21</comment_count>
      <attachid>325105</attachid>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2017-10-27 09:07:55 -0700</bug_when>
    <thetext>Comment on attachment 325105
Use vswhere to determine visual studio location

View in context: https://bugs.webkit.org/attachment.cgi?id=325105&amp;action=review

&gt; Tools/Scripts/webkitdirs.pm:824
&gt;  sub visualStudioVersion
&gt;  {
&gt;      return $vsVersion if defined $vsVersion;
&gt;  
&gt; -    my $installDir = visualStudioInstallDir();
&gt; +    if ($ENV{&apos;VSINSTALLDIR&apos;}) {
&gt; +        $vsVersion = visualStudioVersionFromInstallDir($ENV{&apos;VSINSTALLDIR&apos;});
&gt; +    }
&gt;  
&gt; -    $vsVersion = ($installDir =~ /Microsoft Visual Studio ([0-9]+\.[0-9]*)/) ? $1 : &quot;14&quot;;
&gt; +    if (!defined($vsVersion)) {
&gt; +        pickCurrentVisualStudioInstallation();
&gt; +        if (defined($vsWhereFoundInstallation)) {
&gt; +            $vsVersion = $vsWhereFoundInstallation-&gt;{shortVersion};
&gt; +        }
&gt; +    }
&gt; +
&gt; +    if (!defined($vsVersion)) {
&gt; +        pickLegacyVisualStudioInstallation();
&gt; +        if (defined($vsWhereLegacyInstallation)) {
&gt; +            $vsVersion = $vsWhereLegacyInstallation-&gt;{shortVersion};
&gt; +        }
&gt; +    }
&gt; +
&gt; +    if (!defined($vsVersion)) {
&gt; +        my $installDir = visualStudioInstallDir();
&gt; +        $vsVersion = visualStudioVersionFromInstallDir($installDir);
&gt; +    }
&gt; +
&gt; +    if (!defined($vsVersion)) {
&gt; +        $vsVersion = &quot;14&quot;;
&gt; +    }
&gt;  

Could we implement the function visualStudioVersion as

sub visualStudioVersion
{
    return $vsVersion if defined $vsVersion;

    $installDir = visualStudioInstallDir();
    $vsVersion = visualStudioVersionFromInstallDir($installDir);

    print &quot;Using Visual Studio $vsVersion\n&quot;;
    return $vsVersion;
}

since much of this logic is already implemented in the function visualStudioInstallDir?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1365417</commentid>
    <comment_count>22</comment_count>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2017-10-27 10:27:02 -0700</bug_when>
    <thetext>I wasn&apos;t sure if it&apos;s safe for us to assume that if we get an install directory from an install found by vswhere that it&apos;ll be in one of the formats that we can parse a version out of.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1365438</commentid>
    <comment_count>23</comment_count>
      <attachid>325179</attachid>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2017-10-27 10:52:00 -0700</bug_when>
    <thetext>Created attachment 325179
Use vswhere to determine visual studio location - simplified

A version of the patch that gets the version from the directory only and similarly simplifies out the msbuild location to just use the version to pick one of the two formats.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1365457</commentid>
    <comment_count>24</comment_count>
      <attachid>325179</attachid>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2017-10-27 12:02:26 -0700</bug_when>
    <thetext>Comment on attachment 325179
Use vswhere to determine visual studio location - simplified

View in context: https://bugs.webkit.org/attachment.cgi?id=325179&amp;action=review

&gt; Tools/Scripts/update-vswhere.py:40
&gt; +if result == download.Status.COULD_NOT_FIND:
&gt; +    sys.exit(1)

Are there other results that might indicate an error?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1365500</commentid>
    <comment_count>25</comment_count>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2017-10-27 14:12:32 -0700</bug_when>
    <thetext>The status defined in download-latest-github-release seem to be
    DOWNLOADED = 0
    UP_TO_DATE = 1
    COULD_NOT_FIND = 2

It could fail for other reasons but what I have seen of those appear to come back as raised errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1365545</commentid>
    <comment_count>26</comment_count>
      <attachid>325206</attachid>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2017-10-27 15:25:29 -0700</bug_when>
    <thetext>Created attachment 325206
Use vswhere to determine visual studio location - removed unneeded numeric conversions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1365560</commentid>
    <comment_count>27</comment_count>
      <attachid>325206</attachid>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2017-10-27 15:58:01 -0700</bug_when>
    <thetext>Comment on attachment 325206
Use vswhere to determine visual studio location - removed unneeded numeric conversions

Thanks, looks good! R=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1365648</commentid>
    <comment_count>28</comment_count>
      <attachid>325206</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-27 20:49:13 -0700</bug_when>
    <thetext>Comment on attachment 325206
Use vswhere to determine visual studio location - removed unneeded numeric conversions

Clearing flags on attachment: 325206

Committed r224143: &lt;https://trac.webkit.org/changeset/224143&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1365649</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-27 20:49:15 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1365772</commentid>
    <comment_count>30</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2017-10-28 16:54:55 -0700</bug_when>
    <thetext>*** Bug 178327 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1366168</commentid>
    <comment_count>31</comment_count>
    <who name="Lucas Forschler">lforschler</who>
    <bug_when>2017-10-30 13:59:14 -0700</bug_when>
    <thetext>Note: this broke webkitbot and WKR, as the perl libraries added in webkitdirs.pm were not installed (I have fixed the WKR/WebKitBot nodes)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1366327</commentid>
    <comment_count>32</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-10-30 22:40:58 -0700</bug_when>
    <thetext>(In reply to Lucas Forschler from comment #31)
&gt; Note: this broke webkitbot and WKR, as the perl libraries added in
&gt; webkitdirs.pm were not installed (I have fixed the WKR/WebKitBot nodes)

Yeah, it includes Encode/Locale, which is not bundled in macOS standard perl.
https://github.com/mozilla/arewefastyet/issues/182</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1366386</commentid>
    <comment_count>33</comment_count>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2017-10-31 07:48:22 -0700</bug_when>
    <thetext>(In reply to Lucas Forschler from comment #31)
&gt; Note: this broke webkitbot and WKR, as the perl libraries added in
&gt; webkitdirs.pm were not installed (I have fixed the WKR/WebKitBot nodes)

Thanks for fixing this, Lucas!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1366680</commentid>
    <comment_count>34</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-10-31 16:55:22 -0700</bug_when>
    <thetext>Could you remove these dependencies in build-webkit/build-jsc in macOS?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1366694</commentid>
    <comment_count>35</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-31 17:26:14 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 179091</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1366913</commentid>
    <comment_count>36</comment_count>
      <attachid>325591</attachid>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2017-11-01 10:55:14 -0700</bug_when>
    <thetext>Created attachment 325591
Use vswhere to determine visual studio location - make new modules require only in new paths

Move the three new modules as requires in the vswhere code paths so they shouldn&apos;t be loaded except when trying to find visual studio.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1366923</commentid>
    <comment_count>37</comment_count>
      <attachid>325591</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-11-01 11:05:01 -0700</bug_when>
    <thetext>Comment on attachment 325591
Use vswhere to determine visual studio location - make new modules require only in new paths

View in context: https://bugs.webkit.org/attachment.cgi?id=325591&amp;action=review

&gt; Tools/Scripts/webkitdirs.pm:600
&gt; +    require Encode;
&gt; +    require Encode::Locale;
&gt; +    require JSON::PP;

Let&apos;s extract this part to a subroutine.

&gt; Tools/Scripts/webkitdirs.pm:639
&gt; +    require Encode;
&gt; +    require Encode::Locale;
&gt; +    require JSON::PP;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1366936</commentid>
    <comment_count>38</comment_count>
      <attachid>325598</attachid>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2017-11-01 11:23:19 -0700</bug_when>
    <thetext>Created attachment 325598
Use vswhere to determine visual studio location - move requires into sub</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1367023</commentid>
    <comment_count>39</comment_count>
      <attachid>325598</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-11-01 13:44:58 -0700</bug_when>
    <thetext>Comment on attachment 325598
Use vswhere to determine visual studio location - move requires into sub

Clearing flags on attachment: 325598

Committed r224291: &lt;https://trac.webkit.org/changeset/224291&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1372400</commentid>
    <comment_count>40</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-11-15 13:11:50 -0800</bug_when>
    <thetext>&lt;rdar://problem/35568974&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319477</attachid>
            <date>2017-08-31 10:42:07 -0700</date>
            <delta_ts>2017-08-31 17:12:43 -0700</delta_ts>
            <desc>[WIP] Use vswhere to determine visual studio location</desc>
            <filename>vswhere.diff</filename>
            <type>text/plain</type>
            <size>8913</size>
            <attacher name="Stephan Szabo">stephan.szabo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvYnVpbGQtanNjIGIvVG9vbHMvU2NyaXB0cy9idWls
ZC1qc2MKaW5kZXggNzI0MzYxMjdhYjIuLmNjYWE0NDBiOGRhIDEwMDc1NQotLS0gYS9Ub29scy9T
Y3JpcHRzL2J1aWxkLWpzYworKysgYi9Ub29scy9TY3JpcHRzL2J1aWxkLWpzYwpAQCAtMTE3LDYg
KzExNyw3IEBAIGlmIChpc0FwcGxlV2luV2ViS2l0KCkpIHsKIAogaWYgKGlzSlNDT25seSgpICYm
IGlzV2luZG93cygpKSB7CiAgICAgKHN5c3RlbSgicHl0aG9uIFRvb2xzL1NjcmlwdHMvdXBkYXRl
LXdlYmtpdC13aW5jYWlyby1saWJzLnB5IikgPT0gMCkgb3IgZGllOworICAgIChzeXN0ZW0oInB5
dGhvbiBUb29scy9TY3JpcHRzL3VwZGF0ZS12c3doZXJlLnB5IikgPT0gMCkgb3IgZGllOwogfQog
CiBjaGVja1JlcXVpcmVkU3lzdGVtQ29uZmlnKCk7CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L2J1aWxkLXdlYmtpdCBiL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CmluZGV4IDE4MWUzM2Nk
NmIyLi5mNTQwNDU3NjUzMSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQK
KysrIGIvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQKQEAgLTIyMCw2ICsyMjAsNyBAQCBpZiAo
aXNBcHBsZUNvY29hV2ViS2l0KCkpIHsKIAogfSBlbHNpZiAoaXNXaW5DYWlybygpKSB7CiAgICAg
KHN5c3RlbSgicHl0aG9uIFRvb2xzL1NjcmlwdHMvdXBkYXRlLXdlYmtpdC13aW5jYWlyby1saWJz
LnB5IikgPT0gMCkgb3IgZGllOworICAgIChzeXN0ZW0oInB5dGhvbiBUb29scy9TY3JpcHRzL3Vw
ZGF0ZS12c3doZXJlLnB5IikgPT0gMCkgb3IgZGllOwogfSBlbHNpZiAoaXNBcHBsZVdpbldlYktp
dCgpKSB7CiAgICAgIyBDb3B5IFdlYktpdFN1cHBvcnRMaWJyYXJ5IHRvIHRoZSBjb3JyZWN0IGxv
Y2F0aW9uIGluIFdlYktpdExpYnJhcmllcyBzbyBpdCBjYW4gYmUgZm91bmQuCiAgICAgIyBXaWxs
IGZhaWwgaWYgV2ViS2l0U3VwcG9ydExpYnJhcnkuemlwIGlzIG5vdCBpbiBzb3VyY2Ugcm9vdC4K
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvdXBkYXRlLXZzd2hlcmUucHkgYi9Ub29scy9TY3Jp
cHRzL3VwZGF0ZS12c3doZXJlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi42Y2RiOTI2NzQ4NgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvdXBkYXRl
LXZzd2hlcmUucHkKQEAgLTAsMCArMSwzOSBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIwor
IyBDb3B5cmlnaHQgKEMpIDIwMTcgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIworIyAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorIyBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyMgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGltcG9ydGxpYgoraW1w
b3J0IHN5cworCitkb3dubG9hZCA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCdkb3dubG9hZC1s
YXRlc3QtZ2l0aHViLXJlbGVhc2UnKQorCityZXBvID0gJ01pY3Jvc29mdC92c3doZXJlJworZmls
ZSA9ICd2c3doZXJlLmV4ZScKK291dHB1dCA9ICdXZWJLaXRMaWJyYXJpZXMvd2luL3Rvb2xzJwor
CityZXN1bHQgPSBkb3dubG9hZC5tYWluKFsnLW8nLCBvdXRwdXQsIHJlcG8sIGZpbGVdKQorCisj
IE9ubHkgdW56aXAgaWYgcmVxdWlyZWQKK2lmIHJlc3VsdCA9PSBkb3dubG9hZC5TdGF0dXMuQ09V
TERfTk9UX0ZJTkQ6CisgICAgc3lzLmV4aXQoMSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0ZGlycy5wbSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQppbmRleCAxMWZiOGUw
MDgwNy4uYjM0YTk4NjkzY2EgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5w
bQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0KQEAgLTQyLDYgKzQyLDcgQEAgdXNl
IEZpbGU6OlBhdGggcXcobWFrZV9wYXRoIG1rcGF0aCBybXRyZWUpOwogdXNlIEZpbGU6OlNwZWM7
CiB1c2UgRmlsZTo6VGVtcCBxdyh0ZW1wZGlyKTsKIHVzZSBGaWxlOjpzdGF0OwordXNlIEpTT046
OlBQOwogdXNlIExpc3Q6OlV0aWw7CiB1c2UgUE9TSVg7CiB1c2UgVGltZTo6SGlSZXMgcXcodXNs
ZWVwKTsKQEAgLTE1OCw2ICsxNTksOCBAQCBteSAkdnNWZXJzaW9uOwogbXkgJHdpbmRvd3NTb3Vy
Y2VEaXI7CiBteSAkd2luVmVyc2lvbjsKIG15ICR3aWxsVXNlVkNFeHByZXNzV2hlbkJ1aWxkaW5n
ID0gMDsKK215ICR2c1doZXJlRm91bmRJbnN0YWxsYXRpb247CitteSAkdnNXaGVyZUxlZ2FjeUlu
c3RhbGxhdGlvbjsKIAogIyBEZWZpbmVkIGluIFZDU1V0aWxzLgogc3ViIGV4aXRTdGF0dXMoJCk7
CkBAIC01NjksNiArNTcyLDYwIEBAIHN1YiBwcm9ncmFtRmlsZXNQYXRoCiAgICAgcmV0dXJuICRw
cm9ncmFtRmlsZXNQYXRoOwogfQogCitzdWIgcGlja0N1cnJlbnRWaXN1YWxTdHVkaW9JbnN0YWxs
YXRpb24KK3sKKyAgICByZXR1cm4gJHZzV2hlcmVGb3VuZEluc3RhbGxhdGlvbiBpZiBkZWZpbmVk
ICR2c1doZXJlRm91bmRJbnN0YWxsYXRpb247CisKKyAgICBmb3JlYWNoIG15ICRwcm9kdWN0VHlw
ZSAoKAorICAgICAgICAnTWljcm9zb2Z0LlZpc3VhbFN0dWRpby5Qcm9kdWN0LkVudGVycHJpc2Un
LAorICAgICAgICAnTWljcm9zb2Z0LlZpc3VhbFN0dWRpby5Qcm9kdWN0LlByb2Zlc3Npb25hbCcs
CisgICAgICAgICdNaWNyb3NvZnQuVmlzdWFsU3R1ZGlvLlByb2R1Y3QuQ29tbXVuaXR5JworICAg
ICkpIHsKKyAgICAgICAgbXkgJHZzV2hlcmVPdXQgPSBgV2ViS2l0TGlicmFyaWVzL3dpbi90b29s
cy92c3doZXJlIC1ub2xvZ28gLWxhdGVzdCAtZm9ybWF0IGpzb24gLXJlcXVpcmVzIE1pY3Jvc29m
dC5Db21wb25lbnQuTVNCdWlsZCAtcHJvZHVjdHMgJHByb2R1Y3RUeXBlYDsKKyAgICAgICAgbXkg
JGluc3RhbGxhdGlvbnMgPSBbXTsKKyAgICAgICAgZXZhbCB7CisgICAgICAgICAgICAkaW5zdGFs
bGF0aW9ucyA9IGRlY29kZV9qc29uICR2c1doZXJlT3V0OworICAgICAgICB9OworICAgICAgICB1
bmRlZiAkQDsKKworICAgICAgICBpZiAoc2NhbGFyIEAkaW5zdGFsbGF0aW9ucykgeworICAgICAg
ICAgICAgbXkgJGluc3RhbGxhdGlvbiA9ICRpbnN0YWxsYXRpb25zLT5bMF07CisgICAgICAgICAg
ICAkdnNXaGVyZUZvdW5kSW5zdGFsbGF0aW9uID0gJGluc3RhbGxhdGlvbjsKKyAgICAgICAgICAg
ICR2c1doZXJlRm91bmRJbnN0YWxsYXRpb24tPnsnaW5zdGFsbGF0aW9uVmVyc2lvbid9ID1+IC9e
KChcZCspXC4oXGQrKSkvOworICAgICAgICAgICAgJHZzV2hlcmVGb3VuZEluc3RhbGxhdGlvbi0+
eydzaG9ydFZlcnNpb24nfSA9ICQxOworICAgICAgICAgICAgcmV0dXJuICRpbnN0YWxsYXRpb247
CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHVuZGVmOworfQorCitzdWIgcGlja0xlZ2Fj
eVZpc3VhbFN0dWRpb0luc3RhbGxhdGlvbgoreworICAgIG15ICR2c1doZXJlT3V0ID0gYFdlYktp
dExpYnJhcmllcy93aW4vdG9vbHMvdnN3aGVyZSAtbm9sb2dvIC1sZWdhY3kgLWZvcm1hdCBqc29u
YDsKKyAgICBteSAkaW5zdGFsbGF0aW9uc19hbGwgPSBbXTsKKyAgICBldmFsIHsKKyAgICAgICAg
JGluc3RhbGxhdGlvbnNfYWxsID0gZGVjb2RlX2pzb24gJHZzV2hlcmVPdXQ7CisgICAgfTsKKyAg
ICB1bmRlZiAkQDsKKworICAgICMgSXQncyBwb3NzaWJsZSB0aGF0IGEgbm9uLWxlZ2FjeSBpbnN0
YWxsYXRpb24gd2l0aG91dCBtc2J1aWxkCisgICAgIyB3b3VsZCBub3QgYmUgZm91bmQgYnkgdGhl
IGxhdGVzdCwgYnV0IHdvdWxkIGJlIGZvdW5kIGJ5IHRoaXMKKyAgICAjIHZzd2hlcmUgY2FsbCwg
YW5kIHdlIHdhbnQgdG8gc2tpcCB0aG9zZSwgc28gY2hlY2sgZm9yIHZlcnNpb25zCisgICAgIyB3
aXRoIGFuIGluc3RhbGxhdGlvbiB2ZXJzaW9uIGJlZm9yZSAxNS4wLgorICAgIG15IEBpbnN0YWxs
YXRpb25zID0gZ3JlcCB7ICgrJF8tPntpbnN0YWxsYXRpb25WZXJzaW9ufSkgPCAxNSB9IEAkaW5z
dGFsbGF0aW9uc19hbGw7CisKKyAgICAjIFdlIGRvbid0IGdldCBtdWNoIGluZm9ybWF0aW9uIHRo
YXQgd291bGQgbGV0IHVzIGNob29zZSBiZXR3ZWVuCisgICAgIyBsZWdhY3kgaW5zdGFsbGF0aW9u
cywgc28gd2UgdGFrZSB0aGUgZmlyc3QuCisgICAgaWYgKHNjYWxhciBAaW5zdGFsbGF0aW9ucykg
eworICAgICAgICBteSAkaW5zdGFsbGF0aW9uID0gJGluc3RhbGxhdGlvbnNbMF07CisgICAgICAg
ICRpbnN0YWxsYXRpb24tPnsnaW5zdGFsbGF0aW9uVmVyc2lvbid9ID1+IC9eKChcZCspXC4oXGQr
KSkvOworICAgICAgICAkaW5zdGFsbGF0aW9uLT57J3Nob3J0VmVyc2lvbid9ID0gJDE7CisgICAg
ICAgICR2c1doZXJlTGVnYWN5SW5zdGFsbGF0aW9uID0gJGluc3RhbGxhdGlvbjsKKyAgICAgICAg
cmV0dXJuICRpbnN0YWxsYXRpb247CisgICAgfQorICAgIHJldHVybiB1bmRlZjsKK30KKwogc3Vi
IHZpc3VhbFN0dWRpb0luc3RhbGxEaXIKIHsKICAgICByZXR1cm4gJHZzSW5zdGFsbERpciBpZiBk
ZWZpbmVkICR2c0luc3RhbGxEaXI7CkBAIC01NzcsOSArNjM0LDkgQEAgc3ViIHZpc3VhbFN0dWRp
b0luc3RhbGxEaXIKICAgICAgICAgJHZzSW5zdGFsbERpciA9ICRFTlZ7J1ZTSU5TVEFMTERJUid9
OwogICAgICAgICAkdnNJbnN0YWxsRGlyID1+IHN8W1xcL10kfHw7CiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgJHZzSW5zdGFsbERpciA9IEZpbGU6OlNwZWMtPmNhdGRpcihwcm9ncmFtRmlsZXNQYXRo
KCksICJNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyIsICIyMDE3IiwgIkNvbW11bml0eSIpOworICAg
ICAgICAkdnNJbnN0YWxsRGlyID0gdmlzdWFsU3R1ZGlvSW5zdGFsbERpclZTV2hlcmUoKTsKICAg
ICAgICAgaWYgKG5vdCAtZSAkdnNJbnN0YWxsRGlyKSB7Ci0gICAgICAgICAgICAkdnNJbnN0YWxs
RGlyID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKHByb2dyYW1GaWxlc1BhdGgoKSwgIk1pY3Jvc29mdCBW
aXN1YWwgU3R1ZGlvIDE0LjAiKTsKKyAgICAgICAgICAgICR2c0luc3RhbGxEaXIgPSB2aXN1YWxT
dHVkaW9JbnN0YWxsRGlyTGVnYWN5KCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2hvbXAoJHZz
SW5zdGFsbERpciA9IGBjeWdwYXRoICIkdnNJbnN0YWxsRGlyImApIGlmIGlzQ3lnd2luKCk7CkBA
IC01ODgsMjcgKzY0NSw3OCBAQCBzdWIgdmlzdWFsU3R1ZGlvSW5zdGFsbERpcgogICAgIHJldHVy
biAkdnNJbnN0YWxsRGlyOwogfQogCitzdWIgdmlzdWFsU3R1ZGlvSW5zdGFsbERpclZTV2hlcmUK
K3sKKyAgICBwaWNrQ3VycmVudFZpc3VhbFN0dWRpb0luc3RhbGxhdGlvbigpOworICAgIGlmIChk
ZWZpbmVkKCR2c1doZXJlRm91bmRJbnN0YWxsYXRpb24pKSB7CisgICAgICAgIHJldHVybiAkdnNX
aGVyZUZvdW5kSW5zdGFsbGF0aW9uLT57J2luc3RhbGxhdGlvblBhdGgnfTsKKyAgICB9CisgICAg
cmV0dXJuIHVuZGVmOworfQorCitzdWIgdmlzdWFsU3R1ZGlvSW5zdGFsbERpckxlZ2FjeQorewor
ICAgIHBpY2tMZWdhY3lWaXN1YWxTdHVkaW9JbnN0YWxsYXRpb24oKTsKKyAgICBpZiAoZGVmaW5l
ZCgkdnNXaGVyZUxlZ2FjeUluc3RhbGxhdGlvbikpIHsKKyAgICAgICAgcmV0dXJuICR2c1doZXJl
TGVnYWN5SW5zdGFsbGF0aW9uLT57J2luc3RhbGxhdGlvblBhdGgnfTsKKyAgICB9CisgICAgcmV0
dXJuIEZpbGU6OlNwZWMtPmNhdGRpcihwcm9ncmFtRmlsZXNQYXRoKCksICJNaWNyb3NvZnQgVmlz
dWFsIFN0dWRpbyAxNC4wIik7Cit9CisKIHN1YiBtc0J1aWxkSW5zdGFsbERpcgogewogICAgIHJl
dHVybiAkbXNCdWlsZEluc3RhbGxEaXIgaWYgZGVmaW5lZCAkbXNCdWlsZEluc3RhbGxEaXI7CiAK
LSAgICAkbXNCdWlsZEluc3RhbGxEaXIgPSBGaWxlOjpTcGVjLT5jYXRkaXIocHJvZ3JhbUZpbGVz
UGF0aCgpLCAiTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8iLCAiMjAxNyIsICJDb21tdW5pdHkiLCAi
TVNCdWlsZCIsICIxNS4wIiwgIkJpbiIpOworICAgICRtc0J1aWxkSW5zdGFsbERpciA9IG1zQnVp
bGRJbnN0YWxsRGlyVlNXaGVyZSgpOworCiAgICAgaWYgKG5vdCAtZSAkbXNCdWlsZEluc3RhbGxE
aXIpIHsKLSAgICAgICAgJG1zQnVpbGRJbnN0YWxsRGlyID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKHBy
b2dyYW1GaWxlc1BhdGgoKSwgIk1TQnVpbGQiLCAiMTQuMCIsICJCaW4iKTsKKyAgICAgICAgJG1z
QnVpbGRJbnN0YWxsRGlyID0gbXNCdWlsZEluc3RhbGxEaXJMZWdhY3koKTsKICAgICB9CisKICAg
ICBjaG9tcCgkbXNCdWlsZEluc3RhbGxEaXIgPSBgY3lncGF0aCAiJG1zQnVpbGRJbnN0YWxsRGly
ImApIGlmIGlzQ3lnd2luKCk7CiAKICAgICBwcmludCAiVXNpbmcgTVNCdWlsZDogJG1zQnVpbGRJ
bnN0YWxsRGlyXG4iOwogICAgIHJldHVybiAkbXNCdWlsZEluc3RhbGxEaXI7CiB9CiAKK3N1YiBt
c0J1aWxkSW5zdGFsbERpclZTV2hlcmUKK3sKKyAgICBwaWNrQ3VycmVudFZpc3VhbFN0dWRpb0lu
c3RhbGxhdGlvbigpOworICAgIGlmIChkZWZpbmVkKCR2c1doZXJlRm91bmRJbnN0YWxsYXRpb24p
KSB7CisgICAgICAgIHJldHVybiBGaWxlOjpTcGVjLT5jYXRkaXIoCisgICAgICAgICAgICAkdnNX
aGVyZUZvdW5kSW5zdGFsbGF0aW9uLT57J2luc3RhbGxhdGlvblBhdGgnfSwKKyAgICAgICAgICAg
ICJNU0J1aWxkIiwKKyAgICAgICAgICAgICR2c1doZXJlRm91bmRJbnN0YWxsYXRpb24tPnsnc2hv
cnRWZXJzaW9uJ30sCisgICAgICAgICAgICAiQmluIik7CisgICAgfQorICAgIHJldHVybiB1bmRl
ZjsKK30KKworc3ViIG1zQnVpbGRJbnN0YWxsRGlyTGVnYWN5IHsKKyAgICByZXR1cm4gRmlsZTo6
U3BlYy0+Y2F0ZGlyKHByb2dyYW1GaWxlc1BhdGgoKSwgIk1TQnVpbGQiLCAiMTQuMCIsICJCaW4i
KTsKK30KKwogc3ViIHZpc3VhbFN0dWRpb1ZlcnNpb24KIHsKICAgICByZXR1cm4gJHZzVmVyc2lv
biBpZiBkZWZpbmVkICR2c1ZlcnNpb247CiAKLSAgICBteSAkaW5zdGFsbERpciA9IHZpc3VhbFN0
dWRpb0luc3RhbGxEaXIoKTsKKyAgICBwaWNrQ3VycmVudFZpc3VhbFN0dWRpb0luc3RhbGxhdGlv
bigpOworICAgIGlmIChkZWZpbmVkKCR2c1doZXJlRm91bmRJbnN0YWxsYXRpb24pKSB7CisgICAg
ICAgICR2c1ZlcnNpb24gPSAkdnNXaGVyZUZvdW5kSW5zdGFsbGF0aW9uLT57J3Nob3J0VmVyc2lv
bid9OworICAgIH0KKworICAgIGlmICghZGVmaW5lZCgkdnNWZXJzaW9uKSkgeworICAgICAgICBw
aWNrTGVnYWN5VmlzdWFsU3R1ZGlvSW5zdGFsbGF0aW9uKCk7CisgICAgICAgIGlmIChkZWZpbmVk
KCR2c1doZXJlTGVnYWN5SW5zdGFsbGF0aW9uKSkgeworICAgICAgICAgICAgJHZzVmVyc2lvbiA9
ICR2c1doZXJlTGVnYWN5SW5zdGFsbGF0aW9uLT57J3Nob3J0VmVyc2lvbid9OworICAgICAgICB9
CisgICAgfQogCi0gICAgJHZzVmVyc2lvbiA9ICgkaW5zdGFsbERpciA9fiAvTWljcm9zb2Z0IFZp
c3VhbCBTdHVkaW8gKFswLTldK1wuWzAtOV0qKS8pID8gJDEgOiAiMTQiOworICAgIGlmICghZGVm
aW5lZCgkdnNWZXJzaW9uKSkgeworICAgICAgICBteSAkaW5zdGFsbERpciA9IHZpc3VhbFN0dWRp
b0luc3RhbGxEaXIoKTsKKworICAgICAgICAkdnNWZXJzaW9uID0gKCRpbnN0YWxsRGlyID1+IC9N
aWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAoWzAtOV0rXC5bMC05XSopLykgPyAkMSA6ICIxNCI7Cisg
ICAgfQogCiAgICAgcHJpbnQgIlVzaW5nIFZpc3VhbCBTdHVkaW8gJHZzVmVyc2lvblxuIjsKICAg
ICByZXR1cm4gJHZzVmVyc2lvbjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319545</attachid>
            <date>2017-08-31 17:12:43 -0700</date>
            <delta_ts>2017-09-08 10:56:11 -0700</delta_ts>
            <desc>[WIP] Use vswhere to determine visual studio location</desc>
            <filename>175275-2.diff</filename>
            <type>text/plain</type>
            <size>9428</size>
            <attacher name="Stephan Szabo">stephan.szabo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvYnVpbGQtanNjIGIvVG9vbHMvU2NyaXB0cy9idWls
ZC1qc2MKaW5kZXggNzI0MzYxMjdhYjIuLmNjYWE0NDBiOGRhIDEwMDc1NQotLS0gYS9Ub29scy9T
Y3JpcHRzL2J1aWxkLWpzYworKysgYi9Ub29scy9TY3JpcHRzL2J1aWxkLWpzYwpAQCAtMTE3LDYg
KzExNyw3IEBAIGlmIChpc0FwcGxlV2luV2ViS2l0KCkpIHsKIAogaWYgKGlzSlNDT25seSgpICYm
IGlzV2luZG93cygpKSB7CiAgICAgKHN5c3RlbSgicHl0aG9uIFRvb2xzL1NjcmlwdHMvdXBkYXRl
LXdlYmtpdC13aW5jYWlyby1saWJzLnB5IikgPT0gMCkgb3IgZGllOworICAgIChzeXN0ZW0oInB5
dGhvbiBUb29scy9TY3JpcHRzL3VwZGF0ZS12c3doZXJlLnB5IikgPT0gMCkgb3IgZGllOwogfQog
CiBjaGVja1JlcXVpcmVkU3lzdGVtQ29uZmlnKCk7CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L2J1aWxkLXdlYmtpdCBiL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CmluZGV4IDE4MWUzM2Nk
NmIyLi5mNTQwNDU3NjUzMSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQK
KysrIGIvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQKQEAgLTIyMCw2ICsyMjAsNyBAQCBpZiAo
aXNBcHBsZUNvY29hV2ViS2l0KCkpIHsKIAogfSBlbHNpZiAoaXNXaW5DYWlybygpKSB7CiAgICAg
KHN5c3RlbSgicHl0aG9uIFRvb2xzL1NjcmlwdHMvdXBkYXRlLXdlYmtpdC13aW5jYWlyby1saWJz
LnB5IikgPT0gMCkgb3IgZGllOworICAgIChzeXN0ZW0oInB5dGhvbiBUb29scy9TY3JpcHRzL3Vw
ZGF0ZS12c3doZXJlLnB5IikgPT0gMCkgb3IgZGllOwogfSBlbHNpZiAoaXNBcHBsZVdpbldlYktp
dCgpKSB7CiAgICAgIyBDb3B5IFdlYktpdFN1cHBvcnRMaWJyYXJ5IHRvIHRoZSBjb3JyZWN0IGxv
Y2F0aW9uIGluIFdlYktpdExpYnJhcmllcyBzbyBpdCBjYW4gYmUgZm91bmQuCiAgICAgIyBXaWxs
IGZhaWwgaWYgV2ViS2l0U3VwcG9ydExpYnJhcnkuemlwIGlzIG5vdCBpbiBzb3VyY2Ugcm9vdC4K
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvdXBkYXRlLXZzd2hlcmUucHkgYi9Ub29scy9TY3Jp
cHRzL3VwZGF0ZS12c3doZXJlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi42Y2RiOTI2NzQ4NgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvdXBkYXRl
LXZzd2hlcmUucHkKQEAgLTAsMCArMSwzOSBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIwor
IyBDb3B5cmlnaHQgKEMpIDIwMTcgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIworIyAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorIyBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyMgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGltcG9ydGxpYgoraW1w
b3J0IHN5cworCitkb3dubG9hZCA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCdkb3dubG9hZC1s
YXRlc3QtZ2l0aHViLXJlbGVhc2UnKQorCityZXBvID0gJ01pY3Jvc29mdC92c3doZXJlJworZmls
ZSA9ICd2c3doZXJlLmV4ZScKK291dHB1dCA9ICdXZWJLaXRMaWJyYXJpZXMvd2luL3Rvb2xzJwor
CityZXN1bHQgPSBkb3dubG9hZC5tYWluKFsnLW8nLCBvdXRwdXQsIHJlcG8sIGZpbGVdKQorCisj
IE9ubHkgdW56aXAgaWYgcmVxdWlyZWQKK2lmIHJlc3VsdCA9PSBkb3dubG9hZC5TdGF0dXMuQ09V
TERfTk9UX0ZJTkQ6CisgICAgc3lzLmV4aXQoMSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0ZGlycy5wbSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQppbmRleCAxMWZiOGUw
MDgwNy4uZTYwODBhMDA5NDIgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5w
bQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0KQEAgLTM1LDYgKzM1LDggQEAgdXNl
IHdhcm5pbmdzOwogdXNlIENvbmZpZzsKIHVzZSBDd2QgcXcocmVhbHBhdGgpOwogdXNlIERpZ2Vz
dDo6TUQ1IHF3KG1kNV9oZXgpOwordXNlIEVuY29kZTsKK3VzZSBFbmNvZGU6OkxvY2FsZTsKIHVz
ZSBGaW5kQmluOwogdXNlIEZpbGU6OkJhc2VuYW1lOwogdXNlIEZpbGU6OkZpbmQ7CkBAIC00Miw2
ICs0NCw3IEBAIHVzZSBGaWxlOjpQYXRoIHF3KG1ha2VfcGF0aCBta3BhdGggcm10cmVlKTsKIHVz
ZSBGaWxlOjpTcGVjOwogdXNlIEZpbGU6OlRlbXAgcXcodGVtcGRpcik7CiB1c2UgRmlsZTo6c3Rh
dDsKK3VzZSBKU09OOjpQUDsKIHVzZSBMaXN0OjpVdGlsOwogdXNlIFBPU0lYOwogdXNlIFRpbWU6
OkhpUmVzIHF3KHVzbGVlcCk7CkBAIC0xNTgsNiArMTYxLDggQEAgbXkgJHZzVmVyc2lvbjsKIG15
ICR3aW5kb3dzU291cmNlRGlyOwogbXkgJHdpblZlcnNpb247CiBteSAkd2lsbFVzZVZDRXhwcmVz
c1doZW5CdWlsZGluZyA9IDA7CitteSAkdnNXaGVyZUZvdW5kSW5zdGFsbGF0aW9uOworbXkgJHZz
V2hlcmVMZWdhY3lJbnN0YWxsYXRpb247CiAKICMgRGVmaW5lZCBpbiBWQ1NVdGlscy4KIHN1YiBl
eGl0U3RhdHVzKCQpOwpAQCAtNTY5LDYgKzU3NCw2NCBAQCBzdWIgcHJvZ3JhbUZpbGVzUGF0aAog
ICAgIHJldHVybiAkcHJvZ3JhbUZpbGVzUGF0aDsKIH0KIAorc3ViIHBpY2tDdXJyZW50VmlzdWFs
U3R1ZGlvSW5zdGFsbGF0aW9uCit7CisgICAgcmV0dXJuICR2c1doZXJlRm91bmRJbnN0YWxsYXRp
b24gaWYgZGVmaW5lZCAkdnNXaGVyZUZvdW5kSW5zdGFsbGF0aW9uOworCisgICAgZm9yZWFjaCBt
eSAkcHJvZHVjdFR5cGUgKCgKKyAgICAgICAgJ01pY3Jvc29mdC5WaXN1YWxTdHVkaW8uUHJvZHVj
dC5FbnRlcnByaXNlJywKKyAgICAgICAgJ01pY3Jvc29mdC5WaXN1YWxTdHVkaW8uUHJvZHVjdC5Q
cm9mZXNzaW9uYWwnLAorICAgICAgICAnTWljcm9zb2Z0LlZpc3VhbFN0dWRpby5Qcm9kdWN0LkNv
bW11bml0eScKKyAgICApKSB7CisgICAgICAgIG15ICR2c1doZXJlT3V0ID0gYFdlYktpdExpYnJh
cmllcy93aW4vdG9vbHMvdnN3aGVyZSAtbm9sb2dvIC1sYXRlc3QgLWZvcm1hdCBqc29uIC1yZXF1
aXJlcyBNaWNyb3NvZnQuQ29tcG9uZW50Lk1TQnVpbGQgLXByb2R1Y3RzICRwcm9kdWN0VHlwZWA7
CisgICAgICAgIG15ICRpbnN0YWxsYXRpb25zID0gW107CisgICAgICAgIGV2YWwgeworICAgICAg
ICAgICAgJGluc3RhbGxhdGlvbnMgPSBkZWNvZGVfanNvbiBFbmNvZGU6OmVuY29kZSgnVVRGLTgn
ID0+IEVuY29kZTo6ZGVjb2RlKGNvbnNvbGVfaW4gPT4gJHZzV2hlcmVPdXQpKTsKKyAgICAgICAg
fTsKKyAgICAgICAgcHJpbnQgIkVycm9yIGdldHRpbmcgVmlzdWFsIFN0dWRpbyBMb2NhdGlvbjog
JEBcbiIgaWYgJEA7CisgICAgICAgIHVuZGVmICRAOworCisgICAgICAgIGlmIChzY2FsYXIgQCRp
bnN0YWxsYXRpb25zKSB7CisgICAgICAgICAgICBteSAkaW5zdGFsbGF0aW9uID0gJGluc3RhbGxh
dGlvbnMtPlswXTsKKyAgICAgICAgICAgICR2c1doZXJlRm91bmRJbnN0YWxsYXRpb24gPSAkaW5z
dGFsbGF0aW9uOworICAgICAgICAgICAgJHZzV2hlcmVGb3VuZEluc3RhbGxhdGlvbi0+eydpbnN0
YWxsYXRpb25WZXJzaW9uJ30gPX4gL14oKFxkKylcLihcZCspKS87CisgICAgICAgICAgICAkdnNX
aGVyZUZvdW5kSW5zdGFsbGF0aW9uLT57J3Nob3J0VmVyc2lvbid9ID0gJDE7CisgICAgICAgICAg
ICByZXR1cm4gJGluc3RhbGxhdGlvbjsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdW5k
ZWY7Cit9CisKK3N1YiBwaWNrTGVnYWN5VmlzdWFsU3R1ZGlvSW5zdGFsbGF0aW9uCit7CisgICAg
cmV0dXJuICR2c1doZXJlTGVnYWN5SW5zdGFsbGF0aW9uIGlmIGRlZmluZWQgJHZzV2hlcmVMZWdh
Y3lJbnN0YWxsYXRpb247CisKKyAgICBteSAkdnNXaGVyZU91dCA9IGBXZWJLaXRMaWJyYXJpZXMv
d2luL3Rvb2xzL3Zzd2hlcmUgLW5vbG9nbyAtbGVnYWN5IC1mb3JtYXQganNvbmA7CisgICAgbXkg
JGluc3RhbGxhdGlvbnNfYWxsID0gW107CisgICAgZXZhbCB7CisgICAgICAgICRpbnN0YWxsYXRp
b25zX2FsbCA9IGRlY29kZV9qc29uIEVuY29kZTo6ZW5jb2RlKCdVVEYtOCcgPT4gRW5jb2RlOjpk
ZWNvZGUoY29uc29sZV9pbiA9PiAkdnNXaGVyZU91dCkpOworICAgIH07CisgICAgcHJpbnQgIkVy
cm9yIGdldHRpbmcgVmlzdWFsIFN0dWRpbyBMZWdhY3kgTG9jYXRpb246ICRAXG4iIGlmICRAOwor
ICAgIHVuZGVmICRAOworCisgICAgIyBJdCdzIHBvc3NpYmxlIHRoYXQgYSBub24tbGVnYWN5IGlu
c3RhbGxhdGlvbiB3aXRob3V0IG1zYnVpbGQKKyAgICAjIHdvdWxkIG5vdCBiZSBmb3VuZCBieSB0
aGUgbGF0ZXN0LCBidXQgd291bGQgYmUgZm91bmQgYnkgdGhpcworICAgICMgdnN3aGVyZSBjYWxs
LCBhbmQgd2Ugd2FudCB0byBza2lwIHRob3NlLCBzbyBjaGVjayBmb3IgdmVyc2lvbnMKKyAgICAj
IHdpdGggYW4gaW5zdGFsbGF0aW9uIHZlcnNpb24gYmVmb3JlIDE1LjAuCisgICAgbXkgQGluc3Rh
bGxhdGlvbnMgPSBncmVwIHsgKCskXy0+e2luc3RhbGxhdGlvblZlcnNpb259KSA8IDE1IH0gQCRp
bnN0YWxsYXRpb25zX2FsbDsKKworICAgICMgV2UgZG9uJ3QgZ2V0IG11Y2ggaW5mb3JtYXRpb24g
dGhhdCB3b3VsZCBsZXQgdXMgY2hvb3NlIGJldHdlZW4KKyAgICAjIGxlZ2FjeSBpbnN0YWxsYXRp
b25zLCBzbyB3ZSB0YWtlIHRoZSBmaXJzdC4KKyAgICBpZiAoc2NhbGFyIEBpbnN0YWxsYXRpb25z
KSB7CisgICAgICAgIG15ICRpbnN0YWxsYXRpb24gPSAkaW5zdGFsbGF0aW9uc1swXTsKKyAgICAg
ICAgJGluc3RhbGxhdGlvbi0+eydpbnN0YWxsYXRpb25WZXJzaW9uJ30gPX4gL14oKFxkKylcLihc
ZCspKS87CisgICAgICAgICRpbnN0YWxsYXRpb24tPnsnc2hvcnRWZXJzaW9uJ30gPSAkMTsKKyAg
ICAgICAgJHZzV2hlcmVMZWdhY3lJbnN0YWxsYXRpb24gPSAkaW5zdGFsbGF0aW9uOworICAgICAg
ICByZXR1cm4gJGluc3RhbGxhdGlvbjsKKyAgICB9CisgICAgcmV0dXJuIHVuZGVmOworfQorCiBz
dWIgdmlzdWFsU3R1ZGlvSW5zdGFsbERpcgogewogICAgIHJldHVybiAkdnNJbnN0YWxsRGlyIGlm
IGRlZmluZWQgJHZzSW5zdGFsbERpcjsKQEAgLTU3Nyw5ICs2NDAsOSBAQCBzdWIgdmlzdWFsU3R1
ZGlvSW5zdGFsbERpcgogICAgICAgICAkdnNJbnN0YWxsRGlyID0gJEVOVnsnVlNJTlNUQUxMRElS
J307CiAgICAgICAgICR2c0luc3RhbGxEaXIgPX4gc3xbXFwvXSR8fDsKICAgICB9IGVsc2Ugewot
ICAgICAgICAkdnNJbnN0YWxsRGlyID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKHByb2dyYW1GaWxlc1Bh
dGgoKSwgIk1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIiwgIjIwMTciLCAiQ29tbXVuaXR5Iik7Cisg
ICAgICAgICR2c0luc3RhbGxEaXIgPSB2aXN1YWxTdHVkaW9JbnN0YWxsRGlyVlNXaGVyZSgpOwog
ICAgICAgICBpZiAobm90IC1lICR2c0luc3RhbGxEaXIpIHsKLSAgICAgICAgICAgICR2c0luc3Rh
bGxEaXIgPSBGaWxlOjpTcGVjLT5jYXRkaXIocHJvZ3JhbUZpbGVzUGF0aCgpLCAiTWljcm9zb2Z0
IFZpc3VhbCBTdHVkaW8gMTQuMCIpOworICAgICAgICAgICAgJHZzSW5zdGFsbERpciA9IHZpc3Vh
bFN0dWRpb0luc3RhbGxEaXJMZWdhY3koKTsKICAgICAgICAgfQogICAgIH0KICAgICBjaG9tcCgk
dnNJbnN0YWxsRGlyID0gYGN5Z3BhdGggIiR2c0luc3RhbGxEaXIiYCkgaWYgaXNDeWd3aW4oKTsK
QEAgLTU4OCwyNyArNjUxLDc4IEBAIHN1YiB2aXN1YWxTdHVkaW9JbnN0YWxsRGlyCiAgICAgcmV0
dXJuICR2c0luc3RhbGxEaXI7CiB9CiAKK3N1YiB2aXN1YWxTdHVkaW9JbnN0YWxsRGlyVlNXaGVy
ZQoreworICAgIHBpY2tDdXJyZW50VmlzdWFsU3R1ZGlvSW5zdGFsbGF0aW9uKCk7CisgICAgaWYg
KGRlZmluZWQoJHZzV2hlcmVGb3VuZEluc3RhbGxhdGlvbikpIHsKKyAgICAgICAgcmV0dXJuICR2
c1doZXJlRm91bmRJbnN0YWxsYXRpb24tPnsnaW5zdGFsbGF0aW9uUGF0aCd9OworICAgIH0KKyAg
ICByZXR1cm4gdW5kZWY7Cit9CisKK3N1YiB2aXN1YWxTdHVkaW9JbnN0YWxsRGlyTGVnYWN5Cit7
CisgICAgcGlja0xlZ2FjeVZpc3VhbFN0dWRpb0luc3RhbGxhdGlvbigpOworICAgIGlmIChkZWZp
bmVkKCR2c1doZXJlTGVnYWN5SW5zdGFsbGF0aW9uKSkgeworICAgICAgICByZXR1cm4gJHZzV2hl
cmVMZWdhY3lJbnN0YWxsYXRpb24tPnsnaW5zdGFsbGF0aW9uUGF0aCd9OworICAgIH0KKyAgICBy
ZXR1cm4gRmlsZTo6U3BlYy0+Y2F0ZGlyKHByb2dyYW1GaWxlc1BhdGgoKSwgIk1pY3Jvc29mdCBW
aXN1YWwgU3R1ZGlvIDE0LjAiKTsKK30KKwogc3ViIG1zQnVpbGRJbnN0YWxsRGlyCiB7CiAgICAg
cmV0dXJuICRtc0J1aWxkSW5zdGFsbERpciBpZiBkZWZpbmVkICRtc0J1aWxkSW5zdGFsbERpcjsK
IAotICAgICRtc0J1aWxkSW5zdGFsbERpciA9IEZpbGU6OlNwZWMtPmNhdGRpcihwcm9ncmFtRmls
ZXNQYXRoKCksICJNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyIsICIyMDE3IiwgIkNvbW11bml0eSIs
ICJNU0J1aWxkIiwgIjE1LjAiLCAiQmluIik7CisgICAgJG1zQnVpbGRJbnN0YWxsRGlyID0gbXNC
dWlsZEluc3RhbGxEaXJWU1doZXJlKCk7CisKICAgICBpZiAobm90IC1lICRtc0J1aWxkSW5zdGFs
bERpcikgewotICAgICAgICAkbXNCdWlsZEluc3RhbGxEaXIgPSBGaWxlOjpTcGVjLT5jYXRkaXIo
cHJvZ3JhbUZpbGVzUGF0aCgpLCAiTVNCdWlsZCIsICIxNC4wIiwgIkJpbiIpOworICAgICAgICAk
bXNCdWlsZEluc3RhbGxEaXIgPSBtc0J1aWxkSW5zdGFsbERpckxlZ2FjeSgpOwogICAgIH0KKwog
ICAgIGNob21wKCRtc0J1aWxkSW5zdGFsbERpciA9IGBjeWdwYXRoICIkbXNCdWlsZEluc3RhbGxE
aXIiYCkgaWYgaXNDeWd3aW4oKTsKIAogICAgIHByaW50ICJVc2luZyBNU0J1aWxkOiAkbXNCdWls
ZEluc3RhbGxEaXJcbiI7CiAgICAgcmV0dXJuICRtc0J1aWxkSW5zdGFsbERpcjsKIH0KIAorc3Vi
IG1zQnVpbGRJbnN0YWxsRGlyVlNXaGVyZQoreworICAgIHBpY2tDdXJyZW50VmlzdWFsU3R1ZGlv
SW5zdGFsbGF0aW9uKCk7CisgICAgaWYgKGRlZmluZWQoJHZzV2hlcmVGb3VuZEluc3RhbGxhdGlv
bikpIHsKKyAgICAgICAgcmV0dXJuIEZpbGU6OlNwZWMtPmNhdGRpcigKKyAgICAgICAgICAgICR2
c1doZXJlRm91bmRJbnN0YWxsYXRpb24tPnsnaW5zdGFsbGF0aW9uUGF0aCd9LAorICAgICAgICAg
ICAgIk1TQnVpbGQiLAorICAgICAgICAgICAgJHZzV2hlcmVGb3VuZEluc3RhbGxhdGlvbi0+eydz
aG9ydFZlcnNpb24nfSwKKyAgICAgICAgICAgICJCaW4iKTsKKyAgICB9CisgICAgcmV0dXJuIHVu
ZGVmOworfQorCitzdWIgbXNCdWlsZEluc3RhbGxEaXJMZWdhY3kgeworICAgIHJldHVybiBGaWxl
OjpTcGVjLT5jYXRkaXIocHJvZ3JhbUZpbGVzUGF0aCgpLCAiTVNCdWlsZCIsICIxNC4wIiwgIkJp
biIpOworfQorCiBzdWIgdmlzdWFsU3R1ZGlvVmVyc2lvbgogewogICAgIHJldHVybiAkdnNWZXJz
aW9uIGlmIGRlZmluZWQgJHZzVmVyc2lvbjsKIAotICAgIG15ICRpbnN0YWxsRGlyID0gdmlzdWFs
U3R1ZGlvSW5zdGFsbERpcigpOworICAgIHBpY2tDdXJyZW50VmlzdWFsU3R1ZGlvSW5zdGFsbGF0
aW9uKCk7CisgICAgaWYgKGRlZmluZWQoJHZzV2hlcmVGb3VuZEluc3RhbGxhdGlvbikpIHsKKyAg
ICAgICAgJHZzVmVyc2lvbiA9ICR2c1doZXJlRm91bmRJbnN0YWxsYXRpb24tPnsnc2hvcnRWZXJz
aW9uJ307CisgICAgfQogCi0gICAgJHZzVmVyc2lvbiA9ICgkaW5zdGFsbERpciA9fiAvTWljcm9z
b2Z0IFZpc3VhbCBTdHVkaW8gKFswLTldK1wuWzAtOV0qKS8pID8gJDEgOiAiMTQiOworICAgIGlm
ICghZGVmaW5lZCgkdnNWZXJzaW9uKSkgeworICAgICAgICBwaWNrTGVnYWN5VmlzdWFsU3R1ZGlv
SW5zdGFsbGF0aW9uKCk7CisgICAgICAgIGlmIChkZWZpbmVkKCR2c1doZXJlTGVnYWN5SW5zdGFs
bGF0aW9uKSkgeworICAgICAgICAgICAgJHZzVmVyc2lvbiA9ICR2c1doZXJlTGVnYWN5SW5zdGFs
bGF0aW9uLT57J3Nob3J0VmVyc2lvbid9OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFk
ZWZpbmVkKCR2c1ZlcnNpb24pKSB7CisgICAgICAgIG15ICRpbnN0YWxsRGlyID0gdmlzdWFsU3R1
ZGlvSW5zdGFsbERpcigpOworCisgICAgICAgICR2c1ZlcnNpb24gPSAoJGluc3RhbGxEaXIgPX4g
L01pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIChbMC05XStcLlswLTldKikvKSA/ICQxIDogIjE0IjsK
KyAgICB9CiAKICAgICBwcmludCAiVXNpbmcgVmlzdWFsIFN0dWRpbyAkdnNWZXJzaW9uXG4iOwog
ICAgIHJldHVybiAkdnNWZXJzaW9uOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320278</attachid>
            <date>2017-09-08 10:56:11 -0700</date>
            <delta_ts>2017-09-08 12:52:45 -0700</delta_ts>
            <desc>Use vswhere to determine visual studio location</desc>
            <filename>175275-3.diff</filename>
            <type>text/plain</type>
            <size>10272</size>
            <attacher name="Stephan Szabo">stephan.szabo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAwN2My
YTUyYzMyMC4uMDE1NDU1YzZjYmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxNy0wOS0wOCAgU3RlcGhhbiBTemFi
byAgPHN0ZXBoYW4uc3phYm9Ac29ueS5jb20+CisKKyAgICAgICAgW1dpbl0gRGV0ZWN0IFZpc3Vh
bCBTdHVkaW8gMjAxNyBsb2NhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc1Mjc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLWpzYzoKKyAgICAgICAgKiBTY3JpcHRzL2J1
aWxkLXdlYmtpdDoKKyAgICAgICAgKiBTY3JpcHRzL3VwZGF0ZS12c3doZXJlLnB5OiBBZGRlZC4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdGRpcnMucG06CisKIDIwMTctMDktMDcgIE1hdHRoZXcg
U3Rld2FydCAgPG1hdHRoZXdfcl9zdGV3YXJ0QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgTGl2
ZSBQTFQgaW1wbGVtZW50ZWQgd2l0aCBXZWJEcml2ZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvYnVpbGQtanNjIGIvVG9vbHMvU2NyaXB0cy9idWlsZC1qc2MKaW5kZXggNzI0MzYxMjdhYjIu
LmNjYWE0NDBiOGRhIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL2J1aWxkLWpzYworKysgYi9U
b29scy9TY3JpcHRzL2J1aWxkLWpzYwpAQCAtMTE3LDYgKzExNyw3IEBAIGlmIChpc0FwcGxlV2lu
V2ViS2l0KCkpIHsKIAogaWYgKGlzSlNDT25seSgpICYmIGlzV2luZG93cygpKSB7CiAgICAgKHN5
c3RlbSgicHl0aG9uIFRvb2xzL1NjcmlwdHMvdXBkYXRlLXdlYmtpdC13aW5jYWlyby1saWJzLnB5
IikgPT0gMCkgb3IgZGllOworICAgIChzeXN0ZW0oInB5dGhvbiBUb29scy9TY3JpcHRzL3VwZGF0
ZS12c3doZXJlLnB5IikgPT0gMCkgb3IgZGllOwogfQogCiBjaGVja1JlcXVpcmVkU3lzdGVtQ29u
ZmlnKCk7CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdCBiL1Rvb2xzL1Nj
cmlwdHMvYnVpbGQtd2Via2l0CmluZGV4IDE4MWUzM2NkNmIyLi5mNTQwNDU3NjUzMSAxMDA3NTUK
LS0tIGEvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQKKysrIGIvVG9vbHMvU2NyaXB0cy9idWls
ZC13ZWJraXQKQEAgLTIyMCw2ICsyMjAsNyBAQCBpZiAoaXNBcHBsZUNvY29hV2ViS2l0KCkpIHsK
IAogfSBlbHNpZiAoaXNXaW5DYWlybygpKSB7CiAgICAgKHN5c3RlbSgicHl0aG9uIFRvb2xzL1Nj
cmlwdHMvdXBkYXRlLXdlYmtpdC13aW5jYWlyby1saWJzLnB5IikgPT0gMCkgb3IgZGllOworICAg
IChzeXN0ZW0oInB5dGhvbiBUb29scy9TY3JpcHRzL3VwZGF0ZS12c3doZXJlLnB5IikgPT0gMCkg
b3IgZGllOwogfSBlbHNpZiAoaXNBcHBsZVdpbldlYktpdCgpKSB7CiAgICAgIyBDb3B5IFdlYktp
dFN1cHBvcnRMaWJyYXJ5IHRvIHRoZSBjb3JyZWN0IGxvY2F0aW9uIGluIFdlYktpdExpYnJhcmll
cyBzbyBpdCBjYW4gYmUgZm91bmQuCiAgICAgIyBXaWxsIGZhaWwgaWYgV2ViS2l0U3VwcG9ydExp
YnJhcnkuemlwIGlzIG5vdCBpbiBzb3VyY2Ugcm9vdC4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvdXBkYXRlLXZzd2hlcmUucHkgYi9Ub29scy9TY3JpcHRzL3VwZGF0ZS12c3doZXJlLnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42Y2RiOTI2NzQ4NgotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvdXBkYXRlLXZzd2hlcmUucHkKQEAgLTAsMCArMSwz
OSBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTcgU29u
eSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIworIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorIyBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyMg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworaW1wb3J0IGltcG9ydGxpYgoraW1wb3J0IHN5cworCitkb3dubG9hZCA9IGlt
cG9ydGxpYi5pbXBvcnRfbW9kdWxlKCdkb3dubG9hZC1sYXRlc3QtZ2l0aHViLXJlbGVhc2UnKQor
CityZXBvID0gJ01pY3Jvc29mdC92c3doZXJlJworZmlsZSA9ICd2c3doZXJlLmV4ZScKK291dHB1
dCA9ICdXZWJLaXRMaWJyYXJpZXMvd2luL3Rvb2xzJworCityZXN1bHQgPSBkb3dubG9hZC5tYWlu
KFsnLW8nLCBvdXRwdXQsIHJlcG8sIGZpbGVdKQorCisjIE9ubHkgdW56aXAgaWYgcmVxdWlyZWQK
K2lmIHJlc3VsdCA9PSBkb3dubG9hZC5TdGF0dXMuQ09VTERfTk9UX0ZJTkQ6CisgICAgc3lzLmV4
aXQoMSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbSBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0ZGlycy5wbQppbmRleCAxMWZiOGUwMDgwNy4uNzU0MjcyOWY0MGMgMTAwNzU1
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQorKysgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdGRpcnMucG0KQEAgLTM1LDYgKzM1LDggQEAgdXNlIHdhcm5pbmdzOwogdXNlIENvbmZpZzsK
IHVzZSBDd2QgcXcocmVhbHBhdGgpOwogdXNlIERpZ2VzdDo6TUQ1IHF3KG1kNV9oZXgpOwordXNl
IEVuY29kZTsKK3VzZSBFbmNvZGU6OkxvY2FsZTsKIHVzZSBGaW5kQmluOwogdXNlIEZpbGU6OkJh
c2VuYW1lOwogdXNlIEZpbGU6OkZpbmQ7CkBAIC00Miw2ICs0NCw3IEBAIHVzZSBGaWxlOjpQYXRo
IHF3KG1ha2VfcGF0aCBta3BhdGggcm10cmVlKTsKIHVzZSBGaWxlOjpTcGVjOwogdXNlIEZpbGU6
OlRlbXAgcXcodGVtcGRpcik7CiB1c2UgRmlsZTo6c3RhdDsKK3VzZSBKU09OOjpQUDsKIHVzZSBM
aXN0OjpVdGlsOwogdXNlIFBPU0lYOwogdXNlIFRpbWU6OkhpUmVzIHF3KHVzbGVlcCk7CkBAIC0x
NTgsNiArMTYxLDggQEAgbXkgJHZzVmVyc2lvbjsKIG15ICR3aW5kb3dzU291cmNlRGlyOwogbXkg
JHdpblZlcnNpb247CiBteSAkd2lsbFVzZVZDRXhwcmVzc1doZW5CdWlsZGluZyA9IDA7CitteSAk
dnNXaGVyZUZvdW5kSW5zdGFsbGF0aW9uOworbXkgJHZzV2hlcmVMZWdhY3lJbnN0YWxsYXRpb247
CiAKICMgRGVmaW5lZCBpbiBWQ1NVdGlscy4KIHN1YiBleGl0U3RhdHVzKCQpOwpAQCAtNTY5LDYg
KzU3NCw3MSBAQCBzdWIgcHJvZ3JhbUZpbGVzUGF0aAogICAgIHJldHVybiAkcHJvZ3JhbUZpbGVz
UGF0aDsKIH0KIAorc3ViIHBpY2tDdXJyZW50VmlzdWFsU3R1ZGlvSW5zdGFsbGF0aW9uCit7Cisg
ICAgcmV0dXJuICR2c1doZXJlRm91bmRJbnN0YWxsYXRpb24gaWYgZGVmaW5lZCAkdnNXaGVyZUZv
dW5kSW5zdGFsbGF0aW9uOworCisgICAgIyBQcmVmZXIgRW50ZXJwcmlzZSwgdGhlbiBQcm9mZXNz
aW9uYWwsIHRoZW4gQ29tbXVuaXR5LCB0aGVuCisgICAgIyBhbnl0aGluZyBlbHNlIHRoYXQgcHJv
dmlkZXMgTVNCdWlsZC4KKyAgICBmb3JlYWNoIG15ICRwcm9kdWN0VHlwZSAoKAorICAgICAgICAn
TWljcm9zb2Z0LlZpc3VhbFN0dWRpby5Qcm9kdWN0LkVudGVycHJpc2UnLAorICAgICAgICAnTWlj
cm9zb2Z0LlZpc3VhbFN0dWRpby5Qcm9kdWN0LlByb2Zlc3Npb25hbCcsCisgICAgICAgICdNaWNy
b3NvZnQuVmlzdWFsU3R1ZGlvLlByb2R1Y3QuQ29tbXVuaXR5JywKKyAgICAgICAgdW5kZWYKKyAg
ICApKSB7CisgICAgICAgIG15ICRjb21tYW5kID0gIldlYktpdExpYnJhcmllcy93aW4vdG9vbHMv
dnN3aGVyZSAtbm9sb2dvIC1sYXRlc3QgLWZvcm1hdCBqc29uIC1yZXF1aXJlcyBNaWNyb3NvZnQu
Q29tcG9uZW50Lk1TQnVpbGQiOworICAgICAgICBpZiAoZGVmaW5lZCAkcHJvZHVjdFR5cGUpIHsK
KyAgICAgICAgICAgICRjb21tYW5kIC49ICIgLXByb2R1Y3RzICRwcm9kdWN0VHlwZSI7CisgICAg
ICAgIH0KKyAgICAgICAgbXkgJHZzV2hlcmVPdXQgPSBgJGNvbW1hbmRgOworICAgICAgICBteSAk
aW5zdGFsbGF0aW9ucyA9IFtdOworICAgICAgICBldmFsIHsKKyAgICAgICAgICAgICRpbnN0YWxs
YXRpb25zID0gZGVjb2RlX2pzb24gRW5jb2RlOjplbmNvZGUoJ1VURi04JyA9PiBFbmNvZGU6OmRl
Y29kZShjb25zb2xlX2luID0+ICR2c1doZXJlT3V0KSk7CisgICAgICAgIH07CisgICAgICAgIHBy
aW50ICJFcnJvciBnZXR0aW5nIFZpc3VhbCBTdHVkaW8gTG9jYXRpb246ICRAXG4iIGlmICRAOwor
ICAgICAgICB1bmRlZiAkQDsKKworICAgICAgICBpZiAoc2NhbGFyIEAkaW5zdGFsbGF0aW9ucykg
eworICAgICAgICAgICAgbXkgJGluc3RhbGxhdGlvbiA9ICRpbnN0YWxsYXRpb25zLT5bMF07Cisg
ICAgICAgICAgICAkdnNXaGVyZUZvdW5kSW5zdGFsbGF0aW9uID0gJGluc3RhbGxhdGlvbjsKKyAg
ICAgICAgICAgICR2c1doZXJlRm91bmRJbnN0YWxsYXRpb24tPnsnaW5zdGFsbGF0aW9uVmVyc2lv
bid9ID1+IC9eKChcZCspXC4oXGQrKSkvOworICAgICAgICAgICAgJHZzV2hlcmVGb3VuZEluc3Rh
bGxhdGlvbi0+eydzaG9ydFZlcnNpb24nfSA9ICQxOworICAgICAgICAgICAgcmV0dXJuICRpbnN0
YWxsYXRpb247CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHVuZGVmOworfQorCitzdWIg
cGlja0xlZ2FjeVZpc3VhbFN0dWRpb0luc3RhbGxhdGlvbgoreworICAgIHJldHVybiAkdnNXaGVy
ZUxlZ2FjeUluc3RhbGxhdGlvbiBpZiBkZWZpbmVkICR2c1doZXJlTGVnYWN5SW5zdGFsbGF0aW9u
OworCisgICAgbXkgJHZzV2hlcmVPdXQgPSBgV2ViS2l0TGlicmFyaWVzL3dpbi90b29scy92c3do
ZXJlIC1ub2xvZ28gLWxlZ2FjeSAtZm9ybWF0IGpzb25gOworICAgIG15ICRpbnN0YWxsYXRpb25z
X2FsbCA9IFtdOworICAgIGV2YWwgeworICAgICAgICAkaW5zdGFsbGF0aW9uc19hbGwgPSBkZWNv
ZGVfanNvbiBFbmNvZGU6OmVuY29kZSgnVVRGLTgnID0+IEVuY29kZTo6ZGVjb2RlKGNvbnNvbGVf
aW4gPT4gJHZzV2hlcmVPdXQpKTsKKyAgICB9OworICAgIHByaW50ICJFcnJvciBnZXR0aW5nIFZp
c3VhbCBTdHVkaW8gTGVnYWN5IExvY2F0aW9uOiAkQFxuIiBpZiAkQDsKKyAgICB1bmRlZiAkQDsK
KworICAgICMgSXQncyBwb3NzaWJsZSB0aGF0IGEgbm9uLWxlZ2FjeSBpbnN0YWxsYXRpb24gd2l0
aG91dCBtc2J1aWxkCisgICAgIyB3b3VsZCBub3QgYmUgZm91bmQgYnkgdGhlIGxhdGVzdCwgYnV0
IHdvdWxkIGJlIGZvdW5kIGJ5IHRoaXMKKyAgICAjIHZzd2hlcmUgY2FsbCwgYW5kIHdlIHdhbnQg
dG8gc2tpcCB0aG9zZSwgc28gY2hlY2sgZm9yIHZlcnNpb25zCisgICAgIyB3aXRoIGFuIGluc3Rh
bGxhdGlvbiB2ZXJzaW9uIGJlZm9yZSAxNS4wLgorICAgIG15IEBpbnN0YWxsYXRpb25zID0gZ3Jl
cCB7ICgrJF8tPntpbnN0YWxsYXRpb25WZXJzaW9ufSkgPCAxNSB9IEAkaW5zdGFsbGF0aW9uc19h
bGw7CisKKyAgICAjIFdlIGRvbid0IGdldCBtdWNoIGluZm9ybWF0aW9uIHRoYXQgd291bGQgbGV0
IHVzIGNob29zZSBiZXR3ZWVuCisgICAgIyBsZWdhY3kgaW5zdGFsbGF0aW9ucywgc28gd2UnbGwg
dGFrZSB0aGUgZmlyc3QuCisgICAgaWYgKHNjYWxhciBAaW5zdGFsbGF0aW9ucykgeworICAgICAg
ICBteSAkaW5zdGFsbGF0aW9uID0gJGluc3RhbGxhdGlvbnNbMF07CisgICAgICAgICRpbnN0YWxs
YXRpb24tPnsnaW5zdGFsbGF0aW9uVmVyc2lvbid9ID1+IC9eKChcZCspXC4oXGQrKSkvOworICAg
ICAgICAkaW5zdGFsbGF0aW9uLT57J3Nob3J0VmVyc2lvbid9ID0gJDE7CisgICAgICAgICR2c1do
ZXJlTGVnYWN5SW5zdGFsbGF0aW9uID0gJGluc3RhbGxhdGlvbjsKKyAgICAgICAgcmV0dXJuICRp
bnN0YWxsYXRpb247CisgICAgfQorICAgIHJldHVybiB1bmRlZjsKK30KKwogc3ViIHZpc3VhbFN0
dWRpb0luc3RhbGxEaXIKIHsKICAgICByZXR1cm4gJHZzSW5zdGFsbERpciBpZiBkZWZpbmVkICR2
c0luc3RhbGxEaXI7CkBAIC01NzcsOSArNjQ3LDkgQEAgc3ViIHZpc3VhbFN0dWRpb0luc3RhbGxE
aXIKICAgICAgICAgJHZzSW5zdGFsbERpciA9ICRFTlZ7J1ZTSU5TVEFMTERJUid9OwogICAgICAg
ICAkdnNJbnN0YWxsRGlyID1+IHN8W1xcL10kfHw7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgJHZz
SW5zdGFsbERpciA9IEZpbGU6OlNwZWMtPmNhdGRpcihwcm9ncmFtRmlsZXNQYXRoKCksICJNaWNy
b3NvZnQgVmlzdWFsIFN0dWRpbyIsICIyMDE3IiwgIkNvbW11bml0eSIpOworICAgICAgICAkdnNJ
bnN0YWxsRGlyID0gdmlzdWFsU3R1ZGlvSW5zdGFsbERpclZTV2hlcmUoKTsKICAgICAgICAgaWYg
KG5vdCAtZSAkdnNJbnN0YWxsRGlyKSB7Ci0gICAgICAgICAgICAkdnNJbnN0YWxsRGlyID0gRmls
ZTo6U3BlYy0+Y2F0ZGlyKHByb2dyYW1GaWxlc1BhdGgoKSwgIk1pY3Jvc29mdCBWaXN1YWwgU3R1
ZGlvIDE0LjAiKTsKKyAgICAgICAgICAgICR2c0luc3RhbGxEaXIgPSB2aXN1YWxTdHVkaW9JbnN0
YWxsRGlyTGVnYWN5KCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2hvbXAoJHZzSW5zdGFsbERp
ciA9IGBjeWdwYXRoICIkdnNJbnN0YWxsRGlyImApIGlmIGlzQ3lnd2luKCk7CkBAIC01ODgsMjcg
KzY1OCw3OCBAQCBzdWIgdmlzdWFsU3R1ZGlvSW5zdGFsbERpcgogICAgIHJldHVybiAkdnNJbnN0
YWxsRGlyOwogfQogCitzdWIgdmlzdWFsU3R1ZGlvSW5zdGFsbERpclZTV2hlcmUKK3sKKyAgICBw
aWNrQ3VycmVudFZpc3VhbFN0dWRpb0luc3RhbGxhdGlvbigpOworICAgIGlmIChkZWZpbmVkKCR2
c1doZXJlRm91bmRJbnN0YWxsYXRpb24pKSB7CisgICAgICAgIHJldHVybiAkdnNXaGVyZUZvdW5k
SW5zdGFsbGF0aW9uLT57J2luc3RhbGxhdGlvblBhdGgnfTsKKyAgICB9CisgICAgcmV0dXJuIHVu
ZGVmOworfQorCitzdWIgdmlzdWFsU3R1ZGlvSW5zdGFsbERpckxlZ2FjeQoreworICAgIHBpY2tM
ZWdhY3lWaXN1YWxTdHVkaW9JbnN0YWxsYXRpb24oKTsKKyAgICBpZiAoZGVmaW5lZCgkdnNXaGVy
ZUxlZ2FjeUluc3RhbGxhdGlvbikpIHsKKyAgICAgICAgcmV0dXJuICR2c1doZXJlTGVnYWN5SW5z
dGFsbGF0aW9uLT57J2luc3RhbGxhdGlvblBhdGgnfTsKKyAgICB9CisgICAgcmV0dXJuIEZpbGU6
OlNwZWMtPmNhdGRpcihwcm9ncmFtRmlsZXNQYXRoKCksICJNaWNyb3NvZnQgVmlzdWFsIFN0dWRp
byAxNC4wIik7Cit9CisKIHN1YiBtc0J1aWxkSW5zdGFsbERpcgogewogICAgIHJldHVybiAkbXNC
dWlsZEluc3RhbGxEaXIgaWYgZGVmaW5lZCAkbXNCdWlsZEluc3RhbGxEaXI7CiAKLSAgICAkbXNC
dWlsZEluc3RhbGxEaXIgPSBGaWxlOjpTcGVjLT5jYXRkaXIocHJvZ3JhbUZpbGVzUGF0aCgpLCAi
TWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8iLCAiMjAxNyIsICJDb21tdW5pdHkiLCAiTVNCdWlsZCIs
ICIxNS4wIiwgIkJpbiIpOworICAgICRtc0J1aWxkSW5zdGFsbERpciA9IG1zQnVpbGRJbnN0YWxs
RGlyVlNXaGVyZSgpOworCiAgICAgaWYgKG5vdCAtZSAkbXNCdWlsZEluc3RhbGxEaXIpIHsKLSAg
ICAgICAgJG1zQnVpbGRJbnN0YWxsRGlyID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKHByb2dyYW1GaWxl
c1BhdGgoKSwgIk1TQnVpbGQiLCAiMTQuMCIsICJCaW4iKTsKKyAgICAgICAgJG1zQnVpbGRJbnN0
YWxsRGlyID0gbXNCdWlsZEluc3RhbGxEaXJMZWdhY3koKTsKICAgICB9CisKICAgICBjaG9tcCgk
bXNCdWlsZEluc3RhbGxEaXIgPSBgY3lncGF0aCAiJG1zQnVpbGRJbnN0YWxsRGlyImApIGlmIGlz
Q3lnd2luKCk7CiAKICAgICBwcmludCAiVXNpbmcgTVNCdWlsZDogJG1zQnVpbGRJbnN0YWxsRGly
XG4iOwogICAgIHJldHVybiAkbXNCdWlsZEluc3RhbGxEaXI7CiB9CiAKK3N1YiBtc0J1aWxkSW5z
dGFsbERpclZTV2hlcmUKK3sKKyAgICBwaWNrQ3VycmVudFZpc3VhbFN0dWRpb0luc3RhbGxhdGlv
bigpOworICAgIGlmIChkZWZpbmVkKCR2c1doZXJlRm91bmRJbnN0YWxsYXRpb24pKSB7CisgICAg
ICAgIHJldHVybiBGaWxlOjpTcGVjLT5jYXRkaXIoCisgICAgICAgICAgICAkdnNXaGVyZUZvdW5k
SW5zdGFsbGF0aW9uLT57J2luc3RhbGxhdGlvblBhdGgnfSwKKyAgICAgICAgICAgICJNU0J1aWxk
IiwKKyAgICAgICAgICAgICR2c1doZXJlRm91bmRJbnN0YWxsYXRpb24tPnsnc2hvcnRWZXJzaW9u
J30sCisgICAgICAgICAgICAiQmluIik7CisgICAgfQorICAgIHJldHVybiB1bmRlZjsKK30KKwor
c3ViIG1zQnVpbGRJbnN0YWxsRGlyTGVnYWN5IHsKKyAgICByZXR1cm4gRmlsZTo6U3BlYy0+Y2F0
ZGlyKHByb2dyYW1GaWxlc1BhdGgoKSwgIk1TQnVpbGQiLCAiMTQuMCIsICJCaW4iKTsKK30KKwog
c3ViIHZpc3VhbFN0dWRpb1ZlcnNpb24KIHsKICAgICByZXR1cm4gJHZzVmVyc2lvbiBpZiBkZWZp
bmVkICR2c1ZlcnNpb247CiAKLSAgICBteSAkaW5zdGFsbERpciA9IHZpc3VhbFN0dWRpb0luc3Rh
bGxEaXIoKTsKKyAgICBwaWNrQ3VycmVudFZpc3VhbFN0dWRpb0luc3RhbGxhdGlvbigpOworICAg
IGlmIChkZWZpbmVkKCR2c1doZXJlRm91bmRJbnN0YWxsYXRpb24pKSB7CisgICAgICAgICR2c1Zl
cnNpb24gPSAkdnNXaGVyZUZvdW5kSW5zdGFsbGF0aW9uLT57J3Nob3J0VmVyc2lvbid9OworICAg
IH0KIAotICAgICR2c1ZlcnNpb24gPSAoJGluc3RhbGxEaXIgPX4gL01pY3Jvc29mdCBWaXN1YWwg
U3R1ZGlvIChbMC05XStcLlswLTldKikvKSA/ICQxIDogIjE0IjsKKyAgICBpZiAoIWRlZmluZWQo
JHZzVmVyc2lvbikpIHsKKyAgICAgICAgcGlja0xlZ2FjeVZpc3VhbFN0dWRpb0luc3RhbGxhdGlv
bigpOworICAgICAgICBpZiAoZGVmaW5lZCgkdnNXaGVyZUxlZ2FjeUluc3RhbGxhdGlvbikpIHsK
KyAgICAgICAgICAgICR2c1ZlcnNpb24gPSAkdnNXaGVyZUxlZ2FjeUluc3RhbGxhdGlvbi0+eydz
aG9ydFZlcnNpb24nfTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghZGVmaW5lZCgkdnNW
ZXJzaW9uKSkgeworICAgICAgICBteSAkaW5zdGFsbERpciA9IHZpc3VhbFN0dWRpb0luc3RhbGxE
aXIoKTsKKworICAgICAgICAkdnNWZXJzaW9uID0gKCRpbnN0YWxsRGlyID1+IC9NaWNyb3NvZnQg
VmlzdWFsIFN0dWRpbyAoWzAtOV0rXC5bMC05XSopLykgPyAkMSA6ICIxNCI7CisgICAgfQogCiAg
ICAgcHJpbnQgIlVzaW5nIFZpc3VhbCBTdHVkaW8gJHZzVmVyc2lvblxuIjsKICAgICByZXR1cm4g
JHZzVmVyc2lvbjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320291</attachid>
            <date>2017-09-08 12:52:45 -0700</date>
            <delta_ts>2017-09-13 11:22:32 -0700</delta_ts>
            <desc>Use vswhere to determine visual studio location</desc>
            <filename>175275-4.diff</filename>
            <type>text/plain</type>
            <size>10232</size>
            <attacher name="Stephan Szabo">stephan.szabo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAwN2My
YTUyYzMyMC4uMDE1NDU1YzZjYmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxNy0wOS0wOCAgU3RlcGhhbiBTemFi
byAgPHN0ZXBoYW4uc3phYm9Ac29ueS5jb20+CisKKyAgICAgICAgW1dpbl0gRGV0ZWN0IFZpc3Vh
bCBTdHVkaW8gMjAxNyBsb2NhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc1Mjc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLWpzYzoKKyAgICAgICAgKiBTY3JpcHRzL2J1
aWxkLXdlYmtpdDoKKyAgICAgICAgKiBTY3JpcHRzL3VwZGF0ZS12c3doZXJlLnB5OiBBZGRlZC4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdGRpcnMucG06CisKIDIwMTctMDktMDcgIE1hdHRoZXcg
U3Rld2FydCAgPG1hdHRoZXdfcl9zdGV3YXJ0QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgTGl2
ZSBQTFQgaW1wbGVtZW50ZWQgd2l0aCBXZWJEcml2ZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvYnVpbGQtanNjIGIvVG9vbHMvU2NyaXB0cy9idWlsZC1qc2MKaW5kZXggNzI0MzYxMjdhYjIu
LmNjYWE0NDBiOGRhIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL2J1aWxkLWpzYworKysgYi9U
b29scy9TY3JpcHRzL2J1aWxkLWpzYwpAQCAtMTE3LDYgKzExNyw3IEBAIGlmIChpc0FwcGxlV2lu
V2ViS2l0KCkpIHsKIAogaWYgKGlzSlNDT25seSgpICYmIGlzV2luZG93cygpKSB7CiAgICAgKHN5
c3RlbSgicHl0aG9uIFRvb2xzL1NjcmlwdHMvdXBkYXRlLXdlYmtpdC13aW5jYWlyby1saWJzLnB5
IikgPT0gMCkgb3IgZGllOworICAgIChzeXN0ZW0oInB5dGhvbiBUb29scy9TY3JpcHRzL3VwZGF0
ZS12c3doZXJlLnB5IikgPT0gMCkgb3IgZGllOwogfQogCiBjaGVja1JlcXVpcmVkU3lzdGVtQ29u
ZmlnKCk7CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdCBiL1Rvb2xzL1Nj
cmlwdHMvYnVpbGQtd2Via2l0CmluZGV4IDE4MWUzM2NkNmIyLi40YzAzNTIwZTYxYiAxMDA3NTUK
LS0tIGEvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQKKysrIGIvVG9vbHMvU2NyaXB0cy9idWls
ZC13ZWJraXQKQEAgLTIyNiw2ICsyMjYsMTAgQEAgaWYgKGlzQXBwbGVDb2NvYVdlYktpdCgpKSB7
CiAgICAgKHN5c3RlbSgicGVybCBUb29scy9TY3JpcHRzL3VwZGF0ZS13ZWJraXQtc3VwcG9ydC1s
aWJzIikgPT0gMCkgb3IgZGllOwogfQogCitpZiAoaXNBbnlXaW5kb3dzKCkpIHsKKyAgICAoc3lz
dGVtKCJweXRob24gVG9vbHMvU2NyaXB0cy91cGRhdGUtdnN3aGVyZS5weSIpID09IDApIG9yIGRp
ZTsKK30KKwogIyBJZiBhc2tlZCB0byBidWlsZCBqdXN0IHRoZSBXZWJLaXQgcHJvamVjdCwgb3Zl
cndyaXRlIHRoZSBwcm9qZWN0cwogIyBsaXN0IGFmdGVyIGFsbCBvZiB0aGUgcG9ydCBzcGVjaWZp
YyB0d2Vha3MgaGF2ZSBiZWVuIG1hZGUgdG8KICMgYnVpbGQgb3B0aW9ucywgZXRjLgpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy91cGRhdGUtdnN3aGVyZS5weSBiL1Rvb2xzL1NjcmlwdHMvdXBk
YXRlLXZzd2hlcmUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjZj
ZGI5MjY3NDg2Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy91cGRhdGUtdnN3aGVy
ZS5weQpAQCAtMCwwICsxLDM5IEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHly
aWdodCAoQykgMjAxNyBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjCisjIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisjIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisjIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorIyBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgaW1wb3J0bGliCitpbXBvcnQgc3lz
CisKK2Rvd25sb2FkID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJ2Rvd25sb2FkLWxhdGVzdC1n
aXRodWItcmVsZWFzZScpCisKK3JlcG8gPSAnTWljcm9zb2Z0L3Zzd2hlcmUnCitmaWxlID0gJ3Zz
d2hlcmUuZXhlJworb3V0cHV0ID0gJ1dlYktpdExpYnJhcmllcy93aW4vdG9vbHMnCisKK3Jlc3Vs
dCA9IGRvd25sb2FkLm1haW4oWyctbycsIG91dHB1dCwgcmVwbywgZmlsZV0pCisKKyMgT25seSB1
bnppcCBpZiByZXF1aXJlZAoraWYgcmVzdWx0ID09IGRvd25sb2FkLlN0YXR1cy5DT1VMRF9OT1Rf
RklORDoKKyAgICBzeXMuZXhpdCgxKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRk
aXJzLnBtIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCmluZGV4IDExZmI4ZTAwODA3Li43
NTQyNzI5ZjQwYyAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCisrKyBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQpAQCAtMzUsNiArMzUsOCBAQCB1c2Ugd2Fybmlu
Z3M7CiB1c2UgQ29uZmlnOwogdXNlIEN3ZCBxdyhyZWFscGF0aCk7CiB1c2UgRGlnZXN0OjpNRDUg
cXcobWQ1X2hleCk7Cit1c2UgRW5jb2RlOwordXNlIEVuY29kZTo6TG9jYWxlOwogdXNlIEZpbmRC
aW47CiB1c2UgRmlsZTo6QmFzZW5hbWU7CiB1c2UgRmlsZTo6RmluZDsKQEAgLTQyLDYgKzQ0LDcg
QEAgdXNlIEZpbGU6OlBhdGggcXcobWFrZV9wYXRoIG1rcGF0aCBybXRyZWUpOwogdXNlIEZpbGU6
OlNwZWM7CiB1c2UgRmlsZTo6VGVtcCBxdyh0ZW1wZGlyKTsKIHVzZSBGaWxlOjpzdGF0OwordXNl
IEpTT046OlBQOwogdXNlIExpc3Q6OlV0aWw7CiB1c2UgUE9TSVg7CiB1c2UgVGltZTo6SGlSZXMg
cXcodXNsZWVwKTsKQEAgLTE1OCw2ICsxNjEsOCBAQCBteSAkdnNWZXJzaW9uOwogbXkgJHdpbmRv
d3NTb3VyY2VEaXI7CiBteSAkd2luVmVyc2lvbjsKIG15ICR3aWxsVXNlVkNFeHByZXNzV2hlbkJ1
aWxkaW5nID0gMDsKK215ICR2c1doZXJlRm91bmRJbnN0YWxsYXRpb247CitteSAkdnNXaGVyZUxl
Z2FjeUluc3RhbGxhdGlvbjsKIAogIyBEZWZpbmVkIGluIFZDU1V0aWxzLgogc3ViIGV4aXRTdGF0
dXMoJCk7CkBAIC01NjksNiArNTc0LDcxIEBAIHN1YiBwcm9ncmFtRmlsZXNQYXRoCiAgICAgcmV0
dXJuICRwcm9ncmFtRmlsZXNQYXRoOwogfQogCitzdWIgcGlja0N1cnJlbnRWaXN1YWxTdHVkaW9J
bnN0YWxsYXRpb24KK3sKKyAgICByZXR1cm4gJHZzV2hlcmVGb3VuZEluc3RhbGxhdGlvbiBpZiBk
ZWZpbmVkICR2c1doZXJlRm91bmRJbnN0YWxsYXRpb247CisKKyAgICAjIFByZWZlciBFbnRlcnBy
aXNlLCB0aGVuIFByb2Zlc3Npb25hbCwgdGhlbiBDb21tdW5pdHksIHRoZW4KKyAgICAjIGFueXRo
aW5nIGVsc2UgdGhhdCBwcm92aWRlcyBNU0J1aWxkLgorICAgIGZvcmVhY2ggbXkgJHByb2R1Y3RU
eXBlICgoCisgICAgICAgICdNaWNyb3NvZnQuVmlzdWFsU3R1ZGlvLlByb2R1Y3QuRW50ZXJwcmlz
ZScsCisgICAgICAgICdNaWNyb3NvZnQuVmlzdWFsU3R1ZGlvLlByb2R1Y3QuUHJvZmVzc2lvbmFs
JywKKyAgICAgICAgJ01pY3Jvc29mdC5WaXN1YWxTdHVkaW8uUHJvZHVjdC5Db21tdW5pdHknLAor
ICAgICAgICB1bmRlZgorICAgICkpIHsKKyAgICAgICAgbXkgJGNvbW1hbmQgPSAiV2ViS2l0TGli
cmFyaWVzL3dpbi90b29scy92c3doZXJlIC1ub2xvZ28gLWxhdGVzdCAtZm9ybWF0IGpzb24gLXJl
cXVpcmVzIE1pY3Jvc29mdC5Db21wb25lbnQuTVNCdWlsZCI7CisgICAgICAgIGlmIChkZWZpbmVk
ICRwcm9kdWN0VHlwZSkgeworICAgICAgICAgICAgJGNvbW1hbmQgLj0gIiAtcHJvZHVjdHMgJHBy
b2R1Y3RUeXBlIjsKKyAgICAgICAgfQorICAgICAgICBteSAkdnNXaGVyZU91dCA9IGAkY29tbWFu
ZGA7CisgICAgICAgIG15ICRpbnN0YWxsYXRpb25zID0gW107CisgICAgICAgIGV2YWwgeworICAg
ICAgICAgICAgJGluc3RhbGxhdGlvbnMgPSBkZWNvZGVfanNvbiBFbmNvZGU6OmVuY29kZSgnVVRG
LTgnID0+IEVuY29kZTo6ZGVjb2RlKGNvbnNvbGVfaW4gPT4gJHZzV2hlcmVPdXQpKTsKKyAgICAg
ICAgfTsKKyAgICAgICAgcHJpbnQgIkVycm9yIGdldHRpbmcgVmlzdWFsIFN0dWRpbyBMb2NhdGlv
bjogJEBcbiIgaWYgJEA7CisgICAgICAgIHVuZGVmICRAOworCisgICAgICAgIGlmIChzY2FsYXIg
QCRpbnN0YWxsYXRpb25zKSB7CisgICAgICAgICAgICBteSAkaW5zdGFsbGF0aW9uID0gJGluc3Rh
bGxhdGlvbnMtPlswXTsKKyAgICAgICAgICAgICR2c1doZXJlRm91bmRJbnN0YWxsYXRpb24gPSAk
aW5zdGFsbGF0aW9uOworICAgICAgICAgICAgJHZzV2hlcmVGb3VuZEluc3RhbGxhdGlvbi0+eydp
bnN0YWxsYXRpb25WZXJzaW9uJ30gPX4gL14oKFxkKylcLihcZCspKS87CisgICAgICAgICAgICAk
dnNXaGVyZUZvdW5kSW5zdGFsbGF0aW9uLT57J3Nob3J0VmVyc2lvbid9ID0gJDE7CisgICAgICAg
ICAgICByZXR1cm4gJGluc3RhbGxhdGlvbjsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g
dW5kZWY7Cit9CisKK3N1YiBwaWNrTGVnYWN5VmlzdWFsU3R1ZGlvSW5zdGFsbGF0aW9uCit7Cisg
ICAgcmV0dXJuICR2c1doZXJlTGVnYWN5SW5zdGFsbGF0aW9uIGlmIGRlZmluZWQgJHZzV2hlcmVM
ZWdhY3lJbnN0YWxsYXRpb247CisKKyAgICBteSAkdnNXaGVyZU91dCA9IGBXZWJLaXRMaWJyYXJp
ZXMvd2luL3Rvb2xzL3Zzd2hlcmUgLW5vbG9nbyAtbGVnYWN5IC1mb3JtYXQganNvbmA7CisgICAg
bXkgJGluc3RhbGxhdGlvbnNfYWxsID0gW107CisgICAgZXZhbCB7CisgICAgICAgICRpbnN0YWxs
YXRpb25zX2FsbCA9IGRlY29kZV9qc29uIEVuY29kZTo6ZW5jb2RlKCdVVEYtOCcgPT4gRW5jb2Rl
OjpkZWNvZGUoY29uc29sZV9pbiA9PiAkdnNXaGVyZU91dCkpOworICAgIH07CisgICAgcHJpbnQg
IkVycm9yIGdldHRpbmcgVmlzdWFsIFN0dWRpbyBMZWdhY3kgTG9jYXRpb246ICRAXG4iIGlmICRA
OworICAgIHVuZGVmICRAOworCisgICAgIyBJdCdzIHBvc3NpYmxlIHRoYXQgYSBub24tbGVnYWN5
IGluc3RhbGxhdGlvbiB3aXRob3V0IG1zYnVpbGQKKyAgICAjIHdvdWxkIG5vdCBiZSBmb3VuZCBi
eSB0aGUgbGF0ZXN0LCBidXQgd291bGQgYmUgZm91bmQgYnkgdGhpcworICAgICMgdnN3aGVyZSBj
YWxsLCBhbmQgd2Ugd2FudCB0byBza2lwIHRob3NlLCBzbyBjaGVjayBmb3IgdmVyc2lvbnMKKyAg
ICAjIHdpdGggYW4gaW5zdGFsbGF0aW9uIHZlcnNpb24gYmVmb3JlIDE1LjAuCisgICAgbXkgQGlu
c3RhbGxhdGlvbnMgPSBncmVwIHsgKCskXy0+e2luc3RhbGxhdGlvblZlcnNpb259KSA8IDE1IH0g
QCRpbnN0YWxsYXRpb25zX2FsbDsKKworICAgICMgV2UgZG9uJ3QgZ2V0IG11Y2ggaW5mb3JtYXRp
b24gdGhhdCB3b3VsZCBsZXQgdXMgY2hvb3NlIGJldHdlZW4KKyAgICAjIGxlZ2FjeSBpbnN0YWxs
YXRpb25zLCBzbyB3ZSdsbCB0YWtlIHRoZSBmaXJzdC4KKyAgICBpZiAoc2NhbGFyIEBpbnN0YWxs
YXRpb25zKSB7CisgICAgICAgIG15ICRpbnN0YWxsYXRpb24gPSAkaW5zdGFsbGF0aW9uc1swXTsK
KyAgICAgICAgJGluc3RhbGxhdGlvbi0+eydpbnN0YWxsYXRpb25WZXJzaW9uJ30gPX4gL14oKFxk
KylcLihcZCspKS87CisgICAgICAgICRpbnN0YWxsYXRpb24tPnsnc2hvcnRWZXJzaW9uJ30gPSAk
MTsKKyAgICAgICAgJHZzV2hlcmVMZWdhY3lJbnN0YWxsYXRpb24gPSAkaW5zdGFsbGF0aW9uOwor
ICAgICAgICByZXR1cm4gJGluc3RhbGxhdGlvbjsKKyAgICB9CisgICAgcmV0dXJuIHVuZGVmOwor
fQorCiBzdWIgdmlzdWFsU3R1ZGlvSW5zdGFsbERpcgogewogICAgIHJldHVybiAkdnNJbnN0YWxs
RGlyIGlmIGRlZmluZWQgJHZzSW5zdGFsbERpcjsKQEAgLTU3Nyw5ICs2NDcsOSBAQCBzdWIgdmlz
dWFsU3R1ZGlvSW5zdGFsbERpcgogICAgICAgICAkdnNJbnN0YWxsRGlyID0gJEVOVnsnVlNJTlNU
QUxMRElSJ307CiAgICAgICAgICR2c0luc3RhbGxEaXIgPX4gc3xbXFwvXSR8fDsKICAgICB9IGVs
c2UgewotICAgICAgICAkdnNJbnN0YWxsRGlyID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKHByb2dyYW1G
aWxlc1BhdGgoKSwgIk1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIiwgIjIwMTciLCAiQ29tbXVuaXR5
Iik7CisgICAgICAgICR2c0luc3RhbGxEaXIgPSB2aXN1YWxTdHVkaW9JbnN0YWxsRGlyVlNXaGVy
ZSgpOwogICAgICAgICBpZiAobm90IC1lICR2c0luc3RhbGxEaXIpIHsKLSAgICAgICAgICAgICR2
c0luc3RhbGxEaXIgPSBGaWxlOjpTcGVjLT5jYXRkaXIocHJvZ3JhbUZpbGVzUGF0aCgpLCAiTWlj
cm9zb2Z0IFZpc3VhbCBTdHVkaW8gMTQuMCIpOworICAgICAgICAgICAgJHZzSW5zdGFsbERpciA9
IHZpc3VhbFN0dWRpb0luc3RhbGxEaXJMZWdhY3koKTsKICAgICAgICAgfQogICAgIH0KICAgICBj
aG9tcCgkdnNJbnN0YWxsRGlyID0gYGN5Z3BhdGggIiR2c0luc3RhbGxEaXIiYCkgaWYgaXNDeWd3
aW4oKTsKQEAgLTU4OCwyNyArNjU4LDc4IEBAIHN1YiB2aXN1YWxTdHVkaW9JbnN0YWxsRGlyCiAg
ICAgcmV0dXJuICR2c0luc3RhbGxEaXI7CiB9CiAKK3N1YiB2aXN1YWxTdHVkaW9JbnN0YWxsRGly
VlNXaGVyZQoreworICAgIHBpY2tDdXJyZW50VmlzdWFsU3R1ZGlvSW5zdGFsbGF0aW9uKCk7Cisg
ICAgaWYgKGRlZmluZWQoJHZzV2hlcmVGb3VuZEluc3RhbGxhdGlvbikpIHsKKyAgICAgICAgcmV0
dXJuICR2c1doZXJlRm91bmRJbnN0YWxsYXRpb24tPnsnaW5zdGFsbGF0aW9uUGF0aCd9OworICAg
IH0KKyAgICByZXR1cm4gdW5kZWY7Cit9CisKK3N1YiB2aXN1YWxTdHVkaW9JbnN0YWxsRGlyTGVn
YWN5Cit7CisgICAgcGlja0xlZ2FjeVZpc3VhbFN0dWRpb0luc3RhbGxhdGlvbigpOworICAgIGlm
IChkZWZpbmVkKCR2c1doZXJlTGVnYWN5SW5zdGFsbGF0aW9uKSkgeworICAgICAgICByZXR1cm4g
JHZzV2hlcmVMZWdhY3lJbnN0YWxsYXRpb24tPnsnaW5zdGFsbGF0aW9uUGF0aCd9OworICAgIH0K
KyAgICByZXR1cm4gRmlsZTo6U3BlYy0+Y2F0ZGlyKHByb2dyYW1GaWxlc1BhdGgoKSwgIk1pY3Jv
c29mdCBWaXN1YWwgU3R1ZGlvIDE0LjAiKTsKK30KKwogc3ViIG1zQnVpbGRJbnN0YWxsRGlyCiB7
CiAgICAgcmV0dXJuICRtc0J1aWxkSW5zdGFsbERpciBpZiBkZWZpbmVkICRtc0J1aWxkSW5zdGFs
bERpcjsKIAotICAgICRtc0J1aWxkSW5zdGFsbERpciA9IEZpbGU6OlNwZWMtPmNhdGRpcihwcm9n
cmFtRmlsZXNQYXRoKCksICJNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyIsICIyMDE3IiwgIkNvbW11
bml0eSIsICJNU0J1aWxkIiwgIjE1LjAiLCAiQmluIik7CisgICAgJG1zQnVpbGRJbnN0YWxsRGly
ID0gbXNCdWlsZEluc3RhbGxEaXJWU1doZXJlKCk7CisKICAgICBpZiAobm90IC1lICRtc0J1aWxk
SW5zdGFsbERpcikgewotICAgICAgICAkbXNCdWlsZEluc3RhbGxEaXIgPSBGaWxlOjpTcGVjLT5j
YXRkaXIocHJvZ3JhbUZpbGVzUGF0aCgpLCAiTVNCdWlsZCIsICIxNC4wIiwgIkJpbiIpOworICAg
ICAgICAkbXNCdWlsZEluc3RhbGxEaXIgPSBtc0J1aWxkSW5zdGFsbERpckxlZ2FjeSgpOwogICAg
IH0KKwogICAgIGNob21wKCRtc0J1aWxkSW5zdGFsbERpciA9IGBjeWdwYXRoICIkbXNCdWlsZElu
c3RhbGxEaXIiYCkgaWYgaXNDeWd3aW4oKTsKIAogICAgIHByaW50ICJVc2luZyBNU0J1aWxkOiAk
bXNCdWlsZEluc3RhbGxEaXJcbiI7CiAgICAgcmV0dXJuICRtc0J1aWxkSW5zdGFsbERpcjsKIH0K
IAorc3ViIG1zQnVpbGRJbnN0YWxsRGlyVlNXaGVyZQoreworICAgIHBpY2tDdXJyZW50VmlzdWFs
U3R1ZGlvSW5zdGFsbGF0aW9uKCk7CisgICAgaWYgKGRlZmluZWQoJHZzV2hlcmVGb3VuZEluc3Rh
bGxhdGlvbikpIHsKKyAgICAgICAgcmV0dXJuIEZpbGU6OlNwZWMtPmNhdGRpcigKKyAgICAgICAg
ICAgICR2c1doZXJlRm91bmRJbnN0YWxsYXRpb24tPnsnaW5zdGFsbGF0aW9uUGF0aCd9LAorICAg
ICAgICAgICAgIk1TQnVpbGQiLAorICAgICAgICAgICAgJHZzV2hlcmVGb3VuZEluc3RhbGxhdGlv
bi0+eydzaG9ydFZlcnNpb24nfSwKKyAgICAgICAgICAgICJCaW4iKTsKKyAgICB9CisgICAgcmV0
dXJuIHVuZGVmOworfQorCitzdWIgbXNCdWlsZEluc3RhbGxEaXJMZWdhY3kgeworICAgIHJldHVy
biBGaWxlOjpTcGVjLT5jYXRkaXIocHJvZ3JhbUZpbGVzUGF0aCgpLCAiTVNCdWlsZCIsICIxNC4w
IiwgIkJpbiIpOworfQorCiBzdWIgdmlzdWFsU3R1ZGlvVmVyc2lvbgogewogICAgIHJldHVybiAk
dnNWZXJzaW9uIGlmIGRlZmluZWQgJHZzVmVyc2lvbjsKIAotICAgIG15ICRpbnN0YWxsRGlyID0g
dmlzdWFsU3R1ZGlvSW5zdGFsbERpcigpOworICAgIHBpY2tDdXJyZW50VmlzdWFsU3R1ZGlvSW5z
dGFsbGF0aW9uKCk7CisgICAgaWYgKGRlZmluZWQoJHZzV2hlcmVGb3VuZEluc3RhbGxhdGlvbikp
IHsKKyAgICAgICAgJHZzVmVyc2lvbiA9ICR2c1doZXJlRm91bmRJbnN0YWxsYXRpb24tPnsnc2hv
cnRWZXJzaW9uJ307CisgICAgfQogCi0gICAgJHZzVmVyc2lvbiA9ICgkaW5zdGFsbERpciA9fiAv
TWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gKFswLTldK1wuWzAtOV0qKS8pID8gJDEgOiAiMTQiOwor
ICAgIGlmICghZGVmaW5lZCgkdnNWZXJzaW9uKSkgeworICAgICAgICBwaWNrTGVnYWN5VmlzdWFs
U3R1ZGlvSW5zdGFsbGF0aW9uKCk7CisgICAgICAgIGlmIChkZWZpbmVkKCR2c1doZXJlTGVnYWN5
SW5zdGFsbGF0aW9uKSkgeworICAgICAgICAgICAgJHZzVmVyc2lvbiA9ICR2c1doZXJlTGVnYWN5
SW5zdGFsbGF0aW9uLT57J3Nob3J0VmVyc2lvbid9OworICAgICAgICB9CisgICAgfQorCisgICAg
aWYgKCFkZWZpbmVkKCR2c1ZlcnNpb24pKSB7CisgICAgICAgIG15ICRpbnN0YWxsRGlyID0gdmlz
dWFsU3R1ZGlvSW5zdGFsbERpcigpOworCisgICAgICAgICR2c1ZlcnNpb24gPSAoJGluc3RhbGxE
aXIgPX4gL01pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIChbMC05XStcLlswLTldKikvKSA/ICQxIDog
IjE0IjsKKyAgICB9CiAKICAgICBwcmludCAiVXNpbmcgVmlzdWFsIFN0dWRpbyAkdnNWZXJzaW9u
XG4iOwogICAgIHJldHVybiAkdnNWZXJzaW9uOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320661</attachid>
            <date>2017-09-13 11:22:32 -0700</date>
            <delta_ts>2017-10-12 11:14:24 -0700</delta_ts>
            <desc>Use vswhere to determine visual studio location</desc>
            <filename>175275-5.diff</filename>
            <type>text/plain</type>
            <size>10307</size>
            <attacher name="Stephan Szabo">stephan.szabo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5N2Uz
NjU5ZjA2NS4uYzJlYzMyODI0OTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxNy0wOS0xMyAgU3RlcGhhbiBTemFi
byAgPHN0ZXBoYW4uc3phYm9Ac29ueS5jb20+CisKKyAgICAgICAgW1dpbl0gRGV0ZWN0IFZpc3Vh
bCBTdHVkaW8gMjAxNyBsb2NhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc1Mjc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLWpzYzoKKyAgICAgICAgKiBTY3JpcHRzL2J1
aWxkLXdlYmtpdDoKKyAgICAgICAgKiBTY3JpcHRzL3VwZGF0ZS12c3doZXJlLnB5OiBBZGRlZC4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdGRpcnMucG06CisKIDIwMTctMDktMTAgIENhcmxvcyBH
YXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT046
IFtHVEtdIEdlbmVyYXRlZCBIVE1MIEFQSSBkb2N1bWVudGF0aW9uIGlzIG1pc3NpbmcgZGVzY3Jp
cHRpb25zCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL2J1aWxkLWpzYyBiL1Rvb2xzL1Njcmlw
dHMvYnVpbGQtanNjCmluZGV4IDcyNDM2MTI3YWIyLi5jY2FhNDQwYjhkYSAxMDA3NTUKLS0tIGEv
VG9vbHMvU2NyaXB0cy9idWlsZC1qc2MKKysrIGIvVG9vbHMvU2NyaXB0cy9idWlsZC1qc2MKQEAg
LTExNyw2ICsxMTcsNyBAQCBpZiAoaXNBcHBsZVdpbldlYktpdCgpKSB7CiAKIGlmIChpc0pTQ09u
bHkoKSAmJiBpc1dpbmRvd3MoKSkgewogICAgIChzeXN0ZW0oInB5dGhvbiBUb29scy9TY3JpcHRz
L3VwZGF0ZS13ZWJraXQtd2luY2Fpcm8tbGlicy5weSIpID09IDApIG9yIGRpZTsKKyAgICAoc3lz
dGVtKCJweXRob24gVG9vbHMvU2NyaXB0cy91cGRhdGUtdnN3aGVyZS5weSIpID09IDApIG9yIGRp
ZTsKIH0KIAogY2hlY2tSZXF1aXJlZFN5c3RlbUNvbmZpZygpOwpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy9idWlsZC13ZWJraXQgYi9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAppbmRleCAx
ODFlMzNjZDZiMi4uNGMwMzUyMGU2MWIgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvYnVpbGQt
d2Via2l0CisrKyBiL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CkBAIC0yMjYsNiArMjI2LDEw
IEBAIGlmIChpc0FwcGxlQ29jb2FXZWJLaXQoKSkgewogICAgIChzeXN0ZW0oInBlcmwgVG9vbHMv
U2NyaXB0cy91cGRhdGUtd2Via2l0LXN1cHBvcnQtbGlicyIpID09IDApIG9yIGRpZTsKIH0KIAor
aWYgKGlzQW55V2luZG93cygpKSB7CisgICAgKHN5c3RlbSgicHl0aG9uIFRvb2xzL1NjcmlwdHMv
dXBkYXRlLXZzd2hlcmUucHkiKSA9PSAwKSBvciBkaWU7Cit9CisKICMgSWYgYXNrZWQgdG8gYnVp
bGQganVzdCB0aGUgV2ViS2l0IHByb2plY3QsIG92ZXJ3cml0ZSB0aGUgcHJvamVjdHMKICMgbGlz
dCBhZnRlciBhbGwgb2YgdGhlIHBvcnQgc3BlY2lmaWMgdHdlYWtzIGhhdmUgYmVlbiBtYWRlIHRv
CiAjIGJ1aWxkIG9wdGlvbnMsIGV0Yy4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvdXBkYXRl
LXZzd2hlcmUucHkgYi9Ub29scy9TY3JpcHRzL3VwZGF0ZS12c3doZXJlLnB5Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hMWRjYmZjMDE5YQotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1NjcmlwdHMvdXBkYXRlLXZzd2hlcmUucHkKQEAgLTAsMCArMSw0MiBAQAorIyEg
L3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTcgU29ueSBJbnRlcmFj
dGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBh
cmUgbWV0OgorIworIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorIyBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorIyBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyMgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworaW1wb3J0IGltcG9ydGxpYgoraW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgc3RhdAor
Citkb3dubG9hZCA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCdkb3dubG9hZC1sYXRlc3QtZ2l0
aHViLXJlbGVhc2UnKQorCityZXBvID0gJ01pY3Jvc29mdC92c3doZXJlJworZmlsZSA9ICd2c3do
ZXJlLmV4ZScKK291dHB1dCA9ICdXZWJLaXRMaWJyYXJpZXMvd2luL3Rvb2xzJworCityZXN1bHQg
PSBkb3dubG9hZC5tYWluKFsnLW8nLCBvdXRwdXQsIHJlcG8sIGZpbGVdKQorCitpZiByZXN1bHQg
PT0gZG93bmxvYWQuU3RhdHVzLkNPVUxEX05PVF9GSU5EOgorICAgIHN5cy5leGl0KDEpCisKK29z
LmNobW9kKG9zLnBhdGguam9pbihvdXRwdXQsIGZpbGUpLCAwNzc3KQpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCmlu
ZGV4IDExZmI4ZTAwODA3Li43NTQyNzI5ZjQwYyAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRkaXJzLnBtCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQpAQCAtMzUsNiAr
MzUsOCBAQCB1c2Ugd2FybmluZ3M7CiB1c2UgQ29uZmlnOwogdXNlIEN3ZCBxdyhyZWFscGF0aCk7
CiB1c2UgRGlnZXN0OjpNRDUgcXcobWQ1X2hleCk7Cit1c2UgRW5jb2RlOwordXNlIEVuY29kZTo6
TG9jYWxlOwogdXNlIEZpbmRCaW47CiB1c2UgRmlsZTo6QmFzZW5hbWU7CiB1c2UgRmlsZTo6Rmlu
ZDsKQEAgLTQyLDYgKzQ0LDcgQEAgdXNlIEZpbGU6OlBhdGggcXcobWFrZV9wYXRoIG1rcGF0aCBy
bXRyZWUpOwogdXNlIEZpbGU6OlNwZWM7CiB1c2UgRmlsZTo6VGVtcCBxdyh0ZW1wZGlyKTsKIHVz
ZSBGaWxlOjpzdGF0OwordXNlIEpTT046OlBQOwogdXNlIExpc3Q6OlV0aWw7CiB1c2UgUE9TSVg7
CiB1c2UgVGltZTo6SGlSZXMgcXcodXNsZWVwKTsKQEAgLTE1OCw2ICsxNjEsOCBAQCBteSAkdnNW
ZXJzaW9uOwogbXkgJHdpbmRvd3NTb3VyY2VEaXI7CiBteSAkd2luVmVyc2lvbjsKIG15ICR3aWxs
VXNlVkNFeHByZXNzV2hlbkJ1aWxkaW5nID0gMDsKK215ICR2c1doZXJlRm91bmRJbnN0YWxsYXRp
b247CitteSAkdnNXaGVyZUxlZ2FjeUluc3RhbGxhdGlvbjsKIAogIyBEZWZpbmVkIGluIFZDU1V0
aWxzLgogc3ViIGV4aXRTdGF0dXMoJCk7CkBAIC01NjksNiArNTc0LDcxIEBAIHN1YiBwcm9ncmFt
RmlsZXNQYXRoCiAgICAgcmV0dXJuICRwcm9ncmFtRmlsZXNQYXRoOwogfQogCitzdWIgcGlja0N1
cnJlbnRWaXN1YWxTdHVkaW9JbnN0YWxsYXRpb24KK3sKKyAgICByZXR1cm4gJHZzV2hlcmVGb3Vu
ZEluc3RhbGxhdGlvbiBpZiBkZWZpbmVkICR2c1doZXJlRm91bmRJbnN0YWxsYXRpb247CisKKyAg
ICAjIFByZWZlciBFbnRlcnByaXNlLCB0aGVuIFByb2Zlc3Npb25hbCwgdGhlbiBDb21tdW5pdHks
IHRoZW4KKyAgICAjIGFueXRoaW5nIGVsc2UgdGhhdCBwcm92aWRlcyBNU0J1aWxkLgorICAgIGZv
cmVhY2ggbXkgJHByb2R1Y3RUeXBlICgoCisgICAgICAgICdNaWNyb3NvZnQuVmlzdWFsU3R1ZGlv
LlByb2R1Y3QuRW50ZXJwcmlzZScsCisgICAgICAgICdNaWNyb3NvZnQuVmlzdWFsU3R1ZGlvLlBy
b2R1Y3QuUHJvZmVzc2lvbmFsJywKKyAgICAgICAgJ01pY3Jvc29mdC5WaXN1YWxTdHVkaW8uUHJv
ZHVjdC5Db21tdW5pdHknLAorICAgICAgICB1bmRlZgorICAgICkpIHsKKyAgICAgICAgbXkgJGNv
bW1hbmQgPSAiV2ViS2l0TGlicmFyaWVzL3dpbi90b29scy92c3doZXJlIC1ub2xvZ28gLWxhdGVz
dCAtZm9ybWF0IGpzb24gLXJlcXVpcmVzIE1pY3Jvc29mdC5Db21wb25lbnQuTVNCdWlsZCI7Cisg
ICAgICAgIGlmIChkZWZpbmVkICRwcm9kdWN0VHlwZSkgeworICAgICAgICAgICAgJGNvbW1hbmQg
Lj0gIiAtcHJvZHVjdHMgJHByb2R1Y3RUeXBlIjsKKyAgICAgICAgfQorICAgICAgICBteSAkdnNX
aGVyZU91dCA9IGAkY29tbWFuZGA7CisgICAgICAgIG15ICRpbnN0YWxsYXRpb25zID0gW107Cisg
ICAgICAgIGV2YWwgeworICAgICAgICAgICAgJGluc3RhbGxhdGlvbnMgPSBkZWNvZGVfanNvbiBF
bmNvZGU6OmVuY29kZSgnVVRGLTgnID0+IEVuY29kZTo6ZGVjb2RlKGNvbnNvbGVfaW4gPT4gJHZz
V2hlcmVPdXQpKTsKKyAgICAgICAgfTsKKyAgICAgICAgcHJpbnQgIkVycm9yIGdldHRpbmcgVmlz
dWFsIFN0dWRpbyBMb2NhdGlvbjogJEBcbiIgaWYgJEA7CisgICAgICAgIHVuZGVmICRAOworCisg
ICAgICAgIGlmIChzY2FsYXIgQCRpbnN0YWxsYXRpb25zKSB7CisgICAgICAgICAgICBteSAkaW5z
dGFsbGF0aW9uID0gJGluc3RhbGxhdGlvbnMtPlswXTsKKyAgICAgICAgICAgICR2c1doZXJlRm91
bmRJbnN0YWxsYXRpb24gPSAkaW5zdGFsbGF0aW9uOworICAgICAgICAgICAgJHZzV2hlcmVGb3Vu
ZEluc3RhbGxhdGlvbi0+eydpbnN0YWxsYXRpb25WZXJzaW9uJ30gPX4gL14oKFxkKylcLihcZCsp
KS87CisgICAgICAgICAgICAkdnNXaGVyZUZvdW5kSW5zdGFsbGF0aW9uLT57J3Nob3J0VmVyc2lv
bid9ID0gJDE7CisgICAgICAgICAgICByZXR1cm4gJGluc3RhbGxhdGlvbjsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gdW5kZWY7Cit9CisKK3N1YiBwaWNrTGVnYWN5VmlzdWFsU3R1ZGlv
SW5zdGFsbGF0aW9uCit7CisgICAgcmV0dXJuICR2c1doZXJlTGVnYWN5SW5zdGFsbGF0aW9uIGlm
IGRlZmluZWQgJHZzV2hlcmVMZWdhY3lJbnN0YWxsYXRpb247CisKKyAgICBteSAkdnNXaGVyZU91
dCA9IGBXZWJLaXRMaWJyYXJpZXMvd2luL3Rvb2xzL3Zzd2hlcmUgLW5vbG9nbyAtbGVnYWN5IC1m
b3JtYXQganNvbmA7CisgICAgbXkgJGluc3RhbGxhdGlvbnNfYWxsID0gW107CisgICAgZXZhbCB7
CisgICAgICAgICRpbnN0YWxsYXRpb25zX2FsbCA9IGRlY29kZV9qc29uIEVuY29kZTo6ZW5jb2Rl
KCdVVEYtOCcgPT4gRW5jb2RlOjpkZWNvZGUoY29uc29sZV9pbiA9PiAkdnNXaGVyZU91dCkpOwor
ICAgIH07CisgICAgcHJpbnQgIkVycm9yIGdldHRpbmcgVmlzdWFsIFN0dWRpbyBMZWdhY3kgTG9j
YXRpb246ICRAXG4iIGlmICRAOworICAgIHVuZGVmICRAOworCisgICAgIyBJdCdzIHBvc3NpYmxl
IHRoYXQgYSBub24tbGVnYWN5IGluc3RhbGxhdGlvbiB3aXRob3V0IG1zYnVpbGQKKyAgICAjIHdv
dWxkIG5vdCBiZSBmb3VuZCBieSB0aGUgbGF0ZXN0LCBidXQgd291bGQgYmUgZm91bmQgYnkgdGhp
cworICAgICMgdnN3aGVyZSBjYWxsLCBhbmQgd2Ugd2FudCB0byBza2lwIHRob3NlLCBzbyBjaGVj
ayBmb3IgdmVyc2lvbnMKKyAgICAjIHdpdGggYW4gaW5zdGFsbGF0aW9uIHZlcnNpb24gYmVmb3Jl
IDE1LjAuCisgICAgbXkgQGluc3RhbGxhdGlvbnMgPSBncmVwIHsgKCskXy0+e2luc3RhbGxhdGlv
blZlcnNpb259KSA8IDE1IH0gQCRpbnN0YWxsYXRpb25zX2FsbDsKKworICAgICMgV2UgZG9uJ3Qg
Z2V0IG11Y2ggaW5mb3JtYXRpb24gdGhhdCB3b3VsZCBsZXQgdXMgY2hvb3NlIGJldHdlZW4KKyAg
ICAjIGxlZ2FjeSBpbnN0YWxsYXRpb25zLCBzbyB3ZSdsbCB0YWtlIHRoZSBmaXJzdC4KKyAgICBp
ZiAoc2NhbGFyIEBpbnN0YWxsYXRpb25zKSB7CisgICAgICAgIG15ICRpbnN0YWxsYXRpb24gPSAk
aW5zdGFsbGF0aW9uc1swXTsKKyAgICAgICAgJGluc3RhbGxhdGlvbi0+eydpbnN0YWxsYXRpb25W
ZXJzaW9uJ30gPX4gL14oKFxkKylcLihcZCspKS87CisgICAgICAgICRpbnN0YWxsYXRpb24tPnsn
c2hvcnRWZXJzaW9uJ30gPSAkMTsKKyAgICAgICAgJHZzV2hlcmVMZWdhY3lJbnN0YWxsYXRpb24g
PSAkaW5zdGFsbGF0aW9uOworICAgICAgICByZXR1cm4gJGluc3RhbGxhdGlvbjsKKyAgICB9Cisg
ICAgcmV0dXJuIHVuZGVmOworfQorCiBzdWIgdmlzdWFsU3R1ZGlvSW5zdGFsbERpcgogewogICAg
IHJldHVybiAkdnNJbnN0YWxsRGlyIGlmIGRlZmluZWQgJHZzSW5zdGFsbERpcjsKQEAgLTU3Nyw5
ICs2NDcsOSBAQCBzdWIgdmlzdWFsU3R1ZGlvSW5zdGFsbERpcgogICAgICAgICAkdnNJbnN0YWxs
RGlyID0gJEVOVnsnVlNJTlNUQUxMRElSJ307CiAgICAgICAgICR2c0luc3RhbGxEaXIgPX4gc3xb
XFwvXSR8fDsKICAgICB9IGVsc2UgewotICAgICAgICAkdnNJbnN0YWxsRGlyID0gRmlsZTo6U3Bl
Yy0+Y2F0ZGlyKHByb2dyYW1GaWxlc1BhdGgoKSwgIk1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIiwg
IjIwMTciLCAiQ29tbXVuaXR5Iik7CisgICAgICAgICR2c0luc3RhbGxEaXIgPSB2aXN1YWxTdHVk
aW9JbnN0YWxsRGlyVlNXaGVyZSgpOwogICAgICAgICBpZiAobm90IC1lICR2c0luc3RhbGxEaXIp
IHsKLSAgICAgICAgICAgICR2c0luc3RhbGxEaXIgPSBGaWxlOjpTcGVjLT5jYXRkaXIocHJvZ3Jh
bUZpbGVzUGF0aCgpLCAiTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMTQuMCIpOworICAgICAgICAg
ICAgJHZzSW5zdGFsbERpciA9IHZpc3VhbFN0dWRpb0luc3RhbGxEaXJMZWdhY3koKTsKICAgICAg
ICAgfQogICAgIH0KICAgICBjaG9tcCgkdnNJbnN0YWxsRGlyID0gYGN5Z3BhdGggIiR2c0luc3Rh
bGxEaXIiYCkgaWYgaXNDeWd3aW4oKTsKQEAgLTU4OCwyNyArNjU4LDc4IEBAIHN1YiB2aXN1YWxT
dHVkaW9JbnN0YWxsRGlyCiAgICAgcmV0dXJuICR2c0luc3RhbGxEaXI7CiB9CiAKK3N1YiB2aXN1
YWxTdHVkaW9JbnN0YWxsRGlyVlNXaGVyZQoreworICAgIHBpY2tDdXJyZW50VmlzdWFsU3R1ZGlv
SW5zdGFsbGF0aW9uKCk7CisgICAgaWYgKGRlZmluZWQoJHZzV2hlcmVGb3VuZEluc3RhbGxhdGlv
bikpIHsKKyAgICAgICAgcmV0dXJuICR2c1doZXJlRm91bmRJbnN0YWxsYXRpb24tPnsnaW5zdGFs
bGF0aW9uUGF0aCd9OworICAgIH0KKyAgICByZXR1cm4gdW5kZWY7Cit9CisKK3N1YiB2aXN1YWxT
dHVkaW9JbnN0YWxsRGlyTGVnYWN5Cit7CisgICAgcGlja0xlZ2FjeVZpc3VhbFN0dWRpb0luc3Rh
bGxhdGlvbigpOworICAgIGlmIChkZWZpbmVkKCR2c1doZXJlTGVnYWN5SW5zdGFsbGF0aW9uKSkg
eworICAgICAgICByZXR1cm4gJHZzV2hlcmVMZWdhY3lJbnN0YWxsYXRpb24tPnsnaW5zdGFsbGF0
aW9uUGF0aCd9OworICAgIH0KKyAgICByZXR1cm4gRmlsZTo6U3BlYy0+Y2F0ZGlyKHByb2dyYW1G
aWxlc1BhdGgoKSwgIk1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDE0LjAiKTsKK30KKwogc3ViIG1z
QnVpbGRJbnN0YWxsRGlyCiB7CiAgICAgcmV0dXJuICRtc0J1aWxkSW5zdGFsbERpciBpZiBkZWZp
bmVkICRtc0J1aWxkSW5zdGFsbERpcjsKIAotICAgICRtc0J1aWxkSW5zdGFsbERpciA9IEZpbGU6
OlNwZWMtPmNhdGRpcihwcm9ncmFtRmlsZXNQYXRoKCksICJNaWNyb3NvZnQgVmlzdWFsIFN0dWRp
byIsICIyMDE3IiwgIkNvbW11bml0eSIsICJNU0J1aWxkIiwgIjE1LjAiLCAiQmluIik7CisgICAg
JG1zQnVpbGRJbnN0YWxsRGlyID0gbXNCdWlsZEluc3RhbGxEaXJWU1doZXJlKCk7CisKICAgICBp
ZiAobm90IC1lICRtc0J1aWxkSW5zdGFsbERpcikgewotICAgICAgICAkbXNCdWlsZEluc3RhbGxE
aXIgPSBGaWxlOjpTcGVjLT5jYXRkaXIocHJvZ3JhbUZpbGVzUGF0aCgpLCAiTVNCdWlsZCIsICIx
NC4wIiwgIkJpbiIpOworICAgICAgICAkbXNCdWlsZEluc3RhbGxEaXIgPSBtc0J1aWxkSW5zdGFs
bERpckxlZ2FjeSgpOwogICAgIH0KKwogICAgIGNob21wKCRtc0J1aWxkSW5zdGFsbERpciA9IGBj
eWdwYXRoICIkbXNCdWlsZEluc3RhbGxEaXIiYCkgaWYgaXNDeWd3aW4oKTsKIAogICAgIHByaW50
ICJVc2luZyBNU0J1aWxkOiAkbXNCdWlsZEluc3RhbGxEaXJcbiI7CiAgICAgcmV0dXJuICRtc0J1
aWxkSW5zdGFsbERpcjsKIH0KIAorc3ViIG1zQnVpbGRJbnN0YWxsRGlyVlNXaGVyZQoreworICAg
IHBpY2tDdXJyZW50VmlzdWFsU3R1ZGlvSW5zdGFsbGF0aW9uKCk7CisgICAgaWYgKGRlZmluZWQo
JHZzV2hlcmVGb3VuZEluc3RhbGxhdGlvbikpIHsKKyAgICAgICAgcmV0dXJuIEZpbGU6OlNwZWMt
PmNhdGRpcigKKyAgICAgICAgICAgICR2c1doZXJlRm91bmRJbnN0YWxsYXRpb24tPnsnaW5zdGFs
bGF0aW9uUGF0aCd9LAorICAgICAgICAgICAgIk1TQnVpbGQiLAorICAgICAgICAgICAgJHZzV2hl
cmVGb3VuZEluc3RhbGxhdGlvbi0+eydzaG9ydFZlcnNpb24nfSwKKyAgICAgICAgICAgICJCaW4i
KTsKKyAgICB9CisgICAgcmV0dXJuIHVuZGVmOworfQorCitzdWIgbXNCdWlsZEluc3RhbGxEaXJM
ZWdhY3kgeworICAgIHJldHVybiBGaWxlOjpTcGVjLT5jYXRkaXIocHJvZ3JhbUZpbGVzUGF0aCgp
LCAiTVNCdWlsZCIsICIxNC4wIiwgIkJpbiIpOworfQorCiBzdWIgdmlzdWFsU3R1ZGlvVmVyc2lv
bgogewogICAgIHJldHVybiAkdnNWZXJzaW9uIGlmIGRlZmluZWQgJHZzVmVyc2lvbjsKIAotICAg
IG15ICRpbnN0YWxsRGlyID0gdmlzdWFsU3R1ZGlvSW5zdGFsbERpcigpOworICAgIHBpY2tDdXJy
ZW50VmlzdWFsU3R1ZGlvSW5zdGFsbGF0aW9uKCk7CisgICAgaWYgKGRlZmluZWQoJHZzV2hlcmVG
b3VuZEluc3RhbGxhdGlvbikpIHsKKyAgICAgICAgJHZzVmVyc2lvbiA9ICR2c1doZXJlRm91bmRJ
bnN0YWxsYXRpb24tPnsnc2hvcnRWZXJzaW9uJ307CisgICAgfQogCi0gICAgJHZzVmVyc2lvbiA9
ICgkaW5zdGFsbERpciA9fiAvTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gKFswLTldK1wuWzAtOV0q
KS8pID8gJDEgOiAiMTQiOworICAgIGlmICghZGVmaW5lZCgkdnNWZXJzaW9uKSkgeworICAgICAg
ICBwaWNrTGVnYWN5VmlzdWFsU3R1ZGlvSW5zdGFsbGF0aW9uKCk7CisgICAgICAgIGlmIChkZWZp
bmVkKCR2c1doZXJlTGVnYWN5SW5zdGFsbGF0aW9uKSkgeworICAgICAgICAgICAgJHZzVmVyc2lv
biA9ICR2c1doZXJlTGVnYWN5SW5zdGFsbGF0aW9uLT57J3Nob3J0VmVyc2lvbid9OworICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKCFkZWZpbmVkKCR2c1ZlcnNpb24pKSB7CisgICAgICAgIG15
ICRpbnN0YWxsRGlyID0gdmlzdWFsU3R1ZGlvSW5zdGFsbERpcigpOworCisgICAgICAgICR2c1Zl
cnNpb24gPSAoJGluc3RhbGxEaXIgPX4gL01pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIChbMC05XStc
LlswLTldKikvKSA/ICQxIDogIjE0IjsKKyAgICB9CiAKICAgICBwcmludCAiVXNpbmcgVmlzdWFs
IFN0dWRpbyAkdnNWZXJzaW9uXG4iOwogICAgIHJldHVybiAkdnNWZXJzaW9uOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323538</attachid>
            <date>2017-10-12 11:14:24 -0700</date>
            <delta_ts>2017-10-16 15:49:05 -0700</delta_ts>
            <desc>Use vswhere to determine visual studio location</desc>
            <filename>175275-6.diff</filename>
            <type>text/plain</type>
            <size>10627</size>
            <attacher name="Stephan Szabo">stephan.szabo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBiMzQ3
YzQ2YjM2Zi4uMDcyOTM3MzliNmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxNy0xMC0xMiAgU3RlcGhhbiBTemFi
byAgPHN0ZXBoYW4uc3phYm9Ac29ueS5jb20+CisKKyAgICAgICAgW1dpbl0gRGV0ZWN0IFZpc3Vh
bCBTdHVkaW8gMjAxNyBsb2NhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc1Mjc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLWpzYzoKKyAgICAgICAgKiBTY3JpcHRzL2J1
aWxkLXdlYmtpdDoKKyAgICAgICAgKiBTY3JpcHRzL3VwZGF0ZS12c3doZXJlLnB5OiBBZGRlZC4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdGRpcnMucG06CisgICAgICAgIChwaWNrQ3VycmVudFZp
c3VhbFN0dWRpb0luc3RhbGxhdGlvbik6CisgICAgICAgIChwaWNrTGVnYWN5VmlzdWFsU3R1ZGlv
SW5zdGFsbGF0aW9uKToKKyAgICAgICAgKHZpc3VhbFN0dWRpb0luc3RhbGxEaXIpOgorICAgICAg
ICAodmlzdWFsU3R1ZGlvSW5zdGFsbERpclZTV2hlcmUpOgorICAgICAgICAodmlzdWFsU3R1ZGlv
SW5zdGFsbERpckxlZ2FjeSk6CisgICAgICAgIChtc0J1aWxkSW5zdGFsbERpcik6CisgICAgICAg
IChtc0J1aWxkSW5zdGFsbERpclZTV2hlcmUpOgorICAgICAgICAobXNCdWlsZEluc3RhbGxEaXJM
ZWdhY3kpOgorICAgICAgICAodmlzdWFsU3R1ZGlvVmVyc2lvbik6CisKIDIwMTctMTAtMTEgIENo
cmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBbR2VvbG9jYXRpb25dIEV4
cG9zZSBDb29yZGluYXRlcy5mbG9vckxldmVsCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL2J1
aWxkLWpzYyBiL1Rvb2xzL1NjcmlwdHMvYnVpbGQtanNjCmluZGV4IDcyNDM2MTI3YWIyLi5jY2Fh
NDQwYjhkYSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9idWlsZC1qc2MKKysrIGIvVG9vbHMv
U2NyaXB0cy9idWlsZC1qc2MKQEAgLTExNyw2ICsxMTcsNyBAQCBpZiAoaXNBcHBsZVdpbldlYktp
dCgpKSB7CiAKIGlmIChpc0pTQ09ubHkoKSAmJiBpc1dpbmRvd3MoKSkgewogICAgIChzeXN0ZW0o
InB5dGhvbiBUb29scy9TY3JpcHRzL3VwZGF0ZS13ZWJraXQtd2luY2Fpcm8tbGlicy5weSIpID09
IDApIG9yIGRpZTsKKyAgICAoc3lzdGVtKCJweXRob24gVG9vbHMvU2NyaXB0cy91cGRhdGUtdnN3
aGVyZS5weSIpID09IDApIG9yIGRpZTsKIH0KIAogY2hlY2tSZXF1aXJlZFN5c3RlbUNvbmZpZygp
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQgYi9Ub29scy9TY3JpcHRz
L2J1aWxkLXdlYmtpdAppbmRleCBkN2JhODYwNDQ2YS4uMDcyZTVhYTg2ZWYgMTAwNzU1Ci0tLSBh
L1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CisrKyBiL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Vi
a2l0CkBAIC0yMzEsNiArMjMxLDEwIEBAIGlmIChpc0FwcGxlQ29jb2FXZWJLaXQoKSkgewogICAg
IChzeXN0ZW0oInBlcmwgVG9vbHMvU2NyaXB0cy91cGRhdGUtd2Via2l0LXN1cHBvcnQtbGlicyIp
ID09IDApIG9yIGRpZTsKIH0KIAoraWYgKGlzQW55V2luZG93cygpKSB7CisgICAgKHN5c3RlbSgi
cHl0aG9uIFRvb2xzL1NjcmlwdHMvdXBkYXRlLXZzd2hlcmUucHkiKSA9PSAwKSBvciBkaWU7Cit9
CisKICMgSWYgYXNrZWQgdG8gYnVpbGQganVzdCB0aGUgV2ViS2l0IHByb2plY3QsIG92ZXJ3cml0
ZSB0aGUgcHJvamVjdHMKICMgbGlzdCBhZnRlciBhbGwgb2YgdGhlIHBvcnQgc3BlY2lmaWMgdHdl
YWtzIGhhdmUgYmVlbiBtYWRlIHRvCiAjIGJ1aWxkIG9wdGlvbnMsIGV0Yy4KZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvdXBkYXRlLXZzd2hlcmUucHkgYi9Ub29scy9TY3JpcHRzL3VwZGF0ZS12
c3doZXJlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hMWRjYmZj
MDE5YQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvdXBkYXRlLXZzd2hlcmUucHkK
QEAgLTAsMCArMSw0MiBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQg
KEMpIDIwMTcgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIworIyAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorIyBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyMgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGltcG9ydGxpYgoraW1wb3J0IHN5cworaW1w
b3J0IG9zCitpbXBvcnQgc3RhdAorCitkb3dubG9hZCA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxl
KCdkb3dubG9hZC1sYXRlc3QtZ2l0aHViLXJlbGVhc2UnKQorCityZXBvID0gJ01pY3Jvc29mdC92
c3doZXJlJworZmlsZSA9ICd2c3doZXJlLmV4ZScKK291dHB1dCA9ICdXZWJLaXRMaWJyYXJpZXMv
d2luL3Rvb2xzJworCityZXN1bHQgPSBkb3dubG9hZC5tYWluKFsnLW8nLCBvdXRwdXQsIHJlcG8s
IGZpbGVdKQorCitpZiByZXN1bHQgPT0gZG93bmxvYWQuU3RhdHVzLkNPVUxEX05PVF9GSU5EOgor
ICAgIHN5cy5leGl0KDEpCisKK29zLmNobW9kKG9zLnBhdGguam9pbihvdXRwdXQsIGZpbGUpLCAw
Nzc3KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRkaXJzLnBtCmluZGV4IDRkN2JjNmU1ZDY2Li4wOTc1ODRlZTU0ZCAxMDA3NTUK
LS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0ZGlycy5wbQpAQCAtMzUsNiArMzUsOCBAQCB1c2Ugd2FybmluZ3M7CiB1c2UgQ29uZmlnOwog
dXNlIEN3ZCBxdyhyZWFscGF0aCk7CiB1c2UgRGlnZXN0OjpNRDUgcXcobWQ1X2hleCk7Cit1c2Ug
RW5jb2RlOwordXNlIEVuY29kZTo6TG9jYWxlOwogdXNlIEZpbmRCaW47CiB1c2UgRmlsZTo6QmFz
ZW5hbWU7CiB1c2UgRmlsZTo6RmluZDsKQEAgLTQyLDYgKzQ0LDcgQEAgdXNlIEZpbGU6OlBhdGgg
cXcobWFrZV9wYXRoIG1rcGF0aCBybXRyZWUpOwogdXNlIEZpbGU6OlNwZWM7CiB1c2UgRmlsZTo6
VGVtcCBxdyh0ZW1wZGlyKTsKIHVzZSBGaWxlOjpzdGF0OwordXNlIEpTT046OlBQOwogdXNlIExp
c3Q6OlV0aWw7CiB1c2UgUE9TSVg7CiB1c2UgVGltZTo6SGlSZXMgcXcodXNsZWVwKTsKQEAgLTE1
OCw2ICsxNjEsOCBAQCBteSAkdnNWZXJzaW9uOwogbXkgJHdpbmRvd3NTb3VyY2VEaXI7CiBteSAk
d2luVmVyc2lvbjsKIG15ICR3aWxsVXNlVkNFeHByZXNzV2hlbkJ1aWxkaW5nID0gMDsKK215ICR2
c1doZXJlRm91bmRJbnN0YWxsYXRpb247CitteSAkdnNXaGVyZUxlZ2FjeUluc3RhbGxhdGlvbjsK
IAogIyBEZWZpbmVkIGluIFZDU1V0aWxzLgogc3ViIGV4aXRTdGF0dXMoJCk7CkBAIC01NzYsNiAr
NTgxLDcxIEBAIHN1YiBwcm9ncmFtRmlsZXNQYXRoWDg2CiAgICAgcmV0dXJuICRwcm9ncmFtRmls
ZXNQYXRoWDg2OwogfQogCitzdWIgcGlja0N1cnJlbnRWaXN1YWxTdHVkaW9JbnN0YWxsYXRpb24K
K3sKKyAgICByZXR1cm4gJHZzV2hlcmVGb3VuZEluc3RhbGxhdGlvbiBpZiBkZWZpbmVkICR2c1do
ZXJlRm91bmRJbnN0YWxsYXRpb247CisKKyAgICAjIFByZWZlciBFbnRlcnByaXNlLCB0aGVuIFBy
b2Zlc3Npb25hbCwgdGhlbiBDb21tdW5pdHksIHRoZW4KKyAgICAjIGFueXRoaW5nIGVsc2UgdGhh
dCBwcm92aWRlcyBNU0J1aWxkLgorICAgIGZvcmVhY2ggbXkgJHByb2R1Y3RUeXBlICgoCisgICAg
ICAgICdNaWNyb3NvZnQuVmlzdWFsU3R1ZGlvLlByb2R1Y3QuRW50ZXJwcmlzZScsCisgICAgICAg
ICdNaWNyb3NvZnQuVmlzdWFsU3R1ZGlvLlByb2R1Y3QuUHJvZmVzc2lvbmFsJywKKyAgICAgICAg
J01pY3Jvc29mdC5WaXN1YWxTdHVkaW8uUHJvZHVjdC5Db21tdW5pdHknLAorICAgICAgICB1bmRl
ZgorICAgICkpIHsKKyAgICAgICAgbXkgJGNvbW1hbmQgPSAiV2ViS2l0TGlicmFyaWVzL3dpbi90
b29scy92c3doZXJlIC1ub2xvZ28gLWxhdGVzdCAtZm9ybWF0IGpzb24gLXJlcXVpcmVzIE1pY3Jv
c29mdC5Db21wb25lbnQuTVNCdWlsZCI7CisgICAgICAgIGlmIChkZWZpbmVkICRwcm9kdWN0VHlw
ZSkgeworICAgICAgICAgICAgJGNvbW1hbmQgLj0gIiAtcHJvZHVjdHMgJHByb2R1Y3RUeXBlIjsK
KyAgICAgICAgfQorICAgICAgICBteSAkdnNXaGVyZU91dCA9IGAkY29tbWFuZGA7CisgICAgICAg
IG15ICRpbnN0YWxsYXRpb25zID0gW107CisgICAgICAgIGV2YWwgeworICAgICAgICAgICAgJGlu
c3RhbGxhdGlvbnMgPSBkZWNvZGVfanNvbiBFbmNvZGU6OmVuY29kZSgnVVRGLTgnID0+IEVuY29k
ZTo6ZGVjb2RlKGNvbnNvbGVfaW4gPT4gJHZzV2hlcmVPdXQpKTsKKyAgICAgICAgfTsKKyAgICAg
ICAgcHJpbnQgIkVycm9yIGdldHRpbmcgVmlzdWFsIFN0dWRpbyBMb2NhdGlvbjogJEBcbiIgaWYg
JEA7CisgICAgICAgIHVuZGVmICRAOworCisgICAgICAgIGlmIChzY2FsYXIgQCRpbnN0YWxsYXRp
b25zKSB7CisgICAgICAgICAgICBteSAkaW5zdGFsbGF0aW9uID0gJGluc3RhbGxhdGlvbnMtPlsw
XTsKKyAgICAgICAgICAgICR2c1doZXJlRm91bmRJbnN0YWxsYXRpb24gPSAkaW5zdGFsbGF0aW9u
OworICAgICAgICAgICAgJHZzV2hlcmVGb3VuZEluc3RhbGxhdGlvbi0+eydpbnN0YWxsYXRpb25W
ZXJzaW9uJ30gPX4gL14oKFxkKylcLihcZCspKS87CisgICAgICAgICAgICAkdnNXaGVyZUZvdW5k
SW5zdGFsbGF0aW9uLT57J3Nob3J0VmVyc2lvbid9ID0gJDE7CisgICAgICAgICAgICByZXR1cm4g
JGluc3RhbGxhdGlvbjsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdW5kZWY7Cit9CisK
K3N1YiBwaWNrTGVnYWN5VmlzdWFsU3R1ZGlvSW5zdGFsbGF0aW9uCit7CisgICAgcmV0dXJuICR2
c1doZXJlTGVnYWN5SW5zdGFsbGF0aW9uIGlmIGRlZmluZWQgJHZzV2hlcmVMZWdhY3lJbnN0YWxs
YXRpb247CisKKyAgICBteSAkdnNXaGVyZU91dCA9IGBXZWJLaXRMaWJyYXJpZXMvd2luL3Rvb2xz
L3Zzd2hlcmUgLW5vbG9nbyAtbGVnYWN5IC1mb3JtYXQganNvbmA7CisgICAgbXkgJGluc3RhbGxh
dGlvbnNfYWxsID0gW107CisgICAgZXZhbCB7CisgICAgICAgICRpbnN0YWxsYXRpb25zX2FsbCA9
IGRlY29kZV9qc29uIEVuY29kZTo6ZW5jb2RlKCdVVEYtOCcgPT4gRW5jb2RlOjpkZWNvZGUoY29u
c29sZV9pbiA9PiAkdnNXaGVyZU91dCkpOworICAgIH07CisgICAgcHJpbnQgIkVycm9yIGdldHRp
bmcgVmlzdWFsIFN0dWRpbyBMZWdhY3kgTG9jYXRpb246ICRAXG4iIGlmICRAOworICAgIHVuZGVm
ICRAOworCisgICAgIyBJdCdzIHBvc3NpYmxlIHRoYXQgYSBub24tbGVnYWN5IGluc3RhbGxhdGlv
biB3aXRob3V0IG1zYnVpbGQKKyAgICAjIHdvdWxkIG5vdCBiZSBmb3VuZCBieSB0aGUgbGF0ZXN0
LCBidXQgd291bGQgYmUgZm91bmQgYnkgdGhpcworICAgICMgdnN3aGVyZSBjYWxsLCBhbmQgd2Ug
d2FudCB0byBza2lwIHRob3NlLCBzbyBjaGVjayBmb3IgdmVyc2lvbnMKKyAgICAjIHdpdGggYW4g
aW5zdGFsbGF0aW9uIHZlcnNpb24gYmVmb3JlIDE1LjAuCisgICAgbXkgQGluc3RhbGxhdGlvbnMg
PSBncmVwIHsgKCskXy0+e2luc3RhbGxhdGlvblZlcnNpb259KSA8IDE1IH0gQCRpbnN0YWxsYXRp
b25zX2FsbDsKKworICAgICMgV2UgZG9uJ3QgZ2V0IG11Y2ggaW5mb3JtYXRpb24gdGhhdCB3b3Vs
ZCBsZXQgdXMgY2hvb3NlIGJldHdlZW4KKyAgICAjIGxlZ2FjeSBpbnN0YWxsYXRpb25zLCBzbyB3
ZSdsbCB0YWtlIHRoZSBmaXJzdC4KKyAgICBpZiAoc2NhbGFyIEBpbnN0YWxsYXRpb25zKSB7Cisg
ICAgICAgIG15ICRpbnN0YWxsYXRpb24gPSAkaW5zdGFsbGF0aW9uc1swXTsKKyAgICAgICAgJGlu
c3RhbGxhdGlvbi0+eydpbnN0YWxsYXRpb25WZXJzaW9uJ30gPX4gL14oKFxkKylcLihcZCspKS87
CisgICAgICAgICRpbnN0YWxsYXRpb24tPnsnc2hvcnRWZXJzaW9uJ30gPSAkMTsKKyAgICAgICAg
JHZzV2hlcmVMZWdhY3lJbnN0YWxsYXRpb24gPSAkaW5zdGFsbGF0aW9uOworICAgICAgICByZXR1
cm4gJGluc3RhbGxhdGlvbjsKKyAgICB9CisgICAgcmV0dXJuIHVuZGVmOworfQorCiBzdWIgdmlz
dWFsU3R1ZGlvSW5zdGFsbERpcgogewogICAgIHJldHVybiAkdnNJbnN0YWxsRGlyIGlmIGRlZmlu
ZWQgJHZzSW5zdGFsbERpcjsKQEAgLTU4NCw5ICs2NTQsOSBAQCBzdWIgdmlzdWFsU3R1ZGlvSW5z
dGFsbERpcgogICAgICAgICAkdnNJbnN0YWxsRGlyID0gJEVOVnsnVlNJTlNUQUxMRElSJ307CiAg
ICAgICAgICR2c0luc3RhbGxEaXIgPX4gc3xbXFwvXSR8fDsKICAgICB9IGVsc2UgewotICAgICAg
ICAkdnNJbnN0YWxsRGlyID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKHByb2dyYW1GaWxlc1BhdGhYODYo
KSwgIk1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIiwgIjIwMTciLCAiQ29tbXVuaXR5Iik7CisgICAg
ICAgICR2c0luc3RhbGxEaXIgPSB2aXN1YWxTdHVkaW9JbnN0YWxsRGlyVlNXaGVyZSgpOwogICAg
ICAgICBpZiAobm90IC1lICR2c0luc3RhbGxEaXIpIHsKLSAgICAgICAgICAgICR2c0luc3RhbGxE
aXIgPSBGaWxlOjpTcGVjLT5jYXRkaXIocHJvZ3JhbUZpbGVzUGF0aFg4NigpLCAiTWljcm9zb2Z0
IFZpc3VhbCBTdHVkaW8gMTQuMCIpOworICAgICAgICAgICAgJHZzSW5zdGFsbERpciA9IHZpc3Vh
bFN0dWRpb0luc3RhbGxEaXJMZWdhY3koKTsKICAgICAgICAgfQogICAgIH0KICAgICBjaG9tcCgk
dnNJbnN0YWxsRGlyID0gYGN5Z3BhdGggIiR2c0luc3RhbGxEaXIiYCkgaWYgaXNDeWd3aW4oKTsK
QEAgLTU5NSwxMyArNjY1LDMxIEBAIHN1YiB2aXN1YWxTdHVkaW9JbnN0YWxsRGlyCiAgICAgcmV0
dXJuICR2c0luc3RhbGxEaXI7CiB9CiAKK3N1YiB2aXN1YWxTdHVkaW9JbnN0YWxsRGlyVlNXaGVy
ZQoreworICAgIHBpY2tDdXJyZW50VmlzdWFsU3R1ZGlvSW5zdGFsbGF0aW9uKCk7CisgICAgaWYg
KGRlZmluZWQoJHZzV2hlcmVGb3VuZEluc3RhbGxhdGlvbikpIHsKKyAgICAgICAgcmV0dXJuICR2
c1doZXJlRm91bmRJbnN0YWxsYXRpb24tPnsnaW5zdGFsbGF0aW9uUGF0aCd9OworICAgIH0KKyAg
ICByZXR1cm4gdW5kZWY7Cit9CisKK3N1YiB2aXN1YWxTdHVkaW9JbnN0YWxsRGlyTGVnYWN5Cit7
CisgICAgcGlja0xlZ2FjeVZpc3VhbFN0dWRpb0luc3RhbGxhdGlvbigpOworICAgIGlmIChkZWZp
bmVkKCR2c1doZXJlTGVnYWN5SW5zdGFsbGF0aW9uKSkgeworICAgICAgICByZXR1cm4gJHZzV2hl
cmVMZWdhY3lJbnN0YWxsYXRpb24tPnsnaW5zdGFsbGF0aW9uUGF0aCd9OworICAgIH0KKyAgICBy
ZXR1cm4gRmlsZTo6U3BlYy0+Y2F0ZGlyKHByb2dyYW1GaWxlc1BhdGhYODYoKSwgIk1pY3Jvc29m
dCBWaXN1YWwgU3R1ZGlvIDE0LjAiKTsKK30KKwogc3ViIG1zQnVpbGRJbnN0YWxsRGlyCiB7CiAg
ICAgcmV0dXJuICRtc0J1aWxkSW5zdGFsbERpciBpZiBkZWZpbmVkICRtc0J1aWxkSW5zdGFsbERp
cjsKIAotICAgICRtc0J1aWxkSW5zdGFsbERpciA9IEZpbGU6OlNwZWMtPmNhdGRpcihwcm9ncmFt
RmlsZXNQYXRoWDg2KCksICJNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyIsICIyMDE3IiwgIkNvbW11
bml0eSIsICJNU0J1aWxkIiwgIjE1LjAiLCAiQmluIik7CisgICAgJG1zQnVpbGRJbnN0YWxsRGly
ID0gbXNCdWlsZEluc3RhbGxEaXJWU1doZXJlKCk7CiAgICAgaWYgKG5vdCAtZSAkbXNCdWlsZElu
c3RhbGxEaXIpIHsKLSAgICAgICAgJG1zQnVpbGRJbnN0YWxsRGlyID0gRmlsZTo6U3BlYy0+Y2F0
ZGlyKHByb2dyYW1GaWxlc1BhdGhYODYoKSwgIk1TQnVpbGQiLCAiMTQuMCIsICJCaW4iKTsKKyAg
ICAgICAgJG1zQnVpbGRJbnN0YWxsRGlyID0gbXNCdWlsZEluc3RhbGxEaXJMZWdhY3koKTsKICAg
ICB9CiAgICAgY2hvbXAoJG1zQnVpbGRJbnN0YWxsRGlyID0gYGN5Z3BhdGggIiRtc0J1aWxkSW5z
dGFsbERpciJgKSBpZiBpc0N5Z3dpbigpOwogCkBAIC02MDksMTMgKzY5Nyw0NCBAQCBzdWIgbXNC
dWlsZEluc3RhbGxEaXIKICAgICByZXR1cm4gJG1zQnVpbGRJbnN0YWxsRGlyOwogfQogCitzdWIg
bXNCdWlsZEluc3RhbGxEaXJWU1doZXJlCit7CisgICAgcGlja0N1cnJlbnRWaXN1YWxTdHVkaW9J
bnN0YWxsYXRpb24oKTsKKyAgICBpZiAoZGVmaW5lZCgkdnNXaGVyZUZvdW5kSW5zdGFsbGF0aW9u
KSkgeworICAgICAgICByZXR1cm4gRmlsZTo6U3BlYy0+Y2F0ZGlyKAorICAgICAgICAgICAgJHZz
V2hlcmVGb3VuZEluc3RhbGxhdGlvbi0+eydpbnN0YWxsYXRpb25QYXRoJ30sCisgICAgICAgICAg
ICAiTVNCdWlsZCIsCisgICAgICAgICAgICAkdnNXaGVyZUZvdW5kSW5zdGFsbGF0aW9uLT57J3No
b3J0VmVyc2lvbid9LAorICAgICAgICAgICAgIkJpbiIpOworICAgIH0KKyAgICByZXR1cm4gdW5k
ZWY7Cit9CisKK3N1YiBtc0J1aWxkSW5zdGFsbERpckxlZ2FjeSB7CisgICAgcmV0dXJuIEZpbGU6
OlNwZWMtPmNhdGRpcihwcm9ncmFtRmlsZXNQYXRoWDg2KCksICJNU0J1aWxkIiwgIjE0LjAiLCAi
QmluIik7Cit9CisKIHN1YiB2aXN1YWxTdHVkaW9WZXJzaW9uCiB7CiAgICAgcmV0dXJuICR2c1Zl
cnNpb24gaWYgZGVmaW5lZCAkdnNWZXJzaW9uOwogCi0gICAgbXkgJGluc3RhbGxEaXIgPSB2aXN1
YWxTdHVkaW9JbnN0YWxsRGlyKCk7CisgICAgcGlja0N1cnJlbnRWaXN1YWxTdHVkaW9JbnN0YWxs
YXRpb24oKTsKKyAgICBpZiAoZGVmaW5lZCgkdnNXaGVyZUZvdW5kSW5zdGFsbGF0aW9uKSkgewor
ICAgICAgICAkdnNWZXJzaW9uID0gJHZzV2hlcmVGb3VuZEluc3RhbGxhdGlvbi0+eydzaG9ydFZl
cnNpb24nfTsKKyAgICB9CiAKLSAgICAkdnNWZXJzaW9uID0gKCRpbnN0YWxsRGlyID1+IC9NaWNy
b3NvZnQgVmlzdWFsIFN0dWRpbyAoWzAtOV0rXC5bMC05XSopLykgPyAkMSA6ICIxNCI7CisgICAg
aWYgKCFkZWZpbmVkKCR2c1ZlcnNpb24pKSB7CisgICAgICAgIHBpY2tMZWdhY3lWaXN1YWxTdHVk
aW9JbnN0YWxsYXRpb24oKTsKKyAgICAgICAgaWYgKGRlZmluZWQoJHZzV2hlcmVMZWdhY3lJbnN0
YWxsYXRpb24pKSB7CisgICAgICAgICAgICAkdnNWZXJzaW9uID0gJHZzV2hlcmVMZWdhY3lJbnN0
YWxsYXRpb24tPnsnc2hvcnRWZXJzaW9uJ307CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
IWRlZmluZWQoJHZzVmVyc2lvbikpIHsKKyAgICAgICAgbXkgJGluc3RhbGxEaXIgPSB2aXN1YWxT
dHVkaW9JbnN0YWxsRGlyKCk7CisKKyAgICAgICAgJHZzVmVyc2lvbiA9ICgkaW5zdGFsbERpciA9
fiAvTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gKFswLTldK1wuWzAtOV0qKS8pID8gJDEgOiAiMTQi
OworICAgIH0KIAogICAgIHByaW50ICJVc2luZyBWaXN1YWwgU3R1ZGlvICR2c1ZlcnNpb25cbiI7
CiAgICAgcmV0dXJuICR2c1ZlcnNpb247Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323909</attachid>
            <date>2017-10-16 11:05:14 -0700</date>
            <delta_ts>2017-10-17 11:19:12 -0700</delta_ts>
            <desc>Use vswhere to determine visual studio location - 2017 only</desc>
            <filename>175275-2017-only-1.diff</filename>
            <type>text/plain</type>
            <size>8628</size>
            <attacher name="Stephan Szabo">stephan.szabo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhNThj
ZmE1OWMzYS4uZGU0MTRmYTMwMzYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxNy0xMC0xNiAgU3RlcGhhbiBTemFi
byAgPHN0ZXBoYW4uc3phYm9Ac29ueS5jb20+CisKKyAgICAgICAgW1dpbl0gRGV0ZWN0IFZpc3Vh
bCBTdHVkaW8gMjAxNyBsb2NhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc1Mjc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLWpzYzoKKyAgICAgICAgKiBTY3JpcHRzL2J1
aWxkLXdlYmtpdDoKKyAgICAgICAgKiBTY3JpcHRzL3VwZGF0ZS12c3doZXJlLnB5OiBBZGRlZC4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdGRpcnMucG06CisKIDIwMTctMTAtMTYgIEVtaWxpbyBD
b2JvcyDDgWx2YXJleiAgPGVtaWxpb0BjcmlzYWwuaW8+CiAKICAgICAgICAgQWRkIEVtaWxpbyBD
b2JvcyDDgWx2YXJleiB0byB0aGUgY29udHJpYnV0b3JzIGxpc3QuCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL2J1aWxkLWpzYyBiL1Rvb2xzL1NjcmlwdHMvYnVpbGQtanNjCmluZGV4IDcyNDM2
MTI3YWIyLi5jY2FhNDQwYjhkYSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9idWlsZC1qc2MK
KysrIGIvVG9vbHMvU2NyaXB0cy9idWlsZC1qc2MKQEAgLTExNyw2ICsxMTcsNyBAQCBpZiAoaXNB
cHBsZVdpbldlYktpdCgpKSB7CiAKIGlmIChpc0pTQ09ubHkoKSAmJiBpc1dpbmRvd3MoKSkgewog
ICAgIChzeXN0ZW0oInB5dGhvbiBUb29scy9TY3JpcHRzL3VwZGF0ZS13ZWJraXQtd2luY2Fpcm8t
bGlicy5weSIpID09IDApIG9yIGRpZTsKKyAgICAoc3lzdGVtKCJweXRob24gVG9vbHMvU2NyaXB0
cy91cGRhdGUtdnN3aGVyZS5weSIpID09IDApIG9yIGRpZTsKIH0KIAogY2hlY2tSZXF1aXJlZFN5
c3RlbUNvbmZpZygpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQgYi9U
b29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAppbmRleCBkN2JhODYwNDQ2YS4uMDcyZTVhYTg2ZWYg
MTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CisrKyBiL1Rvb2xzL1Njcmlw
dHMvYnVpbGQtd2Via2l0CkBAIC0yMzEsNiArMjMxLDEwIEBAIGlmIChpc0FwcGxlQ29jb2FXZWJL
aXQoKSkgewogICAgIChzeXN0ZW0oInBlcmwgVG9vbHMvU2NyaXB0cy91cGRhdGUtd2Via2l0LXN1
cHBvcnQtbGlicyIpID09IDApIG9yIGRpZTsKIH0KIAoraWYgKGlzQW55V2luZG93cygpKSB7Cisg
ICAgKHN5c3RlbSgicHl0aG9uIFRvb2xzL1NjcmlwdHMvdXBkYXRlLXZzd2hlcmUucHkiKSA9PSAw
KSBvciBkaWU7Cit9CisKICMgSWYgYXNrZWQgdG8gYnVpbGQganVzdCB0aGUgV2ViS2l0IHByb2pl
Y3QsIG92ZXJ3cml0ZSB0aGUgcHJvamVjdHMKICMgbGlzdCBhZnRlciBhbGwgb2YgdGhlIHBvcnQg
c3BlY2lmaWMgdHdlYWtzIGhhdmUgYmVlbiBtYWRlIHRvCiAjIGJ1aWxkIG9wdGlvbnMsIGV0Yy4K
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvdXBkYXRlLXZzd2hlcmUucHkgYi9Ub29scy9TY3Jp
cHRzL3VwZGF0ZS12c3doZXJlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi5hMWRjYmZjMDE5YQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvdXBkYXRl
LXZzd2hlcmUucHkKQEAgLTAsMCArMSw0MiBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIwor
IyBDb3B5cmlnaHQgKEMpIDIwMTcgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIworIyAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorIyBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyMgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGltcG9ydGxpYgoraW1w
b3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgc3RhdAorCitkb3dubG9hZCA9IGltcG9ydGxpYi5p
bXBvcnRfbW9kdWxlKCdkb3dubG9hZC1sYXRlc3QtZ2l0aHViLXJlbGVhc2UnKQorCityZXBvID0g
J01pY3Jvc29mdC92c3doZXJlJworZmlsZSA9ICd2c3doZXJlLmV4ZScKK291dHB1dCA9ICdXZWJL
aXRMaWJyYXJpZXMvd2luL3Rvb2xzJworCityZXN1bHQgPSBkb3dubG9hZC5tYWluKFsnLW8nLCBv
dXRwdXQsIHJlcG8sIGZpbGVdKQorCitpZiByZXN1bHQgPT0gZG93bmxvYWQuU3RhdHVzLkNPVUxE
X05PVF9GSU5EOgorICAgIHN5cy5leGl0KDEpCisKK29zLmNobW9kKG9zLnBhdGguam9pbihvdXRw
dXQsIGZpbGUpLCAwNzc3KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBt
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCmluZGV4IDBlYTQwYTQwMmZlLi44NTMzNmQ3
YWZkOSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0ZGlycy5wbQpAQCAtMzUsNiArMzUsOCBAQCB1c2Ugd2FybmluZ3M7CiB1
c2UgQ29uZmlnOwogdXNlIEN3ZCBxdyhyZWFscGF0aCk7CiB1c2UgRGlnZXN0OjpNRDUgcXcobWQ1
X2hleCk7Cit1c2UgRW5jb2RlOwordXNlIEVuY29kZTo6TG9jYWxlOwogdXNlIEZpbmRCaW47CiB1
c2UgRmlsZTo6QmFzZW5hbWU7CiB1c2UgRmlsZTo6RmluZDsKQEAgLTQyLDYgKzQ0LDcgQEAgdXNl
IEZpbGU6OlBhdGggcXcobWFrZV9wYXRoIG1rcGF0aCBybXRyZWUpOwogdXNlIEZpbGU6OlNwZWM7
CiB1c2UgRmlsZTo6VGVtcCBxdyh0ZW1wZGlyKTsKIHVzZSBGaWxlOjpzdGF0OwordXNlIEpTT046
OlBQOwogdXNlIExpc3Q6OlV0aWw7CiB1c2UgUE9TSVg7CiB1c2UgVGltZTo6SGlSZXMgcXcodXNs
ZWVwKTsKQEAgLTE2MCw2ICsxNjMsNyBAQCBteSAkdnNWZXJzaW9uOwogbXkgJHdpbmRvd3NTb3Vy
Y2VEaXI7CiBteSAkd2luVmVyc2lvbjsKIG15ICR3aWxsVXNlVkNFeHByZXNzV2hlbkJ1aWxkaW5n
ID0gMDsKK215ICR2c1doZXJlRm91bmRJbnN0YWxsYXRpb247CiAKICMgRGVmaW5lZCBpbiBWQ1NV
dGlscy4KIHN1YiBleGl0U3RhdHVzKCQpOwpAQCAtNTg5LDYgKzU5Myw0MSBAQCBzdWIgcHJvZ3Jh
bUZpbGVzUGF0aFg4NgogICAgIHJldHVybiAkcHJvZ3JhbUZpbGVzUGF0aFg4NjsKIH0KIAorc3Vi
IHBpY2tWaXN1YWxTdHVkaW9JbnN0YWxsYXRpb24KK3sKKyAgICByZXR1cm4gJHZzV2hlcmVGb3Vu
ZEluc3RhbGxhdGlvbiBpZiBkZWZpbmVkICR2c1doZXJlRm91bmRJbnN0YWxsYXRpb247CisKKyAg
ICAjIFByZWZlciBFbnRlcnByaXNlLCB0aGVuIFByb2Zlc3Npb25hbCwgdGhlbiBDb21tdW5pdHks
IHRoZW4KKyAgICAjIGFueXRoaW5nIGVsc2UgdGhhdCBwcm92aWRlcyBNU0J1aWxkLgorICAgIGZv
cmVhY2ggbXkgJHByb2R1Y3RUeXBlICgoCisgICAgICAgICdNaWNyb3NvZnQuVmlzdWFsU3R1ZGlv
LlByb2R1Y3QuRW50ZXJwcmlzZScsCisgICAgICAgICdNaWNyb3NvZnQuVmlzdWFsU3R1ZGlvLlBy
b2R1Y3QuUHJvZmVzc2lvbmFsJywKKyAgICAgICAgJ01pY3Jvc29mdC5WaXN1YWxTdHVkaW8uUHJv
ZHVjdC5Db21tdW5pdHknLAorICAgICAgICB1bmRlZgorICAgICkpIHsKKyAgICAgICAgbXkgJGNv
bW1hbmQgPSAiV2ViS2l0TGlicmFyaWVzL3dpbi90b29scy92c3doZXJlIC1ub2xvZ28gLWxhdGVz
dCAtZm9ybWF0IGpzb24gLXJlcXVpcmVzIE1pY3Jvc29mdC5Db21wb25lbnQuTVNCdWlsZCI7Cisg
ICAgICAgIGlmIChkZWZpbmVkICRwcm9kdWN0VHlwZSkgeworICAgICAgICAgICAgJGNvbW1hbmQg
Lj0gIiAtcHJvZHVjdHMgJHByb2R1Y3RUeXBlIjsKKyAgICAgICAgfQorICAgICAgICBteSAkdnNX
aGVyZU91dCA9IGAkY29tbWFuZGA7CisgICAgICAgIG15ICRpbnN0YWxsYXRpb25zID0gW107Cisg
ICAgICAgIGV2YWwgeworICAgICAgICAgICAgJGluc3RhbGxhdGlvbnMgPSBkZWNvZGVfanNvbiBF
bmNvZGU6OmVuY29kZSgnVVRGLTgnID0+IEVuY29kZTo6ZGVjb2RlKGNvbnNvbGVfaW4gPT4gJHZz
V2hlcmVPdXQpKTsKKyAgICAgICAgfTsKKyAgICAgICAgcHJpbnQgIkVycm9yIGdldHRpbmcgVmlz
dWFsIFN0dWRpbyBMb2NhdGlvbjogJEBcbiIgaWYgJEA7CisgICAgICAgIHVuZGVmICRAOworCisg
ICAgICAgIGlmIChzY2FsYXIgQCRpbnN0YWxsYXRpb25zKSB7CisgICAgICAgICAgICBteSAkaW5z
dGFsbGF0aW9uID0gJGluc3RhbGxhdGlvbnMtPlswXTsKKyAgICAgICAgICAgICR2c1doZXJlRm91
bmRJbnN0YWxsYXRpb24gPSAkaW5zdGFsbGF0aW9uOworICAgICAgICAgICAgJHZzV2hlcmVGb3Vu
ZEluc3RhbGxhdGlvbi0+e2luc3RhbGxhdGlvblZlcnNpb259ID1+IC9eKChcZCspXC4oXGQrKSkv
OworICAgICAgICAgICAgJHZzV2hlcmVGb3VuZEluc3RhbGxhdGlvbi0+e3Nob3J0VmVyc2lvbn0g
PSAkMTsKKyAgICAgICAgICAgIHJldHVybiAkaW5zdGFsbGF0aW9uOworICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiB1bmRlZjsKK30KKwogc3ViIHZpc3VhbFN0dWRpb0luc3RhbGxEaXIKIHsK
ICAgICByZXR1cm4gJHZzSW5zdGFsbERpciBpZiBkZWZpbmVkICR2c0luc3RhbGxEaXI7CkBAIC01
OTcsOSArNjM2LDkgQEAgc3ViIHZpc3VhbFN0dWRpb0luc3RhbGxEaXIKICAgICAgICAgJHZzSW5z
dGFsbERpciA9ICRFTlZ7J1ZTSU5TVEFMTERJUid9OwogICAgICAgICAkdnNJbnN0YWxsRGlyID1+
IHN8W1xcL10kfHw7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgJHZzSW5zdGFsbERpciA9IEZpbGU6
OlNwZWMtPmNhdGRpcihwcm9ncmFtRmlsZXNQYXRoWDg2KCksICJNaWNyb3NvZnQgVmlzdWFsIFN0
dWRpbyIsICIyMDE3IiwgIkNvbW11bml0eSIpOworICAgICAgICAkdnNJbnN0YWxsRGlyID0gdmlz
dWFsU3R1ZGlvSW5zdGFsbERpclZTV2hlcmUoKTsKICAgICAgICAgaWYgKG5vdCAtZSAkdnNJbnN0
YWxsRGlyKSB7Ci0gICAgICAgICAgICAkdnNJbnN0YWxsRGlyID0gRmlsZTo6U3BlYy0+Y2F0ZGly
KHByb2dyYW1GaWxlc1BhdGhYODYoKSwgIk1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDE0LjAiKTsK
KyAgICAgICAgICAgIGRpZSAiVW5hYmxlIHRvIGZpbmQgVmlzdWFsIFN0dWRpbyAyMDE3IGluc3Rh
bGxhdGlvbiIKICAgICAgICAgfQogICAgIH0KICAgICBjaG9tcCgkdnNJbnN0YWxsRGlyID0gYGN5
Z3BhdGggIiR2c0luc3RhbGxEaXIiYCkgaWYgaXNDeWd3aW4oKTsKQEAgLTYwOCwxMyArNjQ3LDIy
IEBAIHN1YiB2aXN1YWxTdHVkaW9JbnN0YWxsRGlyCiAgICAgcmV0dXJuICR2c0luc3RhbGxEaXI7
CiB9CiAKK3N1YiB2aXN1YWxTdHVkaW9JbnN0YWxsRGlyVlNXaGVyZQoreworICAgIHBpY2tWaXN1
YWxTdHVkaW9JbnN0YWxsYXRpb24oKTsKKyAgICBpZiAoZGVmaW5lZCgkdnNXaGVyZUZvdW5kSW5z
dGFsbGF0aW9uKSkgeworICAgICAgICByZXR1cm4gJHZzV2hlcmVGb3VuZEluc3RhbGxhdGlvbi0+
e2luc3RhbGxhdGlvblBhdGh9OworICAgIH0KKyAgICByZXR1cm4gdW5kZWY7Cit9CisKIHN1YiBt
c0J1aWxkSW5zdGFsbERpcgogewogICAgIHJldHVybiAkbXNCdWlsZEluc3RhbGxEaXIgaWYgZGVm
aW5lZCAkbXNCdWlsZEluc3RhbGxEaXI7CiAKLSAgICAkbXNCdWlsZEluc3RhbGxEaXIgPSBGaWxl
OjpTcGVjLT5jYXRkaXIocHJvZ3JhbUZpbGVzUGF0aFg4NigpLCAiTWljcm9zb2Z0IFZpc3VhbCBT
dHVkaW8iLCAiMjAxNyIsICJDb21tdW5pdHkiLCAiTVNCdWlsZCIsICIxNS4wIiwgIkJpbiIpOwor
ICAgICRtc0J1aWxkSW5zdGFsbERpciA9IG1zQnVpbGRJbnN0YWxsRGlyVlNXaGVyZSgpOwogICAg
IGlmIChub3QgLWUgJG1zQnVpbGRJbnN0YWxsRGlyKSB7Ci0gICAgICAgICRtc0J1aWxkSW5zdGFs
bERpciA9IEZpbGU6OlNwZWMtPmNhdGRpcihwcm9ncmFtRmlsZXNQYXRoWDg2KCksICJNU0J1aWxk
IiwgIjE0LjAiLCAiQmluIik7CisgICAgICAgIGRpZSAiVW5hYmxlIHRvIGZpbmQgTVNCdWlsZCBs
b2NhdGlvbiIKICAgICB9CiAgICAgY2hvbXAoJG1zQnVpbGRJbnN0YWxsRGlyID0gYGN5Z3BhdGgg
IiRtc0J1aWxkSW5zdGFsbERpciJgKSBpZiBpc0N5Z3dpbigpOwogCkBAIC02MjIsMTMgKzY3MCwy
NyBAQCBzdWIgbXNCdWlsZEluc3RhbGxEaXIKICAgICByZXR1cm4gJG1zQnVpbGRJbnN0YWxsRGly
OwogfQogCitzdWIgbXNCdWlsZEluc3RhbGxEaXJWU1doZXJlCit7CisgICAgcGlja1Zpc3VhbFN0
dWRpb0luc3RhbGxhdGlvbigpOworICAgIGlmIChkZWZpbmVkKCR2c1doZXJlRm91bmRJbnN0YWxs
YXRpb24pKSB7CisgICAgICAgIHJldHVybiBGaWxlOjpTcGVjLT5jYXRkaXIoCisgICAgICAgICAg
ICAkdnNXaGVyZUZvdW5kSW5zdGFsbGF0aW9uLT57aW5zdGFsbGF0aW9uUGF0aH0sCisgICAgICAg
ICAgICAiTVNCdWlsZCIsCisgICAgICAgICAgICAkdnNXaGVyZUZvdW5kSW5zdGFsbGF0aW9uLT57
c2hvcnRWZXJzaW9ufSwKKyAgICAgICAgICAgICJCaW4iKTsKKyAgICB9CisgICAgcmV0dXJuIHVu
ZGVmOworfQorCiBzdWIgdmlzdWFsU3R1ZGlvVmVyc2lvbgogewogICAgIHJldHVybiAkdnNWZXJz
aW9uIGlmIGRlZmluZWQgJHZzVmVyc2lvbjsKIAotICAgIG15ICRpbnN0YWxsRGlyID0gdmlzdWFs
U3R1ZGlvSW5zdGFsbERpcigpOwotCi0gICAgJHZzVmVyc2lvbiA9ICgkaW5zdGFsbERpciA9fiAv
TWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gKFswLTldK1wuWzAtOV0qKS8pID8gJDEgOiAiMTQiOwor
ICAgIHBpY2tWaXN1YWxTdHVkaW9JbnN0YWxsYXRpb24oKTsKKyAgICBpZiAoZGVmaW5lZCgkdnNX
aGVyZUZvdW5kSW5zdGFsbGF0aW9uKSkgeworICAgICAgICAkdnNWZXJzaW9uID0gJHZzV2hlcmVG
b3VuZEluc3RhbGxhdGlvbi0+e3Nob3J0VmVyc2lvbn07CisgICAgfQogCiAgICAgcHJpbnQgIlVz
aW5nIFZpc3VhbCBTdHVkaW8gJHZzVmVyc2lvblxuIjsKICAgICByZXR1cm4gJHZzVmVyc2lvbjsK
QEAgLTIwODQsNyArMjE0Niw3IEBAIHN1YiBnZW5lcmF0ZUJ1aWxkU3lzdGVtRnJvbUNNYWtlUHJv
amVjdAogICAgICAgICAgICAgcHVzaCBAYXJncywgIk5pbmphIjsKICAgICAgICAgfQogICAgIH0g
ZWxzaWYgKGlzQW55V2luZG93cygpICYmIGlzV2luNjQoKSkgewotICAgICAgICBwdXNoIEBhcmdz
LCAnLUcgIlZpc3VhbCBTdHVkaW8gMTQgMjAxNSBXaW42NCInOworICAgICAgICBwdXNoIEBhcmdz
LCAnLUcgIlZpc3VhbCBTdHVkaW8gMTUgMjAxNyBXaW42NCInOwogICAgIH0KICAgICAjIERvIG5v
dCBzaG93IHByb2dyZXNzIG9mIGdlbmVyYXRpbmcgYmluZGluZ3MgaW4gaW50ZXJhY3RpdmUgTmlu
amEgYnVpbGQgbm90IHRvIGxlYXZlIG5vaXN5IGxpbmVzIG9uIHR0eQogICAgIHB1c2ggQGFyZ3Ms
ICctRFNIT1dfQklORElOR1NfR0VORVJBVElPTl9QUk9HUkVTUz0xJyB1bmxlc3MgKCR3aWxsVXNl
TmluamEgJiYgLXQgU1RET1VUKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323930</attachid>
            <date>2017-10-16 12:57:25 -0700</date>
            <delta_ts>2017-10-17 11:19:12 -0700</delta_ts>
            <desc>Use vswhere to determine visual studio location - choose generator</desc>
            <filename>175275-7.diff</filename>
            <type>text/plain</type>
            <size>11083</size>
            <attacher name="Stephan Szabo">stephan.szabo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhNThj
ZmE1OWMzYS4uZGIwMDM3NjY5ZGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxNy0xMC0xNiAgU3RlcGhhbiBTemFi
byAgPHN0ZXBoYW4uc3phYm9Ac29ueS5jb20+CisKKyAgICAgICAgW1dpbl0gRGV0ZWN0IFZpc3Vh
bCBTdHVkaW8gMjAxNyBsb2NhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc1Mjc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLWpzYzogR2V0IHZzd2hlcmUgZm9yIHdpbmRv
d3MKKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLXdlYmtpdDogR2V0IHZzd2hlcmUgZm9yIHdpbmRv
d3MKKyAgICAgICAgKiBTY3JpcHRzL3VwZGF0ZS12c3doZXJlLnB5OiBBZGRlZC4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdGRpcnMucG06IEdldCB2cyBsb2NhdGlvbiwgdmVyc2lvbiBhbmQKKyAg
ICAgICAgZ2VuZXJhdG9yIHdpdGggdnN3aGVyZQorCiAyMDE3LTEwLTE2ICBFbWlsaW8gQ29ib3Mg
w4FsdmFyZXogIDxlbWlsaW9AY3Jpc2FsLmlvPgogCiAgICAgICAgIEFkZCBFbWlsaW8gQ29ib3Mg
w4FsdmFyZXogdG8gdGhlIGNvbnRyaWJ1dG9ycyBsaXN0LgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy9idWlsZC1qc2MgYi9Ub29scy9TY3JpcHRzL2J1aWxkLWpzYwppbmRleCA3MjQzNjEyN2Fi
Mi4uY2NhYTQ0MGI4ZGEgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvYnVpbGQtanNjCisrKyBi
L1Rvb2xzL1NjcmlwdHMvYnVpbGQtanNjCkBAIC0xMTcsNiArMTE3LDcgQEAgaWYgKGlzQXBwbGVX
aW5XZWJLaXQoKSkgewogCiBpZiAoaXNKU0NPbmx5KCkgJiYgaXNXaW5kb3dzKCkpIHsKICAgICAo
c3lzdGVtKCJweXRob24gVG9vbHMvU2NyaXB0cy91cGRhdGUtd2Via2l0LXdpbmNhaXJvLWxpYnMu
cHkiKSA9PSAwKSBvciBkaWU7CisgICAgKHN5c3RlbSgicHl0aG9uIFRvb2xzL1NjcmlwdHMvdXBk
YXRlLXZzd2hlcmUucHkiKSA9PSAwKSBvciBkaWU7CiB9CiAKIGNoZWNrUmVxdWlyZWRTeXN0ZW1D
b25maWcoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0IGIvVG9vbHMv
U2NyaXB0cy9idWlsZC13ZWJraXQKaW5kZXggZDdiYTg2MDQ0NmEuLjA3MmU1YWE4NmVmIDEwMDc1
NQotLS0gYS9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAorKysgYi9Ub29scy9TY3JpcHRzL2J1
aWxkLXdlYmtpdApAQCAtMjMxLDYgKzIzMSwxMCBAQCBpZiAoaXNBcHBsZUNvY29hV2ViS2l0KCkp
IHsKICAgICAoc3lzdGVtKCJwZXJsIFRvb2xzL1NjcmlwdHMvdXBkYXRlLXdlYmtpdC1zdXBwb3J0
LWxpYnMiKSA9PSAwKSBvciBkaWU7CiB9CiAKK2lmIChpc0FueVdpbmRvd3MoKSkgeworICAgIChz
eXN0ZW0oInB5dGhvbiBUb29scy9TY3JpcHRzL3VwZGF0ZS12c3doZXJlLnB5IikgPT0gMCkgb3Ig
ZGllOworfQorCiAjIElmIGFza2VkIHRvIGJ1aWxkIGp1c3QgdGhlIFdlYktpdCBwcm9qZWN0LCBv
dmVyd3JpdGUgdGhlIHByb2plY3RzCiAjIGxpc3QgYWZ0ZXIgYWxsIG9mIHRoZSBwb3J0IHNwZWNp
ZmljIHR3ZWFrcyBoYXZlIGJlZW4gbWFkZSB0bwogIyBidWlsZCBvcHRpb25zLCBldGMuCmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL3VwZGF0ZS12c3doZXJlLnB5IGIvVG9vbHMvU2NyaXB0cy91
cGRhdGUtdnN3aGVyZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
YTFkY2JmYzAxOWEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3VwZGF0ZS12c3do
ZXJlLnB5CkBAIC0wLDAgKzEsNDIgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29w
eXJpZ2h0IChDKSAyMDE3IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMKKyMgMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyMgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisjIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBpbXBvcnRsaWIKK2ltcG9ydCBz
eXMKK2ltcG9ydCBvcworaW1wb3J0IHN0YXQKKworZG93bmxvYWQgPSBpbXBvcnRsaWIuaW1wb3J0
X21vZHVsZSgnZG93bmxvYWQtbGF0ZXN0LWdpdGh1Yi1yZWxlYXNlJykKKworcmVwbyA9ICdNaWNy
b3NvZnQvdnN3aGVyZScKK2ZpbGUgPSAndnN3aGVyZS5leGUnCitvdXRwdXQgPSAnV2ViS2l0TGli
cmFyaWVzL3dpbi90b29scycKKworcmVzdWx0ID0gZG93bmxvYWQubWFpbihbJy1vJywgb3V0cHV0
LCByZXBvLCBmaWxlXSkKKworaWYgcmVzdWx0ID09IGRvd25sb2FkLlN0YXR1cy5DT1VMRF9OT1Rf
RklORDoKKyAgICBzeXMuZXhpdCgxKQorCitvcy5jaG1vZChvcy5wYXRoLmpvaW4ob3V0cHV0LCBm
aWxlKSwgMDc3NykKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQppbmRleCAwZWE0MGE0MDJmZS4uOWRhM2FjZDI2ZWEg
MTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdGRpcnMucG0KQEAgLTM1LDYgKzM1LDggQEAgdXNlIHdhcm5pbmdzOwogdXNlIENv
bmZpZzsKIHVzZSBDd2QgcXcocmVhbHBhdGgpOwogdXNlIERpZ2VzdDo6TUQ1IHF3KG1kNV9oZXgp
OwordXNlIEVuY29kZTsKK3VzZSBFbmNvZGU6OkxvY2FsZTsKIHVzZSBGaW5kQmluOwogdXNlIEZp
bGU6OkJhc2VuYW1lOwogdXNlIEZpbGU6OkZpbmQ7CkBAIC00Miw2ICs0NCw3IEBAIHVzZSBGaWxl
OjpQYXRoIHF3KG1ha2VfcGF0aCBta3BhdGggcm10cmVlKTsKIHVzZSBGaWxlOjpTcGVjOwogdXNl
IEZpbGU6OlRlbXAgcXcodGVtcGRpcik7CiB1c2UgRmlsZTo6c3RhdDsKK3VzZSBKU09OOjpQUDsK
IHVzZSBMaXN0OjpVdGlsOwogdXNlIFBPU0lYOwogdXNlIFRpbWU6OkhpUmVzIHF3KHVzbGVlcCk7
CkBAIC0xNjAsNiArMTYzLDggQEAgbXkgJHZzVmVyc2lvbjsKIG15ICR3aW5kb3dzU291cmNlRGly
OwogbXkgJHdpblZlcnNpb247CiBteSAkd2lsbFVzZVZDRXhwcmVzc1doZW5CdWlsZGluZyA9IDA7
CitteSAkdnNXaGVyZUZvdW5kSW5zdGFsbGF0aW9uOworbXkgJHZzV2hlcmVMZWdhY3lJbnN0YWxs
YXRpb247CiAKICMgRGVmaW5lZCBpbiBWQ1NVdGlscy4KIHN1YiBleGl0U3RhdHVzKCQpOwpAQCAt
NTg5LDYgKzU5NCw3NSBAQCBzdWIgcHJvZ3JhbUZpbGVzUGF0aFg4NgogICAgIHJldHVybiAkcHJv
Z3JhbUZpbGVzUGF0aFg4NjsKIH0KIAorc3ViIHBpY2tDdXJyZW50VmlzdWFsU3R1ZGlvSW5zdGFs
bGF0aW9uCit7CisgICAgcmV0dXJuICR2c1doZXJlRm91bmRJbnN0YWxsYXRpb24gaWYgZGVmaW5l
ZCAkdnNXaGVyZUZvdW5kSW5zdGFsbGF0aW9uOworCisgICAgZGV0ZXJtaW5lU291cmNlRGlyKCk7
CisKKyAgICAjIFByZWZlciBFbnRlcnByaXNlLCB0aGVuIFByb2Zlc3Npb25hbCwgdGhlbiBDb21t
dW5pdHksIHRoZW4KKyAgICAjIGFueXRoaW5nIGVsc2UgdGhhdCBwcm92aWRlcyBNU0J1aWxkLgor
ICAgIGZvcmVhY2ggbXkgJHByb2R1Y3RUeXBlICgoCisgICAgICAgICdNaWNyb3NvZnQuVmlzdWFs
U3R1ZGlvLlByb2R1Y3QuRW50ZXJwcmlzZScsCisgICAgICAgICdNaWNyb3NvZnQuVmlzdWFsU3R1
ZGlvLlByb2R1Y3QuUHJvZmVzc2lvbmFsJywKKyAgICAgICAgJ01pY3Jvc29mdC5WaXN1YWxTdHVk
aW8uUHJvZHVjdC5Db21tdW5pdHknLAorICAgICAgICB1bmRlZgorICAgICkpIHsKKyAgICAgICAg
bXkgJGNvbW1hbmQgPSAiJHNvdXJjZURpci9XZWJLaXRMaWJyYXJpZXMvd2luL3Rvb2xzL3Zzd2hl
cmUgLW5vbG9nbyAtbGF0ZXN0IC1mb3JtYXQganNvbiAtcmVxdWlyZXMgTWljcm9zb2Z0LkNvbXBv
bmVudC5NU0J1aWxkIjsKKyAgICAgICAgaWYgKGRlZmluZWQgJHByb2R1Y3RUeXBlKSB7CisgICAg
ICAgICAgICAkY29tbWFuZCAuPSAiIC1wcm9kdWN0cyAkcHJvZHVjdFR5cGUiOworICAgICAgICB9
CisgICAgICAgIG15ICR2c1doZXJlT3V0ID0gYCRjb21tYW5kYDsKKyAgICAgICAgbXkgJGluc3Rh
bGxhdGlvbnMgPSBbXTsKKyAgICAgICAgZXZhbCB7CisgICAgICAgICAgICAkaW5zdGFsbGF0aW9u
cyA9IGRlY29kZV9qc29uIEVuY29kZTo6ZW5jb2RlKCdVVEYtOCcgPT4gRW5jb2RlOjpkZWNvZGUo
Y29uc29sZV9pbiA9PiAkdnNXaGVyZU91dCkpOworICAgICAgICB9OworICAgICAgICBwcmludCAi
RXJyb3IgZ2V0dGluZyBWaXN1YWwgU3R1ZGlvIExvY2F0aW9uOiAkQFxuIiBpZiAkQDsKKyAgICAg
ICAgdW5kZWYgJEA7CisKKyAgICAgICAgaWYgKHNjYWxhciBAJGluc3RhbGxhdGlvbnMpIHsKKyAg
ICAgICAgICAgIG15ICRpbnN0YWxsYXRpb24gPSAkaW5zdGFsbGF0aW9ucy0+WzBdOworICAgICAg
ICAgICAgJHZzV2hlcmVGb3VuZEluc3RhbGxhdGlvbiA9ICRpbnN0YWxsYXRpb247CisgICAgICAg
ICAgICAkdnNXaGVyZUZvdW5kSW5zdGFsbGF0aW9uLT57aW5zdGFsbGF0aW9uVmVyc2lvbn0gPX4g
L14oKFxkKylcLihcZCspKS87CisgICAgICAgICAgICAkdnNXaGVyZUZvdW5kSW5zdGFsbGF0aW9u
LT57c2hvcnRWZXJzaW9ufSA9ICQxOworICAgICAgICAgICAgcmV0dXJuICRpbnN0YWxsYXRpb247
CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHVuZGVmOworfQorCitzdWIgcGlja0xlZ2Fj
eVZpc3VhbFN0dWRpb0luc3RhbGxhdGlvbgoreworICAgIHJldHVybiAkdnNXaGVyZUxlZ2FjeUlu
c3RhbGxhdGlvbiBpZiBkZWZpbmVkICR2c1doZXJlTGVnYWN5SW5zdGFsbGF0aW9uOworCisgICAg
ZGV0ZXJtaW5lU291cmNlRGlyKCk7CisKKyAgICBteSAkdnNXaGVyZU91dCA9IGAkc291cmNlRGly
L1dlYktpdExpYnJhcmllcy93aW4vdG9vbHMvdnN3aGVyZSAtbm9sb2dvIC1sZWdhY3kgLWZvcm1h
dCBqc29uYDsKKyAgICBteSAkaW5zdGFsbGF0aW9uc19hbGwgPSBbXTsKKyAgICBldmFsIHsKKyAg
ICAgICAgJGluc3RhbGxhdGlvbnNfYWxsID0gZGVjb2RlX2pzb24gRW5jb2RlOjplbmNvZGUoJ1VU
Ri04JyA9PiBFbmNvZGU6OmRlY29kZShjb25zb2xlX2luID0+ICR2c1doZXJlT3V0KSk7CisgICAg
fTsKKyAgICBwcmludCAiRXJyb3IgZ2V0dGluZyBWaXN1YWwgU3R1ZGlvIExlZ2FjeSBMb2NhdGlv
bjogJEBcbiIgaWYgJEA7CisgICAgdW5kZWYgJEA7CisKKyAgICAjIEl0J3MgcG9zc2libGUgdGhh
dCBhIG5vbi1sZWdhY3kgaW5zdGFsbGF0aW9uIHdpdGhvdXQgbXNidWlsZAorICAgICMgd291bGQg
bm90IGJlIGZvdW5kIGJ5IHRoZSBsYXRlc3QsIGJ1dCB3b3VsZCBiZSBmb3VuZCBieSB0aGlzCisg
ICAgIyB2c3doZXJlIGNhbGwsIGFuZCB3ZSB3YW50IHRvIHNraXAgdGhvc2UsIHNvIGNoZWNrIGZv
ciB2ZXJzaW9ucworICAgICMgd2l0aCBhbiBpbnN0YWxsYXRpb24gdmVyc2lvbiBiZWZvcmUgMTUu
MC4KKyAgICBteSBAaW5zdGFsbGF0aW9ucyA9IGdyZXAgeyAoKyRfLT57aW5zdGFsbGF0aW9uVmVy
c2lvbn0pIDwgMTUgfSBAJGluc3RhbGxhdGlvbnNfYWxsOworCisgICAgIyBXZSBkb24ndCBnZXQg
bXVjaCBpbmZvcm1hdGlvbiB0aGF0IHdvdWxkIGxldCB1cyBjaG9vc2UgYmV0d2VlbgorICAgICMg
bGVnYWN5IGluc3RhbGxhdGlvbnMsIHNvIHdlJ2xsIHRha2UgdGhlIGZpcnN0LgorICAgIGlmIChz
Y2FsYXIgQGluc3RhbGxhdGlvbnMpIHsKKyAgICAgICAgbXkgJGluc3RhbGxhdGlvbiA9ICRpbnN0
YWxsYXRpb25zWzBdOworICAgICAgICAkaW5zdGFsbGF0aW9uLT57aW5zdGFsbGF0aW9uVmVyc2lv
bn0gPX4gL14oKFxkKylcLihcZCspKS87CisgICAgICAgICRpbnN0YWxsYXRpb24tPntzaG9ydFZl
cnNpb259ID0gJDE7CisgICAgICAgICR2c1doZXJlTGVnYWN5SW5zdGFsbGF0aW9uID0gJGluc3Rh
bGxhdGlvbjsKKyAgICAgICAgcmV0dXJuICRpbnN0YWxsYXRpb247CisgICAgfQorICAgIHJldHVy
biB1bmRlZjsKK30KKwogc3ViIHZpc3VhbFN0dWRpb0luc3RhbGxEaXIKIHsKICAgICByZXR1cm4g
JHZzSW5zdGFsbERpciBpZiBkZWZpbmVkICR2c0luc3RhbGxEaXI7CkBAIC01OTcsOSArNjcxLDkg
QEAgc3ViIHZpc3VhbFN0dWRpb0luc3RhbGxEaXIKICAgICAgICAgJHZzSW5zdGFsbERpciA9ICRF
TlZ7J1ZTSU5TVEFMTERJUid9OwogICAgICAgICAkdnNJbnN0YWxsRGlyID1+IHN8W1xcL10kfHw7
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgJHZzSW5zdGFsbERpciA9IEZpbGU6OlNwZWMtPmNhdGRp
cihwcm9ncmFtRmlsZXNQYXRoWDg2KCksICJNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyIsICIyMDE3
IiwgIkNvbW11bml0eSIpOworICAgICAgICAkdnNJbnN0YWxsRGlyID0gdmlzdWFsU3R1ZGlvSW5z
dGFsbERpclZTV2hlcmUoKTsKICAgICAgICAgaWYgKG5vdCAtZSAkdnNJbnN0YWxsRGlyKSB7Ci0g
ICAgICAgICAgICAkdnNJbnN0YWxsRGlyID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKHByb2dyYW1GaWxl
c1BhdGhYODYoKSwgIk1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDE0LjAiKTsKKyAgICAgICAgICAg
ICR2c0luc3RhbGxEaXIgPSB2aXN1YWxTdHVkaW9JbnN0YWxsRGlyTGVnYWN5KCk7CiAgICAgICAg
IH0KICAgICB9CiAgICAgY2hvbXAoJHZzSW5zdGFsbERpciA9IGBjeWdwYXRoICIkdnNJbnN0YWxs
RGlyImApIGlmIGlzQ3lnd2luKCk7CkBAIC02MDgsMTMgKzY4MiwzMSBAQCBzdWIgdmlzdWFsU3R1
ZGlvSW5zdGFsbERpcgogICAgIHJldHVybiAkdnNJbnN0YWxsRGlyOwogfQogCitzdWIgdmlzdWFs
U3R1ZGlvSW5zdGFsbERpclZTV2hlcmUKK3sKKyAgICBwaWNrQ3VycmVudFZpc3VhbFN0dWRpb0lu
c3RhbGxhdGlvbigpOworICAgIGlmIChkZWZpbmVkKCR2c1doZXJlRm91bmRJbnN0YWxsYXRpb24p
KSB7CisgICAgICAgIHJldHVybiAkdnNXaGVyZUZvdW5kSW5zdGFsbGF0aW9uLT57aW5zdGFsbGF0
aW9uUGF0aH07CisgICAgfQorICAgIHJldHVybiB1bmRlZjsKK30KKworc3ViIHZpc3VhbFN0dWRp
b0luc3RhbGxEaXJMZWdhY3kKK3sKKyAgICBwaWNrTGVnYWN5VmlzdWFsU3R1ZGlvSW5zdGFsbGF0
aW9uKCk7CisgICAgaWYgKGRlZmluZWQoJHZzV2hlcmVMZWdhY3lJbnN0YWxsYXRpb24pKSB7Cisg
ICAgICAgIHJldHVybiAkdnNXaGVyZUxlZ2FjeUluc3RhbGxhdGlvbi0+e2luc3RhbGxhdGlvblBh
dGh9OworICAgIH0KKyAgICByZXR1cm4gRmlsZTo6U3BlYy0+Y2F0ZGlyKHByb2dyYW1GaWxlc1Bh
dGhYODYoKSwgIk1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDE0LjAiKTsKK30KKwogc3ViIG1zQnVp
bGRJbnN0YWxsRGlyCiB7CiAgICAgcmV0dXJuICRtc0J1aWxkSW5zdGFsbERpciBpZiBkZWZpbmVk
ICRtc0J1aWxkSW5zdGFsbERpcjsKIAotICAgICRtc0J1aWxkSW5zdGFsbERpciA9IEZpbGU6OlNw
ZWMtPmNhdGRpcihwcm9ncmFtRmlsZXNQYXRoWDg2KCksICJNaWNyb3NvZnQgVmlzdWFsIFN0dWRp
byIsICIyMDE3IiwgIkNvbW11bml0eSIsICJNU0J1aWxkIiwgIjE1LjAiLCAiQmluIik7CisgICAg
JG1zQnVpbGRJbnN0YWxsRGlyID0gbXNCdWlsZEluc3RhbGxEaXJWU1doZXJlKCk7CiAgICAgaWYg
KG5vdCAtZSAkbXNCdWlsZEluc3RhbGxEaXIpIHsKLSAgICAgICAgJG1zQnVpbGRJbnN0YWxsRGly
ID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKHByb2dyYW1GaWxlc1BhdGhYODYoKSwgIk1TQnVpbGQiLCAi
MTQuMCIsICJCaW4iKTsKKyAgICAgICAgJG1zQnVpbGRJbnN0YWxsRGlyID0gbXNCdWlsZEluc3Rh
bGxEaXJMZWdhY3koKTsKICAgICB9CiAgICAgY2hvbXAoJG1zQnVpbGRJbnN0YWxsRGlyID0gYGN5
Z3BhdGggIiRtc0J1aWxkSW5zdGFsbERpciJgKSBpZiBpc0N5Z3dpbigpOwogCkBAIC02MjIsMTMg
KzcxNCw0NCBAQCBzdWIgbXNCdWlsZEluc3RhbGxEaXIKICAgICByZXR1cm4gJG1zQnVpbGRJbnN0
YWxsRGlyOwogfQogCitzdWIgbXNCdWlsZEluc3RhbGxEaXJWU1doZXJlCit7CisgICAgcGlja0N1
cnJlbnRWaXN1YWxTdHVkaW9JbnN0YWxsYXRpb24oKTsKKyAgICBpZiAoZGVmaW5lZCgkdnNXaGVy
ZUZvdW5kSW5zdGFsbGF0aW9uKSkgeworICAgICAgICByZXR1cm4gRmlsZTo6U3BlYy0+Y2F0ZGly
KAorICAgICAgICAgICAgJHZzV2hlcmVGb3VuZEluc3RhbGxhdGlvbi0+e2luc3RhbGxhdGlvblBh
dGh9LAorICAgICAgICAgICAgIk1TQnVpbGQiLAorICAgICAgICAgICAgJHZzV2hlcmVGb3VuZElu
c3RhbGxhdGlvbi0+e3Nob3J0VmVyc2lvbn0sCisgICAgICAgICAgICAiQmluIik7CisgICAgfQor
ICAgIHJldHVybiB1bmRlZjsKK30KKworc3ViIG1zQnVpbGRJbnN0YWxsRGlyTGVnYWN5IHsKKyAg
ICByZXR1cm4gRmlsZTo6U3BlYy0+Y2F0ZGlyKHByb2dyYW1GaWxlc1BhdGhYODYoKSwgIk1TQnVp
bGQiLCAiMTQuMCIsICJCaW4iKTsKK30KKwogc3ViIHZpc3VhbFN0dWRpb1ZlcnNpb24KIHsKICAg
ICByZXR1cm4gJHZzVmVyc2lvbiBpZiBkZWZpbmVkICR2c1ZlcnNpb247CiAKLSAgICBteSAkaW5z
dGFsbERpciA9IHZpc3VhbFN0dWRpb0luc3RhbGxEaXIoKTsKKyAgICBwaWNrQ3VycmVudFZpc3Vh
bFN0dWRpb0luc3RhbGxhdGlvbigpOworICAgIGlmIChkZWZpbmVkKCR2c1doZXJlRm91bmRJbnN0
YWxsYXRpb24pKSB7CisgICAgICAgICR2c1ZlcnNpb24gPSAkdnNXaGVyZUZvdW5kSW5zdGFsbGF0
aW9uLT57c2hvcnRWZXJzaW9ufTsKKyAgICB9CisKKyAgICBpZiAoIWRlZmluZWQoJHZzVmVyc2lv
bikpIHsKKyAgICAgICAgcGlja0xlZ2FjeVZpc3VhbFN0dWRpb0luc3RhbGxhdGlvbigpOworICAg
ICAgICBpZiAoZGVmaW5lZCgkdnNXaGVyZUxlZ2FjeUluc3RhbGxhdGlvbikpIHsKKyAgICAgICAg
ICAgICR2c1ZlcnNpb24gPSAkdnNXaGVyZUxlZ2FjeUluc3RhbGxhdGlvbi0+e3Nob3J0VmVyc2lv
bn07CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWRlZmluZWQoJHZzVmVyc2lvbikpIHsK
KyAgICAgICAgbXkgJGluc3RhbGxEaXIgPSB2aXN1YWxTdHVkaW9JbnN0YWxsRGlyKCk7CiAKLSAg
ICAkdnNWZXJzaW9uID0gKCRpbnN0YWxsRGlyID1+IC9NaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAo
WzAtOV0rXC5bMC05XSopLykgPyAkMSA6ICIxNCI7CisgICAgICAgICR2c1ZlcnNpb24gPSAoJGlu
c3RhbGxEaXIgPX4gL01pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIChbMC05XStcLlswLTldKikvKSA/
ICQxIDogIjE0IjsKKyAgICB9CiAKICAgICBwcmludCAiVXNpbmcgVmlzdWFsIFN0dWRpbyAkdnNW
ZXJzaW9uXG4iOwogICAgIHJldHVybiAkdnNWZXJzaW9uOwpAQCAtMjA4NCw3ICsyMjA3LDExIEBA
IHN1YiBnZW5lcmF0ZUJ1aWxkU3lzdGVtRnJvbUNNYWtlUHJvamVjdAogICAgICAgICAgICAgcHVz
aCBAYXJncywgIk5pbmphIjsKICAgICAgICAgfQogICAgIH0gZWxzaWYgKGlzQW55V2luZG93cygp
ICYmIGlzV2luNjQoKSkgewotICAgICAgICBwdXNoIEBhcmdzLCAnLUcgIlZpc3VhbCBTdHVkaW8g
MTQgMjAxNSBXaW42NCInOworICAgICAgICBpZiAoK3Zpc3VhbFN0dWRpb1ZlcnNpb24oKSA+PSAx
NSkgeworICAgICAgICAgICAgcHVzaCBAYXJncywgJy1HICJWaXN1YWwgU3R1ZGlvIDE1IDIwMTcg
V2luNjQiJzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHB1c2ggQGFyZ3MsICctRyAi
VmlzdWFsIFN0dWRpbyAxNCAyMDE1IFdpbjY0Iic7CisgICAgICAgIH0KICAgICB9CiAgICAgIyBE
byBub3Qgc2hvdyBwcm9ncmVzcyBvZiBnZW5lcmF0aW5nIGJpbmRpbmdzIGluIGludGVyYWN0aXZl
IE5pbmphIGJ1aWxkIG5vdCB0byBsZWF2ZSBub2lzeSBsaW5lcyBvbiB0dHkKICAgICBwdXNoIEBh
cmdzLCAnLURTSE9XX0JJTkRJTkdTX0dFTkVSQVRJT05fUFJPR1JFU1M9MScgdW5sZXNzICgkd2ls
bFVzZU5pbmphICYmIC10IFNURE9VVCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>324032</attachid>
            <date>2017-10-17 11:19:12 -0700</date>
            <delta_ts>2017-10-26 20:02:46 -0700</delta_ts>
            <desc>Use vswhere to determine visual studio location - choose generator</desc>
            <filename>175275-8.diff</filename>
            <type>text/plain</type>
            <size>11868</size>
            <attacher name="Stephan Szabo">stephan.szabo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxYzBm
ZjZmNDNkYy4uYzA2NjA5Njc4NzIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAxNy0xMC0xNyAgU3RlcGhhbiBTemFi
byAgPHN0ZXBoYW4uc3phYm9Ac29ueS5jb20+CisKKyAgICAgICAgW1dpbl0gRGV0ZWN0IFZpc3Vh
bCBTdHVkaW8gMjAxNyBsb2NhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc1Mjc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLWpzYzoKKyAgICAgICAgKiBTY3JpcHRzL2J1
aWxkLXdlYmtpdDoKKyAgICAgICAgKiBTY3JpcHRzL3VwZGF0ZS12c3doZXJlLnB5OiBBZGRlZC4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdGRpcnMucG06CisgICAgICAgIChwaWNrQ3VycmVudFZp
c3VhbFN0dWRpb0luc3RhbGxhdGlvbik6CisgICAgICAgIChwaWNrTGVnYWN5VmlzdWFsU3R1ZGlv
SW5zdGFsbGF0aW9uKToKKyAgICAgICAgKHZpc3VhbFN0dWRpb0luc3RhbGxEaXIpOgorICAgICAg
ICAodmlzdWFsU3R1ZGlvSW5zdGFsbERpclZTV2hlcmUpOgorICAgICAgICAodmlzdWFsU3R1ZGlv
SW5zdGFsbERpckxlZ2FjeSk6CisgICAgICAgIChtc0J1aWxkSW5zdGFsbERpcik6CisgICAgICAg
IChtc0J1aWxkSW5zdGFsbERpcnNWU1doZXJlKToKKyAgICAgICAgKG1zQnVpbGRJbnN0YWxsRGly
TGVnYWN5KToKKyAgICAgICAgKHZpc3VhbFN0dWRpb1ZlcnNpb24pOgorICAgICAgICAoZ2VuZXJh
dGVCdWlsZFN5c3RlbUZyb21DTWFrZVByb2plY3QpOgorCiAyMDE3LTEwLTE2ICBSb3NzIEtpcnNs
aW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KIAogICAgICAgICBydW4td2Via2l0LXRlc3Rz
IGhlbHAgdGV4dCBzaG91bGQgbWVudGlvbiBhcmd1bWVudHMgdG9vCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL2J1aWxkLWpzYyBiL1Rvb2xzL1NjcmlwdHMvYnVpbGQtanNjCmluZGV4IDcyNDM2
MTI3YWIyLi5jY2FhNDQwYjhkYSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9idWlsZC1qc2MK
KysrIGIvVG9vbHMvU2NyaXB0cy9idWlsZC1qc2MKQEAgLTExNyw2ICsxMTcsNyBAQCBpZiAoaXNB
cHBsZVdpbldlYktpdCgpKSB7CiAKIGlmIChpc0pTQ09ubHkoKSAmJiBpc1dpbmRvd3MoKSkgewog
ICAgIChzeXN0ZW0oInB5dGhvbiBUb29scy9TY3JpcHRzL3VwZGF0ZS13ZWJraXQtd2luY2Fpcm8t
bGlicy5weSIpID09IDApIG9yIGRpZTsKKyAgICAoc3lzdGVtKCJweXRob24gVG9vbHMvU2NyaXB0
cy91cGRhdGUtdnN3aGVyZS5weSIpID09IDApIG9yIGRpZTsKIH0KIAogY2hlY2tSZXF1aXJlZFN5
c3RlbUNvbmZpZygpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQgYi9U
b29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAppbmRleCBkN2JhODYwNDQ2YS4uMDcyZTVhYTg2ZWYg
MTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CisrKyBiL1Rvb2xzL1Njcmlw
dHMvYnVpbGQtd2Via2l0CkBAIC0yMzEsNiArMjMxLDEwIEBAIGlmIChpc0FwcGxlQ29jb2FXZWJL
aXQoKSkgewogICAgIChzeXN0ZW0oInBlcmwgVG9vbHMvU2NyaXB0cy91cGRhdGUtd2Via2l0LXN1
cHBvcnQtbGlicyIpID09IDApIG9yIGRpZTsKIH0KIAoraWYgKGlzQW55V2luZG93cygpKSB7Cisg
ICAgKHN5c3RlbSgicHl0aG9uIFRvb2xzL1NjcmlwdHMvdXBkYXRlLXZzd2hlcmUucHkiKSA9PSAw
KSBvciBkaWU7Cit9CisKICMgSWYgYXNrZWQgdG8gYnVpbGQganVzdCB0aGUgV2ViS2l0IHByb2pl
Y3QsIG92ZXJ3cml0ZSB0aGUgcHJvamVjdHMKICMgbGlzdCBhZnRlciBhbGwgb2YgdGhlIHBvcnQg
c3BlY2lmaWMgdHdlYWtzIGhhdmUgYmVlbiBtYWRlIHRvCiAjIGJ1aWxkIG9wdGlvbnMsIGV0Yy4K
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvdXBkYXRlLXZzd2hlcmUucHkgYi9Ub29scy9TY3Jp
cHRzL3VwZGF0ZS12c3doZXJlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi5hMWRjYmZjMDE5YQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvdXBkYXRl
LXZzd2hlcmUucHkKQEAgLTAsMCArMSw0MiBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIwor
IyBDb3B5cmlnaHQgKEMpIDIwMTcgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIworIyAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorIyBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyMgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGltcG9ydGxpYgoraW1w
b3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgc3RhdAorCitkb3dubG9hZCA9IGltcG9ydGxpYi5p
bXBvcnRfbW9kdWxlKCdkb3dubG9hZC1sYXRlc3QtZ2l0aHViLXJlbGVhc2UnKQorCityZXBvID0g
J01pY3Jvc29mdC92c3doZXJlJworZmlsZSA9ICd2c3doZXJlLmV4ZScKK291dHB1dCA9ICdXZWJL
aXRMaWJyYXJpZXMvd2luL3Rvb2xzJworCityZXN1bHQgPSBkb3dubG9hZC5tYWluKFsnLW8nLCBv
dXRwdXQsIHJlcG8sIGZpbGVdKQorCitpZiByZXN1bHQgPT0gZG93bmxvYWQuU3RhdHVzLkNPVUxE
X05PVF9GSU5EOgorICAgIHN5cy5leGl0KDEpCisKK29zLmNobW9kKG9zLnBhdGguam9pbihvdXRw
dXQsIGZpbGUpLCAwNzc3KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBt
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCmluZGV4IDBlYTQwYTQwMmZlLi42NmNlYTZk
YWE0MCAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0ZGlycy5wbQpAQCAtMzUsNiArMzUsOCBAQCB1c2Ugd2FybmluZ3M7CiB1
c2UgQ29uZmlnOwogdXNlIEN3ZCBxdyhyZWFscGF0aCk7CiB1c2UgRGlnZXN0OjpNRDUgcXcobWQ1
X2hleCk7Cit1c2UgRW5jb2RlOwordXNlIEVuY29kZTo6TG9jYWxlOwogdXNlIEZpbmRCaW47CiB1
c2UgRmlsZTo6QmFzZW5hbWU7CiB1c2UgRmlsZTo6RmluZDsKQEAgLTQyLDYgKzQ0LDcgQEAgdXNl
IEZpbGU6OlBhdGggcXcobWFrZV9wYXRoIG1rcGF0aCBybXRyZWUpOwogdXNlIEZpbGU6OlNwZWM7
CiB1c2UgRmlsZTo6VGVtcCBxdyh0ZW1wZGlyKTsKIHVzZSBGaWxlOjpzdGF0OwordXNlIEpTT046
OlBQOwogdXNlIExpc3Q6OlV0aWw7CiB1c2UgUE9TSVg7CiB1c2UgVGltZTo6SGlSZXMgcXcodXNs
ZWVwKTsKQEAgLTE2MCw2ICsxNjMsOCBAQCBteSAkdnNWZXJzaW9uOwogbXkgJHdpbmRvd3NTb3Vy
Y2VEaXI7CiBteSAkd2luVmVyc2lvbjsKIG15ICR3aWxsVXNlVkNFeHByZXNzV2hlbkJ1aWxkaW5n
ID0gMDsKK215ICR2c1doZXJlRm91bmRJbnN0YWxsYXRpb247CitteSAkdnNXaGVyZUxlZ2FjeUlu
c3RhbGxhdGlvbjsKIAogIyBEZWZpbmVkIGluIFZDU1V0aWxzLgogc3ViIGV4aXRTdGF0dXMoJCk7
CkBAIC01ODksNiArNTk0LDc4IEBAIHN1YiBwcm9ncmFtRmlsZXNQYXRoWDg2CiAgICAgcmV0dXJu
ICRwcm9ncmFtRmlsZXNQYXRoWDg2OwogfQogCitzdWIgcGlja0N1cnJlbnRWaXN1YWxTdHVkaW9J
bnN0YWxsYXRpb24KK3sKKyAgICByZXR1cm4gJHZzV2hlcmVGb3VuZEluc3RhbGxhdGlvbiBpZiBk
ZWZpbmVkICR2c1doZXJlRm91bmRJbnN0YWxsYXRpb247CisKKyAgICBkZXRlcm1pbmVTb3VyY2VE
aXIoKTsKKworICAgICMgUHJlZmVyIEVudGVycHJpc2UsIHRoZW4gUHJvZmVzc2lvbmFsLCB0aGVu
IENvbW11bml0eSwgdGhlbgorICAgICMgYW55dGhpbmcgZWxzZSB0aGF0IHByb3ZpZGVzIE1TQnVp
bGQuCisgICAgZm9yZWFjaCBteSAkcHJvZHVjdFR5cGUgKCgKKyAgICAgICAgJ01pY3Jvc29mdC5W
aXN1YWxTdHVkaW8uUHJvZHVjdC5FbnRlcnByaXNlJywKKyAgICAgICAgJ01pY3Jvc29mdC5WaXN1
YWxTdHVkaW8uUHJvZHVjdC5Qcm9mZXNzaW9uYWwnLAorICAgICAgICAnTWljcm9zb2Z0LlZpc3Vh
bFN0dWRpby5Qcm9kdWN0LkNvbW11bml0eScsCisgICAgICAgIHVuZGVmCisgICAgKSkgeworICAg
ICAgICBteSAkY29tbWFuZCA9ICIkc291cmNlRGlyL1dlYktpdExpYnJhcmllcy93aW4vdG9vbHMv
dnN3aGVyZSAtbm9sb2dvIC1sYXRlc3QgLWZvcm1hdCBqc29uIC1yZXF1aXJlcyBNaWNyb3NvZnQu
Q29tcG9uZW50Lk1TQnVpbGQiOworICAgICAgICBpZiAoZGVmaW5lZCAkcHJvZHVjdFR5cGUpIHsK
KyAgICAgICAgICAgICRjb21tYW5kIC49ICIgLXByb2R1Y3RzICRwcm9kdWN0VHlwZSI7CisgICAg
ICAgIH0KKyAgICAgICAgbXkgJHZzV2hlcmVPdXQgPSBgJGNvbW1hbmRgOworICAgICAgICBteSAk
aW5zdGFsbGF0aW9ucyA9IFtdOworICAgICAgICBldmFsIHsKKyAgICAgICAgICAgICRpbnN0YWxs
YXRpb25zID0gZGVjb2RlX2pzb24gRW5jb2RlOjplbmNvZGUoJ1VURi04JyA9PiBFbmNvZGU6OmRl
Y29kZShjb25zb2xlX2luID0+ICR2c1doZXJlT3V0KSk7CisgICAgICAgIH07CisgICAgICAgIHBy
aW50ICJFcnJvciBnZXR0aW5nIFZpc3VhbCBTdHVkaW8gTG9jYXRpb246ICRAXG4iIGlmICRAOwor
ICAgICAgICB1bmRlZiAkQDsKKworICAgICAgICBpZiAoc2NhbGFyIEAkaW5zdGFsbGF0aW9ucykg
eworICAgICAgICAgICAgbXkgJGluc3RhbGxhdGlvbiA9ICRpbnN0YWxsYXRpb25zLT5bMF07Cisg
ICAgICAgICAgICAkdnNXaGVyZUZvdW5kSW5zdGFsbGF0aW9uID0gJGluc3RhbGxhdGlvbjsKKyAg
ICAgICAgICAgICR2c1doZXJlRm91bmRJbnN0YWxsYXRpb24tPntpbnN0YWxsYXRpb25WZXJzaW9u
fSA9fiAvXigoXGQrKVwuKFxkKykpLzsKKyAgICAgICAgICAgICR2c1doZXJlRm91bmRJbnN0YWxs
YXRpb24tPntzaG9ydFZlcnNpb259ID0gJDE7CisgICAgICAgICAgICAkdnNXaGVyZUZvdW5kSW5z
dGFsbGF0aW9uLT57bWFqb3JWZXJzaW9ufSA9ICQyOworICAgICAgICAgICAgcmV0dXJuICRpbnN0
YWxsYXRpb247CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHVuZGVmOworfQorCitzdWIg
cGlja0xlZ2FjeVZpc3VhbFN0dWRpb0luc3RhbGxhdGlvbgoreworICAgIHJldHVybiAkdnNXaGVy
ZUxlZ2FjeUluc3RhbGxhdGlvbiBpZiBkZWZpbmVkICR2c1doZXJlTGVnYWN5SW5zdGFsbGF0aW9u
OworCisgICAgZGV0ZXJtaW5lU291cmNlRGlyKCk7CisKKyAgICBteSAkdnNXaGVyZU91dCA9IGAk
c291cmNlRGlyL1dlYktpdExpYnJhcmllcy93aW4vdG9vbHMvdnN3aGVyZSAtbm9sb2dvIC1sZWdh
Y3kgLWZvcm1hdCBqc29uYDsKKyAgICBteSAkaW5zdGFsbGF0aW9uc19hbGwgPSBbXTsKKyAgICBl
dmFsIHsKKyAgICAgICAgJGluc3RhbGxhdGlvbnNfYWxsID0gZGVjb2RlX2pzb24gRW5jb2RlOjpl
bmNvZGUoJ1VURi04JyA9PiBFbmNvZGU6OmRlY29kZShjb25zb2xlX2luID0+ICR2c1doZXJlT3V0
KSk7CisgICAgfTsKKyAgICBwcmludCAiRXJyb3IgZ2V0dGluZyBWaXN1YWwgU3R1ZGlvIExlZ2Fj
eSBMb2NhdGlvbjogJEBcbiIgaWYgJEA7CisgICAgdW5kZWYgJEA7CisKKyAgICAjIEl0J3MgcG9z
c2libGUgdGhhdCBhIG5vbi1sZWdhY3kgaW5zdGFsbGF0aW9uIHdpdGhvdXQgbXNidWlsZAorICAg
ICMgd291bGQgbm90IGJlIGZvdW5kIGJ5IHRoZSBsYXRlc3QsIGJ1dCB3b3VsZCBiZSBmb3VuZCBi
eSB0aGlzCisgICAgIyB2c3doZXJlIGNhbGwsIGFuZCB3ZSB3YW50IHRvIHNraXAgdGhvc2UsIHNv
IGNoZWNrIGZvciB2ZXJzaW9ucworICAgICMgd2l0aCBhbiBpbnN0YWxsYXRpb24gdmVyc2lvbiBi
ZWZvcmUgMTUuMC4KKyAgICBteSBAaW5zdGFsbGF0aW9ucyA9IGdyZXAgeyAoKyRfLT57aW5zdGFs
bGF0aW9uVmVyc2lvbn0pIDwgMTUgfSBAJGluc3RhbGxhdGlvbnNfYWxsOworCisgICAgIyBXZSBk
b24ndCBnZXQgbXVjaCBpbmZvcm1hdGlvbiB0aGF0IHdvdWxkIGxldCB1cyBjaG9vc2UgYmV0d2Vl
bgorICAgICMgbGVnYWN5IGluc3RhbGxhdGlvbnMsIHNvIHdlJ2xsIHRha2UgdGhlIGZpcnN0Lgor
ICAgIGlmIChzY2FsYXIgQGluc3RhbGxhdGlvbnMpIHsKKyAgICAgICAgbXkgJGluc3RhbGxhdGlv
biA9ICRpbnN0YWxsYXRpb25zWzBdOworICAgICAgICAkaW5zdGFsbGF0aW9uLT57aW5zdGFsbGF0
aW9uVmVyc2lvbn0gPX4gL14oKFxkKylcLihcZCspKS87CisgICAgICAgICRpbnN0YWxsYXRpb24t
PntzaG9ydFZlcnNpb259ID0gJDE7CisgICAgICAgICRpbnN0YWxsYXRpb24tPnttYWpvclZlcnNp
b259ID0gJDI7CisKKyAgICAgICAgJHZzV2hlcmVMZWdhY3lJbnN0YWxsYXRpb24gPSAkaW5zdGFs
bGF0aW9uOworICAgICAgICByZXR1cm4gJGluc3RhbGxhdGlvbjsKKyAgICB9CisgICAgcmV0dXJu
IHVuZGVmOworfQorCiBzdWIgdmlzdWFsU3R1ZGlvSW5zdGFsbERpcgogewogICAgIHJldHVybiAk
dnNJbnN0YWxsRGlyIGlmIGRlZmluZWQgJHZzSW5zdGFsbERpcjsKQEAgLTU5Nyw5ICs2NzQsOSBA
QCBzdWIgdmlzdWFsU3R1ZGlvSW5zdGFsbERpcgogICAgICAgICAkdnNJbnN0YWxsRGlyID0gJEVO
VnsnVlNJTlNUQUxMRElSJ307CiAgICAgICAgICR2c0luc3RhbGxEaXIgPX4gc3xbXFwvXSR8fDsK
ICAgICB9IGVsc2UgewotICAgICAgICAkdnNJbnN0YWxsRGlyID0gRmlsZTo6U3BlYy0+Y2F0ZGly
KHByb2dyYW1GaWxlc1BhdGhYODYoKSwgIk1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIiwgIjIwMTci
LCAiQ29tbXVuaXR5Iik7CisgICAgICAgICR2c0luc3RhbGxEaXIgPSB2aXN1YWxTdHVkaW9JbnN0
YWxsRGlyVlNXaGVyZSgpOwogICAgICAgICBpZiAobm90IC1lICR2c0luc3RhbGxEaXIpIHsKLSAg
ICAgICAgICAgICR2c0luc3RhbGxEaXIgPSBGaWxlOjpTcGVjLT5jYXRkaXIocHJvZ3JhbUZpbGVz
UGF0aFg4NigpLCAiTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMTQuMCIpOworICAgICAgICAgICAg
JHZzSW5zdGFsbERpciA9IHZpc3VhbFN0dWRpb0luc3RhbGxEaXJMZWdhY3koKTsKICAgICAgICAg
fQogICAgIH0KICAgICBjaG9tcCgkdnNJbnN0YWxsRGlyID0gYGN5Z3BhdGggIiR2c0luc3RhbGxE
aXIiYCkgaWYgaXNDeWd3aW4oKTsKQEAgLTYwOCwxMyArNjg1LDMyIEBAIHN1YiB2aXN1YWxTdHVk
aW9JbnN0YWxsRGlyCiAgICAgcmV0dXJuICR2c0luc3RhbGxEaXI7CiB9CiAKK3N1YiB2aXN1YWxT
dHVkaW9JbnN0YWxsRGlyVlNXaGVyZQoreworICAgIHBpY2tDdXJyZW50VmlzdWFsU3R1ZGlvSW5z
dGFsbGF0aW9uKCk7CisgICAgaWYgKGRlZmluZWQoJHZzV2hlcmVGb3VuZEluc3RhbGxhdGlvbikp
IHsKKyAgICAgICAgcmV0dXJuICR2c1doZXJlRm91bmRJbnN0YWxsYXRpb24tPntpbnN0YWxsYXRp
b25QYXRofTsKKyAgICB9CisgICAgcmV0dXJuIHVuZGVmOworfQorCitzdWIgdmlzdWFsU3R1ZGlv
SW5zdGFsbERpckxlZ2FjeQoreworICAgIHBpY2tMZWdhY3lWaXN1YWxTdHVkaW9JbnN0YWxsYXRp
b24oKTsKKyAgICBpZiAoZGVmaW5lZCgkdnNXaGVyZUxlZ2FjeUluc3RhbGxhdGlvbikpIHsKKyAg
ICAgICAgcmV0dXJuICR2c1doZXJlTGVnYWN5SW5zdGFsbGF0aW9uLT57aW5zdGFsbGF0aW9uUGF0
aH07CisgICAgfQorICAgIHJldHVybiBGaWxlOjpTcGVjLT5jYXRkaXIocHJvZ3JhbUZpbGVzUGF0
aFg4NigpLCAiTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMTQuMCIpOworfQorCiBzdWIgbXNCdWls
ZEluc3RhbGxEaXIKIHsKICAgICByZXR1cm4gJG1zQnVpbGRJbnN0YWxsRGlyIGlmIGRlZmluZWQg
JG1zQnVpbGRJbnN0YWxsRGlyOwogCi0gICAgJG1zQnVpbGRJbnN0YWxsRGlyID0gRmlsZTo6U3Bl
Yy0+Y2F0ZGlyKHByb2dyYW1GaWxlc1BhdGhYODYoKSwgIk1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlv
IiwgIjIwMTciLCAiQ29tbXVuaXR5IiwgIk1TQnVpbGQiLCAiMTUuMCIsICJCaW4iKTsKLSAgICBp
ZiAobm90IC1lICRtc0J1aWxkSW5zdGFsbERpcikgewotICAgICAgICAkbXNCdWlsZEluc3RhbGxE
aXIgPSBGaWxlOjpTcGVjLT5jYXRkaXIocHJvZ3JhbUZpbGVzUGF0aFg4NigpLCAiTVNCdWlsZCIs
ICIxNC4wIiwgIkJpbiIpOworICAgIG15IEBtc0J1aWxkUG9zc2libGVJbnN0YWxsRGlycyA9IG1z
QnVpbGRJbnN0YWxsRGlyc1ZTV2hlcmUoKTsKKyAgICAkbXNCdWlsZEluc3RhbGxEaXIgPSAoZ3Jl
cCB7IC1lICRfIH0gQG1zQnVpbGRQb3NzaWJsZUluc3RhbGxEaXJzKVswXTsKKyAgICBpZiAobm90
IGRlZmluZWQgJG1zQnVpbGRJbnN0YWxsRGlyKSB7CisgICAgICAgICRtc0J1aWxkSW5zdGFsbERp
ciA9IG1zQnVpbGRJbnN0YWxsRGlyTGVnYWN5KCk7CiAgICAgfQogICAgIGNob21wKCRtc0J1aWxk
SW5zdGFsbERpciA9IGBjeWdwYXRoICIkbXNCdWlsZEluc3RhbGxEaXIiYCkgaWYgaXNDeWd3aW4o
KTsKIApAQCAtNjIyLDEzICs3MTgsNTEgQEAgc3ViIG1zQnVpbGRJbnN0YWxsRGlyCiAgICAgcmV0
dXJuICRtc0J1aWxkSW5zdGFsbERpcjsKIH0KIAorc3ViIG1zQnVpbGRJbnN0YWxsRGlyc1ZTV2hl
cmUKK3sKKyAgICBwaWNrQ3VycmVudFZpc3VhbFN0dWRpb0luc3RhbGxhdGlvbigpOworICAgIGlm
IChkZWZpbmVkKCR2c1doZXJlRm91bmRJbnN0YWxsYXRpb24pKSB7CisgICAgICAgIHJldHVybiAo
CisgICAgICAgICAgICBGaWxlOjpTcGVjLT5jYXRkaXIoCisgICAgICAgICAgICAgICAgJHZzV2hl
cmVGb3VuZEluc3RhbGxhdGlvbi0+e2luc3RhbGxhdGlvblBhdGh9LAorICAgICAgICAgICAgICAg
ICJNU0J1aWxkIiwKKyAgICAgICAgICAgICAgICAkdnNXaGVyZUZvdW5kSW5zdGFsbGF0aW9uLT57
c2hvcnRWZXJzaW9ufSwKKyAgICAgICAgICAgICAgICAiQmluIiksCisgICAgICAgICAgICBGaWxl
OjpTcGVjLT5jYXRkaXIoCisgICAgICAgICAgICAgICAgJHZzV2hlcmVGb3VuZEluc3RhbGxhdGlv
bi0+e2luc3RhbGxhdGlvblBhdGh9LAorICAgICAgICAgICAgICAgICJNU0J1aWxkIiwKKyAgICAg
ICAgICAgICAgICAkdnNXaGVyZUZvdW5kSW5zdGFsbGF0aW9uLT57bWFqb3JWZXJzaW9ufS4iLjAi
LAorICAgICAgICAgICAgICAgICJCaW4iKSwKKyAgICAgICAgKTsKKyAgICB9CisgICAgcmV0dXJu
ICgpOworfQorCitzdWIgbXNCdWlsZEluc3RhbGxEaXJMZWdhY3kgeworICAgIHJldHVybiBGaWxl
OjpTcGVjLT5jYXRkaXIocHJvZ3JhbUZpbGVzUGF0aFg4NigpLCAiTVNCdWlsZCIsICIxNC4wIiwg
IkJpbiIpOworfQorCiBzdWIgdmlzdWFsU3R1ZGlvVmVyc2lvbgogewogICAgIHJldHVybiAkdnNW
ZXJzaW9uIGlmIGRlZmluZWQgJHZzVmVyc2lvbjsKIAotICAgIG15ICRpbnN0YWxsRGlyID0gdmlz
dWFsU3R1ZGlvSW5zdGFsbERpcigpOworICAgIHBpY2tDdXJyZW50VmlzdWFsU3R1ZGlvSW5zdGFs
bGF0aW9uKCk7CisgICAgaWYgKGRlZmluZWQoJHZzV2hlcmVGb3VuZEluc3RhbGxhdGlvbikpIHsK
KyAgICAgICAgJHZzVmVyc2lvbiA9ICR2c1doZXJlRm91bmRJbnN0YWxsYXRpb24tPntzaG9ydFZl
cnNpb259OworICAgIH0KKworICAgIGlmICghZGVmaW5lZCgkdnNWZXJzaW9uKSkgeworICAgICAg
ICBwaWNrTGVnYWN5VmlzdWFsU3R1ZGlvSW5zdGFsbGF0aW9uKCk7CisgICAgICAgIGlmIChkZWZp
bmVkKCR2c1doZXJlTGVnYWN5SW5zdGFsbGF0aW9uKSkgeworICAgICAgICAgICAgJHZzVmVyc2lv
biA9ICR2c1doZXJlTGVnYWN5SW5zdGFsbGF0aW9uLT57c2hvcnRWZXJzaW9ufTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmICghZGVmaW5lZCgkdnNWZXJzaW9uKSkgeworICAgICAgICBteSAk
aW5zdGFsbERpciA9IHZpc3VhbFN0dWRpb0luc3RhbGxEaXIoKTsKIAotICAgICR2c1ZlcnNpb24g
PSAoJGluc3RhbGxEaXIgPX4gL01pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIChbMC05XStcLlswLTld
KikvKSA/ICQxIDogIjE0IjsKKyAgICAgICAgJHZzVmVyc2lvbiA9ICgkaW5zdGFsbERpciA9fiAv
TWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gKFswLTldK1wuWzAtOV0qKS8pID8gJDEgOiAiMTQiOwor
ICAgIH0KIAogICAgIHByaW50ICJVc2luZyBWaXN1YWwgU3R1ZGlvICR2c1ZlcnNpb25cbiI7CiAg
ICAgcmV0dXJuICR2c1ZlcnNpb247CkBAIC0yMDg0LDcgKzIyMTgsMTEgQEAgc3ViIGdlbmVyYXRl
QnVpbGRTeXN0ZW1Gcm9tQ01ha2VQcm9qZWN0CiAgICAgICAgICAgICBwdXNoIEBhcmdzLCAiTmlu
amEiOwogICAgICAgICB9CiAgICAgfSBlbHNpZiAoaXNBbnlXaW5kb3dzKCkgJiYgaXNXaW42NCgp
KSB7Ci0gICAgICAgIHB1c2ggQGFyZ3MsICctRyAiVmlzdWFsIFN0dWRpbyAxNCAyMDE1IFdpbjY0
Iic7CisgICAgICAgIGlmICgrdmlzdWFsU3R1ZGlvVmVyc2lvbigpID49IDE1KSB7CisgICAgICAg
ICAgICBwdXNoIEBhcmdzLCAnLUcgIlZpc3VhbCBTdHVkaW8gMTUgMjAxNyBXaW42NCInOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHVzaCBAYXJncywgJy1HICJWaXN1YWwgU3R1ZGlv
IDE0IDIwMTUgV2luNjQiJzsKKyAgICAgICAgfQogICAgIH0KICAgICAjIERvIG5vdCBzaG93IHBy
b2dyZXNzIG9mIGdlbmVyYXRpbmcgYmluZGluZ3MgaW4gaW50ZXJhY3RpdmUgTmluamEgYnVpbGQg
bm90IHRvIGxlYXZlIG5vaXN5IGxpbmVzIG9uIHR0eQogICAgIHB1c2ggQGFyZ3MsICctRFNIT1df
QklORElOR1NfR0VORVJBVElPTl9QUk9HUkVTUz0xJyB1bmxlc3MgKCR3aWxsVXNlTmluamEgJiYg
LXQgU1RET1VUKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>325068</attachid>
            <date>2017-10-26 15:52:36 -0700</date>
            <delta_ts>2017-10-26 20:02:46 -0700</delta_ts>
            <desc>Alternate patch for getting visual studio location w/vswhere</desc>
            <filename>175275-o1.diff</filename>
            <type>text/plain</type>
            <size>14947</size>
            <attacher name="Stephan Szabo">stephan.szabo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBiNDZj
ZjdjYWM0YS4uMjczNTE0ZTc3MTQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxNy0xMC0yNiAgU3RlcGhhbiBTemFi
byAgPHN0ZXBoYW4uc3phYm9Ac29ueS5jb20+CisKKyAgICAgICAgW1dpbl0gRGV0ZWN0IFZpc3Vh
bCBTdHVkaW8gMjAxNyBsb2NhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc1Mjc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLWpzYzoKKyAgICAgICAgKiBTY3JpcHRzL2J1
aWxkLXdlYmtpdDoKKyAgICAgICAgKiBTY3JpcHRzL3VwZGF0ZS12c3doZXJlLnB5OiBBZGRlZC4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdGRpcnMucG06CisgICAgICAgIChwaWNrVmlzdWFsU3R1
ZGlvSW5zdGFsbGF0aW9uV2l0aFZzd2hlcmUpOgorICAgICAgICAocGlja1Zpc3VhbFN0dWRpb0lu
c3RhbGxhdGlvbkJ5RGVmYXVsdDIwMTcpOgorICAgICAgICAoZmluZE1zYnVpbGRMb2NhdGlvbjIw
MTUpOgorICAgICAgICAocGlja1Zpc3VhbFN0dWRpb0luc3RhbGxhdGlvbkJ5RGVmYXVsdDIwMTUp
OgorICAgICAgICAoZmluZE1zYnVpbGRMb2NhdGlvbjIwMTcpOgorICAgICAgICAocGlja1Zpc3Vh
bFN0dWRpb0luc3RhbGxhdGlvbldpdGhFbnYpOgorICAgICAgICAocGlja1Zpc3VhbFN0dWRpb0lu
c3RhbGxhdGlvbik6CisgICAgICAgICh2aXN1YWxTdHVkaW9JbnN0YWxsRGlyKToKKyAgICAgICAg
KG1zQnVpbGRJbnN0YWxsRGlyKToKKyAgICAgICAgKHZpc3VhbFN0dWRpb1ZlcnNpb24pOgorICAg
ICAgICAoZ2VuZXJhdGVCdWlsZFN5c3RlbUZyb21DTWFrZVByb2plY3QpOgorCiAyMDE3LTEwLTI2
ICBDaHJpc3RvcGhlciBSZWlkICA8Y2hyaXMucmVpZEBzb255LmNvbT4KIAogICAgICAgICBSZW1v
dmUgc2NvcGVndWFyZCBmcm9tIHBsYXRmb3JtCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL2J1
aWxkLWpzYyBiL1Rvb2xzL1NjcmlwdHMvYnVpbGQtanNjCmluZGV4IGYwNzU1ZDMzNTE2Li5lNDM0
OGY0ODU1MSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9idWlsZC1qc2MKKysrIGIvVG9vbHMv
U2NyaXB0cy9idWlsZC1qc2MKQEAgLTExNyw2ICsxMTcsNyBAQCBpZiAoaXNBcHBsZVdpbldlYktp
dCgpKSB7CiAKIGlmIChpc0pTQ09ubHkoKSAmJiBpc1dpbmRvd3MoKSkgewogICAgIChzeXN0ZW0o
InB5dGhvbiBUb29scy9TY3JpcHRzL3VwZGF0ZS13ZWJraXQtd2luY2Fpcm8tbGlicy5weSIpID09
IDApIG9yIGRpZTsKKyAgICBzeXN0ZW0oInB5dGhvbiBUb29scy9TY3JpcHRzL3VwZGF0ZS12c3do
ZXJlLnB5Iik7CiB9CiAKIGNoZWNrUmVxdWlyZWRTeXN0ZW1Db25maWcoKTsKZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0IGIvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQK
aW5kZXggODEyMjEyZDZjNjMuLjM1MjM5MDUxNzBmIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRz
L2J1aWxkLXdlYmtpdAorKysgYi9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdApAQCAtMjQ1LDYg
KzI0NSwxMCBAQCBpZiAoaXNBcHBsZUNvY29hV2ViS2l0KCkpIHsKICAgICAoc3lzdGVtKCJwZXJs
IFRvb2xzL1NjcmlwdHMvdXBkYXRlLXdlYmtpdC1zdXBwb3J0LWxpYnMiKSA9PSAwKSBvciBkaWU7
CiB9CiAKK2lmIChpc0FueVdpbmRvd3MoKSkgeworICAgIHN5c3RlbSgicHl0aG9uIFRvb2xzL1Nj
cmlwdHMvdXBkYXRlLXZzd2hlcmUucHkiKTsKK30KKwogIyBJZiBhc2tlZCB0byBidWlsZCBqdXN0
IHRoZSBXZWJLaXQgcHJvamVjdCwgb3ZlcndyaXRlIHRoZSBwcm9qZWN0cwogIyBsaXN0IGFmdGVy
IGFsbCBvZiB0aGUgcG9ydCBzcGVjaWZpYyB0d2Vha3MgaGF2ZSBiZWVuIG1hZGUgdG8KICMgYnVp
bGQgb3B0aW9ucywgZXRjLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy91cGRhdGUtdnN3aGVy
ZS5weSBiL1Rvb2xzL1NjcmlwdHMvdXBkYXRlLXZzd2hlcmUucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLmExZGNiZmMwMTlhCi0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvU2NyaXB0cy91cGRhdGUtdnN3aGVyZS5weQpAQCAtMCwwICsxLDQyIEBACisjISAvdXNyL2Jp
bi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoQykgMjAxNyBTb255IEludGVyYWN0aXZlIEVu
dGVydGFpbm1lbnQgSW5jLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6
CisjCisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisjIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisj
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorIyBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBv
cnQgaW1wb3J0bGliCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCBzdGF0CisKK2Rvd25s
b2FkID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJ2Rvd25sb2FkLWxhdGVzdC1naXRodWItcmVs
ZWFzZScpCisKK3JlcG8gPSAnTWljcm9zb2Z0L3Zzd2hlcmUnCitmaWxlID0gJ3Zzd2hlcmUuZXhl
Jworb3V0cHV0ID0gJ1dlYktpdExpYnJhcmllcy93aW4vdG9vbHMnCisKK3Jlc3VsdCA9IGRvd25s
b2FkLm1haW4oWyctbycsIG91dHB1dCwgcmVwbywgZmlsZV0pCisKK2lmIHJlc3VsdCA9PSBkb3du
bG9hZC5TdGF0dXMuQ09VTERfTk9UX0ZJTkQ6CisgICAgc3lzLmV4aXQoMSkKKworb3MuY2htb2Qo
b3MucGF0aC5qb2luKG91dHB1dCwgZmlsZSksIDA3NzcpCmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdGRpcnMucG0gYi9Ub29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0KaW5kZXggMGVh
NDBhNDAyZmUuLjk1MjY1ZTZiNjJkIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdGRp
cnMucG0KKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCkBAIC0zNSw2ICszNSw4IEBA
IHVzZSB3YXJuaW5nczsKIHVzZSBDb25maWc7CiB1c2UgQ3dkIHF3KHJlYWxwYXRoKTsKIHVzZSBE
aWdlc3Q6Ok1ENSBxdyhtZDVfaGV4KTsKK3VzZSBFbmNvZGU7Cit1c2UgRW5jb2RlOjpMb2NhbGU7
CiB1c2UgRmluZEJpbjsKIHVzZSBGaWxlOjpCYXNlbmFtZTsKIHVzZSBGaWxlOjpGaW5kOwpAQCAt
NDIsNiArNDQsNyBAQCB1c2UgRmlsZTo6UGF0aCBxdyhtYWtlX3BhdGggbWtwYXRoIHJtdHJlZSk7
CiB1c2UgRmlsZTo6U3BlYzsKIHVzZSBGaWxlOjpUZW1wIHF3KHRlbXBkaXIpOwogdXNlIEZpbGU6
OnN0YXQ7Cit1c2UgSlNPTjo6UFA7CiB1c2UgTGlzdDo6VXRpbDsKIHVzZSBQT1NJWDsKIHVzZSBU
aW1lOjpIaVJlcyBxdyh1c2xlZXApOwpAQCAtMTYwLDYgKzE2Myw4IEBAIG15ICR2c1ZlcnNpb247
CiBteSAkd2luZG93c1NvdXJjZURpcjsKIG15ICR3aW5WZXJzaW9uOwogbXkgJHdpbGxVc2VWQ0V4
cHJlc3NXaGVuQnVpbGRpbmcgPSAwOworbXkgJHZpc3VhbFN0dWRpb0luc3RhbGxhdGlvbjsKK215
ICRub1Zpc3VhbFN0dWRpb0luc3RhbGxhdGlvbkZvdW5kOwogCiAjIERlZmluZWQgaW4gVkNTVXRp
bHMuCiBzdWIgZXhpdFN0YXR1cygkKTsKQEAgLTU4OSw0OSArNTk0LDI2NyBAQCBzdWIgcHJvZ3Jh
bUZpbGVzUGF0aFg4NgogICAgIHJldHVybiAkcHJvZ3JhbUZpbGVzUGF0aFg4NjsKIH0KIAotc3Vi
IHZpc3VhbFN0dWRpb0luc3RhbGxEaXIKKworc3ViIHBpY2tWaXN1YWxTdHVkaW9JbnN0YWxsYXRp
b25XaXRoVnN3aGVyZQogewotICAgIHJldHVybiAkdnNJbnN0YWxsRGlyIGlmIGRlZmluZWQgJHZz
SW5zdGFsbERpcjsKKyAgICBteSAoJGFyZ3MsICRtc2J1aWxkRnVuY3Rpb24sICRmaWx0ZXJGdW5j
dGlvbikgPSBAXzsKKyAgICBkZXRlcm1pbmVTb3VyY2VEaXIoKTsKKworICAgIG15ICR2c1doZXJl
T3V0ID0gYCRzb3VyY2VEaXIvV2ViS2l0TGlicmFyaWVzL3dpbi90b29scy92c3doZXJlICRhcmdz
IDI+JjFgOworICAgIG15ICRpbnN0YWxsYXRpb25zX2FsbCA9IFtdOworICAgIGV2YWwgeworICAg
ICAgICAkaW5zdGFsbGF0aW9uc19hbGwgPSBkZWNvZGVfanNvbiBFbmNvZGU6OmVuY29kZSgnVVRG
LTgnID0+IEVuY29kZTo6ZGVjb2RlKGNvbnNvbGVfaW4gPT4gJHZzV2hlcmVPdXQpKTsKKyAgICB9
OworICAgIHByaW50ICJFcnJvciBnZXR0aW5nIFZpc3VhbCBTdHVkaW8gTG9jYXRpb246ICRAXG4i
IGlmICRAOworICAgIHVuZGVmICRAOworCisgICAgbXkgQGluc3RhbGxhdGlvbnM7CisgICAgaWYg
KGRlZmluZWQoJGZpbHRlckZ1bmN0aW9uKSkgeworICAgICAgICBAaW5zdGFsbGF0aW9ucyA9IGdy
ZXAgeyRmaWx0ZXJGdW5jdGlvbi0+KCRfKX0gQCRpbnN0YWxsYXRpb25zX2FsbDsKKyAgICB9IGVs
c2UgeworICAgICAgICBAaW5zdGFsbGF0aW9ucyA9IEAkaW5zdGFsbGF0aW9uc19hbGw7CisgICAg
fQorCisgICAgQGluc3RhbGxhdGlvbnMgPSBncmVwIHsgZGVmaW5lZCgkXy0+e21zYnVpbGRQYXRo
fSkgfSBtYXAgeworICAgICAgICAkXy0+e2luc3RhbGxhdGlvblZlcnNpb259ID1+IC9eKChcZCsp
XC4oXGQrKSkvOworICAgICAgICAkXy0+e3Nob3J0VmVyc2lvbn0gPSAkMTsKKyAgICAgICAgJF8t
PnttYWpvclZlcnNpb259ID0gJDI7CisgICAgICAgICRfLT57bXNidWlsZFBhdGh9ID0gJG1zYnVp
bGRGdW5jdGlvbi0+KCRfKTsKKyAgICAgICAgcmV0dXJuICRfOworICAgIH0gQGluc3RhbGxhdGlv
bnM7CisKKyAgICBpZiAoc2NhbGFyIEBpbnN0YWxsYXRpb25zKSB7CisgICAgICAgIHJldHVybiAk
aW5zdGFsbGF0aW9uc1swXTsKKyAgICB9CisgICAgcmV0dXJuIHVuZGVmOworfQorCitzdWIgcGlj
a1Zpc3VhbFN0dWRpb0luc3RhbGxhdGlvbkJ5RGVmYXVsdDIwMTcKK3sKKyAgICBteSAoJHByb2R1
Y3QpID0gQF87CisgICAgbXkgJHZzSW5zdGFsbERpciA9IEZpbGU6OlNwZWMtPmNhdGRpcihwcm9n
cmFtRmlsZXNQYXRoWDg2KCksCisgICAgICAgICJNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyIsICIy
MDE3IiwgJHByb2R1Y3QpOworICAgIG15ICRtc2J1aWxkRGlyID0gRmlsZTo6U3BlYy0+Y2F0ZGly
KCR2c0luc3RhbGxEaXIsICJNU0J1aWxkIiwgIjE1LjAiLCAiQmluIik7CisgICAgaWYgKCEtZSAk
dnNJbnN0YWxsRGlyIHx8ICEtZSAkbXNidWlsZERpcikgeworICAgICAgICByZXR1cm4gdW5kZWY7
CisgICAgfQorICAgIHJldHVybiB7CisgICAgICAgICdpbnN0YWxsYXRpb25QYXRoJyA9PiAkdnNJ
bnN0YWxsRGlyLAorICAgICAgICAnbXNidWlsZFBhdGgnID0+ICRtc2J1aWxkRGlyLAorICAgICAg
ICAnaW5zdGFsbGF0aW9uVmVyc2lvbicgPT4gIjE1LjAiLAorICAgICAgICAnc2hvcnRWZXJzaW9u
JyA9PiAiMTUuMCIsCisgICAgICAgICdtYWpvclZlcnNpb24nID0+IDE1CisgICAgfQorfQorCitz
dWIgZmluZE1zYnVpbGRMb2NhdGlvbjIwMTUKK3sKKyAgICBteSAkbXNidWlsZERpciA9IEZpbGU6
OlNwZWMtPmNhdGRpcihwcm9ncmFtRmlsZXNQYXRoWDg2KCksICJNU0J1aWxkIiwgIjE0LjAiLCAi
QmluIik7CisgICAgaWYgKC1kICRtc2J1aWxkRGlyKSB7CisgICAgICAgIHJldHVybiAkbXNidWls
ZERpcjsKKyAgICB9CisgICAgcmV0dXJuIHVuZGVmOworfQorCitzdWIgcGlja1Zpc3VhbFN0dWRp
b0luc3RhbGxhdGlvbkJ5RGVmYXVsdDIwMTUKK3sKKyAgICBteSAkdnNJbnN0YWxsRGlyID0gRmls
ZTo6U3BlYy0+Y2F0ZGlyKHByb2dyYW1GaWxlc1BhdGhYODYoKSwgIk1pY3Jvc29mdCBWaXN1YWwg
U3R1ZGlvIDE0LjAiKTsKKyAgICBteSAkbXNidWlsZERpciA9IGZpbmRNc2J1aWxkTG9jYXRpb24y
MDE1KCk7CisgICAgaWYgKCEtZCAkdnNJbnN0YWxsRGlyIHx8ICFkZWZpbmVkKCRtc2J1aWxkRGly
KSkgeworICAgICAgICByZXR1cm4gdW5kZWY7CisgICAgfQorICAgIHJldHVybiB7CisgICAgICAg
ICdpbnN0YWxsYXRpb25QYXRoJyA9PiAkdnNJbnN0YWxsRGlyLAorICAgICAgICAnbXNidWlsZFBh
dGgnID0+ICRtc2J1aWxkRGlyLAorICAgICAgICAnaW5zdGFsbGF0aW9uVmVyc2lvbicgPT4gIjE0
LjAiLAorICAgICAgICAnc2hvcnRWZXJzaW9uJyA9PiAiMTQuMCIsCisgICAgICAgICdtYWpvclZl
cnNpb24nID0+IDE0CisgICAgfQorfQorCitzdWIgZmluZE1zYnVpbGRMb2NhdGlvbjIwMTcKK3sK
KyAgICBteSAoJGluc3RhbGxhdGlvbikgPSBAXzsKKyAgICBteSAkbXNidWlsZF9zaG9ydCA9IEZp
bGU6OlNwZWMtPmNhdGRpcigkaW5zdGFsbGF0aW9uLT57aW5zdGFsbGF0aW9uUGF0aH0sCisgICAg
ICAgICJNU0J1aWxkIiwgJGluc3RhbGxhdGlvbi0+e3Nob3J0VmVyc2lvbn0sICJCaW4iKTsKKyAg
ICBteSAkbXNidWlsZF9tYWpvciA9IEZpbGU6OlNwZWMtPmNhdGRpcigkaW5zdGFsbGF0aW9uLT57
aW5zdGFsbGF0aW9uUGF0aH0sCisgICAgICAgICJNU0J1aWxkIiwgJGluc3RhbGxhdGlvbi0+e21h
am9yVmVyc2lvbn0uIi4wIiwgIkJpbiIpOworICAgIGlmICgtZCAkbXNidWlsZF9zaG9ydCkgewor
ICAgICAgICByZXR1cm4gJG1zYnVpbGRfc2hvcnQ7CisgICAgfQorICAgIGlmICgtZCAkbXNidWls
ZF9tYWpvcikgeworICAgICAgICByZXR1cm4gJG1zYnVpbGRfbWFqb3I7CisgICAgfQorICAgIHJl
dHVybiB1bmRlZjsKK30KKworc3ViIHBpY2tWaXN1YWxTdHVkaW9JbnN0YWxsYXRpb25XaXRoRW52
Cit7CisgICAgbXkgJHZzSW5zdGFsbERpciA9ICRFTlZ7J1ZTSU5TVEFMTERJUid9OworICAgIGlm
ICghZGVmaW5lZCgkdnNJbnN0YWxsRGlyKSkgeworICAgICAgICByZXR1cm4gdW5kZWY7CisgICAg
fQorCisgICAgIyBUcnkgdG8gZmluZCB2ZXJzaW9uCisgICAgbXkgJHZlcnNpb247CisgICAgaWYg
KCR2c0luc3RhbGxEaXIgPX4gL01pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIChcZCtcLlxkKykvKSB7
CisgICAgICAgICR2ZXJzaW9uID0gJDE7CisgICAgfSBlbHNpZiAoJHZzSW5zdGFsbERpciA9fiBt
fFsvXFxdTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW9bL1xcXShcZCspWy9cXF18KSB7CisgICAgICAg
IGlmICgkMSBlcSAiMjAxNyIpIHsKKyAgICAgICAgICAgICR2ZXJzaW9uID0gIjE1LjAiOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIHVuZGVmOworICAgICAgICB9CisgICAg
fQorICAgIG15ICgkbWFqb3JWZXJzaW9uKSA9ICgkdmVyc2lvbiA9fiAvXihcZCspLi8pOworCisg
ICAgbXkgJGluc3RhbGxhdGlvbiA9IHsKKyAgICAgICAgImluc3RhbGxhdGlvblBhdGgiID0+ICR2
c0luc3RhbGxEaXIsCisgICAgICAgICJ2ZXJzaW9uIiA9PiAkdmVyc2lvbiwKKyAgICAgICAgInNo
b3J0VmVyc2lvbiIgPT4gJHZlcnNpb24sCisgICAgICAgICJtYWpvclZlcnNpb24iID0+ICRtYWpv
clZlcnNpb24KKyAgICB9OwogCi0gICAgaWYgKCRFTlZ7J1ZTSU5TVEFMTERJUid9KSB7Ci0gICAg
ICAgICR2c0luc3RhbGxEaXIgPSAkRU5WeydWU0lOU1RBTExESVInfTsKLSAgICAgICAgJHZzSW5z
dGFsbERpciA9fiBzfFtcXC9dJHx8OworICAgIGlmICgkdmVyc2lvbiA+PSAxNSkgeworICAgICAg
ICAkaW5zdGFsbGF0aW9uLT57bXNidWlsZFBhdGh9ID0gZmluZE1zYnVpbGRMb2NhdGlvbjIwMTco
JGluc3RhbGxhdGlvbik7CisgICAgfSBlbHNpZiAoJHZlcnNpb24gPj0gMTQpIHsKKyAgICAgICAg
JGluc3RhbGxhdGlvbi0+e21zYnVpbGRQYXRofSA9IGZpbmRNc2J1aWxkTG9jYXRpb24yMDE1KCk7
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgJHZzSW5zdGFsbERpciA9IEZpbGU6OlNwZWMtPmNhdGRp
cihwcm9ncmFtRmlsZXNQYXRoWDg2KCksICJNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyIsICIyMDE3
IiwgIkNvbW11bml0eSIpOwotICAgICAgICBpZiAobm90IC1lICR2c0luc3RhbGxEaXIpIHsKLSAg
ICAgICAgICAgICR2c0luc3RhbGxEaXIgPSBGaWxlOjpTcGVjLT5jYXRkaXIocHJvZ3JhbUZpbGVz
UGF0aFg4NigpLCAiTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMTQuMCIpOworICAgICAgICByZXR1
cm4gdW5kZWY7CisgICAgfQorICAgIHJldHVybiAkaW5zdGFsbGF0aW9uOworfQorCitzdWIgcGlj
a1Zpc3VhbFN0dWRpb0luc3RhbGxhdGlvbgoreworICAgIHJldHVybiAkdmlzdWFsU3R1ZGlvSW5z
dGFsbGF0aW9uIGlmIChkZWZpbmVkKCR2aXN1YWxTdHVkaW9JbnN0YWxsYXRpb24pKTsKKyAgICBy
ZXR1cm4gdW5kZWYgaWYgJG5vVmlzdWFsU3R1ZGlvSW5zdGFsbGF0aW9uRm91bmQ7CisKKyAgICBt
eSBAcG9zc2libGVJbnN0YWxsYXRpb25zID0gKAorICAgICAgICAjJEVOVnsnVlNJTlNUQUxMRElS
J30KKyAgICAgICAgeworICAgICAgICAgICAgImZ1bmMiID0+IFwmcGlja1Zpc3VhbFN0dWRpb0lu
c3RhbGxhdGlvbldpdGhFbnYsCisgICAgICAgICAgICAiYXJncyIgPT4gW10KKyAgICAgICAgfSwK
KyAgICAgICAgI3Zzd2hlcmUgY3VycmVudCBlbnRlcnByaXNlCisgICAgICAgIHsKKyAgICAgICAg
ICAgICJmdW5jIiA9PiBcJnBpY2tWaXN1YWxTdHVkaW9JbnN0YWxsYXRpb25XaXRoVnN3aGVyZSwK
KyAgICAgICAgICAgICJhcmdzIiA9PiBbCisgICAgICAgICAgICAgICAgIi1ub2xvZ28gLWxhdGVz
dCAtZm9ybWF0IGpzb24gLXJlcXVpcmVzIE1pY3Jvc29mdC5Db21wb25lbnQuTVNCdWlsZCAiLgor
ICAgICAgICAgICAgICAgICItcHJvZHVjdHMgTWljcm9zb2Z0LlZpc3VhbFN0dWRpby5Qcm9kdWN0
LkVudGVycHJpc2UiLAorICAgICAgICAgICAgICAgIFwmZmluZE1zYnVpbGRMb2NhdGlvbjIwMTcs
CisgICAgICAgICAgICAgICAgdW5kZWYKKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAg
ICAgI3Zzd2hlcmUgY3VycmVudCBwcm9mZXNzaW9uYWwKKyAgICAgICAgeworICAgICAgICAgICAg
ImZ1bmMiID0+IFwmcGlja1Zpc3VhbFN0dWRpb0luc3RhbGxhdGlvbldpdGhWc3doZXJlLAorICAg
ICAgICAgICAgImFyZ3MiID0+IFsKKyAgICAgICAgICAgICAgICAiLW5vbG9nbyAtbGF0ZXN0IC1m
b3JtYXQganNvbiAtcmVxdWlyZXMgTWljcm9zb2Z0LkNvbXBvbmVudC5NU0J1aWxkICIuCisgICAg
ICAgICAgICAgICAgIi1wcm9kdWN0cyBNaWNyb3NvZnQuVmlzdWFsU3R1ZGlvLlByb2R1Y3QuUHJv
ZmVzc2lvbmFsIiwKKyAgICAgICAgICAgICAgICBcJmZpbmRNc2J1aWxkTG9jYXRpb24yMDE3LAor
ICAgICAgICAgICAgICAgIHVuZGVmCisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAg
ICN2c3doZXJlIGN1cnJlbnQgY29tbXVuaXR5CisgICAgICAgIHsKKyAgICAgICAgICAgICJmdW5j
IiA9PiBcJnBpY2tWaXN1YWxTdHVkaW9JbnN0YWxsYXRpb25XaXRoVnN3aGVyZSwKKyAgICAgICAg
ICAgICJhcmdzIiA9PiBbCisgICAgICAgICAgICAgICAgIi1ub2xvZ28gLWxhdGVzdCAtZm9ybWF0
IGpzb24gLXJlcXVpcmVzIE1pY3Jvc29mdC5Db21wb25lbnQuTVNCdWlsZCAiLgorICAgICAgICAg
ICAgICAgICItcHJvZHVjdHMgTWljcm9zb2Z0LlZpc3VhbFN0dWRpby5Qcm9kdWN0LkNvbW11bml0
eSIsCisgICAgICAgICAgICAgICAgXCZmaW5kTXNidWlsZExvY2F0aW9uMjAxNywKKyAgICAgICAg
ICAgICAgICB1bmRlZgorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICAjdnN3aGVy
ZSBsZWdhY3kKKyAgICAgICAgeworICAgICAgICAgICAgImZ1bmMiID0+IFwmcGlja1Zpc3VhbFN0
dWRpb0luc3RhbGxhdGlvbldpdGhWc3doZXJlLAorICAgICAgICAgICAgImFyZ3MiID0+IFsKKyAg
ICAgICAgICAgICAgICAiLW5vbG9nbyAtbGVnYWN5IC1mb3JtYXQganNvbiIsCisgICAgICAgICAg
ICAgICAgXCZmaW5kTXNidWlsZExvY2F0aW9uMjAxNSwKKyAgICAgICAgICAgICAgICBzdWIgewor
ICAgICAgICAgICAgICAgICAgICBteSAkdmVyID0gKDAgKyAkX1swXS0+e2luc3RhbGxhdGlvblZl
cnNpb259KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR2ZXIgPj0gMTQgJiYgJHZlciA8
IDE1OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAg
ICAgIzIwMTcgZW50ZXJwcmlzZSBmYWxsYmFjaworICAgICAgICB7CisgICAgICAgICAgICAiZnVu
YyIgPT4gXCZwaWNrVmlzdWFsU3R1ZGlvSW5zdGFsbGF0aW9uQnlEZWZhdWx0MjAxNywKKyAgICAg
ICAgICAgICJhcmdzIiA9PiBbICJFbnRlcnByaXNlIiBdCisgICAgICAgIH0sCisgICAgICAgICMy
MDE3IHByb2Zlc3Npb25hbCBmYWxsYmFjaworICAgICAgICB7CisgICAgICAgICAgICAiZnVuYyIg
PT4gXCZwaWNrVmlzdWFsU3R1ZGlvSW5zdGFsbGF0aW9uQnlEZWZhdWx0MjAxNywKKyAgICAgICAg
ICAgICJhcmdzIiA9PiBbICJQcm9mZXNzaW9uYWwiIF0KKyAgICAgICAgfSwKKyAgICAgICAgIzIw
MTcgY29tbXVuaXR5IGZhbGxiYWNrCisgICAgICAgIHsKKyAgICAgICAgICAgICJmdW5jIiA9PiBc
JnBpY2tWaXN1YWxTdHVkaW9JbnN0YWxsYXRpb25CeURlZmF1bHQyMDE3LAorICAgICAgICAgICAg
ImFyZ3MiID0+IFsgIkNvbW11bml0eSIgXQorICAgICAgICB9LAorICAgICAgICAjMjAxNSBmYWxs
YmFjaworICAgICAgICB7CisgICAgICAgICAgICAiZnVuYyIgPT4gXCZwaWNrVmlzdWFsU3R1ZGlv
SW5zdGFsbGF0aW9uQnlEZWZhdWx0MjAxNSwKKyAgICAgICAgICAgICJhcmdzIiA9PiBbXQorICAg
ICAgICB9CisgICAgKTsKKworICAgIGZvcmVhY2ggbXkgJHBvc3NpYmxlSW5zdGFsbGF0aW9uIChA
cG9zc2libGVJbnN0YWxsYXRpb25zKSB7CisgICAgICAgIG15ICRmdW5jID0gJHBvc3NpYmxlSW5z
dGFsbGF0aW9uLT57ZnVuY307CisgICAgICAgIG15IEBhcmcgPSBAeyRwb3NzaWJsZUluc3RhbGxh
dGlvbi0+e2FyZ3N9fTsKKyAgICAgICAgbXkgJHJldCA9ICRmdW5jLT4oQGFyZyk7CisgICAgICAg
IGlmIChkZWZpbmVkKCRyZXQpKSB7CisgICAgICAgICAgICAkdmlzdWFsU3R1ZGlvSW5zdGFsbGF0
aW9uID0gJHJldDsKKyAgICAgICAgICAgIHJldHVybiAkcmV0OwogICAgICAgICB9CiAgICAgfQot
ICAgIGNob21wKCR2c0luc3RhbGxEaXIgPSBgY3lncGF0aCAiJHZzSW5zdGFsbERpciJgKSBpZiBp
c0N5Z3dpbigpOworICAgICRub1Zpc3VhbFN0dWRpb0luc3RhbGxhdGlvbkZvdW5kID0gMTsKKyAg
ICByZXR1cm4gdW5kZWY7Cit9CisKK3N1YiB2aXN1YWxTdHVkaW9JbnN0YWxsRGlyCit7CisgICAg
cmV0dXJuICR2c0luc3RhbGxEaXIgaWYgZGVmaW5lZCAkdnNJbnN0YWxsRGlyOwogCi0gICAgcHJp
bnQgIlVzaW5nIFZpc3VhbCBTdHVkaW86ICR2c0luc3RhbGxEaXJcbiI7Ci0gICAgcmV0dXJuICR2
c0luc3RhbGxEaXI7CisgICAgbXkgJGluc3RhbGxhdGlvbiA9IHBpY2tWaXN1YWxTdHVkaW9JbnN0
YWxsYXRpb24oKTsKKyAgICBpZiAoZGVmaW5lZCAkaW5zdGFsbGF0aW9uKSB7CisgICAgICAgICR2
c0luc3RhbGxEaXIgPSAkaW5zdGFsbGF0aW9uLT57aW5zdGFsbGF0aW9uUGF0aH07CisgICAgICAg
IGNob21wKCR2c0luc3RhbGxEaXIgPSBgY3lncGF0aCAiJHZzSW5zdGFsbERpciJgKSBpZiBpc0N5
Z3dpbigpOworICAgICAgICBwcmludCAiVXNpbmcgVmlzdWFsIFN0dWRpbzogJHZzSW5zdGFsbERp
clxuIjsKKyAgICAgICAgcmV0dXJuICR2c0luc3RhbGxEaXI7CisgICAgfQorICAgIHByaW50ICJV
bmFibGUgdG8gZmluZCBWaXN1YWwgU3R1ZGlvXG4iOworICAgIHJldHVybiB1bmRlZjsKIH0KIAog
c3ViIG1zQnVpbGRJbnN0YWxsRGlyCiB7CiAgICAgcmV0dXJuICRtc0J1aWxkSW5zdGFsbERpciBp
ZiBkZWZpbmVkICRtc0J1aWxkSW5zdGFsbERpcjsKIAotICAgICRtc0J1aWxkSW5zdGFsbERpciA9
IEZpbGU6OlNwZWMtPmNhdGRpcihwcm9ncmFtRmlsZXNQYXRoWDg2KCksICJNaWNyb3NvZnQgVmlz
dWFsIFN0dWRpbyIsICIyMDE3IiwgIkNvbW11bml0eSIsICJNU0J1aWxkIiwgIjE1LjAiLCAiQmlu
Iik7Ci0gICAgaWYgKG5vdCAtZSAkbXNCdWlsZEluc3RhbGxEaXIpIHsKLSAgICAgICAgJG1zQnVp
bGRJbnN0YWxsRGlyID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKHByb2dyYW1GaWxlc1BhdGhYODYoKSwg
Ik1TQnVpbGQiLCAiMTQuMCIsICJCaW4iKTsKKyAgICBteSAkaW5zdGFsbGF0aW9uID0gcGlja1Zp
c3VhbFN0dWRpb0luc3RhbGxhdGlvbigpOworICAgIGlmIChkZWZpbmVkICRpbnN0YWxsYXRpb24p
IHsKKyAgICAgICAgJG1zQnVpbGRJbnN0YWxsRGlyID0gJGluc3RhbGxhdGlvbi0+e21zYnVpbGRQ
YXRofTsKKyAgICAgICAgY2hvbXAoJG1zQnVpbGRJbnN0YWxsRGlyID0gYGN5Z3BhdGggIiRtc0J1
aWxkSW5zdGFsbERpciJgKSBpZiBpc0N5Z3dpbigpOworICAgICAgICBwcmludCAiVXNpbmcgTVNC
dWlsZDogJG1zQnVpbGRJbnN0YWxsRGlyXG4iOworICAgICAgICByZXR1cm4gJG1zQnVpbGRJbnN0
YWxsRGlyOwogICAgIH0KLSAgICBjaG9tcCgkbXNCdWlsZEluc3RhbGxEaXIgPSBgY3lncGF0aCAi
JG1zQnVpbGRJbnN0YWxsRGlyImApIGlmIGlzQ3lnd2luKCk7Ci0KLSAgICBwcmludCAiVXNpbmcg
TVNCdWlsZDogJG1zQnVpbGRJbnN0YWxsRGlyXG4iOwotICAgIHJldHVybiAkbXNCdWlsZEluc3Rh
bGxEaXI7CisgICAgcHJpbnQgIlVuYWJsZSB0byBmaW5kIFZpc3VhbCBTdHVkaW9cbiI7CisgICAg
cmV0dXJuIHVuZGVmOwogfQogCiBzdWIgdmlzdWFsU3R1ZGlvVmVyc2lvbgogewogICAgIHJldHVy
biAkdnNWZXJzaW9uIGlmIGRlZmluZWQgJHZzVmVyc2lvbjsKIAotICAgIG15ICRpbnN0YWxsRGly
ID0gdmlzdWFsU3R1ZGlvSW5zdGFsbERpcigpOwotCi0gICAgJHZzVmVyc2lvbiA9ICgkaW5zdGFs
bERpciA9fiAvTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gKFswLTldK1wuWzAtOV0qKS8pID8gJDEg
OiAiMTQiOwotCi0gICAgcHJpbnQgIlVzaW5nIFZpc3VhbCBTdHVkaW8gJHZzVmVyc2lvblxuIjsK
LSAgICByZXR1cm4gJHZzVmVyc2lvbjsKKyAgICBteSAkaW5zdGFsbGF0aW9uID0gcGlja1Zpc3Vh
bFN0dWRpb0luc3RhbGxhdGlvbigpOworICAgIGlmIChkZWZpbmVkICRpbnN0YWxsYXRpb24pIHsK
KyAgICAgICAgJHZzVmVyc2lvbiA9ICRpbnN0YWxsYXRpb24tPntzaG9ydFZlcnNpb259OworICAg
ICAgICBwcmludCAiVXNpbmcgVmlzdWFsIFN0dWRpbyAkdnNWZXJzaW9uXG4iOworICAgICAgICBy
ZXR1cm4gJHZzVmVyc2lvbjsKKyAgICB9CisgICAgcHJpbnQgIlVuYWJsZSB0byBmaW5kIFZpc3Vh
bCBTdHVkaW9cbiI7CisgICAgcmV0dXJuIHVuZGVmOwogfQogCiBzdWIgZGV0ZXJtaW5lQ29uZmln
dXJhdGlvbkZvclZpc3VhbFN0dWRpbwpAQCAtMjA4NCw3ICsyMzA3LDExIEBAIHN1YiBnZW5lcmF0
ZUJ1aWxkU3lzdGVtRnJvbUNNYWtlUHJvamVjdAogICAgICAgICAgICAgcHVzaCBAYXJncywgIk5p
bmphIjsKICAgICAgICAgfQogICAgIH0gZWxzaWYgKGlzQW55V2luZG93cygpICYmIGlzV2luNjQo
KSkgewotICAgICAgICBwdXNoIEBhcmdzLCAnLUcgIlZpc3VhbCBTdHVkaW8gMTQgMjAxNSBXaW42
NCInOworICAgICAgICBpZiAoK3Zpc3VhbFN0dWRpb1ZlcnNpb24oKSA+PSAxNSkgeworICAgICAg
ICAgICAgcHVzaCBAYXJncywgJy1HICJWaXN1YWwgU3R1ZGlvIDE1IDIwMTcgV2luNjQiJzsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHB1c2ggQGFyZ3MsICctRyAiVmlzdWFsIFN0dWRp
byAxNCAyMDE1IFdpbjY0Iic7CisgICAgICAgIH0KICAgICB9CiAgICAgIyBEbyBub3Qgc2hvdyBw
cm9ncmVzcyBvZiBnZW5lcmF0aW5nIGJpbmRpbmdzIGluIGludGVyYWN0aXZlIE5pbmphIGJ1aWxk
IG5vdCB0byBsZWF2ZSBub2lzeSBsaW5lcyBvbiB0dHkKICAgICBwdXNoIEBhcmdzLCAnLURTSE9X
X0JJTkRJTkdTX0dFTkVSQVRJT05fUFJPR1JFU1M9MScgdW5sZXNzICgkd2lsbFVzZU5pbmphICYm
IC10IFNURE9VVCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>325105</attachid>
            <date>2017-10-26 20:02:46 -0700</date>
            <delta_ts>2017-10-27 15:25:29 -0700</delta_ts>
            <desc>Use vswhere to determine visual studio location</desc>
            <filename>175275-9.diff</filename>
            <type>text/plain</type>
            <size>14027</size>
            <attacher name="Stephan Szabo">stephan.szabo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBiNDZj
ZjdjYWM0YS4uYTcyYmMyMzQ1MjggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAxNy0xMC0yNiAgU3RlcGhhbiBTemFi
byAgPHN0ZXBoYW4uc3phYm9Ac29ueS5jb20+CisKKyAgICAgICAgW1dpbl0gRGV0ZWN0IFZpc3Vh
bCBTdHVkaW8gMjAxNyBsb2NhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc1Mjc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLWpzYzoKKyAgICAgICAgKiBTY3JpcHRzL2J1
aWxkLXdlYmtpdDoKKyAgICAgICAgKiBTY3JpcHRzL3VwZGF0ZS12c3doZXJlLnB5OiBBZGRlZC4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdGRpcnMucG06CisgICAgICAgIChwaWNrQ3VycmVudFZp
c3VhbFN0dWRpb0luc3RhbGxhdGlvbik6CisgICAgICAgIChwaWNrTGVnYWN5VmlzdWFsU3R1ZGlv
SW5zdGFsbGF0aW9uKToKKyAgICAgICAgKHZpc3VhbFN0dWRpb0luc3RhbGxEaXIpOgorICAgICAg
ICAodmlzdWFsU3R1ZGlvSW5zdGFsbERpclZTV2hlcmUpOgorICAgICAgICAodmlzdWFsU3R1ZGlv
SW5zdGFsbERpckxlZ2FjeSk6CisgICAgICAgICh2aXN1YWxTdHVkaW9JbnN0YWxsRGlyRmFsbGJh
Y2spOgorICAgICAgICAobXNCdWlsZEluc3RhbGxEaXIpOgorICAgICAgICAobXNCdWlsZEluc3Rh
bGxEaXJzVlNXaGVyZSk6CisgICAgICAgIChtc0J1aWxkSW5zdGFsbERpckxlZ2FjeSk6CisgICAg
ICAgIChtc0J1aWxkSW5zdGFsbERpckZhbGxiYWNrKToKKyAgICAgICAgKHZpc3VhbFN0dWRpb1Zl
cnNpb24pOgorICAgICAgICAodmlzdWFsU3R1ZGlvVmVyc2lvbkZyb21JbnN0YWxsRGlyKToKKyAg
ICAgICAgKGdlbmVyYXRlQnVpbGRTeXN0ZW1Gcm9tQ01ha2VQcm9qZWN0KToKKwogMjAxNy0xMC0y
NiAgQ2hyaXN0b3BoZXIgUmVpZCAgPGNocmlzLnJlaWRAc29ueS5jb20+CiAKICAgICAgICAgUmVt
b3ZlIHNjb3BlZ3VhcmQgZnJvbSBwbGF0Zm9ybQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9i
dWlsZC1qc2MgYi9Ub29scy9TY3JpcHRzL2J1aWxkLWpzYwppbmRleCBmMDc1NWQzMzUxNi4uZTQz
NDhmNDg1NTEgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvYnVpbGQtanNjCisrKyBiL1Rvb2xz
L1NjcmlwdHMvYnVpbGQtanNjCkBAIC0xMTcsNiArMTE3LDcgQEAgaWYgKGlzQXBwbGVXaW5XZWJL
aXQoKSkgewogCiBpZiAoaXNKU0NPbmx5KCkgJiYgaXNXaW5kb3dzKCkpIHsKICAgICAoc3lzdGVt
KCJweXRob24gVG9vbHMvU2NyaXB0cy91cGRhdGUtd2Via2l0LXdpbmNhaXJvLWxpYnMucHkiKSA9
PSAwKSBvciBkaWU7CisgICAgc3lzdGVtKCJweXRob24gVG9vbHMvU2NyaXB0cy91cGRhdGUtdnN3
aGVyZS5weSIpOwogfQogCiBjaGVja1JlcXVpcmVkU3lzdGVtQ29uZmlnKCk7CmRpZmYgLS1naXQg
YS9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdCBiL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0
CmluZGV4IDgxMjIxMmQ2YzYzLi4zNTIzOTA1MTcwZiAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0
cy9idWlsZC13ZWJraXQKKysrIGIvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQKQEAgLTI0NSw2
ICsyNDUsMTAgQEAgaWYgKGlzQXBwbGVDb2NvYVdlYktpdCgpKSB7CiAgICAgKHN5c3RlbSgicGVy
bCBUb29scy9TY3JpcHRzL3VwZGF0ZS13ZWJraXQtc3VwcG9ydC1saWJzIikgPT0gMCkgb3IgZGll
OwogfQogCitpZiAoaXNBbnlXaW5kb3dzKCkpIHsKKyAgICBzeXN0ZW0oInB5dGhvbiBUb29scy9T
Y3JpcHRzL3VwZGF0ZS12c3doZXJlLnB5Iik7Cit9CisKICMgSWYgYXNrZWQgdG8gYnVpbGQganVz
dCB0aGUgV2ViS2l0IHByb2plY3QsIG92ZXJ3cml0ZSB0aGUgcHJvamVjdHMKICMgbGlzdCBhZnRl
ciBhbGwgb2YgdGhlIHBvcnQgc3BlY2lmaWMgdHdlYWtzIGhhdmUgYmVlbiBtYWRlIHRvCiAjIGJ1
aWxkIG9wdGlvbnMsIGV0Yy4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvdXBkYXRlLXZzd2hl
cmUucHkgYi9Ub29scy9TY3JpcHRzL3VwZGF0ZS12c3doZXJlLnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hMWRjYmZjMDE5YQotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1NjcmlwdHMvdXBkYXRlLXZzd2hlcmUucHkKQEAgLTAsMCArMSw0MiBAQAorIyEgL3Vzci9i
aW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTcgU29ueSBJbnRlcmFjdGl2ZSBF
bnRlcnRhaW5tZW50IEluYy4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0
OgorIworIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorIyBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
IyBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyMgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1w
b3J0IGltcG9ydGxpYgoraW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgc3RhdAorCitkb3du
bG9hZCA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCdkb3dubG9hZC1sYXRlc3QtZ2l0aHViLXJl
bGVhc2UnKQorCityZXBvID0gJ01pY3Jvc29mdC92c3doZXJlJworZmlsZSA9ICd2c3doZXJlLmV4
ZScKK291dHB1dCA9ICdXZWJLaXRMaWJyYXJpZXMvd2luL3Rvb2xzJworCityZXN1bHQgPSBkb3du
bG9hZC5tYWluKFsnLW8nLCBvdXRwdXQsIHJlcG8sIGZpbGVdKQorCitpZiByZXN1bHQgPT0gZG93
bmxvYWQuU3RhdHVzLkNPVUxEX05PVF9GSU5EOgorICAgIHN5cy5leGl0KDEpCisKK29zLmNobW9k
KG9zLnBhdGguam9pbihvdXRwdXQsIGZpbGUpLCAwNzc3KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRkaXJzLnBtIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCmluZGV4IDBl
YTQwYTQwMmZlLi5jZjE4YWYwNTQyYyAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRk
aXJzLnBtCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQpAQCAtMzUsNiArMzUsOCBA
QCB1c2Ugd2FybmluZ3M7CiB1c2UgQ29uZmlnOwogdXNlIEN3ZCBxdyhyZWFscGF0aCk7CiB1c2Ug
RGlnZXN0OjpNRDUgcXcobWQ1X2hleCk7Cit1c2UgRW5jb2RlOwordXNlIEVuY29kZTo6TG9jYWxl
OwogdXNlIEZpbmRCaW47CiB1c2UgRmlsZTo6QmFzZW5hbWU7CiB1c2UgRmlsZTo6RmluZDsKQEAg
LTQyLDYgKzQ0LDcgQEAgdXNlIEZpbGU6OlBhdGggcXcobWFrZV9wYXRoIG1rcGF0aCBybXRyZWUp
OwogdXNlIEZpbGU6OlNwZWM7CiB1c2UgRmlsZTo6VGVtcCBxdyh0ZW1wZGlyKTsKIHVzZSBGaWxl
OjpzdGF0OwordXNlIEpTT046OlBQOwogdXNlIExpc3Q6OlV0aWw7CiB1c2UgUE9TSVg7CiB1c2Ug
VGltZTo6SGlSZXMgcXcodXNsZWVwKTsKQEAgLTE2MCw2ICsxNjMsOCBAQCBteSAkdnNWZXJzaW9u
OwogbXkgJHdpbmRvd3NTb3VyY2VEaXI7CiBteSAkd2luVmVyc2lvbjsKIG15ICR3aWxsVXNlVkNF
eHByZXNzV2hlbkJ1aWxkaW5nID0gMDsKK215ICR2c1doZXJlRm91bmRJbnN0YWxsYXRpb247Citt
eSAkdnNXaGVyZUxlZ2FjeUluc3RhbGxhdGlvbjsKIAogIyBEZWZpbmVkIGluIFZDU1V0aWxzLgog
c3ViIGV4aXRTdGF0dXMoJCk7CkBAIC01ODksNiArNTk0LDc4IEBAIHN1YiBwcm9ncmFtRmlsZXNQ
YXRoWDg2CiAgICAgcmV0dXJuICRwcm9ncmFtRmlsZXNQYXRoWDg2OwogfQogCitzdWIgcGlja0N1
cnJlbnRWaXN1YWxTdHVkaW9JbnN0YWxsYXRpb24KK3sKKyAgICByZXR1cm4gJHZzV2hlcmVGb3Vu
ZEluc3RhbGxhdGlvbiBpZiBkZWZpbmVkICR2c1doZXJlRm91bmRJbnN0YWxsYXRpb247CisKKyAg
ICBkZXRlcm1pbmVTb3VyY2VEaXIoKTsKKworICAgICMgUHJlZmVyIEVudGVycHJpc2UsIHRoZW4g
UHJvZmVzc2lvbmFsLCB0aGVuIENvbW11bml0eSwgdGhlbgorICAgICMgYW55dGhpbmcgZWxzZSB0
aGF0IHByb3ZpZGVzIE1TQnVpbGQuCisgICAgZm9yZWFjaCBteSAkcHJvZHVjdFR5cGUgKCgKKyAg
ICAgICAgJ01pY3Jvc29mdC5WaXN1YWxTdHVkaW8uUHJvZHVjdC5FbnRlcnByaXNlJywKKyAgICAg
ICAgJ01pY3Jvc29mdC5WaXN1YWxTdHVkaW8uUHJvZHVjdC5Qcm9mZXNzaW9uYWwnLAorICAgICAg
ICAnTWljcm9zb2Z0LlZpc3VhbFN0dWRpby5Qcm9kdWN0LkNvbW11bml0eScsCisgICAgICAgIHVu
ZGVmCisgICAgKSkgeworICAgICAgICBteSAkY29tbWFuZCA9ICIkc291cmNlRGlyL1dlYktpdExp
YnJhcmllcy93aW4vdG9vbHMvdnN3aGVyZSAtbm9sb2dvIC1sYXRlc3QgLWZvcm1hdCBqc29uIC1y
ZXF1aXJlcyBNaWNyb3NvZnQuQ29tcG9uZW50Lk1TQnVpbGQiOworICAgICAgICBpZiAoZGVmaW5l
ZCAkcHJvZHVjdFR5cGUpIHsKKyAgICAgICAgICAgICRjb21tYW5kIC49ICIgLXByb2R1Y3RzICRw
cm9kdWN0VHlwZSI7CisgICAgICAgIH0KKyAgICAgICAgbXkgJHZzV2hlcmVPdXQgPSBgJGNvbW1h
bmRgOworICAgICAgICBteSAkaW5zdGFsbGF0aW9ucyA9IFtdOworICAgICAgICBldmFsIHsKKyAg
ICAgICAgICAgICRpbnN0YWxsYXRpb25zID0gZGVjb2RlX2pzb24gRW5jb2RlOjplbmNvZGUoJ1VU
Ri04JyA9PiBFbmNvZGU6OmRlY29kZShjb25zb2xlX2luID0+ICR2c1doZXJlT3V0KSk7CisgICAg
ICAgIH07CisgICAgICAgIHByaW50ICJFcnJvciBnZXR0aW5nIFZpc3VhbCBTdHVkaW8gTG9jYXRp
b246ICRAXG4iIGlmICRAOworICAgICAgICB1bmRlZiAkQDsKKworICAgICAgICBpZiAoc2NhbGFy
IEAkaW5zdGFsbGF0aW9ucykgeworICAgICAgICAgICAgbXkgJGluc3RhbGxhdGlvbiA9ICRpbnN0
YWxsYXRpb25zLT5bMF07CisgICAgICAgICAgICAkdnNXaGVyZUZvdW5kSW5zdGFsbGF0aW9uID0g
JGluc3RhbGxhdGlvbjsKKyAgICAgICAgICAgICR2c1doZXJlRm91bmRJbnN0YWxsYXRpb24tPntp
bnN0YWxsYXRpb25WZXJzaW9ufSA9fiAvXigoXGQrKVwuKFxkKykpLzsKKyAgICAgICAgICAgICR2
c1doZXJlRm91bmRJbnN0YWxsYXRpb24tPntzaG9ydFZlcnNpb259ID0gJDE7CisgICAgICAgICAg
ICAkdnNXaGVyZUZvdW5kSW5zdGFsbGF0aW9uLT57bWFqb3JWZXJzaW9ufSA9ICQyOworICAgICAg
ICAgICAgcmV0dXJuICRpbnN0YWxsYXRpb247CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IHVuZGVmOworfQorCitzdWIgcGlja0xlZ2FjeVZpc3VhbFN0dWRpb0luc3RhbGxhdGlvbgorewor
ICAgIHJldHVybiAkdnNXaGVyZUxlZ2FjeUluc3RhbGxhdGlvbiBpZiBkZWZpbmVkICR2c1doZXJl
TGVnYWN5SW5zdGFsbGF0aW9uOworCisgICAgZGV0ZXJtaW5lU291cmNlRGlyKCk7CisKKyAgICBt
eSAkdnNXaGVyZU91dCA9IGAkc291cmNlRGlyL1dlYktpdExpYnJhcmllcy93aW4vdG9vbHMvdnN3
aGVyZSAtbm9sb2dvIC1sZWdhY3kgLWZvcm1hdCBqc29uYDsKKyAgICBteSAkaW5zdGFsbGF0aW9u
c19hbGwgPSBbXTsKKyAgICBldmFsIHsKKyAgICAgICAgJGluc3RhbGxhdGlvbnNfYWxsID0gZGVj
b2RlX2pzb24gRW5jb2RlOjplbmNvZGUoJ1VURi04JyA9PiBFbmNvZGU6OmRlY29kZShjb25zb2xl
X2luID0+ICR2c1doZXJlT3V0KSk7CisgICAgfTsKKyAgICBwcmludCAiRXJyb3IgZ2V0dGluZyBW
aXN1YWwgU3R1ZGlvIExlZ2FjeSBMb2NhdGlvbjogJEBcbiIgaWYgJEA7CisgICAgdW5kZWYgJEA7
CisKKyAgICAjIEl0J3MgcG9zc2libGUgdGhhdCBhIG5vbi1sZWdhY3kgaW5zdGFsbGF0aW9uIHdp
dGhvdXQgbXNidWlsZAorICAgICMgd291bGQgbm90IGJlIGZvdW5kIGJ5IHRoZSBsYXRlc3QsIGJ1
dCB3b3VsZCBiZSBmb3VuZCBieSB0aGlzCisgICAgIyB2c3doZXJlIGNhbGwsIGFuZCB3ZSB3YW50
IHRvIHNraXAgdGhvc2UsIHNvIGNoZWNrIGZvciB2ZXJzaW9ucworICAgICMgd2l0aCBhbiBpbnN0
YWxsYXRpb24gdmVyc2lvbiBiZWZvcmUgMTUuMC4KKyAgICBteSBAaW5zdGFsbGF0aW9ucyA9IGdy
ZXAgeyAoKyRfLT57aW5zdGFsbGF0aW9uVmVyc2lvbn0pIDwgMTUgfSBAJGluc3RhbGxhdGlvbnNf
YWxsOworCisgICAgIyBXZSBkb24ndCBnZXQgbXVjaCBpbmZvcm1hdGlvbiB0aGF0IHdvdWxkIGxl
dCB1cyBjaG9vc2UgYmV0d2VlbgorICAgICMgbGVnYWN5IGluc3RhbGxhdGlvbnMsIHNvIHdlJ2xs
IHRha2UgdGhlIGZpcnN0LgorICAgIGlmIChzY2FsYXIgQGluc3RhbGxhdGlvbnMpIHsKKyAgICAg
ICAgbXkgJGluc3RhbGxhdGlvbiA9ICRpbnN0YWxsYXRpb25zWzBdOworICAgICAgICAkaW5zdGFs
bGF0aW9uLT57aW5zdGFsbGF0aW9uVmVyc2lvbn0gPX4gL14oKFxkKylcLihcZCspKS87CisgICAg
ICAgICRpbnN0YWxsYXRpb24tPntzaG9ydFZlcnNpb259ID0gJDE7CisgICAgICAgICRpbnN0YWxs
YXRpb24tPnttYWpvclZlcnNpb259ID0gJDI7CisKKyAgICAgICAgJHZzV2hlcmVMZWdhY3lJbnN0
YWxsYXRpb24gPSAkaW5zdGFsbGF0aW9uOworICAgICAgICByZXR1cm4gJGluc3RhbGxhdGlvbjsK
KyAgICB9CisgICAgcmV0dXJuIHVuZGVmOworfQorCiBzdWIgdmlzdWFsU3R1ZGlvSW5zdGFsbERp
cgogewogICAgIHJldHVybiAkdnNJbnN0YWxsRGlyIGlmIGRlZmluZWQgJHZzSW5zdGFsbERpcjsK
QEAgLTU5Nyw5ICs2NzQsMTMgQEAgc3ViIHZpc3VhbFN0dWRpb0luc3RhbGxEaXIKICAgICAgICAg
JHZzSW5zdGFsbERpciA9ICRFTlZ7J1ZTSU5TVEFMTERJUid9OwogICAgICAgICAkdnNJbnN0YWxs
RGlyID1+IHN8W1xcL10kfHw7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgJHZzSW5zdGFsbERpciA9
IEZpbGU6OlNwZWMtPmNhdGRpcihwcm9ncmFtRmlsZXNQYXRoWDg2KCksICJNaWNyb3NvZnQgVmlz
dWFsIFN0dWRpbyIsICIyMDE3IiwgIkNvbW11bml0eSIpOworICAgICAgICAkdnNJbnN0YWxsRGly
ID0gdmlzdWFsU3R1ZGlvSW5zdGFsbERpclZTV2hlcmUoKTsKICAgICAgICAgaWYgKG5vdCAtZSAk
dnNJbnN0YWxsRGlyKSB7Ci0gICAgICAgICAgICAkdnNJbnN0YWxsRGlyID0gRmlsZTo6U3BlYy0+
Y2F0ZGlyKHByb2dyYW1GaWxlc1BhdGhYODYoKSwgIk1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDE0
LjAiKTsKKyAgICAgICAgICAgICR2c0luc3RhbGxEaXIgPSB2aXN1YWxTdHVkaW9JbnN0YWxsRGly
TGVnYWN5KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5vdCAtZSAkdnNJbnN0YWxsRGlyKSB7
CisgICAgICAgICAgICAkdnNJbnN0YWxsRGlyID0gdmlzdWFsU3R1ZGlvSW5zdGFsbERpckZhbGxi
YWNrKCk7CisgICAgICAgICAgICBwcmludCAiRmFsbGJhY2sgJHZzSW5zdGFsbERpclxuIjsKICAg
ICAgICAgfQogICAgIH0KICAgICBjaG9tcCgkdnNJbnN0YWxsRGlyID0gYGN5Z3BhdGggIiR2c0lu
c3RhbGxEaXIiYCkgaWYgaXNDeWd3aW4oKTsKQEAgLTYwOCwzMiArNjg5LDE2MSBAQCBzdWIgdmlz
dWFsU3R1ZGlvSW5zdGFsbERpcgogICAgIHJldHVybiAkdnNJbnN0YWxsRGlyOwogfQogCitzdWIg
dmlzdWFsU3R1ZGlvSW5zdGFsbERpclZTV2hlcmUKK3sKKyAgICBwaWNrQ3VycmVudFZpc3VhbFN0
dWRpb0luc3RhbGxhdGlvbigpOworICAgIGlmIChkZWZpbmVkKCR2c1doZXJlRm91bmRJbnN0YWxs
YXRpb24pKSB7CisgICAgICAgIHJldHVybiAkdnNXaGVyZUZvdW5kSW5zdGFsbGF0aW9uLT57aW5z
dGFsbGF0aW9uUGF0aH07CisgICAgfQorICAgIHJldHVybiB1bmRlZjsKK30KKworc3ViIHZpc3Vh
bFN0dWRpb0luc3RhbGxEaXJMZWdhY3kKK3sKKyAgICBwaWNrTGVnYWN5VmlzdWFsU3R1ZGlvSW5z
dGFsbGF0aW9uKCk7CisgICAgaWYgKGRlZmluZWQoJHZzV2hlcmVMZWdhY3lJbnN0YWxsYXRpb24p
KSB7CisgICAgICAgIHJldHVybiAkdnNXaGVyZUxlZ2FjeUluc3RhbGxhdGlvbi0+e2luc3RhbGxh
dGlvblBhdGh9OworICAgIH0KKyAgICByZXR1cm4gdW5kZWY7Cit9CisKK3N1YiB2aXN1YWxTdHVk
aW9JbnN0YWxsRGlyRmFsbGJhY2sKK3sKKyAgICBmb3JlYWNoIG15ICRwcm9kdWN0VHlwZSAoKAor
ICAgICAgICAnRW50ZXJwcmlzZScsCisgICAgICAgICdQcm9mZXNzaW9uYWwnLAorICAgICAgICAn
Q29tbXVuaXR5JywKKyAgICApKSB7CisgICAgICAgIG15ICRpbnN0YWxsZGlyID0gRmlsZTo6U3Bl
Yy0+Y2F0ZGlyKHByb2dyYW1GaWxlc1BhdGhYODYoKSwKKyAgICAgICAgICAgICJNaWNyb3NvZnQg
VmlzdWFsIFN0dWRpbyIsICIyMDE3IiwgJHByb2R1Y3RUeXBlKTsKKyAgICAgICAgbXkgJG1zYnVp
bGRkaXIgPSBGaWxlOjpTcGVjLT5jYXRkaXIoJGluc3RhbGxkaXIsCisgICAgICAgICAgICAiTVNC
dWlsZCIsICIxNS4wIiwgImJpbiIpOworICAgICAgICBpZiAoLWUgJGluc3RhbGxkaXIgJiYgLWUg
JG1zYnVpbGRkaXIpIHsKKyAgICAgICAgICAgIHJldHVybiAkaW5zdGFsbGRpcjsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gRmlsZTo6U3BlYy0+Y2F0ZGlyKHByb2dyYW1GaWxlc1BhdGhY
ODYoKSwgIk1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDE0LjAiKTsKK30KKwogc3ViIG1zQnVpbGRJ
bnN0YWxsRGlyCiB7CiAgICAgcmV0dXJuICRtc0J1aWxkSW5zdGFsbERpciBpZiBkZWZpbmVkICRt
c0J1aWxkSW5zdGFsbERpcjsKIAotICAgICRtc0J1aWxkSW5zdGFsbERpciA9IEZpbGU6OlNwZWMt
PmNhdGRpcihwcm9ncmFtRmlsZXNQYXRoWDg2KCksICJNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyIs
ICIyMDE3IiwgIkNvbW11bml0eSIsICJNU0J1aWxkIiwgIjE1LjAiLCAiQmluIik7Ci0gICAgaWYg
KG5vdCAtZSAkbXNCdWlsZEluc3RhbGxEaXIpIHsKLSAgICAgICAgJG1zQnVpbGRJbnN0YWxsRGly
ID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKHByb2dyYW1GaWxlc1BhdGhYODYoKSwgIk1TQnVpbGQiLCAi
MTQuMCIsICJCaW4iKTsKKyAgICBpZiAoJEVOVnsnVlNJTlNUQUxMRElSJ30pIHsKKyAgICAgICAg
bXkgJGRpciA9IEZpbGU6OlNwZWMtPmNhdGRpcigkRU5WeydWU0lOU1RBTExESVInfSwKKyAgICAg
ICAgICAgICJNU0J1aWxkIiwgIjE1LjAiLCAiYmluIik7CisgICAgICAgIGlmICgtZSAkZGlyKSB7
CisgICAgICAgICAgICAkbXNCdWlsZEluc3RhbGxEaXIgPSAkZGlyOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgJG1zQnVpbGRJbnN0YWxsRGlyID0gbXNCdWlsZEluc3RhbGxEaXJMZWdh
Y3koKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChub3QgZGVmaW5lZCAkbXNCdWlsZElu
c3RhbGxEaXIpIHsKKyAgICAgICAgbXkgQG1zQnVpbGRQb3NzaWJsZUluc3RhbGxEaXJzID0gbXNC
dWlsZEluc3RhbGxEaXJzVlNXaGVyZSgpOworICAgICAgICAkbXNCdWlsZEluc3RhbGxEaXIgPSAo
Z3JlcCB7IC1lICRfIH0gQG1zQnVpbGRQb3NzaWJsZUluc3RhbGxEaXJzKVswXTsKKyAgICB9CisK
KyAgICBpZiAoKG5vdCBkZWZpbmVkICRtc0J1aWxkSW5zdGFsbERpcikgJiYgZGVmaW5lZCAkdnNX
aGVyZUxlZ2FjeUluc3RhbGxhdGlvbikgeworICAgICAgICAkbXNCdWlsZEluc3RhbGxEaXIgPSBt
c0J1aWxkSW5zdGFsbERpckxlZ2FjeSgpOworICAgIH0KKworICAgIGlmIChub3QgZGVmaW5lZCAk
bXNCdWlsZEluc3RhbGxEaXIpIHsKKyAgICAgICAgJG1zQnVpbGRJbnN0YWxsRGlyID0gbXNCdWls
ZEluc3RhbGxEaXJGYWxsYmFjaygpOwogICAgIH0KKwogICAgIGNob21wKCRtc0J1aWxkSW5zdGFs
bERpciA9IGBjeWdwYXRoICIkbXNCdWlsZEluc3RhbGxEaXIiYCkgaWYgaXNDeWd3aW4oKTsKIAog
ICAgIHByaW50ICJVc2luZyBNU0J1aWxkOiAkbXNCdWlsZEluc3RhbGxEaXJcbiI7CiAgICAgcmV0
dXJuICRtc0J1aWxkSW5zdGFsbERpcjsKIH0KIAorc3ViIG1zQnVpbGRJbnN0YWxsRGlyc1ZTV2hl
cmUKK3sKKyAgICBwaWNrQ3VycmVudFZpc3VhbFN0dWRpb0luc3RhbGxhdGlvbigpOworICAgIGlm
IChkZWZpbmVkKCR2c1doZXJlRm91bmRJbnN0YWxsYXRpb24pKSB7CisgICAgICAgIHJldHVybiAo
CisgICAgICAgICAgICBGaWxlOjpTcGVjLT5jYXRkaXIoCisgICAgICAgICAgICAgICAgJHZzV2hl
cmVGb3VuZEluc3RhbGxhdGlvbi0+e2luc3RhbGxhdGlvblBhdGh9LAorICAgICAgICAgICAgICAg
ICJNU0J1aWxkIiwKKyAgICAgICAgICAgICAgICAkdnNXaGVyZUZvdW5kSW5zdGFsbGF0aW9uLT57
c2hvcnRWZXJzaW9ufSwKKyAgICAgICAgICAgICAgICAiQmluIiksCisgICAgICAgICAgICBGaWxl
OjpTcGVjLT5jYXRkaXIoCisgICAgICAgICAgICAgICAgJHZzV2hlcmVGb3VuZEluc3RhbGxhdGlv
bi0+e2luc3RhbGxhdGlvblBhdGh9LAorICAgICAgICAgICAgICAgICJNU0J1aWxkIiwKKyAgICAg
ICAgICAgICAgICAkdnNXaGVyZUZvdW5kSW5zdGFsbGF0aW9uLT57bWFqb3JWZXJzaW9ufS4iLjAi
LAorICAgICAgICAgICAgICAgICJCaW4iKSwKKyAgICAgICAgKTsKKyAgICB9CisgICAgcmV0dXJu
ICgpOworfQorCitzdWIgbXNCdWlsZEluc3RhbGxEaXJMZWdhY3kgeworICAgIHJldHVybiBGaWxl
OjpTcGVjLT5jYXRkaXIocHJvZ3JhbUZpbGVzUGF0aFg4NigpLCAiTVNCdWlsZCIsICIxNC4wIiwg
IkJpbiIpOworfQorCitzdWIgbXNCdWlsZEluc3RhbGxEaXJGYWxsYmFjayB7CisgICAgbXkgJGRp
ciA9IEZpbGU6OlNwZWMtPmNhdGRpcih2aXN1YWxTdHVkaW9JbnN0YWxsRGlyTm9uTGVnYWN5KCks
CisgICAgICAgICJNU0J1aWxkIiwgIjE1LjAiLCAiYmluIik7CisgICAgaWYgKC1lICRkaXIpIHsK
KyAgICAgICAgcmV0dXJuICRkaXI7CisgICAgfQorICAgIHJldHVybiBtc0J1aWxkSW5zdGFsbERp
ckxlZ2FjeSgpOworfQorCiBzdWIgdmlzdWFsU3R1ZGlvVmVyc2lvbgogewogICAgIHJldHVybiAk
dnNWZXJzaW9uIGlmIGRlZmluZWQgJHZzVmVyc2lvbjsKIAotICAgIG15ICRpbnN0YWxsRGlyID0g
dmlzdWFsU3R1ZGlvSW5zdGFsbERpcigpOworICAgIGlmICgkRU5WeydWU0lOU1RBTExESVInfSkg
eworICAgICAgICAkdnNWZXJzaW9uID0gdmlzdWFsU3R1ZGlvVmVyc2lvbkZyb21JbnN0YWxsRGly
KCRFTlZ7J1ZTSU5TVEFMTERJUid9KTsKKyAgICB9CiAKLSAgICAkdnNWZXJzaW9uID0gKCRpbnN0
YWxsRGlyID1+IC9NaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAoWzAtOV0rXC5bMC05XSopLykgPyAk
MSA6ICIxNCI7CisgICAgaWYgKCFkZWZpbmVkKCR2c1ZlcnNpb24pKSB7CisgICAgICAgIHBpY2tD
dXJyZW50VmlzdWFsU3R1ZGlvSW5zdGFsbGF0aW9uKCk7CisgICAgICAgIGlmIChkZWZpbmVkKCR2
c1doZXJlRm91bmRJbnN0YWxsYXRpb24pKSB7CisgICAgICAgICAgICAkdnNWZXJzaW9uID0gJHZz
V2hlcmVGb3VuZEluc3RhbGxhdGlvbi0+e3Nob3J0VmVyc2lvbn07CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAoIWRlZmluZWQoJHZzVmVyc2lvbikpIHsKKyAgICAgICAgcGlja0xlZ2FjeVZp
c3VhbFN0dWRpb0luc3RhbGxhdGlvbigpOworICAgICAgICBpZiAoZGVmaW5lZCgkdnNXaGVyZUxl
Z2FjeUluc3RhbGxhdGlvbikpIHsKKyAgICAgICAgICAgICR2c1ZlcnNpb24gPSAkdnNXaGVyZUxl
Z2FjeUluc3RhbGxhdGlvbi0+e3Nob3J0VmVyc2lvbn07CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAoIWRlZmluZWQoJHZzVmVyc2lvbikpIHsKKyAgICAgICAgbXkgJGluc3RhbGxEaXIgPSB2
aXN1YWxTdHVkaW9JbnN0YWxsRGlyKCk7CisgICAgICAgICR2c1ZlcnNpb24gPSB2aXN1YWxTdHVk
aW9WZXJzaW9uRnJvbUluc3RhbGxEaXIoJGluc3RhbGxEaXIpOworICAgIH0KKworICAgIGlmICgh
ZGVmaW5lZCgkdnNWZXJzaW9uKSkgeworICAgICAgICAkdnNWZXJzaW9uID0gIjE0IjsKKyAgICB9
CiAKICAgICBwcmludCAiVXNpbmcgVmlzdWFsIFN0dWRpbyAkdnNWZXJzaW9uXG4iOwogICAgIHJl
dHVybiAkdnNWZXJzaW9uOwogfQogCitzdWIgdmlzdWFsU3R1ZGlvVmVyc2lvbkZyb21JbnN0YWxs
RGlyCit7CisgICAgbXkgKCRkaXIpID0gQF87CisgICAgbXkgJHZlcnNpb247CisKKyAgICBpZiAo
JGRpciA9fiBtfE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvWy9cXF0yMDE3fCkgeworICAgICAgICAk
dmVyc2lvbiA9ICIxNS4wIjsKKyAgICB9CisKKyAgICBpZiAoIWRlZmluZWQoJHZlcnNpb24pKSB7
CisgICAgICAgIGlmICgkZGlyID1+IC9NaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAoWzAtOV0rXC5b
MC05XSopLykgeworICAgICAgICAgICAgJHZlcnNpb24gPSAkMTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiAkdmVyc2lvbjsKK30KKwogc3ViIGRldGVybWluZUNvbmZpZ3VyYXRpb25G
b3JWaXN1YWxTdHVkaW8KIHsKICAgICByZXR1cm4gaWYgZGVmaW5lZCAkY29uZmlndXJhdGlvbkZv
clZpc3VhbFN0dWRpbzsKQEAgLTIwODQsNyArMjI5NCwxMSBAQCBzdWIgZ2VuZXJhdGVCdWlsZFN5
c3RlbUZyb21DTWFrZVByb2plY3QKICAgICAgICAgICAgIHB1c2ggQGFyZ3MsICJOaW5qYSI7CiAg
ICAgICAgIH0KICAgICB9IGVsc2lmIChpc0FueVdpbmRvd3MoKSAmJiBpc1dpbjY0KCkpIHsKLSAg
ICAgICAgcHVzaCBAYXJncywgJy1HICJWaXN1YWwgU3R1ZGlvIDE0IDIwMTUgV2luNjQiJzsKKyAg
ICAgICAgaWYgKCt2aXN1YWxTdHVkaW9WZXJzaW9uKCkgPj0gMTUpIHsKKyAgICAgICAgICAgIHB1
c2ggQGFyZ3MsICctRyAiVmlzdWFsIFN0dWRpbyAxNSAyMDE3IFdpbjY0Iic7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBwdXNoIEBhcmdzLCAnLUcgIlZpc3VhbCBTdHVkaW8gMTQgMjAx
NSBXaW42NCInOworICAgICAgICB9CiAgICAgfQogICAgICMgRG8gbm90IHNob3cgcHJvZ3Jlc3Mg
b2YgZ2VuZXJhdGluZyBiaW5kaW5ncyBpbiBpbnRlcmFjdGl2ZSBOaW5qYSBidWlsZCBub3QgdG8g
bGVhdmUgbm9pc3kgbGluZXMgb24gdHR5CiAgICAgcHVzaCBAYXJncywgJy1EU0hPV19CSU5ESU5H
U19HRU5FUkFUSU9OX1BST0dSRVNTPTEnIHVubGVzcyAoJHdpbGxVc2VOaW5qYSAmJiAtdCBTVERP
VVQpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>325179</attachid>
            <date>2017-10-27 10:52:00 -0700</date>
            <delta_ts>2017-10-27 15:25:29 -0700</delta_ts>
            <desc>Use vswhere to determine visual studio location - simplified</desc>
            <filename>175275-11.diff</filename>
            <type>text/plain</type>
            <size>11450</size>
            <attacher name="Stephan Szabo">stephan.szabo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBiNDZj
ZjdjYWM0YS4uNTllNjBiMDYwYzMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAxNy0xMC0yNyAgU3RlcGhhbiBTemFi
byAgPHN0ZXBoYW4uc3phYm9Ac29ueS5jb20+CisKKyAgICAgICAgW1dpbl0gRGV0ZWN0IFZpc3Vh
bCBTdHVkaW8gMjAxNyBsb2NhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc1Mjc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLWpzYzoKKyAgICAgICAgKiBTY3JpcHRzL2J1
aWxkLXdlYmtpdDoKKyAgICAgICAgKiBTY3JpcHRzL3VwZGF0ZS12c3doZXJlLnB5OiBBZGRlZC4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdGRpcnMucG06CisgICAgICAgIChwaWNrQ3VycmVudFZp
c3VhbFN0dWRpb0luc3RhbGxhdGlvbik6CisgICAgICAgIChwaWNrTGVnYWN5VmlzdWFsU3R1ZGlv
SW5zdGFsbGF0aW9uKToKKyAgICAgICAgKHZpc3VhbFN0dWRpb0luc3RhbGxEaXIpOgorICAgICAg
ICAodmlzdWFsU3R1ZGlvSW5zdGFsbERpclZTV2hlcmUpOgorICAgICAgICAodmlzdWFsU3R1ZGlv
SW5zdGFsbERpckxlZ2FjeSk6CisgICAgICAgICh2aXN1YWxTdHVkaW9JbnN0YWxsRGlyRmFsbGJh
Y2spOgorICAgICAgICAobXNCdWlsZEluc3RhbGxEaXIpOgorICAgICAgICAodmlzdWFsU3R1ZGlv
VmVyc2lvbik6CisgICAgICAgICh2aXN1YWxTdHVkaW9WZXJzaW9uRnJvbUluc3RhbGxEaXIpOgor
ICAgICAgICAoZ2VuZXJhdGVCdWlsZFN5c3RlbUZyb21DTWFrZVByb2plY3QpOgorCiAyMDE3LTEw
LTI2ICBDaHJpc3RvcGhlciBSZWlkICA8Y2hyaXMucmVpZEBzb255LmNvbT4KIAogICAgICAgICBS
ZW1vdmUgc2NvcGVndWFyZCBmcm9tIHBsYXRmb3JtCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L2J1aWxkLWpzYyBiL1Rvb2xzL1NjcmlwdHMvYnVpbGQtanNjCmluZGV4IGYwNzU1ZDMzNTE2Li5l
NDM0OGY0ODU1MSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9idWlsZC1qc2MKKysrIGIvVG9v
bHMvU2NyaXB0cy9idWlsZC1qc2MKQEAgLTExNyw2ICsxMTcsNyBAQCBpZiAoaXNBcHBsZVdpbldl
YktpdCgpKSB7CiAKIGlmIChpc0pTQ09ubHkoKSAmJiBpc1dpbmRvd3MoKSkgewogICAgIChzeXN0
ZW0oInB5dGhvbiBUb29scy9TY3JpcHRzL3VwZGF0ZS13ZWJraXQtd2luY2Fpcm8tbGlicy5weSIp
ID09IDApIG9yIGRpZTsKKyAgICBzeXN0ZW0oInB5dGhvbiBUb29scy9TY3JpcHRzL3VwZGF0ZS12
c3doZXJlLnB5Iik7CiB9CiAKIGNoZWNrUmVxdWlyZWRTeXN0ZW1Db25maWcoKTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0IGIvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJr
aXQKaW5kZXggODEyMjEyZDZjNjMuLjM1MjM5MDUxNzBmIDEwMDc1NQotLS0gYS9Ub29scy9TY3Jp
cHRzL2J1aWxkLXdlYmtpdAorKysgYi9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdApAQCAtMjQ1
LDYgKzI0NSwxMCBAQCBpZiAoaXNBcHBsZUNvY29hV2ViS2l0KCkpIHsKICAgICAoc3lzdGVtKCJw
ZXJsIFRvb2xzL1NjcmlwdHMvdXBkYXRlLXdlYmtpdC1zdXBwb3J0LWxpYnMiKSA9PSAwKSBvciBk
aWU7CiB9CiAKK2lmIChpc0FueVdpbmRvd3MoKSkgeworICAgIHN5c3RlbSgicHl0aG9uIFRvb2xz
L1NjcmlwdHMvdXBkYXRlLXZzd2hlcmUucHkiKTsKK30KKwogIyBJZiBhc2tlZCB0byBidWlsZCBq
dXN0IHRoZSBXZWJLaXQgcHJvamVjdCwgb3ZlcndyaXRlIHRoZSBwcm9qZWN0cwogIyBsaXN0IGFm
dGVyIGFsbCBvZiB0aGUgcG9ydCBzcGVjaWZpYyB0d2Vha3MgaGF2ZSBiZWVuIG1hZGUgdG8KICMg
YnVpbGQgb3B0aW9ucywgZXRjLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy91cGRhdGUtdnN3
aGVyZS5weSBiL1Rvb2xzL1NjcmlwdHMvdXBkYXRlLXZzd2hlcmUucHkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmExZGNiZmMwMTlhCi0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvU2NyaXB0cy91cGRhdGUtdnN3aGVyZS5weQpAQCAtMCwwICsxLDQyIEBACisjISAvdXNy
L2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoQykgMjAxNyBTb255IEludGVyYWN0aXZl
IEVudGVydGFpbm1lbnQgSW5jLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBt
ZXQ6CisjCisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisjIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisjIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorIyBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitp
bXBvcnQgaW1wb3J0bGliCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCBzdGF0CisKK2Rv
d25sb2FkID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJ2Rvd25sb2FkLWxhdGVzdC1naXRodWIt
cmVsZWFzZScpCisKK3JlcG8gPSAnTWljcm9zb2Z0L3Zzd2hlcmUnCitmaWxlID0gJ3Zzd2hlcmUu
ZXhlJworb3V0cHV0ID0gJ1dlYktpdExpYnJhcmllcy93aW4vdG9vbHMnCisKK3Jlc3VsdCA9IGRv
d25sb2FkLm1haW4oWyctbycsIG91dHB1dCwgcmVwbywgZmlsZV0pCisKK2lmIHJlc3VsdCA9PSBk
b3dubG9hZC5TdGF0dXMuQ09VTERfTk9UX0ZJTkQ6CisgICAgc3lzLmV4aXQoMSkKKworb3MuY2ht
b2Qob3MucGF0aC5qb2luKG91dHB1dCwgZmlsZSksIDA3NzcpCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdGRpcnMucG0gYi9Ub29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0KaW5kZXgg
MGVhNDBhNDAyZmUuLmE5YmFjZWVmNTQ1IDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtp
dGRpcnMucG0KKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCkBAIC0zNSw2ICszNSw4
IEBAIHVzZSB3YXJuaW5nczsKIHVzZSBDb25maWc7CiB1c2UgQ3dkIHF3KHJlYWxwYXRoKTsKIHVz
ZSBEaWdlc3Q6Ok1ENSBxdyhtZDVfaGV4KTsKK3VzZSBFbmNvZGU7Cit1c2UgRW5jb2RlOjpMb2Nh
bGU7CiB1c2UgRmluZEJpbjsKIHVzZSBGaWxlOjpCYXNlbmFtZTsKIHVzZSBGaWxlOjpGaW5kOwpA
QCAtNDIsNiArNDQsNyBAQCB1c2UgRmlsZTo6UGF0aCBxdyhtYWtlX3BhdGggbWtwYXRoIHJtdHJl
ZSk7CiB1c2UgRmlsZTo6U3BlYzsKIHVzZSBGaWxlOjpUZW1wIHF3KHRlbXBkaXIpOwogdXNlIEZp
bGU6OnN0YXQ7Cit1c2UgSlNPTjo6UFA7CiB1c2UgTGlzdDo6VXRpbDsKIHVzZSBQT1NJWDsKIHVz
ZSBUaW1lOjpIaVJlcyBxdyh1c2xlZXApOwpAQCAtMTYwLDYgKzE2Myw4IEBAIG15ICR2c1ZlcnNp
b247CiBteSAkd2luZG93c1NvdXJjZURpcjsKIG15ICR3aW5WZXJzaW9uOwogbXkgJHdpbGxVc2VW
Q0V4cHJlc3NXaGVuQnVpbGRpbmcgPSAwOworbXkgJHZzV2hlcmVGb3VuZEluc3RhbGxhdGlvbjsK
K215ICR2c1doZXJlTGVnYWN5SW5zdGFsbGF0aW9uOwogCiAjIERlZmluZWQgaW4gVkNTVXRpbHMu
CiBzdWIgZXhpdFN0YXR1cygkKTsKQEAgLTU4OSw2ICs1OTQsNzEgQEAgc3ViIHByb2dyYW1GaWxl
c1BhdGhYODYKICAgICByZXR1cm4gJHByb2dyYW1GaWxlc1BhdGhYODY7CiB9CiAKK3N1YiBwaWNr
Q3VycmVudFZpc3VhbFN0dWRpb0luc3RhbGxhdGlvbgoreworICAgIHJldHVybiAkdnNXaGVyZUZv
dW5kSW5zdGFsbGF0aW9uIGlmIGRlZmluZWQgJHZzV2hlcmVGb3VuZEluc3RhbGxhdGlvbjsKKwor
ICAgIGRldGVybWluZVNvdXJjZURpcigpOworCisgICAgIyBQcmVmZXIgRW50ZXJwcmlzZSwgdGhl
biBQcm9mZXNzaW9uYWwsIHRoZW4gQ29tbXVuaXR5LCB0aGVuCisgICAgIyBhbnl0aGluZyBlbHNl
IHRoYXQgcHJvdmlkZXMgTVNCdWlsZC4KKyAgICBmb3JlYWNoIG15ICRwcm9kdWN0VHlwZSAoKAor
ICAgICAgICAnTWljcm9zb2Z0LlZpc3VhbFN0dWRpby5Qcm9kdWN0LkVudGVycHJpc2UnLAorICAg
ICAgICAnTWljcm9zb2Z0LlZpc3VhbFN0dWRpby5Qcm9kdWN0LlByb2Zlc3Npb25hbCcsCisgICAg
ICAgICdNaWNyb3NvZnQuVmlzdWFsU3R1ZGlvLlByb2R1Y3QuQ29tbXVuaXR5JywKKyAgICAgICAg
dW5kZWYKKyAgICApKSB7CisgICAgICAgIG15ICRjb21tYW5kID0gIiRzb3VyY2VEaXIvV2ViS2l0
TGlicmFyaWVzL3dpbi90b29scy92c3doZXJlIC1ub2xvZ28gLWxhdGVzdCAtZm9ybWF0IGpzb24g
LXJlcXVpcmVzIE1pY3Jvc29mdC5Db21wb25lbnQuTVNCdWlsZCI7CisgICAgICAgIGlmIChkZWZp
bmVkICRwcm9kdWN0VHlwZSkgeworICAgICAgICAgICAgJGNvbW1hbmQgLj0gIiAtcHJvZHVjdHMg
JHByb2R1Y3RUeXBlIjsKKyAgICAgICAgfQorICAgICAgICBteSAkdnNXaGVyZU91dCA9IGAkY29t
bWFuZGA7CisgICAgICAgIG15ICRpbnN0YWxsYXRpb25zID0gW107CisgICAgICAgIGV2YWwgewor
ICAgICAgICAgICAgJGluc3RhbGxhdGlvbnMgPSBkZWNvZGVfanNvbiBFbmNvZGU6OmVuY29kZSgn
VVRGLTgnID0+IEVuY29kZTo6ZGVjb2RlKGNvbnNvbGVfaW4gPT4gJHZzV2hlcmVPdXQpKTsKKyAg
ICAgICAgfTsKKyAgICAgICAgcHJpbnQgIkVycm9yIGdldHRpbmcgVmlzdWFsIFN0dWRpbyBMb2Nh
dGlvbjogJEBcbiIgaWYgJEA7CisgICAgICAgIHVuZGVmICRAOworCisgICAgICAgIGlmIChzY2Fs
YXIgQCRpbnN0YWxsYXRpb25zKSB7CisgICAgICAgICAgICBteSAkaW5zdGFsbGF0aW9uID0gJGlu
c3RhbGxhdGlvbnMtPlswXTsKKyAgICAgICAgICAgICR2c1doZXJlRm91bmRJbnN0YWxsYXRpb24g
PSAkaW5zdGFsbGF0aW9uOworICAgICAgICAgICAgcmV0dXJuICRpbnN0YWxsYXRpb247CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHVuZGVmOworfQorCitzdWIgcGlja0xlZ2FjeVZpc3Vh
bFN0dWRpb0luc3RhbGxhdGlvbgoreworICAgIHJldHVybiAkdnNXaGVyZUxlZ2FjeUluc3RhbGxh
dGlvbiBpZiBkZWZpbmVkICR2c1doZXJlTGVnYWN5SW5zdGFsbGF0aW9uOworCisgICAgZGV0ZXJt
aW5lU291cmNlRGlyKCk7CisKKyAgICBteSAkdnNXaGVyZU91dCA9IGAkc291cmNlRGlyL1dlYktp
dExpYnJhcmllcy93aW4vdG9vbHMvdnN3aGVyZSAtbm9sb2dvIC1sZWdhY3kgLWZvcm1hdCBqc29u
YDsKKyAgICBteSAkaW5zdGFsbGF0aW9uc19hbGwgPSBbXTsKKyAgICBldmFsIHsKKyAgICAgICAg
JGluc3RhbGxhdGlvbnNfYWxsID0gZGVjb2RlX2pzb24gRW5jb2RlOjplbmNvZGUoJ1VURi04JyA9
PiBFbmNvZGU6OmRlY29kZShjb25zb2xlX2luID0+ICR2c1doZXJlT3V0KSk7CisgICAgfTsKKyAg
ICBwcmludCAiRXJyb3IgZ2V0dGluZyBWaXN1YWwgU3R1ZGlvIExlZ2FjeSBMb2NhdGlvbjogJEBc
biIgaWYgJEA7CisgICAgdW5kZWYgJEA7CisKKyAgICAjIEl0J3MgcG9zc2libGUgdGhhdCBhIG5v
bi1sZWdhY3kgaW5zdGFsbGF0aW9uIHdpdGhvdXQgbXNidWlsZAorICAgICMgd291bGQgbm90IGJl
IGZvdW5kIGJ5IHRoZSBsYXRlc3QsIGJ1dCB3b3VsZCBiZSBmb3VuZCBieSB0aGlzCisgICAgIyB2
c3doZXJlIGNhbGwsIGFuZCB3ZSB3YW50IHRvIHNraXAgdGhvc2UsIHNvIGNoZWNrIGZvciB2ZXJz
aW9ucworICAgICMgd2l0aCBhbiBpbnN0YWxsYXRpb24gdmVyc2lvbiBiZWZvcmUgMTUuMC4KKyAg
ICBteSBAaW5zdGFsbGF0aW9ucyA9IGdyZXAgeyAoKyRfLT57aW5zdGFsbGF0aW9uVmVyc2lvbn0p
IDwgMTUgfSBAJGluc3RhbGxhdGlvbnNfYWxsOworCisgICAgIyBXZSBkb24ndCBnZXQgbXVjaCBp
bmZvcm1hdGlvbiB0aGF0IHdvdWxkIGxldCB1cyBjaG9vc2UgYmV0d2VlbgorICAgICMgbGVnYWN5
IGluc3RhbGxhdGlvbnMsIHNvIHdlJ2xsIHRha2UgdGhlIGZpcnN0LgorICAgIGlmIChzY2FsYXIg
QGluc3RhbGxhdGlvbnMpIHsKKyAgICAgICAgbXkgJGluc3RhbGxhdGlvbiA9ICRpbnN0YWxsYXRp
b25zWzBdOworICAgICAgICAkdnNXaGVyZUxlZ2FjeUluc3RhbGxhdGlvbiA9ICRpbnN0YWxsYXRp
b247CisgICAgICAgIHJldHVybiAkaW5zdGFsbGF0aW9uOworICAgIH0KKyAgICByZXR1cm4gdW5k
ZWY7Cit9CisKIHN1YiB2aXN1YWxTdHVkaW9JbnN0YWxsRGlyCiB7CiAgICAgcmV0dXJuICR2c0lu
c3RhbGxEaXIgaWYgZGVmaW5lZCAkdnNJbnN0YWxsRGlyOwpAQCAtNTk3LDkgKzY2NywxMyBAQCBz
dWIgdmlzdWFsU3R1ZGlvSW5zdGFsbERpcgogICAgICAgICAkdnNJbnN0YWxsRGlyID0gJEVOVnsn
VlNJTlNUQUxMRElSJ307CiAgICAgICAgICR2c0luc3RhbGxEaXIgPX4gc3xbXFwvXSR8fDsKICAg
ICB9IGVsc2UgewotICAgICAgICAkdnNJbnN0YWxsRGlyID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKHBy
b2dyYW1GaWxlc1BhdGhYODYoKSwgIk1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIiwgIjIwMTciLCAi
Q29tbXVuaXR5Iik7CisgICAgICAgICR2c0luc3RhbGxEaXIgPSB2aXN1YWxTdHVkaW9JbnN0YWxs
RGlyVlNXaGVyZSgpOwogICAgICAgICBpZiAobm90IC1lICR2c0luc3RhbGxEaXIpIHsKLSAgICAg
ICAgICAgICR2c0luc3RhbGxEaXIgPSBGaWxlOjpTcGVjLT5jYXRkaXIocHJvZ3JhbUZpbGVzUGF0
aFg4NigpLCAiTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMTQuMCIpOworICAgICAgICAgICAgJHZz
SW5zdGFsbERpciA9IHZpc3VhbFN0dWRpb0luc3RhbGxEaXJMZWdhY3koKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAobm90IC1lICR2c0luc3RhbGxEaXIpIHsKKyAgICAgICAgICAgICR2c0luc3Rh
bGxEaXIgPSB2aXN1YWxTdHVkaW9JbnN0YWxsRGlyRmFsbGJhY2soKTsKKyAgICAgICAgICAgIHBy
aW50ICJGYWxsYmFjayAkdnNJbnN0YWxsRGlyXG4iOwogICAgICAgICB9CiAgICAgfQogICAgIGNo
b21wKCR2c0luc3RhbGxEaXIgPSBgY3lncGF0aCAiJHZzSW5zdGFsbERpciJgKSBpZiBpc0N5Z3dp
bigpOwpAQCAtNjA4LDE0ICs2ODIsNTYgQEAgc3ViIHZpc3VhbFN0dWRpb0luc3RhbGxEaXIKICAg
ICByZXR1cm4gJHZzSW5zdGFsbERpcjsKIH0KIAorc3ViIHZpc3VhbFN0dWRpb0luc3RhbGxEaXJW
U1doZXJlCit7CisgICAgcGlja0N1cnJlbnRWaXN1YWxTdHVkaW9JbnN0YWxsYXRpb24oKTsKKyAg
ICBpZiAoZGVmaW5lZCgkdnNXaGVyZUZvdW5kSW5zdGFsbGF0aW9uKSkgeworICAgICAgICByZXR1
cm4gJHZzV2hlcmVGb3VuZEluc3RhbGxhdGlvbi0+e2luc3RhbGxhdGlvblBhdGh9OworICAgIH0K
KyAgICByZXR1cm4gdW5kZWY7Cit9CisKK3N1YiB2aXN1YWxTdHVkaW9JbnN0YWxsRGlyTGVnYWN5
Cit7CisgICAgcGlja0xlZ2FjeVZpc3VhbFN0dWRpb0luc3RhbGxhdGlvbigpOworICAgIGlmIChk
ZWZpbmVkKCR2c1doZXJlTGVnYWN5SW5zdGFsbGF0aW9uKSkgeworICAgICAgICByZXR1cm4gJHZz
V2hlcmVMZWdhY3lJbnN0YWxsYXRpb24tPntpbnN0YWxsYXRpb25QYXRofTsKKyAgICB9CisgICAg
cmV0dXJuIHVuZGVmOworfQorCitzdWIgdmlzdWFsU3R1ZGlvSW5zdGFsbERpckZhbGxiYWNrCit7
CisgICAgZm9yZWFjaCBteSAkcHJvZHVjdFR5cGUgKCgKKyAgICAgICAgJ0VudGVycHJpc2UnLAor
ICAgICAgICAnUHJvZmVzc2lvbmFsJywKKyAgICAgICAgJ0NvbW11bml0eScsCisgICAgKSkgewor
ICAgICAgICBteSAkaW5zdGFsbGRpciA9IEZpbGU6OlNwZWMtPmNhdGRpcihwcm9ncmFtRmlsZXNQ
YXRoWDg2KCksCisgICAgICAgICAgICAiTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8iLCAiMjAxNyIs
ICRwcm9kdWN0VHlwZSk7CisgICAgICAgIG15ICRtc2J1aWxkZGlyID0gRmlsZTo6U3BlYy0+Y2F0
ZGlyKCRpbnN0YWxsZGlyLAorICAgICAgICAgICAgIk1TQnVpbGQiLCAiMTUuMCIsICJiaW4iKTsK
KyAgICAgICAgaWYgKC1lICRpbnN0YWxsZGlyICYmIC1lICRtc2J1aWxkZGlyKSB7CisgICAgICAg
ICAgICByZXR1cm4gJGluc3RhbGxkaXI7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEZp
bGU6OlNwZWMtPmNhdGRpcihwcm9ncmFtRmlsZXNQYXRoWDg2KCksICJNaWNyb3NvZnQgVmlzdWFs
IFN0dWRpbyAxNC4wIik7Cit9CisKIHN1YiBtc0J1aWxkSW5zdGFsbERpcgogewogICAgIHJldHVy
biAkbXNCdWlsZEluc3RhbGxEaXIgaWYgZGVmaW5lZCAkbXNCdWlsZEluc3RhbGxEaXI7CiAKLSAg
ICAkbXNCdWlsZEluc3RhbGxEaXIgPSBGaWxlOjpTcGVjLT5jYXRkaXIocHJvZ3JhbUZpbGVzUGF0
aFg4NigpLCAiTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8iLCAiMjAxNyIsICJDb21tdW5pdHkiLCAi
TVNCdWlsZCIsICIxNS4wIiwgIkJpbiIpOwotICAgIGlmIChub3QgLWUgJG1zQnVpbGRJbnN0YWxs
RGlyKSB7Ci0gICAgICAgICRtc0J1aWxkSW5zdGFsbERpciA9IEZpbGU6OlNwZWMtPmNhdGRpcihw
cm9ncmFtRmlsZXNQYXRoWDg2KCksICJNU0J1aWxkIiwgIjE0LjAiLCAiQmluIik7CisgICAgbXkg
JHZlcnNpb24gPSArdmlzdWFsU3R1ZGlvVmVyc2lvbigpOworICAgIGlmICgkdmVyc2lvbiA+PSAx
NS4wKSB7CisgICAgICAgIG15ICRpbnN0YWxsRGlyID0gdmlzdWFsU3R1ZGlvSW5zdGFsbERpcigp
OworICAgICAgICAkbXNCdWlsZEluc3RhbGxEaXIgPSBGaWxlOjpTcGVjLT5jYXRkaXIoJGluc3Rh
bGxEaXIsCisgICAgICAgICAgICAiTVNCdWlsZCIsICR2ZXJzaW9uLCAiYmluIik7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgJG1zQnVpbGRJbnN0YWxsRGlyID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKHBy
b2dyYW1GaWxlc1BhdGhYODYoKSwgCisgICAgICAgICAgICAiTVNCdWlsZCIsICIxNC4wIiwgIkJp
biIpCiAgICAgfQorCiAgICAgY2hvbXAoJG1zQnVpbGRJbnN0YWxsRGlyID0gYGN5Z3BhdGggIiRt
c0J1aWxkSW5zdGFsbERpciJgKSBpZiBpc0N5Z3dpbigpOwogCiAgICAgcHJpbnQgIlVzaW5nIE1T
QnVpbGQ6ICRtc0J1aWxkSW5zdGFsbERpclxuIjsKQEAgLTYyNywxMyArNzQzLDMwIEBAIHN1YiB2
aXN1YWxTdHVkaW9WZXJzaW9uCiAgICAgcmV0dXJuICR2c1ZlcnNpb24gaWYgZGVmaW5lZCAkdnNW
ZXJzaW9uOwogCiAgICAgbXkgJGluc3RhbGxEaXIgPSB2aXN1YWxTdHVkaW9JbnN0YWxsRGlyKCk7
Ci0KLSAgICAkdnNWZXJzaW9uID0gKCRpbnN0YWxsRGlyID1+IC9NaWNyb3NvZnQgVmlzdWFsIFN0
dWRpbyAoWzAtOV0rXC5bMC05XSopLykgPyAkMSA6ICIxNCI7CisgICAgJHZzVmVyc2lvbiA9IHZp
c3VhbFN0dWRpb1ZlcnNpb25Gcm9tSW5zdGFsbERpcigkaW5zdGFsbERpcik7CiAKICAgICBwcmlu
dCAiVXNpbmcgVmlzdWFsIFN0dWRpbyAkdnNWZXJzaW9uXG4iOwogICAgIHJldHVybiAkdnNWZXJz
aW9uOwogfQogCitzdWIgdmlzdWFsU3R1ZGlvVmVyc2lvbkZyb21JbnN0YWxsRGlyCit7CisgICAg
bXkgKCRkaXIpID0gQF87CisgICAgbXkgJHZlcnNpb247CisKKyAgICBpZiAoJGRpciA9fiBtfE1p
Y3Jvc29mdCBWaXN1YWwgU3R1ZGlvWy9cXF0yMDE3fCkgeworICAgICAgICAkdmVyc2lvbiA9ICIx
NS4wIjsKKyAgICB9CisKKyAgICBpZiAoIWRlZmluZWQoJHZlcnNpb24pKSB7CisgICAgICAgIGlm
ICgkZGlyID1+IC9NaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAoWzAtOV0rXC5bMC05XSopLykgewor
ICAgICAgICAgICAgJHZlcnNpb24gPSAkMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biAkdmVyc2lvbjsKK30KKwogc3ViIGRldGVybWluZUNvbmZpZ3VyYXRpb25Gb3JWaXN1YWxTdHVk
aW8KIHsKICAgICByZXR1cm4gaWYgZGVmaW5lZCAkY29uZmlndXJhdGlvbkZvclZpc3VhbFN0dWRp
bzsKQEAgLTIwODQsNyArMjIxNywxMSBAQCBzdWIgZ2VuZXJhdGVCdWlsZFN5c3RlbUZyb21DTWFr
ZVByb2plY3QKICAgICAgICAgICAgIHB1c2ggQGFyZ3MsICJOaW5qYSI7CiAgICAgICAgIH0KICAg
ICB9IGVsc2lmIChpc0FueVdpbmRvd3MoKSAmJiBpc1dpbjY0KCkpIHsKLSAgICAgICAgcHVzaCBA
YXJncywgJy1HICJWaXN1YWwgU3R1ZGlvIDE0IDIwMTUgV2luNjQiJzsKKyAgICAgICAgaWYgKCt2
aXN1YWxTdHVkaW9WZXJzaW9uKCkgPj0gMTUpIHsKKyAgICAgICAgICAgIHB1c2ggQGFyZ3MsICct
RyAiVmlzdWFsIFN0dWRpbyAxNSAyMDE3IFdpbjY0Iic7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBwdXNoIEBhcmdzLCAnLUcgIlZpc3VhbCBTdHVkaW8gMTQgMjAxNSBXaW42NCInOwor
ICAgICAgICB9CiAgICAgfQogICAgICMgRG8gbm90IHNob3cgcHJvZ3Jlc3Mgb2YgZ2VuZXJhdGlu
ZyBiaW5kaW5ncyBpbiBpbnRlcmFjdGl2ZSBOaW5qYSBidWlsZCBub3QgdG8gbGVhdmUgbm9pc3kg
bGluZXMgb24gdHR5CiAgICAgcHVzaCBAYXJncywgJy1EU0hPV19CSU5ESU5HU19HRU5FUkFUSU9O
X1BST0dSRVNTPTEnIHVubGVzcyAoJHdpbGxVc2VOaW5qYSAmJiAtdCBTVERPVVQpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>325206</attachid>
            <date>2017-10-27 15:25:29 -0700</date>
            <delta_ts>2017-11-01 10:55:14 -0700</delta_ts>
            <desc>Use vswhere to determine visual studio location - removed unneeded numeric conversions</desc>
            <filename>175275-12.diff</filename>
            <type>text/plain</type>
            <size>11448</size>
            <attacher name="Stephan Szabo">stephan.szabo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBiNDZj
ZjdjYWM0YS4uNTllNjBiMDYwYzMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAxNy0xMC0yNyAgU3RlcGhhbiBTemFi
byAgPHN0ZXBoYW4uc3phYm9Ac29ueS5jb20+CisKKyAgICAgICAgW1dpbl0gRGV0ZWN0IFZpc3Vh
bCBTdHVkaW8gMjAxNyBsb2NhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc1Mjc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLWpzYzoKKyAgICAgICAgKiBTY3JpcHRzL2J1
aWxkLXdlYmtpdDoKKyAgICAgICAgKiBTY3JpcHRzL3VwZGF0ZS12c3doZXJlLnB5OiBBZGRlZC4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdGRpcnMucG06CisgICAgICAgIChwaWNrQ3VycmVudFZp
c3VhbFN0dWRpb0luc3RhbGxhdGlvbik6CisgICAgICAgIChwaWNrTGVnYWN5VmlzdWFsU3R1ZGlv
SW5zdGFsbGF0aW9uKToKKyAgICAgICAgKHZpc3VhbFN0dWRpb0luc3RhbGxEaXIpOgorICAgICAg
ICAodmlzdWFsU3R1ZGlvSW5zdGFsbERpclZTV2hlcmUpOgorICAgICAgICAodmlzdWFsU3R1ZGlv
SW5zdGFsbERpckxlZ2FjeSk6CisgICAgICAgICh2aXN1YWxTdHVkaW9JbnN0YWxsRGlyRmFsbGJh
Y2spOgorICAgICAgICAobXNCdWlsZEluc3RhbGxEaXIpOgorICAgICAgICAodmlzdWFsU3R1ZGlv
VmVyc2lvbik6CisgICAgICAgICh2aXN1YWxTdHVkaW9WZXJzaW9uRnJvbUluc3RhbGxEaXIpOgor
ICAgICAgICAoZ2VuZXJhdGVCdWlsZFN5c3RlbUZyb21DTWFrZVByb2plY3QpOgorCiAyMDE3LTEw
LTI2ICBDaHJpc3RvcGhlciBSZWlkICA8Y2hyaXMucmVpZEBzb255LmNvbT4KIAogICAgICAgICBS
ZW1vdmUgc2NvcGVndWFyZCBmcm9tIHBsYXRmb3JtCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L2J1aWxkLWpzYyBiL1Rvb2xzL1NjcmlwdHMvYnVpbGQtanNjCmluZGV4IGYwNzU1ZDMzNTE2Li5l
NDM0OGY0ODU1MSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9idWlsZC1qc2MKKysrIGIvVG9v
bHMvU2NyaXB0cy9idWlsZC1qc2MKQEAgLTExNyw2ICsxMTcsNyBAQCBpZiAoaXNBcHBsZVdpbldl
YktpdCgpKSB7CiAKIGlmIChpc0pTQ09ubHkoKSAmJiBpc1dpbmRvd3MoKSkgewogICAgIChzeXN0
ZW0oInB5dGhvbiBUb29scy9TY3JpcHRzL3VwZGF0ZS13ZWJraXQtd2luY2Fpcm8tbGlicy5weSIp
ID09IDApIG9yIGRpZTsKKyAgICBzeXN0ZW0oInB5dGhvbiBUb29scy9TY3JpcHRzL3VwZGF0ZS12
c3doZXJlLnB5Iik7CiB9CiAKIGNoZWNrUmVxdWlyZWRTeXN0ZW1Db25maWcoKTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0IGIvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJr
aXQKaW5kZXggODEyMjEyZDZjNjMuLjM1MjM5MDUxNzBmIDEwMDc1NQotLS0gYS9Ub29scy9TY3Jp
cHRzL2J1aWxkLXdlYmtpdAorKysgYi9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdApAQCAtMjQ1
LDYgKzI0NSwxMCBAQCBpZiAoaXNBcHBsZUNvY29hV2ViS2l0KCkpIHsKICAgICAoc3lzdGVtKCJw
ZXJsIFRvb2xzL1NjcmlwdHMvdXBkYXRlLXdlYmtpdC1zdXBwb3J0LWxpYnMiKSA9PSAwKSBvciBk
aWU7CiB9CiAKK2lmIChpc0FueVdpbmRvd3MoKSkgeworICAgIHN5c3RlbSgicHl0aG9uIFRvb2xz
L1NjcmlwdHMvdXBkYXRlLXZzd2hlcmUucHkiKTsKK30KKwogIyBJZiBhc2tlZCB0byBidWlsZCBq
dXN0IHRoZSBXZWJLaXQgcHJvamVjdCwgb3ZlcndyaXRlIHRoZSBwcm9qZWN0cwogIyBsaXN0IGFm
dGVyIGFsbCBvZiB0aGUgcG9ydCBzcGVjaWZpYyB0d2Vha3MgaGF2ZSBiZWVuIG1hZGUgdG8KICMg
YnVpbGQgb3B0aW9ucywgZXRjLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy91cGRhdGUtdnN3
aGVyZS5weSBiL1Rvb2xzL1NjcmlwdHMvdXBkYXRlLXZzd2hlcmUucHkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmExZGNiZmMwMTlhCi0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvU2NyaXB0cy91cGRhdGUtdnN3aGVyZS5weQpAQCAtMCwwICsxLDQyIEBACisjISAvdXNy
L2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoQykgMjAxNyBTb255IEludGVyYWN0aXZl
IEVudGVydGFpbm1lbnQgSW5jLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBt
ZXQ6CisjCisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisjIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisjIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorIyBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitp
bXBvcnQgaW1wb3J0bGliCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCBzdGF0CisKK2Rv
d25sb2FkID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJ2Rvd25sb2FkLWxhdGVzdC1naXRodWIt
cmVsZWFzZScpCisKK3JlcG8gPSAnTWljcm9zb2Z0L3Zzd2hlcmUnCitmaWxlID0gJ3Zzd2hlcmUu
ZXhlJworb3V0cHV0ID0gJ1dlYktpdExpYnJhcmllcy93aW4vdG9vbHMnCisKK3Jlc3VsdCA9IGRv
d25sb2FkLm1haW4oWyctbycsIG91dHB1dCwgcmVwbywgZmlsZV0pCisKK2lmIHJlc3VsdCA9PSBk
b3dubG9hZC5TdGF0dXMuQ09VTERfTk9UX0ZJTkQ6CisgICAgc3lzLmV4aXQoMSkKKworb3MuY2ht
b2Qob3MucGF0aC5qb2luKG91dHB1dCwgZmlsZSksIDA3NzcpCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdGRpcnMucG0gYi9Ub29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0KaW5kZXgg
MGVhNDBhNDAyZmUuLjBlNzE1YjNlYWNlIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtp
dGRpcnMucG0KKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCkBAIC0zNSw2ICszNSw4
IEBAIHVzZSB3YXJuaW5nczsKIHVzZSBDb25maWc7CiB1c2UgQ3dkIHF3KHJlYWxwYXRoKTsKIHVz
ZSBEaWdlc3Q6Ok1ENSBxdyhtZDVfaGV4KTsKK3VzZSBFbmNvZGU7Cit1c2UgRW5jb2RlOjpMb2Nh
bGU7CiB1c2UgRmluZEJpbjsKIHVzZSBGaWxlOjpCYXNlbmFtZTsKIHVzZSBGaWxlOjpGaW5kOwpA
QCAtNDIsNiArNDQsNyBAQCB1c2UgRmlsZTo6UGF0aCBxdyhtYWtlX3BhdGggbWtwYXRoIHJtdHJl
ZSk7CiB1c2UgRmlsZTo6U3BlYzsKIHVzZSBGaWxlOjpUZW1wIHF3KHRlbXBkaXIpOwogdXNlIEZp
bGU6OnN0YXQ7Cit1c2UgSlNPTjo6UFA7CiB1c2UgTGlzdDo6VXRpbDsKIHVzZSBQT1NJWDsKIHVz
ZSBUaW1lOjpIaVJlcyBxdyh1c2xlZXApOwpAQCAtMTYwLDYgKzE2Myw4IEBAIG15ICR2c1ZlcnNp
b247CiBteSAkd2luZG93c1NvdXJjZURpcjsKIG15ICR3aW5WZXJzaW9uOwogbXkgJHdpbGxVc2VW
Q0V4cHJlc3NXaGVuQnVpbGRpbmcgPSAwOworbXkgJHZzV2hlcmVGb3VuZEluc3RhbGxhdGlvbjsK
K215ICR2c1doZXJlTGVnYWN5SW5zdGFsbGF0aW9uOwogCiAjIERlZmluZWQgaW4gVkNTVXRpbHMu
CiBzdWIgZXhpdFN0YXR1cygkKTsKQEAgLTU4OSw2ICs1OTQsNzEgQEAgc3ViIHByb2dyYW1GaWxl
c1BhdGhYODYKICAgICByZXR1cm4gJHByb2dyYW1GaWxlc1BhdGhYODY7CiB9CiAKK3N1YiBwaWNr
Q3VycmVudFZpc3VhbFN0dWRpb0luc3RhbGxhdGlvbgoreworICAgIHJldHVybiAkdnNXaGVyZUZv
dW5kSW5zdGFsbGF0aW9uIGlmIGRlZmluZWQgJHZzV2hlcmVGb3VuZEluc3RhbGxhdGlvbjsKKwor
ICAgIGRldGVybWluZVNvdXJjZURpcigpOworCisgICAgIyBQcmVmZXIgRW50ZXJwcmlzZSwgdGhl
biBQcm9mZXNzaW9uYWwsIHRoZW4gQ29tbXVuaXR5LCB0aGVuCisgICAgIyBhbnl0aGluZyBlbHNl
IHRoYXQgcHJvdmlkZXMgTVNCdWlsZC4KKyAgICBmb3JlYWNoIG15ICRwcm9kdWN0VHlwZSAoKAor
ICAgICAgICAnTWljcm9zb2Z0LlZpc3VhbFN0dWRpby5Qcm9kdWN0LkVudGVycHJpc2UnLAorICAg
ICAgICAnTWljcm9zb2Z0LlZpc3VhbFN0dWRpby5Qcm9kdWN0LlByb2Zlc3Npb25hbCcsCisgICAg
ICAgICdNaWNyb3NvZnQuVmlzdWFsU3R1ZGlvLlByb2R1Y3QuQ29tbXVuaXR5JywKKyAgICAgICAg
dW5kZWYKKyAgICApKSB7CisgICAgICAgIG15ICRjb21tYW5kID0gIiRzb3VyY2VEaXIvV2ViS2l0
TGlicmFyaWVzL3dpbi90b29scy92c3doZXJlIC1ub2xvZ28gLWxhdGVzdCAtZm9ybWF0IGpzb24g
LXJlcXVpcmVzIE1pY3Jvc29mdC5Db21wb25lbnQuTVNCdWlsZCI7CisgICAgICAgIGlmIChkZWZp
bmVkICRwcm9kdWN0VHlwZSkgeworICAgICAgICAgICAgJGNvbW1hbmQgLj0gIiAtcHJvZHVjdHMg
JHByb2R1Y3RUeXBlIjsKKyAgICAgICAgfQorICAgICAgICBteSAkdnNXaGVyZU91dCA9IGAkY29t
bWFuZGA7CisgICAgICAgIG15ICRpbnN0YWxsYXRpb25zID0gW107CisgICAgICAgIGV2YWwgewor
ICAgICAgICAgICAgJGluc3RhbGxhdGlvbnMgPSBkZWNvZGVfanNvbiBFbmNvZGU6OmVuY29kZSgn
VVRGLTgnID0+IEVuY29kZTo6ZGVjb2RlKGNvbnNvbGVfaW4gPT4gJHZzV2hlcmVPdXQpKTsKKyAg
ICAgICAgfTsKKyAgICAgICAgcHJpbnQgIkVycm9yIGdldHRpbmcgVmlzdWFsIFN0dWRpbyBMb2Nh
dGlvbjogJEBcbiIgaWYgJEA7CisgICAgICAgIHVuZGVmICRAOworCisgICAgICAgIGlmIChzY2Fs
YXIgQCRpbnN0YWxsYXRpb25zKSB7CisgICAgICAgICAgICBteSAkaW5zdGFsbGF0aW9uID0gJGlu
c3RhbGxhdGlvbnMtPlswXTsKKyAgICAgICAgICAgICR2c1doZXJlRm91bmRJbnN0YWxsYXRpb24g
PSAkaW5zdGFsbGF0aW9uOworICAgICAgICAgICAgcmV0dXJuICRpbnN0YWxsYXRpb247CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHVuZGVmOworfQorCitzdWIgcGlja0xlZ2FjeVZpc3Vh
bFN0dWRpb0luc3RhbGxhdGlvbgoreworICAgIHJldHVybiAkdnNXaGVyZUxlZ2FjeUluc3RhbGxh
dGlvbiBpZiBkZWZpbmVkICR2c1doZXJlTGVnYWN5SW5zdGFsbGF0aW9uOworCisgICAgZGV0ZXJt
aW5lU291cmNlRGlyKCk7CisKKyAgICBteSAkdnNXaGVyZU91dCA9IGAkc291cmNlRGlyL1dlYktp
dExpYnJhcmllcy93aW4vdG9vbHMvdnN3aGVyZSAtbm9sb2dvIC1sZWdhY3kgLWZvcm1hdCBqc29u
YDsKKyAgICBteSAkaW5zdGFsbGF0aW9uc19hbGwgPSBbXTsKKyAgICBldmFsIHsKKyAgICAgICAg
JGluc3RhbGxhdGlvbnNfYWxsID0gZGVjb2RlX2pzb24gRW5jb2RlOjplbmNvZGUoJ1VURi04JyA9
PiBFbmNvZGU6OmRlY29kZShjb25zb2xlX2luID0+ICR2c1doZXJlT3V0KSk7CisgICAgfTsKKyAg
ICBwcmludCAiRXJyb3IgZ2V0dGluZyBWaXN1YWwgU3R1ZGlvIExlZ2FjeSBMb2NhdGlvbjogJEBc
biIgaWYgJEA7CisgICAgdW5kZWYgJEA7CisKKyAgICAjIEl0J3MgcG9zc2libGUgdGhhdCBhIG5v
bi1sZWdhY3kgaW5zdGFsbGF0aW9uIHdpdGhvdXQgbXNidWlsZAorICAgICMgd291bGQgbm90IGJl
IGZvdW5kIGJ5IHRoZSBsYXRlc3QsIGJ1dCB3b3VsZCBiZSBmb3VuZCBieSB0aGlzCisgICAgIyB2
c3doZXJlIGNhbGwsIGFuZCB3ZSB3YW50IHRvIHNraXAgdGhvc2UsIHNvIGNoZWNrIGZvciB2ZXJz
aW9ucworICAgICMgd2l0aCBhbiBpbnN0YWxsYXRpb24gdmVyc2lvbiBiZWZvcmUgMTUuMC4KKyAg
ICBteSBAaW5zdGFsbGF0aW9ucyA9IGdyZXAgeyAoKyRfLT57aW5zdGFsbGF0aW9uVmVyc2lvbn0p
IDwgMTUgfSBAJGluc3RhbGxhdGlvbnNfYWxsOworCisgICAgIyBXZSBkb24ndCBnZXQgbXVjaCBp
bmZvcm1hdGlvbiB0aGF0IHdvdWxkIGxldCB1cyBjaG9vc2UgYmV0d2VlbgorICAgICMgbGVnYWN5
IGluc3RhbGxhdGlvbnMsIHNvIHdlJ2xsIHRha2UgdGhlIGZpcnN0LgorICAgIGlmIChzY2FsYXIg
QGluc3RhbGxhdGlvbnMpIHsKKyAgICAgICAgbXkgJGluc3RhbGxhdGlvbiA9ICRpbnN0YWxsYXRp
b25zWzBdOworICAgICAgICAkdnNXaGVyZUxlZ2FjeUluc3RhbGxhdGlvbiA9ICRpbnN0YWxsYXRp
b247CisgICAgICAgIHJldHVybiAkaW5zdGFsbGF0aW9uOworICAgIH0KKyAgICByZXR1cm4gdW5k
ZWY7Cit9CisKIHN1YiB2aXN1YWxTdHVkaW9JbnN0YWxsRGlyCiB7CiAgICAgcmV0dXJuICR2c0lu
c3RhbGxEaXIgaWYgZGVmaW5lZCAkdnNJbnN0YWxsRGlyOwpAQCAtNTk3LDkgKzY2NywxMyBAQCBz
dWIgdmlzdWFsU3R1ZGlvSW5zdGFsbERpcgogICAgICAgICAkdnNJbnN0YWxsRGlyID0gJEVOVnsn
VlNJTlNUQUxMRElSJ307CiAgICAgICAgICR2c0luc3RhbGxEaXIgPX4gc3xbXFwvXSR8fDsKICAg
ICB9IGVsc2UgewotICAgICAgICAkdnNJbnN0YWxsRGlyID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKHBy
b2dyYW1GaWxlc1BhdGhYODYoKSwgIk1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIiwgIjIwMTciLCAi
Q29tbXVuaXR5Iik7CisgICAgICAgICR2c0luc3RhbGxEaXIgPSB2aXN1YWxTdHVkaW9JbnN0YWxs
RGlyVlNXaGVyZSgpOwogICAgICAgICBpZiAobm90IC1lICR2c0luc3RhbGxEaXIpIHsKLSAgICAg
ICAgICAgICR2c0luc3RhbGxEaXIgPSBGaWxlOjpTcGVjLT5jYXRkaXIocHJvZ3JhbUZpbGVzUGF0
aFg4NigpLCAiTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMTQuMCIpOworICAgICAgICAgICAgJHZz
SW5zdGFsbERpciA9IHZpc3VhbFN0dWRpb0luc3RhbGxEaXJMZWdhY3koKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAobm90IC1lICR2c0luc3RhbGxEaXIpIHsKKyAgICAgICAgICAgICR2c0luc3Rh
bGxEaXIgPSB2aXN1YWxTdHVkaW9JbnN0YWxsRGlyRmFsbGJhY2soKTsKKyAgICAgICAgICAgIHBy
aW50ICJGYWxsYmFjayAkdnNJbnN0YWxsRGlyXG4iOwogICAgICAgICB9CiAgICAgfQogICAgIGNo
b21wKCR2c0luc3RhbGxEaXIgPSBgY3lncGF0aCAiJHZzSW5zdGFsbERpciJgKSBpZiBpc0N5Z3dp
bigpOwpAQCAtNjA4LDE0ICs2ODIsNTYgQEAgc3ViIHZpc3VhbFN0dWRpb0luc3RhbGxEaXIKICAg
ICByZXR1cm4gJHZzSW5zdGFsbERpcjsKIH0KIAorc3ViIHZpc3VhbFN0dWRpb0luc3RhbGxEaXJW
U1doZXJlCit7CisgICAgcGlja0N1cnJlbnRWaXN1YWxTdHVkaW9JbnN0YWxsYXRpb24oKTsKKyAg
ICBpZiAoZGVmaW5lZCgkdnNXaGVyZUZvdW5kSW5zdGFsbGF0aW9uKSkgeworICAgICAgICByZXR1
cm4gJHZzV2hlcmVGb3VuZEluc3RhbGxhdGlvbi0+e2luc3RhbGxhdGlvblBhdGh9OworICAgIH0K
KyAgICByZXR1cm4gdW5kZWY7Cit9CisKK3N1YiB2aXN1YWxTdHVkaW9JbnN0YWxsRGlyTGVnYWN5
Cit7CisgICAgcGlja0xlZ2FjeVZpc3VhbFN0dWRpb0luc3RhbGxhdGlvbigpOworICAgIGlmIChk
ZWZpbmVkKCR2c1doZXJlTGVnYWN5SW5zdGFsbGF0aW9uKSkgeworICAgICAgICByZXR1cm4gJHZz
V2hlcmVMZWdhY3lJbnN0YWxsYXRpb24tPntpbnN0YWxsYXRpb25QYXRofTsKKyAgICB9CisgICAg
cmV0dXJuIHVuZGVmOworfQorCitzdWIgdmlzdWFsU3R1ZGlvSW5zdGFsbERpckZhbGxiYWNrCit7
CisgICAgZm9yZWFjaCBteSAkcHJvZHVjdFR5cGUgKCgKKyAgICAgICAgJ0VudGVycHJpc2UnLAor
ICAgICAgICAnUHJvZmVzc2lvbmFsJywKKyAgICAgICAgJ0NvbW11bml0eScsCisgICAgKSkgewor
ICAgICAgICBteSAkaW5zdGFsbGRpciA9IEZpbGU6OlNwZWMtPmNhdGRpcihwcm9ncmFtRmlsZXNQ
YXRoWDg2KCksCisgICAgICAgICAgICAiTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8iLCAiMjAxNyIs
ICRwcm9kdWN0VHlwZSk7CisgICAgICAgIG15ICRtc2J1aWxkZGlyID0gRmlsZTo6U3BlYy0+Y2F0
ZGlyKCRpbnN0YWxsZGlyLAorICAgICAgICAgICAgIk1TQnVpbGQiLCAiMTUuMCIsICJiaW4iKTsK
KyAgICAgICAgaWYgKC1lICRpbnN0YWxsZGlyICYmIC1lICRtc2J1aWxkZGlyKSB7CisgICAgICAg
ICAgICByZXR1cm4gJGluc3RhbGxkaXI7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEZp
bGU6OlNwZWMtPmNhdGRpcihwcm9ncmFtRmlsZXNQYXRoWDg2KCksICJNaWNyb3NvZnQgVmlzdWFs
IFN0dWRpbyAxNC4wIik7Cit9CisKIHN1YiBtc0J1aWxkSW5zdGFsbERpcgogewogICAgIHJldHVy
biAkbXNCdWlsZEluc3RhbGxEaXIgaWYgZGVmaW5lZCAkbXNCdWlsZEluc3RhbGxEaXI7CiAKLSAg
ICAkbXNCdWlsZEluc3RhbGxEaXIgPSBGaWxlOjpTcGVjLT5jYXRkaXIocHJvZ3JhbUZpbGVzUGF0
aFg4NigpLCAiTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8iLCAiMjAxNyIsICJDb21tdW5pdHkiLCAi
TVNCdWlsZCIsICIxNS4wIiwgIkJpbiIpOwotICAgIGlmIChub3QgLWUgJG1zQnVpbGRJbnN0YWxs
RGlyKSB7Ci0gICAgICAgICRtc0J1aWxkSW5zdGFsbERpciA9IEZpbGU6OlNwZWMtPmNhdGRpcihw
cm9ncmFtRmlsZXNQYXRoWDg2KCksICJNU0J1aWxkIiwgIjE0LjAiLCAiQmluIik7CisgICAgbXkg
JHZlcnNpb24gPSB2aXN1YWxTdHVkaW9WZXJzaW9uKCk7CisgICAgaWYgKCR2ZXJzaW9uID49IDE1
LjApIHsKKyAgICAgICAgbXkgJGluc3RhbGxEaXIgPSB2aXN1YWxTdHVkaW9JbnN0YWxsRGlyKCk7
CisgICAgICAgICRtc0J1aWxkSW5zdGFsbERpciA9IEZpbGU6OlNwZWMtPmNhdGRpcigkaW5zdGFs
bERpciwKKyAgICAgICAgICAgICJNU0J1aWxkIiwgJHZlcnNpb24sICJiaW4iKTsKKyAgICB9IGVs
c2UgeworICAgICAgICAkbXNCdWlsZEluc3RhbGxEaXIgPSBGaWxlOjpTcGVjLT5jYXRkaXIocHJv
Z3JhbUZpbGVzUGF0aFg4NigpLCAKKyAgICAgICAgICAgICJNU0J1aWxkIiwgIjE0LjAiLCAiQmlu
IikKICAgICB9CisKICAgICBjaG9tcCgkbXNCdWlsZEluc3RhbGxEaXIgPSBgY3lncGF0aCAiJG1z
QnVpbGRJbnN0YWxsRGlyImApIGlmIGlzQ3lnd2luKCk7CiAKICAgICBwcmludCAiVXNpbmcgTVNC
dWlsZDogJG1zQnVpbGRJbnN0YWxsRGlyXG4iOwpAQCAtNjI3LDEzICs3NDMsMzAgQEAgc3ViIHZp
c3VhbFN0dWRpb1ZlcnNpb24KICAgICByZXR1cm4gJHZzVmVyc2lvbiBpZiBkZWZpbmVkICR2c1Zl
cnNpb247CiAKICAgICBteSAkaW5zdGFsbERpciA9IHZpc3VhbFN0dWRpb0luc3RhbGxEaXIoKTsK
LQotICAgICR2c1ZlcnNpb24gPSAoJGluc3RhbGxEaXIgPX4gL01pY3Jvc29mdCBWaXN1YWwgU3R1
ZGlvIChbMC05XStcLlswLTldKikvKSA/ICQxIDogIjE0IjsKKyAgICAkdnNWZXJzaW9uID0gdmlz
dWFsU3R1ZGlvVmVyc2lvbkZyb21JbnN0YWxsRGlyKCRpbnN0YWxsRGlyKTsKIAogICAgIHByaW50
ICJVc2luZyBWaXN1YWwgU3R1ZGlvICR2c1ZlcnNpb25cbiI7CiAgICAgcmV0dXJuICR2c1ZlcnNp
b247CiB9CiAKK3N1YiB2aXN1YWxTdHVkaW9WZXJzaW9uRnJvbUluc3RhbGxEaXIKK3sKKyAgICBt
eSAoJGRpcikgPSBAXzsKKyAgICBteSAkdmVyc2lvbjsKKworICAgIGlmICgkZGlyID1+IG18TWlj
cm9zb2Z0IFZpc3VhbCBTdHVkaW9bL1xcXTIwMTd8KSB7CisgICAgICAgICR2ZXJzaW9uID0gIjE1
LjAiOworICAgIH0KKworICAgIGlmICghZGVmaW5lZCgkdmVyc2lvbikpIHsKKyAgICAgICAgaWYg
KCRkaXIgPX4gL01pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIChbMC05XStcLlswLTldKikvKSB7Cisg
ICAgICAgICAgICAkdmVyc2lvbiA9ICQxOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
ICR2ZXJzaW9uOworfQorCiBzdWIgZGV0ZXJtaW5lQ29uZmlndXJhdGlvbkZvclZpc3VhbFN0dWRp
bwogewogICAgIHJldHVybiBpZiBkZWZpbmVkICRjb25maWd1cmF0aW9uRm9yVmlzdWFsU3R1ZGlv
OwpAQCAtMjA4NCw3ICsyMjE3LDExIEBAIHN1YiBnZW5lcmF0ZUJ1aWxkU3lzdGVtRnJvbUNNYWtl
UHJvamVjdAogICAgICAgICAgICAgcHVzaCBAYXJncywgIk5pbmphIjsKICAgICAgICAgfQogICAg
IH0gZWxzaWYgKGlzQW55V2luZG93cygpICYmIGlzV2luNjQoKSkgewotICAgICAgICBwdXNoIEBh
cmdzLCAnLUcgIlZpc3VhbCBTdHVkaW8gMTQgMjAxNSBXaW42NCInOworICAgICAgICBpZiAodmlz
dWFsU3R1ZGlvVmVyc2lvbigpID49IDE1KSB7CisgICAgICAgICAgICBwdXNoIEBhcmdzLCAnLUcg
IlZpc3VhbCBTdHVkaW8gMTUgMjAxNyBXaW42NCInOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgcHVzaCBAYXJncywgJy1HICJWaXN1YWwgU3R1ZGlvIDE0IDIwMTUgV2luNjQiJzsKKyAg
ICAgICAgfQogICAgIH0KICAgICAjIERvIG5vdCBzaG93IHByb2dyZXNzIG9mIGdlbmVyYXRpbmcg
YmluZGluZ3MgaW4gaW50ZXJhY3RpdmUgTmluamEgYnVpbGQgbm90IHRvIGxlYXZlIG5vaXN5IGxp
bmVzIG9uIHR0eQogICAgIHB1c2ggQGFyZ3MsICctRFNIT1dfQklORElOR1NfR0VORVJBVElPTl9Q
Uk9HUkVTUz0xJyB1bmxlc3MgKCR3aWxsVXNlTmluamEgJiYgLXQgU1RET1VUKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>325591</attachid>
            <date>2017-11-01 10:55:14 -0700</date>
            <delta_ts>2017-11-01 11:05:01 -0700</delta_ts>
            <desc>Use vswhere to determine visual studio location - make new modules require only in new paths</desc>
            <filename>175275-14.diff</filename>
            <type>text/plain</type>
            <size>11262</size>
            <attacher name="Stephan Szabo">stephan.szabo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA4MmU2
MTE0YzFhYi4uZTJjYTdhZjAzZDYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAxNy0xMS0wMSAgU3RlcGhhbiBTemFi
byAgPHN0ZXBoYW4uc3phYm9Ac29ueS5jb20+CisKKyAgICAgICAgW1dpbl0gRGV0ZWN0IFZpc3Vh
bCBTdHVkaW8gMjAxNyBsb2NhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc1Mjc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLWpzYzoKKyAgICAgICAgKiBTY3JpcHRzL2J1
aWxkLXdlYmtpdDoKKyAgICAgICAgKiBTY3JpcHRzL3VwZGF0ZS12c3doZXJlLnB5OiBBZGRlZC4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdGRpcnMucG06CisgICAgICAgIChwaWNrQ3VycmVudFZp
c3VhbFN0dWRpb0luc3RhbGxhdGlvbik6CisgICAgICAgIChwaWNrTGVnYWN5VmlzdWFsU3R1ZGlv
SW5zdGFsbGF0aW9uKToKKyAgICAgICAgKHZpc3VhbFN0dWRpb0luc3RhbGxEaXIpOgorICAgICAg
ICAodmlzdWFsU3R1ZGlvSW5zdGFsbERpclZTV2hlcmUpOgorICAgICAgICAodmlzdWFsU3R1ZGlv
SW5zdGFsbERpckxlZ2FjeSk6CisgICAgICAgICh2aXN1YWxTdHVkaW9JbnN0YWxsRGlyRmFsbGJh
Y2spOgorICAgICAgICAobXNCdWlsZEluc3RhbGxEaXIpOgorICAgICAgICAodmlzdWFsU3R1ZGlv
VmVyc2lvbik6CisgICAgICAgICh2aXN1YWxTdHVkaW9WZXJzaW9uRnJvbUluc3RhbGxEaXIpOgor
ICAgICAgICAoZ2VuZXJhdGVCdWlsZFN5c3RlbUZyb21DTWFrZVByb2plY3QpOgorCiAyMDE3LTEw
LTMxICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KIAogICAgICAgICBX
ZWIgSW5zcGVjdG9yOiBBZGQgSW5zcGVjdG9yIG1lbnUgaXRlbXMgdG8gTWFjIE1pbmlCcm93c2Vy
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL2J1aWxkLWpzYyBiL1Rvb2xzL1NjcmlwdHMvYnVp
bGQtanNjCmluZGV4IGYwNzU1ZDMzNTE2Li5lNDM0OGY0ODU1MSAxMDA3NTUKLS0tIGEvVG9vbHMv
U2NyaXB0cy9idWlsZC1qc2MKKysrIGIvVG9vbHMvU2NyaXB0cy9idWlsZC1qc2MKQEAgLTExNyw2
ICsxMTcsNyBAQCBpZiAoaXNBcHBsZVdpbldlYktpdCgpKSB7CiAKIGlmIChpc0pTQ09ubHkoKSAm
JiBpc1dpbmRvd3MoKSkgewogICAgIChzeXN0ZW0oInB5dGhvbiBUb29scy9TY3JpcHRzL3VwZGF0
ZS13ZWJraXQtd2luY2Fpcm8tbGlicy5weSIpID09IDApIG9yIGRpZTsKKyAgICBzeXN0ZW0oInB5
dGhvbiBUb29scy9TY3JpcHRzL3VwZGF0ZS12c3doZXJlLnB5Iik7CiB9CiAKIGNoZWNrUmVxdWly
ZWRTeXN0ZW1Db25maWcoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0
IGIvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQKaW5kZXggODEyMjEyZDZjNjMuLjM1MjM5MDUx
NzBmIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAorKysgYi9Ub29scy9T
Y3JpcHRzL2J1aWxkLXdlYmtpdApAQCAtMjQ1LDYgKzI0NSwxMCBAQCBpZiAoaXNBcHBsZUNvY29h
V2ViS2l0KCkpIHsKICAgICAoc3lzdGVtKCJwZXJsIFRvb2xzL1NjcmlwdHMvdXBkYXRlLXdlYmtp
dC1zdXBwb3J0LWxpYnMiKSA9PSAwKSBvciBkaWU7CiB9CiAKK2lmIChpc0FueVdpbmRvd3MoKSkg
eworICAgIHN5c3RlbSgicHl0aG9uIFRvb2xzL1NjcmlwdHMvdXBkYXRlLXZzd2hlcmUucHkiKTsK
K30KKwogIyBJZiBhc2tlZCB0byBidWlsZCBqdXN0IHRoZSBXZWJLaXQgcHJvamVjdCwgb3Zlcndy
aXRlIHRoZSBwcm9qZWN0cwogIyBsaXN0IGFmdGVyIGFsbCBvZiB0aGUgcG9ydCBzcGVjaWZpYyB0
d2Vha3MgaGF2ZSBiZWVuIG1hZGUgdG8KICMgYnVpbGQgb3B0aW9ucywgZXRjLgpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy91cGRhdGUtdnN3aGVyZS5weSBiL1Rvb2xzL1NjcmlwdHMvdXBkYXRl
LXZzd2hlcmUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmExZGNi
ZmMwMTlhCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy91cGRhdGUtdnN3aGVyZS5w
eQpAQCAtMCwwICsxLDQyIEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdo
dCAoQykgMjAxNyBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjCisjIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
IyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisjIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorIyBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgaW1wb3J0bGliCitpbXBvcnQgc3lzCitp
bXBvcnQgb3MKK2ltcG9ydCBzdGF0CisKK2Rvd25sb2FkID0gaW1wb3J0bGliLmltcG9ydF9tb2R1
bGUoJ2Rvd25sb2FkLWxhdGVzdC1naXRodWItcmVsZWFzZScpCisKK3JlcG8gPSAnTWljcm9zb2Z0
L3Zzd2hlcmUnCitmaWxlID0gJ3Zzd2hlcmUuZXhlJworb3V0cHV0ID0gJ1dlYktpdExpYnJhcmll
cy93aW4vdG9vbHMnCisKK3Jlc3VsdCA9IGRvd25sb2FkLm1haW4oWyctbycsIG91dHB1dCwgcmVw
bywgZmlsZV0pCisKK2lmIHJlc3VsdCA9PSBkb3dubG9hZC5TdGF0dXMuQ09VTERfTk9UX0ZJTkQ6
CisgICAgc3lzLmV4aXQoMSkKKworb3MuY2htb2Qob3MucGF0aC5qb2luKG91dHB1dCwgZmlsZSks
IDA3NzcpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0gYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdGRpcnMucG0KaW5kZXggNjhiNWQyMmNmYTkuLmFjYjY0N2FkZGNmIDEwMDc1
NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0KKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRkaXJzLnBtCkBAIC0xNjAsNiArMTYwLDggQEAgbXkgJHZzVmVyc2lvbjsKIG15ICR3aW5k
b3dzU291cmNlRGlyOwogbXkgJHdpblZlcnNpb247CiBteSAkd2lsbFVzZVZDRXhwcmVzc1doZW5C
dWlsZGluZyA9IDA7CitteSAkdnNXaGVyZUZvdW5kSW5zdGFsbGF0aW9uOworbXkgJHZzV2hlcmVM
ZWdhY3lJbnN0YWxsYXRpb247CiAKICMgRGVmaW5lZCBpbiBWQ1NVdGlscy4KIHN1YiBleGl0U3Rh
dHVzKCQpOwpAQCAtNTg5LDYgKzU5MSw3OSBAQCBzdWIgcHJvZ3JhbUZpbGVzUGF0aFg4NgogICAg
IHJldHVybiAkcHJvZ3JhbUZpbGVzUGF0aFg4NjsKIH0KIAorc3ViIHBpY2tDdXJyZW50VmlzdWFs
U3R1ZGlvSW5zdGFsbGF0aW9uCit7CisgICAgcmV0dXJuICR2c1doZXJlRm91bmRJbnN0YWxsYXRp
b24gaWYgZGVmaW5lZCAkdnNXaGVyZUZvdW5kSW5zdGFsbGF0aW9uOworCisgICAgcmVxdWlyZSBF
bmNvZGU7CisgICAgcmVxdWlyZSBFbmNvZGU6OkxvY2FsZTsKKyAgICByZXF1aXJlIEpTT046OlBQ
OworCisgICAgZGV0ZXJtaW5lU291cmNlRGlyKCk7CisKKyAgICAjIFByZWZlciBFbnRlcnByaXNl
LCB0aGVuIFByb2Zlc3Npb25hbCwgdGhlbiBDb21tdW5pdHksIHRoZW4KKyAgICAjIGFueXRoaW5n
IGVsc2UgdGhhdCBwcm92aWRlcyBNU0J1aWxkLgorICAgIGZvcmVhY2ggbXkgJHByb2R1Y3RUeXBl
ICgoCisgICAgICAgICdNaWNyb3NvZnQuVmlzdWFsU3R1ZGlvLlByb2R1Y3QuRW50ZXJwcmlzZScs
CisgICAgICAgICdNaWNyb3NvZnQuVmlzdWFsU3R1ZGlvLlByb2R1Y3QuUHJvZmVzc2lvbmFsJywK
KyAgICAgICAgJ01pY3Jvc29mdC5WaXN1YWxTdHVkaW8uUHJvZHVjdC5Db21tdW5pdHknLAorICAg
ICAgICB1bmRlZgorICAgICkpIHsKKyAgICAgICAgbXkgJGNvbW1hbmQgPSAiJHNvdXJjZURpci9X
ZWJLaXRMaWJyYXJpZXMvd2luL3Rvb2xzL3Zzd2hlcmUgLW5vbG9nbyAtbGF0ZXN0IC1mb3JtYXQg
anNvbiAtcmVxdWlyZXMgTWljcm9zb2Z0LkNvbXBvbmVudC5NU0J1aWxkIjsKKyAgICAgICAgaWYg
KGRlZmluZWQgJHByb2R1Y3RUeXBlKSB7CisgICAgICAgICAgICAkY29tbWFuZCAuPSAiIC1wcm9k
dWN0cyAkcHJvZHVjdFR5cGUiOworICAgICAgICB9CisgICAgICAgIG15ICR2c1doZXJlT3V0ID0g
YCRjb21tYW5kYDsKKyAgICAgICAgbXkgJGluc3RhbGxhdGlvbnMgPSBbXTsKKyAgICAgICAgZXZh
bCB7CisgICAgICAgICAgICAkaW5zdGFsbGF0aW9ucyA9IEpTT046OlBQOjpkZWNvZGVfanNvbihF
bmNvZGU6OmVuY29kZSgnVVRGLTgnID0+IEVuY29kZTo6ZGVjb2RlKGNvbnNvbGVfaW4gPT4gJHZz
V2hlcmVPdXQpKSk7CisgICAgICAgIH07CisgICAgICAgIHByaW50ICJFcnJvciBnZXR0aW5nIFZp
c3VhbCBTdHVkaW8gTG9jYXRpb246ICRAXG4iIGlmICRAOworICAgICAgICB1bmRlZiAkQDsKKwor
ICAgICAgICBpZiAoc2NhbGFyIEAkaW5zdGFsbGF0aW9ucykgeworICAgICAgICAgICAgbXkgJGlu
c3RhbGxhdGlvbiA9ICRpbnN0YWxsYXRpb25zLT5bMF07CisgICAgICAgICAgICAkdnNXaGVyZUZv
dW5kSW5zdGFsbGF0aW9uID0gJGluc3RhbGxhdGlvbjsKKyAgICAgICAgICAgIHJldHVybiAkaW5z
dGFsbGF0aW9uOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB1bmRlZjsKK30KKworc3Vi
IHBpY2tMZWdhY3lWaXN1YWxTdHVkaW9JbnN0YWxsYXRpb24KK3sKKyAgICByZXR1cm4gJHZzV2hl
cmVMZWdhY3lJbnN0YWxsYXRpb24gaWYgZGVmaW5lZCAkdnNXaGVyZUxlZ2FjeUluc3RhbGxhdGlv
bjsKKworICAgIHJlcXVpcmUgRW5jb2RlOworICAgIHJlcXVpcmUgRW5jb2RlOjpMb2NhbGU7Cisg
ICAgcmVxdWlyZSBKU09OOjpQUDsKKworICAgIGRldGVybWluZVNvdXJjZURpcigpOworCisgICAg
bXkgJHZzV2hlcmVPdXQgPSBgJHNvdXJjZURpci9XZWJLaXRMaWJyYXJpZXMvd2luL3Rvb2xzL3Zz
d2hlcmUgLW5vbG9nbyAtbGVnYWN5IC1mb3JtYXQganNvbmA7CisgICAgbXkgJGluc3RhbGxhdGlv
bnNfYWxsID0gW107CisgICAgZXZhbCB7CisgICAgICAgICRpbnN0YWxsYXRpb25zX2FsbCA9IEpT
T046OlBQOjpkZWNvZGVfanNvbihFbmNvZGU6OmVuY29kZSgnVVRGLTgnID0+IEVuY29kZTo6ZGVj
b2RlKGNvbnNvbGVfaW4gPT4gJHZzV2hlcmVPdXQpKSk7CisgICAgfTsKKyAgICBwcmludCAiRXJy
b3IgZ2V0dGluZyBWaXN1YWwgU3R1ZGlvIExlZ2FjeSBMb2NhdGlvbjogJEBcbiIgaWYgJEA7Cisg
ICAgdW5kZWYgJEA7CisKKyAgICAjIEl0J3MgcG9zc2libGUgdGhhdCBhIG5vbi1sZWdhY3kgaW5z
dGFsbGF0aW9uIHdpdGhvdXQgbXNidWlsZAorICAgICMgd291bGQgbm90IGJlIGZvdW5kIGJ5IHRo
ZSBsYXRlc3QsIGJ1dCB3b3VsZCBiZSBmb3VuZCBieSB0aGlzCisgICAgIyB2c3doZXJlIGNhbGws
IGFuZCB3ZSB3YW50IHRvIHNraXAgdGhvc2UsIHNvIGNoZWNrIGZvciB2ZXJzaW9ucworICAgICMg
d2l0aCBhbiBpbnN0YWxsYXRpb24gdmVyc2lvbiBiZWZvcmUgMTUuMC4KKyAgICBteSBAaW5zdGFs
bGF0aW9ucyA9IGdyZXAgeyAkXy0+e2luc3RhbGxhdGlvblZlcnNpb259IDwgMTUgfSBAJGluc3Rh
bGxhdGlvbnNfYWxsOworCisgICAgIyBXZSBkb24ndCBnZXQgbXVjaCBpbmZvcm1hdGlvbiB0aGF0
IHdvdWxkIGxldCB1cyBjaG9vc2UgYmV0d2VlbgorICAgICMgbGVnYWN5IGluc3RhbGxhdGlvbnMs
IHNvIHdlJ2xsIHRha2UgdGhlIGZpcnN0LgorICAgIGlmIChzY2FsYXIgQGluc3RhbGxhdGlvbnMp
IHsKKyAgICAgICAgbXkgJGluc3RhbGxhdGlvbiA9ICRpbnN0YWxsYXRpb25zWzBdOworICAgICAg
ICAkdnNXaGVyZUxlZ2FjeUluc3RhbGxhdGlvbiA9ICRpbnN0YWxsYXRpb247CisgICAgICAgIHJl
dHVybiAkaW5zdGFsbGF0aW9uOworICAgIH0KKyAgICByZXR1cm4gdW5kZWY7Cit9CisKIHN1YiB2
aXN1YWxTdHVkaW9JbnN0YWxsRGlyCiB7CiAgICAgcmV0dXJuICR2c0luc3RhbGxEaXIgaWYgZGVm
aW5lZCAkdnNJbnN0YWxsRGlyOwpAQCAtNTk3LDkgKzY3MiwxMyBAQCBzdWIgdmlzdWFsU3R1ZGlv
SW5zdGFsbERpcgogICAgICAgICAkdnNJbnN0YWxsRGlyID0gJEVOVnsnVlNJTlNUQUxMRElSJ307
CiAgICAgICAgICR2c0luc3RhbGxEaXIgPX4gc3xbXFwvXSR8fDsKICAgICB9IGVsc2UgewotICAg
ICAgICAkdnNJbnN0YWxsRGlyID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKHByb2dyYW1GaWxlc1BhdGhY
ODYoKSwgIk1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIiwgIjIwMTciLCAiQ29tbXVuaXR5Iik7Cisg
ICAgICAgICR2c0luc3RhbGxEaXIgPSB2aXN1YWxTdHVkaW9JbnN0YWxsRGlyVlNXaGVyZSgpOwor
ICAgICAgICBpZiAobm90IC1lICR2c0luc3RhbGxEaXIpIHsKKyAgICAgICAgICAgICR2c0luc3Rh
bGxEaXIgPSB2aXN1YWxTdHVkaW9JbnN0YWxsRGlyTGVnYWN5KCk7CisgICAgICAgIH0KICAgICAg
ICAgaWYgKG5vdCAtZSAkdnNJbnN0YWxsRGlyKSB7Ci0gICAgICAgICAgICAkdnNJbnN0YWxsRGly
ID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKHByb2dyYW1GaWxlc1BhdGhYODYoKSwgIk1pY3Jvc29mdCBW
aXN1YWwgU3R1ZGlvIDE0LjAiKTsKKyAgICAgICAgICAgICR2c0luc3RhbGxEaXIgPSB2aXN1YWxT
dHVkaW9JbnN0YWxsRGlyRmFsbGJhY2soKTsKKyAgICAgICAgICAgIHByaW50ICJGYWxsYmFjayAk
dnNJbnN0YWxsRGlyXG4iOwogICAgICAgICB9CiAgICAgfQogICAgIGNob21wKCR2c0luc3RhbGxE
aXIgPSBgY3lncGF0aCAiJHZzSW5zdGFsbERpciJgKSBpZiBpc0N5Z3dpbigpOwpAQCAtNjA4LDE0
ICs2ODcsNTYgQEAgc3ViIHZpc3VhbFN0dWRpb0luc3RhbGxEaXIKICAgICByZXR1cm4gJHZzSW5z
dGFsbERpcjsKIH0KIAorc3ViIHZpc3VhbFN0dWRpb0luc3RhbGxEaXJWU1doZXJlCit7CisgICAg
cGlja0N1cnJlbnRWaXN1YWxTdHVkaW9JbnN0YWxsYXRpb24oKTsKKyAgICBpZiAoZGVmaW5lZCgk
dnNXaGVyZUZvdW5kSW5zdGFsbGF0aW9uKSkgeworICAgICAgICByZXR1cm4gJHZzV2hlcmVGb3Vu
ZEluc3RhbGxhdGlvbi0+e2luc3RhbGxhdGlvblBhdGh9OworICAgIH0KKyAgICByZXR1cm4gdW5k
ZWY7Cit9CisKK3N1YiB2aXN1YWxTdHVkaW9JbnN0YWxsRGlyTGVnYWN5Cit7CisgICAgcGlja0xl
Z2FjeVZpc3VhbFN0dWRpb0luc3RhbGxhdGlvbigpOworICAgIGlmIChkZWZpbmVkKCR2c1doZXJl
TGVnYWN5SW5zdGFsbGF0aW9uKSkgeworICAgICAgICByZXR1cm4gJHZzV2hlcmVMZWdhY3lJbnN0
YWxsYXRpb24tPntpbnN0YWxsYXRpb25QYXRofTsKKyAgICB9CisgICAgcmV0dXJuIHVuZGVmOwor
fQorCitzdWIgdmlzdWFsU3R1ZGlvSW5zdGFsbERpckZhbGxiYWNrCit7CisgICAgZm9yZWFjaCBt
eSAkcHJvZHVjdFR5cGUgKCgKKyAgICAgICAgJ0VudGVycHJpc2UnLAorICAgICAgICAnUHJvZmVz
c2lvbmFsJywKKyAgICAgICAgJ0NvbW11bml0eScsCisgICAgKSkgeworICAgICAgICBteSAkaW5z
dGFsbGRpciA9IEZpbGU6OlNwZWMtPmNhdGRpcihwcm9ncmFtRmlsZXNQYXRoWDg2KCksCisgICAg
ICAgICAgICAiTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8iLCAiMjAxNyIsICRwcm9kdWN0VHlwZSk7
CisgICAgICAgIG15ICRtc2J1aWxkZGlyID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKCRpbnN0YWxsZGly
LAorICAgICAgICAgICAgIk1TQnVpbGQiLCAiMTUuMCIsICJiaW4iKTsKKyAgICAgICAgaWYgKC1l
ICRpbnN0YWxsZGlyICYmIC1lICRtc2J1aWxkZGlyKSB7CisgICAgICAgICAgICByZXR1cm4gJGlu
c3RhbGxkaXI7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEZpbGU6OlNwZWMtPmNhdGRp
cihwcm9ncmFtRmlsZXNQYXRoWDg2KCksICJNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAxNC4wIik7
Cit9CisKIHN1YiBtc0J1aWxkSW5zdGFsbERpcgogewogICAgIHJldHVybiAkbXNCdWlsZEluc3Rh
bGxEaXIgaWYgZGVmaW5lZCAkbXNCdWlsZEluc3RhbGxEaXI7CiAKLSAgICAkbXNCdWlsZEluc3Rh
bGxEaXIgPSBGaWxlOjpTcGVjLT5jYXRkaXIocHJvZ3JhbUZpbGVzUGF0aFg4NigpLCAiTWljcm9z
b2Z0IFZpc3VhbCBTdHVkaW8iLCAiMjAxNyIsICJDb21tdW5pdHkiLCAiTVNCdWlsZCIsICIxNS4w
IiwgIkJpbiIpOwotICAgIGlmIChub3QgLWUgJG1zQnVpbGRJbnN0YWxsRGlyKSB7Ci0gICAgICAg
ICRtc0J1aWxkSW5zdGFsbERpciA9IEZpbGU6OlNwZWMtPmNhdGRpcihwcm9ncmFtRmlsZXNQYXRo
WDg2KCksICJNU0J1aWxkIiwgIjE0LjAiLCAiQmluIik7CisgICAgbXkgJHZlcnNpb24gPSB2aXN1
YWxTdHVkaW9WZXJzaW9uKCk7CisgICAgaWYgKCR2ZXJzaW9uID49IDE1LjApIHsKKyAgICAgICAg
bXkgJGluc3RhbGxEaXIgPSB2aXN1YWxTdHVkaW9JbnN0YWxsRGlyKCk7CisgICAgICAgICRtc0J1
aWxkSW5zdGFsbERpciA9IEZpbGU6OlNwZWMtPmNhdGRpcigkaW5zdGFsbERpciwKKyAgICAgICAg
ICAgICJNU0J1aWxkIiwgJHZlcnNpb24sICJiaW4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICAk
bXNCdWlsZEluc3RhbGxEaXIgPSBGaWxlOjpTcGVjLT5jYXRkaXIocHJvZ3JhbUZpbGVzUGF0aFg4
NigpLCAKKyAgICAgICAgICAgICJNU0J1aWxkIiwgIjE0LjAiLCAiQmluIikKICAgICB9CisKICAg
ICBjaG9tcCgkbXNCdWlsZEluc3RhbGxEaXIgPSBgY3lncGF0aCAiJG1zQnVpbGRJbnN0YWxsRGly
ImApIGlmIGlzQ3lnd2luKCk7CiAKICAgICBwcmludCAiVXNpbmcgTVNCdWlsZDogJG1zQnVpbGRJ
bnN0YWxsRGlyXG4iOwpAQCAtNjI3LDEzICs3NDgsMzAgQEAgc3ViIHZpc3VhbFN0dWRpb1ZlcnNp
b24KICAgICByZXR1cm4gJHZzVmVyc2lvbiBpZiBkZWZpbmVkICR2c1ZlcnNpb247CiAKICAgICBt
eSAkaW5zdGFsbERpciA9IHZpc3VhbFN0dWRpb0luc3RhbGxEaXIoKTsKLQotICAgICR2c1ZlcnNp
b24gPSAoJGluc3RhbGxEaXIgPX4gL01pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIChbMC05XStcLlsw
LTldKikvKSA/ICQxIDogIjE0IjsKKyAgICAkdnNWZXJzaW9uID0gdmlzdWFsU3R1ZGlvVmVyc2lv
bkZyb21JbnN0YWxsRGlyKCRpbnN0YWxsRGlyKTsKIAogICAgIHByaW50ICJVc2luZyBWaXN1YWwg
U3R1ZGlvICR2c1ZlcnNpb25cbiI7CiAgICAgcmV0dXJuICR2c1ZlcnNpb247CiB9CiAKK3N1YiB2
aXN1YWxTdHVkaW9WZXJzaW9uRnJvbUluc3RhbGxEaXIKK3sKKyAgICBteSAoJGRpcikgPSBAXzsK
KyAgICBteSAkdmVyc2lvbjsKKworICAgIGlmICgkZGlyID1+IG18TWljcm9zb2Z0IFZpc3VhbCBT
dHVkaW9bL1xcXTIwMTd8KSB7CisgICAgICAgICR2ZXJzaW9uID0gIjE1LjAiOworICAgIH0KKwor
ICAgIGlmICghZGVmaW5lZCgkdmVyc2lvbikpIHsKKyAgICAgICAgaWYgKCRkaXIgPX4gL01pY3Jv
c29mdCBWaXN1YWwgU3R1ZGlvIChbMC05XStcLlswLTldKikvKSB7CisgICAgICAgICAgICAkdmVy
c2lvbiA9ICQxOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuICR2ZXJzaW9uOworfQor
CiBzdWIgZGV0ZXJtaW5lQ29uZmlndXJhdGlvbkZvclZpc3VhbFN0dWRpbwogewogICAgIHJldHVy
biBpZiBkZWZpbmVkICRjb25maWd1cmF0aW9uRm9yVmlzdWFsU3R1ZGlvOwpAQCAtMjA4NCw3ICsy
MjIyLDExIEBAIHN1YiBnZW5lcmF0ZUJ1aWxkU3lzdGVtRnJvbUNNYWtlUHJvamVjdAogICAgICAg
ICAgICAgcHVzaCBAYXJncywgIk5pbmphIjsKICAgICAgICAgfQogICAgIH0gZWxzaWYgKGlzQW55
V2luZG93cygpICYmIGlzV2luNjQoKSkgewotICAgICAgICBwdXNoIEBhcmdzLCAnLUcgIlZpc3Vh
bCBTdHVkaW8gMTQgMjAxNSBXaW42NCInOworICAgICAgICBpZiAodmlzdWFsU3R1ZGlvVmVyc2lv
bigpID49IDE1KSB7CisgICAgICAgICAgICBwdXNoIEBhcmdzLCAnLUcgIlZpc3VhbCBTdHVkaW8g
MTUgMjAxNyBXaW42NCInOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHVzaCBAYXJn
cywgJy1HICJWaXN1YWwgU3R1ZGlvIDE0IDIwMTUgV2luNjQiJzsKKyAgICAgICAgfQogICAgIH0K
ICAgICAjIERvIG5vdCBzaG93IHByb2dyZXNzIG9mIGdlbmVyYXRpbmcgYmluZGluZ3MgaW4gaW50
ZXJhY3RpdmUgTmluamEgYnVpbGQgbm90IHRvIGxlYXZlIG5vaXN5IGxpbmVzIG9uIHR0eQogICAg
IHB1c2ggQGFyZ3MsICctRFNIT1dfQklORElOR1NfR0VORVJBVElPTl9QUk9HUkVTUz0xJyB1bmxl
c3MgKCR3aWxsVXNlTmluamEgJiYgLXQgU1RET1VUKTsK
</data>
<flag name="review"
          id="345029"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>325598</attachid>
            <date>2017-11-01 11:23:19 -0700</date>
            <delta_ts>2017-11-01 13:44:58 -0700</delta_ts>
            <desc>Use vswhere to determine visual studio location - move requires into sub</desc>
            <filename>175275-15.diff</filename>
            <type>text/plain</type>
            <size>11325</size>
            <attacher name="Stephan Szabo">stephan.szabo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA4MmU2
MTE0YzFhYi4uYTU3ZDY1MTEyMDQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxNy0xMS0wMSAgU3RlcGhhbiBTemFi
byAgPHN0ZXBoYW4uc3phYm9Ac29ueS5jb20+CisKKyAgICAgICAgW1dpbl0gRGV0ZWN0IFZpc3Vh
bCBTdHVkaW8gMjAxNyBsb2NhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc1Mjc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1enVr
aS4KKworICAgICAgICAqIFNjcmlwdHMvYnVpbGQtanNjOgorICAgICAgICAqIFNjcmlwdHMvYnVp
bGQtd2Via2l0OgorICAgICAgICAqIFNjcmlwdHMvdXBkYXRlLXZzd2hlcmUucHk6IEFkZGVkLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0ZGlycy5wbToKKyAgICAgICAgKHJlcXVpcmVNb2R1bGVz
Rm9yVlNXaGVyZSk6CisgICAgICAgIChwaWNrQ3VycmVudFZpc3VhbFN0dWRpb0luc3RhbGxhdGlv
bik6CisgICAgICAgIChwaWNrTGVnYWN5VmlzdWFsU3R1ZGlvSW5zdGFsbGF0aW9uKToKKyAgICAg
ICAgKHZpc3VhbFN0dWRpb0luc3RhbGxEaXIpOgorICAgICAgICAodmlzdWFsU3R1ZGlvSW5zdGFs
bERpclZTV2hlcmUpOgorICAgICAgICAodmlzdWFsU3R1ZGlvSW5zdGFsbERpckxlZ2FjeSk6Cisg
ICAgICAgICh2aXN1YWxTdHVkaW9JbnN0YWxsRGlyRmFsbGJhY2spOgorICAgICAgICAobXNCdWls
ZEluc3RhbGxEaXIpOgorICAgICAgICAodmlzdWFsU3R1ZGlvVmVyc2lvbik6CisgICAgICAgICh2
aXN1YWxTdHVkaW9WZXJzaW9uRnJvbUluc3RhbGxEaXIpOgorICAgICAgICAoZ2VuZXJhdGVCdWls
ZFN5c3RlbUZyb21DTWFrZVByb2plY3QpOgorCiAyMDE3LTEwLTMxICBSb3NzIEtpcnNsaW5nICA8
cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBBZGQgSW5z
cGVjdG9yIG1lbnUgaXRlbXMgdG8gTWFjIE1pbmlCcm93c2VyCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL2J1aWxkLWpzYyBiL1Rvb2xzL1NjcmlwdHMvYnVpbGQtanNjCmluZGV4IGYwNzU1ZDMz
NTE2Li5lNDM0OGY0ODU1MSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9idWlsZC1qc2MKKysr
IGIvVG9vbHMvU2NyaXB0cy9idWlsZC1qc2MKQEAgLTExNyw2ICsxMTcsNyBAQCBpZiAoaXNBcHBs
ZVdpbldlYktpdCgpKSB7CiAKIGlmIChpc0pTQ09ubHkoKSAmJiBpc1dpbmRvd3MoKSkgewogICAg
IChzeXN0ZW0oInB5dGhvbiBUb29scy9TY3JpcHRzL3VwZGF0ZS13ZWJraXQtd2luY2Fpcm8tbGli
cy5weSIpID09IDApIG9yIGRpZTsKKyAgICBzeXN0ZW0oInB5dGhvbiBUb29scy9TY3JpcHRzL3Vw
ZGF0ZS12c3doZXJlLnB5Iik7CiB9CiAKIGNoZWNrUmVxdWlyZWRTeXN0ZW1Db25maWcoKTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0IGIvVG9vbHMvU2NyaXB0cy9idWls
ZC13ZWJraXQKaW5kZXggODEyMjEyZDZjNjMuLjM1MjM5MDUxNzBmIDEwMDc1NQotLS0gYS9Ub29s
cy9TY3JpcHRzL2J1aWxkLXdlYmtpdAorKysgYi9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdApA
QCAtMjQ1LDYgKzI0NSwxMCBAQCBpZiAoaXNBcHBsZUNvY29hV2ViS2l0KCkpIHsKICAgICAoc3lz
dGVtKCJwZXJsIFRvb2xzL1NjcmlwdHMvdXBkYXRlLXdlYmtpdC1zdXBwb3J0LWxpYnMiKSA9PSAw
KSBvciBkaWU7CiB9CiAKK2lmIChpc0FueVdpbmRvd3MoKSkgeworICAgIHN5c3RlbSgicHl0aG9u
IFRvb2xzL1NjcmlwdHMvdXBkYXRlLXZzd2hlcmUucHkiKTsKK30KKwogIyBJZiBhc2tlZCB0byBi
dWlsZCBqdXN0IHRoZSBXZWJLaXQgcHJvamVjdCwgb3ZlcndyaXRlIHRoZSBwcm9qZWN0cwogIyBs
aXN0IGFmdGVyIGFsbCBvZiB0aGUgcG9ydCBzcGVjaWZpYyB0d2Vha3MgaGF2ZSBiZWVuIG1hZGUg
dG8KICMgYnVpbGQgb3B0aW9ucywgZXRjLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy91cGRh
dGUtdnN3aGVyZS5weSBiL1Rvb2xzL1NjcmlwdHMvdXBkYXRlLXZzd2hlcmUucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmExZGNiZmMwMTlhCi0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvU2NyaXB0cy91cGRhdGUtdnN3aGVyZS5weQpAQCAtMCwwICsxLDQyIEBACisj
ISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoQykgMjAxNyBTb255IEludGVy
YWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisj
IGFyZSBtZXQ6CisjCisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisj
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisj
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisjIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorIyBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCitpbXBvcnQgaW1wb3J0bGliCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCBzdGF0
CisKK2Rvd25sb2FkID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJ2Rvd25sb2FkLWxhdGVzdC1n
aXRodWItcmVsZWFzZScpCisKK3JlcG8gPSAnTWljcm9zb2Z0L3Zzd2hlcmUnCitmaWxlID0gJ3Zz
d2hlcmUuZXhlJworb3V0cHV0ID0gJ1dlYktpdExpYnJhcmllcy93aW4vdG9vbHMnCisKK3Jlc3Vs
dCA9IGRvd25sb2FkLm1haW4oWyctbycsIG91dHB1dCwgcmVwbywgZmlsZV0pCisKK2lmIHJlc3Vs
dCA9PSBkb3dubG9hZC5TdGF0dXMuQ09VTERfTk9UX0ZJTkQ6CisgICAgc3lzLmV4aXQoMSkKKwor
b3MuY2htb2Qob3MucGF0aC5qb2luKG91dHB1dCwgZmlsZSksIDA3NzcpCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0gYi9Ub29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0K
aW5kZXggNjhiNWQyMmNmYTkuLmIyYWQ1ZjY5ZTRlIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRz
L3dlYmtpdGRpcnMucG0KKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCkBAIC0xNjAs
NiArMTYwLDggQEAgbXkgJHZzVmVyc2lvbjsKIG15ICR3aW5kb3dzU291cmNlRGlyOwogbXkgJHdp
blZlcnNpb247CiBteSAkd2lsbFVzZVZDRXhwcmVzc1doZW5CdWlsZGluZyA9IDA7CitteSAkdnNX
aGVyZUZvdW5kSW5zdGFsbGF0aW9uOworbXkgJHZzV2hlcmVMZWdhY3lJbnN0YWxsYXRpb247CiAK
ICMgRGVmaW5lZCBpbiBWQ1NVdGlscy4KIHN1YiBleGl0U3RhdHVzKCQpOwpAQCAtNTg5LDYgKzU5
MSw4MCBAQCBzdWIgcHJvZ3JhbUZpbGVzUGF0aFg4NgogICAgIHJldHVybiAkcHJvZ3JhbUZpbGVz
UGF0aFg4NjsKIH0KIAorc3ViIHJlcXVpcmVNb2R1bGVzRm9yVlNXaGVyZQoreworICAgIHJlcXVp
cmUgRW5jb2RlOworICAgIHJlcXVpcmUgRW5jb2RlOjpMb2NhbGU7CisgICAgcmVxdWlyZSBKU09O
OjpQUDsKK30KKworc3ViIHBpY2tDdXJyZW50VmlzdWFsU3R1ZGlvSW5zdGFsbGF0aW9uCit7Cisg
ICAgcmV0dXJuICR2c1doZXJlRm91bmRJbnN0YWxsYXRpb24gaWYgZGVmaW5lZCAkdnNXaGVyZUZv
dW5kSW5zdGFsbGF0aW9uOworCisgICAgcmVxdWlyZU1vZHVsZXNGb3JWU1doZXJlKCk7CisgICAg
ZGV0ZXJtaW5lU291cmNlRGlyKCk7CisKKyAgICAjIFByZWZlciBFbnRlcnByaXNlLCB0aGVuIFBy
b2Zlc3Npb25hbCwgdGhlbiBDb21tdW5pdHksIHRoZW4KKyAgICAjIGFueXRoaW5nIGVsc2UgdGhh
dCBwcm92aWRlcyBNU0J1aWxkLgorICAgIGZvcmVhY2ggbXkgJHByb2R1Y3RUeXBlICgoCisgICAg
ICAgICdNaWNyb3NvZnQuVmlzdWFsU3R1ZGlvLlByb2R1Y3QuRW50ZXJwcmlzZScsCisgICAgICAg
ICdNaWNyb3NvZnQuVmlzdWFsU3R1ZGlvLlByb2R1Y3QuUHJvZmVzc2lvbmFsJywKKyAgICAgICAg
J01pY3Jvc29mdC5WaXN1YWxTdHVkaW8uUHJvZHVjdC5Db21tdW5pdHknLAorICAgICAgICB1bmRl
ZgorICAgICkpIHsKKyAgICAgICAgbXkgJGNvbW1hbmQgPSAiJHNvdXJjZURpci9XZWJLaXRMaWJy
YXJpZXMvd2luL3Rvb2xzL3Zzd2hlcmUgLW5vbG9nbyAtbGF0ZXN0IC1mb3JtYXQganNvbiAtcmVx
dWlyZXMgTWljcm9zb2Z0LkNvbXBvbmVudC5NU0J1aWxkIjsKKyAgICAgICAgaWYgKGRlZmluZWQg
JHByb2R1Y3RUeXBlKSB7CisgICAgICAgICAgICAkY29tbWFuZCAuPSAiIC1wcm9kdWN0cyAkcHJv
ZHVjdFR5cGUiOworICAgICAgICB9CisgICAgICAgIG15ICR2c1doZXJlT3V0ID0gYCRjb21tYW5k
YDsKKyAgICAgICAgbXkgJGluc3RhbGxhdGlvbnMgPSBbXTsKKyAgICAgICAgZXZhbCB7CisgICAg
ICAgICAgICAkaW5zdGFsbGF0aW9ucyA9IEpTT046OlBQOjpkZWNvZGVfanNvbihFbmNvZGU6OmVu
Y29kZSgnVVRGLTgnID0+IEVuY29kZTo6ZGVjb2RlKGNvbnNvbGVfaW4gPT4gJHZzV2hlcmVPdXQp
KSk7CisgICAgICAgIH07CisgICAgICAgIHByaW50ICJFcnJvciBnZXR0aW5nIFZpc3VhbCBTdHVk
aW8gTG9jYXRpb246ICRAXG4iIGlmICRAOworICAgICAgICB1bmRlZiAkQDsKKworICAgICAgICBp
ZiAoc2NhbGFyIEAkaW5zdGFsbGF0aW9ucykgeworICAgICAgICAgICAgbXkgJGluc3RhbGxhdGlv
biA9ICRpbnN0YWxsYXRpb25zLT5bMF07CisgICAgICAgICAgICAkdnNXaGVyZUZvdW5kSW5zdGFs
bGF0aW9uID0gJGluc3RhbGxhdGlvbjsKKyAgICAgICAgICAgIHJldHVybiAkaW5zdGFsbGF0aW9u
OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB1bmRlZjsKK30KKworc3ViIHBpY2tMZWdh
Y3lWaXN1YWxTdHVkaW9JbnN0YWxsYXRpb24KK3sKKyAgICByZXR1cm4gJHZzV2hlcmVMZWdhY3lJ
bnN0YWxsYXRpb24gaWYgZGVmaW5lZCAkdnNXaGVyZUxlZ2FjeUluc3RhbGxhdGlvbjsKKworICAg
IHJlcXVpcmVNb2R1bGVzRm9yVlNXaGVyZSgpOworICAgIGRldGVybWluZVNvdXJjZURpcigpOwor
CisgICAgbXkgJHZzV2hlcmVPdXQgPSBgJHNvdXJjZURpci9XZWJLaXRMaWJyYXJpZXMvd2luL3Rv
b2xzL3Zzd2hlcmUgLW5vbG9nbyAtbGVnYWN5IC1mb3JtYXQganNvbmA7CisgICAgbXkgJGluc3Rh
bGxhdGlvbnNfYWxsID0gW107CisgICAgZXZhbCB7CisgICAgICAgICRpbnN0YWxsYXRpb25zX2Fs
bCA9IEpTT046OlBQOjpkZWNvZGVfanNvbihFbmNvZGU6OmVuY29kZSgnVVRGLTgnID0+IEVuY29k
ZTo6ZGVjb2RlKGNvbnNvbGVfaW4gPT4gJHZzV2hlcmVPdXQpKSk7CisgICAgfTsKKyAgICBwcmlu
dCAiRXJyb3IgZ2V0dGluZyBWaXN1YWwgU3R1ZGlvIExlZ2FjeSBMb2NhdGlvbjogJEBcbiIgaWYg
JEA7CisgICAgdW5kZWYgJEA7CisKKyAgICAjIEl0J3MgcG9zc2libGUgdGhhdCBhIG5vbi1sZWdh
Y3kgaW5zdGFsbGF0aW9uIHdpdGhvdXQgbXNidWlsZAorICAgICMgd291bGQgbm90IGJlIGZvdW5k
IGJ5IHRoZSBsYXRlc3QsIGJ1dCB3b3VsZCBiZSBmb3VuZCBieSB0aGlzCisgICAgIyB2c3doZXJl
IGNhbGwsIGFuZCB3ZSB3YW50IHRvIHNraXAgdGhvc2UsIHNvIGNoZWNrIGZvciB2ZXJzaW9ucwor
ICAgICMgd2l0aCBhbiBpbnN0YWxsYXRpb24gdmVyc2lvbiBiZWZvcmUgMTUuMC4KKyAgICBteSBA
aW5zdGFsbGF0aW9ucyA9IGdyZXAgeyAkXy0+e2luc3RhbGxhdGlvblZlcnNpb259IDwgMTUgfSBA
JGluc3RhbGxhdGlvbnNfYWxsOworCisgICAgIyBXZSBkb24ndCBnZXQgbXVjaCBpbmZvcm1hdGlv
biB0aGF0IHdvdWxkIGxldCB1cyBjaG9vc2UgYmV0d2VlbgorICAgICMgbGVnYWN5IGluc3RhbGxh
dGlvbnMsIHNvIHdlJ2xsIHRha2UgdGhlIGZpcnN0LgorICAgIGlmIChzY2FsYXIgQGluc3RhbGxh
dGlvbnMpIHsKKyAgICAgICAgbXkgJGluc3RhbGxhdGlvbiA9ICRpbnN0YWxsYXRpb25zWzBdOwor
ICAgICAgICAkdnNXaGVyZUxlZ2FjeUluc3RhbGxhdGlvbiA9ICRpbnN0YWxsYXRpb247CisgICAg
ICAgIHJldHVybiAkaW5zdGFsbGF0aW9uOworICAgIH0KKyAgICByZXR1cm4gdW5kZWY7Cit9CisK
IHN1YiB2aXN1YWxTdHVkaW9JbnN0YWxsRGlyCiB7CiAgICAgcmV0dXJuICR2c0luc3RhbGxEaXIg
aWYgZGVmaW5lZCAkdnNJbnN0YWxsRGlyOwpAQCAtNTk3LDkgKzY3MywxMyBAQCBzdWIgdmlzdWFs
U3R1ZGlvSW5zdGFsbERpcgogICAgICAgICAkdnNJbnN0YWxsRGlyID0gJEVOVnsnVlNJTlNUQUxM
RElSJ307CiAgICAgICAgICR2c0luc3RhbGxEaXIgPX4gc3xbXFwvXSR8fDsKICAgICB9IGVsc2Ug
ewotICAgICAgICAkdnNJbnN0YWxsRGlyID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKHByb2dyYW1GaWxl
c1BhdGhYODYoKSwgIk1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIiwgIjIwMTciLCAiQ29tbXVuaXR5
Iik7CisgICAgICAgICR2c0luc3RhbGxEaXIgPSB2aXN1YWxTdHVkaW9JbnN0YWxsRGlyVlNXaGVy
ZSgpOworICAgICAgICBpZiAobm90IC1lICR2c0luc3RhbGxEaXIpIHsKKyAgICAgICAgICAgICR2
c0luc3RhbGxEaXIgPSB2aXN1YWxTdHVkaW9JbnN0YWxsRGlyTGVnYWN5KCk7CisgICAgICAgIH0K
ICAgICAgICAgaWYgKG5vdCAtZSAkdnNJbnN0YWxsRGlyKSB7Ci0gICAgICAgICAgICAkdnNJbnN0
YWxsRGlyID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKHByb2dyYW1GaWxlc1BhdGhYODYoKSwgIk1pY3Jv
c29mdCBWaXN1YWwgU3R1ZGlvIDE0LjAiKTsKKyAgICAgICAgICAgICR2c0luc3RhbGxEaXIgPSB2
aXN1YWxTdHVkaW9JbnN0YWxsRGlyRmFsbGJhY2soKTsKKyAgICAgICAgICAgIHByaW50ICJGYWxs
YmFjayAkdnNJbnN0YWxsRGlyXG4iOwogICAgICAgICB9CiAgICAgfQogICAgIGNob21wKCR2c0lu
c3RhbGxEaXIgPSBgY3lncGF0aCAiJHZzSW5zdGFsbERpciJgKSBpZiBpc0N5Z3dpbigpOwpAQCAt
NjA4LDE0ICs2ODgsNTYgQEAgc3ViIHZpc3VhbFN0dWRpb0luc3RhbGxEaXIKICAgICByZXR1cm4g
JHZzSW5zdGFsbERpcjsKIH0KIAorc3ViIHZpc3VhbFN0dWRpb0luc3RhbGxEaXJWU1doZXJlCit7
CisgICAgcGlja0N1cnJlbnRWaXN1YWxTdHVkaW9JbnN0YWxsYXRpb24oKTsKKyAgICBpZiAoZGVm
aW5lZCgkdnNXaGVyZUZvdW5kSW5zdGFsbGF0aW9uKSkgeworICAgICAgICByZXR1cm4gJHZzV2hl
cmVGb3VuZEluc3RhbGxhdGlvbi0+e2luc3RhbGxhdGlvblBhdGh9OworICAgIH0KKyAgICByZXR1
cm4gdW5kZWY7Cit9CisKK3N1YiB2aXN1YWxTdHVkaW9JbnN0YWxsRGlyTGVnYWN5Cit7CisgICAg
cGlja0xlZ2FjeVZpc3VhbFN0dWRpb0luc3RhbGxhdGlvbigpOworICAgIGlmIChkZWZpbmVkKCR2
c1doZXJlTGVnYWN5SW5zdGFsbGF0aW9uKSkgeworICAgICAgICByZXR1cm4gJHZzV2hlcmVMZWdh
Y3lJbnN0YWxsYXRpb24tPntpbnN0YWxsYXRpb25QYXRofTsKKyAgICB9CisgICAgcmV0dXJuIHVu
ZGVmOworfQorCitzdWIgdmlzdWFsU3R1ZGlvSW5zdGFsbERpckZhbGxiYWNrCit7CisgICAgZm9y
ZWFjaCBteSAkcHJvZHVjdFR5cGUgKCgKKyAgICAgICAgJ0VudGVycHJpc2UnLAorICAgICAgICAn
UHJvZmVzc2lvbmFsJywKKyAgICAgICAgJ0NvbW11bml0eScsCisgICAgKSkgeworICAgICAgICBt
eSAkaW5zdGFsbGRpciA9IEZpbGU6OlNwZWMtPmNhdGRpcihwcm9ncmFtRmlsZXNQYXRoWDg2KCks
CisgICAgICAgICAgICAiTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8iLCAiMjAxNyIsICRwcm9kdWN0
VHlwZSk7CisgICAgICAgIG15ICRtc2J1aWxkZGlyID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKCRpbnN0
YWxsZGlyLAorICAgICAgICAgICAgIk1TQnVpbGQiLCAiMTUuMCIsICJiaW4iKTsKKyAgICAgICAg
aWYgKC1lICRpbnN0YWxsZGlyICYmIC1lICRtc2J1aWxkZGlyKSB7CisgICAgICAgICAgICByZXR1
cm4gJGluc3RhbGxkaXI7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEZpbGU6OlNwZWMt
PmNhdGRpcihwcm9ncmFtRmlsZXNQYXRoWDg2KCksICJNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAx
NC4wIik7Cit9CisKIHN1YiBtc0J1aWxkSW5zdGFsbERpcgogewogICAgIHJldHVybiAkbXNCdWls
ZEluc3RhbGxEaXIgaWYgZGVmaW5lZCAkbXNCdWlsZEluc3RhbGxEaXI7CiAKLSAgICAkbXNCdWls
ZEluc3RhbGxEaXIgPSBGaWxlOjpTcGVjLT5jYXRkaXIocHJvZ3JhbUZpbGVzUGF0aFg4NigpLCAi
TWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8iLCAiMjAxNyIsICJDb21tdW5pdHkiLCAiTVNCdWlsZCIs
ICIxNS4wIiwgIkJpbiIpOwotICAgIGlmIChub3QgLWUgJG1zQnVpbGRJbnN0YWxsRGlyKSB7Ci0g
ICAgICAgICRtc0J1aWxkSW5zdGFsbERpciA9IEZpbGU6OlNwZWMtPmNhdGRpcihwcm9ncmFtRmls
ZXNQYXRoWDg2KCksICJNU0J1aWxkIiwgIjE0LjAiLCAiQmluIik7CisgICAgbXkgJHZlcnNpb24g
PSB2aXN1YWxTdHVkaW9WZXJzaW9uKCk7CisgICAgaWYgKCR2ZXJzaW9uID49IDE1LjApIHsKKyAg
ICAgICAgbXkgJGluc3RhbGxEaXIgPSB2aXN1YWxTdHVkaW9JbnN0YWxsRGlyKCk7CisgICAgICAg
ICRtc0J1aWxkSW5zdGFsbERpciA9IEZpbGU6OlNwZWMtPmNhdGRpcigkaW5zdGFsbERpciwKKyAg
ICAgICAgICAgICJNU0J1aWxkIiwgJHZlcnNpb24sICJiaW4iKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICAkbXNCdWlsZEluc3RhbGxEaXIgPSBGaWxlOjpTcGVjLT5jYXRkaXIocHJvZ3JhbUZpbGVz
UGF0aFg4NigpLCAKKyAgICAgICAgICAgICJNU0J1aWxkIiwgIjE0LjAiLCAiQmluIikKICAgICB9
CisKICAgICBjaG9tcCgkbXNCdWlsZEluc3RhbGxEaXIgPSBgY3lncGF0aCAiJG1zQnVpbGRJbnN0
YWxsRGlyImApIGlmIGlzQ3lnd2luKCk7CiAKICAgICBwcmludCAiVXNpbmcgTVNCdWlsZDogJG1z
QnVpbGRJbnN0YWxsRGlyXG4iOwpAQCAtNjI3LDEzICs3NDksMzAgQEAgc3ViIHZpc3VhbFN0dWRp
b1ZlcnNpb24KICAgICByZXR1cm4gJHZzVmVyc2lvbiBpZiBkZWZpbmVkICR2c1ZlcnNpb247CiAK
ICAgICBteSAkaW5zdGFsbERpciA9IHZpc3VhbFN0dWRpb0luc3RhbGxEaXIoKTsKLQotICAgICR2
c1ZlcnNpb24gPSAoJGluc3RhbGxEaXIgPX4gL01pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIChbMC05
XStcLlswLTldKikvKSA/ICQxIDogIjE0IjsKKyAgICAkdnNWZXJzaW9uID0gdmlzdWFsU3R1ZGlv
VmVyc2lvbkZyb21JbnN0YWxsRGlyKCRpbnN0YWxsRGlyKTsKIAogICAgIHByaW50ICJVc2luZyBW
aXN1YWwgU3R1ZGlvICR2c1ZlcnNpb25cbiI7CiAgICAgcmV0dXJuICR2c1ZlcnNpb247CiB9CiAK
K3N1YiB2aXN1YWxTdHVkaW9WZXJzaW9uRnJvbUluc3RhbGxEaXIKK3sKKyAgICBteSAoJGRpcikg
PSBAXzsKKyAgICBteSAkdmVyc2lvbjsKKworICAgIGlmICgkZGlyID1+IG18TWljcm9zb2Z0IFZp
c3VhbCBTdHVkaW9bL1xcXTIwMTd8KSB7CisgICAgICAgICR2ZXJzaW9uID0gIjE1LjAiOworICAg
IH0KKworICAgIGlmICghZGVmaW5lZCgkdmVyc2lvbikpIHsKKyAgICAgICAgaWYgKCRkaXIgPX4g
L01pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIChbMC05XStcLlswLTldKikvKSB7CisgICAgICAgICAg
ICAkdmVyc2lvbiA9ICQxOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuICR2ZXJzaW9u
OworfQorCiBzdWIgZGV0ZXJtaW5lQ29uZmlndXJhdGlvbkZvclZpc3VhbFN0dWRpbwogewogICAg
IHJldHVybiBpZiBkZWZpbmVkICRjb25maWd1cmF0aW9uRm9yVmlzdWFsU3R1ZGlvOwpAQCAtMjA4
NCw3ICsyMjIzLDExIEBAIHN1YiBnZW5lcmF0ZUJ1aWxkU3lzdGVtRnJvbUNNYWtlUHJvamVjdAog
ICAgICAgICAgICAgcHVzaCBAYXJncywgIk5pbmphIjsKICAgICAgICAgfQogICAgIH0gZWxzaWYg
KGlzQW55V2luZG93cygpICYmIGlzV2luNjQoKSkgewotICAgICAgICBwdXNoIEBhcmdzLCAnLUcg
IlZpc3VhbCBTdHVkaW8gMTQgMjAxNSBXaW42NCInOworICAgICAgICBpZiAodmlzdWFsU3R1ZGlv
VmVyc2lvbigpID49IDE1KSB7CisgICAgICAgICAgICBwdXNoIEBhcmdzLCAnLUcgIlZpc3VhbCBT
dHVkaW8gMTUgMjAxNyBXaW42NCInOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHVz
aCBAYXJncywgJy1HICJWaXN1YWwgU3R1ZGlvIDE0IDIwMTUgV2luNjQiJzsKKyAgICAgICAgfQog
ICAgIH0KICAgICAjIERvIG5vdCBzaG93IHByb2dyZXNzIG9mIGdlbmVyYXRpbmcgYmluZGluZ3Mg
aW4gaW50ZXJhY3RpdmUgTmluamEgYnVpbGQgbm90IHRvIGxlYXZlIG5vaXN5IGxpbmVzIG9uIHR0
eQogICAgIHB1c2ggQGFyZ3MsICctRFNIT1dfQklORElOR1NfR0VORVJBVElPTl9QUk9HUkVTUz0x
JyB1bmxlc3MgKCR3aWxsVXNlTmluamEgJiYgLXQgU1RET1VUKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>