<?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>115447</bug_id>
          
          <creation_ts>2013-04-30 14:37:23 -0700</creation_ts>
          <short_desc>Objective-C JavaScriptCore API should publicly support bridging to C</short_desc>
          <delta_ts>2013-05-14 13:46:07 -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="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>mhahnenberg</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>883231</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-04-30 14:37:23 -0700</bug_when>
    <thetext>Objective-C JavaScriptCore API should publicly support bridging to C</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>883232</commentid>
    <comment_count>1</comment_count>
      <attachid>200150</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-04-30 14:43:16 -0700</bug_when>
    <thetext>Created attachment 200150
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>883234</commentid>
    <comment_count>2</comment_count>
      <attachid>200150</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-04-30 14:49:56 -0700</bug_when>
    <thetext>Comment on attachment 200150
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>883236</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-04-30 14:54:41 -0700</bug_when>
    <thetext>Committed r149401: &lt;http://trac.webkit.org/changeset/149401&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>883363</commentid>
    <comment_count>4</comment_count>
      <attachid>200150</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2013-04-30 18:48:19 -0700</bug_when>
    <thetext>Comment on attachment 200150
patch

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

&gt; Source/JavaScriptCore/API/JSContext.h:124
&gt; +// Creates a JSContext, wrapping its C API counterpart.
&gt; ++ (JSContext *)contextWithJSGlobalContextRef:(JSGlobalContextRef)jsGlobalContextRef;
&gt; +// Returns the C API counterpart wrapped by a JSContext.
&gt; +- (JSGlobalContextRef)JSGlobalContextRef;

I&apos;m not sure I like these method names. globalContextRef and contextWithGlobalContextRef: are more ObjC-like.

&gt; Source/JavaScriptCore/API/JSContext.mm:52
&gt; -- (JSGlobalContextRef)globalContextRef
&gt; +- (JSGlobalContextRef)JSGlobalContextRef

Keep it like you had before!

&gt; Source/JavaScriptCore/API/JSContext.mm:100
&gt; -    return [JSValue valueWithValue:result inContext:self];
&gt; +    return [JSValue valueWithJSValueRef:result inContext:self];

No…!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>883375</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-04-30 19:44:03 -0700</bug_when>
    <thetext>Here are the four functions we&apos;re considering in context:

@interface JSValue(JSValueRefSupport)
+ (JSValue *)valueWithJSValueRef:(JSValueRef)value inContext:(JSContext *)context;
- (JSValueRef)JSValueRef;
@end

@interface JSContext(JSContextRefSupport)
+ (JSContext *)contextWithJSGlobalContextRef:(JSGlobalContextRef)jsGlobalContextRef;
- (JSGlobalContextRef)JSGlobalContextRef;
@end

If we switched away from type names for functions, what would we name the up-conversion and down-conversion functions in JSValue?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>888956</commentid>
    <comment_count>6</comment_count>
      <attachid>200150</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-05-14 11:39:48 -0700</bug_when>
    <thetext>Comment on attachment 200150
patch

Clearing flags.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>889022</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-05-14 13:46:07 -0700</bug_when>
    <thetext>We discussed this in IRC and decided to keep the names as-is, since bare words &quot;value&quot; and &quot;context&quot; alone would probably be too terse, to the point of conflicting with things like NSValue and CGContext.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>200150</attachid>
            <date>2013-04-30 14:43:16 -0700</date>
            <delta_ts>2013-05-14 11:39:48 -0700</delta_ts>
            <desc>patch</desc>
            <filename>ro.txt</filename>
            <type>text/plain</type>
            <size>51783</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ5Mzk4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBA
CisyMDEzLTA0LTMwICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgT2JqZWN0aXZlLUMgSmF2YVNjcmlwdENvcmUgQVBJIHNob3VsZCBwdWJsaWNseSBzdXBwb3J0
IGJyaWRnaW5nIHRvIEMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTExNTQ0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEZvciBjb25zaXN0ZW5jeSwgSSByZW5hbWVkCisKKyAgICAgICAgICAgICtbSlNWYWx1
ZSB2YWx1ZVdpdGhWYWx1ZTpdID0+ICtbSlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmXQorICAg
ICAgICAgICAgK1tKU0NvbnRleHQgY29udGV4dFdpdGhHbG9iYWxDb250ZXh0UmVmXSA9PiArW0pT
Q29udGV4dCBjb250ZXh0V2l0aEpTR2xvYmFsQ29udGV4dFJlZl0KKyAgICAgICAgICAgIC1bSlND
b250ZXh0IGdsb2JhbENvbnRleHRdID0+IC1bSlNDb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0K
KworICAgICAgICBJIHNlYXJjaGVkIHN2biB0byB2ZXJpZnkgdGhhdCB0aGVzZSBmdW5jdGlvbnMg
ZG9uJ3QgaGF2ZSBjbGllbnRzIHlldCwKKyAgICAgICAgc28gd2Ugd29uJ3QgYnJlYWsgYW55dGhp
bmcuCisKKyAgICAgICAgSSBhbHNvIGV4cG9ydGVkIGFzIHB1YmxpYyBBUEkKKworICAgICAgICAg
ICAgK1tKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6XQorICAgICAgICAgICAgK1tKU0NvbnRl
eHQgY29udGV4dFdpdGhKU0dsb2JhbENvbnRleHRSZWY6XQorCisgICAgICAgIEl0J3MgaGFyZCB0
byBpbnRlZ3JhdGUgd2l0aCB0aGUgQyBBUEkgd2l0aG91dCB0aGVzZS4KKwogMjAxMy0wNC0zMCAg
Q29tbWl0IFF1ZXVlICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCBy
b2xsaW5nIG91dCByMTQ5MzQ5IGFuZCByMTQ5MzU0LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQ29udGV4dC5oCShyZXZpc2lvbiAxNDkzMjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MiwxMCArNTIsNiBAQCBOU19D
TEFTU19BVkFJTEFCTEUoMTBfOSwgTkEpCiAvLyBFdmFsdWF0ZSBhIHN0cmluZyBvZiBKYXZhU2Ny
aXB0IGNvZGUuCiAtIChKU1ZhbHVlICopZXZhbHVhdGVTY3JpcHQ6KE5TU3RyaW5nICopc2NyaXB0
OwogCi0vLyBSZXR1cm4gdGhlIEMgQVBJIHZlcnNpb24gb2YgdGhpcyBjb250ZXh0LiBUaGlzIGZ1
bmN0aW9uIGlzIGZvciBjb252ZW5pZW5jZQotLy8gYXQgdGhlIGJvdW5kYXJpZXMgd2hlbiBjb252
ZXJ0aW5nIGNvZGUgZnJvbSB0aGUgQyBBUEkgdG8gdGhlIE9iamVjdGl2ZS1DIEFQSS4KLS0gKEpT
R2xvYmFsQ29udGV4dFJlZilnbG9iYWxDb250ZXh0UmVmOwotCiAvLyBUaGlzIG1ldGhvZCByZXRy
aWV2ZXMgdGhlIGdsb2JhbCBvYmplY3Qgb2YgdGhlIEphdmFTY3JpcHQgZXhlY3V0aW9uIGNvbnRl
eHQuCiAvLyBJbnN0YW5jZXMgb2YgSlNDb250ZXh0IG9yaWdpbmF0aW5nIGZyb20gV2ViS2l0IHdp
bGwgcmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoZQogLy8gV2luZG93UHJveHkgb2JqZWN0LgpAQCAt
MTIwLDYgKzExNiwxNCBAQCBOU19DTEFTU19BVkFJTEFCTEUoMTBfOSwgTkEpCiAKIEBlbmQKIAor
Ly8gVGhlc2UgZnVuY3Rpb25zIGFyZSBmb3IgYnJpZGdpbmcgYmV0d2VlbiB0aGUgQyBBUEkgYW5k
IHRoZSBPYmplY3RpdmUtQyBBUEkuCitAaW50ZXJmYWNlIEpTQ29udGV4dChKU0NvbnRleHRSZWZT
dXBwb3J0KQorLy8gQ3JlYXRlcyBhIEpTQ29udGV4dCwgd3JhcHBpbmcgaXRzIEMgQVBJIGNvdW50
ZXJwYXJ0LgorKyAoSlNDb250ZXh0ICopY29udGV4dFdpdGhKU0dsb2JhbENvbnRleHRSZWY6KEpT
R2xvYmFsQ29udGV4dFJlZilqc0dsb2JhbENvbnRleHRSZWY7CisvLyBSZXR1cm5zIHRoZSBDIEFQ
SSBjb3VudGVycGFydCB3cmFwcGVkIGJ5IGEgSlNDb250ZXh0LgorLSAoSlNHbG9iYWxDb250ZXh0
UmVmKUpTR2xvYmFsQ29udGV4dFJlZjsKK0BlbmQKKwogI2VuZGlmCiAKICNlbmRpZiAvLyBKU0Nv
bnRleHRfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0JKHJldmlz
aW9uIDE0OTMyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCSh3
b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBACiAKIEBzeW50aGVzaXplIGV4Y2VwdGlvbkhh
bmRsZXI7CiAKLS0gKEpTR2xvYmFsQ29udGV4dFJlZilnbG9iYWxDb250ZXh0UmVmCistIChKU0ds
b2JhbENvbnRleHRSZWYpSlNHbG9iYWxDb250ZXh0UmVmCiB7CiAgICAgcmV0dXJuIG1fY29udGV4
dDsKIH0KQEAgLTk3LDcgKzk3LDcgQEAgLSAoSlNWYWx1ZSAqKWV2YWx1YXRlU2NyaXB0OihOU1N0
cmluZyAqKQogICAgIGlmIChleGNlcHRpb25WYWx1ZSkKICAgICAgICAgcmV0dXJuIFtzZWxmIHZh
bHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25WYWx1ZV07CiAKLSAgICByZXR1cm4gW0pT
VmFsdWUgdmFsdWVXaXRoVmFsdWU6cmVzdWx0IGluQ29udGV4dDpzZWxmXTsKKyAgICByZXR1cm4g
W0pTVmFsdWUgdmFsdWVXaXRoSlNWYWx1ZVJlZjpyZXN1bHQgaW5Db250ZXh0OnNlbGZdOwogfQog
CiAtICh2b2lkKXNldEV4Y2VwdGlvbjooSlNWYWx1ZSAqKXZhbHVlCkBAIC0xMTIsNyArMTEyLDcg
QEAgLSAoSlNWYWx1ZSAqKWV4Y2VwdGlvbgogewogICAgIGlmICghbV9leGNlcHRpb24pCiAgICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOnRvUmVm
KG1fZXhjZXB0aW9uLmdldCgpKSBpbkNvbnRleHQ6c2VsZl07CisgICAgcmV0dXJuIFtKU1ZhbHVl
IHZhbHVlV2l0aEpTVmFsdWVSZWY6dG9SZWYobV9leGNlcHRpb24uZ2V0KCkpIGluQ29udGV4dDpz
ZWxmXTsKIH0KIAogLSAoSlNXcmFwcGVyTWFwICopd3JhcHBlck1hcApAQCAtMTIyLDcgKzEyMiw3
IEBAIC0gKEpTV3JhcHBlck1hcCAqKXdyYXBwZXJNYXAKIAogLSAoSlNWYWx1ZSAqKWdsb2JhbE9i
amVjdAogewotICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpKU0NvbnRleHRHZXRH
bG9iYWxPYmplY3QobV9jb250ZXh0KSBpbkNvbnRleHQ6c2VsZl07CisgICAgcmV0dXJuIFtKU1Zh
bHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6SlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KG1fY29udGV4
dCkgaW5Db250ZXh0OnNlbGZdOwogfQogCiArIChKU0NvbnRleHQgKiljdXJyZW50Q29udGV4dApA
QCAtMTUzLDcgKzE1Myw3IEBAICsgKE5TQXJyYXkgKiljdXJyZW50QXJndW1lbnRzCiAgICAgICAg
IHNpemVfdCBjb3VudCA9IGVudHJ5LT5hcmd1bWVudENvdW50OwogICAgICAgICBKU1ZhbHVlICog
YXJndW1lbnRBcnJheVtjb3VudF07CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPTA7IGkgPCBjb3Vu
dDsgKytpKQotICAgICAgICAgICAgYXJndW1lbnRBcnJheVtpXSA9IFtKU1ZhbHVlIHZhbHVlV2l0
aFZhbHVlOmVudHJ5LT5hcmd1bWVudHNbaV0gaW5Db250ZXh0OmNvbnRleHRdOworICAgICAgICAg
ICAgYXJndW1lbnRBcnJheVtpXSA9IFtKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6ZW50cnkt
PmFyZ3VtZW50c1tpXSBpbkNvbnRleHQ6Y29udGV4dF07CiAgICAgICAgIGVudHJ5LT5jdXJyZW50
QXJndW1lbnRzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6YXJndW1lbnRBcnJh
eSBjb3VudDpjb3VudF07CiAgICAgfQogCkBAIC0yMDYsNyArMjA2LDcgQEAgLSAoaWQpaW5pdFdp
dGhHbG9iYWxDb250ZXh0UmVmOihKU0dsb2JhbAogCiAtICh2b2lkKW5vdGlmeUV4Y2VwdGlvbjoo
SlNWYWx1ZVJlZilleGNlcHRpb25WYWx1ZQogewotICAgIHNlbGYuZXhjZXB0aW9uSGFuZGxlcihz
ZWxmLCBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpleGNlcHRpb25WYWx1ZSBpbkNvbnRleHQ6c2Vs
Zl0pOworICAgIHNlbGYuZXhjZXB0aW9uSGFuZGxlcihzZWxmLCBbSlNWYWx1ZSB2YWx1ZVdpdGhK
U1ZhbHVlUmVmOmV4Y2VwdGlvblZhbHVlIGluQ29udGV4dDpzZWxmXSk7CiB9CiAKIC0gKEpTVmFs
dWUgKil2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246KEpTVmFsdWVSZWYpZXhjZXB0aW9uVmFsdWUK
QEAgLTI1NSw3ICsyNTUsNyBAQCAtIChKU1ZhbHVlICopd3JhcHBlckZvckpTT2JqZWN0OihKU1Zh
bHVlCiAgICAgcmV0dXJuIFttX3dyYXBwZXJNYXAgb2JqY1dyYXBwZXJGb3JKU1ZhbHVlUmVmOnZh
bHVlXTsKIH0KIAotKyAoSlNDb250ZXh0ICopY29udGV4dFdpdGhHbG9iYWxDb250ZXh0UmVmOihK
U0dsb2JhbENvbnRleHRSZWYpZ2xvYmFsQ29udGV4dAorKyAoSlNDb250ZXh0ICopY29udGV4dFdp
dGhKU0dsb2JhbENvbnRleHRSZWY6KEpTR2xvYmFsQ29udGV4dFJlZilnbG9iYWxDb250ZXh0CiB7
CiAgICAgSlNWaXJ0dWFsTWFjaGluZSAqdmlydHVhbE1hY2hpbmUgPSBbSlNWaXJ0dWFsTWFjaGlu
ZSB2aXJ0dWFsTWFjaGluZVdpdGhDb250ZXh0R3JvdXBSZWY6dG9SZWYoJnRvSlMoZ2xvYmFsQ29u
dGV4dCktPnZtKCkpXTsKICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbdmlydHVhbE1hY2hpbmUg
Y29udGV4dEZvckdsb2JhbENvbnRleHRSZWY6Z2xvYmFsQ29udGV4dF07CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dEludGVybmFsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRJbnRlcm5hbC5oCShyZXZpc2lvbiAxNDkz
MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dEludGVybmFsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTcxLDggKzcxLDYgQEAgcHJpdmF0ZToKIC0gKEpTVmFsdWUgKil3cmFw
cGVyRm9yT2JqQ09iamVjdDooaWQpb2JqZWN0OwogLSAoSlNWYWx1ZSAqKXdyYXBwZXJGb3JKU09i
amVjdDooSlNWYWx1ZVJlZil2YWx1ZTsKIAotKyAoSlNDb250ZXh0ICopY29udGV4dFdpdGhHbG9i
YWxDb250ZXh0UmVmOihKU0dsb2JhbENvbnRleHRSZWYpZ2xvYmFsQ29udGV4dDsKLQogQHByb3Bl
cnR5IChyZWFkb25seSwgcmV0YWluKSBKU1dyYXBwZXJNYXAgKndyYXBwZXJNYXA7CiAKIEBlbmQK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkVmFsdWUubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRWYWx1ZS5tbQkocmV2
aXNpb24gMTQ5MzIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRWYWx1
ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCAtIChpZClpbml0V2l0aFZhbHVl
OihKU1ZhbHVlICopdmFsdWUKICAgICBpZiAoIXNlbGYpCiAgICAgICAgIHJldHVybiBuaWw7CiAg
ICAgCi0gICAgaWYgKCF2YWx1ZSB8fCAhSlNWYWx1ZUlzT2JqZWN0KFt2YWx1ZS5jb250ZXh0IGds
b2JhbENvbnRleHRSZWZdLCBbdmFsdWUgSlNWYWx1ZVJlZl0pKSB7CisgICAgaWYgKCF2YWx1ZSB8
fCAhSlNWYWx1ZUlzT2JqZWN0KFt2YWx1ZS5jb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0sIFt2
YWx1ZSBKU1ZhbHVlUmVmXSkpIHsKICAgICAgICAgSlNDOjpXZWFrPEpTQzo6SlNPYmplY3Q+IHdl
YWs7CiAgICAgICAgIG1fdmFsdWUuc3dhcCh3ZWFrKTsKICAgICB9IGVsc2UgewpAQCAtODYsOCAr
ODYsOCBAQCAtIChKU1ZhbHVlICopdmFsdWUKICAgICBpZiAoIW1fdmFsdWUpCiAgICAgICAgIHJl
dHVybiBuaWw7CiAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gbV92YWx1ZS5nZXQoKTsKLSAg
ICBKU0NvbnRleHQgKmNvbnRleHQgPSBbSlNDb250ZXh0IGNvbnRleHRXaXRoR2xvYmFsQ29udGV4
dFJlZjp0b0dsb2JhbFJlZihvYmplY3QtPnN0cnVjdHVyZSgpLT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpKV07Ci0gICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOnRvUmVmKG9i
amVjdCkgaW5Db250ZXh0OmNvbnRleHRdOworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtKU0Nv
bnRleHQgY29udGV4dFdpdGhKU0dsb2JhbENvbnRleHRSZWY6dG9HbG9iYWxSZWYob2JqZWN0LT5z
dHJ1Y3R1cmUoKS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSldOworICAgIHJldHVybiBb
SlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOnRvUmVmKG9iamVjdCkgaW5Db250ZXh0OmNvbnRl
eHRdOwogfQogCiBAZW5kCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWUuaAkocmV2
aXNpb24gMTQ5MzIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwNSwxMCArMTA1LDYgQEAgTlNfQ0xBU1NfQVZBSUxBQkxFKDEwXzks
IE5BKQogKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aE51bGxJbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNv
bnRleHQ7CiArIChKU1ZhbHVlICopdmFsdWVXaXRoVW5kZWZpbmVkSW5Db250ZXh0OihKU0NvbnRl
eHQgKiljb250ZXh0OwogCi0vLyBSZXR1cm4gdGhlIEMgQVBJIHZlcnNpb24gb2YgdGhpcyB2YWx1
ZS4gVGhpcyBmdW5jdGlvbiBpcyBmb3IgY29udmVuaWVuY2UKLS8vIGF0IHRoZSBib3VuZGFyaWVz
IHdoZW4gY29udmVydGluZyBjb2RlIGZyb20gdGhlIEMgQVBJIHRvIHRoZSBPYmplY3RpdmUtQyBB
UEkuCi0tIChKU1ZhbHVlUmVmKUpTVmFsdWVSZWY7Ci0KIC8vIENvbnZlcnQgdGhpcyB2YWx1ZSB0
byBhIGNvcnJlc3BvbmRpbmcgT2JqZWN0aXZlLUMgb2JqZWN0LCBhY2NvcmRpbmcgdG8gdGhlCiAv
LyBjb252ZXJzaW9uIHNwZWNpZmllZCBhYm92ZS4KIC0gKGlkKXRvT2JqZWN0OwpAQCAtMjU5LDYg
KzI1NSwxNCBAQCBOU19DTEFTU19BVkFJTEFCTEUoMTBfOSwgTkEpCiAKIEBlbmQKIAorLy8gVGhl
c2UgZnVuY3Rpb25zIGFyZSBmb3IgYnJpZGdpbmcgYmV0d2VlbiB0aGUgQyBBUEkgYW5kIHRoZSBP
YmplY3RpdmUtQyBBUEkuCitAaW50ZXJmYWNlIEpTVmFsdWUoSlNWYWx1ZVJlZlN1cHBvcnQpCisv
LyBDcmVhdGVzIGEgSlNWYWx1ZSwgd3JhcHBpbmcgaXRzIEMgQVBJIGNvdW50ZXJwYXJ0LgorKyAo
SlNWYWx1ZSAqKXZhbHVlV2l0aEpTVmFsdWVSZWY6KEpTVmFsdWVSZWYpdmFsdWUgaW5Db250ZXh0
OihKU0NvbnRleHQgKiljb250ZXh0OworLy8gUmV0dXJucyB0aGUgQyBBUEkgY291bnRlcnBhcnQg
d3JhcHBlZCBieSBhIEpTQ29udGV4dC4KKy0gKEpTVmFsdWVSZWYpSlNWYWx1ZVJlZjsKK0BlbmQK
KwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKICNlbmRpZgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNWYWx1ZS5tbQkocmV2aXNpb24gMTQ5MzIyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2NyArNjQs
NjcgQEAgLSAoSlNWYWx1ZVJlZilKU1ZhbHVlUmVmCiAKICsgKEpTVmFsdWUgKil2YWx1ZVdpdGhP
YmplY3Q6KGlkKXZhbHVlIGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAogewotICAgIHJl
dHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpvYmplY3RUb1ZhbHVlKGNvbnRleHQsIHZhbHVl
KSBpbkNvbnRleHQ6Y29udGV4dF07CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aEpTVmFs
dWVSZWY6b2JqZWN0VG9WYWx1ZShjb250ZXh0LCB2YWx1ZSkgaW5Db250ZXh0OmNvbnRleHRdOwog
fQogCiArIChKU1ZhbHVlICopdmFsdWVXaXRoQm9vbDooQk9PTCl2YWx1ZSBpbkNvbnRleHQ6KEpT
Q29udGV4dCAqKWNvbnRleHQKIHsKLSAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6
SlNWYWx1ZU1ha2VCb29sZWFuKFtjb250ZXh0IGdsb2JhbENvbnRleHRSZWZdLCB2YWx1ZSkgaW5D
b250ZXh0OmNvbnRleHRdOworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVm
OkpTVmFsdWVNYWtlQm9vbGVhbihbY29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdLCB2YWx1ZSkg
aW5Db250ZXh0OmNvbnRleHRdOwogfQogCiArIChKU1ZhbHVlICopdmFsdWVXaXRoRG91YmxlOihk
b3VibGUpdmFsdWUgaW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0CiB7Ci0gICAgcmV0dXJu
IFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOkpTVmFsdWVNYWtlTnVtYmVyKFtjb250ZXh0IGdsb2Jh
bENvbnRleHRSZWZdLCB2YWx1ZSkgaW5Db250ZXh0OmNvbnRleHRdOworICAgIHJldHVybiBbSlNW
YWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOkpTVmFsdWVNYWtlTnVtYmVyKFtjb250ZXh0IEpTR2xv
YmFsQ29udGV4dFJlZl0sIHZhbHVlKSBpbkNvbnRleHQ6Y29udGV4dF07CiB9CiAKICsgKEpTVmFs
dWUgKil2YWx1ZVdpdGhJbnQzMjooaW50MzJfdCl2YWx1ZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAq
KWNvbnRleHQKIHsKLSAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6SlNWYWx1ZU1h
a2VOdW1iZXIoW2NvbnRleHQgZ2xvYmFsQ29udGV4dFJlZl0sIHZhbHVlKSBpbkNvbnRleHQ6Y29u
dGV4dF07CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6SlNWYWx1ZU1h
a2VOdW1iZXIoW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSwgdmFsdWUpIGluQ29udGV4dDpj
b250ZXh0XTsKIH0KIAogKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFVJbnQzMjoodWludDMyX3QpdmFs
dWUgaW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0CiB7Ci0gICAgcmV0dXJuIFtKU1ZhbHVl
IHZhbHVlV2l0aFZhbHVlOkpTVmFsdWVNYWtlTnVtYmVyKFtjb250ZXh0IGdsb2JhbENvbnRleHRS
ZWZdLCB2YWx1ZSkgaW5Db250ZXh0OmNvbnRleHRdOworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1
ZVdpdGhKU1ZhbHVlUmVmOkpTVmFsdWVNYWtlTnVtYmVyKFtjb250ZXh0IEpTR2xvYmFsQ29udGV4
dFJlZl0sIHZhbHVlKSBpbkNvbnRleHQ6Y29udGV4dF07CiB9CiAKICsgKEpTVmFsdWUgKil2YWx1
ZVdpdGhOZXdPYmplY3RJbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQKIHsKLSAgICByZXR1
cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6SlNPYmplY3RNYWtlKFtjb250ZXh0IGdsb2JhbENv
bnRleHRSZWZdLCAwLCAwKSBpbkNvbnRleHQ6Y29udGV4dF07CisgICAgcmV0dXJuIFtKU1ZhbHVl
IHZhbHVlV2l0aEpTVmFsdWVSZWY6SlNPYmplY3RNYWtlKFtjb250ZXh0IEpTR2xvYmFsQ29udGV4
dFJlZl0sIDAsIDApIGluQ29udGV4dDpjb250ZXh0XTsKIH0KIAogKyAoSlNWYWx1ZSAqKXZhbHVl
V2l0aE5ld0FycmF5SW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0CiB7Ci0gICAgcmV0dXJu
IFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOkpTT2JqZWN0TWFrZUFycmF5KFtjb250ZXh0IGdsb2Jh
bENvbnRleHRSZWZdLCAwLCBOVUxMLCAwKSBpbkNvbnRleHQ6Y29udGV4dF07CisgICAgcmV0dXJu
IFtKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6SlNPYmplY3RNYWtlQXJyYXkoW2NvbnRleHQg
SlNHbG9iYWxDb250ZXh0UmVmXSwgMCwgTlVMTCwgMCkgaW5Db250ZXh0OmNvbnRleHRdOwogfQog
CiArIChKU1ZhbHVlICopdmFsdWVXaXRoTmV3UmVndWxhckV4cHJlc3Npb25Gcm9tUGF0dGVybjoo
TlNTdHJpbmcgKilwYXR0ZXJuIGZsYWdzOihOU1N0cmluZyAqKWZsYWdzIGluQ29udGV4dDooSlND
b250ZXh0ICopY29udGV4dAogewogICAgIEpTU3RyaW5nUmVmIHBhdHRlcm5TdHJpbmcgPSBKU1N0
cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpcGF0dGVybik7CiAgICAgSlNTdHJp
bmdSZWYgZmxhZ3NTdHJpbmcgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdS
ZWYpZmxhZ3MpOwotICAgIEpTVmFsdWVSZWYgYXJndW1lbnRzWzJdID0geyBKU1ZhbHVlTWFrZVN0
cmluZyhbY29udGV4dCBnbG9iYWxDb250ZXh0UmVmXSwgcGF0dGVyblN0cmluZyksIEpTVmFsdWVN
YWtlU3RyaW5nKFtjb250ZXh0IGdsb2JhbENvbnRleHRSZWZdLCBmbGFnc1N0cmluZykgfTsKKyAg
ICBKU1ZhbHVlUmVmIGFyZ3VtZW50c1syXSA9IHsgSlNWYWx1ZU1ha2VTdHJpbmcoW2NvbnRleHQg
SlNHbG9iYWxDb250ZXh0UmVmXSwgcGF0dGVyblN0cmluZyksIEpTVmFsdWVNYWtlU3RyaW5nKFtj
b250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0sIGZsYWdzU3RyaW5nKSB9OwogICAgIEpTU3RyaW5n
UmVsZWFzZShwYXR0ZXJuU3RyaW5nKTsKICAgICBKU1N0cmluZ1JlbGVhc2UoZmxhZ3NTdHJpbmcp
OwogCi0gICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOkpTT2JqZWN0TWFrZVJlZ0V4
cChbY29udGV4dCBnbG9iYWxDb250ZXh0UmVmXSwgMiwgYXJndW1lbnRzLCAwKSBpbkNvbnRleHQ6
Y29udGV4dF07CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6SlNPYmpl
Y3RNYWtlUmVnRXhwKFtjb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0sIDIsIGFyZ3VtZW50cywg
MCkgaW5Db250ZXh0OmNvbnRleHRdOwogfQogCiArIChKU1ZhbHVlICopdmFsdWVXaXRoTmV3RXJy
b3JGcm9tTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGluQ29udGV4dDooSlNDb250ZXh0ICop
Y29udGV4dAogewogICAgIEpTU3RyaW5nUmVmIHN0cmluZyA9IEpTU3RyaW5nQ3JlYXRlV2l0aENG
U3RyaW5nKChDRlN0cmluZ1JlZiltZXNzYWdlKTsKLSAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50ID0g
SlNWYWx1ZU1ha2VTdHJpbmcoW2NvbnRleHQgZ2xvYmFsQ29udGV4dFJlZl0sIHN0cmluZyk7Cisg
ICAgSlNWYWx1ZVJlZiBhcmd1bWVudCA9IEpTVmFsdWVNYWtlU3RyaW5nKFtjb250ZXh0IEpTR2xv
YmFsQ29udGV4dFJlZl0sIHN0cmluZyk7CiAgICAgSlNTdHJpbmdSZWxlYXNlKHN0cmluZyk7CiAK
LSAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6SlNPYmplY3RNYWtlRXJyb3IoW2Nv
bnRleHQgZ2xvYmFsQ29udGV4dFJlZl0sIDEsICZhcmd1bWVudCwgMCkgaW5Db250ZXh0OmNvbnRl
eHRdOworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOkpTT2JqZWN0TWFr
ZUVycm9yKFtjb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0sIDEsICZhcmd1bWVudCwgMCkgaW5D
b250ZXh0OmNvbnRleHRdOwogfQogCiArIChKU1ZhbHVlICopdmFsdWVXaXRoTnVsbEluQ29udGV4
dDooSlNDb250ZXh0ICopY29udGV4dAogewotICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhW
YWx1ZTpKU1ZhbHVlTWFrZU51bGwoW2NvbnRleHQgZ2xvYmFsQ29udGV4dFJlZl0pIGluQ29udGV4
dDpjb250ZXh0XTsKKyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoSlNWYWx1ZVJlZjpKU1Zh
bHVlTWFrZU51bGwoW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSkgaW5Db250ZXh0OmNvbnRl
eHRdOwogfQogCiArIChKU1ZhbHVlICopdmFsdWVXaXRoVW5kZWZpbmVkSW5Db250ZXh0OihKU0Nv
bnRleHQgKiljb250ZXh0CiB7Ci0gICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOkpT
VmFsdWVNYWtlVW5kZWZpbmVkKFtjb250ZXh0IGdsb2JhbENvbnRleHRSZWZdKSBpbkNvbnRleHQ6
Y29udGV4dF07CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6SlNWYWx1
ZU1ha2VVbmRlZmluZWQoW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSkgaW5Db250ZXh0OmNv
bnRleHRdOwogfQogCiAtIChpZCl0b09iamVjdApAQCAtMTQwLDEzICsxNDAsMTMgQEAgLSAoaWQp
dG9PYmplY3RPZkNsYXNzOihDbGFzcylleHBlY3RlZENsYQogCiAtIChCT09MKXRvQm9vbAogewot
ICAgIHJldHVybiBKU1ZhbHVlVG9Cb29sZWFuKFtfY29udGV4dCBnbG9iYWxDb250ZXh0UmVmXSwg
bV92YWx1ZSk7CisgICAgcmV0dXJuIEpTVmFsdWVUb0Jvb2xlYW4oW19jb250ZXh0IEpTR2xvYmFs
Q29udGV4dFJlZl0sIG1fdmFsdWUpOwogfQogCiAtIChkb3VibGUpdG9Eb3VibGUKIHsKICAgICBK
U1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7Ci0gICAgZG91YmxlIHJlc3VsdCA9IEpTVmFsdWVUb051
bWJlcihbX2NvbnRleHQgZ2xvYmFsQ29udGV4dFJlZl0sIG1fdmFsdWUsICZleGNlcHRpb24pOwor
ICAgIGRvdWJsZSByZXN1bHQgPSBKU1ZhbHVlVG9OdW1iZXIoW19jb250ZXh0IEpTR2xvYmFsQ29u
dGV4dFJlZl0sIG1fdmFsdWUsICZleGNlcHRpb24pOwogICAgIGlmIChleGNlcHRpb24pIHsKICAg
ICAgICAgW19jb250ZXh0IG5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOwogICAgICAgICByZXR1
cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKQEAgLTE2OCw3ICsx
NjgsNyBAQCAtICh1aW50MzJfdCl0b1VJbnQzMgogLSAoTlNOdW1iZXIgKil0b051bWJlcgogewog
ICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKLSAgICBpZCByZXN1bHQgPSB2YWx1ZVRvTnVt
YmVyKFtfY29udGV4dCBnbG9iYWxDb250ZXh0UmVmXSwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7Cisg
ICAgaWQgcmVzdWx0ID0gdmFsdWVUb051bWJlcihbX2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVm
XSwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7CiAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgW19j
b250ZXh0IG5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOwogICAgIHJldHVybiByZXN1bHQ7CkBA
IC0xNzcsNyArMTc3LDcgQEAgLSAoTlNOdW1iZXIgKil0b051bWJlcgogLSAoTlNTdHJpbmcgKil0
b1N0cmluZwogewogICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKLSAgICBpZCByZXN1bHQg
PSB2YWx1ZVRvU3RyaW5nKFtfY29udGV4dCBnbG9iYWxDb250ZXh0UmVmXSwgbV92YWx1ZSwgJmV4
Y2VwdGlvbik7CisgICAgaWQgcmVzdWx0ID0gdmFsdWVUb1N0cmluZyhbX2NvbnRleHQgSlNHbG9i
YWxDb250ZXh0UmVmXSwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7CiAgICAgaWYgKGV4Y2VwdGlvbikK
ICAgICAgICAgW19jb250ZXh0IG5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOwogICAgIHJldHVy
biByZXN1bHQ7CkBAIC0xODYsNyArMTg2LDcgQEAgLSAoTlNTdHJpbmcgKil0b1N0cmluZwogLSAo
TlNEYXRlICopdG9EYXRlCiB7CiAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwotICAgIGlk
IHJlc3VsdCA9IHZhbHVlVG9EYXRlKFtfY29udGV4dCBnbG9iYWxDb250ZXh0UmVmXSwgbV92YWx1
ZSwgJmV4Y2VwdGlvbik7CisgICAgaWQgcmVzdWx0ID0gdmFsdWVUb0RhdGUoW19jb250ZXh0IEpT
R2xvYmFsQ29udGV4dFJlZl0sIG1fdmFsdWUsICZleGNlcHRpb24pOwogICAgIGlmIChleGNlcHRp
b24pCiAgICAgICAgIFtfY29udGV4dCBub3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKICAgICBy
ZXR1cm4gcmVzdWx0OwpAQCAtMTk1LDcgKzE5NSw3IEBAIC0gKE5TRGF0ZSAqKXRvRGF0ZQogLSAo
TlNBcnJheSAqKXRvQXJyYXkKIHsKICAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7Ci0gICAg
aWQgcmVzdWx0ID0gdmFsdWVUb0FycmF5KFtfY29udGV4dCBnbG9iYWxDb250ZXh0UmVmXSwgbV92
YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWQgcmVzdWx0ID0gdmFsdWVUb0FycmF5KFtfY29udGV4
dCBKU0dsb2JhbENvbnRleHRSZWZdLCBtX3ZhbHVlLCAmZXhjZXB0aW9uKTsKICAgICBpZiAoZXhj
ZXB0aW9uKQogICAgICAgICBbX2NvbnRleHQgbm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CiAg
ICAgcmV0dXJuIHJlc3VsdDsKQEAgLTIwNCw3ICsyMDQsNyBAQCAtIChOU0FycmF5ICopdG9BcnJh
eQogLSAoTlNEaWN0aW9uYXJ5ICopdG9EaWN0aW9uYXJ5CiB7CiAgICAgSlNWYWx1ZVJlZiBleGNl
cHRpb24gPSAwOwotICAgIGlkIHJlc3VsdCA9IHZhbHVlVG9EaWN0aW9uYXJ5KFtfY29udGV4dCBn
bG9iYWxDb250ZXh0UmVmXSwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWQgcmVzdWx0ID0g
dmFsdWVUb0RpY3Rpb25hcnkoW19jb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0sIG1fdmFsdWUs
ICZleGNlcHRpb24pOwogICAgIGlmIChleGNlcHRpb24pCiAgICAgICAgIFtfY29udGV4dCBub3Rp
ZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMjEzLDMwICsy
MTMsMzAgQEAgLSAoTlNEaWN0aW9uYXJ5ICopdG9EaWN0aW9uYXJ5CiAtIChKU1ZhbHVlICopdmFs
dWVGb3JQcm9wZXJ0eTooTlNTdHJpbmcgKilwcm9wZXJ0eU5hbWUKIHsKICAgICBKU1ZhbHVlUmVm
IGV4Y2VwdGlvbiA9IDA7Ci0gICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0
KFtfY29udGV4dCBnbG9iYWxDb250ZXh0UmVmXSwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAg
SlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KFtfY29udGV4dCBKU0dsb2JhbENv
bnRleHRSZWZdLCBtX3ZhbHVlLCAmZXhjZXB0aW9uKTsKICAgICBpZiAoZXhjZXB0aW9uKQogICAg
ICAgICByZXR1cm4gW19jb250ZXh0IHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25d
OwogCiAgICAgSlNTdHJpbmdSZWYgbmFtZSA9IEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKChD
RlN0cmluZ1JlZilwcm9wZXJ0eU5hbWUpOwotICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNPYmpl
Y3RHZXRQcm9wZXJ0eShbX2NvbnRleHQgZ2xvYmFsQ29udGV4dFJlZl0sIG9iamVjdCwgbmFtZSwg
JmV4Y2VwdGlvbik7CisgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU09iamVjdEdldFByb3BlcnR5
KFtfY29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdLCBvYmplY3QsIG5hbWUsICZleGNlcHRpb24p
OwogICAgIEpTU3RyaW5nUmVsZWFzZShuYW1lKTsKICAgICBpZiAoZXhjZXB0aW9uKQogICAgICAg
ICByZXR1cm4gW19jb250ZXh0IHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOwog
Ci0gICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOnJlc3VsdCBpbkNvbnRleHQ6X2Nv
bnRleHRdOworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOnJlc3VsdCBp
bkNvbnRleHQ6X2NvbnRleHRdOwogfQogCiAtICh2b2lkKXNldFZhbHVlOihpZCl2YWx1ZSBmb3JQ
cm9wZXJ0eTooTlNTdHJpbmcgKilwcm9wZXJ0eU5hbWUKIHsKICAgICBKU1ZhbHVlUmVmIGV4Y2Vw
dGlvbiA9IDA7Ci0gICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KFtfY29u
dGV4dCBnbG9iYWxDb250ZXh0UmVmXSwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgSlNPYmpl
Y3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KFtfY29udGV4dCBKU0dsb2JhbENvbnRleHRS
ZWZdLCBtX3ZhbHVlLCAmZXhjZXB0aW9uKTsKICAgICBpZiAoZXhjZXB0aW9uKSB7CiAgICAgICAg
IFtfY29udGV4dCBub3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIEpTU3RyaW5nUmVmIG5hbWUgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmlu
ZygoQ0ZTdHJpbmdSZWYpcHJvcGVydHlOYW1lKTsKLSAgICBKU09iamVjdFNldFByb3BlcnR5KFtf
Y29udGV4dCBnbG9iYWxDb250ZXh0UmVmXSwgb2JqZWN0LCBuYW1lLCBvYmplY3RUb1ZhbHVlKF9j
b250ZXh0LCB2YWx1ZSksIDAsICZleGNlcHRpb24pOworICAgIEpTT2JqZWN0U2V0UHJvcGVydHko
W19jb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0sIG9iamVjdCwgbmFtZSwgb2JqZWN0VG9WYWx1
ZShfY29udGV4dCwgdmFsdWUpLCAwLCAmZXhjZXB0aW9uKTsKICAgICBKU1N0cmluZ1JlbGVhc2Uo
bmFtZSk7CiAgICAgaWYgKGV4Y2VwdGlvbikgewogICAgICAgICBbX2NvbnRleHQgbm90aWZ5RXhj
ZXB0aW9uOmV4Y2VwdGlvbl07CkBAIC0yNDcsMTIgKzI0NywxMiBAQCAtICh2b2lkKXNldFZhbHVl
OihpZCl2YWx1ZSBmb3JQcm9wZXJ0eTooCiAtIChCT09MKWRlbGV0ZVByb3BlcnR5OihOU1N0cmlu
ZyAqKXByb3BlcnR5TmFtZQogewogICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKLSAgICBK
U09iamVjdFJlZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoW19jb250ZXh0IGdsb2JhbENvbnRl
eHRSZWZdLCBtX3ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBKU09iamVjdFJlZiBvYmplY3QgPSBK
U1ZhbHVlVG9PYmplY3QoW19jb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0sIG1fdmFsdWUsICZl
eGNlcHRpb24pOwogICAgIGlmIChleGNlcHRpb24pCiAgICAgICAgIHJldHVybiBbX2NvbnRleHQg
Ym9vbEZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKIAogICAgIEpTU3RyaW5nUmVmIG5h
bWUgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpcHJvcGVydHlOYW1l
KTsKLSAgICBCT09MIHJlc3VsdCA9IEpTT2JqZWN0RGVsZXRlUHJvcGVydHkoW19jb250ZXh0IGds
b2JhbENvbnRleHRSZWZdLCBvYmplY3QsIG5hbWUsICZleGNlcHRpb24pOworICAgIEJPT0wgcmVz
dWx0ID0gSlNPYmplY3REZWxldGVQcm9wZXJ0eShbX2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVm
XSwgb2JqZWN0LCBuYW1lLCAmZXhjZXB0aW9uKTsKICAgICBKU1N0cmluZ1JlbGVhc2UobmFtZSk7
CiAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgcmV0dXJuIFtfY29udGV4dCBib29sRnJvbU5v
dGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOwpAQCAtMjYzLDEyICsyNjMsMTIgQEAgLSAoQk9PTClk
ZWxldGVQcm9wZXJ0eTooTlNTdHJpbmcgKilwcm9wZQogLSAoQk9PTCloYXNQcm9wZXJ0eTooTlNT
dHJpbmcgKilwcm9wZXJ0eU5hbWUKIHsKICAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7Ci0g
ICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KFtfY29udGV4dCBnbG9iYWxD
b250ZXh0UmVmXSwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0
ID0gSlNWYWx1ZVRvT2JqZWN0KFtfY29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdLCBtX3ZhbHVl
LCAmZXhjZXB0aW9uKTsKICAgICBpZiAoZXhjZXB0aW9uKQogICAgICAgICByZXR1cm4gW19jb250
ZXh0IGJvb2xGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CiAKICAgICBKU1N0cmluZ1Jl
ZiBuYW1lID0gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKXByb3BlcnR5
TmFtZSk7Ci0gICAgQk9PTCByZXN1bHQgPSBKU09iamVjdEhhc1Byb3BlcnR5KFtfY29udGV4dCBn
bG9iYWxDb250ZXh0UmVmXSwgb2JqZWN0LCBuYW1lKTsKKyAgICBCT09MIHJlc3VsdCA9IEpTT2Jq
ZWN0SGFzUHJvcGVydHkoW19jb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0sIG9iamVjdCwgbmFt
ZSk7CiAgICAgSlNTdHJpbmdSZWxlYXNlKG5hbWUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBA
IC0yODYsMTUgKzI4NiwxNSBAQCAtIChKU1ZhbHVlICopdmFsdWVBdEluZGV4OihOU1VJbnRlZ2Vy
KWluCiAgICAgICAgIHJldHVybiBbc2VsZiB2YWx1ZUZvclByb3BlcnR5OltbSlNWYWx1ZSB2YWx1
ZVdpdGhEb3VibGU6aW5kZXggaW5Db250ZXh0Ol9jb250ZXh0XSB0b1N0cmluZ11dOwogCiAgICAg
SlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwotICAgIEpTT2JqZWN0UmVmIG9iamVjdCA9IEpTVmFs
dWVUb09iamVjdChbX2NvbnRleHQgZ2xvYmFsQ29udGV4dFJlZl0sIG1fdmFsdWUsICZleGNlcHRp
b24pOworICAgIEpTT2JqZWN0UmVmIG9iamVjdCA9IEpTVmFsdWVUb09iamVjdChbX2NvbnRleHQg
SlNHbG9iYWxDb250ZXh0UmVmXSwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7CiAgICAgaWYgKGV4Y2Vw
dGlvbikKICAgICAgICAgcmV0dXJuIFtfY29udGV4dCB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246
ZXhjZXB0aW9uXTsKIAotICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNPYmplY3RHZXRQcm9wZXJ0
eUF0SW5kZXgoW19jb250ZXh0IGdsb2JhbENvbnRleHRSZWZdLCBvYmplY3QsICh1bnNpZ25lZClp
bmRleCwgJmV4Y2VwdGlvbik7CisgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU09iamVjdEdldFBy
b3BlcnR5QXRJbmRleChbX2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSwgb2JqZWN0LCAodW5z
aWduZWQpaW5kZXgsICZleGNlcHRpb24pOwogICAgIGlmIChleGNlcHRpb24pCiAgICAgICAgIHJl
dHVybiBbX2NvbnRleHQgdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CiAKLSAg
ICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6cmVzdWx0IGluQ29udGV4dDpfY29udGV4
dF07CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6cmVzdWx0IGluQ29u
dGV4dDpfY29udGV4dF07CiB9CiAKIC0gKHZvaWQpc2V0VmFsdWU6KGlkKXZhbHVlIGF0SW5kZXg6
KE5TVUludGVnZXIpaW5kZXgKQEAgLTMwNSwxMyArMzA1LDEzIEBAIC0gKHZvaWQpc2V0VmFsdWU6
KGlkKXZhbHVlIGF0SW5kZXg6KE5TVUkKICAgICAgICAgcmV0dXJuIFtzZWxmIHNldFZhbHVlOnZh
bHVlIGZvclByb3BlcnR5OltbSlNWYWx1ZSB2YWx1ZVdpdGhEb3VibGU6aW5kZXggaW5Db250ZXh0
Ol9jb250ZXh0XSB0b1N0cmluZ11dOwogCiAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwot
ICAgIEpTT2JqZWN0UmVmIG9iamVjdCA9IEpTVmFsdWVUb09iamVjdChbX2NvbnRleHQgZ2xvYmFs
Q29udGV4dFJlZl0sIG1fdmFsdWUsICZleGNlcHRpb24pOworICAgIEpTT2JqZWN0UmVmIG9iamVj
dCA9IEpTVmFsdWVUb09iamVjdChbX2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSwgbV92YWx1
ZSwgJmV4Y2VwdGlvbik7CiAgICAgaWYgKGV4Y2VwdGlvbikgewogICAgICAgICBbX2NvbnRleHQg
bm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBKU09iamVjdFNldFByb3BlcnR5QXRJbmRleChbX2NvbnRleHQgZ2xvYmFsQ29udGV4dFJlZl0s
IG9iamVjdCwgKHVuc2lnbmVkKWluZGV4LCBvYmplY3RUb1ZhbHVlKF9jb250ZXh0LCB2YWx1ZSks
ICZleGNlcHRpb24pOworICAgIEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KFtfY29udGV4dCBK
U0dsb2JhbENvbnRleHRSZWZdLCBvYmplY3QsICh1bnNpZ25lZClpbmRleCwgb2JqZWN0VG9WYWx1
ZShfY29udGV4dCwgdmFsdWUpLCAmZXhjZXB0aW9uKTsKICAgICBpZiAoZXhjZXB0aW9uKSB7CiAg
ICAgICAgIFtfY29udGV4dCBub3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKICAgICAgICAgcmV0
dXJuOwpAQCAtMzIwLDQzICszMjAsNDMgQEAgLSAodm9pZClzZXRWYWx1ZTooaWQpdmFsdWUgYXRJ
bmRleDooTlNVSQogCiAtIChCT09MKWlzVW5kZWZpbmVkCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWVJ
c1VuZGVmaW5lZChbX2NvbnRleHQgZ2xvYmFsQ29udGV4dFJlZl0sIG1fdmFsdWUpOworICAgIHJl
dHVybiBKU1ZhbHVlSXNVbmRlZmluZWQoW19jb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0sIG1f
dmFsdWUpOwogfQogCiAtIChCT09MKWlzTnVsbAogewotICAgIHJldHVybiBKU1ZhbHVlSXNOdWxs
KFtfY29udGV4dCBnbG9iYWxDb250ZXh0UmVmXSwgbV92YWx1ZSk7CisgICAgcmV0dXJuIEpTVmFs
dWVJc051bGwoW19jb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0sIG1fdmFsdWUpOwogfQogCiAt
IChCT09MKWlzQm9vbGVhbgogewotICAgIHJldHVybiBKU1ZhbHVlSXNCb29sZWFuKFtfY29udGV4
dCBnbG9iYWxDb250ZXh0UmVmXSwgbV92YWx1ZSk7CisgICAgcmV0dXJuIEpTVmFsdWVJc0Jvb2xl
YW4oW19jb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0sIG1fdmFsdWUpOwogfQogCiAtIChCT09M
KWlzTnVtYmVyCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWVJc051bWJlcihbX2NvbnRleHQgZ2xvYmFs
Q29udGV4dFJlZl0sIG1fdmFsdWUpOworICAgIHJldHVybiBKU1ZhbHVlSXNOdW1iZXIoW19jb250
ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0sIG1fdmFsdWUpOwogfQogCiAtIChCT09MKWlzU3RyaW5n
CiB7Ci0gICAgcmV0dXJuIEpTVmFsdWVJc1N0cmluZyhbX2NvbnRleHQgZ2xvYmFsQ29udGV4dFJl
Zl0sIG1fdmFsdWUpOworICAgIHJldHVybiBKU1ZhbHVlSXNTdHJpbmcoW19jb250ZXh0IEpTR2xv
YmFsQ29udGV4dFJlZl0sIG1fdmFsdWUpOwogfQogCiAtIChCT09MKWlzT2JqZWN0CiB7Ci0gICAg
cmV0dXJuIEpTVmFsdWVJc09iamVjdChbX2NvbnRleHQgZ2xvYmFsQ29udGV4dFJlZl0sIG1fdmFs
dWUpOworICAgIHJldHVybiBKU1ZhbHVlSXNPYmplY3QoW19jb250ZXh0IEpTR2xvYmFsQ29udGV4
dFJlZl0sIG1fdmFsdWUpOwogfQogCiAtIChCT09MKWlzRXF1YWxUb09iamVjdDooaWQpdmFsdWUK
IHsKLSAgICByZXR1cm4gSlNWYWx1ZUlzU3RyaWN0RXF1YWwoW19jb250ZXh0IGdsb2JhbENvbnRl
eHRSZWZdLCBtX3ZhbHVlLCBvYmplY3RUb1ZhbHVlKF9jb250ZXh0LCB2YWx1ZSkpOworICAgIHJl
dHVybiBKU1ZhbHVlSXNTdHJpY3RFcXVhbChbX2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSwg
bV92YWx1ZSwgb2JqZWN0VG9WYWx1ZShfY29udGV4dCwgdmFsdWUpKTsKIH0KIAogLSAoQk9PTClp
c0VxdWFsV2l0aFR5cGVDb2VyY2lvblRvT2JqZWN0OihpZCl2YWx1ZQogewogICAgIEpTVmFsdWVS
ZWYgZXhjZXB0aW9uID0gMDsKLSAgICBCT09MIHJlc3VsdCA9IEpTVmFsdWVJc0VxdWFsKFtfY29u
dGV4dCBnbG9iYWxDb250ZXh0UmVmXSwgbV92YWx1ZSwgb2JqZWN0VG9WYWx1ZShfY29udGV4dCwg
dmFsdWUpLCAmZXhjZXB0aW9uKTsKKyAgICBCT09MIHJlc3VsdCA9IEpTVmFsdWVJc0VxdWFsKFtf
Y29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdLCBtX3ZhbHVlLCBvYmplY3RUb1ZhbHVlKF9jb250
ZXh0LCB2YWx1ZSksICZleGNlcHRpb24pOwogICAgIGlmIChleGNlcHRpb24pCiAgICAgICAgIHJl
dHVybiBbX2NvbnRleHQgYm9vbEZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKIApAQCAt
MzY2LDExICszNjYsMTEgQEAgLSAoQk9PTClpc0VxdWFsV2l0aFR5cGVDb2VyY2lvblRvT2JqZWN0
OgogLSAoQk9PTClpc0luc3RhbmNlT2Y6KGlkKXZhbHVlCiB7CiAgICAgSlNWYWx1ZVJlZiBleGNl
cHRpb24gPSAwOwotICAgIEpTT2JqZWN0UmVmIGNvbnN0cnVjdG9yID0gSlNWYWx1ZVRvT2JqZWN0
KFtfY29udGV4dCBnbG9iYWxDb250ZXh0UmVmXSwgb2JqZWN0VG9WYWx1ZShfY29udGV4dCwgdmFs
dWUpLCAmZXhjZXB0aW9uKTsKKyAgICBKU09iamVjdFJlZiBjb25zdHJ1Y3RvciA9IEpTVmFsdWVU
b09iamVjdChbX2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSwgb2JqZWN0VG9WYWx1ZShfY29u
dGV4dCwgdmFsdWUpLCAmZXhjZXB0aW9uKTsKICAgICBpZiAoZXhjZXB0aW9uKQogICAgICAgICBy
ZXR1cm4gW19jb250ZXh0IGJvb2xGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CiAKLSAg
ICBCT09MIHJlc3VsdCA9IEpTVmFsdWVJc0luc3RhbmNlT2ZDb25zdHJ1Y3RvcihbX2NvbnRleHQg
Z2xvYmFsQ29udGV4dFJlZl0sIG1fdmFsdWUsIGNvbnN0cnVjdG9yLCAmZXhjZXB0aW9uKTsKKyAg
ICBCT09MIHJlc3VsdCA9IEpTVmFsdWVJc0luc3RhbmNlT2ZDb25zdHJ1Y3RvcihbX2NvbnRleHQg
SlNHbG9iYWxDb250ZXh0UmVmXSwgbV92YWx1ZSwgY29uc3RydWN0b3IsICZleGNlcHRpb24pOwog
ICAgIGlmIChleGNlcHRpb24pCiAgICAgICAgIHJldHVybiBbX2NvbnRleHQgYm9vbEZyb21Ob3Rp
ZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKIApAQCAtMzg1LDE1ICszODUsMTUgQEAgLSAoSlNWYWx1
ZSAqKWNhbGxXaXRoQXJndW1lbnRzOihOU0FycmF5IAogICAgICAgICBhcmd1bWVudHNbaV0gPSBv
YmplY3RUb1ZhbHVlKF9jb250ZXh0LCBbYXJndW1lbnRBcnJheSBvYmplY3RBdEluZGV4OmldKTsK
IAogICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKLSAgICBKU09iamVjdFJlZiBvYmplY3Qg
PSBKU1ZhbHVlVG9PYmplY3QoW19jb250ZXh0IGdsb2JhbENvbnRleHRSZWZdLCBtX3ZhbHVlLCAm
ZXhjZXB0aW9uKTsKKyAgICBKU09iamVjdFJlZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoW19j
b250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0sIG1fdmFsdWUsICZleGNlcHRpb24pOwogICAgIGlm
IChleGNlcHRpb24pCiAgICAgICAgIHJldHVybiBbX2NvbnRleHQgdmFsdWVGcm9tTm90aWZ5RXhj
ZXB0aW9uOmV4Y2VwdGlvbl07CiAKLSAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpTT2JqZWN0Q2Fs
bEFzRnVuY3Rpb24oW19jb250ZXh0IGdsb2JhbENvbnRleHRSZWZdLCBvYmplY3QsIDAsIGFyZ3Vt
ZW50Q291bnQsIGFyZ3VtZW50cywgJmV4Y2VwdGlvbik7CisgICAgSlNWYWx1ZVJlZiByZXN1bHQg
PSBKU09iamVjdENhbGxBc0Z1bmN0aW9uKFtfY29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdLCBv
YmplY3QsIDAsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywgJmV4Y2VwdGlvbik7CiAgICAgaWYg
KGV4Y2VwdGlvbikKICAgICAgICAgcmV0dXJuIFtfY29udGV4dCB2YWx1ZUZyb21Ob3RpZnlFeGNl
cHRpb246ZXhjZXB0aW9uXTsKIAotICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpy
ZXN1bHQgaW5Db250ZXh0Ol9jb250ZXh0XTsKKyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRo
SlNWYWx1ZVJlZjpyZXN1bHQgaW5Db250ZXh0Ol9jb250ZXh0XTsKIH0KIAogLSAoSlNWYWx1ZSAq
KWNvbnN0cnVjdFdpdGhBcmd1bWVudHM6KE5TQXJyYXkgKilhcmd1bWVudEFycmF5CkBAIC00MDQs
MTUgKzQwNCwxNSBAQCAtIChKU1ZhbHVlICopY29uc3RydWN0V2l0aEFyZ3VtZW50czooTlNBCiAg
ICAgICAgIGFyZ3VtZW50c1tpXSA9IG9iamVjdFRvVmFsdWUoX2NvbnRleHQsIFthcmd1bWVudEFy
cmF5IG9iamVjdEF0SW5kZXg6aV0pOwogCiAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwot
ICAgIEpTT2JqZWN0UmVmIG9iamVjdCA9IEpTVmFsdWVUb09iamVjdChbX2NvbnRleHQgZ2xvYmFs
Q29udGV4dFJlZl0sIG1fdmFsdWUsICZleGNlcHRpb24pOworICAgIEpTT2JqZWN0UmVmIG9iamVj
dCA9IEpTVmFsdWVUb09iamVjdChbX2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSwgbV92YWx1
ZSwgJmV4Y2VwdGlvbik7CiAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgcmV0dXJuIFtfY29u
dGV4dCB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKIAotICAgIEpTT2JqZWN0
UmVmIHJlc3VsdCA9IEpTT2JqZWN0Q2FsbEFzQ29uc3RydWN0b3IoW19jb250ZXh0IGdsb2JhbENv
bnRleHRSZWZdLCBvYmplY3QsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywgJmV4Y2VwdGlvbik7
CisgICAgSlNPYmplY3RSZWYgcmVzdWx0ID0gSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3RvcihbX2Nv
bnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSwgb2JqZWN0LCBhcmd1bWVudENvdW50LCBhcmd1bWVu
dHMsICZleGNlcHRpb24pOwogICAgIGlmIChleGNlcHRpb24pCiAgICAgICAgIHJldHVybiBbX2Nv
bnRleHQgdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CiAKLSAgICByZXR1cm4g
W0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6cmVzdWx0IGluQ29udGV4dDpfY29udGV4dF07CisgICAg
cmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6cmVzdWx0IGluQ29udGV4dDpfY29u
dGV4dF07CiB9CiAKIC0gKEpTVmFsdWUgKilpbnZva2VNZXRob2Q6KE5TU3RyaW5nICopbWV0aG9k
IHdpdGhBcmd1bWVudHM6KE5TQXJyYXkgKilhcmd1bWVudHMKQEAgLTQyMywyNSArNDIzLDI1IEBA
IC0gKEpTVmFsdWUgKilpbnZva2VNZXRob2Q6KE5TU3RyaW5nICopbWUKICAgICAgICAgYXJndW1l
bnRBcnJheVtpXSA9IG9iamVjdFRvVmFsdWUoX2NvbnRleHQsIFthcmd1bWVudHMgb2JqZWN0QXRJ
bmRleDppXSk7CiAKICAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7Ci0gICAgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCA9IEpTVmFsdWVUb09iamVjdChbX2NvbnRleHQgZ2xvYmFsQ29udGV4dFJl
Zl0sIG1fdmFsdWUsICZleGNlcHRpb24pOworICAgIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QgPSBK
U1ZhbHVlVG9PYmplY3QoW19jb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0sIG1fdmFsdWUsICZl
eGNlcHRpb24pOwogICAgIGlmIChleGNlcHRpb24pCiAgICAgICAgIHJldHVybiBbX2NvbnRleHQg
dmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CiAKICAgICBKU1N0cmluZ1JlZiBu
YW1lID0gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKW1ldGhvZCk7Ci0g
ICAgSlNWYWx1ZVJlZiBmdW5jdGlvbiA9IEpTT2JqZWN0R2V0UHJvcGVydHkoW19jb250ZXh0IGds
b2JhbENvbnRleHRSZWZdLCB0aGlzT2JqZWN0LCBuYW1lLCAmZXhjZXB0aW9uKTsKKyAgICBKU1Zh
bHVlUmVmIGZ1bmN0aW9uID0gSlNPYmplY3RHZXRQcm9wZXJ0eShbX2NvbnRleHQgSlNHbG9iYWxD
b250ZXh0UmVmXSwgdGhpc09iamVjdCwgbmFtZSwgJmV4Y2VwdGlvbik7CiAgICAgSlNTdHJpbmdS
ZWxlYXNlKG5hbWUpOwogICAgIGlmIChleGNlcHRpb24pCiAgICAgICAgIHJldHVybiBbX2NvbnRl
eHQgdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CiAKLSAgICBKU09iamVjdFJl
ZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoW19jb250ZXh0IGdsb2JhbENvbnRleHRSZWZdLCBm
dW5jdGlvbiwgJmV4Y2VwdGlvbik7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRv
T2JqZWN0KFtfY29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdLCBmdW5jdGlvbiwgJmV4Y2VwdGlv
bik7CiAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgcmV0dXJuIFtfY29udGV4dCB2YWx1ZUZy
b21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKIAotICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0g
SlNPYmplY3RDYWxsQXNGdW5jdGlvbihbX2NvbnRleHQgZ2xvYmFsQ29udGV4dFJlZl0sIG9iamVj
dCwgdGhpc09iamVjdCwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRBcnJheSwgJmV4Y2VwdGlvbik7
CisgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU09iamVjdENhbGxBc0Z1bmN0aW9uKFtfY29udGV4
dCBKU0dsb2JhbENvbnRleHRSZWZdLCBvYmplY3QsIHRoaXNPYmplY3QsIGFyZ3VtZW50Q291bnQs
IGFyZ3VtZW50QXJyYXksICZleGNlcHRpb24pOwogICAgIGlmIChleGNlcHRpb24pCiAgICAgICAg
IHJldHVybiBbX2NvbnRleHQgdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CiAK
LSAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6cmVzdWx0IGluQ29udGV4dDpfY29u
dGV4dF07CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6cmVzdWx0IGlu
Q29udGV4dDpfY29udGV4dF07CiB9CiAKIEBlbmQKQEAgLTcxMCwxMCArNzEwLDEwIEBAIHN0YXRp
YyBpZCBjb250YWluZXJWYWx1ZVRvT2JqZWN0KEpTR2xvYmEKIAogaWQgdmFsdWVUb09iamVjdChK
U0NvbnRleHQgKmNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCiB7Ci0gICAgSlNDb250YWluZXJD
b252ZXJ0b3I6OlRhc2sgcmVzdWx0ID0gdmFsdWVUb09iamVjdFdpdGhvdXRDb3B5KFtjb250ZXh0
IGdsb2JhbENvbnRleHRSZWZdLCB2YWx1ZSk7CisgICAgSlNDb250YWluZXJDb252ZXJ0b3I6OlRh
c2sgcmVzdWx0ID0gdmFsdWVUb09iamVjdFdpdGhvdXRDb3B5KFtjb250ZXh0IEpTR2xvYmFsQ29u
dGV4dFJlZl0sIHZhbHVlKTsKICAgICBpZiAocmVzdWx0LnR5cGUgPT0gQ29udGFpbmVyTm9uZSkK
ICAgICAgICAgcmV0dXJuIHJlc3VsdC5vYmpjOwotICAgIHJldHVybiBjb250YWluZXJWYWx1ZVRv
T2JqZWN0KFtjb250ZXh0IGdsb2JhbENvbnRleHRSZWZdLCByZXN1bHQpOworICAgIHJldHVybiBj
b250YWluZXJWYWx1ZVRvT2JqZWN0KFtjb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0sIHJlc3Vs
dCk7CiB9CiAKIGlkIHZhbHVlVG9OdW1iZXIoSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpT
VmFsdWVSZWYgdmFsdWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKQEAgLTg1Niw3ICs4NTYsNyBA
QCBpbmxpbmUgYm9vbCBpc05TQm9vbGVhbihpZCBvYmplY3QpCiAKIHN0YXRpYyBPYmpjQ29udGFp
bmVyQ29udmVydG9yOjpUYXNrIG9iamVjdFRvVmFsdWVXaXRob3V0Q29weShKU0NvbnRleHQgKmNv
bnRleHQsIGlkIG9iamVjdCkKIHsKLSAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dFJlZiA9
IFtjb250ZXh0IGdsb2JhbENvbnRleHRSZWZdOworICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250
ZXh0UmVmID0gW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXTsKIAogICAgIGlmICghb2JqZWN0
KQogICAgICAgICByZXR1cm4gKE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRhc2speyBvYmplY3Qs
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHRSZWYpLCBDb250YWluZXJOb25lIH07CkBAIC05
MDYsNyArOTA2LDcgQEAgc3RhdGljIE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRhc2sgb2JqZQog
CiBKU1ZhbHVlUmVmIG9iamVjdFRvVmFsdWUoSlNDb250ZXh0ICpjb250ZXh0LCBpZCBvYmplY3Qp
CiB7Ci0gICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHRSZWYgPSBbY29udGV4dCBnbG9iYWxD
b250ZXh0UmVmXTsKKyAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dFJlZiA9IFtjb250ZXh0
IEpTR2xvYmFsQ29udGV4dFJlZl07CiAKICAgICBPYmpjQ29udGFpbmVyQ29udmVydG9yOjpUYXNr
IHRhc2sgPSBvYmplY3RUb1ZhbHVlV2l0aG91dENvcHkoY29udGV4dCwgb2JqZWN0KTsKICAgICBp
ZiAodGFzay50eXBlID09IENvbnRhaW5lck5vbmUpCkBAIC05NTAsNyArOTUwLDcgQEAgSlNWYWx1
ZVJlZiB2YWx1ZUludGVybmFsVmFsdWUoSlNWYWx1ZSAqIAogICAgIHJldHVybiB2YWx1ZS0+bV92
YWx1ZTsKIH0KIAotKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFZhbHVlOihKU1ZhbHVlUmVmKXZhbHVl
IGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAorKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aEpT
VmFsdWVSZWY6KEpTVmFsdWVSZWYpdmFsdWUgaW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0
CiB7CiAgICAgcmV0dXJuIFtjb250ZXh0IHdyYXBwZXJGb3JKU09iamVjdDp2YWx1ZV07CiB9CkBA
IC05NzEsNyArOTcxLDcgQEAgLSAoSlNWYWx1ZSAqKWluaXRXaXRoVmFsdWU6KEpTVmFsdWVSZWYp
dgogCiAgICAgX2NvbnRleHQgPSBbY29udGV4dCByZXRhaW5dOwogICAgIG1fdmFsdWUgPSB2YWx1
ZTsKLSAgICBKU1ZhbHVlUHJvdGVjdChbX2NvbnRleHQgZ2xvYmFsQ29udGV4dFJlZl0sIG1fdmFs
dWUpOworICAgIEpTVmFsdWVQcm90ZWN0KFtfY29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdLCBt
X3ZhbHVlKTsKICAgICByZXR1cm4gc2VsZjsKIH0KIApAQCAtMTA4OSw3ICsxMDg5LDcgQEAgKyAo
U0VMKXNlbGVjdG9yRm9yVmFsdWVUb1N0cnVjdDooY29uc3QgYwogCiAtICh2b2lkKWRlYWxsb2MK
IHsKLSAgICBKU1ZhbHVlVW5wcm90ZWN0KFtfY29udGV4dCBnbG9iYWxDb250ZXh0UmVmXSwgbV92
YWx1ZSk7CisgICAgSlNWYWx1ZVVucHJvdGVjdChbX2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVm
XSwgbV92YWx1ZSk7CiAgICAgW19jb250ZXh0IHJlbGVhc2VdOwogICAgIF9jb250ZXh0ID0gbmls
OwogICAgIFtzdXBlciBkZWFsbG9jXTsKQEAgLTEwOTcsNyArMTA5Nyw3IEBAIC0gKHZvaWQpZGVh
bGxvYwogCiAtIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uCiB7Ci0gICAgaWYgKGlkIHdyYXBwZWQg
PSB0cnlVbndyYXBPYmpjT2JqZWN0KFtfY29udGV4dCBnbG9iYWxDb250ZXh0UmVmXSwgbV92YWx1
ZSkpCisgICAgaWYgKGlkIHdyYXBwZWQgPSB0cnlVbndyYXBPYmpjT2JqZWN0KFtfY29udGV4dCBK
U0dsb2JhbENvbnRleHRSZWZdLCBtX3ZhbHVlKSkKICAgICAgICAgcmV0dXJuIFt3cmFwcGVkIGRl
c2NyaXB0aW9uXTsKICAgICByZXR1cm4gW3NlbGYgdG9TdHJpbmddOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVJbnRlcm5hbC5oCShyZXZpc2lvbiAxNDkzMjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVJbnRlcm5hbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSw3ICszNSw2IEBACiAKIEpTVmFsdWVSZWYgdmFsdWVJbnRlcm5hbFZhbHVl
KEpTVmFsdWUgKik7CiAKLSsgKEpTVmFsdWUgKil2YWx1ZVdpdGhWYWx1ZTooSlNWYWx1ZVJlZil2
YWx1ZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQ7CiAtIChKU1ZhbHVlICopaW5pdFdp
dGhWYWx1ZTooSlNWYWx1ZVJlZil2YWx1ZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQ7
CiAKIEpTVmFsdWVSZWYgb2JqZWN0VG9WYWx1ZShKU0NvbnRleHQgKiwgaWQpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQkocmV2aXNpb24g
MTQ5MzIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNyArMTI3LDcgQEAgc3RhdGljIGlkIGdldEludGVybmFs
T2JqY09iamVjdChpZCBvYmplYwogewogICAgIGlmIChbb2JqZWN0IGlzS2luZE9mQ2xhc3M6W0pT
TWFuYWdlZFZhbHVlIGNsYXNzXV0pIHsKICAgICAgICAgSlNWYWx1ZSogdmFsdWUgPSBbc3RhdGlj
X2Nhc3Q8SlNNYW5hZ2VkVmFsdWUgKj4ob2JqZWN0KSB2YWx1ZV07Ci0gICAgICAgIGlkIHRlbXAg
PSB0cnlVbndyYXBPYmpjT2JqZWN0KFt2YWx1ZS5jb250ZXh0IGdsb2JhbENvbnRleHRSZWZdLCBb
dmFsdWUgSlNWYWx1ZVJlZl0pOworICAgICAgICBpZCB0ZW1wID0gdHJ5VW53cmFwT2JqY09iamVj
dChbdmFsdWUuY29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdLCBbdmFsdWUgSlNWYWx1ZVJlZl0p
OwogICAgICAgICBpZiAodGVtcCkKICAgICAgICAgICAgIHJldHVybiB0ZW1wOwogICAgICAgICBy
ZXR1cm4gb2JqZWN0OwpAQCAtMTM1LDcgKzEzNSw3IEBAIHN0YXRpYyBpZCBnZXRJbnRlcm5hbE9i
amNPYmplY3QoaWQgb2JqZWMKICAgICAKICAgICBpZiAoW29iamVjdCBpc0tpbmRPZkNsYXNzOltK
U1ZhbHVlIGNsYXNzXV0pIHsKICAgICAgICAgSlNWYWx1ZSAqdmFsdWUgPSBzdGF0aWNfY2FzdDxK
U1ZhbHVlICo+KG9iamVjdCk7Ci0gICAgICAgIG9iamVjdCA9IHRyeVVud3JhcE9iamNPYmplY3Qo
W3ZhbHVlLmNvbnRleHQgZ2xvYmFsQ29udGV4dFJlZl0sIFt2YWx1ZSBKU1ZhbHVlUmVmXSk7Cisg
ICAgICAgIG9iamVjdCA9IHRyeVVud3JhcE9iamNPYmplY3QoW3ZhbHVlLmNvbnRleHQgSlNHbG9i
YWxDb250ZXh0UmVmXSwgW3ZhbHVlIEpTVmFsdWVSZWZdKTsKICAgICB9CiAKICAgICByZXR1cm4g
b2JqZWN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAubW0J
KHJldmlzaW9uIDE0OTMyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVy
TWFwLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsOSArMTE2LDkgQEAgc3RhdGljIEpTVmFsdWUg
Km9iamVjdFdpdGhDdXN0b21CcmFuZChKUwogICAgIGRlZmluaXRpb24gPSBrSlNDbGFzc0RlZmlu
aXRpb25FbXB0eTsKICAgICBkZWZpbml0aW9uLmNsYXNzTmFtZSA9IFticmFuZCBVVEY4U3RyaW5n
XTsKICAgICBKU0NsYXNzUmVmIGNsYXNzUmVmID0gSlNDbGFzc0NyZWF0ZSgmZGVmaW5pdGlvbik7
Ci0gICAgSlNPYmplY3RSZWYgcmVzdWx0ID0gbWFrZVdyYXBwZXIoW2NvbnRleHQgZ2xvYmFsQ29u
dGV4dFJlZl0sIGNsYXNzUmVmLCBjbHMpOworICAgIEpTT2JqZWN0UmVmIHJlc3VsdCA9IG1ha2VX
cmFwcGVyKFtjb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0sIGNsYXNzUmVmLCBjbHMpOwogICAg
IEpTQ2xhc3NSZWxlYXNlKGNsYXNzUmVmKTsKLSAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRo
VmFsdWU6cmVzdWx0IGluQ29udGV4dDpjb250ZXh0XTsKKyAgICByZXR1cm4gW0pTVmFsdWUgdmFs
dWVXaXRoSlNWYWx1ZVJlZjpyZXN1bHQgaW5Db250ZXh0OmNvbnRleHRdOwogfQogCiAvLyBMb29r
IGZvciBAb3B0aW9uYWwgcHJvcGVydGllcyBpbiB0aGUgcHJvdG90eXBlIGNvbnRhaW5pbmcgYSBz
ZWxlY3RvciB0byBwcm9wZXJ0eQpAQCAtMTY3LDcgKzE2Nyw3IEBAIHN0YXRpYyB2b2lkIGNvcHlN
ZXRob2RzVG9PYmplY3QoSlNDb250ZXgKICAgICAgICAgICAgIEpTT2JqZWN0UmVmIG1ldGhvZCA9
IG9iakNDYWxsYmFja0Z1bmN0aW9uRm9yTWV0aG9kKGNvbnRleHQsIG9iamNDbGFzcywgcHJvdG9j
b2wsIGlzSW5zdGFuY2VNZXRob2QsIHNlbCwgdHlwZXMpOwogICAgICAgICAgICAgaWYgKCFtZXRo
b2QpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYWNjZXNzb3JNZXRob2Rz
W25hbWVdID0gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6bWV0aG9kIGluQ29udGV4dDpjb250ZXh0
XTsKKyAgICAgICAgICAgIGFjY2Vzc29yTWV0aG9kc1tuYW1lXSA9IFtKU1ZhbHVlIHZhbHVlV2l0
aEpTVmFsdWVSZWY6bWV0aG9kIGluQ29udGV4dDpjb250ZXh0XTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIG5hbWUgPSByZW5hbWVNYXBbbmFtZV07CiAgICAgICAgICAgICBpZiAoIW5h
bWUpCkBAIC0xNzYsNyArMTc2LDcgQEAgc3RhdGljIHZvaWQgY29weU1ldGhvZHNUb09iamVjdChK
U0NvbnRleAogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIEpTT2JqZWN0UmVm
IG1ldGhvZCA9IG9iakNDYWxsYmFja0Z1bmN0aW9uRm9yTWV0aG9kKGNvbnRleHQsIG9iamNDbGFz
cywgcHJvdG9jb2wsIGlzSW5zdGFuY2VNZXRob2QsIHNlbCwgdHlwZXMpOwogICAgICAgICAgICAg
aWYgKG1ldGhvZCkKLSAgICAgICAgICAgICAgICBwdXROb25FbnVtZXJhYmxlKG9iamVjdCwgbmFt
ZSwgW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6bWV0aG9kIGluQ29udGV4dDpjb250ZXh0XSk7Cisg
ICAgICAgICAgICAgICAgcHV0Tm9uRW51bWVyYWJsZShvYmplY3QsIG5hbWUsIFtKU1ZhbHVlIHZh
bHVlV2l0aEpTVmFsdWVSZWY6bWV0aG9kIGluQ29udGV4dDpjb250ZXh0XSk7CiAgICAgICAgIH0K
ICAgICB9KTsKIApAQCAtMzM0LDcgKzMzNCw3IEBAIC0gKHZvaWQpYWxsb2NhdGVDb25zdHJ1Y3Rv
ckFuZFByb3RvdHlwZVcKICAgICBBU1NFUlQoIW1fY29uc3RydWN0b3IgfHwgIW1fcHJvdG90eXBl
KTsKICAgICBBU1NFUlQoKG1fY2xhc3MgPT0gW05TT2JqZWN0IGNsYXNzXSkgPT0gIXN1cGVyQ2xh
c3NJbmZvKTsKICAgICBpZiAoIXN1cGVyQ2xhc3NJbmZvKSB7Ci0gICAgICAgIEpTQ29udGV4dFJl
ZiBjQ29udGV4dCA9IFttX2NvbnRleHQgZ2xvYmFsQ29udGV4dFJlZl07CisgICAgICAgIEpTQ29u
dGV4dFJlZiBjQ29udGV4dCA9IFttX2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXTsKICAgICAg
ICAgSlNWYWx1ZSAqY29uc3RydWN0b3IgPSBtX2NvbnRleHRbQCJPYmplY3QiXTsKICAgICAgICAg
aWYgKCFtX2NvbnN0cnVjdG9yKQogICAgICAgICAgICAgbV9jb25zdHJ1Y3RvciA9IHRvSlMoSlNW
YWx1ZVRvT2JqZWN0KGNDb250ZXh0LCB2YWx1ZUludGVybmFsVmFsdWUoY29uc3RydWN0b3IpLCAw
KSk7CkBAIC0zNTAsMTYgKzM1MCwxNiBAQCAtICh2b2lkKWFsbG9jYXRlQ29uc3RydWN0b3JBbmRQ
cm90b3R5cGVXCiAgICAgICAgIEpTVmFsdWUgKnByb3RvdHlwZTsKICAgICAgICAgSlNWYWx1ZSAq
Y29uc3RydWN0b3I7CiAgICAgICAgIGlmIChtX3Byb3RvdHlwZSkKLSAgICAgICAgICAgIHByb3Rv
dHlwZSA9IFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOnRvUmVmKG1fcHJvdG90eXBlLmdldCgpKSBp
bkNvbnRleHQ6bV9jb250ZXh0XTsKKyAgICAgICAgICAgIHByb3RvdHlwZSA9IFtKU1ZhbHVlIHZh
bHVlV2l0aEpTVmFsdWVSZWY6dG9SZWYobV9wcm90b3R5cGUuZ2V0KCkpIGluQ29udGV4dDptX2Nv
bnRleHRdOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBwcm90b3R5cGUgPSBvYmplY3RXaXRo
Q3VzdG9tQnJhbmQobV9jb250ZXh0LCBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVzUHJv
dG90eXBlIiwgY2xhc3NOYW1lXSk7CiAKICAgICAgICAgaWYgKG1fY29uc3RydWN0b3IpCi0gICAg
ICAgICAgICBjb25zdHJ1Y3RvciA9IFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOnRvUmVmKG1fY29u
c3RydWN0b3IuZ2V0KCkpIGluQ29udGV4dDptX2NvbnRleHRdOworICAgICAgICAgICAgY29uc3Ry
dWN0b3IgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOnRvUmVmKG1fY29uc3RydWN0b3Iu
Z2V0KCkpIGluQ29udGV4dDptX2NvbnRleHRdOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBj
b25zdHJ1Y3RvciA9IG9iamVjdFdpdGhDdXN0b21CcmFuZChtX2NvbnRleHQsIFtOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAiJXNDb25zdHJ1Y3RvciIsIGNsYXNzTmFtZV0sIG1fY2xhc3MpOwog
Ci0gICAgICAgIEpTQ29udGV4dFJlZiBjQ29udGV4dCA9IFttX2NvbnRleHQgZ2xvYmFsQ29udGV4
dFJlZl07CisgICAgICAgIEpTQ29udGV4dFJlZiBjQ29udGV4dCA9IFttX2NvbnRleHQgSlNHbG9i
YWxDb250ZXh0UmVmXTsKICAgICAgICAgbV9wcm90b3R5cGUgPSB0b0pTKEpTVmFsdWVUb09iamVj
dChjQ29udGV4dCwgdmFsdWVJbnRlcm5hbFZhbHVlKHByb3RvdHlwZSksIDApKTsKICAgICAgICAg
bV9jb25zdHJ1Y3RvciA9IHRvSlMoSlNWYWx1ZVRvT2JqZWN0KGNDb250ZXh0LCB2YWx1ZUludGVy
bmFsVmFsdWUoY29uc3RydWN0b3IpLCAwKSk7CiAKQEAgLTM3Myw3ICszNzMsNyBAQCAgICAgICAg
IGZvckVhY2hQcm90b2NvbEltcGxlbWVudGluZ1Byb3RvCiAgICAgICAgIH0pOwogCiAgICAgICAg
IC8vIFNldCBbUHJvdG90eXBlXS4KLSAgICAgICAgSlNPYmplY3RTZXRQcm90b3R5cGUoW21fY29u
dGV4dCBnbG9iYWxDb250ZXh0UmVmXSwgdG9SZWYobV9wcm90b3R5cGUuZ2V0KCkpLCB0b1JlZihz
dXBlckNsYXNzSW5mby0+bV9wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICAgICAgSlNPYmplY3RTZXRQ
cm90b3R5cGUoW21fY29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdLCB0b1JlZihtX3Byb3RvdHlw
ZS5nZXQoKSksIHRvUmVmKHN1cGVyQ2xhc3NJbmZvLT5tX3Byb3RvdHlwZS5nZXQoKSkpOwogICAg
IH0KIH0KIApAQCAtMzg4LDE2ICszODgsMTYgQEAgLSAoSlNWYWx1ZSAqKXdyYXBwZXJGb3JPYmpl
Y3Q6KGlkKW9iamVjdAogICAgIEFTU0VSVChtX2Jsb2NrID09IFtvYmplY3QgaXNLaW5kT2ZDbGFz
czpnZXROU0Jsb2NrQ2xhc3MoKV0pOwogICAgIGlmIChtX2Jsb2NrKSB7CiAgICAgICAgIGlmIChK
U09iamVjdFJlZiBtZXRob2QgPSBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZvckJsb2NrKG1fY29udGV4
dCwgb2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpt
ZXRob2QgaW5Db250ZXh0Om1fY29udGV4dF07CisgICAgICAgICAgICByZXR1cm4gW0pTVmFsdWUg
dmFsdWVXaXRoSlNWYWx1ZVJlZjptZXRob2QgaW5Db250ZXh0Om1fY29udGV4dF07CiAgICAgfQog
CiAgICAgaWYgKCFtX3Byb3RvdHlwZSkKICAgICAgICAgW3NlbGYgcmVhbGxvY2F0ZUNvbnN0cnVj
dG9yQW5kT3JQcm90b3R5cGVdOwogICAgIEFTU0VSVCghIW1fcHJvdG90eXBlKTsKIAotICAgIEpT
T2JqZWN0UmVmIHdyYXBwZXIgPSBtYWtlV3JhcHBlcihbbV9jb250ZXh0IGdsb2JhbENvbnRleHRS
ZWZdLCBtX2NsYXNzUmVmLCBvYmplY3QpOwotICAgIEpTT2JqZWN0U2V0UHJvdG90eXBlKFttX2Nv
bnRleHQgZ2xvYmFsQ29udGV4dFJlZl0sIHdyYXBwZXIsIHRvUmVmKG1fcHJvdG90eXBlLmdldCgp
KSk7Ci0gICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOndyYXBwZXIgaW5Db250ZXh0
Om1fY29udGV4dF07CisgICAgSlNPYmplY3RSZWYgd3JhcHBlciA9IG1ha2VXcmFwcGVyKFttX2Nv
bnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSwgbV9jbGFzc1JlZiwgb2JqZWN0KTsKKyAgICBKU09i
amVjdFNldFByb3RvdHlwZShbbV9jb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0sIHdyYXBwZXIs
IHRvUmVmKG1fcHJvdG90eXBlLmdldCgpKSk7CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0
aEpTVmFsdWVSZWY6d3JhcHBlciBpbkNvbnRleHQ6bV9jb250ZXh0XTsKIH0KIAogLSAoSlNWYWx1
ZSAqKWNvbnN0cnVjdG9yCkBAIC00MDUsNyArNDA1LDcgQEAgLSAoSlNWYWx1ZSAqKWNvbnN0cnVj
dG9yCiAgICAgaWYgKCFtX2NvbnN0cnVjdG9yKQogICAgICAgICBbc2VsZiByZWFsbG9jYXRlQ29u
c3RydWN0b3JBbmRPclByb3RvdHlwZV07CiAgICAgQVNTRVJUKCEhbV9jb25zdHJ1Y3Rvcik7Ci0g
ICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOnRvUmVmKG1fY29uc3RydWN0b3IuZ2V0
KCkpIGluQ29udGV4dDptX2NvbnRleHRdOworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhK
U1ZhbHVlUmVmOnRvUmVmKG1fY29uc3RydWN0b3IuZ2V0KCkpIGluQ29udGV4dDptX2NvbnRleHRd
OwogfQogCiBAZW5kCkBAIC00NTksNyArNDU5LDcgQEAgLSAoSlNWYWx1ZSAqKWpzV3JhcHBlckZv
ck9iamVjdDooaWQpb2JqZQogewogICAgIEpTQzo6SlNPYmplY3QqIGpzV3JhcHBlciA9IG1fY2Fj
aGVkSlNXcmFwcGVycy5nZXQob2JqZWN0KTsKICAgICBpZiAoanNXcmFwcGVyKQotICAgICAgICBy
ZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6dG9SZWYoanNXcmFwcGVyKSBpbkNvbnRleHQ6
bV9jb250ZXh0XTsKKyAgICAgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6
dG9SZWYoanNXcmFwcGVyKSBpbkNvbnRleHQ6bV9jb250ZXh0XTsKIAogICAgIEpTVmFsdWUgKndy
YXBwZXI7CiAgICAgaWYgKGNsYXNzX2lzTWV0YUNsYXNzKG9iamVjdF9nZXRDbGFzcyhvYmplY3Qp
KSkKQEAgLTQ3NCw3ICs0NzQsNyBAQCAtIChKU1ZhbHVlICopanNXcmFwcGVyRm9yT2JqZWN0Oihp
ZClvYmplCiAgICAgLy8gKDEpIEZvciBpbW1vcnRhbCBvYmplY3RzIEpTVmFsdWVzIHdpbGwgZWZm
ZWN0aXZlbHkgbGVhayBhbmQgdGhpcyByZXN1bHRzIGluIGVycm9yIG91dHB1dCBiZWluZyBsb2dn
ZWQgLSB3ZSBzaG91bGQgYXZvaWQgYWRkaW5nIGFzc29jaWF0ZWQgb2JqZWN0cyB0byBpbW1vcnRh
bCBvYmplY3RzLgogICAgIC8vICgyKSBBIGxvbmcgbGl2ZWQgb2JqZWN0IG1heSByYWNrIHVwIG1h
bnkgSlNWYWx1ZXMuIFdoZW4gdGhlIGNvbnRleHRzIGFyZSByZWxlYXNlZCB0aGVzZSB3aWxsIHVu
cHJvdGVjdCB0aGUgYXNzb2NpYXRlZCBKYXZhU2NyaXB0IG9iamVjdHMsCiAgICAgLy8gICAgIGJ1
dCBzdGlsbCwgd291bGQgcHJvYmFibHkgbmljZXIgaWYgd2UgbWFkZSBpdCBzbyB0aGF0IG9ubHkg
b25lIGFzc29jaWF0ZWQgb2JqZWN0IHdhcyByZXF1aXJlZCwgYnJvYWRjYXN0aW5nIG9iamVjdCBk
ZWFsbG9jLgotICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhbbV9jb250ZXh0IGdsb2Jh
bENvbnRleHRSZWZdKTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoW21fY29udGV4
dCBKU0dsb2JhbENvbnRleHRSZWZdKTsKICAgICBqc1dyYXBwZXIgPSB0b0pTKGV4ZWMsIHZhbHVl
SW50ZXJuYWxWYWx1ZSh3cmFwcGVyKSkudG9PYmplY3QoZXhlYyk7CiAgICAgbV9jYWNoZWRKU1dy
YXBwZXJzLnNldChvYmplY3QsIGpzV3JhcHBlcik7CiAgICAgcmV0dXJuIHdyYXBwZXI7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24u
bW0JKHJldmlzaW9uIDE0OTMyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0Nh
bGxiYWNrRnVuY3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgQ2FsbGJh
Y2tBcmd1bWVudDo6fkNhbGxiYWNrQXJndW1lbnQoKQogY2xhc3MgQ2FsbGJhY2tBcmd1bWVudEJv
b2xlYW4gOiBwdWJsaWMgQ2FsbGJhY2tBcmd1bWVudCB7CiAgICAgdmlydHVhbCB2b2lkIHNldChO
U0ludm9jYXRpb24gKmludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250
ZXh0ICpjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3VtZW50LCBKU1ZhbHVlUmVmKikgb3ZlcnJpZGUK
ICAgICB7Ci0gICAgICAgIGJvb2wgdmFsdWUgPSBKU1ZhbHVlVG9Cb29sZWFuKFtjb250ZXh0IGds
b2JhbENvbnRleHRSZWZdLCBhcmd1bWVudCk7CisgICAgICAgIGJvb2wgdmFsdWUgPSBKU1ZhbHVl
VG9Cb29sZWFuKFtjb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0sIGFyZ3VtZW50KTsKICAgICAg
ICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6JnZhbHVlIGF0SW5kZXg6YXJndW1lbnROdW1iZXJd
OwogICAgIH0KIH07CkBAIC02Niw3ICs2Niw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBjbGFz
cyBDYWxsYmFja0FyZ3VtZW50SW50ZWdlciA6IHB1YmxpYyBDYWxsYmFja0FyZ3VtZW50IHsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0KE5TSW52b2NhdGlvbiAqaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFy
Z3VtZW50TnVtYmVyLCBKU0NvbnRleHQgKmNvbnRleHQsIEpTVmFsdWVSZWYgYXJndW1lbnQsIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIFQgdmFsdWUgPSAo
VClKU0M6OnRvSW50MzIoSlNWYWx1ZVRvTnVtYmVyKFtjb250ZXh0IGdsb2JhbENvbnRleHRSZWZd
LCBhcmd1bWVudCwgZXhjZXB0aW9uKSk7CisgICAgICAgIFQgdmFsdWUgPSAoVClKU0M6OnRvSW50
MzIoSlNWYWx1ZVRvTnVtYmVyKFtjb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0sIGFyZ3VtZW50
LCBleGNlcHRpb24pKTsKICAgICAgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6JnZhbHVlIGF0
SW5kZXg6YXJndW1lbnROdW1iZXJdOwogICAgIH0KIH07CkBAIC03NSw3ICs3NSw3IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CiBjbGFzcyBDYWxsYmFja0FyZ3VtZW50RG91YmxlIDogcHVibGljIENh
bGxiYWNrQXJndW1lbnQgewogICAgIHZpcnR1YWwgdm9pZCBzZXQoTlNJbnZvY2F0aW9uICppbnZv
Y2F0aW9uLCBOU0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29udGV4dCAqY29udGV4dCwgSlNW
YWx1ZVJlZiBhcmd1bWVudCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKSBvdmVycmlkZQogICAgIHsK
LSAgICAgICAgVCB2YWx1ZSA9IChUKUpTVmFsdWVUb051bWJlcihbY29udGV4dCBnbG9iYWxDb250
ZXh0UmVmXSwgYXJndW1lbnQsIGV4Y2VwdGlvbik7CisgICAgICAgIFQgdmFsdWUgPSAoVClKU1Zh
bHVlVG9OdW1iZXIoW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSwgYXJndW1lbnQsIGV4Y2Vw
dGlvbik7CiAgICAgICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZ2YWx1ZSBhdEluZGV4OmFy
Z3VtZW50TnVtYmVyXTsKICAgICB9CiB9OwpAQCAtODMsNyArODMsNyBAQCBjbGFzcyBDYWxsYmFj
a0FyZ3VtZW50RG91YmxlIDogcHVibGljIENhCiBjbGFzcyBDYWxsYmFja0FyZ3VtZW50SlNWYWx1
ZSA6IHB1YmxpYyBDYWxsYmFja0FyZ3VtZW50IHsKICAgICB2aXJ0dWFsIHZvaWQgc2V0KE5TSW52
b2NhdGlvbiAqaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVtYmVyLCBKU0NvbnRleHQg
KmNvbnRleHQsIEpTVmFsdWVSZWYgYXJndW1lbnQsIEpTVmFsdWVSZWYqKSBvdmVycmlkZQogICAg
IHsKLSAgICAgICAgSlNWYWx1ZSAqdmFsdWUgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTphcmd1
bWVudCBpbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIEpTVmFsdWUgKnZhbHVlID0gW0pTVmFs
dWUgdmFsdWVXaXRoSlNWYWx1ZVJlZjphcmd1bWVudCBpbkNvbnRleHQ6Y29udGV4dF07CiAgICAg
ICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZ2YWx1ZSBhdEluZGV4OmFyZ3VtZW50TnVtYmVy
XTsKICAgICB9CiB9OwpAQCAtMTEzLDcgKzExMyw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFs
IHZvaWQgc2V0KE5TSW52b2NhdGlvbiAqaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVt
YmVyLCBKU0NvbnRleHQgKmNvbnRleHQsIEpTVmFsdWVSZWYgYXJndW1lbnQsIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIEpTR2xvYmFsQ29udGV4dFJlZiBj
b250ZXh0UmVmID0gW2NvbnRleHQgZ2xvYmFsQ29udGV4dFJlZl07CisgICAgICAgIEpTR2xvYmFs
Q29udGV4dFJlZiBjb250ZXh0UmVmID0gW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXTsKIAog
ICAgICAgICBpZCBvYmplY3QgPSB0cnlVbndyYXBPYmpjT2JqZWN0KGNvbnRleHRSZWYsIGFyZ3Vt
ZW50KTsKICAgICAgICAgaWYgKG9iamVjdCAmJiBbb2JqZWN0IGlzS2luZE9mQ2xhc3M6bV9jbGFz
c10pIHsKQEAgLTEzNiw3ICsxMzYsNyBAQCBwcml2YXRlOgogY2xhc3MgQ2FsbGJhY2tBcmd1bWVu
dE5TTnVtYmVyIDogcHVibGljIENhbGxiYWNrQXJndW1lbnQgewogICAgIHZpcnR1YWwgdm9pZCBz
ZXQoTlNJbnZvY2F0aW9uICppbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpT
Q29udGV4dCAqY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgaWQgdmFsdWUgPSB2YWx1ZVRvTnVtYmVyKFtj
b250ZXh0IGdsb2JhbENvbnRleHRSZWZdLCBhcmd1bWVudCwgZXhjZXB0aW9uKTsKKyAgICAgICAg
aWQgdmFsdWUgPSB2YWx1ZVRvTnVtYmVyKFtjb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0sIGFy
Z3VtZW50LCBleGNlcHRpb24pOwogICAgICAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomdmFs
dWUgYXRJbmRleDphcmd1bWVudE51bWJlcl07CiAgICAgfQogfTsKQEAgLTE0NCw3ICsxNDQsNyBA
QCBjbGFzcyBDYWxsYmFja0FyZ3VtZW50TlNOdW1iZXIgOiBwdWJsaWMgCiBjbGFzcyBDYWxsYmFj
a0FyZ3VtZW50TlNTdHJpbmcgOiBwdWJsaWMgQ2FsbGJhY2tBcmd1bWVudCB7CiAgICAgdmlydHVh
bCB2b2lkIHNldChOU0ludm9jYXRpb24gKmludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51
bWJlciwgSlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3VtZW50LCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pIG92ZXJyaWRlCiAgICAgewotICAgICAgICBpZCB2YWx1ZSA9IHZhbHVlVG9T
dHJpbmcoW2NvbnRleHQgZ2xvYmFsQ29udGV4dFJlZl0sIGFyZ3VtZW50LCBleGNlcHRpb24pOwor
ICAgICAgICBpZCB2YWx1ZSA9IHZhbHVlVG9TdHJpbmcoW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0
UmVmXSwgYXJndW1lbnQsIGV4Y2VwdGlvbik7CiAgICAgICAgIFtpbnZvY2F0aW9uIHNldEFyZ3Vt
ZW50OiZ2YWx1ZSBhdEluZGV4OmFyZ3VtZW50TnVtYmVyXTsKICAgICB9CiB9OwpAQCAtMTUyLDcg
KzE1Miw3IEBAIGNsYXNzIENhbGxiYWNrQXJndW1lbnROU1N0cmluZyA6IHB1YmxpYyAKIGNsYXNz
IENhbGxiYWNrQXJndW1lbnROU0RhdGUgOiBwdWJsaWMgQ2FsbGJhY2tBcmd1bWVudCB7CiAgICAg
dmlydHVhbCB2b2lkIHNldChOU0ludm9jYXRpb24gKmludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1
bWVudE51bWJlciwgSlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3VtZW50LCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pIG92ZXJyaWRlCiAgICAgewotICAgICAgICBpZCB2YWx1ZSA9IHZh
bHVlVG9EYXRlKFtjb250ZXh0IGdsb2JhbENvbnRleHRSZWZdLCBhcmd1bWVudCwgZXhjZXB0aW9u
KTsKKyAgICAgICAgaWQgdmFsdWUgPSB2YWx1ZVRvRGF0ZShbY29udGV4dCBKU0dsb2JhbENvbnRl
eHRSZWZdLCBhcmd1bWVudCwgZXhjZXB0aW9uKTsKICAgICAgICAgW2ludm9jYXRpb24gc2V0QXJn
dW1lbnQ6JnZhbHVlIGF0SW5kZXg6YXJndW1lbnROdW1iZXJdOwogICAgIH0KIH07CkBAIC0xNjAs
NyArMTYwLDcgQEAgY2xhc3MgQ2FsbGJhY2tBcmd1bWVudE5TRGF0ZSA6IHB1YmxpYyBDYQogY2xh
c3MgQ2FsbGJhY2tBcmd1bWVudE5TQXJyYXkgOiBwdWJsaWMgQ2FsbGJhY2tBcmd1bWVudCB7CiAg
ICAgdmlydHVhbCB2b2lkIHNldChOU0ludm9jYXRpb24gKmludm9jYXRpb24sIE5TSW50ZWdlciBh
cmd1bWVudE51bWJlciwgSlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3VtZW50LCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pIG92ZXJyaWRlCiAgICAgewotICAgICAgICBpZCB2YWx1ZSA9
IHZhbHVlVG9BcnJheShbY29udGV4dCBnbG9iYWxDb250ZXh0UmVmXSwgYXJndW1lbnQsIGV4Y2Vw
dGlvbik7CisgICAgICAgIGlkIHZhbHVlID0gdmFsdWVUb0FycmF5KFtjb250ZXh0IEpTR2xvYmFs
Q29udGV4dFJlZl0sIGFyZ3VtZW50LCBleGNlcHRpb24pOwogICAgICAgICBbaW52b2NhdGlvbiBz
ZXRBcmd1bWVudDomdmFsdWUgYXRJbmRleDphcmd1bWVudE51bWJlcl07CiAgICAgfQogfTsKQEAg
LTE2OCw3ICsxNjgsNyBAQCBjbGFzcyBDYWxsYmFja0FyZ3VtZW50TlNBcnJheSA6IHB1YmxpYyBD
CiBjbGFzcyBDYWxsYmFja0FyZ3VtZW50TlNEaWN0aW9uYXJ5IDogcHVibGljIENhbGxiYWNrQXJn
dW1lbnQgewogICAgIHZpcnR1YWwgdm9pZCBzZXQoTlNJbnZvY2F0aW9uICppbnZvY2F0aW9uLCBO
U0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29udGV4dCAqY29udGV4dCwgSlNWYWx1ZVJlZiBh
cmd1bWVudCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAg
aWQgdmFsdWUgPSB2YWx1ZVRvRGljdGlvbmFyeShbY29udGV4dCBnbG9iYWxDb250ZXh0UmVmXSwg
YXJndW1lbnQsIGV4Y2VwdGlvbik7CisgICAgICAgIGlkIHZhbHVlID0gdmFsdWVUb0RpY3Rpb25h
cnkoW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSwgYXJndW1lbnQsIGV4Y2VwdGlvbik7CiAg
ICAgICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZ2YWx1ZSBhdEluZGV4OmFyZ3VtZW50TnVt
YmVyXTsKICAgICB9CiB9OwpAQCAtMTg0LDcgKzE4NCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgdmlydHVhbCB2b2lkIHNldChOU0ludm9jYXRpb24gKmludm9jYXRpb24sIE5TSW50ZWdlciBh
cmd1bWVudE51bWJlciwgSlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3VtZW50LCBK
U1ZhbHVlUmVmKikgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIEpTVmFsdWUgKnZhbHVlID0gW0pT
VmFsdWUgdmFsdWVXaXRoVmFsdWU6YXJndW1lbnQgaW5Db250ZXh0OmNvbnRleHRdOworICAgICAg
ICBKU1ZhbHVlICp2YWx1ZSA9IFtKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6YXJndW1lbnQg
aW5Db250ZXh0OmNvbnRleHRdOwogICAgICAgICBbbV9jb252ZXJzaW9uSW52b2NhdGlvbiBpbnZv
a2VXaXRoVGFyZ2V0OnZhbHVlXTsKICAgICAgICAgW21fY29udmVyc2lvbkludm9jYXRpb24gZ2V0
UmV0dXJuVmFsdWU6bV9idWZmZXJdOwogICAgICAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDpt
X2J1ZmZlciBhdEluZGV4OmFyZ3VtZW50TnVtYmVyXTsKQEAgLTI3NSw3ICsyNzUsNyBAQCBwdWJs
aWM6CiBjbGFzcyBDYWxsYmFja1Jlc3VsdFZvaWQgOiBwdWJsaWMgQ2FsbGJhY2tSZXN1bHQgewog
ICAgIHZpcnR1YWwgSlNWYWx1ZVJlZiBnZXQoTlNJbnZvY2F0aW9uICosIEpTQ29udGV4dCAqY29u
dGV4dCwgSlNWYWx1ZVJlZiopIG92ZXJyaWRlCiAgICAgewotICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoW2NvbnRleHQgZ2xvYmFsQ29udGV4dFJlZl0pOworICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSk7CiAg
ICAgfQogfTsKIApAQCAtMjk0LDcgKzI5NCw3IEBAIGNsYXNzIENhbGxiYWNrUmVzdWx0TnVtZXJp
YyA6IHB1YmxpYyBDYWwKICAgICB7CiAgICAgICAgIFQgdmFsdWU7CiAgICAgICAgIFtpbnZvY2F0
aW9uIGdldFJldHVyblZhbHVlOiZ2YWx1ZV07Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZU51
bWJlcihbY29udGV4dCBnbG9iYWxDb250ZXh0UmVmXSwgdmFsdWUpOworICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VOdW1iZXIoW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSwgdmFsdWUpOwog
ICAgIH0KIH07CiAKQEAgLTMwMyw3ICszMDMsNyBAQCBjbGFzcyBDYWxsYmFja1Jlc3VsdEJvb2xl
YW4gOiBwdWJsaWMgQ2FsCiAgICAgewogICAgICAgICBib29sIHZhbHVlOwogICAgICAgICBbaW52
b2NhdGlvbiBnZXRSZXR1cm5WYWx1ZTomdmFsdWVdOwotICAgICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VCb29sZWFuKFtjb250ZXh0IGdsb2JhbENvbnRleHRSZWZdLCB2YWx1ZSk7CisgICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZUJvb2xlYW4oW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSwgdmFs
dWUpOwogICAgIH0KIH07CiAKQEAgLTQ1MCw3ICs0NTAsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBv
YmpDQ2FsbGJhY2tGdW5jdGlvbkNhCiAgICAgT2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsKiBpbXBs
ID0gY2FsbGJhY2stPmltcGwoKTsKICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBpbXBsLT5jb250
ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KSB7Ci0gICAgICAgIGNvbnRleHQgPSBbSlNDb250ZXh0
IGNvbnRleHRXaXRoR2xvYmFsQ29udGV4dFJlZjp0b0dsb2JhbFJlZih0b0pTKGNhbGxlckNvbnRl
eHQpLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSldOworICAgICAgICBjb250
ZXh0ID0gW0pTQ29udGV4dCBjb250ZXh0V2l0aEpTR2xvYmFsQ29udGV4dFJlZjp0b0dsb2JhbFJl
Zih0b0pTKGNhbGxlckNvbnRleHQpLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMo
KSldOwogICAgICAgICBpbXBsLT5zZXRDb250ZXh0KGNvbnRleHQpOwogICAgIH0KIApAQCAtNDg4
LDcgKzQ4OCw3IEBAIHZvaWQgT2JqQ0NhbGxiYWNrRnVuY3Rpb246OmRlc3Ryb3koSlNDZWwKIAog
SlNWYWx1ZVJlZiBPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGw6OmNhbGwoSlNDb250ZXh0ICpjb250
ZXh0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3Qg
SlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIEpT
R2xvYmFsQ29udGV4dFJlZiBjb250ZXh0UmVmID0gW2NvbnRleHQgZ2xvYmFsQ29udGV4dFJlZl07
CisgICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHRSZWYgPSBbY29udGV4dCBKU0dsb2JhbENv
bnRleHRSZWZdOwogCiAgICAgc2l6ZV90IGZpcnN0QXJndW1lbnQ7CiAgICAgc3dpdGNoIChtX3R5
cGUpIHsKQEAgLTU3OSw3ICs1NzksNyBAQCBzdGF0aWMgSlNPYmplY3RSZWYgb2JqQ0NhbGxiYWNr
RnVuY3Rpb25GCiAgICAgICAgICsrYXJndW1lbnRDb3VudDsKICAgICB9CiAKLSAgICBKU0M6OkV4
ZWNTdGF0ZSogZXhlYyA9IHRvSlMoW2NvbnRleHQgZ2xvYmFsQ29udGV4dFJlZl0pOworICAgIEpT
Qzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhbY29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdKTsK
ICAgICBKU0M6OkFQSUVudHJ5U2hpbSBzaGltKGV4ZWMpOwogICAgIE93blB0cjxKU0M6Ok9iakND
YWxsYmFja0Z1bmN0aW9uSW1wbD4gaW1wbCA9IGFkb3B0UHRyKG5ldyBKU0M6Ok9iakNDYWxsYmFj
a0Z1bmN0aW9uSW1wbChjb250ZXh0LCBpbnZvY2F0aW9uLCB0eXBlLCBpbnN0YW5jZUNsYXNzLCBh
cmd1bWVudHMucmVsZWFzZSgpLCByZXN1bHQucmVsZWFzZSgpKSk7CiAgICAgLy8gRklYTUU6IE1h
eWJlIHdlIGNvdWxkIHN1cHBvcnQgaGF2aW5nIHRoZSBzZWxlY3RvciBhcyB0aGUgbmFtZSBvZiB0
aGUgZnVuY3Rpb24gdG8gbWFrZSBpdCBhIGJpdCBtb3JlIHVzZXItZnJpZW5kbHkgZnJvbSB0aGUg
SlMgc2lkZT8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGku
bW0JKHJldmlzaW9uIDE0OTMyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMv
dGVzdGFwaS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjU2LDcgKzY1Niw3IEBAIHZvaWQgdGVzdE9i
amVjdGl2ZUNBUEkoKQogICAgICAgICAgICAgW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJ0ZXN0
T2JqZWN0ID0gdW5kZWZpbmVkIl07CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIEpTU3lu
Y2hyb25vdXNHYXJiYWdlQ29sbGVjdEZvckRlYnVnZ2luZyhbY29udGV4dCBnbG9iYWxDb250ZXh0
UmVmXSk7CisgICAgICAgIEpTU3luY2hyb25vdXNHYXJiYWdlQ29sbGVjdEZvckRlYnVnZ2luZyhb
Y29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdKTsKIAogICAgICAgICBAYXV0b3JlbGVhc2Vwb29s
IHsKICAgICAgICAgICAgIGNvbnRleHRbQCJ0ZXN0T2JqZWN0Il0gPSB0ZXN0T2JqZWN0OwpAQCAt
Njg4LDcgKzY4OCw3IEBAIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoKQogICAgICAgICAgICAgY2hl
Y2tSZXN1bHQoQCJFdmVudCBoYW5kbGVyIG9uY2xpY2siLCBbcmVzdWx0IHRvQm9vbF0pOwogICAg
ICAgICB9CiAKLSAgICAgICAgSlNTeW5jaHJvbm91c0dhcmJhZ2VDb2xsZWN0Rm9yRGVidWdnaW5n
KFtjb250ZXh0IGdsb2JhbENvbnRleHRSZWZdKTsKKyAgICAgICAgSlNTeW5jaHJvbm91c0dhcmJh
Z2VDb2xsZWN0Rm9yRGVidWdnaW5nKFtjb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0pOwogCiAg
ICAgICAgIEBhdXRvcmVsZWFzZXBvb2wgewogICAgICAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0g
W2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJ0ZXN0WFlaLm9uY2xpY2siXTsKQEAgLTcwOCw3ICs3
MDgsNyBAQCB2b2lkIHRlc3RPYmplY3RpdmVDQVBJKCkKICAgICAgICAgICAgICJdOwogICAgICAg
ICB9CiAKLSAgICAgICAgSlNTeW5jaHJvbm91c0dhcmJhZ2VDb2xsZWN0Rm9yRGVidWdnaW5nKFtj
b250ZXh0IGdsb2JhbENvbnRleHRSZWZdKTsKKyAgICAgICAgSlNTeW5jaHJvbm91c0dhcmJhZ2VD
b2xsZWN0Rm9yRGVidWdnaW5nKFtjb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0pOwogCiAgICAg
ICAgIEBhdXRvcmVsZWFzZXBvb2wgewogICAgICAgICAgICAgW3Rlc3RYWVogY2xpY2tdOwpAQCAt
NzMwLDcgKzczMCw3IEBAIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoKQogICAgICAgICBAYXV0b3Jl
bGVhc2Vwb29sIHsKICAgICAgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0
IGFsbG9jXSBpbml0V2l0aFZpcnR1YWxNYWNoaW5lOnZtXTsKICAgICAgICAgICAgIGNvbnRleHRb
QCJ0ZXN0T2JqZWN0Il0gPSB0ZXN0T2JqZWN0OwotICAgICAgICAgICAgSlNTeW5jaHJvbm91c0dh
cmJhZ2VDb2xsZWN0Rm9yRGVidWdnaW5nKFtjb250ZXh0IGdsb2JhbENvbnRleHRSZWZdKTsKKyAg
ICAgICAgICAgIEpTU3luY2hyb25vdXNHYXJiYWdlQ29sbGVjdEZvckRlYnVnZ2luZyhbY29udGV4
dCBKU0dsb2JhbENvbnRleHRSZWZdKTsKICAgICAgICAgICAgIGNoZWNrUmVzdWx0KEAid2VhayB2
YWx1ZSA9PSBuaWwiLCAhW3dlYWtWYWx1ZSB2YWx1ZV0pOwogICAgICAgICAgICAgY2hlY2tSZXN1
bHQoQCJyb290IGlzIHN0aWxsIGFsaXZlIiwgIVtjb250ZXh0W0AidGVzdE9iamVjdCJdIGlzVW5k
ZWZpbmVkXSk7CiAgICAgICAgIH0KQEAgLTc2MCw3ICs3NjAsNyBAQCB2b2lkIHRlc3RPYmplY3Rp
dmVDQVBJKCkKICAgICAgICAgICAgIFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiZ2V0TGFzdE5v
ZGVJbkNoYWluKHJvb3QpLm15Q3VzdG9tUHJvcGVydHkgPSA0MjsiXTsKICAgICAgICAgfQogCi0g
ICAgICAgIEpTU3luY2hyb25vdXNHYXJiYWdlQ29sbGVjdEZvckRlYnVnZ2luZyhbY29udGV4dCBn
bG9iYWxDb250ZXh0UmVmXSk7CisgICAgICAgIEpTU3luY2hyb25vdXNHYXJiYWdlQ29sbGVjdEZv
ckRlYnVnZ2luZyhbY29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdKTsKIAogICAgICAgICBKU1Zh
bHVlICpteUN1c3RvbVByb3BlcnR5ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJnZXRMYXN0
Tm9kZUluQ2hhaW4ocm9vdCkubXlDdXN0b21Qcm9wZXJ0eSJdOwogICAgICAgICBjaGVja1Jlc3Vs
dChAIk15IGN1c3RvbSBwcm9wZXJ0eSA9PSA0MiIsIFtteUN1c3RvbVByb3BlcnR5IGlzTnVtYmVy
XSAmJiBbbXlDdXN0b21Qcm9wZXJ0eSB0b0ludDMyXSA9PSA0Mik7CkBAIC03OTUsNyArNzk1LDcg
QEAgdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSSgpCiAgICAgICAgICAgICBbcm9vdCByZW1vdmVDaGls
ZEF0SW5kZXg6MF07CiAgICAgICAgIH0KIAotICAgICAgICBKU1N5bmNocm9ub3VzR2FyYmFnZUNv
bGxlY3RGb3JEZWJ1Z2dpbmcoW2NvbnRleHQgZ2xvYmFsQ29udGV4dFJlZl0pOworICAgICAgICBK
U1N5bmNocm9ub3VzR2FyYmFnZUNvbGxlY3RGb3JEZWJ1Z2dpbmcoW2NvbnRleHQgSlNHbG9iYWxD
b250ZXh0UmVmXSk7CiAKICAgICAgICAgSlNWYWx1ZSAqbXlDdXN0b21Qcm9wZXJ0eSA9IFtjb250
ZXh0IGV2YWx1YXRlU2NyaXB0OkAiZ2V0TGFzdE5vZGVJbkNoYWluKHJvb3QpLm15Q3VzdG9tUHJv
cGVydHkiXTsKICAgICAgICAgY2hlY2tSZXN1bHQoQCJkdXBsaWNhdGUgY2FsbHMgdG8gYWRkTWFu
YWdlZFJlZmVyZW5jZSBkb24ndCBjYXVzZSB0aGluZ3MgdG8gZGllIiwgW215Q3VzdG9tUHJvcGVy
dHkgaXNOdW1iZXJdICYmIFtteUN1c3RvbVByb3BlcnR5IHRvSW50MzJdID09IDQyKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE0OTM5OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDEzLTA0LTMwICBHZW9mZnJleSBHYXJl
biAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgT2JqZWN0aXZlLUMgSmF2YVNjcmlwdENv
cmUgQVBJIHNob3VsZCBwdWJsaWNseSBzdXBwb3J0IGJyaWRnaW5nIHRvIEMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNTQ0NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEp
LgorCisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmphdmFTY3JpcHRDb250ZXh0KToKKyAgICAg
ICAgKiBiaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbToKKyAgICAgICAgKC1bV2ViU2Ny
aXB0T2JqZWN0IEpTVmFsdWVdKToKKwogMjAxMy0wNC0zMCAgU2ltb24gRnJhc2VyICA8c2ltb24u
ZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggYW4gaXNzdWUgd2l0aCBKU1BlcmZvcm1h
bmNlLmNwcCBpbiB0aGUgV2ViQ29yZS54Y29kZXByb2ogd2hlcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJNYWMubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbQkocmV2aXNpb24g
MTQ5MzIyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBAIEpTQ29udGV4dCAqU2NyaXB0
Q29udHJvbGxlcjo6amF2YVNjcmlwdEMKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogICAgIGlm
ICghY2FuRXhlY3V0ZVNjcmlwdHMoTm90QWJvdXRUb0V4ZWN1dGVTY3JpcHQpKQogICAgICAgICBy
ZXR1cm4gMDsKLSAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbSlNDb250ZXh0IGNvbnRleHRXaXRo
R2xvYmFsQ29udGV4dFJlZjp0b0dsb2JhbFJlZihiaW5kaW5nUm9vdE9iamVjdCgpLT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpKV07CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW0pTQ29u
dGV4dCBjb250ZXh0V2l0aEpTR2xvYmFsQ29udGV4dFJlZjp0b0dsb2JhbFJlZihiaW5kaW5nUm9v
dE9iamVjdCgpLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKV07CiAgICAgcmV0dXJuIGNv
bnRleHQ7CiAjZWxzZQogICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHJldmlzaW9uIDE0OTMyMikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCSh3b3JraW5nIGNv
cHkpCkBAIC01NzksOCArNTc5LDggQEAgLSAoSlNWYWx1ZSAqKUpTVmFsdWUKICAgICBpZiAoIVtz
ZWxmIF9pc1NhZmVTY3JpcHRdKQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICByZXR1cm4g
W0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6W3NlbGYgSlNPYmplY3RdIAotICAgICAgICAgICAgICAg
ICAgICBpbkNvbnRleHQ6W0pTQ29udGV4dCBjb250ZXh0V2l0aEdsb2JhbENvbnRleHRSZWY6W3Nl
bGYgX2dsb2JhbENvbnRleHRSZWZdXV07CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aEpT
VmFsdWVSZWY6W3NlbGYgSlNPYmplY3RdIAorICAgICAgICAgICAgICAgICAgICBpbkNvbnRleHQ6
W0pTQ29udGV4dCBjb250ZXh0V2l0aEpTR2xvYmFsQ29udGV4dFJlZjpbc2VsZiBfZ2xvYmFsQ29u
dGV4dFJlZl1dXTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAx
NDkzOTgpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNSBAQAorMjAxMy0wNC0zMCAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUu
Y29tPgorCisgICAgICAgIE9iamVjdGl2ZS1DIEphdmFTY3JpcHRDb3JlIEFQSSBzaG91bGQgcHVi
bGljbHkgc3VwcG9ydCBicmlkZ2luZyB0byBDCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMTU0NDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAgICAgICgtW1dl
YkZyYW1lIF9qYXZhU2NyaXB0Q29udGV4dEZvclNjcmlwdFdvcmxkOl0pOgorICAgICAgICAqIFdl
YlZpZXcvV2ViU2NyaXB0V29ybGQubW06CisgICAgICAgICgrW1dlYlNjcmlwdFdvcmxkIHNjcmlw
dFdvcmxkRm9ySmF2YVNjcmlwdENvbnRleHQ6XSk6CisKIDIwMTMtMDQtMzAgIEFuZGVycyBDYXJs
c3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3JlIFN0b3JhZ2VUcmFja2Vy
IGNsZWFudXAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2aXNp
b24gMTQ5MzIyKQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkod29y
a2luZyBjb3B5KQpAQCAtMTA5NSw3ICsxMDk1LDcgQEAgLSAoSlNDb250ZXh0ICopX2phdmFTY3Jp
cHRDb250ZXh0Rm9yU2NyaQogICAgIEpTR2xvYmFsQ29udGV4dFJlZiBnbG9iYWxDb250ZXh0UmVm
ID0gW3NlbGYgX2dsb2JhbENvbnRleHRGb3JTY3JpcHRXb3JsZDp3b3JsZF07CiAgICAgaWYgKCFn
bG9iYWxDb250ZXh0UmVmKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gW0pTQ29udGV4
dCBjb250ZXh0V2l0aEdsb2JhbENvbnRleHRSZWY6Z2xvYmFsQ29udGV4dFJlZl07CisgICAgcmV0
dXJuIFtKU0NvbnRleHQgY29udGV4dFdpdGhKU0dsb2JhbENvbnRleHRSZWY6Z2xvYmFsQ29udGV4
dFJlZl07CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJT
Y3JpcHRXb3JsZC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlNjcmlwdFdvcmxkLm1tCShyZXZpc2lvbiAxNDkzMjIpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlNjcmlwdFdvcmxkLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNyArMTEwLDcg
QEAgKyAoV2ViU2NyaXB0V29ybGQgKilzY3JpcHRXb3JsZEZvckdsb2JhbAogI2lmIEpTQ19PQkpD
X0FQSV9FTkFCTEVECiArIChXZWJTY3JpcHRXb3JsZCAqKXNjcmlwdFdvcmxkRm9ySmF2YVNjcmlw
dENvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQKIHsKLSAgICByZXR1cm4gW3NlbGYgc2NyaXB0
V29ybGRGb3JHbG9iYWxDb250ZXh0Oltjb250ZXh0IGdsb2JhbENvbnRleHRSZWZdXTsKKyAgICBy
ZXR1cm4gW3NlbGYgc2NyaXB0V29ybGRGb3JHbG9iYWxDb250ZXh0Oltjb250ZXh0IEpTR2xvYmFs
Q29udGV4dFJlZl1dOwogfQogI2VuZGlmCiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>