<?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>90132</bug_id>
          
          <creation_ts>2012-06-27 21:20:45 -0700</creation_ts>
          <short_desc>[chromium] CCThreadTask should not depend on CrossThreadTask and does not need to depend on CrossThreadCopier</short_desc>
          <delta_ts>2012-07-30 13:06:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="James Robinson">jamesr</reporter>
          <assigned_to name="James Robinson">jamesr</assigned_to>
          <cc>abarth</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>enne</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>levin+threading</cc>
    
    <cc>nduca</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>659147</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-27 21:20:45 -0700</bug_when>
    <thetext>[chromium] CCThreadTask should not depend on CrossThreadTask and does not need to depend on CrossThreadCopier</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659151</commentid>
    <comment_count>1</comment_count>
      <attachid>149862</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-27 21:24:55 -0700</bug_when>
    <thetext>Created attachment 149862
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659215</commentid>
    <comment_count>2</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2012-06-27 22:38:12 -0700</bug_when>
    <thetext>You should consider something which helps you automatically enforce proper calls across the thread boundary. Otherwise, you&apos;re asking for more subtle bugs. The current code makes it very explicit about which items need to be looked at carefully but this change looses that.

Another solution to your problem is to break out CrossThreadTaskTraits into a platform piece that has what you need.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659221</commentid>
    <comment_count>3</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-27 22:52:00 -0700</bug_when>
    <thetext>I agree with the general principle of static checks. In practice, these checks have not provided us any benefit and the dependencies are proving problematic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659237</commentid>
    <comment_count>4</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2012-06-27 23:10:06 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; I agree with the general principle of static checks. In practice, these checks have not provided us any benefit and the dependencies are proving problematic.

Couldn&apos;t the dependency be refactored to not be problematic?

Anyway, if you feel this is the best thing for the future maintenance of this piece of code, go for it. I just wanted to push a little about an alternative (because of the problems I&apos;ve seen in other places in the code).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660039</commentid>
    <comment_count>5</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-28 18:35:22 -0700</bug_when>
    <thetext>I&apos;m not entirely convinced here either.  I realize that the majority of the time we&apos;re allowing cross-thread access, but I think it&apos;s good that it&apos;s explicitly called out. At least in terms of reviewing, I&apos;ll think twice about whether it&apos;s the right thing to do when one of these gets added.

It looks like CrossThreadCopier is already in Platform.  Can you just split CrossThreadTaskTraits out of CrossThreadTask and put it in Platform as well?  Would that fix your dependency issues?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660043</commentid>
    <comment_count>6</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-28 18:42:59 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; I&apos;m not entirely convinced here either.  I realize that the majority of the time we&apos;re allowing cross-thread access, but I think it&apos;s good that it&apos;s explicitly called out. At least in terms of reviewing, I&apos;ll think twice about whether it&apos;s the right thing to do when one of these gets added.
&gt; 
&gt; It looks like CrossThreadCopier is already in Platform.  Can you just split CrossThreadTaskTraits out of CrossThreadTask and put it in Platform as well?  Would that fix your dependency issues?

Oops, I misread the platform directory.  I guess they&apos;d have to move to WTF or capital P platform.  Yuck.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682218</commentid>
    <comment_count>7</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-07-30 11:29:12 -0700</bug_when>
    <thetext>Any new thoughts on this?  I still think this patch is a strict improvement on the current state.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682241</commentid>
    <comment_count>8</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2012-07-30 11:49:20 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Any new thoughts on this?  I still think this patch is a strict improvement on the current state.

imo, it isn&apos;t but I&apos;ve stated that already in comment #2. Ideally CrossThreadCopier would be refactored.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682260</commentid>
    <comment_count>9</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-07-30 11:58:21 -0700</bug_when>
    <thetext>Its always hard to say whether something like this has succeeded. Is the absence of bugs about cross-thread copying a signal, nor a non signal? 

My personal guess is that this hasn&apos;t saved us from enough errors to warrant bringing it over to Chromium as part of GTFO. Note, for example, it doesn&apos;t prevent the type of errors where you post to yourself but the target has died. That&apos;s where Chrome&apos;s ThreadSafeRefCounted stuff really works wonders. As a result, we&apos;ve had to introduce things like CCTimer.

There&apos;s a much bigger source of issues here than cross-thread copies: the place where we&apos;ve had our fragility is CCThreadProxy, where you can get to pointers from either thread. We&apos;ve had a number of regressions where we dereferenced a pointer on the wrong side, simply because we dont have a ThreadSpecific&lt;T&gt;.

Net/net, I see less value in preventing types from moving across thread boundaries and more value in managing lifetimes and preventing access to pointers once you&apos;re on another thread.

Long winded way of saying, I like this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682273</commentid>
    <comment_count>10</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2012-07-30 12:16:21 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Its always hard to say whether something like this has succeeded. Is the absence of bugs about cross-thread copying a signal, nor a non signal?  My personal guess is that this hasn&apos;t saved us from enough errors to warrant bringing it over to Chromium as part of GTFO. 

As a hard data point, I know that it has found a number of errors in other places (especially when we tightened it up to force the AllowCrossThreadAccess annotation but I don&apos;t think there were any of those in this graphics area (CCThread). Perhaps your coding practices will always keep you immune from the errors that others make. 

To me, it appears that this patch takes the easy way out instead of simply refactoring refactor CrossThreadCopier.

&gt; Note, for example, it doesn&apos;t prevent the type of errors where you post to yourself but the target has died. That&apos;s where Chrome&apos;s ThreadSafeRefCounted stuff really works wonders. As a result, we&apos;ve had to introduce things like CCTimer.

Yep it prevents one type of error. Ideally there would be something to prevent the other type of error as well.

&gt;There&apos;s a much bigger source of issues here than cross-thread copies: the place where we&apos;ve had our fragility is CCThreadProxy

Ideally those pointers wouldn&apos;t be in a structure that either thread could get to.

&gt; Net/net, I see less value in preventing types from moving across thread boundaries and more value in managing lifetimes and preventing access to pointers once you&apos;re on another thread.

Are the two mutually exclusive?


Anyway, I will not approve this patch but I also will not r- this patch, so if the folks who work on this code want to r+ go for it (as I tried to state in comment #2.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682302</commentid>
    <comment_count>11</comment_count>
      <attachid>149862</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2012-07-30 12:54:22 -0700</bug_when>
    <thetext>Comment on attachment 149862
Patch

ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682312</commentid>
    <comment_count>12</comment_count>
      <attachid>149862</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-30 13:06:16 -0700</bug_when>
    <thetext>Comment on attachment 149862
Patch

Clearing flags on attachment: 149862

Committed r124077: &lt;http://trac.webkit.org/changeset/124077&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682313</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-30 13:06:21 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149862</attachid>
            <date>2012-06-27 21:24:55 -0700</date>
            <delta_ts>2012-07-30 13:06:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90132-20120627212454.patch</filename>
            <type>text/plain</type>
            <size>19660</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxMzk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjBkYWVmZTY0NmNkMmQ1
YTAxNGYwZWI4ZjRjYmM3NTQyYzQ2YTllYS4uMTliMmIwMjZhNGE4YTgxOWI1Zjg4MGUwZGU4OTE2
ODRlZDIxYzBkMyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ5IEBACiAyMDEyLTA2LTI3ICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgW2Nocm9taXVtXSBD
Q1RocmVhZFRhc2sgc2hvdWxkIG5vdCBkZXBlbmQgb24gQ3Jvc3NUaHJlYWRUYXNrIGFuZCBkb2Vz
IG5vdCBuZWVkIHRvIGRlcGVuZCBvbiBDcm9zc1RocmVhZENvcGllcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAxMzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDcm9zc1RocmVhZFRhc2sgaXMgZGVmaW5l
ZCBpbiBXZWJDb3JlL2RvbS8gYW5kIGRlcGVuZHMgb24gY29uY2VwdHMgbGlrZSBTY3JpcHRFeGVj
dXRpb25Db25jZXB0LiBDQ1RocmVhZFRhc2ssCisgICAgICAgIGJlaW5nIGluIFdlYkNvcmUvcGxh
dGZvcm0vLCBzaG91bGQgbm90IGRlcGVuZCBvbiAvZG9tLyBvciBhbnl0aGluZyBmcm9tIHRoYXQg
bGF5ZXIuCisKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXIgaXMgbm90IGEgbGF5ZXJpbmcgdmlv
bGF0aW9uIHBlciBzZSwgYnV0IGl0J3MgYWxzbyBub3QgYXQgYWxsIGhlbHBmdWwgZm9yIENDVGhy
ZWFkVGFzayAtIHdlCisgICAgICAgIG5ldmVyIHVzZSBhbnkgdHlwZXMgZm9yIHdoaWNoIGl0IHdv
dWxkIGJlIHVzZWZ1bC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGhyZWFkUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6Y29t
cG9zaXRlQW5kUmVhZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6Zmlu
aXNoQWxsUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmluaXRp
YWxpemVDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OnNldFZpc2li
bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVu
ZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6cmVjcmVhdGVDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmltcGxTaWRlUmVuZGVyaW5nU3Rh
dHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c3RhcnQpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVh
ZFByb3h5Ojpmb3JjZVNlcmlhbGl6ZU9uU3dhcEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFBy
b3h5OjphY3F1aXJlTGF5ZXJUZXh0dXJlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUaHJlYWRUYXNrLmg6CisgICAgICAgIChDQ1RocmVhZFRhc2sxKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkVGFzazE6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1RocmVhZFRhc2sxOjpDQ1RocmVhZFRhc2sxKToKKyAgICAgICAgKENDVGhyZWFkVGFzazIp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRUYXNrMjo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDVGhyZWFkVGFzazI6OkNDVGhyZWFkVGFzazIpOgorICAgICAgICAoQ0NUaHJlYWRU
YXNrMyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFRhc2szOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NUaHJlYWRUYXNrMzo6Q0NUaHJlYWRUYXNrMyk6CisgICAgICAgIChDQ1Ro
cmVhZFRhc2s0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkVGFzazQ6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFRhc2s0OjpDQ1RocmVhZFRhc2s0KToKKyAgICAgICAg
KENDVGhyZWFkVGFzazUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRUYXNrNTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkVGFzazU6OkNDVGhyZWFkVGFzazUpOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlQ0NUaHJlYWRUYXNrKToKKworMjAxMi0wNi0yNyAgSmFtZXMg
Um9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFtjaHJvbWl1bV0gVXNl
IFNrQ29sb3IgaW4gY29tcG9zaXRvciBpbnRlcm5hbHMKICAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwMTA4CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5j
cHAKaW5kZXggOTk3M2E5NzRiMTU2N2JiNjY4MzEyNjAzNmVjZDQwNDMxZjAxMWZjYy4uMzljNmY4
Njg4YTMzYzM0M2QyOGE4NzM1MTA4OWNjYzM2Mjg1NzI3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQ
cm94eS5jcHAKQEAgLTI2LDcgKzI2LDYgQEAKIAogI2luY2x1ZGUgImNjL0NDVGhyZWFkUHJveHku
aCIKIAotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiU2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCiAjaW5jbHVkZSAiY2Mv
Q0NEZWxheUJhc2VkVGltZVNvdXJjZS5oIgpAQCAtMTE0LDcgKzExMyw3IEBAIGJvb2wgQ0NUaHJl
YWRQcm94eTo6Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0
JiByZWN0KQogCiAgICAgLy8gUGVyZm9ybSBhIHN5bmNocm9ub3VzIGNvbW1pdC4KICAgICBDQ0Nv
bXBsZXRpb25FdmVudCBiZWdpbkZyYW1lQ29tcGxldGlvbjsKLSAgICBDQ1Byb3h5OjppbXBsVGhy
ZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6
Zm9yY2VCZWdpbkZyYW1lT25JbXBsVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZiZWdp
bkZyYW1lQ29tcGxldGlvbikpKTsKKyAgICBDQ1Byb3h5OjppbXBsVGhyZWFkKCktPnBvc3RUYXNr
KGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6Zm9yY2VCZWdpbkZyYW1l
T25JbXBsVGhyZWFkLCAmYmVnaW5GcmFtZUNvbXBsZXRpb24pKTsKICAgICBiZWdpbkZyYW1lQ29t
cGxldGlvbi53YWl0KCk7CiAgICAgbV9pbkNvbXBvc2l0ZUFuZFJlYWRiYWNrID0gdHJ1ZTsKICAg
ICBiZWdpbkZyYW1lKCk7CkBAIC0xMjQsNyArMTIzLDcgQEAgYm9vbCBDQ1RocmVhZFByb3h5Ojpj
b21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCiAg
ICAgUmVhZGJhY2tSZXF1ZXN0IHJlcXVlc3Q7CiAgICAgcmVxdWVzdC5yZWN0ID0gcmVjdDsKICAg
ICByZXF1ZXN0LnBpeGVscyA9IHBpeGVsczsKLSAgICBDQ1Byb3h5OjppbXBsVGhyZWFkKCktPnBv
c3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6cmVxdWVzdFJl
YWRiYWNrT25JbXBsVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZyZXF1ZXN0KSkpOwor
ICAgIENDUHJveHk6OmltcGxUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRo
aXMsICZDQ1RocmVhZFByb3h5OjpyZXF1ZXN0UmVhZGJhY2tPbkltcGxUaHJlYWQsICZyZXF1ZXN0
KSk7CiAgICAgcmVxdWVzdC5jb21wbGV0aW9uLndhaXQoKTsKICAgICByZXR1cm4gcmVxdWVzdC5z
dWNjZXNzOwogfQpAQCAtMTYzLDcgKzE2Miw3IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6ZmluaXNo
QWxsUmVuZGVyaW5nKCkKIAogICAgIC8vIE1ha2Ugc3VyZSBhbGwgR0wgZHJhd2luZyBpcyBmaW5p
c2hlZCBvbiB0aGUgaW1wbCB0aHJlYWQuCiAgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlv
bjsKLSAgICBDQ1Byb3h5OjppbXBsVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFz
ayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6ZmluaXNoQWxsUmVuZGVyaW5nT25JbXBsVGhyZWFkLCBB
bGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSkpOworICAgIENDUHJveHk6OmltcGxU
aHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5
OjpmaW5pc2hBbGxSZW5kZXJpbmdPbkltcGxUaHJlYWQsICZjb21wbGV0aW9uKSk7CiAgICAgY29t
cGxldGlvbi53YWl0KCk7CiB9CiAKQEAgLTE4MSw3ICsxODAsNyBAQCBib29sIENDVGhyZWFkUHJv
eHk6OmluaXRpYWxpemVDb250ZXh0KCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgQ0NQ
cm94eTo6aW1wbFRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkND
VGhyZWFkUHJveHk6OmluaXRpYWxpemVDb250ZXh0T25JbXBsVGhyZWFkLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJl
YWRBY2Nlc3MoY29udGV4dC5sZWFrUHRyKCkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5sZWFrUHRyKCkpKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjAxLDcgKzIwMCw3IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6
c2V0VmlzaWJsZShib29sIHZpc2libGUpCiB7CiAgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ1Ro
cmVhZFByb3h5OjpzZXRWaXNpYmxlIik7CiAgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlv
bjsKLSAgICBDQ1Byb3h5OjppbXBsVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFz
ayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6c2V0VmlzaWJsZU9uSW1wbFRocmVhZCwgQWxsb3dDcm9z
c1RocmVhZEFjY2VzcygmY29tcGxldGlvbiksIHZpc2libGUpKTsKKyAgICBDQ1Byb3h5OjppbXBs
VGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94
eTo6c2V0VmlzaWJsZU9uSW1wbFRocmVhZCwgJmNvbXBsZXRpb24sIHZpc2libGUpKTsKICAgICBj
b21wbGV0aW9uLndhaXQoKTsKIH0KIApAQCAtMjIyLDkgKzIyMSw5IEBAIGJvb2wgQ0NUaHJlYWRQ
cm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoKQogICAgIGJvb2wgaW5pdGlhbGl6ZVN1Y2Nl
ZWRlZCA9IGZhbHNlOwogICAgIExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVz
OwogICAgIENDUHJveHk6OmltcGxUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNr
KHRoaXMsICZDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlck9uSW1wbFRocmVh
ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNj
ZXNzKCZpbml0aWFsaXplU3VjY2VlZGVkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjYXBhYmls
aXRpZXMpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJmNvbXBsZXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJmluaXRpYWxpemVTdWNjZWVkZWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhcGFiaWxpdGllcykp
OwogICAgIGNvbXBsZXRpb24ud2FpdCgpOwogCiAgICAgaWYgKGluaXRpYWxpemVTdWNjZWVkZWQp
IHsKQEAgLTI1NCwxMCArMjUzLDEwIEBAIGJvb2wgQ0NUaHJlYWRQcm94eTo6cmVjcmVhdGVDb250
ZXh0KCkKICAgICBib29sIHJlY3JlYXRlU3VjY2VlZGVkID0gZmFsc2U7CiAgICAgTGF5ZXJSZW5k
ZXJlckNhcGFiaWxpdGllcyBjYXBhYmlsaXRpZXM7CiAgICAgQ0NQcm94eTo6aW1wbFRocmVhZCgp
LT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OnJlY3Jl
YXRlQ29udGV4dE9uSW1wbFRocmVhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9u
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKGNvbnRleHQubGVha1B0cigpKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvd0Nyb3NzVGhy
ZWFkQWNjZXNzKCZyZWNyZWF0ZVN1Y2NlZWRlZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY2Fw
YWJpbGl0aWVzKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZjb21wbGV0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubGVha1B0cigpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZWNyZWF0ZVN1Y2Nl
ZWRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmY2FwYWJpbGl0aWVzKSk7CiAgICAgY29tcGxldGlvbi53YWl0KCk7CiAKICAgICBpZiAo
cmVjcmVhdGVTdWNjZWVkZWQpCkBAIC0yNzcsOCArMjc2LDggQEAgdm9pZCBDQ1RocmVhZFByb3h5
OjppbXBsU2lkZVJlbmRlcmluZ1N0YXRzKENDUmVuZGVyaW5nU3RhdHMmIHN0YXRzKQogCiAgICAg
Q0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKICAgICBDQ1Byb3h5OjppbXBsVGhyZWFkKCkt
PnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6aW1wbFNp
ZGVSZW5kZXJpbmdTdGF0c09uSW1wbFRocmVhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21w
bGV0aW9uKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZzdGF0cykpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29tcGxldGlvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3Rh
dHMpKTsKICAgICBjb21wbGV0aW9uLndhaXQoKTsKIH0KIApAQCAtMzc5LDcgKzM3OCw3IEBAIHZv
aWQgQ0NUaHJlYWRQcm94eTo6c3RhcnQoKQogICAgIEFTU0VSVChDQ1Byb3h5OjppbXBsVGhyZWFk
KCkpOwogICAgIC8vIENyZWF0ZSBMYXllclRyZWVIb3N0SW1wbC4KICAgICBDQ0NvbXBsZXRpb25F
dmVudCBjb21wbGV0aW9uOwotICAgIENDUHJveHk6OmltcGxUaHJlYWQoKS0+cG9zdFRhc2soY3Jl
YXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplSW1wbE9uSW1w
bFRocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlvbikpKTsKKyAgICBDQ1By
b3h5OjppbXBsVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NU
aHJlYWRQcm94eTo6aW5pdGlhbGl6ZUltcGxPbkltcGxUaHJlYWQsICZjb21wbGV0aW9uKSk7CiAg
ICAgY29tcGxldGlvbi53YWl0KCk7CiAKICAgICBtX3N0YXJ0ZWQgPSB0cnVlOwpAQCAtMzk2LDcg
KzM5NSw3IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6c3RvcCgpCiAgICAgICAgIERlYnVnU2NvcGVk
U2V0TWFpblRocmVhZEJsb2NrZWQgbWFpblRocmVhZEJsb2NrZWQ7CiAKICAgICAgICAgQ0NDb21w
bGV0aW9uRXZlbnQgY29tcGxldGlvbjsKLSAgICAgICAgQ0NQcm94eTo6aW1wbFRocmVhZCgpLT5w
b3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmxheWVyVHJl
ZUhvc3RDbG9zZWRPbkltcGxUaHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRp
b24pKSk7CisgICAgICAgIENDUHJveHk6OmltcGxUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlQ0NU
aHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25JbXBs
VGhyZWFkLCAmY29tcGxldGlvbikpOwogICAgICAgICBjb21wbGV0aW9uLndhaXQoKTsKICAgICB9
CiAKQEAgLTQxMCw3ICs0MDksNyBAQCB2b2lkIENDVGhyZWFkUHJveHk6OnN0b3AoKQogdm9pZCBD
Q1RocmVhZFByb3h5Ojpmb3JjZVNlcmlhbGl6ZU9uU3dhcEJ1ZmZlcnMoKQogewogICAgIENDQ29t
cGxldGlvbkV2ZW50IGNvbXBsZXRpb247Ci0gICAgQ0NQcm94eTo6aW1wbFRocmVhZCgpLT5wb3N0
VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmZvcmNlU2VyaWFs
aXplT25Td2FwQnVmZmVyc09uSW1wbFRocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29t
cGxldGlvbikpKTsKKyAgICBDQ1Byb3h5OjppbXBsVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUND
VGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6Zm9yY2VTZXJpYWxpemVPblN3YXBCdWZm
ZXJzT25JbXBsVGhyZWFkLCAmY29tcGxldGlvbikpOwogICAgIGNvbXBsZXRpb24ud2FpdCgpOwog
fQogCkBAIC01NDUsNyArNTQ0LDcgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lKCkK
ICAgICAgICAgRGVidWdTY29wZWRTZXRNYWluVGhyZWFkQmxvY2tlZCBtYWluVGhyZWFkQmxvY2tl
ZDsKIAogICAgICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwotICAgICAgICBDQ1By
b3h5OjppbXBsVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NU
aHJlYWRQcm94eTo6YmVnaW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFkLCBBbGxvd0Nyb3NzVGhy
ZWFkQWNjZXNzKCZjb21wbGV0aW9uKSkpOworICAgICAgICBDQ1Byb3h5OjppbXBsVGhyZWFkKCkt
PnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6YmVnaW5G
cmFtZUNvbXBsZXRlT25JbXBsVGhyZWFkLCAmY29tcGxldGlvbikpOwogICAgICAgICBjb21wbGV0
aW9uLndhaXQoKTsKICAgICB9CiAKQEAgLTcwOSw3ICs3MDgsNyBAQCB2b2lkIENDVGhyZWFkUHJv
eHk6OmFjcXVpcmVMYXllclRleHR1cmVzKCkKIAogICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NU
aHJlYWRQcm94eTo6YWNxdWlyZUxheWVyVGV4dHVyZXMiKTsKICAgICBDQ0NvbXBsZXRpb25FdmVu
dCBjb21wbGV0aW9uOwotICAgIENDUHJveHk6OmltcGxUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRl
Q0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjphY3F1aXJlTGF5ZXJUZXh0dXJlc0Zv
ck1haW5UaHJlYWRPbkltcGxUaHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRp
b24pKSk7CisgICAgQ0NQcm94eTo6aW1wbFRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVh
ZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmFjcXVpcmVMYXllclRleHR1cmVzRm9yTWFpblRo
cmVhZE9uSW1wbFRocmVhZCwgJmNvbXBsZXRpb24pKTsKICAgICBjb21wbGV0aW9uLndhaXQoKTsg
Ly8gQmxvY2sgdW50aWwgaXQgaXMgc2FmZSB0byB3cml0ZSB0byBsYXllciB0ZXh0dXJlcyBmcm9t
IHRoZSBtYWluIHRocmVhZC4KIAogICAgIG1fdGV4dHVyZXNBY3F1aXJlZCA9IHRydWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Ro
cmVhZFRhc2suaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGhyZWFkVGFzay5oCmluZGV4IDYyZjdlNzY4MGU4ZGViOWZkYjVhZGQ4ODZkMWIyMDBhNjIz
YThlZGUuLmM5MzE1OTQyOGRlMTk4ZjEzZDEwNjlmZWM2YzkzYzIwZmE4YjJlZjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFk
VGFzay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGhyZWFkVGFzay5oCkBAIC0yNCw4ICsyNCw2IEBACiAjaWZuZGVmIENDVGhyZWFkVGFza19o
CiAjZGVmaW5lIENDVGhyZWFkVGFza19oCiAKLSNpbmNsdWRlICJDcm9zc1RocmVhZENvcGllci5o
IgotI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgogI2luY2x1ZGUgImNjL0NDVGhyZWFkLmgi
CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgpAQCAtNjQsMTUgKzYyLDE0IEBAIGNsYXNzIENDVGhyZWFkVGFzazEgOiBwdWJsaWMgQ0NUaHJl
YWQ6OlRhc2sgewogcHVibGljOgogICAgIHR5cGVkZWYgdm9pZCAoVDo6Kk1ldGhvZCkoTVAxKTsK
ICAgICB0eXBlZGVmIENDVGhyZWFkVGFzazE8VCwgUDEsIE1QMT4gQ0NUaHJlYWRUYXNrSW1wbDsK
LSAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMT46OlBhcmFtVHlw
ZSBQYXJhbTE7CiAKLSAgICBzdGF0aWMgUGFzc093blB0cjxDQ1RocmVhZFRhc2tJbXBsPiBjcmVh
dGUoVCogaW5zdGFuY2UsIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxKQorICAgIHN0
YXRpYyBQYXNzT3duUHRyPENDVGhyZWFkVGFza0ltcGw+IGNyZWF0ZShUKiBpbnN0YW5jZSwgTWV0
aG9kIG1ldGhvZCwgUDEgcGFyYW1ldGVyMSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFB0
cihuZXcgQ0NUaHJlYWRUYXNrSW1wbChpbnN0YW5jZSwgbWV0aG9kLCBwYXJhbWV0ZXIxKSk7CiAg
ICAgfQogCiBwcml2YXRlOgotICAgIENDVGhyZWFkVGFzazEoVCogaW5zdGFuY2UsIE1ldGhvZCBt
ZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxKQorICAgIENDVGhyZWFkVGFzazEoVCogaW5zdGFuY2Us
IE1ldGhvZCBtZXRob2QsIFAxIHBhcmFtZXRlcjEpCiAgICAgICAgIDogQ0NUaHJlYWQ6OlRhc2so
aW5zdGFuY2UpCiAgICAgICAgICwgbV9tZXRob2QobWV0aG9kKQogICAgICAgICAsIG1fcGFyYW1l
dGVyMShwYXJhbWV0ZXIxKQpAQCAtOTQsMTYgKzkxLDE0IEBAIGNsYXNzIENDVGhyZWFkVGFzazIg
OiBwdWJsaWMgQ0NUaHJlYWQ6OlRhc2sgewogcHVibGljOgogICAgIHR5cGVkZWYgdm9pZCAoVDo6
Kk1ldGhvZCkoTVAxLCBNUDIpOwogICAgIHR5cGVkZWYgQ0NUaHJlYWRUYXNrMjxULCBQMSwgTVAx
LCBQMiwgTVAyPiBDQ1RocmVhZFRhc2tJbXBsOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NU
aHJlYWRUYXNrVHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsKLSAgICB0eXBlZGVmIHR5cGVu
YW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMj46OlBhcmFtVHlwZSBQYXJhbTI7CiAKLSAgICBz
dGF0aWMgUGFzc093blB0cjxDQ1RocmVhZFRhc2tJbXBsPiBjcmVhdGUoVCogaW5zdGFuY2UsIE1l
dGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMikKKyAgICBz
dGF0aWMgUGFzc093blB0cjxDQ1RocmVhZFRhc2tJbXBsPiBjcmVhdGUoVCogaW5zdGFuY2UsIE1l
dGhvZCBtZXRob2QsIFAxIHBhcmFtZXRlcjEsIFAyIHBhcmFtZXRlcjIpCiAgICAgewogICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IENDVGhyZWFkVGFza0ltcGwoaW5zdGFuY2UsIG1ldGhvZCwg
cGFyYW1ldGVyMSwgcGFyYW1ldGVyMikpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBDQ1RocmVh
ZFRhc2syKFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFy
YW0yIHBhcmFtZXRlcjIpCisgICAgQ0NUaHJlYWRUYXNrMihUKiBpbnN0YW5jZSwgTWV0aG9kIG1l
dGhvZCwgUDEgcGFyYW1ldGVyMSwgUDIgcGFyYW1ldGVyMikKICAgICAgICAgOiBDQ1RocmVhZDo6
VGFzayhpbnN0YW5jZSkKICAgICAgICAgLCBtX21ldGhvZChtZXRob2QpCiAgICAgICAgICwgbV9w
YXJhbWV0ZXIxKHBhcmFtZXRlcjEpCkBAIC0xMjcsMTcgKzEyMiwxNCBAQCBjbGFzcyBDQ1RocmVh
ZFRhc2szIDogcHVibGljIENDVGhyZWFkOjpUYXNrIHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIHZv
aWQgKFQ6OipNZXRob2QpKE1QMSwgTVAyLCBNUDMpOwogICAgIHR5cGVkZWYgQ0NUaHJlYWRUYXNr
MzxULCBQMSwgTVAxLCBQMiwgTVAyLCBQMywgTVAzPiBDQ1RocmVhZFRhc2tJbXBsOwotICAgIHR5
cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFt
MTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMj46OlBhcmFt
VHlwZSBQYXJhbTI7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8
UDM+OjpQYXJhbVR5cGUgUGFyYW0zOwogCi0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NUaHJlYWRU
YXNrSW1wbD4gY3JlYXRlKFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1l
dGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzKQorICAgIHN0YXRpYyBQ
YXNzT3duUHRyPENDVGhyZWFkVGFza0ltcGw+IGNyZWF0ZShUKiBpbnN0YW5jZSwgTWV0aG9kIG1l
dGhvZCwgUDEgcGFyYW1ldGVyMSwgUDIgcGFyYW1ldGVyMiwgUDMgcGFyYW1ldGVyMykKICAgICB7
CiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NUaHJlYWRUYXNrSW1wbChpbnN0YW5jZSwg
bWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJhbWV0ZXIzKSk7CiAgICAgfQogCiBw
cml2YXRlOgotICAgIENDVGhyZWFkVGFzazMoVCogaW5zdGFuY2UsIE1ldGhvZCBtZXRob2QsIFBh
cmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMpCisg
ICAgQ0NUaHJlYWRUYXNrMyhUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCwgUDEgcGFyYW1ldGVy
MSwgUDIgcGFyYW1ldGVyMiwgUDMgcGFyYW1ldGVyMykKICAgICAgICAgOiBDQ1RocmVhZDo6VGFz
ayhpbnN0YW5jZSkKICAgICAgICAgLCBtX21ldGhvZChtZXRob2QpCiAgICAgICAgICwgbV9wYXJh
bWV0ZXIxKHBhcmFtZXRlcjEpCkBAIC0xNjQsMTggKzE1NiwxNCBAQCBjbGFzcyBDQ1RocmVhZFRh
c2s0IDogcHVibGljIENDVGhyZWFkOjpUYXNrIHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIHZvaWQg
KFQ6OipNZXRob2QpKE1QMSwgTVAyLCBNUDMsIE1QNCk7CiAgICAgdHlwZWRlZiBDQ1RocmVhZFRh
c2s0PFQsIFAxLCBNUDEsIFAyLCBNUDIsIFAzLCBNUDMsIFA0LCBNUDQ+IENDVGhyZWFkVGFza0lt
cGw7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDE+OjpQYXJh
bVR5cGUgUGFyYW0xOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRz
PFAyPjo6UGFyYW1UeXBlIFBhcmFtMjsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFk
VGFza1RyYWl0czxQMz46OlBhcmFtVHlwZSBQYXJhbTM7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBD
cm9zc1RocmVhZFRhc2tUcmFpdHM8UDQ+OjpQYXJhbVR5cGUgUGFyYW00OwogCi0gICAgc3RhdGlj
IFBhc3NPd25QdHI8Q0NUaHJlYWRUYXNrSW1wbD4gY3JlYXRlKFQqIGluc3RhbmNlLCBNZXRob2Qg
bWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJh
bWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCkKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1RocmVh
ZFRhc2tJbXBsPiBjcmVhdGUoVCogaW5zdGFuY2UsIE1ldGhvZCBtZXRob2QsIFAxIHBhcmFtZXRl
cjEsIFAyIHBhcmFtZXRlcjIsIFAzIHBhcmFtZXRlcjMsIFA0IHBhcmFtZXRlcjQpCiAgICAgewog
ICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDVGhyZWFkVGFza0ltcGwoaW5zdGFuY2UsIG1l
dGhvZCwgcGFyYW1ldGVyMSwgcGFyYW1ldGVyMiwgcGFyYW1ldGVyMywgcGFyYW1ldGVyNCkpOwog
ICAgIH0KIAogcHJpdmF0ZToKLSAgICBDQ1RocmVhZFRhc2s0KFQqIGluc3RhbmNlLCBNZXRob2Qg
bWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJh
bWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCkKKyAgICBDQ1RocmVhZFRhc2s0KFQqIGluc3RhbmNl
LCBNZXRob2QgbWV0aG9kLCBQMSBwYXJhbWV0ZXIxLCBQMiBwYXJhbWV0ZXIyLCBQMyBwYXJhbWV0
ZXIzLCBQNCBwYXJhbWV0ZXI0KQogICAgICAgICA6IENDVGhyZWFkOjpUYXNrKGluc3RhbmNlKQog
ICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKICAgICAgICAgLCBtX3BhcmFtZXRlcjEocGFyYW1l
dGVyMSkKQEAgLTIwMywxOSArMTkxLDE0IEBAIGNsYXNzIENDVGhyZWFkVGFzazUgOiBwdWJsaWMg
Q0NUaHJlYWQ6OlRhc2sgewogcHVibGljOgogICAgIHR5cGVkZWYgdm9pZCAoVDo6Kk1ldGhvZCko
TVAxLCBNUDIsIE1QMywgTVA0LCBNUDUpOwogICAgIHR5cGVkZWYgQ0NUaHJlYWRUYXNrNTxULCBQ
MSwgTVAxLCBQMiwgTVAyLCBQMywgTVAzLCBQNCwgTVA0LCBQNSwgTVA1PiBDQ1RocmVhZFRhc2tJ
bXBsOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAxPjo6UGFy
YW1UeXBlIFBhcmFtMTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0
czxQMj46OlBhcmFtVHlwZSBQYXJhbTI7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVh
ZFRhc2tUcmFpdHM8UDM+OjpQYXJhbVR5cGUgUGFyYW0zOwotICAgIHR5cGVkZWYgdHlwZW5hbWUg
Q3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFA0Pjo6UGFyYW1UeXBlIFBhcmFtNDsKLSAgICB0eXBlZGVm
IHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQNT46OlBhcmFtVHlwZSBQYXJhbTU7CiAK
LSAgICBzdGF0aWMgUGFzc093blB0cjxDQ1RocmVhZFRhc2tJbXBsPiBjcmVhdGUoVCogaW5zdGFu
Y2UsIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwg
UGFyYW0zIHBhcmFtZXRlcjMsIFBhcmFtNCBwYXJhbWV0ZXI0LCBQYXJhbTUgcGFyYW1ldGVyNSkK
KyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1RocmVhZFRhc2tJbXBsPiBjcmVhdGUoVCogaW5zdGFu
Y2UsIE1ldGhvZCBtZXRob2QsIFAxIHBhcmFtZXRlcjEsIFAyIHBhcmFtZXRlcjIsIFAzIHBhcmFt
ZXRlcjMsIFA0IHBhcmFtZXRlcjQsIFA1IHBhcmFtZXRlcjUpCiAgICAgewogICAgICAgICByZXR1
cm4gYWRvcHRQdHIobmV3IENDVGhyZWFkVGFza0ltcGwoaW5zdGFuY2UsIG1ldGhvZCwgcGFyYW1l
dGVyMSwgcGFyYW1ldGVyMiwgcGFyYW1ldGVyMywgcGFyYW1ldGVyNCwgcGFyYW1ldGVyNSkpOwog
ICAgIH0KIAogcHJpdmF0ZToKLSAgICBDQ1RocmVhZFRhc2s1KFQqIGluc3RhbmNlLCBNZXRob2Qg
bWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJh
bWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCwgUGFyYW01IHBhcmFtZXRlcjUpCisgICAgQ0NUaHJl
YWRUYXNrNShUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCwgUDEgcGFyYW1ldGVyMSwgUDIgcGFy
YW1ldGVyMiwgUDMgcGFyYW1ldGVyMywgUDQgcGFyYW1ldGVyNCwgUDUgcGFyYW1ldGVyNSkKICAg
ICAgICAgOiBDQ1RocmVhZDo6VGFzayhpbnN0YW5jZSkKICAgICAgICAgLCBtX21ldGhvZChtZXRo
b2QpCiAgICAgICAgICwgbV9wYXJhbWV0ZXIxKHBhcmFtZXRlcjEpCkBAIC0yNjEsMTAgKzI0NCwx
MCBAQCBQYXNzT3duUHRyPENDVGhyZWFkOjpUYXNrPiBjcmVhdGVDQ1RocmVhZFRhc2soCiAgICAg
dm9pZCAoVDo6Km1ldGhvZCkoTVAxKSwKICAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSkKIHsKLSAg
ICByZXR1cm4gQ0NUaHJlYWRUYXNrMTxULCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46
OlR5cGUsIE1QMT46OmNyZWF0ZSgKKyAgICByZXR1cm4gQ0NUaHJlYWRUYXNrMTxULCBQMSwgTVAx
Pjo6Y3JlYXRlKAogICAgICAgICBjYWxsZWUsCiAgICAgICAgIG1ldGhvZCwKLSAgICAgICAgQ3Jv
c3NUaHJlYWRDb3BpZXI8UDE+Ojpjb3B5KHBhcmFtZXRlcjEpKTsKKyAgICAgICAgcGFyYW1ldGVy
MSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEs
IHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDI+CkBAIC0yNzQsMTEgKzI1NywxMSBAQCBQYXNzT3du
UHRyPENDVGhyZWFkOjpUYXNrPiBjcmVhdGVDQ1RocmVhZFRhc2soCiAgICAgY29uc3QgUDEmIHBh
cmFtZXRlcjEsCiAgICAgY29uc3QgUDImIHBhcmFtZXRlcjIpCiB7Ci0gICAgcmV0dXJuIENDVGhy
ZWFkVGFzazI8VCwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEsIHR5
cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAyPjo6Y3JlYXRlKAorICAgIHJl
dHVybiBDQ1RocmVhZFRhc2syPFQsIFAxLCBNUDEsIFAyLCBNUDI+OjpjcmVhdGUoCiAgICAgICAg
IGNhbGxlZSwKICAgICAgICAgbWV0aG9kLAotICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMT46
OmNvcHkocGFyYW1ldGVyMSksCi0gICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6Y29weShw
YXJhbWV0ZXIyKSk7CisgICAgICAgIHBhcmFtZXRlcjEsCisgICAgICAgIHBhcmFtZXRlcjIpOwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBl
bmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAzPgpAQCAtMjg5
LDEyICsyNzIsMTIgQEAgUGFzc093blB0cjxDQ1RocmVhZDo6VGFzaz4gY3JlYXRlQ0NUaHJlYWRU
YXNrKAogICAgIGNvbnN0IFAyJiBwYXJhbWV0ZXIyLAogICAgIGNvbnN0IFAzJiBwYXJhbWV0ZXIz
KQogewotICAgIHJldHVybiBDQ1RocmVhZFRhc2szPFQsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29w
aWVyPFAxPjo6VHlwZSwgTVAxLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMj46OlR5cGUs
IE1QMiwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+OjpUeXBlLCBNUDM+OjpjcmVhdGUo
CisgICAgcmV0dXJuIENDVGhyZWFkVGFzazM8VCwgUDEsIE1QMSwgUDIsIE1QMiwgUDMsIE1QMz46
OmNyZWF0ZSgKICAgICAgICAgY2FsbGVlLAogICAgICAgICBtZXRob2QsCi0gICAgICAgIENyb3Nz
VGhyZWFkQ29waWVyPFAxPjo6Y29weShwYXJhbWV0ZXIxKSwKLSAgICAgICAgQ3Jvc3NUaHJlYWRD
b3BpZXI8UDI+Ojpjb3B5KHBhcmFtZXRlcjIpLAotICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQ
Mz46OmNvcHkocGFyYW1ldGVyMykpOworICAgICAgICBwYXJhbWV0ZXIxLAorICAgICAgICBwYXJh
bWV0ZXIyLAorICAgICAgICBwYXJhbWV0ZXIzKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlw
ZW5hbWUgUDMsIHR5cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQsIHR5cGVuYW1lIE1QND4KQEAgLTMw
NiwxMyArMjg5LDEzIEBAIFBhc3NPd25QdHI8Q0NUaHJlYWQ6OlRhc2s+IGNyZWF0ZUNDVGhyZWFk
VGFzaygKICAgICBjb25zdCBQMyYgcGFyYW1ldGVyMywKICAgICBjb25zdCBQNCYgcGFyYW1ldGVy
NCkKIHsKLSAgICByZXR1cm4gQ0NUaHJlYWRUYXNrNDxULCB0eXBlbmFtZSBDcm9zc1RocmVhZENv
cGllcjxQMT46OlR5cGUsIE1QMSwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+OjpUeXBl
LCBNUDIsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6VHlwZSwgTVAzLCB0eXBlbmFt
ZSBDcm9zc1RocmVhZENvcGllcjxQND46OlR5cGUsIE1QND46OmNyZWF0ZSgKKyAgICByZXR1cm4g
Q0NUaHJlYWRUYXNrNDxULCBQMSwgTVAxLCBQMiwgTVAyLCBQMywgTVAzLCBQNCwgTVA0Pjo6Y3Jl
YXRlKAogICAgICAgICBjYWxsZWUsCiAgICAgICAgIG1ldGhvZCwKLSAgICAgICAgQ3Jvc3NUaHJl
YWRDb3BpZXI8UDE+Ojpjb3B5KHBhcmFtZXRlcjEpLAotICAgICAgICBDcm9zc1RocmVhZENvcGll
cjxQMj46OmNvcHkocGFyYW1ldGVyMiksCi0gICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6
Y29weShwYXJhbWV0ZXIzKSwKLSAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDQ+Ojpjb3B5KHBh
cmFtZXRlcjQpKTsKKyAgICAgICAgcGFyYW1ldGVyMSwKKyAgICAgICAgcGFyYW1ldGVyMiwKKyAg
ICAgICAgcGFyYW1ldGVyMywKKyAgICAgICAgcGFyYW1ldGVyNCk7CiAKIH0KIApAQCAtMzI2LDE0
ICszMDksMTQgQEAgUGFzc093blB0cjxDQ1RocmVhZDo6VGFzaz4gY3JlYXRlQ0NUaHJlYWRUYXNr
KAogICAgIGNvbnN0IFA0JiBwYXJhbWV0ZXI0LAogICAgIGNvbnN0IFA1JiBwYXJhbWV0ZXI1KQog
ewotICAgIHJldHVybiBDQ1RocmVhZFRhc2s1PFQsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVy
PFAxPjo6VHlwZSwgTVAxLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMj46OlR5cGUsIE1Q
MiwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+OjpUeXBlLCBNUDMsIHR5cGVuYW1lIENy
b3NzVGhyZWFkQ29waWVyPFA0Pjo6VHlwZSwgTVA0LCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGll
cjxQNT46OlR5cGUsIE1QNT46OmNyZWF0ZSgKKyAgICByZXR1cm4gQ0NUaHJlYWRUYXNrNTxULCBQ
MSwgTVAxLCBQMiwgTVAyLCBQMywgTVAzLCBQNCwgTVA0LCBQNSwgTVA1Pjo6Y3JlYXRlKAogICAg
ICAgICBjYWxsZWUsCiAgICAgICAgIG1ldGhvZCwKLSAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8
UDE+Ojpjb3B5KHBhcmFtZXRlcjEpLAotICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMj46OmNv
cHkocGFyYW1ldGVyMiksCi0gICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6Y29weShwYXJh
bWV0ZXIzKSwKLSAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDQ+Ojpjb3B5KHBhcmFtZXRlcjQp
LAotICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQNT46OmNvcHkocGFyYW1ldGVyNSkpOworICAg
ICAgICBwYXJhbWV0ZXIxLAorICAgICAgICBwYXJhbWV0ZXIyLAorICAgICAgICBwYXJhbWV0ZXIz
LAorICAgICAgICBwYXJhbWV0ZXI0LAorICAgICAgICBwYXJhbWV0ZXI1KTsKIAogfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>