<?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>100177</bug_id>
          
          <creation_ts>2012-10-23 18:25:08 -0700</creation_ts>
          <short_desc>Update mozilla&apos;s CheckedInt.h to the latest version</short_desc>
          <delta_ts>2012-10-24 13:34:08 -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>WebGL</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="Zhenyao Mo">zmo</reporter>
          <assigned_to name="Zhenyao Mo">zmo</assigned_to>
          <cc>bjacob</cc>
    
    <cc>dino</cc>
    
    <cc>jwalden+bwo</cc>
    
    <cc>kbr</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>749191</commentid>
    <comment_count>0</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2012-10-23 18:25:08 -0700</bug_when>
    <thetext>There are a few bugs being fixed since we last took this file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749197</commentid>
    <comment_count>1</comment_count>
      <attachid>170284</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2012-10-23 18:30:38 -0700</bug_when>
    <thetext>Created attachment 170284
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749198</commentid>
    <comment_count>2</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2012-10-23 18:31:35 -0700</bug_when>
    <thetext>Ken, please have a look.  I made minimum modifications (only the absolutely necessary ones) to the original file: see the comments right after the copy right notice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749202</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-23 18:33:32 -0700</bug_when>
    <thetext>Attachment 170284 did not pass style-queue:

Source/WebCore/html/canvas/CheckedInt.h:15:  #ifndef header guard has wrong style, please use: CheckedInt_h  [build/header_guard] [5]
Source/WebCore/html/canvas/CheckedInt.h:66:  Missing space inside { }.  [whitespace/braces] [5]
Source/WebCore/html/canvas/CheckedInt.h:70:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/html/canvas/CheckedInt.h:76:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/html/canvas/CheckedInt.h:82:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/html/canvas/CheckedInt.h:86:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/html/canvas/CheckedInt.h:90:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/html/canvas/CheckedInt.h:94:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/html/canvas/CheckedInt.h:98:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/html/canvas/CheckedInt.h:102:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/html/canvas/CheckedInt.h:106:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/html/canvas/CheckedInt.h:110:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/html/canvas/CheckedInt.h:115:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/html/canvas/CheckedInt.h:119:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/html/canvas/CheckedInt.h:123:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/html/canvas/CheckedInt.h:127:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/html/canvas/CheckedInt.h:131:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/html/canvas/CheckedInt.h:134:  Omit int when using unsigned  [runtime/unsigned] [1]
Source/WebCore/html/canvas/CheckedInt.h:135:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/html/canvas/CheckedInt.h:139:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/html/canvas/CheckedInt.h:143:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/html/canvas/CheckedInt.h:152:  Missing space inside { }.  [whitespace/braces] [5]
Source/WebCore/html/canvas/CheckedInt.h:156:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/html/canvas/CheckedInt.h:160:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/html/canvas/CheckedInt.h:164:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/html/canvas/CheckedInt.h:168:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/html/canvas/CheckedInt.h:172:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/html/canvas/CheckedInt.h:176:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/html/canvas/CheckedInt.h:180:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/html/canvas/CheckedInt.h:184:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/html/canvas/CheckedInt.h:188:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/html/canvas/CheckedInt.h:190:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:195:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/html/canvas/CheckedInt.h:203:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:204:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:205:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:210:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/html/canvas/CheckedInt.h:216:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/html/canvas/CheckedInt.h:222:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/html/canvas/CheckedInt.h:223:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:227:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:242:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/html/canvas/CheckedInt.h:259:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:260:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:261:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:262:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:263:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:264:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:273:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:277:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:278:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:279:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:281:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/html/canvas/CheckedInt.h:286:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/html/canvas/CheckedInt.h:292:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/html/canvas/CheckedInt.h:298:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/html/canvas/CheckedInt.h:303:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:304:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:305:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:306:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:307:  Missing space inside { }.  [whitespace/braces] [5]
Source/WebCore/html/canvas/CheckedInt.h:311:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/html/canvas/CheckedInt.h:314:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:323:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:332:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:341:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:350:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:351:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:352:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:360:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:367:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:368:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:369:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:370:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:371:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:373:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:374:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:375:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:376:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:377:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:378:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:385:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:386:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:387:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:388:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:389:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:390:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:392:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:393:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:394:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:398:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:399:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:400:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:401:  Missing space inside { }.  [whitespace/braces] [5]
Source/WebCore/html/canvas/CheckedInt.h:408:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:409:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:410:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:419:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:420:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:422:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/html/canvas/CheckedInt.h:422:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:425:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:427:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:428:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:429:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:431:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:432:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:433:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:434:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:443:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/html/canvas/CheckedInt.h:443:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:451:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:458:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:459:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/html/canvas/CheckedInt.h:459:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/html/canvas/CheckedInt.h:459:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:460:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:466:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/html/canvas/CheckedInt.h:471:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/html/canvas/CheckedInt.h:478:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:558:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:565:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:566:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:569:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:583:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:586:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:587:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:593:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:594:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:600:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:601:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:611:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:616:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:621:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:626:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:631:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:637:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:638:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:639:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:640:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:642:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:643:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:644:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:667:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:673:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:674:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:680:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:681:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:682:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:688:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:689:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:695:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:696:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:697:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
[3]
Source/WebCore/html/canvas/CheckedInt.h:700:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:720:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:722:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:724:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:725:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:726:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:764:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:770:  COMPOUND_OP is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/html/canvas/CheckedInt.h:772:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:773:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:778:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:783:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:789:  Missing spaces around /  [whitespace/operators] [3]
Source/WebCore/html/canvas/CheckedInt.h:797:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/CheckedInt.h:804:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 169 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749205</commentid>
    <comment_count>4</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2012-10-23 18:36:06 -0700</bug_when>
    <thetext>Built and tested with WebGL conformance tests 1.0.1 on Linux.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749214</commentid>
    <comment_count>5</comment_count>
    <who name="Benoit Jacob">bjacob</who>
    <bug_when>2012-10-23 18:42:50 -0700</bug_when>
    <thetext>This update should allow you to significantly reduce your local diff, as we have moved to using stdint types instead of PR types.

Also, we have fixed an important bug whereby we were relying on signed integer overflow being well-defined behavior, which it isn&apos;t. The new version runs without any errors reported by IOC (Integer Overflow Checker).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749229</commentid>
    <comment_count>6</comment_count>
      <attachid>170284</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-10-23 19:08:14 -0700</bug_when>
    <thetext>Comment on attachment 170284
Patch

Sounds fine; r=me. Assuming that this has been well tested by Mozilla too. Let&apos;s let the EWS test this on all platforms before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749238</commentid>
    <comment_count>7</comment_count>
    <who name="Benoit Jacob">bjacob</who>
    <bug_when>2012-10-23 19:16:54 -0700</bug_when>
    <thetext>http://hg.mozilla.org/mozilla-central/log/d3de9d8e2b5b/mfbt/CheckedInt.h shows that we haven&apos;t changed this file significantly since July 8, Bug 768538, which was released in Firefox 16, so it&apos;s already tested on our Release channel.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749328</commentid>
    <comment_count>8</comment_count>
    <who name="Jeff Walden (remove +bwo to email)">jwalden+bwo</who>
    <bug_when>2012-10-23 21:44:30 -0700</bug_when>
    <thetext>There&apos;s also http://hg.mozilla.org/mozilla-central/file/default/mfbt/tests/TestCheckedInt.cpp for a test for it -- pretty self-contained, you can probably shoehorn it into your test suites pretty easily.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749983</commentid>
    <comment_count>9</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2012-10-24 13:34:08 -0700</bug_when>
    <thetext>Committed r132393: &lt;http://trac.webkit.org/changeset/132393&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170284</attachid>
            <date>2012-10-23 18:30:38 -0700</date>
            <delta_ts>2012-10-23 19:08:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100177-20121023182914.patch</filename>
            <type>text/plain</type>
            <size>53097</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMjI4OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBACisyMDEyLTEwLTIzICBaaGVueWFv
IE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgVXBkYXRlIG1vemlsbGEncyBDaGVja2Vk
SW50LmggdG8gdGhlIGxhdGVzdCB2ZXJzaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMDAxNzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIGh0bWwvY2FudmFzL0NoZWNrZWRJbnQuaDogU3luYyB3aXRo
IG1vemlsbGEncyBjb3B5IHdpdGggbWludW11bSBtb2RpZmljYXRpb25zLgorICAgICAgICAoZGV0
YWlsKToKKyAgICAgICAgKElzU3VwcG9ydGVkUGFzczIpOgorICAgICAgICAoSXNTdXBwb3J0ZWQp
OgorICAgICAgICAoVW5zaWduZWRUeXBlKToKKyAgICAgICAgKElzU2lnbmVkKToKKyAgICAgICAg
KFR3aWNlQmlnZ2VyVHlwZSk6CisgICAgICAgIChQb3NpdGlvbk9mU2lnbkJpdCk6CisgICAgICAg
IChNaW5WYWx1ZSk6CisgICAgICAgIChNYXhWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpkZXRh
aWw6Okhhc1NpZ25CaXQpOgorICAgICAgICAoV2ViQ29yZTo6ZGV0YWlsOjpCaW5hcnlDb21wbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmRldGFpbDo6SXNJblJhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OmRldGFpbDo6SXNBZGRWYWxpZCk6CisgICAgICAgIChXZWJDb3JlOjpkZXRhaWw6Oklz
U3ViVmFsaWQpOgorICAgICAgICAoV2ViQ29yZTo6ZGV0YWlsOjpJc011bFZhbGlkKToKKyAgICAg
ICAgKFdlYkNvcmU6OmRldGFpbDo6SXNEaXZWYWxpZCk6CisgICAgICAgIChXZWJDb3JlOjpkZXRh
aWw6Ok9wcG9zaXRlSWZTaWduZWRJbXBsOjpydW4pOgorICAgICAgICAoV2ViQ29yZTo6ZGV0YWls
OjpPcHBvc2l0ZUlmU2lnbmVkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ2hlY2tl
ZEludCk6CisgICAgICAgIChXZWJDb3JlOjpDaGVja2VkSW50OjpDaGVja2VkSW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNoZWNrZWRJbnQ6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNoZWNr
ZWRJbnQ6OmlzVmFsaWQpOgorICAgICAgICAoV2ViQ29yZTo6Q2hlY2tlZEludDo6b3BlcmF0b3Ig
LSk6CisgICAgICAgIChXZWJDb3JlOjpDaGVja2VkSW50OjpvcGVyYXRvciA9PSk6CisgICAgICAg
IChXZWJDb3JlOjpDaGVja2VkSW50OjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdlYkNvcmU6OkNo
ZWNrZWRJbnQ6Om9wZXJhdG9yLS0pOgorICAgICAgICAoQ2FzdFRvQ2hlY2tlZEludEltcGwpOgor
ICAgICAgICAoV2ViQ29yZTo6ZGV0YWlsOjpDYXN0VG9DaGVja2VkSW50SW1wbDo6cnVuKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNhc3RUb0NoZWNrZWRJbnQpOgorICAgICAgICAoV2ViQ29yZTo6b3Bl
cmF0b3IgPT0pOgorICAgICAgICAqIGh0bWwvY2FudmFzL0RhdGFWaWV3LmNwcDogY2hhbmdlIHZh
bGlkKCkgdG8gaXNWYWxpZCgpLgorICAgICAgICAoV2ViQ29yZTo6RGF0YVZpZXc6OmNyZWF0ZSk6
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuY3BwOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMQnVmZmVyOjphc3NvY2lhdGVCdWZmZXJEYXRhSW1wbCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTEJ1ZmZlcjo6YXNzb2NpYXRlQnVmZmVyU3ViRGF0YUltcGwpOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmRyYXdBcnJheXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNELmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y29t
cHV0ZUltYWdlU2l6ZUluQnl0ZXMpOgorCiAyMDEyLTEwLTIzICBBbmRyZWFzIEtsaW5nICA8a2xp
bmdAd2Via2l0Lm9yZz4KIAogICAgICAgICBTaHJpbmsgaW1tdXRhYmxlIEVsZW1lbnRBdHRyaWJ1
dGVEYXRhIGFuZCBTdHlsZVByb3BlcnR5U2V0IGJ5IG9uZSBwb2ludGVyIGVhY2guCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DaGVja2VkSW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2hlY2tlZEludC5oCShyZXZpc2lvbiAxMzIyNzYpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DaGVja2VkSW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNTg4ICsxLDgxOSBAQAogLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRl
bnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLSAqLwotLyogdmltOnNldCB0
cz0yIHN3PTIgc3RzPTIgZXQgY2luZGVudDogKi8KLS8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxP
Q0sgKioqKioKLSAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQotICoKLSAqIFRo
ZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGlj
IExpY2Vuc2UgVmVyc2lvbgotICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNl
IHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCi0gKiB0aGUgTGljZW5zZS4gWW91
IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiBodHRwOi8vd3d3Lm1vemls
bGEub3JnL01QTC8KLSAqCi0gKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5z
ZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAotICogV0lUSE9VVCBXQVJSQU5U
WSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNl
Ci0gKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0
YXRpb25zIHVuZGVyIHRoZQotICogTGljZW5zZS4KLSAqCi0gKiBUaGUgT3JpZ2luYWwgQ29kZSBp
cyBNb3ppbGxhIGNvZGUuCi0gKgotICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmln
aW5hbCBDb2RlIGlzIHRoZSBNb3ppbGxhIENvcnBvcmF0aW9uLgotICogUG9ydGlvbnMgY3JlYXRl
ZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAwOQotICogdGhl
IEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIENvbnRyaWJ1
dG9yKHMpOgotICogIEJlbm9pdCBKYWNvYiA8YmphY29iQG1vemlsbGEuY29tPgotICogIEplZmYg
TXVpemVsYWFyIDxqbXVpemVsYWFyQG1vemlsbGEuY29tPgotICoKLSAqIEFsdGVybmF0aXZlbHks
IHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9m
Ci0gKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBs
YXRlciAodGhlICJHUEwiKSwgb3IKLSAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAotICogaW4gd2hpY2ggY2Fz
ZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGlu
c3RlYWQKLSAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91
ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVy
IHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCi0gKiB1c2Ug
eW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5k
aWNhdGUgeW91cgotICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUg
YW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKLSAqIGFuZCBvdGhlciBwcm92aXNpb25z
IHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCi0g
KiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24g
b2YgdGhpcyBmaWxlIHVuZGVyCi0gKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0
aGUgR1BMIG9yIHRoZSBMR1BMLgotICoKLSAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioq
ICovCisvKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2Yg
dGhlIE1vemlsbGEgUHVibGljCisgKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUg
TVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIGZpbGUsCisgKiBZb3UgY2FuIG9idGFp
biBvbmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAvLiAqLworCisvKiBQcm92aWRlcyBj
aGVja2VkIGludGVnZXJzLCBkZXRlY3RpbmcgaW50ZWdlciBvdmVyZmxvdyBhbmQgZGl2aWRlLWJ5
LTAuICovCisKKy8vIE5lY2Vzc2FyeSBtb2RpZmljYXRpb25zIGFyZSBtYWRlIHRvIHRoZSBvcmln
aW5hbCBDaGVja2VkSW50LmggZmlsZSB3aGVuCisvLyBpbmNvcnBvcmF0aW5nIGl0IGludG8gV2Vi
S2l0OgorLy8gMSkgQ29tbWVudCBvdXQgI2RlZmluZSBNT1pfQ0hFQ0tFRElOVF9FTkFCTEVfTU9a
X0FTU0VSVFMKKy8vIDIpIENvbW1lbnQgb3V0ICNpbmNsdWRlICJtb3ppbGxhL1N0YW5kYXJkSW50
ZWdlci5oIgorLy8gMykgRGVmaW5lIE1PWl9ERUxFVEUKKy8vIDQpIENoYW5nZSBuYW1lc3BhY2Ug
bW96aWxsYSB0byBuYW1lc3BhY2UgV2ViQ29yZQorCisjaWZuZGVmIG1vemlsbGFfQ2hlY2tlZElu
dF9oXworI2RlZmluZSBtb3ppbGxhX0NoZWNrZWRJbnRfaF8KKworLyoKKyAqIEJ1aWxkIG9wdGlv
bnMuIENvbW1lbnQgb3V0IHRoZXNlICNkZWZpbmVzIHRvIGRpc2FibGUgdGhlIGNvcnJlc3BvbmRp
bmcKKyAqIG9wdGlvbmFsIGZlYXR1cmUuIERpc2FibGluZyBmZWF0dXJlcyBtYXkgYmUgdXNlZnVs
IGZvciBjb2RlIHVzaW5nCisgKiBDaGVja2VkSW50IG91dHNpZGUgb2YgTW96aWxsYSAoZS5nLiBX
ZWJLaXQpCisgKi8KIAotLy8gTmVjZXNzYXJ5IG1vZGlmaWNhdGlvbnMgYXJlIG1hZGUgdG8gdGhl
IG9yaWdpbmFsIENoZWNrZWRJbnQuaCBmaWxlIHRvIHJlbW92ZQotLy8gZGVwZW5kZW5jaWVzIG9u
IHBydHlwZXMuCi0vLyBBbHNvLCBjaGFuZ2UgZGVmaW5lIE1vemlsbGFfQ2hlY2tlZEludF9oIHRv
IENoZWNrZWRJbnRfaCwgY2hhbmdlIG5hbWVzcGFjZQotLy8gZnJvbSBtb3ppbGxhIHRvIFdlYkNv
cmUgZm9yIGVhc2llciB1c2FnZS4KKy8vIEVuYWJsZSB1c2FnZSBvZiBNT1pfU1RBVElDX0FTU0VS
VCB0byBjaGVjayBmb3IgdW5zdXBwb3J0ZWQgdHlwZXMuCisvLyBJZiBkaXNhYmxlZCwgc3RhdGlj
IGFzc2VydHMgYXJlIHJlcGxhY2VkIGJ5IHJlZ3VsYXIgYXNzZXJ0KCkuCisvLyAjZGVmaW5lIE1P
Wl9DSEVDS0VESU5UX0VOQUJMRV9NT1pfQVNTRVJUUworCisvKgorICogRW5kIG9mIGJ1aWxkIG9w
dGlvbnMKKyAqLwogCi0jaWZuZGVmIENoZWNrZWRJbnRfaAotI2RlZmluZSBDaGVja2VkSW50X2gK
KyNpZmRlZiBNT1pfQ0hFQ0tFRElOVF9FTkFCTEVfTU9aX0FTU0VSVFMKKyMgIGluY2x1ZGUgIm1v
emlsbGEvQXNzZXJ0aW9ucy5oIgorI2Vsc2UKKyMgIGlmbmRlZiBNT1pfU1RBVElDX0FTU0VSVAor
IyAgICBpbmNsdWRlIDxjYXNzZXJ0PgorIyAgICBkZWZpbmUgTU9aX1NUQVRJQ19BU1NFUlQoY29u
ZCwgcmVhc29uKSBhc3NlcnQoKGNvbmQpICYmIHJlYXNvbikKKyMgICAgZGVmaW5lIE1PWl9BU1NF
UlQoY29uZCwgcmVhc29uKSBhc3NlcnQoKGNvbmQpICYmIHJlYXNvbikKKyMgIGVuZGlmCisjZW5k
aWYKKworLy8gI2luY2x1ZGUgIm1vemlsbGEvU3RhbmRhcmRJbnRlZ2VyLmgiCisKKyNpZm5kZWYg
TU9aX0RFTEVURQorI2RlZmluZSBNT1pfREVMRVRFCisjZW5kaWYKIAogI2luY2x1ZGUgPGNsaW1p
dHM+CisjaW5jbHVkZSA8Y3N0ZGRlZj4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1uYW1lc3Bh
Y2UgQ2hlY2tlZEludF9pbnRlcm5hbCB7CituYW1lc3BhY2UgZGV0YWlsIHsKIAotLyogd2UgZG9u
J3Qgd2FudCB0byB1c2Ugc3RkOjpudW1lcmljX2xpbWl0cyBoZXJlIGJlY2F1c2UgaW50Li4uIHR5
cGVzIG1heSBub3Qgc3VwcG9ydCBpdCwKLSAqIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0sIGUu
Zy4gb24gY2VydGFpbiBwbGF0Zm9ybSB0aGV5IHVzZSBub25zdGFuZGFyZCBidWlsdC1pbiB0eXBl
cworLyoKKyAqIFN0ZXAgMTogbWFudWFsbHkgcmVjb3JkIHN1cHBvcnRlZCB0eXBlcworICoKKyAq
IFdoYXQncyBub250cml2aWFsIGhlcmUgaXMgdGhhdCB0aGVyZSBhcmUgZGlmZmVyZW50IGZhbWls
aWVzIG9mIGludGVnZXIKKyAqIHR5cGVzOiBiYXNpYyBpbnRlZ2VyIHR5cGVzIGFuZCBzdGRpbnQg
dHlwZXMuIEl0IGlzIG1lcnJpbHkgdW5kZWZpbmVkIHdoaWNoCisgKiB0eXBlcyBmcm9tIG9uZSBm
YW1pbHkgbWF5IGJlIGp1c3QgdHlwZWRlZnMgZm9yIGEgdHlwZSBmcm9tIGFub3RoZXIgZmFtaWx5
LgorICoKKyAqIEZvciBleGFtcGxlLCBvbiBHQ0MgNC42LCBhc2lkZSBmcm9tIHRoZSBiYXNpYyBp
bnRlZ2VyIHR5cGVzLCB0aGUgb25seSBvdGhlcgorICogdHlwZSB0aGF0IGlzbid0IGp1c3QgYSB0
eXBlZGVmIGZvciBzb21lIG9mIHRoZW0sIGlzIGludDhfdC4KICAqLwogCi0vKioqIFN0ZXAgMTog
bWFudWFsbHkgcmVjb3JkIGluZm9ybWF0aW9uIGZvciBhbGwgdGhlIHR5cGVzIHRoYXQgd2Ugd2Fu
dCB0byBzdXBwb3J0Ci0gKioqLwotCi1zdHJ1Y3QgdW5zdXBwb3J0ZWRfdHlwZSB7fTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IGludGVnZXJfdHlwZV9tYW51YWxseV9yZWNvcmRlZF9p
bmZvOworc3RydWN0IFVuc3VwcG9ydGVkVHlwZSB7fTsKIAordGVtcGxhdGU8dHlwZW5hbWUgSW50
ZWdlclR5cGU+CitzdHJ1Y3QgSXNTdXBwb3J0ZWRQYXNzMgoreworICAgIHN0YXRpYyBjb25zdCBi
b29sIHZhbHVlID0gZmFsc2U7Cit9OwogCi0jZGVmaW5lIENIRUNLRURJTlRfUkVHSVNURVJfU1VQ
UE9SVEVEX1RZUEUoVCxfdHdpY2VfYmlnZ2VyX3R5cGUsX3Vuc2lnbmVkX3R5cGUpIFwKLXRlbXBs
YXRlPD4gc3RydWN0IGludGVnZXJfdHlwZV9tYW51YWxseV9yZWNvcmRlZF9pbmZvPFQ+ICAgICAg
IFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICBlbnVtIHsgaXNfc3VwcG9ydGVkID0gMSB9OyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICB0eXBlZGVmIF90d2ljZV9iaWdnZXJfdHlwZSB0d2lj
ZV9iaWdnZXJfdHlwZTsgICAgICAgICAgICAgIFwKLSAgICB0eXBlZGVmIF91bnNpZ25lZF90eXBl
IHVuc2lnbmVkX3R5cGU7ICAgICAgICAgICAgICAgICAgICAgIFwKK3RlbXBsYXRlPHR5cGVuYW1l
IEludGVnZXJUeXBlPgorc3RydWN0IElzU3VwcG9ydGVkCit7CisgICAgc3RhdGljIGNvbnN0IGJv
b2wgdmFsdWUgPSBJc1N1cHBvcnRlZFBhc3MyPEludGVnZXJUeXBlPjo6dmFsdWU7CiB9OwogCi0v
LyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICBUd2ljZSBCaWdnZXIg
VHlwZSAgIFVuc2lnbmVkIFR5cGUKLUNIRUNLRURJTlRfUkVHSVNURVJfU1VQUE9SVEVEX1RZUEUo
aW50OF90LCAgIGludDE2X3QsICAgICAgICAgICAgIHVpbnQ4X3QpCi1DSEVDS0VESU5UX1JFR0lT
VEVSX1NVUFBPUlRFRF9UWVBFKHVpbnQ4X3QsICB1aW50MTZfdCwgICAgICAgICAgICB1aW50OF90
KQotQ0hFQ0tFRElOVF9SRUdJU1RFUl9TVVBQT1JURURfVFlQRShpbnQxNl90LCAgaW50MzJfdCwg
ICAgICAgICAgICAgdWludDE2X3QpCi1DSEVDS0VESU5UX1JFR0lTVEVSX1NVUFBPUlRFRF9UWVBF
KHVpbnQxNl90LCB1aW50MzJfdCwgICAgICAgICAgICB1aW50MTZfdCkKLUNIRUNLRURJTlRfUkVH
SVNURVJfU1VQUE9SVEVEX1RZUEUoaW50MzJfdCwgIGludDY0X3QsICAgICAgICAgICAgIHVpbnQz
Ml90KQotQ0hFQ0tFRElOVF9SRUdJU1RFUl9TVVBQT1JURURfVFlQRSh1aW50MzJfdCwgdWludDY0
X3QsICAgICAgICAgICAgdWludDMyX3QpCi1DSEVDS0VESU5UX1JFR0lTVEVSX1NVUFBPUlRFRF9U
WVBFKGludDY0X3QsICB1bnN1cHBvcnRlZF90eXBlLCAgICB1aW50NjRfdCkKLUNIRUNLRURJTlRf
UkVHSVNURVJfU1VQUE9SVEVEX1RZUEUodWludDY0X3QsIHVuc3VwcG9ydGVkX3R5cGUsICAgIHVp
bnQ2NF90KQordGVtcGxhdGU8Pgorc3RydWN0IElzU3VwcG9ydGVkPGludDhfdD4KK3sgc3RhdGlj
IGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwogCi0vLyBub3cgaW1wbGVtZW50IHRoZSBmYWxs
YmFjayBmb3Igc3RhbmRhcmQgdHlwZXMgbGlrZSBpbnQsIGxvbmcsIC4uLgotLy8gdGhlIGRpZmZp
Y3VsdHkgaXMgdGhhdCB0aGV5IG1heSBvciBtYXkgbm90IGJlIGVxdWFsIHRvIG9uZSBvZiB0aGUg
YWJvdmUgdHlwZXMsIGFuZC9vcgotLy8gdG8gZWFjaCBvdGhlci4gVGhpcyBpcyB3aHkgYW55IGF0
dGVtcHQgdG8gaGFuZGxlIGF0IG9uY2UgUFJJbnQ4Li4uIHR5cGVzIGFuZCBzdGFuZGFyZCB0eXBl
cwotLy8gaXMgYm91bmQgdG8gZmFpbC4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgaXNf
c3RhbmRhcmRfaW50ZWdlcl90eXBlIHsgZW51bSB7IHZhbHVlID0gMCB9OyB9OwordGVtcGxhdGU8
Pgorc3RydWN0IElzU3VwcG9ydGVkPHVpbnQ4X3Q+Cit7IHN0YXRpYyBjb25zdCBib29sIHZhbHVl
ID0gdHJ1ZTsgfTsKIAogdGVtcGxhdGU8Pgotc3RydWN0IGlzX3N0YW5kYXJkX2ludGVnZXJfdHlw
ZTxjaGFyPiB7IGVudW0geyB2YWx1ZSA9IDEgfTsgfTsKK3N0cnVjdCBJc1N1cHBvcnRlZDxpbnQx
Nl90PgoreyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CisKIHRlbXBsYXRlPD4K
LXN0cnVjdCBpc19zdGFuZGFyZF9pbnRlZ2VyX3R5cGU8dW5zaWduZWQgY2hhcj4geyBlbnVtIHsg
dmFsdWUgPSAxIH07IH07CitzdHJ1Y3QgSXNTdXBwb3J0ZWQ8dWludDE2X3Q+Cit7IHN0YXRpYyBj
b25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKKwogdGVtcGxhdGU8Pgotc3RydWN0IGlzX3N0YW5k
YXJkX2ludGVnZXJfdHlwZTxzaG9ydD4geyBlbnVtIHsgdmFsdWUgPSAxIH07IH07CitzdHJ1Y3Qg
SXNTdXBwb3J0ZWQ8aW50MzJfdD4KK3sgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9
OworCiB0ZW1wbGF0ZTw+Ci1zdHJ1Y3QgaXNfc3RhbmRhcmRfaW50ZWdlcl90eXBlPHVuc2lnbmVk
IHNob3J0PiB7IGVudW0geyB2YWx1ZSA9IDEgfTsgfTsKK3N0cnVjdCBJc1N1cHBvcnRlZDx1aW50
MzJfdD4KK3sgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OworCiB0ZW1wbGF0ZTw+
Ci1zdHJ1Y3QgaXNfc3RhbmRhcmRfaW50ZWdlcl90eXBlPGludD4geyBlbnVtIHsgdmFsdWUgPSAx
IH07IH07CitzdHJ1Y3QgSXNTdXBwb3J0ZWQ8aW50NjRfdD4KK3sgc3RhdGljIGNvbnN0IGJvb2wg
dmFsdWUgPSB0cnVlOyB9OworCiB0ZW1wbGF0ZTw+Ci1zdHJ1Y3QgaXNfc3RhbmRhcmRfaW50ZWdl
cl90eXBlPHVuc2lnbmVkIGludD4geyBlbnVtIHsgdmFsdWUgPSAxIH07IH07CitzdHJ1Y3QgSXNT
dXBwb3J0ZWQ8dWludDY0X3Q+Cit7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsK
KworCiB0ZW1wbGF0ZTw+Ci1zdHJ1Y3QgaXNfc3RhbmRhcmRfaW50ZWdlcl90eXBlPGxvbmc+IHsg
ZW51bSB7IHZhbHVlID0gMSB9OyB9Oworc3RydWN0IElzU3VwcG9ydGVkUGFzczI8Y2hhcj4KK3sg
c3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OworCiB0ZW1wbGF0ZTw+Ci1zdHJ1Y3Qg
aXNfc3RhbmRhcmRfaW50ZWdlcl90eXBlPHVuc2lnbmVkIGxvbmc+IHsgZW51bSB7IHZhbHVlID0g
MSB9OyB9Oworc3RydWN0IElzU3VwcG9ydGVkUGFzczI8dW5zaWduZWQgY2hhcj4KK3sgc3RhdGlj
IGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OworCiB0ZW1wbGF0ZTw+Ci1zdHJ1Y3QgaXNfc3Rh
bmRhcmRfaW50ZWdlcl90eXBlPGxvbmcgbG9uZz4geyBlbnVtIHsgdmFsdWUgPSAxIH07IH07Citz
dHJ1Y3QgSXNTdXBwb3J0ZWRQYXNzMjxzaG9ydD4KK3sgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUg
PSB0cnVlOyB9OworCiB0ZW1wbGF0ZTw+Ci1zdHJ1Y3QgaXNfc3RhbmRhcmRfaW50ZWdlcl90eXBl
PHVuc2lnbmVkIGxvbmcgbG9uZz4geyBlbnVtIHsgdmFsdWUgPSAxIH07IH07CitzdHJ1Y3QgSXNT
dXBwb3J0ZWRQYXNzMjx1bnNpZ25lZCBzaG9ydD4KK3sgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUg
PSB0cnVlOyB9OwogCi10ZW1wbGF0ZTxpbnQgc2l6ZSwgYm9vbCBpc19zaWduZWQ+Ci1zdHJ1Y3Qg
ZXhwbGljaXRseV9zaXplZF9pbnRlZ2VyX3R5cGUge307Cit0ZW1wbGF0ZTw+CitzdHJ1Y3QgSXNT
dXBwb3J0ZWRQYXNzMjxpbnQ+Cit7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsK
IAogdGVtcGxhdGU8Pgotc3RydWN0IGV4cGxpY2l0bHlfc2l6ZWRfaW50ZWdlcl90eXBlPDEsIHRy
dWU+IHsgdHlwZWRlZiBpbnQ4X3QgdHlwZTsgfTsKK3N0cnVjdCBJc1N1cHBvcnRlZFBhc3MyPHVu
c2lnbmVkIGludD4KK3sgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OworCiB0ZW1w
bGF0ZTw+Ci1zdHJ1Y3QgZXhwbGljaXRseV9zaXplZF9pbnRlZ2VyX3R5cGU8MSwgZmFsc2U+IHsg
dHlwZWRlZiB1aW50OF90IHR5cGU7IH07CitzdHJ1Y3QgSXNTdXBwb3J0ZWRQYXNzMjxsb25nPgor
eyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CisKIHRlbXBsYXRlPD4KLXN0cnVj
dCBleHBsaWNpdGx5X3NpemVkX2ludGVnZXJfdHlwZTwyLCB0cnVlPiB7IHR5cGVkZWYgaW50MTZf
dCB0eXBlOyB9Oworc3RydWN0IElzU3VwcG9ydGVkUGFzczI8dW5zaWduZWQgbG9uZz4KK3sgc3Rh
dGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OworCisKKy8qCisgKiBTdGVwIDI6IHNvbWUg
aW50ZWdlci10cmFpdHMga2luZCBvZiBzdHVmZi4KKyAqLworCit0ZW1wbGF0ZTxzaXplX3QgU2l6
ZSwgYm9vbCBTaWduZWRuZXNzPgorc3RydWN0IFN0ZGludFR5cGVGb3JTaXplQW5kU2lnbmVkbmVz
cwore307CisKIHRlbXBsYXRlPD4KLXN0cnVjdCBleHBsaWNpdGx5X3NpemVkX2ludGVnZXJfdHlw
ZTwyLCBmYWxzZT4geyB0eXBlZGVmIHVpbnQxNl90IHR5cGU7IH07CitzdHJ1Y3QgU3RkaW50VHlw
ZUZvclNpemVBbmRTaWduZWRuZXNzPDEsIHRydWU+Cit7IHR5cGVkZWYgaW50OF90ICAgVHlwZTsg
fTsKKwogdGVtcGxhdGU8Pgotc3RydWN0IGV4cGxpY2l0bHlfc2l6ZWRfaW50ZWdlcl90eXBlPDQs
IHRydWU+IHsgdHlwZWRlZiBpbnQzMl90IHR5cGU7IH07CitzdHJ1Y3QgU3RkaW50VHlwZUZvclNp
emVBbmRTaWduZWRuZXNzPDEsIGZhbHNlPgoreyB0eXBlZGVmIHVpbnQ4X3QgIFR5cGU7IH07CisK
IHRlbXBsYXRlPD4KLXN0cnVjdCBleHBsaWNpdGx5X3NpemVkX2ludGVnZXJfdHlwZTw0LCBmYWxz
ZT4geyB0eXBlZGVmIHVpbnQzMl90IHR5cGU7IH07CitzdHJ1Y3QgU3RkaW50VHlwZUZvclNpemVB
bmRTaWduZWRuZXNzPDIsIHRydWU+Cit7IHR5cGVkZWYgaW50MTZfdCAgVHlwZTsgfTsKKwogdGVt
cGxhdGU8Pgotc3RydWN0IGV4cGxpY2l0bHlfc2l6ZWRfaW50ZWdlcl90eXBlPDgsIHRydWU+IHsg
dHlwZWRlZiBpbnQ2NF90IHR5cGU7IH07CitzdHJ1Y3QgU3RkaW50VHlwZUZvclNpemVBbmRTaWdu
ZWRuZXNzPDIsIGZhbHNlPgoreyB0eXBlZGVmIHVpbnQxNl90IFR5cGU7IH07CisKIHRlbXBsYXRl
PD4KLXN0cnVjdCBleHBsaWNpdGx5X3NpemVkX2ludGVnZXJfdHlwZTw4LCBmYWxzZT4geyB0eXBl
ZGVmIHVpbnQ2NF90IHR5cGU7IH07CitzdHJ1Y3QgU3RkaW50VHlwZUZvclNpemVBbmRTaWduZWRu
ZXNzPDQsIHRydWU+Cit7IHR5cGVkZWYgaW50MzJfdCAgVHlwZTsgfTsKIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IGludGVnZXJfdHlwZV9tYW51YWxseV9yZWNvcmRlZF9pbmZvCi17Ci0g
ICAgZW51bSB7Ci0gICAgICBpc19zdXBwb3J0ZWQgPSBpc19zdGFuZGFyZF9pbnRlZ2VyX3R5cGU8
VD46OnZhbHVlLAotICAgICAgc2l6ZSA9IHNpemVvZihUKSwKLSAgICAgIGlzX3NpZ25lZCA9IChU
KC0xKSA+IFQoMCkpID8gMCA6IDEKLSAgICB9OwotICAgIHR5cGVkZWYgdHlwZW5hbWUgZXhwbGlj
aXRseV9zaXplZF9pbnRlZ2VyX3R5cGU8c2l6ZSwgaXNfc2lnbmVkPjo6dHlwZSBleHBsaWNpdF9z
aXplZF90eXBlOwotICAgIHR5cGVkZWYgaW50ZWdlcl90eXBlX21hbnVhbGx5X3JlY29yZGVkX2lu
Zm88ZXhwbGljaXRfc2l6ZWRfdHlwZT4gYmFzZTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2U6
OnR3aWNlX2JpZ2dlcl90eXBlIHR3aWNlX2JpZ2dlcl90eXBlOwotICAgIHR5cGVkZWYgdHlwZW5h
bWUgYmFzZTo6dW5zaWduZWRfdHlwZSB1bnNpZ25lZF90eXBlOwotfTsKK3RlbXBsYXRlPD4KK3N0
cnVjdCBTdGRpbnRUeXBlRm9yU2l6ZUFuZFNpZ25lZG5lc3M8NCwgZmFsc2U+Cit7IHR5cGVkZWYg
dWludDMyX3QgVHlwZTsgfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCBpc19zdXBwb3J0
ZWQgPSBpbnRlZ2VyX3R5cGVfbWFudWFsbHlfcmVjb3JkZWRfaW5mbzxUPjo6aXNfc3VwcG9ydGVk
Pgotc3RydWN0IFRZUEVfTk9UX1NVUFBPUlRFRF9CWV9DaGVja2VkSW50IHt9OwordGVtcGxhdGU8
Pgorc3RydWN0IFN0ZGludFR5cGVGb3JTaXplQW5kU2lnbmVkbmVzczw4LCB0cnVlPgoreyB0eXBl
ZGVmIGludDY0X3QgIFR5cGU7IH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgVFlQ
RV9OT1RfU1VQUE9SVEVEX0JZX0NoZWNrZWRJbnQ8VCwgdHJ1ZT4geyBzdGF0aWMgdm9pZCBydW4o
KSB7fSB9OwordGVtcGxhdGU8Pgorc3RydWN0IFN0ZGludFR5cGVGb3JTaXplQW5kU2lnbmVkbmVz
czw4LCBmYWxzZT4KK3sgdHlwZWRlZiB1aW50NjRfdCBUeXBlOyB9OwogCit0ZW1wbGF0ZTx0eXBl
bmFtZSBJbnRlZ2VyVHlwZT4KK3N0cnVjdCBVbnNpZ25lZFR5cGUKK3sKKyAgICB0eXBlZGVmIHR5
cGVuYW1lIFN0ZGludFR5cGVGb3JTaXplQW5kU2lnbmVkbmVzczxzaXplb2YoSW50ZWdlclR5cGUp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZh
bHNlPjo6VHlwZSBUeXBlOworfTsKIAotLyoqKiBTdGVwIDI6IHJlY29yZCBzb21lIGluZm8gYWJv
dXQgYSBnaXZlbiBpbnRlZ2VyIHR5cGUsCi0gKioqICAgICAgICAgaW5jbHVkaW5nIHdoZXRoZXIg
aXQgaXMgc3VwcG9ydGVkLCB3aGV0aGVyIGEgdHdpY2UgYmlnZ2VyIGludGVnZXIgdHlwZQotICoq
KiAgICAgICAgIGlzIHN1cHBvcnRlZCwgd2hhdCB0aGF0IHR3aWNlIGJpZ2dlciB0eXBlIGlzLCBh
bmQgc29tZSBzdHVmZiBhcyBmb3VuZAotICoqKiAgICAgICAgIGluIHN0ZDo6bnVtZXJpY19saW1p
dHMgKHdoaWNoIHdlIGRvbid0IHVzZSBiZWNhdXNlIGludC4uIHR5cGVzIG1heQotICoqKiAgICAg
ICAgIG5vdCBzdXBwb3J0IGl0LCBpZiB0aGV5IGFyZSBkZWZpbmVkIGRpcmVjdGx5IGZyb20gY29t
cGlsZXIgYnVpbHQtaW4gdHlwZXMpLgotICoqKi8KK3RlbXBsYXRlPHR5cGVuYW1lIEludGVnZXJU
eXBlPgorc3RydWN0IElzU2lnbmVkCit7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBJ
bnRlZ2VyVHlwZSgtMSkgPD0gSW50ZWdlclR5cGUoMCk7Cit9OwogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgaXNfdW5zdXBwb3J0ZWRfdHlwZSB7IGVudW0geyBhbnN3ZXIgPSAwIH07IH07
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBpc191bnN1cHBvcnRlZF90eXBlPHVuc3VwcG9ydGVkX3R5cGU+
IHsgZW51bSB7IGFuc3dlciA9IDEgfTsgfTsKK3RlbXBsYXRlPHR5cGVuYW1lIEludGVnZXJUeXBl
LCBzaXplX3QgU2l6ZSA9IHNpemVvZihJbnRlZ2VyVHlwZSk+CitzdHJ1Y3QgVHdpY2VCaWdnZXJU
eXBlCit7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBTdGRpbnRUeXBlRm9yU2l6ZUFuZFNpZ25lZG5l
c3M8CisgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihJbnRlZ2VyVHlwZSkgKiAyLAorICAg
ICAgICAgICAgICAgICAgICAgICBJc1NpZ25lZDxJbnRlZ2VyVHlwZT46OnZhbHVlCisgICAgICAg
ICAgICAgICAgICAgICA+OjpUeXBlIFR5cGU7Cit9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgaW50ZWdlcl90cmFpdHMKK3RlbXBsYXRlPHR5cGVuYW1lIEludGVnZXJUeXBlPgorc3Ry
dWN0IFR3aWNlQmlnZ2VyVHlwZTxJbnRlZ2VyVHlwZSwgOD4KIHsKLSAgICB0eXBlZGVmIHR5cGVu
YW1lIGludGVnZXJfdHlwZV9tYW51YWxseV9yZWNvcmRlZF9pbmZvPFQ+Ojp0d2ljZV9iaWdnZXJf
dHlwZSB0d2ljZV9iaWdnZXJfdHlwZTsKKyAgICB0eXBlZGVmIFVuc3VwcG9ydGVkVHlwZSBUeXBl
OworfTsKIAotICAgIGVudW0gewotICAgICAgICBpc19zdXBwb3J0ZWQgPSBpbnRlZ2VyX3R5cGVf
bWFudWFsbHlfcmVjb3JkZWRfaW5mbzxUPjo6aXNfc3VwcG9ydGVkLAotICAgICAgICB0d2ljZV9i
aWdnZXJfdHlwZV9pc19zdXBwb3J0ZWQKLSAgICAgICAgICAgID0gaXNfdW5zdXBwb3J0ZWRfdHlw
ZTwKLSAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGludGVnZXJfdHlwZV9tYW51YWxseV9yZWNv
cmRlZF9pbmZvPFQ+Ojp0d2ljZV9iaWdnZXJfdHlwZQotICAgICAgICAgICAgICA+OjphbnN3ZXIg
PyAwIDogMSwKLSAgICAgICAgc2l6ZSA9IHNpemVvZihUKSwKLSAgICAgICAgcG9zaXRpb25fb2Zf
c2lnbl9iaXQgPSBDSEFSX0JJVCAqIHNpemUgLSAxLAotICAgICAgICBpc19zaWduZWQgPSAoVCgt
MSkgPiBUKDApKSA/IDAgOiAxCi0gICAgfTsKK3RlbXBsYXRlPHR5cGVuYW1lIEludGVnZXJUeXBl
Pgorc3RydWN0IFBvc2l0aW9uT2ZTaWduQml0Cit7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCB2
YWx1ZSA9IENIQVJfQklUICogc2l6ZW9mKEludGVnZXJUeXBlKSAtIDE7Cit9OwogCi0gICAgc3Rh
dGljIFQgbWluKCkKLSAgICB7Ci0gICAgICAgIC8vIGJpdHdpc2Ugb3BzIG1heSByZXR1cm4gYSBs
YXJnZXIgdHlwZSwgdGhhdCdzIHdoeSB3ZSBjYXN0IGV4cGxpY2l0bHkgdG8gVAotICAgICAgICBy
ZXR1cm4gaXNfc2lnbmVkID8gVChUKDEpIDw8IHBvc2l0aW9uX29mX3NpZ25fYml0KSA6IFQoMCk7
Ci0gICAgfQordGVtcGxhdGU8dHlwZW5hbWUgSW50ZWdlclR5cGU+CitzdHJ1Y3QgTWluVmFsdWUK
K3sKKyAgcHJpdmF0ZToKKyAgICB0eXBlZGVmIHR5cGVuYW1lIFVuc2lnbmVkVHlwZTxJbnRlZ2Vy
VHlwZT46OlR5cGUgVW5zaWduZWRJbnRlZ2VyVHlwZTsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IFBvc09mU2lnbkJpdCA9IFBvc2l0aW9uT2ZTaWduQml0PEludGVnZXJUeXBlPjo6dmFsdWU7CiAK
LSAgICBzdGF0aWMgVCBtYXgoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIH5taW4oKTsKLSAgICB9
CisgIHB1YmxpYzoKKyAgICAvLyBCaXR3aXNlIG9wcyBtYXkgcmV0dXJuIGEgbGFyZ2VyIHR5cGUs
IHRoYXQncyB3aHkgd2UgY2FzdCBleHBsaWNpdGx5LgorICAgIC8vIEluIEMrKywgbGVmdCBiaXQg
c2hpZnRzIG9uIHNpZ25lZCB2YWx1ZXMgaXMgdW5kZWZpbmVkIGJ5IHRoZSBzdGFuZGFyZAorICAg
IC8vIHVubGVzcyB0aGUgc2hpZnRlZCB2YWx1ZSBpcyByZXByZXNlbnRhYmxlLgorICAgIC8vIE5v
dGljZSB0aGF0IHNpZ25lZC10by11bnNpZ25lZCBjb252ZXJzaW9ucyBhcmUgYWx3YXlzIHdlbGwt
ZGVmaW5lZCBpbgorICAgIC8vIHRoZSBzdGFuZGFyZCBhcyB0aGUgdmFsdWUgY29uZ3J1ZW50IHRv
IDIqKm4sIGFzIGV4cGVjdGVkLiBCeSBjb250cmFzdCwKKyAgICAvLyB1bnNpZ25lZC10by1zaWdu
ZWQgaXMgb25seSB3ZWxsLWRlZmluZWQgaWYgdGhlIHZhbHVlIGlzIHJlcHJlc2VudGFibGUuCisg
ICAgc3RhdGljIGNvbnN0IEludGVnZXJUeXBlIHZhbHVlID0KKyAgICAgICAgSXNTaWduZWQ8SW50
ZWdlclR5cGU+Ojp2YWx1ZQorICAgICAgICA/IEludGVnZXJUeXBlKFVuc2lnbmVkSW50ZWdlclR5
cGUoMSkgPDwgUG9zT2ZTaWduQml0KQorICAgICAgICA6IEludGVnZXJUeXBlKDApOwogfTsKIAot
LyoqKiBTdGVwIDM6IEltcGxlbWVudCB0aGUgYWN0dWFsIHZhbGlkaXR5IGNoZWNrcyAtLS0gaWRl
YXMgdGFrZW4gZnJvbSBJbnRlZ2VyTGliLCBjb2RlIGRpZmZlcmVudC4KLSAqKiovCit0ZW1wbGF0
ZTx0eXBlbmFtZSBJbnRlZ2VyVHlwZT4KK3N0cnVjdCBNYXhWYWx1ZQoreworICAgIC8vIFRyaWNr
c3ksIGJ1dCBjb3ZlcmVkIGJ5IHRoZSB1bml0IHRlc3QuCisgICAgLy8gUmVsaWVzIGhlYXZpbHkg
b24gdGhlIHR5cGUgb2YgTWluVmFsdWU8SW50ZWdlclR5cGU+Ojp2YWx1ZQorICAgIC8vIGJlaW5n
IEludGVnZXJUeXBlLgorICAgIHN0YXRpYyBjb25zdCBJbnRlZ2VyVHlwZSB2YWx1ZSA9IH5NaW5W
YWx1ZTxJbnRlZ2VyVHlwZT46OnZhbHVlOworfTsKIAotLy8gYml0d2lzZSBvcHMgbWF5IHJldHVy
biBhIGxhcmdlciB0eXBlLCBzbyBpdCdzIGdvb2QgdG8gdXNlIHRoZXNlIGlubGluZSBoZWxwZXJz
IGd1YXJhbnRlZWluZyB0aGF0Ci0vLyB0aGUgcmVzdWx0IGlzIHJlYWxseSBvZiB0eXBlIFQKKy8q
CisgKiBTdGVwIDM6IEltcGxlbWVudCB0aGUgYWN0dWFsIHZhbGlkaXR5IGNoZWNrcy4KKyAqCisg
KiBJZGVhcyB0YWtlbiBmcm9tIEludGVnZXJMaWIsIGNvZGUgZGlmZmVyZW50LgorICovCiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBUIGhhc19zaWduX2JpdChUIHgpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgoraW5saW5lIGJvb2wKK0hhc1NpZ25CaXQoVCB4KQogewotICAgIHJldHVybiB4
ID4+IGludGVnZXJfdHJhaXRzPFQ+Ojpwb3NpdGlvbl9vZl9zaWduX2JpdDsKKyAgLy8gSW4gQysr
LCByaWdodCBiaXQgc2hpZnRzIG9uIG5lZ2F0aXZlIHZhbHVlcyBpcyB1bmRlZmluZWQgYnkgdGhl
IHN0YW5kYXJkLgorICAvLyBOb3RpY2UgdGhhdCBzaWduZWQtdG8tdW5zaWduZWQgY29udmVyc2lv
bnMgYXJlIGFsd2F5cyB3ZWxsLWRlZmluZWQgaW4gdGhlCisgIC8vIHN0YW5kYXJkLCBhcyB0aGUg
dmFsdWUgY29uZ3J1ZW50IG1vZHVsbyAyKipuIGFzIGV4cGVjdGVkLiBCeSBjb250cmFzdCwKKyAg
Ly8gdW5zaWduZWQtdG8tc2lnbmVkIGlzIG9ubHkgd2VsbC1kZWZpbmVkIGlmIHRoZSB2YWx1ZSBp
cyByZXByZXNlbnRhYmxlLgorICByZXR1cm4gYm9vbCh0eXBlbmFtZSBVbnNpZ25lZFR5cGU8VD46
OlR5cGUoeCkKKyAgICAgICAgICAgICAgICA+PiBQb3NpdGlvbk9mU2lnbkJpdDxUPjo6dmFsdWUp
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCBiaW5hcnlfY29tcGxlbWVudChU
IHgpCisvLyBCaXR3aXNlIG9wcyBtYXkgcmV0dXJuIGEgbGFyZ2VyIHR5cGUsIHNvIGl0J3MgZ29v
ZCB0byB1c2UgdGhpcyBpbmxpbmUKKy8vIGhlbHBlciBndWFyYW50ZWVpbmcgdGhhdCB0aGUgcmVz
dWx0IGlzIHJlYWxseSBvZiB0eXBlIFQuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIFQK
K0JpbmFyeUNvbXBsZW1lbnQoVCB4KQogewotICAgIHJldHVybiB+eDsKKyAgcmV0dXJuIH54Owog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLAotICAgICAgICAgYm9vbCBpc19U
X3NpZ25lZCA9IGludGVnZXJfdHJhaXRzPFQ+Ojppc19zaWduZWQsCi0gICAgICAgICBib29sIGlz
X1Vfc2lnbmVkID0gaW50ZWdlcl90cmFpdHM8VT46OmlzX3NpZ25lZD4KLXN0cnVjdCBpc19pbl9y
YW5nZV9pbXBsIHt9OwordGVtcGxhdGU8dHlwZW5hbWUgVCwKKyAgICAgICAgIHR5cGVuYW1lIFUs
CisgICAgICAgICBib29sIElzVFNpZ25lZCA9IElzU2lnbmVkPFQ+Ojp2YWx1ZSwKKyAgICAgICAg
IGJvb2wgSXNVU2lnbmVkID0gSXNTaWduZWQ8VT46OnZhbHVlPgorc3RydWN0IERvZXNSYW5nZUNv
bnRhaW5SYW5nZQoreworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgYm9v
bCBTaWduZWRuZXNzPgorc3RydWN0IERvZXNSYW5nZUNvbnRhaW5SYW5nZTxULCBVLCBTaWduZWRu
ZXNzLCBTaWduZWRuZXNzPgoreworICAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gc2l6ZW9m
KFQpID49IHNpemVvZihVKTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
CitzdHJ1Y3QgRG9lc1JhbmdlQ29udGFpblJhbmdlPFQsIFUsIHRydWUsIGZhbHNlPgoreworICAg
IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gc2l6ZW9mKFQpID4gc2l6ZW9mKFUpOworfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KK3N0cnVjdCBEb2VzUmFuZ2VDb250YWlu
UmFuZ2U8VCwgVSwgZmFsc2UsIHRydWU+Cit7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUg
PSBmYWxzZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsCisgICAgICAgICB0eXBlbmFtZSBV
LAorICAgICAgICAgYm9vbCBJc1RTaWduZWQgPSBJc1NpZ25lZDxUPjo6dmFsdWUsCisgICAgICAg
ICBib29sIElzVVNpZ25lZCA9IElzU2lnbmVkPFU+Ojp2YWx1ZSwKKyAgICAgICAgIGJvb2wgRG9l
c1RSYW5nZUNvbnRhaW5VUmFuZ2UgPSBEb2VzUmFuZ2VDb250YWluUmFuZ2U8VCwgVT46OnZhbHVl
Pgorc3RydWN0IElzSW5SYW5nZUltcGwge307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIGJvb2wgSXNUU2lnbmVkLCBib29sIElzVVNpZ25lZD4KK3N0cnVjdCBJc0luUmFuZ2VJ
bXBsPFQsIFUsIElzVFNpZ25lZCwgSXNVU2lnbmVkLCB0cnVlPgoreworICAgIHN0YXRpYyBib29s
IHJ1bihVKQorICAgIHsKKyAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OwogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotc3RydWN0IGlzX2luX3JhbmdlX2ltcGw8VCwgVSwg
dHJ1ZSwgdHJ1ZT4KK3N0cnVjdCBJc0luUmFuZ2VJbXBsPFQsIFUsIHRydWUsIHRydWUsIGZhbHNl
PgogewotICAgIHN0YXRpYyBUIHJ1bihVIHgpCisgICAgc3RhdGljIGJvb2wgcnVuKFUgeCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiAoeCA8PSBpbnRlZ2VyX3RyYWl0czxUPjo6bWF4KCkpICYKLSAg
ICAgICAgICAgICAgICh4ID49IGludGVnZXJfdHJhaXRzPFQ+OjptaW4oKSk7CisgICAgICByZXR1
cm4geCA8PSBNYXhWYWx1ZTxUPjo6dmFsdWUgJiYgeCA+PSBNaW5WYWx1ZTxUPjo6dmFsdWU7CiAg
ICAgfQogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLXN0cnVjdCBpc19p
bl9yYW5nZV9pbXBsPFQsIFUsIGZhbHNlLCBmYWxzZT4KK3N0cnVjdCBJc0luUmFuZ2VJbXBsPFQs
IFUsIGZhbHNlLCBmYWxzZSwgZmFsc2U+CiB7Ci0gICAgc3RhdGljIFQgcnVuKFUgeCkKKyAgICBz
dGF0aWMgYm9vbCBydW4oVSB4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHggPD0gaW50ZWdlcl90
cmFpdHM8VD46Om1heCgpOworICAgICAgcmV0dXJuIHggPD0gTWF4VmFsdWU8VD46OnZhbHVlOwog
ICAgIH0KIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci1zdHJ1Y3QgaXNf
aW5fcmFuZ2VfaW1wbDxULCBVLCB0cnVlLCBmYWxzZT4KK3N0cnVjdCBJc0luUmFuZ2VJbXBsPFQs
IFUsIHRydWUsIGZhbHNlLCBmYWxzZT4KIHsKLSAgICBzdGF0aWMgVCBydW4oVSB4KQorICAgIHN0
YXRpYyBib29sIHJ1bihVIHgpCiAgICAgewotICAgICAgICBpZiAoc2l6ZW9mKFQpID4gc2l6ZW9m
KFUpKQotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJl
dHVybiB4IDw9IFUoaW50ZWdlcl90cmFpdHM8VD46Om1heCgpKTsKKyAgICAgIHJldHVybiBzaXpl
b2YoVCkgPiBzaXplb2YoVSkgfHwgeCA8PSBVKE1heFZhbHVlPFQ+Ojp2YWx1ZSk7CiAgICAgfQog
fTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLXN0cnVjdCBpc19pbl9yYW5n
ZV9pbXBsPFQsIFUsIGZhbHNlLCB0cnVlPgorc3RydWN0IElzSW5SYW5nZUltcGw8VCwgVSwgZmFs
c2UsIHRydWUsIGZhbHNlPgogewotICAgIHN0YXRpYyBUIHJ1bihVIHgpCisgICAgc3RhdGljIGJv
b2wgcnVuKFUgeCkKICAgICB7Ci0gICAgICAgIGlmIChzaXplb2YoVCkgPj0gc2l6ZW9mKFUpKQot
ICAgICAgICAgICAgcmV0dXJuIHggPj0gMDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0
dXJuIHggPj0gMCAmJiB4IDw9IFUoaW50ZWdlcl90cmFpdHM8VD46Om1heCgpKTsKKyAgICAgIHJl
dHVybiBzaXplb2YoVCkgPj0gc2l6ZW9mKFUpCisgICAgICAgICAgICAgPyB4ID49IDAKKyAgICAg
ICAgICAgICA6IHggPj0gMCAmJiB4IDw9IFUoTWF4VmFsdWU8VD46OnZhbHVlKTsKICAgICB9CiB9
OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgVCBpc19pbl9yYW5n
ZShVIHgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgoraW5saW5lIGJvb2wKK0lz
SW5SYW5nZShVIHgpCiB7Ci0gICAgcmV0dXJuIGlzX2luX3JhbmdlX2ltcGw8VCwgVT46OnJ1bih4
KTsKKyAgcmV0dXJuIElzSW5SYW5nZUltcGw8VCwgVT46OnJ1bih4KTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIFQgaXNfYWRkX3ZhbGlkKFQgeCwgVCB5LCBUIHJlc3VsdCkKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgYm9vbAorSXNBZGRWYWxpZChUIHgsIFQgeSkKIHsK
LSAgICByZXR1cm4gaW50ZWdlcl90cmFpdHM8VD46OmlzX3NpZ25lZCA/Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBhZGRpdGlvbiBpcyB2YWxpZCBpZiB0aGUgc2lnbiBvZiB4K3kgaXMgZXF1
YWwgdG8gZWl0aGVyIHRoYXQgb2YgeCBvciB0aGF0IG9mIHkuCi0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyBCZXdhcmUhIFRoZXNlIGJpdHdpc2Ugb3BlcmF0aW9ucyBjYW4gcmV0dXJuIGEgbGFy
Z2VyIGludGVnZXIgdHlwZSwgaWYgVCB3YXMgYQotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
c21hbGwgdHlwZSBsaWtlIGludDgsIHNvIHdlIGV4cGxpY2l0bHkgY2FzdCB0byBULgotICAgICAg
ICAgICAgICAgICAgICAgICAgaGFzX3NpZ25fYml0KGJpbmFyeV9jb21wbGVtZW50KFQoKHJlc3Vs
dF54KSAmIChyZXN1bHReeSkpKSkKLSAgICAgICAgICAgICAgICAgICAgOgotICAgICAgICAgICAg
ICAgICAgICAgICAgYmluYXJ5X2NvbXBsZW1lbnQoeCkgPj0geTsKKyAgLy8gQWRkaXRpb24gaXMg
dmFsaWQgaWYgdGhlIHNpZ24gb2YgeCt5IGlzIGVxdWFsIHRvIGVpdGhlciB0aGF0IG9mIHggb3Ig
dGhhdAorICAvLyBvZiB5LiBTaW5jZSB0aGUgdmFsdWUgb2YgeCt5IGlzIHVuZGVmaW5lZCBpZiB3
ZSBoYXZlIGEgc2lnbmVkIHR5cGUsIHdlCisgIC8vIGNvbXB1dGUgaXQgdXNpbmcgdGhlIHVuc2ln
bmVkIHR5cGUgb2YgdGhlIHNhbWUgc2l6ZS4KKyAgLy8gQmV3YXJlISBUaGVzZSBiaXR3aXNlIG9w
ZXJhdGlvbnMgY2FuIHJldHVybiBhIGxhcmdlciBpbnRlZ2VyIHR5cGUsCisgIC8vIGlmIFQgd2Fz
IGEgc21hbGwgdHlwZSBsaWtlIGludDhfdCwgc28gd2UgZXhwbGljaXRseSBjYXN0IHRvIFQuCisK
KyAgdHlwZW5hbWUgVW5zaWduZWRUeXBlPFQ+OjpUeXBlIHV4ID0geDsKKyAgdHlwZW5hbWUgVW5z
aWduZWRUeXBlPFQ+OjpUeXBlIHV5ID0geTsKKyAgdHlwZW5hbWUgVW5zaWduZWRUeXBlPFQ+OjpU
eXBlIHJlc3VsdCA9IHV4ICsgdXk7CisgIHJldHVybiBJc1NpZ25lZDxUPjo6dmFsdWUKKyAgICAg
ICAgID8gSGFzU2lnbkJpdChCaW5hcnlDb21wbGVtZW50KFQoKHJlc3VsdCBeIHgpICYgKHJlc3Vs
dCBeIHkpKSkpCisgICAgICAgICA6IEJpbmFyeUNvbXBsZW1lbnQoeCkgPj0geTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQgaXNfc3ViX3ZhbGlkKFQgeCwgVCB5LCBUIHJlc3Vs
dCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgYm9vbAorSXNTdWJWYWxpZChUIHgsIFQg
eSkKIHsKLSAgICByZXR1cm4gaW50ZWdlcl90cmFpdHM8VD46OmlzX3NpZ25lZCA/Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBzdWJzdHJhY3Rpb24gaXMgdmFsaWQgaWYgZWl0aGVyIHggYW5k
IHkgaGF2ZSBzYW1lIHNpZ24sIG9yIHgteSBhbmQgeCBoYXZlIHNhbWUgc2lnbgotICAgICAgICAg
ICAgICAgICAgICAgICAgaGFzX3NpZ25fYml0KGJpbmFyeV9jb21wbGVtZW50KFQoKHJlc3VsdF54
KSAmICh4XnkpKSkpCi0gICAgICAgICAgICAgICAgICAgIDoKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHggPj0geTsKKyAgLy8gU3VidHJhY3Rpb24gaXMgdmFsaWQgaWYgZWl0aGVyIHggYW5kIHkg
aGF2ZSBzYW1lIHNpZ24sIG9yIHgteSBhbmQgeCBoYXZlCisgIC8vIHNhbWUgc2lnbi4gU2luY2Ug
dGhlIHZhbHVlIG9mIHgteSBpcyB1bmRlZmluZWQgaWYgd2UgaGF2ZSBhIHNpZ25lZCB0eXBlLAor
ICAvLyB3ZSBjb21wdXRlIGl0IHVzaW5nIHRoZSB1bnNpZ25lZCB0eXBlIG9mIHRoZSBzYW1lIHNp
emUuCisgIHR5cGVuYW1lIFVuc2lnbmVkVHlwZTxUPjo6VHlwZSB1eCA9IHg7CisgIHR5cGVuYW1l
IFVuc2lnbmVkVHlwZTxUPjo6VHlwZSB1eSA9IHk7CisgIHR5cGVuYW1lIFVuc2lnbmVkVHlwZTxU
Pjo6VHlwZSByZXN1bHQgPSB1eCAtIHV5OworCisgIHJldHVybiBJc1NpZ25lZDxUPjo6dmFsdWUK
KyAgICAgICAgID8gSGFzU2lnbkJpdChCaW5hcnlDb21wbGVtZW50KFQoKHJlc3VsdCBeIHgpICYg
KHggXiB5KSkpKQorICAgICAgICAgOiB4ID49IHk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQs
Ci0gICAgICAgICBib29sIGlzX3NpZ25lZCA9ICBpbnRlZ2VyX3RyYWl0czxUPjo6aXNfc2lnbmVk
LAotICAgICAgICAgYm9vbCB0d2ljZV9iaWdnZXJfdHlwZV9pc19zdXBwb3J0ZWQgPSBpbnRlZ2Vy
X3RyYWl0czxUPjo6dHdpY2VfYmlnZ2VyX3R5cGVfaXNfc3VwcG9ydGVkPgotc3RydWN0IGlzX211
bF92YWxpZF9pbXBsIHt9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IGlzX211bF92
YWxpZF9pbXBsPFQsIHRydWUsIHRydWU+Ci17Ci0gICAgc3RhdGljIFQgcnVuKFQgeCwgVCB5KQot
ICAgIHsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpbnRlZ2VyX3RyYWl0czxUPjo6dHdpY2Vf
YmlnZ2VyX3R5cGUgdHdpY2VfYmlnZ2VyX3R5cGU7Ci0gICAgICAgIHR3aWNlX2JpZ2dlcl90eXBl
IHByb2R1Y3QgPSB0d2ljZV9iaWdnZXJfdHlwZSh4KSAqIHR3aWNlX2JpZ2dlcl90eXBlKHkpOwot
ICAgICAgICByZXR1cm4gaXNfaW5fcmFuZ2U8VD4ocHJvZHVjdCk7CisgICAgICAgICBib29sIElz
U2lnbmVkID0gSXNTaWduZWQ8VD46OnZhbHVlLAorICAgICAgICAgYm9vbCBUd2ljZUJpZ2dlclR5
cGVJc1N1cHBvcnRlZCA9CisgICAgICAgICAgIElzU3VwcG9ydGVkPHR5cGVuYW1lIFR3aWNlQmln
Z2VyVHlwZTxUPjo6VHlwZT46OnZhbHVlPgorc3RydWN0IElzTXVsVmFsaWRJbXBsIHt9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIElzU2lnbmVkPgorc3RydWN0IElzTXVsVmFsaWRJbXBs
PFQsIElzU2lnbmVkLCB0cnVlPgoreworICAgIHN0YXRpYyBib29sIHJ1bihUIHgsIFQgeSkKKyAg
ICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIFR3aWNlQmlnZ2VyVHlwZTxUPjo6VHlwZSBUd2lj
ZUJpZ2dlclR5cGU7CisgICAgICBUd2ljZUJpZ2dlclR5cGUgcHJvZHVjdCA9IFR3aWNlQmlnZ2Vy
VHlwZSh4KSAqIFR3aWNlQmlnZ2VyVHlwZSh5KTsKKyAgICAgIHJldHVybiBJc0luUmFuZ2U8VD4o
cHJvZHVjdCk7CiAgICAgfQogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBpc19t
dWxfdmFsaWRfaW1wbDxULCBmYWxzZSwgdHJ1ZT4KK3N0cnVjdCBJc011bFZhbGlkSW1wbDxULCB0
cnVlLCBmYWxzZT4KIHsKLSAgICBzdGF0aWMgVCBydW4oVCB4LCBUIHkpCisgICAgc3RhdGljIGJv
b2wgcnVuKFQgeCwgVCB5KQogICAgIHsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpbnRlZ2Vy
X3RyYWl0czxUPjo6dHdpY2VfYmlnZ2VyX3R5cGUgdHdpY2VfYmlnZ2VyX3R5cGU7Ci0gICAgICAg
IHR3aWNlX2JpZ2dlcl90eXBlIHByb2R1Y3QgPSB0d2ljZV9iaWdnZXJfdHlwZSh4KSAqIHR3aWNl
X2JpZ2dlcl90eXBlKHkpOwotICAgICAgICByZXR1cm4gaXNfaW5fcmFuZ2U8VD4ocHJvZHVjdCk7
CisgICAgICBjb25zdCBUIG1heCA9IE1heFZhbHVlPFQ+Ojp2YWx1ZTsKKyAgICAgIGNvbnN0IFQg
bWluID0gTWluVmFsdWU8VD46OnZhbHVlOworCisgICAgICBpZiAoeCA9PSAwIHx8IHkgPT0gMCkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgIGlmICh4ID4gMCkgeworICAgICAgICByZXR1
cm4geSA+IDAKKyAgICAgICAgICAgICAgID8geCA8PSBtYXggLyB5CisgICAgICAgICAgICAgICA6
IHkgPj0gbWluIC8geDsKKyAgICAgIH0KKworICAgICAgLy8gSWYgd2UgcmVhY2ggdGhpcyBwb2lu
dCwgd2Uga25vdyB0aGF0IHggPCAwLgorICAgICAgcmV0dXJuIHkgPiAwCisgICAgICAgICAgICAg
PyB4ID49IG1pbiAvIHkKKyAgICAgICAgICAgICA6IHkgPj0gbWF4IC8geDsKICAgICB9CiB9Owog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IGlzX211bF92YWxpZF9pbXBsPFQsIHRydWUs
IGZhbHNlPgorc3RydWN0IElzTXVsVmFsaWRJbXBsPFQsIGZhbHNlLCBmYWxzZT4KIHsKLSAgICBz
dGF0aWMgVCBydW4oVCB4LCBUIHkpCisgICAgc3RhdGljIGJvb2wgcnVuKFQgeCwgVCB5KQogICAg
IHsKLSAgICAgICAgY29uc3QgVCBtYXhfdmFsdWUgPSBpbnRlZ2VyX3RyYWl0czxUPjo6bWF4KCk7
Ci0gICAgICAgIGNvbnN0IFQgbWluX3ZhbHVlID0gaW50ZWdlcl90cmFpdHM8VD46Om1pbigpOwot
Ci0gICAgICAgIGlmICh4ID09IDAgfHwgeSA9PSAwKSByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBp
ZiAoeCA+IDApIHsKLSAgICAgICAgICAgIGlmICh5ID4gMCkKLSAgICAgICAgICAgICAgICByZXR1
cm4geCA8PSBtYXhfdmFsdWUgLyB5OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHJldHVybiB5ID49IG1pbl92YWx1ZSAvIHg7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBpZiAoeSA+IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIHggPj0gbWluX3ZhbHVlIC8geTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4geSA+PSBtYXhfdmFsdWUg
LyB4OwotICAgICAgICB9CisgICAgICByZXR1cm4geSA9PSAwIHx8ICB4IDw9IE1heFZhbHVlPFQ+
Ojp2YWx1ZSAvIHk7CiAgICAgfQogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBp
c19tdWxfdmFsaWRfaW1wbDxULCBmYWxzZSwgZmFsc2U+CitpbmxpbmUgYm9vbAorSXNNdWxWYWxp
ZChUIHgsIFQgeSkKIHsKLSAgICBzdGF0aWMgVCBydW4oVCB4LCBUIHkpCi0gICAgewotICAgICAg
ICBjb25zdCBUIG1heF92YWx1ZSA9IGludGVnZXJfdHJhaXRzPFQ+OjptYXgoKTsKLSAgICAgICAg
aWYgKHggPT0gMCB8fCB5ID09IDApIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4geCA8PSBt
YXhfdmFsdWUgLyB5OwotICAgIH0KLX07CisgIHJldHVybiBJc011bFZhbGlkSW1wbDxUPjo6cnVu
KHgsIHkpOworfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCBpc19tdWxfdmFsaWQo
VCB4LCBUIHksIFQgLypyZXN1bHQgbm90IHVzZWQqLykKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citp
bmxpbmUgYm9vbAorSXNEaXZWYWxpZChUIHgsIFQgeSkKIHsKLSAgICByZXR1cm4gaXNfbXVsX3Zh
bGlkX2ltcGw8VD46OnJ1bih4LCB5KTsKKyAgLy8gS2VlcCBpbiBtaW5kIHRoYXQgaW4gdGhlIHNp
Z25lZCBjYXNlLCBtaW4vLTEgaXMgaW52YWxpZCBiZWNhdXNlIGFicyhtaW4pPm1heC4KKyAgcmV0
dXJuIHkgIT0gMCAmJgorICAgICAgICAgIShJc1NpZ25lZDxUPjo6dmFsdWUgJiYgeCA9PSBNaW5W
YWx1ZTxUPjo6dmFsdWUgJiYgeSA9PSBUKC0xKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGlubGluZSBUIGlzX2Rpdl92YWxpZChUIHgsIFQgeSkKKy8vIFRoaXMgaXMganVzdCB0byBzaHV0
IHVwIG1zdmMgd2FybmluZ3MgYWJvdXQgbmVnYXRpbmcgdW5zaWduZWQgaW50cy4KK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIGJvb2wgSXNTaWduZWQgPSBJc1NpZ25lZDxUPjo6dmFsdWU+CitzdHJ1Y3Qg
T3Bwb3NpdGVJZlNpZ25lZEltcGwKK3sKKyAgICBzdGF0aWMgVCBydW4oVCB4KSB7IHJldHVybiAt
eDsgfQorfTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgT3Bwb3NpdGVJZlNpZ25lZElt
cGw8VCwgZmFsc2U+Cit7CisgICAgc3RhdGljIFQgcnVuKFQgeCkgeyByZXR1cm4geDsgfQorfTsK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgVAorT3Bwb3NpdGVJZlNpZ25lZChUIHgpCiB7
Ci0gICAgcmV0dXJuIGludGVnZXJfdHJhaXRzPFQ+Ojppc19zaWduZWQgPwotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8ga2VlcCBpbiBtaW5kIHRoYXQgbWluLy0xIGlzIGludmFsaWQgYmVjYXVz
ZSBhYnMobWluKT5tYXgKLSAgICAgICAgICAgICAgICAgICAgICAgIHkgIT0gMCAmJiAoeCAhPSBp
bnRlZ2VyX3RyYWl0czxUPjo6bWluKCkgfHwgeSAhPSBUKC0xKSkKLSAgICAgICAgICAgICAgICAg
ICAgOgotICAgICAgICAgICAgICAgICAgICAgICAgeSAhPSAwOworICByZXR1cm4gT3Bwb3NpdGVJ
ZlNpZ25lZEltcGw8VD46OnJ1bih4KTsKIH0KIAotfSAvLyBlbmQgbmFtZXNwYWNlIENoZWNrZWRJ
bnRfaW50ZXJuYWwKK30gLy8gbmFtZXNwYWNlIGRldGFpbAogCiAKLS8qKiogU3RlcCA0OiBOb3cg
ZGVmaW5lIHRoZSBDaGVja2VkSW50IGNsYXNzLgotICoqKi8KKy8qCisgKiBTdGVwIDQ6IE5vdyBk
ZWZpbmUgdGhlIENoZWNrZWRJbnQgY2xhc3MuCisgKi8KIAotLyoqIFxjbGFzcyBDaGVja2VkSW50
Ci0gICogXGJyaWVmIEludGVnZXIgd3JhcHBlciBjbGFzcyBjaGVja2luZyBmb3IgaW50ZWdlciBv
dmVyZmxvdyBhbmQgb3RoZXIgZXJyb3JzCi0gICogXHBhcmFtIFQgdGhlIGludGVnZXIgdHlwZSB0
byB3cmFwLiBDYW4gYmUgYW55IG9mIGludDhfdCwgdWludDhfdCwgaW50MTZfdCwgdWludDE2X3Qs
Ci0gICogICAgICAgICAgaW50MzJfdCwgdWludDMyX3QsIGludDY0X3QsIHVpbnQ2NF90LgotICAq
Ci0gICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGd1YXJkZWQgaW50ZWdlciBhcml0aG1ldGljLiBE
byBhIGNvbXB1dGF0aW9uLCB0aGVuIGNoZWNrIHRoYXQKLSAgKiB2YWxpZCgpIHJldHVybnMgdHJ1
ZSwgeW91IHRoZW4gaGF2ZSBhIGd1YXJhbnRlZSB0aGF0IG5vIHByb2JsZW0sIHN1Y2ggYXMgaW50
ZWdlciBvdmVyZmxvdywKLSAgKiBoYXBwZW5lZCBkdXJpbmcgdGhpcyBjb21wdXRhdGlvbi4KLSAg
KgotICAqIFRoZSBhcml0aG1ldGljIG9wZXJhdG9ycyBpbiB0aGlzIGNsYXNzIGFyZSBndWFyYW50
ZWVkIG5vdCB0byBjcmFzaCB5b3VyIGFwcAotICAqIGluIGNhc2Ugb2YgYSBkaXZpc2lvbiBieSB6
ZXJvLgotICAqCi0gICogRm9yIGV4YW1wbGUsIHN1cHBvc2UgdGhhdCB5b3Ugd2FudCB0byBpbXBs
ZW1lbnQgYSBmdW5jdGlvbiB0aGF0IGNvbXB1dGVzICh4K3kpL3osCi0gICogdGhhdCBkb2Vzbid0
IGNyYXNoIGlmIHo9PTAsIGFuZCB0aGF0IHJlcG9ydHMgb24gZXJyb3IgKGRpdmlkZSBieSB6ZXJv
IG9yIGludGVnZXIgb3ZlcmZsb3cpLgotICAqIFlvdSBjb3VsZCBjb2RlIGl0IGFzIGZvbGxvd3M6
Ci0gICAgXGNvZGUKLSAgICBib29sIGNvbXB1dGVfeF9wbHVzX3lfb3Zlcl96KGludDMyX3QgeCwg
aW50MzJfdCB5LCBpbnQzMl90IHosIGludDMyX3QgKnJlc3VsdCkKLSAgICB7Ci0gICAgICAgIENo
ZWNrZWRJbnQ8aW50MzJfdD4gY2hlY2tlZF9yZXN1bHQgPSAoQ2hlY2tlZEludDxpbnQzMl90Pih4
KSArIHkpIC8gejsKLSAgICAgICAgKnJlc3VsdCA9IGNoZWNrZWRfcmVzdWx0LnZhbHVlKCk7Ci0g
ICAgICAgIHJldHVybiBjaGVja2VkX3Jlc3VsdC52YWxpZCgpOwotICAgIH0KLSAgICBcZW5kY29k
ZQotICAqCi0gICogSW1wbGljaXQgY29udmVyc2lvbiBmcm9tIHBsYWluIGludGVnZXJzIHRvIGNo
ZWNrZWQgaW50ZWdlcnMgaXMgYWxsb3dlZC4gVGhlIHBsYWluIGludGVnZXIKLSAgKiBpcyBjaGVj
a2VkIHRvIGJlIGluIHJhbmdlIGJlZm9yZSBiZWluZyBjYXN0ZWQgdG8gdGhlIGRlc3RpbmF0aW9u
IHR5cGUuIFRoaXMgbWVhbnMgdGhhdCB0aGUgZm9sbG93aW5nCi0gICogbGluZXMgYWxsIGNvbXBp
bGUsIGFuZCB0aGUgcmVzdWx0aW5nIENoZWNrZWRJbnRzIGFyZSBjb3JyZWN0bHkgZGV0ZWN0ZWQg
YXMgdmFsaWQgb3IgaW52YWxpZDoKLSAgKiBcY29kZQotICAgIENoZWNrZWRJbnQ8dWludDhfdD4g
eCgxKTsgICAvLyAxIGlzIG9mIHR5cGUgaW50LCBpcyBmb3VuZCB0byBiZSBpbiByYW5nZSBmb3Ig
dWludDhfdCwgeCBpcyB2YWxpZAotICAgIENoZWNrZWRJbnQ8dWludDhfdD4geCgtMSk7ICAvLyAt
MSBpcyBvZiB0eXBlIGludCwgaXMgZm91bmQgbm90IHRvIGJlIGluIHJhbmdlIGZvciB1aW50OF90
LCB4IGlzIGludmFsaWQKLSAgICBDaGVja2VkSW50PGludDhfdD4geCgtMSk7ICAgLy8gLTEgaXMg
b2YgdHlwZSBpbnQsIGlzIGZvdW5kIHRvIGJlIGluIHJhbmdlIGZvciBpbnQ4X3QsIHggaXMgdmFs
aWQKLSAgICBDaGVja2VkSW50PGludDhfdD4geChpbnQxNl90KDEwMDApKTsgLy8gMTAwMCBpcyBv
ZiB0eXBlIGludDE2X3QsIGlzIGZvdW5kIG5vdCB0byBiZSBpbiByYW5nZSBmb3IgaW50OF90LCB4
IGlzIGludmFsaWQKLSAgICBDaGVja2VkSW50PGludDMyX3Q+IHgodWludDMyX3QoMTIzNDU2Nzg5
KSk7IC8vIDMxMjM0NTY3ODkgaXMgb2YgdHlwZSB1aW50MzJfdCwgaXMgZm91bmQgbm90IHRvIGJl
IGluIHJhbmdlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBmb3IgaW50MzJfdCwgeCBpcyBpbnZhbGlkCi0gICogXGVuZGNvZGUKLSAgKiBJbXBsaWNpdCBj
b252ZXJzaW9uIGZyb20KLSAgKiBjaGVja2VkIGludGVnZXJzIHRvIHBsYWluIGludGVnZXJzIGlz
IG5vdCBhbGxvd2VkLiBBcyBzaG93biBpbiB0aGUKLSAgKiBhYm92ZSBleGFtcGxlLCB0byBnZXQg
dGhlIHZhbHVlIG9mIGEgY2hlY2tlZCBpbnRlZ2VyIGFzIGEgbm9ybWFsIGludGVnZXIsIGNhbGwg
dmFsdWUoKS4KLSAgKgotICAqIEFyaXRobWV0aWMgb3BlcmF0aW9ucyBiZXR3ZWVuIGNoZWNrZWQg
YW5kIHBsYWluIGludGVnZXJzIGlzIGFsbG93ZWQ7IHRoZSByZXN1bHQgdHlwZQotICAqIGlzIHRo
ZSB0eXBlIG9mIHRoZSBjaGVja2VkIGludGVnZXIuCi0gICoKLSAgKiBTYWZlIGludGVnZXJzIG9m
IGRpZmZlcmVudCB0eXBlcyBjYW5ub3QgYmUgdXNlZCBpbiB0aGUgc2FtZSBhcml0aG1ldGljIGV4
cHJlc3Npb24uCi0gICovCisvKioKKyAqIEBjbGFzcyBDaGVja2VkSW50CisgKiBAYnJpZWYgSW50
ZWdlciB3cmFwcGVyIGNsYXNzIGNoZWNraW5nIGZvciBpbnRlZ2VyIG92ZXJmbG93IGFuZCBvdGhl
ciBlcnJvcnMKKyAqIEBwYXJhbSBUIHRoZSBpbnRlZ2VyIHR5cGUgdG8gd3JhcC4gQ2FuIGJlIGFu
eSB0eXBlIGFtb25nIHRoZSBmb2xsb3dpbmc6CisgKiAgICAgICAgICAgIC0gYW55IGJhc2ljIGlu
dGVnZXIgdHlwZSBzdWNoIGFzIHxpbnR8CisgKiAgICAgICAgICAgIC0gYW55IHN0ZGludCB0eXBl
IHN1Y2ggYXMgfGludDhfdHwKKyAqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgZ3VhcmRlZCBp
bnRlZ2VyIGFyaXRobWV0aWMuIERvIGEgY29tcHV0YXRpb24sIGNoZWNrCisgKiB0aGF0IGlzVmFs
aWQoKSByZXR1cm5zIHRydWUsIHlvdSB0aGVuIGhhdmUgYSBndWFyYW50ZWUgdGhhdCBubyBwcm9i
bGVtLCBzdWNoCisgKiBhcyBpbnRlZ2VyIG92ZXJmbG93LCBoYXBwZW5lZCBkdXJpbmcgdGhpcyBj
b21wdXRhdGlvbiwgYW5kIHlvdSBjYW4gY2FsbAorICogdmFsdWUoKSB0byBnZXQgdGhlIHBsYWlu
IGludGVnZXIgdmFsdWUuCisgKgorICogVGhlIGFyaXRobWV0aWMgb3BlcmF0b3JzIGluIHRoaXMg
Y2xhc3MgYXJlIGd1YXJhbnRlZWQgbm90IHRvIHJhaXNlIGEgc2lnbmFsCisgKiAoZS5nLiBpbiBj
YXNlIG9mIGEgZGl2aXNpb24gYnkgemVybykuCisgKgorICogRm9yIGV4YW1wbGUsIHN1cHBvc2Ug
dGhhdCB5b3Ugd2FudCB0byBpbXBsZW1lbnQgYSBmdW5jdGlvbiB0aGF0IGNvbXB1dGVzCisgKiAo
eCt5KS96LCB0aGF0IGRvZXNuJ3QgY3Jhc2ggaWYgej09MCwgYW5kIHRoYXQgcmVwb3J0cyBvbiBl
cnJvciAoZGl2aWRlIGJ5CisgKiB6ZXJvIG9yIGludGVnZXIgb3ZlcmZsb3cpLiBZb3UgY291bGQg
Y29kZSBpdCBhcyBmb2xsb3dzOgorICAgQGNvZGUKKyAgIGJvb2wgY29tcHV0ZVhQbHVzWU92ZXJa
KGludCB4LCBpbnQgeSwgaW50IHosIGludCAqcmVzdWx0KQorICAgeworICAgICAgIENoZWNrZWRJ
bnQ8aW50PiBjaGVja2VkUmVzdWx0ID0gKENoZWNrZWRJbnQ8aW50Pih4KSArIHkpIC8gejsKKyAg
ICAgICBpZiAoY2hlY2tlZFJlc3VsdC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgKnJlc3VsdCA9
IGNoZWNrZWRSZXN1bHQudmFsdWUoKTsKKyAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgIH0KKyAgIH0KKyAgIEBl
bmRjb2RlCisgKgorICogSW1wbGljaXQgY29udmVyc2lvbiBmcm9tIHBsYWluIGludGVnZXJzIHRv
IGNoZWNrZWQgaW50ZWdlcnMgaXMgYWxsb3dlZC4gVGhlCisgKiBwbGFpbiBpbnRlZ2VyIGlzIGNo
ZWNrZWQgdG8gYmUgaW4gcmFuZ2UgYmVmb3JlIGJlaW5nIGNhc3RlZCB0byB0aGUKKyAqIGRlc3Rp
bmF0aW9uIHR5cGUuIFRoaXMgbWVhbnMgdGhhdCB0aGUgZm9sbG93aW5nIGxpbmVzIGFsbCBjb21w
aWxlLCBhbmQgdGhlCisgKiByZXN1bHRpbmcgQ2hlY2tlZEludHMgYXJlIGNvcnJlY3RseSBkZXRl
Y3RlZCBhcyB2YWxpZCBvciBpbnZhbGlkOgorICogQGNvZGUKKyAgIC8vIDEgaXMgb2YgdHlwZSBp
bnQsIGlzIGZvdW5kIHRvIGJlIGluIHJhbmdlIGZvciB1aW50OF90LCB4IGlzIHZhbGlkCisgICBD
aGVja2VkSW50PHVpbnQ4X3Q+IHgoMSk7CisgICAvLyAtMSBpcyBvZiB0eXBlIGludCwgaXMgZm91
bmQgbm90IHRvIGJlIGluIHJhbmdlIGZvciB1aW50OF90LCB4IGlzIGludmFsaWQKKyAgIENoZWNr
ZWRJbnQ8dWludDhfdD4geCgtMSk7CisgICAvLyAtMSBpcyBvZiB0eXBlIGludCwgaXMgZm91bmQg
dG8gYmUgaW4gcmFuZ2UgZm9yIGludDhfdCwgeCBpcyB2YWxpZAorICAgQ2hlY2tlZEludDxpbnQ4
X3Q+IHgoLTEpOworICAgLy8gMTAwMCBpcyBvZiB0eXBlIGludDE2X3QsIGlzIGZvdW5kIG5vdCB0
byBiZSBpbiByYW5nZSBmb3IgaW50OF90LAorICAgLy8geCBpcyBpbnZhbGlkCisgICBDaGVja2Vk
SW50PGludDhfdD4geChpbnQxNl90KDEwMDApKTsgCisgICAvLyAzMTIzNDU2Nzg5IGlzIG9mIHR5
cGUgdWludDMyX3QsIGlzIGZvdW5kIG5vdCB0byBiZSBpbiByYW5nZSBmb3IgaW50MzJfdCwKKyAg
IC8vIHggaXMgaW52YWxpZAorICAgQ2hlY2tlZEludDxpbnQzMl90PiB4KHVpbnQzMl90KDMxMjM0
NTY3ODkpKTsKKyAqIEBlbmRjb2RlCisgKiBJbXBsaWNpdCBjb252ZXJzaW9uIGZyb20KKyAqIGNo
ZWNrZWQgaW50ZWdlcnMgdG8gcGxhaW4gaW50ZWdlcnMgaXMgbm90IGFsbG93ZWQuIEFzIHNob3du
IGluIHRoZQorICogYWJvdmUgZXhhbXBsZSwgdG8gZ2V0IHRoZSB2YWx1ZSBvZiBhIGNoZWNrZWQg
aW50ZWdlciBhcyBhIG5vcm1hbCBpbnRlZ2VyLAorICogY2FsbCB2YWx1ZSgpLgorICoKKyAqIEFy
aXRobWV0aWMgb3BlcmF0aW9ucyBiZXR3ZWVuIGNoZWNrZWQgYW5kIHBsYWluIGludGVnZXJzIGlz
IGFsbG93ZWQ7IHRoZQorICogcmVzdWx0IHR5cGUgaXMgdGhlIHR5cGUgb2YgdGhlIGNoZWNrZWQg
aW50ZWdlci4KKyAqCisgKiBDaGVja2VkIGludGVnZXJzIG9mIGRpZmZlcmVudCB0eXBlcyBjYW5u
b3QgYmUgdXNlZCBpbiB0aGUgc2FtZSBhcml0aG1ldGljCisgKiBleHByZXNzaW9uLgorICoKKyAq
IFRoZXJlIGFyZSBjb252ZW5pZW5jZSB0eXBlZGVmcyBmb3IgYWxsIHN0ZGludCB0eXBlcywgb2Yg
dGhlIGZvbGxvd2luZyBmb3JtCisgKiAodGhlc2UgYXJlIGp1c3QgMiBleGFtcGxlcyk6CisgICBA
Y29kZQorICAgdHlwZWRlZiBDaGVja2VkSW50PGludDMyX3Q+IENoZWNrZWRJbnQzMjsKKyAgIHR5
cGVkZWYgQ2hlY2tlZEludDx1aW50MTZfdD4gQ2hlY2tlZFVpbnQxNjsKKyAgIEBlbmRjb2RlCisg
Ki8KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBjbGFzcyBDaGVja2VkSW50CiB7Ci1wcm90ZWN0ZWQ6
CisgIHByb3RlY3RlZDoKICAgICBUIG1WYWx1ZTsKLSAgICBUIG1Jc1ZhbGlkOyAvLyBzdG9yZWQg
YXMgYSBUIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgaW50ZWdlciBjb252ZXJzaW9ucyB3aGVuCi0g
ICAgICAgICAgICAgICAgLy8gZXZhbHVhdGluZyBuZXN0ZWQgYXJpdGhtZXRpYyBleHByZXNzaW9u
cy4KKyAgICBib29sIG1Jc1ZhbGlkOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBD
aGVja2VkSW50KGNvbnN0IFUmIHZhbHVlLCBib29sIGlzVmFsaWQpIDogbVZhbHVlKHZhbHVlKSwg
bUlzVmFsaWQoaXNWYWxpZCkKKyAgICBDaGVja2VkSW50KFUgdmFsdWUsIGJvb2wgaXNWYWxpZCkg
OiBtVmFsdWUodmFsdWUpLCBtSXNWYWxpZChpc1ZhbGlkKQogICAgIHsKLSAgICAgICAgQ2hlY2tl
ZEludF9pbnRlcm5hbDo6VFlQRV9OT1RfU1VQUE9SVEVEX0JZX0NoZWNrZWRJbnQ8VD46OnJ1bigp
OworICAgICAgTU9aX1NUQVRJQ19BU1NFUlQoZGV0YWlsOjpJc1N1cHBvcnRlZDxUPjo6dmFsdWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAiVGhpcyB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgYnkg
Q2hlY2tlZEludCIpOwogICAgIH0KIAotcHVibGljOgotICAgIC8qKiBDb25zdHJ1Y3RzIGEgY2hl
Y2tlZCBpbnRlZ2VyIHdpdGggZ2l2ZW4gXGEgdmFsdWUuIFRoZSBjaGVja2VkIGludGVnZXIgaXMg
aW5pdGlhbGl6ZWQgYXMgdmFsaWQgb3IgaW52YWxpZAotICAgICAgKiBkZXBlbmRpbmcgb24gd2hl
dGhlciB0aGUgXGEgdmFsdWUgaXMgaW4gcmFuZ2UuCi0gICAgICAqCi0gICAgICAqIFRoaXMgY29u
c3RydWN0b3IgaXMgbm90IGV4cGxpY2l0LiBJbnN0ZWFkLCB0aGUgdHlwZSBvZiBpdHMgYXJndW1l
bnQgaXMgYSBzZXBhcmF0ZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIsCi0gICAgICAqIGVuc3VyaW5nIHRo
YXQgbm8gY29udmVyc2lvbiBpcyBwZXJmb3JtZWQgYmVmb3JlIHRoaXMgY29uc3RydWN0b3IgaXMg
YWN0dWFsbHkgY2FsbGVkLgotICAgICAgKiBBcyBleHBsYWluZWQgaW4gdGhlIGFib3ZlIGRvY3Vt
ZW50YXRpb24gZm9yIGNsYXNzIENoZWNrZWRJbnQsIHRoaXMgY29uc3RydWN0b3IgY2hlY2tzIHRo
YXQgaXRzIGFyZ3VtZW50IGlzCi0gICAgICAqIHZhbGlkLgotICAgICAgKi8KKyAgcHVibGljOgor
ICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSBjaGVja2VkIGludGVnZXIgd2l0aCBnaXZlbiBA
YSB2YWx1ZS4gVGhlIGNoZWNrZWQgaW50ZWdlciBpcworICAgICAqIGluaXRpYWxpemVkIGFzIHZh
bGlkIG9yIGludmFsaWQgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIEBhIHZhbHVlCisgICAgICog
aXMgaW4gcmFuZ2UuCisgICAgICoKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGlzIG5vdCBleHBs
aWNpdC4gSW5zdGVhZCwgdGhlIHR5cGUgb2YgaXRzIGFyZ3VtZW50IGlzIGEKKyAgICAgKiBzZXBh
cmF0ZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIsIGVuc3VyaW5nIHRoYXQgbm8gY29udmVyc2lvbiBpcyBw
ZXJmb3JtZWQKKyAgICAgKiBiZWZvcmUgdGhpcyBjb25zdHJ1Y3RvciBpcyBhY3R1YWxseSBjYWxs
ZWQuIEFzIGV4cGxhaW5lZCBpbiB0aGUgYWJvdmUKKyAgICAgKiBkb2N1bWVudGF0aW9uIGZvciBj
bGFzcyBDaGVja2VkSW50LCB0aGlzIGNvbnN0cnVjdG9yIGNoZWNrcyB0aGF0IGl0cworICAgICAq
IGFyZ3VtZW50IGlzIHZhbGlkLgorICAgICAqLwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0g
ICAgQ2hlY2tlZEludChjb25zdCBVJiB2YWx1ZSkKLSAgICAgICAgOiBtVmFsdWUodmFsdWUpLAot
ICAgICAgICAgIG1Jc1ZhbGlkKENoZWNrZWRJbnRfaW50ZXJuYWw6OmlzX2luX3JhbmdlPFQ+KHZh
bHVlKSkKKyAgICBDaGVja2VkSW50KFUgdmFsdWUpCisgICAgICA6IG1WYWx1ZShUKHZhbHVlKSks
CisgICAgICAgIG1Jc1ZhbGlkKGRldGFpbDo6SXNJblJhbmdlPFQ+KHZhbHVlKSkKICAgICB7Ci0g
ICAgICAgIENoZWNrZWRJbnRfaW50ZXJuYWw6OlRZUEVfTk9UX1NVUFBPUlRFRF9CWV9DaGVja2Vk
SW50PFQ+OjpydW4oKTsKKyAgICAgIE1PWl9TVEFUSUNfQVNTRVJUKGRldGFpbDo6SXNTdXBwb3J0
ZWQ8VD46OnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgIlRoaXMgdHlwZSBpcyBub3Qg
c3VwcG9ydGVkIGJ5IENoZWNrZWRJbnQiKTsKICAgICB9CiAKLSAgICAvKiogQ29uc3RydWN0cyBh
IHZhbGlkIGNoZWNrZWQgaW50ZWdlciB3aXRoIHVuaW5pdGlhbGl6ZWQgdmFsdWUgKi8KLSAgICBD
aGVja2VkSW50KCkgOiBtSXNWYWxpZCgxKQorICAgIC8qKiBDb25zdHJ1Y3RzIGEgdmFsaWQgY2hl
Y2tlZCBpbnRlZ2VyIHdpdGggaW5pdGlhbCB2YWx1ZSAwICovCisgICAgQ2hlY2tlZEludCgpIDog
bVZhbHVlKDApLCBtSXNWYWxpZCh0cnVlKQogICAgIHsKLSAgICAgICAgQ2hlY2tlZEludF9pbnRl
cm5hbDo6VFlQRV9OT1RfU1VQUE9SVEVEX0JZX0NoZWNrZWRJbnQ8VD46OnJ1bigpOworICAgICAg
TU9aX1NUQVRJQ19BU1NFUlQoZGV0YWlsOjpJc1N1cHBvcnRlZDxUPjo6dmFsdWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAiVGhpcyB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgQ2hlY2tlZElu
dCIpOwogICAgIH0KIAotICAgIC8qKiBccmV0dXJucyB0aGUgYWN0dWFsIHZhbHVlICovCi0gICAg
VCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1WYWx1ZTsgfQorICAgIC8qKiBAcmV0dXJucyB0aGUg
YWN0dWFsIHZhbHVlICovCisgICAgVCB2YWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgTU9aX0FT
U0VSVChtSXNWYWxpZCwgIkludmFsaWQgY2hlY2tlZCBpbnRlZ2VyIChkaXZpc2lvbiBieSB6ZXJv
IG9yIGludGVnZXIgb3ZlcmZsb3cpIik7CisgICAgICByZXR1cm4gbVZhbHVlOworICAgIH0KIAot
ICAgIC8qKiBccmV0dXJucyB0cnVlIGlmIHRoZSBjaGVja2VkIGludGVnZXIgaXMgdmFsaWQsIGku
ZS4gaXMgbm90IHRoZSByZXN1bHQKLSAgICAgICogb2YgYW4gaW52YWxpZCBvcGVyYXRpb24gb3Ig
b2YgYW4gb3BlcmF0aW9uIGludm9sdmluZyBhbiBpbnZhbGlkIGNoZWNrZWQgaW50ZWdlcgotICAg
ICAgKi8KLSAgICBib29sIHZhbGlkKCkgY29uc3QgeyByZXR1cm4gbUlzVmFsaWQ7IH0KKyAgICAv
KioKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBjaGVja2VkIGludGVnZXIgaXMgdmFsaWQs
IGkuZS4gaXMgbm90IHRoZSByZXN1bHQKKyAgICAgKiBvZiBhbiBpbnZhbGlkIG9wZXJhdGlvbiBv
ciBvZiBhbiBvcGVyYXRpb24gaW52b2x2aW5nIGFuIGludmFsaWQgY2hlY2tlZAorICAgICAqIGlu
dGVnZXIKKyAgICAgKi8KKyAgICBib29sIGlzVmFsaWQoKSBjb25zdAorICAgIHsKKyAgICAgIHJl
dHVybiBtSXNWYWxpZDsKKyAgICB9CiAKLSAgICAvKiogXHJldHVybnMgdGhlIHN1bS4gQ2hlY2tz
IGZvciBvdmVyZmxvdy4gKi8KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBmcmllbmQgQ2hlY2tl
ZEludDxVPiBvcGVyYXRvciArKGNvbnN0IENoZWNrZWRJbnQ8VT4mIGxocywgY29uc3QgQ2hlY2tl
ZEludDxVPiYgcmhzKTsKLSAgICAvKiogQWRkcy4gQ2hlY2tzIGZvciBvdmVyZmxvdy4gXHJldHVy
bnMgc2VsZiByZWZlcmVuY2UgKi8KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBDaGVja2VkSW50
JiBvcGVyYXRvciArPShjb25zdCBVICZyaHMpOwotICAgIC8qKiBccmV0dXJucyB0aGUgZGlmZmVy
ZW5jZS4gQ2hlY2tzIGZvciBvdmVyZmxvdy4gKi8KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBm
cmllbmQgQ2hlY2tlZEludDxVPiBvcGVyYXRvciAtKGNvbnN0IENoZWNrZWRJbnQ8VT4mIGxocywg
Y29uc3QgQ2hlY2tlZEludDxVPiAmcmhzKTsKLSAgICAvKiogU3Vic3RyYWN0cy4gQ2hlY2tzIGZv
ciBvdmVyZmxvdy4gXHJldHVybnMgc2VsZiByZWZlcmVuY2UgKi8KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPiBDaGVja2VkSW50JiBvcGVyYXRvciAtPShjb25zdCBVICZyaHMpOwotICAgIC8qKiBc
cmV0dXJucyB0aGUgcHJvZHVjdC4gQ2hlY2tzIGZvciBvdmVyZmxvdy4gKi8KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPiBmcmllbmQgQ2hlY2tlZEludDxVPiBvcGVyYXRvciAqKGNvbnN0IENoZWNr
ZWRJbnQ8VT4mIGxocywgY29uc3QgQ2hlY2tlZEludDxVPiAmcmhzKTsKLSAgICAvKiogTXVsdGlw
bGllcy4gQ2hlY2tzIGZvciBvdmVyZmxvdy4gXHJldHVybnMgc2VsZiByZWZlcmVuY2UgKi8KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBDaGVja2VkSW50JiBvcGVyYXRvciAqPShjb25zdCBVICZy
aHMpOwotICAgIC8qKiBccmV0dXJucyB0aGUgcXVvdGllbnQuIENoZWNrcyBmb3Igb3ZlcmZsb3cg
YW5kIGZvciBkaXZpZGUtYnktemVyby4gKi8KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBmcmll
bmQgQ2hlY2tlZEludDxVPiBvcGVyYXRvciAvKGNvbnN0IENoZWNrZWRJbnQ8VT4mIGxocywgY29u
c3QgQ2hlY2tlZEludDxVPiAmcmhzKTsKLSAgICAvKiogRGl2aWRlcy4gQ2hlY2tzIGZvciBvdmVy
ZmxvdyBhbmQgZm9yIGRpdmlkZS1ieS16ZXJvLiBccmV0dXJucyBzZWxmIHJlZmVyZW5jZSAqLwot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IENoZWNrZWRJbnQmIG9wZXJhdG9yIC89KGNvbnN0IFUg
JnJocyk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBmcmllbmQgQ2hlY2tlZEludDxV
PiBvcGVyYXRvciArKGNvbnN0IENoZWNrZWRJbnQ8VT4mIGxocywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IENoZWNrZWRJbnQ8VT4mIHJocyk7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVT4KKyAgICBDaGVja2VkSW50JiBvcGVyYXRvciArPShVIHJocyk7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBmcmllbmQgQ2hlY2tlZEludDxVPiBvcGVyYXRvciAt
KGNvbnN0IENoZWNrZWRJbnQ8VT4mIGxocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IENoZWNrZWRJbnQ8VT4gJnJocyk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4KKyAgICBDaGVja2VkSW50JiBvcGVyYXRvciAtPShVIHJocyk7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVT4KKyAgICBmcmllbmQgQ2hlY2tlZEludDxVPiBvcGVyYXRvciAqKGNvbnN0IENoZWNr
ZWRJbnQ8VT4mIGxocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IENoZWNrZWRJbnQ8VT4gJnJocyk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBDaGVj
a2VkSW50JiBvcGVyYXRvciAqPShVIHJocyk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAg
ICBmcmllbmQgQ2hlY2tlZEludDxVPiBvcGVyYXRvciAvKGNvbnN0IENoZWNrZWRJbnQ8VT4mIGxo
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENoZWNrZWRJbnQ8
VT4gJnJocyk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBDaGVja2VkSW50JiBvcGVy
YXRvciAvPShVIHJocyk7CiAKLSAgICAvKiogXHJldHVybnMgdGhlIG9wcG9zaXRlIHZhbHVlLiBD
aGVja3MgZm9yIG92ZXJmbG93LiAqLwogICAgIENoZWNrZWRJbnQgb3BlcmF0b3IgLSgpIGNvbnN0
CiAgICAgewotICAgICAgICBUIHJlc3VsdCA9IC12YWx1ZSgpOwotICAgICAgICAvKiBnaXZlIHRo
ZSBjb21waWxlciBhIGdvb2QgY2hhbmNlIHRvIHBlcmZvcm0gUlZPICovCi0gICAgICAgIHJldHVy
biBDaGVja2VkSW50KHJlc3VsdCwKLSAgICAgICAgICAgICAgICAgICAgICAgbUlzVmFsaWQgJiBD
aGVja2VkSW50X2ludGVybmFsOjppc19zdWJfdmFsaWQoVCgwKSwgdmFsdWUoKSwgcmVzdWx0KSk7
CisgICAgICAvLyBDaXJjdW12ZW50IG1zdmMgd2FybmluZyBhYm91dCAtIGFwcGxpZWQgdG8gdW5z
aWduZWQgaW50LgorICAgICAgLy8gaWYgd2UncmUgdW5zaWduZWQsIHRoZSBvbmx5IHZhbGlkIGNh
c2UgYW55d2F5IGlzIDAKKyAgICAgIC8vIGluIHdoaWNoIGNhc2UgLSBpcyBhIG5vLW9wLgorICAg
ICAgVCByZXN1bHQgPSBkZXRhaWw6Ok9wcG9zaXRlSWZTaWduZWQobVZhbHVlKTsKKyAgICAgIC8q
IEhlbHAgdGhlIGNvbXBpbGVyIHBlcmZvcm0gUlZPIChyZXR1cm4gdmFsdWUgb3B0aW1pemF0aW9u
KS4gKi8KKyAgICAgIHJldHVybiBDaGVja2VkSW50KHJlc3VsdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1Jc1ZhbGlkICYmIGRldGFpbDo6SXNTdWJWYWxpZChUKDApLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1WYWx1ZSkpOworICAg
IH0KKworICAgIC8qKgorICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGxlZnQgYW5kIHJpZ2h0
IGhhbmQgc2lkZXMgYXJlIHZhbGlkCisgICAgICogYW5kIGhhdmUgdGhlIHNhbWUgdmFsdWUuCisg
ICAgICoKKyAgICAgKiBOb3RlIHRoYXQgdGhlc2Ugc2VtYW50aWNzIGFyZSB0aGUgcmVhc29uIHdo
eSB3ZSBkb24ndCBvZmZlcgorICAgICAqIGEgb3BlcmF0b3IhPS4gSW5kZWVkLCB3ZSdkIHdhbnQg
dG8gaGF2ZSBhIT1iIGJlIGVxdWl2YWxlbnQgdG8gIShhPT1iKQorICAgICAqIGJ1dCB0aGF0IHdv
dWxkIG1lYW4gdGhhdCB3aGVuZXZlciBhIG9yIGIgaXMgaW52YWxpZCwgYSE9YgorICAgICAqIGlz
IGFsd2F5cyB0cnVlLCB3aGljaCB3b3VsZCBiZSB2ZXJ5IGNvbmZ1c2luZy4KKyAgICAgKgorICAg
ICAqIEZvciBzaW1pbGFyIHJlYXNvbnMsIG9wZXJhdG9ycyA8LCA+LCA8PSwgPj0gd291bGQgYmUg
dmVyeSB0cmlja3kgdG8KKyAgICAgKiBzcGVjaWZ5LCBzbyB3ZSBqdXN0IGF2b2lkIG9mZmVyaW5n
IHRoZW0uCisgICAgICoKKyAgICAgKiBOb3RpY2UgdGhhdCB0aGVzZSA9PSBzZW1hbnRpY3MgYXJl
IG1hZGUgbW9yZSByZWFzb25hYmxlIGJ5IHRoZXNlIGZhY3RzOgorICAgICAqICAxLiBhPT1iIGlt
cGxpZXMgZXF1YWxpdHkgYXQgdGhlIHJhdyBkYXRhIGxldmVsCisgICAgICogICAgICh0aGUgY29u
dmVyc2UgaXMgZmFsc2UsIGFzIGE9PWIgaXMgbmV2ZXIgdHJ1ZSBhbW9uZyBpbnZhbGlkcykKKyAg
ICAgKiAgMi4gVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBiZWhhdmlvciBvZiBJRUVFIGZsb2F0cywg
d2hlcmUgYT09YgorICAgICAqICAgICBtZWFucyB0aGF0IGEgYW5kIGIgaGF2ZSB0aGUgc2FtZSB2
YWx1ZSAqYW5kKiBuZWl0aGVyIGlzIE5hTi4KKyAgICAgKi8KKyAgICBib29sIG9wZXJhdG9yID09
KGNvbnN0IENoZWNrZWRJbnQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgIHJldHVybiBtSXNW
YWxpZCAmJiBvdGhlci5tSXNWYWxpZCAmJiBtVmFsdWUgPT0gb3RoZXIubVZhbHVlOwogICAgIH0K
IAotICAgIC8qKiBccmV0dXJucyB0cnVlIGlmIHRoZSBsZWZ0IGFuZCByaWdodCBoYW5kIHNpZGVz
IGFyZSB2YWxpZCBhbmQgaGF2ZSB0aGUgc2FtZSB2YWx1ZS4gKi8KLSAgICBib29sIG9wZXJhdG9y
ID09KGNvbnN0IENoZWNrZWRJbnQmIG90aGVyKSBjb25zdAorICAgIC8qKiBwcmVmaXggKysgKi8K
KyAgICBDaGVja2VkSW50JiBvcGVyYXRvcisrKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBib29s
KG1Jc1ZhbGlkICYgb3RoZXIubUlzVmFsaWQgJiBUKHZhbHVlKCkgPT0gb3RoZXIudmFsdWUoKSkp
OworICAgICAgKnRoaXMgKz0gMTsKKyAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKLXByaXZh
dGU6Ci0gICAgLyoqIG9wZXJhdG9yIT0gaXMgZGlzYWJsZWQuIEluZGVlZDogKGEhPWIpIHNob3Vs
ZCBiZSB0aGUgc2FtZSBhcyAhKGE9PWIpIGJ1dCB0aGF0Ci0gICAgICAqIHdvdWxkIG1lYW4gdGhh
dCBpZiBhIG9yIGIgaXMgaW52YWxpZCwgKGEhPWIpIGlzIGFsd2F5cyB0cnVlLCB3aGljaCBpcyB2
ZXJ5IHRyaWNreS4KLSAgICAgICovCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBib29s
IG9wZXJhdG9yICE9KGNvbnN0IFUmIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90
aGVyKTsgfQotfTsKKyAgICAvKiogcG9zdGZpeCArKyAqLworICAgIENoZWNrZWRJbnQgb3BlcmF0
b3IrKyhpbnQpCisgICAgeworICAgICAgQ2hlY2tlZEludCB0bXAgPSAqdGhpczsKKyAgICAgICp0
aGlzICs9IDE7CisgICAgICByZXR1cm4gdG1wOworICAgIH0KIAotI2RlZmluZSBDSEVDS0VESU5U
X0JBU0lDX0JJTkFSWV9PUEVSQVRPUihOQU1FLCBPUCkgICAgICAgICAgICAgICBcCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LWlubGluZSBDaGVja2VkSW50PFQ+IG9wZXJhdG9yIE9QKGNvbnN0IENoZWNrZWRJbnQ8VD4gJmxo
cywgY29uc3QgQ2hlY2tlZEludDxUPiAmcmhzKSBcCi17ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBUIHggPSBsaHMudmFs
dWUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFQgeSA9
IHJocy52YWx1ZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgVCByZXN1bHQgPSB4IE9QIHk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICBUIGlzX29wX3ZhbGlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICA9IENoZWNrZWRJbnRfaW50ZXJuYWw6OmlzXyMjTkFNRSMj
X3ZhbGlkKHgsIHksIHJlc3VsdCk7ICBcCi0gICAgLyogZ2l2ZSB0aGUgY29tcGlsZXIgYSBnb29k
IGNoYW5jZSB0byBwZXJmb3JtIFJWTyAqLyAgICAgIFwKLSAgICByZXR1cm4gQ2hlY2tlZEludDxU
PihyZXN1bHQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAg
ICAgICAgICAgIGxocy5tSXNWYWxpZCAmICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgICAgICAgICAgICAgICAgcmhzLm1Jc1ZhbGlkICYgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgICAgICAgICAgICAgICBpc19vcF92YWxpZCk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotfQorICAgIC8qKiBwcmVmaXggLS0gKi8KKyAgICBDaGVja2VkSW50JiBvcGVy
YXRvci0tKCkKKyAgICB7CisgICAgICAqdGhpcyAtPSAxOworICAgICAgcmV0dXJuICp0aGlzOwor
ICAgIH0KIAotQ0hFQ0tFRElOVF9CQVNJQ19CSU5BUllfT1BFUkFUT1IoYWRkLCArKQotQ0hFQ0tF
RElOVF9CQVNJQ19CSU5BUllfT1BFUkFUT1Ioc3ViLCAtKQotQ0hFQ0tFRElOVF9CQVNJQ19CSU5B
UllfT1BFUkFUT1IobXVsLCAqKQorICAgIC8qKiBwb3N0Zml4IC0tICovCisgICAgQ2hlY2tlZElu
dCBvcGVyYXRvci0tKGludCkKKyAgICB7CisgICAgICBDaGVja2VkSW50IHRtcCA9ICp0aGlzOwor
ICAgICAgKnRoaXMgLT0gMTsKKyAgICAgIHJldHVybiB0bXA7CisgICAgfQogCi0vLyBkaXZpc2lv
biBjYW4ndCBiZSBpbXBsZW1lbnRlZCBieSBDSEVDS0VESU5UX0JBU0lDX0JJTkFSWV9PUEVSQVRP
UgotLy8gYmVjYXVzZSBpZiByaHMgPT0gMCwgd2UgYXJlIG5vdCBhbGxvd2VkIHRvIGV2ZW4gdHJ5
IHRvIGNvbXB1dGUgdGhlIHF1b3RpZW50LgotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBD
aGVja2VkSW50PFQ+IG9wZXJhdG9yIC8oY29uc3QgQ2hlY2tlZEludDxUPiAmbGhzLCBjb25zdCBD
aGVja2VkSW50PFQ+ICZyaHMpCi17Ci0gICAgVCB4ID0gbGhzLnZhbHVlKCk7Ci0gICAgVCB5ID0g
cmhzLnZhbHVlKCk7Ci0gICAgVCBpc19vcF92YWxpZCA9IENoZWNrZWRJbnRfaW50ZXJuYWw6Omlz
X2Rpdl92YWxpZCh4LCB5KTsKLSAgICBUIHJlc3VsdCA9IGlzX29wX3ZhbGlkID8gKHggLyB5KSA6
IDA7Ci0gICAgLyogZ2l2ZSB0aGUgY29tcGlsZXIgYSBnb29kIGNoYW5jZSB0byBwZXJmb3JtIFJW
TyAqLwotICAgIHJldHVybiBDaGVja2VkSW50PFQ+KHJlc3VsdCwKLSAgICAgICAgICAgICAgICAg
ICAgICBsaHMubUlzVmFsaWQgJgotICAgICAgICAgICAgICAgICAgICAgIHJocy5tSXNWYWxpZCAm
Ci0gICAgICAgICAgICAgICAgICAgICAgaXNfb3BfdmFsaWQpOwotfQorICBwcml2YXRlOgorICAg
IC8qKgorICAgICAqIFRoZSAhPSwgPCwgPD0sID4sID49IG9wZXJhdG9ycyBhcmUgZGlzYWJsZWQ6
CisgICAgICogc2VlIHRoZSBjb21tZW50IG9uIG9wZXJhdG9yPT0uCisgICAgICovCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4KKyAgICBib29sIG9wZXJhdG9yICE9KFUgb3RoZXIpIGNvbnN0IE1P
Wl9ERUxFVEU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBib29sIG9wZXJhdG9yIDwo
VSBvdGhlcikgY29uc3QgTU9aX0RFTEVURTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAg
IGJvb2wgb3BlcmF0b3IgPD0oVSBvdGhlcikgY29uc3QgTU9aX0RFTEVURTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPgorICAgIGJvb2wgb3BlcmF0b3IgPihVIG90aGVyKSBjb25zdCBNT1pfREVM
RVRFOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgYm9vbCBvcGVyYXRvciA+PShVIG90
aGVyKSBjb25zdCBNT1pfREVMRVRFOworfTsKIAotLy8gaW1wbGVtZW50IGNhc3RfdG9fQ2hlY2tl
ZEludDxUPih4KSwgbWFraW5nIHN1cmUgdGhhdAotLy8gIC0gaXQgYWxsb3dzIHggdG8gYmUgZWl0
aGVyIGEgQ2hlY2tlZEludDxUPiBvciBhbnkgaW50ZWdlciB0eXBlIHRoYXQgY2FuIGJlIGNhc3Rl
ZCB0byBUCi0vLyAgLSBpZiB4IGlzIGFscmVhZHkgYSBDaGVja2VkSW50PFQ+LCB3ZSBqdXN0IHJl
dHVybiBhIHJlZmVyZW5jZSB0byBpdCwgaW5zdGVhZCBvZiBjb3B5aW5nIGl0IChvcHRpbWl6YXRp
b24pCisjZGVmaW5lIE1PWl9DSEVDS0VESU5UX0JBU0lDX0JJTkFSWV9PUEVSQVRPUihOQU1FLCBP
UCkgICAgICAgICAgICAgICAgXAordGVtcGxhdGU8dHlwZW5hbWUgVD4gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2lubGluZSBDaGVja2VkSW50PFQ+
IG9wZXJhdG9yIE9QKGNvbnN0IENoZWNrZWRJbnQ8VD4gJmxocywgICAgICAgICAgICBcCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDaGVja2VkSW50PFQ+ICZyaHMpICAg
ICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaWYgKCFkZXRhaWw6OklzIyNOQU1FIyNWYWxp
ZChsaHMubVZhbHVlLCByaHMubVZhbHVlKSkgICAgICAgICAgICAgICBcCisgICAgcmV0dXJuIENo
ZWNrZWRJbnQ8VD4oMCwgZmFsc2UpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgcmV0dXJuIENoZWNrZWRJbnQ8VD4obGhzLm1WYWx1ZSBPUCBy
aHMubVZhbHVlLCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAg
IGxocy5tSXNWYWxpZCAmJiByaHMubUlzVmFsaWQpOyAgICAgICAgICAgICAgICAgXAorfQorCitN
T1pfQ0hFQ0tFRElOVF9CQVNJQ19CSU5BUllfT1BFUkFUT1IoQWRkLCArKQorTU9aX0NIRUNLRURJ
TlRfQkFTSUNfQklOQVJZX09QRVJBVE9SKFN1YiwgLSkKK01PWl9DSEVDS0VESU5UX0JBU0lDX0JJ
TkFSWV9PUEVSQVRPUihNdWwsICopCitNT1pfQ0hFQ0tFRElOVF9CQVNJQ19CSU5BUllfT1BFUkFU
T1IoRGl2LCAvKQorCisjdW5kZWYgTU9aX0NIRUNLRURJTlRfQkFTSUNfQklOQVJZX09QRVJBVE9S
CisKKy8vIEltcGxlbWVudCBjYXN0VG9DaGVja2VkSW50PFQ+KHgpLCBtYWtpbmcgc3VyZSB0aGF0
CisvLyAgLSBpdCBhbGxvd3MgeCB0byBiZSBlaXRoZXIgYSBDaGVja2VkSW50PFQ+IG9yIGFueSBp
bnRlZ2VyIHR5cGUKKy8vICAgIHRoYXQgY2FuIGJlIGNhc3RlZCB0byBUCisvLyAgLSBpZiB4IGlz
IGFscmVhZHkgYSBDaGVja2VkSW50PFQ+LCB3ZSBqdXN0IHJldHVybiBhIHJlZmVyZW5jZSB0byBp
dCwKKy8vICAgIGluc3RlYWQgb2YgY29weWluZyBpdCAob3B0aW1pemF0aW9uKQorCituYW1lc3Bh
Y2UgZGV0YWlsIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLXN0cnVjdCBj
YXN0X3RvX0NoZWNrZWRJbnRfaW1wbAorc3RydWN0IENhc3RUb0NoZWNrZWRJbnRJbXBsCiB7Ci0g
ICAgdHlwZWRlZiBDaGVja2VkSW50PFQ+IHJldHVybl90eXBlOwotICAgIHN0YXRpYyBDaGVja2Vk
SW50PFQ+IHJ1bihjb25zdCBVJiB1KSB7IHJldHVybiB1OyB9CisgICAgdHlwZWRlZiBDaGVja2Vk
SW50PFQ+IFJldHVyblR5cGU7CisgICAgc3RhdGljIENoZWNrZWRJbnQ8VD4gcnVuKFUgdSkgeyBy
ZXR1cm4gdTsgfQogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBjYXN0X3RvX0No
ZWNrZWRJbnRfaW1wbDxULCBDaGVja2VkSW50PFQ+ID4KK3N0cnVjdCBDYXN0VG9DaGVja2VkSW50
SW1wbDxULCBDaGVja2VkSW50PFQ+ID4KIHsKLSAgICB0eXBlZGVmIGNvbnN0IENoZWNrZWRJbnQ8
VD4mIHJldHVybl90eXBlOworICAgIHR5cGVkZWYgY29uc3QgQ2hlY2tlZEludDxUPiYgUmV0dXJu
VHlwZTsKICAgICBzdGF0aWMgY29uc3QgQ2hlY2tlZEludDxUPiYgcnVuKGNvbnN0IENoZWNrZWRJ
bnQ8VD4mIHUpIHsgcmV0dXJuIHU7IH0KIH07CiAKK30gLy8gbmFtZXNwYWNlIGRldGFpbAorCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotaW5saW5lIHR5cGVuYW1lIGNhc3RfdG9f
Q2hlY2tlZEludF9pbXBsPFQsIFU+OjpyZXR1cm5fdHlwZQotY2FzdF90b19DaGVja2VkSW50KGNv
bnN0IFUmIHUpCitpbmxpbmUgdHlwZW5hbWUgZGV0YWlsOjpDYXN0VG9DaGVja2VkSW50SW1wbDxU
LCBVPjo6UmV0dXJuVHlwZQorY2FzdFRvQ2hlY2tlZEludChVIHUpCiB7Ci0gICAgcmV0dXJuIGNh
c3RfdG9fQ2hlY2tlZEludF9pbXBsPFQsIFU+OjpydW4odSk7CisgIHJldHVybiBkZXRhaWw6OkNh
c3RUb0NoZWNrZWRJbnRJbXBsPFQsIFU+OjpydW4odSk7CiB9CiAKLSNkZWZpbmUgQ0hFQ0tFRElO
VF9DT05WRU5JRU5DRV9CSU5BUllfT1BFUkFUT1JTKE9QLCBDT01QT1VORF9PUCkgXAotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBVPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLUNoZWNrZWRJbnQ8VD4mIENoZWNrZWRJbnQ8VD46Om9wZXJhdG9yIENPTVBPVU5E
X09QKGNvbnN0IFUgJnJocykgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKnRoaXMgPSAqdGhpcyBPUCBjYXN0
X3RvX0NoZWNrZWRJbnQ8VD4ocmhzKTsgICAgICAgICAgICAgICAgIFwKLSAgICByZXR1cm4gKnRo
aXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLWlubGluZSBDaGVja2VkSW50PFQ+IG9wZXJhdG9yIE9QKGNvbnN0IENoZWNrZWRJ
bnQ8VD4gJmxocywgY29uc3QgVSAmcmhzKSBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICByZXR1cm4gbGhzIE9QIGNh
c3RfdG9fQ2hlY2tlZEludDxUPihyaHMpOyAgICAgICAgICAgICAgICAgICAgXAotfSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi10
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLWlubGluZSBDaGVja2VkSW50PFQ+IG9wZXJhdG9yIE9QKGNvbnN0IFUgJiBsaHMsIGNv
bnN0IENoZWNrZWRJbnQ8VD4gJnJocykgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgcmV0dXJuIGNhc3RfdG9fQ2hl
Y2tlZEludDxUPihsaHMpIE9QIHJoczsgICAgICAgICAgICAgICAgICAgIFwKLX0KKyNkZWZpbmUg
TU9aX0NIRUNLRURJTlRfQ09OVkVOSUVOQ0VfQklOQVJZX09QRVJBVE9SUyhPUCwgQ09NUE9VTkRf
T1ApICBcCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCit0ZW1wbGF0ZTx0eXBlbmFtZSBVPiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitDaGVja2VkSW50PFQ+JiBDaGVja2VkSW50
PFQ+OjpvcGVyYXRvciBDT01QT1VORF9PUChVIHJocykgICAgICAgICBcCit7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICp0aGlzID0gKnRoaXMgT1AgY2FzdFRvQ2hlY2tlZEludDxUPihyaHMpOyAgICAgICAgICAgICAg
ICAgICAgICBcCisgIHJldHVybiAqdGhpczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitpbmxpbmUgQ2hl
Y2tlZEludDxUPiBvcGVyYXRvciBPUChjb25zdCBDaGVja2VkSW50PFQ+ICZsaHMsIFUgcmhzKSBc
Cit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgIHJldHVybiBsaHMgT1AgY2FzdFRvQ2hlY2tlZEludDxUPihyaHMpOyAg
ICAgICAgICAgICAgICAgICAgICAgICBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitpbmxpbmUg
Q2hlY2tlZEludDxUPiBvcGVyYXRvciBPUChVIGxocywgY29uc3QgQ2hlY2tlZEludDxUPiAmcmhz
KSBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgIHJldHVybiBjYXN0VG9DaGVja2VkSW50PFQ+KGxocykgT1Agcmhz
OyAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKK01PWl9DSEVDS0VESU5UX0NPTlZFTklF
TkNFX0JJTkFSWV9PUEVSQVRPUlMoKywgKz0pCitNT1pfQ0hFQ0tFRElOVF9DT05WRU5JRU5DRV9C
SU5BUllfT1BFUkFUT1JTKCosICo9KQorTU9aX0NIRUNLRURJTlRfQ09OVkVOSUVOQ0VfQklOQVJZ
X09QRVJBVE9SUygtLCAtPSkKK01PWl9DSEVDS0VESU5UX0NPTlZFTklFTkNFX0JJTkFSWV9PUEVS
QVRPUlMoLywgLz0pCiAKLUNIRUNLRURJTlRfQ09OVkVOSUVOQ0VfQklOQVJZX09QRVJBVE9SUygr
LCArPSkKLUNIRUNLRURJTlRfQ09OVkVOSUVOQ0VfQklOQVJZX09QRVJBVE9SUygqLCAqPSkKLUNI
RUNLRURJTlRfQ09OVkVOSUVOQ0VfQklOQVJZX09QRVJBVE9SUygtLCAtPSkKLUNIRUNLRURJTlRf
Q09OVkVOSUVOQ0VfQklOQVJZX09QRVJBVE9SUygvLCAvPSkKKyN1bmRlZiBNT1pfQ0hFQ0tFRElO
VF9DT05WRU5JRU5DRV9CSU5BUllfT1BFUkFUT1JTCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+Ci1pbmxpbmUgYm9vbCBvcGVyYXRvciA9PShjb25zdCBDaGVja2VkSW50PFQ+ICZs
aHMsIGNvbnN0IFUgJnJocykKK2lubGluZSBib29sCitvcGVyYXRvciA9PShjb25zdCBDaGVja2Vk
SW50PFQ+ICZsaHMsIFUgcmhzKQogewotICAgIHJldHVybiBsaHMgPT0gY2FzdF90b19DaGVja2Vk
SW50PFQ+KHJocyk7CisgIHJldHVybiBsaHMgPT0gY2FzdFRvQ2hlY2tlZEludDxUPihyaHMpOwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotaW5saW5lIGJvb2wgb3BlcmF0
b3IgPT0oY29uc3QgVSAmIGxocywgY29uc3QgQ2hlY2tlZEludDxUPiAmcmhzKQoraW5saW5lIGJv
b2wKK29wZXJhdG9yID09KFUgIGxocywgY29uc3QgQ2hlY2tlZEludDxUPiAmcmhzKQogewotICAg
IHJldHVybiBjYXN0X3RvX0NoZWNrZWRJbnQ8VD4obGhzKSA9PSByaHM7CisgIHJldHVybiBjYXN0
VG9DaGVja2VkSW50PFQ+KGxocykgPT0gcmhzOwogfQogCi19IC8vIGVuZCBuYW1lc3BhY2UgV2Vi
Q29yZQorLy8gQ29udmVuaWVuY2UgdHlwZWRlZnMuCit0eXBlZGVmIENoZWNrZWRJbnQ8aW50OF90
PiAgIENoZWNrZWRJbnQ4OwordHlwZWRlZiBDaGVja2VkSW50PHVpbnQ4X3Q+ICBDaGVja2VkVWlu
dDg7Cit0eXBlZGVmIENoZWNrZWRJbnQ8aW50MTZfdD4gIENoZWNrZWRJbnQxNjsKK3R5cGVkZWYg
Q2hlY2tlZEludDx1aW50MTZfdD4gQ2hlY2tlZFVpbnQxNjsKK3R5cGVkZWYgQ2hlY2tlZEludDxp
bnQzMl90PiAgQ2hlY2tlZEludDMyOwordHlwZWRlZiBDaGVja2VkSW50PHVpbnQzMl90PiBDaGVj
a2VkVWludDMyOwordHlwZWRlZiBDaGVja2VkSW50PGludDY0X3Q+ICBDaGVja2VkSW50NjQ7Cit0
eXBlZGVmIENoZWNrZWRJbnQ8dWludDY0X3Q+IENoZWNrZWRVaW50NjQ7CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAotI2VuZGlmIC8qIENoZWNrZWRJbnRfaCAqLworI2VuZGlmIC8qIG1vemls
bGFfQ2hlY2tlZEludF9oXyAqLwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0
YVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFW
aWV3LmNwcAkocmV2aXNpb24gMTMyMjc2KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
RGF0YVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIFBhc3NSZWZQdHI8
RGF0YVZpZXc+IERhdGFWaWV3OjpjcmVhdGUoUGEKICAgICBDaGVja2VkSW50PHVpbnQzMl90PiBj
aGVja2VkT2Zmc2V0KGJ5dGVPZmZzZXQpOwogICAgIENoZWNrZWRJbnQ8dWludDMyX3Q+IGNoZWNr
ZWRMZW5ndGgoYnl0ZUxlbmd0aCk7CiAgICAgQ2hlY2tlZEludDx1aW50MzJfdD4gY2hlY2tlZE1h
eCA9IGNoZWNrZWRPZmZzZXQgKyBjaGVja2VkTGVuZ3RoOwotICAgIGlmICghY2hlY2tlZE1heC52
YWxpZCgpIHx8IGNoZWNrZWRNYXgudmFsdWUoKSA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKQorICAg
IGlmICghY2hlY2tlZE1heC5pc1ZhbGlkKCkgfHwgY2hlY2tlZE1heC52YWx1ZSgpID4gYnVmZmVy
LT5ieXRlTGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSk7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuY3BwCShyZXZpc2lvbiAxMzIy
NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAgYm9vbCBXZWJHTEJ1ZmZlcjo6YXNzb2NpYXRlQnVm
ZmVyRGF0YUltcAogICAgICAgICBDaGVja2VkSW50PEdDM0RpbnRwdHI+IGNoZWNrZWRPZmZzZXQo
Ynl0ZU9mZnNldCk7CiAgICAgICAgIENoZWNrZWRJbnQ8R0MzRHNpemVpcHRyPiBjaGVja2VkTGVu
Z3RoKGJ5dGVMZW5ndGgpOwogICAgICAgICBDaGVja2VkSW50PEdDM0RpbnRwdHI+IGNoZWNrZWRN
YXggPSBjaGVja2VkT2Zmc2V0ICsgY2hlY2tlZExlbmd0aDsKLSAgICAgICAgaWYgKCFjaGVja2Vk
TWF4LnZhbGlkKCkgfHwgY2hlY2tlZE1heC52YWx1ZSgpID4gc3RhdGljX2Nhc3Q8aW50MzJfdD4o
YXJyYXktPmJ5dGVMZW5ndGgoKSkpCisgICAgICAgIGlmICghY2hlY2tlZE1heC5pc1ZhbGlkKCkg
fHwgY2hlY2tlZE1heC52YWx1ZSgpID4gc3RhdGljX2Nhc3Q8aW50MzJfdD4oYXJyYXktPmJ5dGVM
ZW5ndGgoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xMzUsNyAr
MTM1LDcgQEAgYm9vbCBXZWJHTEJ1ZmZlcjo6YXNzb2NpYXRlQnVmZmVyU3ViRGF0YQogICAgICAg
ICBDaGVja2VkSW50PEdDM0RzaXplaXB0cj4gY2hlY2tlZExlbmd0aChieXRlTGVuZ3RoKTsKICAg
ICAgICAgQ2hlY2tlZEludDxHQzNEaW50cHRyPiBjaGVja2VkQXJyYXlNYXggPSBjaGVja2VkQXJy
YXlPZmZzZXQgKyBjaGVja2VkTGVuZ3RoOwogICAgICAgICBDaGVja2VkSW50PEdDM0RpbnRwdHI+
IGNoZWNrZWRCdWZmZXJNYXggPSBjaGVja2VkQnVmZmVyT2Zmc2V0ICsgY2hlY2tlZExlbmd0aDsK
LSAgICAgICAgaWYgKCFjaGVja2VkQXJyYXlNYXgudmFsaWQoKSB8fCBjaGVja2VkQXJyYXlNYXgu
dmFsdWUoKSA+IHN0YXRpY19jYXN0PGludDMyX3Q+KGFycmF5LT5ieXRlTGVuZ3RoKCkpIHx8ICFj
aGVja2VkQnVmZmVyTWF4LnZhbGlkKCkgfHwgY2hlY2tlZEJ1ZmZlck1heC52YWx1ZSgpID4gbV9i
eXRlTGVuZ3RoKQorICAgICAgICBpZiAoIWNoZWNrZWRBcnJheU1heC5pc1ZhbGlkKCkgfHwgY2hl
Y2tlZEFycmF5TWF4LnZhbHVlKCkgPiBzdGF0aWNfY2FzdDxpbnQzMl90PihhcnJheS0+Ynl0ZUxl
bmd0aCgpKSB8fCAhY2hlY2tlZEJ1ZmZlck1heC5pc1ZhbGlkKCkgfHwgY2hlY2tlZEJ1ZmZlck1h
eC52YWx1ZSgpID4gbV9ieXRlTGVuZ3RoKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiAxMzIyNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTE4LDcgKzE5MTgsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0FycmF5cyhH
CiAgICAgICAgIENoZWNrZWRJbnQ8R0MzRGludD4gY2hlY2tlZEZpcnN0KGZpcnN0KTsKICAgICAg
ICAgQ2hlY2tlZEludDxHQzNEaW50PiBjaGVja2VkQ291bnQoY291bnQpOwogICAgICAgICBDaGVj
a2VkSW50PEdDM0RpbnQ+IGNoZWNrZWRTdW0gPSBjaGVja2VkRmlyc3QgKyBjaGVja2VkQ291bnQ7
Ci0gICAgICAgIGlmICghY2hlY2tlZFN1bS52YWxpZCgpIHx8ICF2YWxpZGF0ZVJlbmRlcmluZ1N0
YXRlKGNoZWNrZWRTdW0udmFsdWUoKSkpIHsKKyAgICAgICAgaWYgKCFjaGVja2VkU3VtLmlzVmFs
aWQoKSB8fCAhdmFsaWRhdGVSZW5kZXJpbmdTdGF0ZShjaGVja2VkU3VtLnZhbHVlKCkpKSB7CiAg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJkcmF3QXJyYXlzIiwgImF0dGVtcHQgdG8gYWNjZXNzIG91dCBvZiBib3VuZHMg
YXJyYXlzIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5j
cHAJKHJldmlzaW9uIDEzMjI3NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSw3IEBA
IEdDM0RlbnVtIEdyYXBoaWNzQ29udGV4dDNEOjpjb21wdXRlSW1hZ2UKICAgICB9CiAgICAgQ2hl
Y2tlZEludDx1aW50MzJfdD4gY2hlY2tlZFZhbHVlKGJ5dGVzUGVyQ29tcG9uZW50ICogY29tcG9u
ZW50c1BlclBpeGVsKTsKICAgICBjaGVja2VkVmFsdWUgKj0gIHdpZHRoOwotICAgIGlmICghY2hl
Y2tlZFZhbHVlLnZhbGlkKCkpCisgICAgaWYgKCFjaGVja2VkVmFsdWUuaXNWYWxpZCgpKQogICAg
ICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUU7CiAgICAgdW5zaWdu
ZWQgaW50IHZhbGlkUm93U2l6ZSA9IGNoZWNrZWRWYWx1ZS52YWx1ZSgpOwogICAgIHVuc2lnbmVk
IGludCBwYWRkaW5nID0gMDsKQEAgLTE2MSw3ICsxNjEsNyBAQCBHQzNEZW51bSBHcmFwaGljc0Nv
bnRleHQzRDo6Y29tcHV0ZUltYWdlCiAgICAgLy8gTGFzdCByb3cgbmVlZHMgbm8gcGFkZGluZy4K
ICAgICBjaGVja2VkVmFsdWUgKj0gKGhlaWdodCAtIDEpOwogICAgIGNoZWNrZWRWYWx1ZSArPSB2
YWxpZFJvd1NpemU7Ci0gICAgaWYgKCFjaGVja2VkVmFsdWUudmFsaWQoKSkKKyAgICBpZiAoIWNo
ZWNrZWRWYWx1ZS5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRTsKICAgICAqaW1hZ2VTaXplSW5CeXRlcyA9IGNoZWNrZWRWYWx1ZS52YWx1
ZSgpOwogICAgIGlmIChwYWRkaW5nSW5CeXRlcykK
</data>
<flag name="review"
          id="183840"
          type_id="1"
          status="+"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>