<?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>159279</bug_id>
          
          <creation_ts>2016-06-29 15:01:54 -0700</creation_ts>
          <short_desc>Generators violate bytecode liveness validation</short_desc>
          <delta_ts>2016-06-30 11:14:18 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=159281</see_also>
          <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="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rniwa</cc>
    
    <cc>saam</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1206519</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-06-29 15:01:54 -0700</bug_when>
    <thetext>[filip@hodor OpenSource] cd PerformanceTests/ES6SampleBench/Basic/
[filip@hodor Basic] DYLD_FRAMEWORK_PATH=../../../WebKitBuild/Release/ ../../../WebKitBuild/Release/jsc test.js --validateBytecode=true
Validation failure in #BxvGBu:[0x103794330-&gt;0x1037905d0, NoneFunctionCall, 2046 (StrictMode)]:

    Variable loc9 is expected to be dead.
    Result: -------1-1----------------------

#BxvGBu:[0x103794330-&gt;0x1037905d0, NoneFunctionCall, 2046 (StrictMode)]: 2046 m_instructions; 16368 bytes; 5 parameter(s); 32 callee register(s); 6 variable(s)
[   0] enter             
[   1] get_scope         loc3
[   3] mov               loc4, loc3
[   6] switch_imm        0, 2038(-&gt;2044), arg2
[  10] mov               loc5, Undefined(const0)
[  13] create_lexical_environment loc6, loc3, Cell: 0x1037a1720 (0x1037ef700:[SymbolTable, {}, NonArray, Leaf]), ID: 18(const1), &lt;JSValue()&gt;(const2)
[  18] mov               loc3, loc6
[  21] stricteq          loc7, arg4, Int32: 0(const3)
[  25] jtrue             loc7, 14(-&gt;39)
[  28] stricteq          loc7, arg4, Int32: 2(const4)
[  32] jtrue             loc7, 5(-&gt;37)
[  35] ret               arg3
[  37] throw             arg3
[  39] put_to_scope      loc6, sourceLineNumber(@id0), Int32: 0(const5), 4&lt;ThrowIfNotFound|LocalClosureVar|Initialization&gt;, &lt;structure&gt;, 0
[  46] create_lexical_environment loc7, loc3, Cell: 0x1037a16c0 (0x1037ef700:[SymbolTable, {}, NonArray, Leaf]), ID: 18(const6), &lt;JSValue()&gt;(const2)
[  51] mov               loc3, loc7
[  54] resolve_scope     loc12, loc3, string(@id1), &lt;ClosureVar&gt;, 2, 0x1037a2560
[  61] get_from_scope    loc12, loc12, string(@id1), 2051&lt;ThrowIfNotFound|ClosureVar|NotInitialization&gt;, 0    predicting None
[  69] get_by_id         loc8, loc12, split(@id2)    predicting None
[  78] mov               loc11, String (atomic) (identifier): 
, ID: 4(const7)
[  81] call              loc8, loc8, 2, 18 status(Could Take Slow Path)    Original; predicting None
[  90] get_by_id         loc9, loc8, Symbol.iterator(@id3)    predicting None
[  99] mov               loc10, loc8
[ 102] call              loc9, loc9, 1, 16 status(Could Take Slow Path)    Original; predicting None
[ 111] mov               loc10, Undefined(const0)
[ 114] jmp               1806(-&gt;1920)
[ 116] loop_hint         
[ 117] put_to_scope      loc7, line(@id4), loc10, 4&lt;ThrowIfNotFound|LocalClosureVar|Initialization&gt;, &lt;structure&gt;, 0
[ 124] create_lexical_environment loc19, loc3, Cell: 0x1037a1660 (0x1037ef700:[SymbolTable, {}, NonArray, Leaf]), ID: 18(const8), &lt;JSValue()&gt;(const2)
[ 129] mov               loc3, loc19
[ 132] mov               loc11, &lt;JSValue()&gt;(const2)
[ 135] mov               loc12, &lt;JSValue()&gt;(const2)
[ 138] mov               loc14, &lt;JSValue()&gt;(const2)
[ 141] mov               loc15, &lt;JSValue()&gt;(const2)
[ 144] mov               loc17, &lt;JSValue()&gt;(const2)
[ 147] mov               loc18, &lt;JSValue()&gt;(const2)
[ 150] new_func_exp      loc20, loc3, f0
[ 154] mov               loc16, loc20
[ 157] new_func_exp      loc20, loc3, f1
[ 161] mov               loc13, loc20
[ 164] get_from_scope    loc20, loc6, sourceLineNumber(@id0), 2051&lt;ThrowIfNotFound|ClosureVar|NotInitialization&gt;, 0    predicting None
[ 172] inc               loc20
[ 174] put_to_scope      loc6, sourceLineNumber(@id0), loc20, 2052&lt;ThrowIfNotFound|LocalClosureVar|NotInitialization&gt;, &lt;structure&gt;, 0
[ 181] new_regexp        loc18, bad_regexp(0)
[ 184] new_regexp        loc17, bad_regexp(1)
[ 187] new_regexp        loc14, bad_regexp(2)
[ 190] new_regexp        loc11, bad_regexp(3)
[ 193] new_regexp        loc15, bad_regexp(4)
[ 196] new_regexp        loc12, bad_regexp(5)
[ 199] mov               loc20, loc16
[ 202] mov               loc22, Undefined(const0)
[ 205] call              loc20, loc20, 1, 28 status(Could Take Slow Path)    Original; predicting None
[ 214] new_regexp        loc24, bad_regexp(6)
[ 217] get_by_id         loc20, loc24, test(@id5)    predicting None
[ 226] get_from_scope    loc23, loc7, line(@id4), 2051&lt;ThrowIfNotFound|ClosureVar|NotInitialization&gt;, 0    predicting None
[ 234] call              loc20, loc20, 2, 30 status(Could Take Slow Path)    Original; predicting None
[ 243] jtrue             loc20, 64(-&gt;307)
[ 246] resolve_scope     loc20, loc3, Error(@id6), &lt;GlobalProperty&gt;, 5, 0x1037e3900
[ 253] get_from_scope    loc21, loc20, Error(@id6), 2048&lt;ThrowIfNotFound|GlobalProperty|NotInitialization&gt;, 112    predicting None
[ 261] mov               loc24, loc21
[ 264] mov               loc25, String (atomic) (identifier): At line , ID: 4(const9)
[ 267] get_from_scope    loc26, loc6, sourceLineNumber(@id0), 2051&lt;ThrowIfNotFound|ClosureVar|NotInitialization&gt;, 0    predicting None
[ 275] to_primitive      loc26, loc26
[ 278] mov               loc27, String (atomic) (identifier): : Expect line number: , ID: 4(const10)
[ 281] get_from_scope    loc28, loc7, line(@id4), 2051&lt;ThrowIfNotFound|ClosureVar|NotInitialization&gt;, 0    predicting None
[ 289] to_primitive      loc28, loc28
[ 292] strcat            loc23, loc25, 4
[ 296] construct         loc21, loc21, 2, 30 status(Could Take Slow Path)    predicting None
[ 305] throw             loc21
[ 307] resolve_scope     loc20, loc3, RegExp(@id7), &lt;GlobalProperty&gt;, 5, 0x1037e3900
[ 314] get_from_scope    loc21, loc20, RegExp(@id7), 2048&lt;ThrowIfNotFound|GlobalProperty|NotInitialization&gt;, 104    predicting None
[ 322] get_by_id         loc22, loc21, lastMatch(@id8)    predicting None
[ 331] to_number         loc23, loc22
[ 334] put_to_scope      loc19, userLineNumber(@id9), loc23, 4&lt;ThrowIfNotFound|LocalClosureVar|Initialization&gt;, &lt;structure&gt;, 0
[ 341] resolve_scope     loc20, loc3, RegExp(@id7), &lt;GlobalProperty&gt;, 5, 0x1037e3900
[ 348] get_from_scope    loc21, loc20, RegExp(@id7), 2048&lt;ThrowIfNotFound|GlobalProperty|NotInitialization&gt;, 104    predicting None
[ 356] get_by_id         loc22, loc21, rightContext(@id10)    predicting None
[ 365] put_to_scope      loc7, line(@id4), loc22, 2052&lt;ThrowIfNotFound|LocalClosureVar|NotInitialization&gt;, &lt;structure&gt;, 0
[ 372] new_object        loc20, 4
[ 376] put_by_id         loc20, kind(@id11), String (atomic) (identifier): userLineNumber, ID: 4(const11), IsDirect|Bottom
[ 385] resolve_scope     loc21, loc3, RegExp(@id7), &lt;GlobalProperty&gt;, 5, 0x1037e3900
[ 392] get_from_scope    loc22, loc21, RegExp(@id7), 2048&lt;ThrowIfNotFound|GlobalProperty|NotInitialization&gt;, 104    predicting None
[ 400] get_by_id         loc23, loc22, lastMatch(@id8)    predicting None
[ 409] put_by_id         loc20, string(@id1), loc23, IsDirect|Bottom
[ 418] get_from_scope    loc21, loc6, sourceLineNumber(@id0), 2051&lt;ThrowIfNotFound|ClosureVar|NotInitialization&gt;, 0    predicting None
[ 426] put_by_id         loc20, sourceLineNumber(@id0), loc21, IsDirect|Bottom
[ 435] get_from_scope    loc21, loc19, userLineNumber(@id9), 2051&lt;ThrowIfNotFound|ClosureVar|NotInitialization&gt;, 0    predicting None
[ 443] put_by_id         loc20, userLineNumber(@id9), loc21, IsDirect|Bottom
[ 452] put_by_id         arg1, PrivateSymbol.generatorState(@id12), Int32: 1(const12), Bottom
[ 461] save              arg1, ---1--11-1-111111111------------(@live0), 9(-&gt;470)
[ 465] ret               loc20
[ 467] resume            arg1, ---1--11-1-111111111------------(@live0)
[ 470] stricteq          loc21, arg4, Int32: 0(const3)
[ 474] jtrue             loc21, 71(-&gt;545)
[ 477] stricteq          loc21, arg4, Int32: 2(const4)
[ 481] jtrue             loc21, 62(-&gt;543)
[ 484] mov               loc22, arg3
[ 487] get_parent_scope  loc23, loc3
[ 490] mov               loc3, loc23
[ 493] get_by_id         loc23, loc9, return(@id13)    predicting None
[ 502] is_undefined      loc24, loc23
[ 505] jtrue             loc24, 24(-&gt;529)
[ 508] mov               loc26, loc9
[ 511] call              loc24, loc23, 1, 32 status(Could Take Slow Path)    Original; predicting None
[ 520] is_object         loc27, loc24
[ 523] jtrue             loc27, 6(-&gt;529)
[ 526] throw_static_error String (atomic) (identifier): Iterator result interface is not an object., ID: 4(const13), false
[ 529] get_parent_scope  loc23, loc3
[ 532] mov               loc3, loc23
[ 535] get_parent_scope  loc23, loc3
[ 538] mov               loc3, loc23
[ 541] ret               loc22
[ 543] throw             arg3
[ 545] mov               loc20, loc16
[ 548] mov               loc22, Undefined(const0)
[ 551] call              loc20, loc20, 1, 28 status(Could Take Slow Path)    Original; predicting None
[ 560] get_from_scope    loc20, loc7, line(@id4), 2051&lt;ThrowIfNotFound|ClosureVar|NotInitialization&gt;, 0    predicting None
[ 568] get_by_id         loc21, loc20, length(@id14)    predicting None
[ 577] jfalse            loc21, 1143(-&gt;1720)
[ 580] loop_hint         
[ 581] mov               loc24, loc11
[ 584] get_by_id         loc20, loc24, test(@id5)    predicting None
[ 593] get_from_scope    loc23, loc7, line(@id4), 2051&lt;ThrowIfNotFound|ClosureVar|NotInitialization&gt;, 0    predicting None
[ 601] call              loc20, loc20, 2, 30 status(Could Take Slow Path)    Original; predicting None
[ 610] jfalse            loc20, 116(-&gt;726)
[ 613] mov               loc20, loc13
[ 616] mov               loc24, Undefined(const0)
[ 619] mov               loc23, String (atomic) (identifier): keyword, ID: 4(const14)
[ 622] call              loc20, loc20, 2, 30 status(Could Take Slow Path)    Original; predicting None
[ 631] put_by_id         arg1, PrivateSymbol.generatorState(@id12), Int32: 2(const4), Bottom
[ 640] save              arg1, ---1--11-1-111111111------------(@live1), 9(-&gt;649)
[ 644] ret               loc20
[ 646] resume            arg1, ---1--11-1-111111111------------(@live1)
[ 649] stricteq          loc21, arg4, Int32: 0(const3)
[ 653] jtrue             loc21, 71(-&gt;724)
[ 656] stricteq          loc21, arg4, Int32: 2(const4)
[ 660] jtrue             loc21, 62(-&gt;722)
[ 663] mov               loc22, arg3
[ 666] get_parent_scope  loc23, loc3
[ 669] mov               loc3, loc23
[ 672] get_by_id         loc23, loc9, return(@id13)    predicting None
[ 681] is_undefined      loc24, loc23
[ 684] jtrue             loc24, 24(-&gt;708)
[ 687] mov               loc26, loc9
[ 690] call              loc24, loc23, 1, 32 status(Could Take Slow Path)    Original; predicting None
[ 699] is_object         loc27, loc24
[ 702] jtrue             loc27, 6(-&gt;708)
[ 705] throw_static_error String (atomic) (identifier): Iterator result interface is not an object., ID: 4(const13), false
[ 708] get_parent_scope  loc23, loc3
[ 711] mov               loc3, loc23
[ 714] get_parent_scope  loc23, loc3
[ 717] mov               loc3, loc23
[ 720] ret               loc22
[ 722] throw             arg3
[ 724] jmp               961(-&gt;1685)
[ 726] mov               loc24, loc18
[ 729] get_by_id         loc20, loc24, test(@id5)    predicting None
[ 738] get_from_scope    loc23, loc7, line(@id4), 2051&lt;ThrowIfNotFound|ClosureVar|NotInitialization&gt;, 0    predicting None
[ 746] call              loc20, loc20, 2, 30 status(Could Take Slow Path)    Original; predicting None
[ 755] jfalse            loc20, 116(-&gt;871)
[ 758] mov               loc20, loc13
[ 761] mov               loc24, Undefined(const0)
[ 764] mov               loc23, String (atomic) (identifier): identifier, ID: 4(const15)
[ 767] call              loc20, loc20, 2, 30 status(Could Take Slow Path)    Original; predicting None
[ 776] put_by_id         arg1, PrivateSymbol.generatorState(@id12), Int32: 3(const16), Bottom
[ 785] save              arg1, ---1--11-1-111111111------------(@live2), 9(-&gt;794)
[ 789] ret               loc20
[ 791] resume            arg1, ---1--11-1-111111111------------(@live2)
[ 794] stricteq          loc21, arg4, Int32: 0(const3)
[ 798] jtrue             loc21, 71(-&gt;869)
[ 801] stricteq          loc21, arg4, Int32: 2(const4)
[ 805] jtrue             loc21, 62(-&gt;867)
[ 808] mov               loc22, arg3
[ 811] get_parent_scope  loc23, loc3
[ 814] mov               loc3, loc23
[ 817] get_by_id         loc23, loc9, return(@id13)    predicting None
[ 826] is_undefined      loc24, loc23
[ 829] jtrue             loc24, 24(-&gt;853)
[ 832] mov               loc26, loc9
[ 835] call              loc24, loc23, 1, 32 status(Could Take Slow Path)    Original; predicting None
[ 844] is_object         loc27, loc24
[ 847] jtrue             loc27, 6(-&gt;853)
[ 850] throw_static_error String (atomic) (identifier): Iterator result interface is not an object., ID: 4(const13), false
[ 853] get_parent_scope  loc23, loc3
[ 856] mov               loc3, loc23
[ 859] get_parent_scope  loc23, loc3
[ 862] mov               loc3, loc23
[ 865] ret               loc22
[ 867] throw             arg3
[ 869] jmp               816(-&gt;1685)
[ 871] mov               loc24, loc17
[ 874] get_by_id         loc20, loc24, test(@id5)    predicting None
[ 883] get_from_scope    loc23, loc7, line(@id4), 2051&lt;ThrowIfNotFound|ClosureVar|NotInitialization&gt;, 0    predicting None
[ 891] call              loc20, loc20, 2, 30 status(Could Take Slow Path)    Original; predicting None
[ 900] jfalse            loc20, 146(-&gt;1046)
[ 903] mov               loc20, &lt;JSValue()&gt;(const2)
[ 906] mov               loc21, loc13
[ 909] mov               loc24, Undefined(const0)
[ 912] mov               loc23, String (atomic) (identifier): number, ID: 4(const17)
[ 915] call              loc20, loc21, 2, 30 status(Could Take Slow Path)    Original; predicting None
[ 924] mov               loc21, loc20
[ 927] get_by_id         loc22, loc20, string(@id1)    predicting None
[ 936] to_number         loc23, loc22
[ 939] put_by_id         loc21, value(@id15), loc23, Bottom
[ 948] mov               loc21, loc20
[ 951] put_by_id         arg1, PrivateSymbol.generatorState(@id12), Int32: 4(const18), Bottom
[ 960] save              arg1, ---1--11-1-111111111------------(@live3), 9(-&gt;969)
[ 964] ret               loc21
[ 966] resume            arg1, ---1--11-1-111111111------------(@live3)
[ 969] stricteq          loc22, arg4, Int32: 0(const3)
[ 973] jtrue             loc22, 71(-&gt;1044)
[ 976] stricteq          loc22, arg4, Int32: 2(const4)
[ 980] jtrue             loc22, 62(-&gt;1042)
[ 983] mov               loc23, arg3
[ 986] get_parent_scope  loc24, loc3
[ 989] mov               loc3, loc24
[ 992] get_by_id         loc24, loc9, return(@id13)    predicting None
[1001] is_undefined      loc25, loc24
[1004] jtrue             loc25, 24(-&gt;1028)
[1007] mov               loc26, loc9
[1010] call              loc25, loc24, 1, 32 status(Could Take Slow Path)    Original; predicting None
[1019] is_object         loc27, loc25
[1022] jtrue             loc27, 6(-&gt;1028)
[1025] throw_static_error String (atomic) (identifier): Iterator result interface is not an object., ID: 4(const13), false
[1028] get_parent_scope  loc24, loc3
[1031] mov               loc3, loc24
[1034] get_parent_scope  loc24, loc3
[1037] mov               loc3, loc24
[1040] ret               loc23
[1042] throw             arg3
[1044] jmp               641(-&gt;1685)
[1046] mov               loc24, loc14
[1049] get_by_id         loc20, loc24, test(@id5)    predicting None
[1058] get_from_scope    loc23, loc7, line(@id4), 2051&lt;ThrowIfNotFound|ClosureVar|NotInitialization&gt;, 0    predicting None
[1066] call              loc20, loc20, 2, 30 status(Could Take Slow Path)    Original; predicting None
[1075] jfalse            loc20, 259(-&gt;1334)
[1078] mov               loc20, &lt;JSValue()&gt;(const2)
[1081] mov               loc21, loc13
[1084] mov               loc24, Undefined(const0)
[1087] mov               loc23, String (atomic) (identifier): string, ID: 4(const19)
[1090] call              loc20, loc21, 2, 30 status(Could Take Slow Path)    Original; predicting None
[1099] put_by_id         loc20, value(@id15), String (atomic) (identifier): , ID: 4(const20), Bottom
[1108] mov               loc21, &lt;JSValue()&gt;(const2)
[1111] mov               loc21, Int32: 1(const21)
[1114] get_by_id         loc22, loc20, string(@id1)    predicting None
[1123] get_by_id         loc23, loc22, length(@id14)    predicting None
[1132] sub               loc23, loc23, Int32: 1(const21)
[1137] jnless            loc21, loc23, 99(-&gt;1236)
[1141] loop_hint         
[1142] mov               loc22, &lt;JSValue()&gt;(const2)
[1145] get_by_id         loc26, loc20, string(@id1)    predicting None
[1154] get_by_id         loc23, loc26, charAt(@id16)    predicting None
[1163] mov               loc25, loc21
[1166] call              loc22, loc23, 2, 32 status(Could Take Slow Path)    Original; predicting None
[1175] eq                loc23, loc22, String (atomic) (identifier): &quot;, ID: 4(const22)
[1179] jfalse            loc23, 5(-&gt;1184)
[1182] inc               loc21
[1184] get_by_id         loc23, loc20, value(@id15)    predicting None
[1193] add               loc23, loc23, loc22
[1198] put_by_id         loc20, value(@id15), loc23, Bottom
[1207] inc               loc21
[1209] get_by_id         loc22, loc20, string(@id1)    predicting None
[1218] get_by_id         loc23, loc22, length(@id14)    predicting None
[1227] sub               loc23, loc23, Int32: 1(const21)
[1232] jless             loc21, loc23, -91(-&gt;1141)
[1236] mov               loc21, loc20
[1239] put_by_id         arg1, PrivateSymbol.generatorState(@id12), Int32: 5(const23), Bottom
[1248] save              arg1, ---1--11-1-111111111------------(@live4), 9(-&gt;1257)
[1252] ret               loc21
[1254] resume            arg1, ---1--11-1-111111111------------(@live4)
[1257] stricteq          loc22, arg4, Int32: 0(const3)
[1261] jtrue             loc22, 71(-&gt;1332)
[1264] stricteq          loc22, arg4, Int32: 2(const4)
[1268] jtrue             loc22, 62(-&gt;1330)
[1271] mov               loc23, arg3
[1274] get_parent_scope  loc24, loc3
[1277] mov               loc3, loc24
[1280] get_by_id         loc24, loc9, return(@id13)    predicting None
[1289] is_undefined      loc25, loc24
[1292] jtrue             loc25, 24(-&gt;1316)
[1295] mov               loc26, loc9
[1298] call              loc25, loc24, 1, 32 status(Could Take Slow Path)    Original; predicting None
[1307] is_object         loc27, loc25
[1310] jtrue             loc27, 6(-&gt;1316)
[1313] throw_static_error String (atomic) (identifier): Iterator result interface is not an object., ID: 4(const13), false
[1316] get_parent_scope  loc24, loc3
[1319] mov               loc3, loc24
[1322] get_parent_scope  loc24, loc3
[1325] mov               loc3, loc24
[1328] ret               loc23
[1330] throw             arg3
[1332] jmp               353(-&gt;1685)
[1334] mov               loc24, loc15
[1337] get_by_id         loc20, loc24, test(@id5)    predicting None
[1346] get_from_scope    loc23, loc7, line(@id4), 2051&lt;ThrowIfNotFound|ClosureVar|NotInitialization&gt;, 0    predicting None
[1354] call              loc20, loc20, 2, 30 status(Could Take Slow Path)    Original; predicting None
[1363] jfalse            loc20, 116(-&gt;1479)
[1366] mov               loc20, loc13
[1369] mov               loc24, Undefined(const0)
[1372] mov               loc23, String (atomic) (identifier): operator, ID: 4(const24)
[1375] call              loc20, loc20, 2, 30 status(Could Take Slow Path)    Original; predicting None
[1384] put_by_id         arg1, PrivateSymbol.generatorState(@id12), Int32: 6(const25), Bottom
[1393] save              arg1, ---1--11-1-111111111------------(@live5), 9(-&gt;1402)
[1397] ret               loc20
[1399] resume            arg1, ---1--11-1-111111111------------(@live5)
[1402] stricteq          loc21, arg4, Int32: 0(const3)
[1406] jtrue             loc21, 71(-&gt;1477)
[1409] stricteq          loc21, arg4, Int32: 2(const4)
[1413] jtrue             loc21, 62(-&gt;1475)
[1416] mov               loc22, arg3
[1419] get_parent_scope  loc23, loc3
[1422] mov               loc3, loc23
[1425] get_by_id         loc23, loc9, return(@id13)    predicting None
[1434] is_undefined      loc24, loc23
[1437] jtrue             loc24, 24(-&gt;1461)
[1440] mov               loc26, loc9
[1443] call              loc24, loc23, 1, 32 status(Could Take Slow Path)    Original; predicting None
[1452] is_object         loc27, loc24
[1455] jtrue             loc27, 6(-&gt;1461)
[1458] throw_static_error String (atomic) (identifier): Iterator result interface is not an object., ID: 4(const13), false
[1461] get_parent_scope  loc23, loc3
[1464] mov               loc3, loc23
[1467] get_parent_scope  loc23, loc3
[1470] mov               loc3, loc23
[1473] ret               loc22
[1475] throw             arg3
[1477] jmp               208(-&gt;1685)
[1479] mov               loc24, loc12
[1482] get_by_id         loc20, loc24, test(@id5)    predicting None
[1491] get_from_scope    loc23, loc7, line(@id4), 2051&lt;ThrowIfNotFound|ClosureVar|NotInitialization&gt;, 0    predicting None
[1499] call              loc20, loc20, 2, 30 status(Could Take Slow Path)    Original; predicting None
[1508] jfalse            loc20, 116(-&gt;1624)
[1511] mov               loc20, loc13
[1514] mov               loc24, Undefined(const0)
[1517] mov               loc23, String (atomic) (identifier): remark, ID: 4(const26)
[1520] call              loc20, loc20, 2, 30 status(Could Take Slow Path)    Original; predicting None
[1529] put_by_id         arg1, PrivateSymbol.generatorState(@id12), Int32: 7(const27), Bottom
[1538] save              arg1, ---1--11-1-111111111------------(@live6), 9(-&gt;1547)
[1542] ret               loc20
[1544] resume            arg1, ---1--11-1-111111111------------(@live6)
[1547] stricteq          loc21, arg4, Int32: 0(const3)
[1551] jtrue             loc21, 71(-&gt;1622)
[1554] stricteq          loc21, arg4, Int32: 2(const4)
[1558] jtrue             loc21, 62(-&gt;1620)
[1561] mov               loc22, arg3
[1564] get_parent_scope  loc23, loc3
[1567] mov               loc3, loc23
[1570] get_by_id         loc23, loc9, return(@id13)    predicting None
[1579] is_undefined      loc24, loc23
[1582] jtrue             loc24, 24(-&gt;1606)
[1585] mov               loc26, loc9
[1588] call              loc24, loc23, 1, 32 status(Could Take Slow Path)    Original; predicting None
[1597] is_object         loc27, loc24
[1600] jtrue             loc27, 6(-&gt;1606)
[1603] throw_static_error String (atomic) (identifier): Iterator result interface is not an object., ID: 4(const13), false
[1606] get_parent_scope  loc23, loc3
[1609] mov               loc3, loc23
[1612] get_parent_scope  loc23, loc3
[1615] mov               loc3, loc23
[1618] ret               loc22
[1620] throw             arg3
[1622] jmp               63(-&gt;1685)
[1624] resolve_scope     loc20, loc3, Error(@id6), &lt;GlobalProperty&gt;, 5, 0x1037e3900
[1631] get_from_scope    loc21, loc20, Error(@id6), 2048&lt;ThrowIfNotFound|GlobalProperty|NotInitialization&gt;, 112    predicting None
[1639] mov               loc24, loc21
[1642] mov               loc25, String (atomic) (identifier): At line , ID: 4(const9)
[1645] get_from_scope    loc26, loc6, sourceLineNumber(@id0), 2051&lt;ThrowIfNotFound|ClosureVar|NotInitialization&gt;, 0    predicting None
[1653] to_primitive      loc26, loc26
[1656] mov               loc27, String (atomic) (identifier): : Cannot lex token: , ID: 4(const28)
[1659] get_from_scope    loc28, loc7, line(@id4), 2051&lt;ThrowIfNotFound|ClosureVar|NotInitialization&gt;, 0    predicting None
[1667] to_primitive      loc28, loc28
[1670] strcat            loc23, loc25, 4
[1674] construct         loc21, loc21, 2, 30 status(Could Take Slow Path)    predicting None
[1683] throw             loc21
[1685] mov               loc20, loc16
[1688] mov               loc22, Undefined(const0)
[1691] call              loc20, loc20, 1, 28 status(Could Take Slow Path)    Original; predicting None
[1700] get_from_scope    loc20, loc7, line(@id4), 2051&lt;ThrowIfNotFound|ClosureVar|NotInitialization&gt;, 0    predicting None
[1708] get_by_id         loc21, loc20, length(@id14)    predicting None
[1717] jtrue             loc21, -1137(-&gt;580)
[1720] new_object        loc20, 4
[1724] put_by_id         loc20, kind(@id11), String (atomic) (identifier): newLine, ID: 4(const29), IsDirect|Bottom
[1733] put_by_id         loc20, string(@id1), String (atomic) (identifier): 
, ID: 4(const7), IsDirect|Bottom
[1742] get_from_scope    loc21, loc6, sourceLineNumber(@id0), 2051&lt;ThrowIfNotFound|ClosureVar|NotInitialization&gt;, 0    predicting None
[1750] put_by_id         loc20, sourceLineNumber(@id0), loc21, IsDirect|Bottom
[1759] get_from_scope    loc21, loc19, userLineNumber(@id9), 2051&lt;ThrowIfNotFound|ClosureVar|NotInitialization&gt;, 0    predicting None
[1767] put_by_id         loc20, userLineNumber(@id9), loc21, IsDirect|Bottom
[1776] put_by_id         arg1, PrivateSymbol.generatorState(@id12), Int32: 8(const30), Bottom
[1785] save              arg1, ---1--11-1---------1------------(@live7), 9(-&gt;1794)
[1789] ret               loc20
[1791] resume            arg1, ---1--11-1---------1------------(@live7)
[1794] stricteq          loc21, arg4, Int32: 0(const3)
[1798] jtrue             loc21, 71(-&gt;1869)
[1801] stricteq          loc21, arg4, Int32: 2(const4)
[1805] jtrue             loc21, 62(-&gt;1867)
[1808] mov               loc22, arg3
[1811] get_parent_scope  loc23, loc3
[1814] mov               loc3, loc23
[1817] get_by_id         loc23, loc9, return(@id13)    predicting None
[1826] is_undefined      loc24, loc23
[1829] jtrue             loc24, 24(-&gt;1853)
[1832] mov               loc26, loc9
[1835] call              loc24, loc23, 1, 32 status(Could Take Slow Path)    Original; predicting None
[1844] is_object         loc27, loc24
[1847] jtrue             loc27, 6(-&gt;1853)
[1850] throw_static_error String (atomic) (identifier): Iterator result interface is not an object., ID: 4(const13), false
[1853] get_parent_scope  loc23, loc3
[1856] mov               loc3, loc23
[1859] get_parent_scope  loc23, loc3
[1862] mov               loc3, loc23
[1865] ret               loc22
[1867] throw             arg3
[1869] get_parent_scope  loc20, loc19
[1872] mov               loc3, loc20
[1875] jmp               45(-&gt;1920)
[1877] catch             loc11, loc12
[1880] mov               loc3, loc7
[1883] get_by_id         loc13, loc9, return(@id13)    predicting None
[1892] is_undefined      loc14, loc13
[1895] jtrue             loc14, 15(-&gt;1910)
[1898] mov               loc14, loc9
[1901] call              loc10, loc13, 1, 20 status(Could Take Slow Path)    Original; predicting None
[1910] throw             loc11
[1912] catch             loc15, loc15
[1915] mov               loc3, loc7
[1918] throw             loc11
[1920] get_from_scope    loc11, loc7, line(@id4), 1050627&lt;DoNotThrowIfNotFound|ClosureVar|NotInitialization&gt;, 0    predicting None
[1928] get_parent_scope  loc12, loc7
[1931] mov               loc3, loc12
[1934] create_lexical_environment loc7, loc3, Cell: 0x1037a16c0 (0x1037ef700:[SymbolTable, {}, NonArray, Leaf]), ID: 18(const6), &lt;JSValue()&gt;(const2)
[1939] mov               loc3, loc7
[1942] put_to_scope      loc7, line(@id4), loc11, 1050628&lt;DoNotThrowIfNotFound|LocalClosureVar|NotInitialization&gt;, &lt;structure&gt;, 0
[1949] get_by_id         loc11, loc9, next(@id17)    predicting None
[1958] mov               loc12, loc9
[1961] call              loc10, loc11, 1, 18 status(Could Take Slow Path)    Original; predicting None
[1970] is_object         loc11, loc10
[1973] jtrue             loc11, 6(-&gt;1979)
[1976] throw_static_error String (atomic) (identifier): Iterator result interface is not an object., ID: 4(const13), false
[1979] get_by_id         loc11, loc10, done(@id18)    predicting None
[1988] jtrue             loc11, 50(-&gt;2038)
[1991] get_by_id         loc10, loc10, value(@id15)    predicting None
[2000] jmp               -1884(-&gt;116)
[2002] get_by_id         loc10, loc9, return(@id13)    predicting None
[2011] is_undefined      loc11, loc10
[2014] jtrue             loc11, 24(-&gt;2038)
[2017] mov               loc12, loc9
[2020] call              loc11, loc10, 1, 18 status(Could Take Slow Path)    Original; predicting None
[2029] is_object         loc13, loc11
[2032] jtrue             loc13, 6(-&gt;2038)
[2035] throw_static_error String (atomic) (identifier): Iterator result interface is not an object., ID: 4(const13), false
[2038] get_parent_scope  loc8, loc7
[2041] mov               loc3, loc8
[2044] ret               Undefined(const0)

Identifiers:
  id0 = sourceLineNumber
  id1 = string
  id2 = split
  id3 = Symbol.iterator
  id4 = line
  id5 = test
  id6 = Error
  id7 = RegExp
  id8 = lastMatch
  id9 = userLineNumber
  id10 = rightContext
  id11 = kind
  id12 = PrivateSymbol.generatorState
  id13 = return
  id14 = length
  id15 = value
  id16 = charAt
  id17 = next
  id18 = done

Constants:
   k0 = Undefined
   k1 = Cell: 0x1037a1720 (0x1037ef700:[SymbolTable, {}, NonArray, Leaf]), ID: 18
   k2 = &lt;JSValue()&gt;
   k3 = Int32: 0
   k4 = Int32: 2
   k5 = Int32: 0: in source as integer
   k6 = Cell: 0x1037a16c0 (0x1037ef700:[SymbolTable, {}, NonArray, Leaf]), ID: 18
   k7 = String (atomic) (identifier): 
, ID: 4
   k8 = Cell: 0x1037a1660 (0x1037ef700:[SymbolTable, {}, NonArray, Leaf]), ID: 18
   k9 = String (atomic) (identifier): At line , ID: 4
   k10 = String (atomic) (identifier): : Expect line number: , ID: 4
   k11 = String (atomic) (identifier): userLineNumber, ID: 4
   k12 = Int32: 1
   k13 = String (atomic) (identifier): Iterator result interface is not an object., ID: 4
   k14 = String (atomic) (identifier): keyword, ID: 4
   k15 = String (atomic) (identifier): identifier, ID: 4
   k16 = Int32: 3
   k17 = String (atomic) (identifier): number, ID: 4
   k18 = Int32: 4
   k19 = String (atomic) (identifier): string, ID: 4
   k20 = String (atomic) (identifier): , ID: 4
   k21 = Int32: 1: in source as integer
   k22 = String (atomic) (identifier): &quot;, ID: 4
   k23 = Int32: 5
   k24 = String (atomic) (identifier): operator, ID: 4
   k25 = Int32: 6
   k26 = String (atomic) (identifier): remark, ID: 4
   k27 = Int32: 7
   k28 = String (atomic) (identifier): : Cannot lex token: , ID: 4
   k29 = String (atomic) (identifier): newLine, ID: 4
   k30 = Int32: 8

m_regexps:
  re0 = /^[a-z_]([a-z0-9_]*)/i
  re1 = /^(([0-9]+(\.([0-9]*))?)|(\.[0-9]+)(e([+-]?)([0-9]+))?)/i
  re2 = /^\&quot;([^\&quot;]|(\&quot;\&quot;))*\&quot;/
  re3 = /^((base)|(data)|(def)|(dim)|(end)|(for)|(go)|(gosub)|(goto)|(if)|(input)|(let)|(next)|(on)|(option)|(print)|(randomize)|(read)|(restore)|(return)|(step)|(stop)|(sub)|(then)|(to))/i
  re4 = /^(-|\+|\*|\/|\^|\(|\)|(&lt;[&gt;=]?)|(&gt;=?)|=|,|\$|;)/
  re5 = /^rem\s.*/
  re6 = /^[0-9]+/

Exception Handlers:
	 1: { start: [ 117] end: [ 493] target: [1877] } synthesized finally
	 2: { start: [ 529] end: [ 672] target: [1877] } synthesized finally
	 3: { start: [ 708] end: [ 817] target: [1877] } synthesized finally
	 4: { start: [ 853] end: [ 992] target: [1877] } synthesized finally
	 5: { start: [1028] end: [1280] target: [1877] } synthesized finally
	 6: { start: [1316] end: [1425] target: [1877] } synthesized finally
	 7: { start: [1461] end: [1570] target: [1877] } synthesized finally
	 8: { start: [1606] end: [1817] target: [1877] } synthesized finally
	 9: { start: [1853] end: [1877] target: [1877] } synthesized finally
	 10: { start: [1898] end: [1910] target: [1912] } synthesized finally
Switch Jump Tables:
  0 = {
		   0 =&gt; 0004
		   1 =&gt; 0461
		   2 =&gt; 0640
		   3 =&gt; 0785
		   4 =&gt; 0960
		   5 =&gt; 1248
		   6 =&gt; 1393
		   7 =&gt; 1538
		   8 =&gt; 1785
      }

Live Callee Locals:
  live0 = ---1--11-1-111111111------------
  live1 = ---1--11-1-111111111------------
  live2 = ---1--11-1-111111111------------
  live3 = ---1--11-1-111111111------------
  live4 = ---1--11-1-111111111------------
  live5 = ---1--11-1-111111111------------
  live6 = ---1--11-1-111111111------------
  live7 = ---1--11-1---------1------------


Validation failure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1206522</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-06-29 15:12:04 -0700</bug_when>
    <thetext>I&apos;m going to try to fix this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1206535</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-06-29 16:08:47 -0700</bug_when>
    <thetext>Looks like this is because the liveness analysis for generators is unsound with respect to try/catch/finally.

I think this is more proof that we should not use a single liveness analysis for both pre-generator-converstion and post-generator-conversion bytecode.  It&apos;s too confusing!  

For example, resume must preserve the invariant that it defines everything and only uses its token argument.  But that&apos;s not what happens if it&apos;s inside a try block.  In order to support try, we assume that any bytecode inside a try uses anything that the catch uses.

I think that the best way to go is:

1) Write a custom liveness analysis just for the generator conversion.  This custom analysis could reuse BytecodeUseDef.h and the basic block analysis, but otherwise it will be a new thing.  This allows it to play games with save/resume.  For example, it allows it to implement these rules easily: (a) the live-in at resume is always just the token argument and nothing else, and (b) whatever was live-out at the resume is used by the corresponding save.

2) Write a transformation that gets rid of save/resume and makes the control and data flow explicit.

3) Remove any &quot;generator&quot; modes or tricks from the bytecode liveness analysis that the rest of the engine uses.

I think that for now, I&apos;ll implement a hack that says that resume is exempted from catch liveness.  That&apos;s sort of insane and hacky, but I think it will fix this bug for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1206550</commentid>
    <comment_count>3</comment_count>
      <attachid>282390</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-06-29 16:25:50 -0700</bug_when>
    <thetext>Created attachment 282390
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1206551</commentid>
    <comment_count>4</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-06-29 16:27:12 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Looks like this is because the liveness analysis for generators is unsound
&gt; with respect to try/catch/finally.

Oops!

&gt; 
&gt; I think this is more proof that we should not use a single liveness analysis
&gt; for both pre-generator-converstion and post-generator-conversion bytecode. 
&gt; It&apos;s too confusing! 

Right.

&gt; 
&gt; For example, resume must preserve the invariant that it defines everything
&gt; and only uses its token argument.  But that&apos;s not what happens if it&apos;s
&gt; inside a try block.  In order to support try, we assume that any bytecode
&gt; inside a try uses anything that the catch uses.
&gt; 
&gt; I think that the best way to go is:
&gt; 
&gt; 1) Write a custom liveness analysis just for the generator conversion.  This
&gt; custom analysis could reuse BytecodeUseDef.h and the basic block analysis,
&gt; but otherwise it will be a new thing.  This allows it to play games with
&gt; save/resume.  For example, it allows it to implement these rules easily: (a)
&gt; the live-in at resume is always just the token argument and nothing else,
&gt; and (b) whatever was live-out at the resume is used by the corresponding
&gt; save.
&gt; 
&gt; 2) Write a transformation that gets rid of save/resume and makes the control
&gt; and data flow explicit.
&gt; 
&gt; 3) Remove any &quot;generator&quot; modes or tricks from the bytecode liveness
&gt; analysis that the rest of the engine uses.
&gt; 
&gt; I think that for now, I&apos;ll implement a hack that says that resume is
&gt; exempted from catch liveness.  That&apos;s sort of insane and hacky, but I think
&gt; it will fix this bug for now.

sounds nice. generatorification should remove these resume / save and the usual liveness analysis should not care about them.
after landing isNaN / isFinite patch, go to the generator patch, it is now introducing bytecode analysis.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1206559</commentid>
    <comment_count>5</comment_count>
      <attachid>282390</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-06-29 16:50:03 -0700</bug_when>
    <thetext>Comment on attachment 282390
the patch

r+</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1206562</commentid>
    <comment_count>6</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-06-29 16:56:43 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; sounds nice. generatorification should remove these resume / save and the
&gt; usual liveness analysis should not care about them.
&gt; after landing isNaN / isFinite patch, go to the generator patch, it is now
&gt; introducing bytecode analysis.

oops, bad syntax. (sorry, now typing from my phone)
After landing the isNaN / isFinite patch, I&apos;ll go to the generatorification patch, which should include the separated generatorification analysis from the usual bytecode liveness analysis.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1206783</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-06-30 11:14:18 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/202689</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>282390</attachid>
            <date>2016-06-29 16:25:50 -0700</date>
            <delta_ts>2016-06-29 16:50:03 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>15492</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDI2MjkpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDE2LTA2LTI5ICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR2VuZXJhdG9ycyB2aW9s
YXRlIGJ5dGVjb2RlIGxpdmVuZXNzIHZhbGlkYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTI3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBCYXNpYyB0byBvdXIgdGVzdCBoYXJuZXNzLgor
CisgICAgICAgIEFsc28gbWFkZSBzb21lIGNvc21ldGljIGNoYW5nZXMgdG8gdGhlIGJlbmNobWFy
ayBoYXJuZXNzLgorCisgICAgICAgICogRVM2U2FtcGxlQmVuY2gvQmFzaWMvYmFzaWMtdGVzdHMu
eWFtbDogQWRkZWQuCisgICAgICAgICogRVM2U2FtcGxlQmVuY2gvQmFzaWMvc3RyZXNzLXRlc3Qu
anM6IEFkZGVkLgorICAgICAgICAocHJlY2lzZVRpbWUpOgorICAgICAgICAqIEVTNlNhbXBsZUJl
bmNoL2RyaXZlci5qczoKKyAgICAgICAgKERyaXZlcik6CisgICAgICAgIChEcml2ZXIucHJvdG90
eXBlLnN0YXJ0KToKKyAgICAgICAgKERyaXZlci5wcm90b3R5cGUucmVwb3J0RXJyb3IpOgorICAg
ICAgICAqIEVTNlNhbXBsZUJlbmNoL2dsdWUuanM6CisgICAgICAgICogRVM2U2FtcGxlQmVuY2gv
aW5kZXguaHRtbDoKKwogMjAxNi0wNi0yOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29t
PgogCiAgICAgICAgIEVTNlNhbXBsZUJlbmNoIHNob3VsZCBoYXZlIGEgaGFybmVzcwpJbmRleDog
UGVyZm9ybWFuY2VUZXN0cy9FUzZTYW1wbGVCZW5jaC9kcml2ZXIuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
UGVyZm9ybWFuY2VUZXN0cy9FUzZTYW1wbGVCZW5jaC9kcml2ZXIuanMJKHJldmlzaW9uIDIwMjYy
OSkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvZHJpdmVyLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0yNSwxOCArMjUsMTUgQEAKICJ1c2Ugc3RyaWN0IjsKIAogY2xhc3MgRHJpdmVy
IHsKLSAgICBjb25zdHJ1Y3Rvcih0cmlnZ2VyQ2VsbCwgbWFnaWNDZWxsLCBzdW1tYXJ5Q2VsbCwg
a2V5KQorICAgIGNvbnN0cnVjdG9yKHRyaWdnZXJDZWxsLCB0cmlnZ2VyTGluaywgbWFnaWNDZWxs
LCBzdW1tYXJ5Q2VsbCwga2V5KQogICAgIHsKLSAgICAgICAgaWYgKCFtYWdpY0NlbGwpCi0gICAg
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5lZWQgbWFnaWMgY2VsbCIpOwotICAgICAgICBpZiAo
IXN1bW1hcnlDZWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOZWVkIHN1bW1hcnkg
Y2VsbCIpOwotICAgICAgICAKICAgICAgICAgdGhpcy5fYmVuY2htYXJrcyA9IG5ldyBNYXAoKTsK
ICAgICAgICAgdGhpcy5fdHJpZ2dlckNlbGwgPSB0cmlnZ2VyQ2VsbDsKKyAgICAgICAgdGhpcy5f
dHJpZ2dlckxpbmsgPSB0cmlnZ2VyTGluazsKICAgICAgICAgdGhpcy5fbWFnaWNDZWxsID0gbWFn
aWNDZWxsOwogICAgICAgICB0aGlzLl9zdW1tYXJ5ID0gbmV3IFN0YXRzKHN1bW1hcnlDZWxsKTsK
ICAgICAgICAgdGhpcy5fa2V5ID0ga2V5OworICAgICAgICB0aGlzLl9oYWRFcnJvcnMgPSBmYWxz
ZTsKICAgICAgICAgd2luZG93W2tleV0gPSB0aGlzOwogICAgIH0KICAgICAKQEAgLTQ3LDcgKzQ0
LDYgQEAgY2xhc3MgRHJpdmVyIHsKICAgICAKICAgICBzdGFydChudW1JdGVyYXRpb25zKQogICAg
IHsKLSAgICAgICAgdGhpcy5fdHJpZ2dlckNlbGxTYXZlZCA9IHRoaXMuX3RyaWdnZXJDZWxsLmlu
bmVySFRNTDsKICAgICAgICAgdGhpcy5fdXBkYXRlSXRlcmF0aW9ucygpOwogICAgICAgICAKICAg
ICAgICAgdGhpcy5fc3VtbWFyeS5yZXNldCgpOwpAQCAtNzAsNiArNjYsNyBAQCBjbGFzcyBEcml2
ZXIgewogICAgIHsKICAgICAgICAgdGhpcy5fYmVuY2htYXJrcy5nZXQodGhpcy5fYmVuY2htYXJr
KS5yZXBvcnRFcnJvciguLi5hcmdzKTsKICAgICAgICAgdGhpcy5fcmVjb21wdXRlU3VtbWFyeSgp
OworICAgICAgICB0aGlzLl9oYWRFcnJvcnMgPSB0cnVlOwogICAgICAgICB0aGlzLl9pdGVyYXRl
KCk7CiAgICAgfQogICAgIApAQCAtMTIwLDcgKzExNyw5IEBAIGNsYXNzIERyaXZlciB7CiAgICAg
ICAgIHRoaXMuX2JlbmNobWFyayA9IHRoaXMuX2l0ZXJhdG9yID8gdGhpcy5faXRlcmF0b3IubmV4
dCgpLnZhbHVlIDogbnVsbDsKICAgICAgICAgaWYgKCF0aGlzLl9iZW5jaG1hcmspIHsKICAgICAg
ICAgICAgIGlmICghdGhpcy5fbnVtSXRlcmF0aW9ucykgewotICAgICAgICAgICAgICAgIHRoaXMu
X3RyaWdnZXJDZWxsLmlubmVySFRNTCA9IHRoaXMuX3RyaWdnZXJDZWxsU2F2ZWQ7CisgICAgICAg
ICAgICAgICAgdGhpcy5fdHJpZ2dlckNlbGwuaW5uZXJIVE1MID0KKyAgICAgICAgICAgICAgICAg
ICAgKHRoaXMuX2hhZEVycm9ycyA/ICJGYWlsdXJlcyBlbmNvdW50ZXJlZCEiIDogIlN1Y2Nlc3Mh
IikgKworICAgICAgICAgICAgICAgICAgICBgIDxhIGhyZWY9IiR7dGhpcy5fdHJpZ2dlckxpbmt9
Ij5SZXN0YXJ0IEJlbmNobWFyazwvYT5gOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIHRoaXMuX251bUl0ZXJhdGlvbnMtLTsKSW5kZXg6IFBlcmZv
cm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvZ2x1ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3Jt
YW5jZVRlc3RzL0VTNlNhbXBsZUJlbmNoL2dsdWUuanMJKHJldmlzaW9uIDIwMjYyOSkKKysrIFBl
cmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvZ2x1ZS5qcwkod29ya2luZyBjb3B5KQpAQCAt
MjYsNiArMjYsNyBAQAogCiBjb25zdCBkcml2ZXIgPSBuZXcgRHJpdmVyKAogICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJ0cmlnZ2VyIiksCisgICAgImRyaXZlci5zdGFydCgxMCkiLAogICAg
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWdpYyIpLAogICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJHZW9tZWFuIiksCiAgICAgInNhbXBsZUJlbmNoIik7CkluZGV4OiBQZXJmb3JtYW5j
ZVRlc3RzL0VTNlNhbXBsZUJlbmNoL2luZGV4Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFu
Y2VUZXN0cy9FUzZTYW1wbGVCZW5jaC9pbmRleC5odG1sCShyZXZpc2lvbiAyMDI2MjkpCisrKyBQ
ZXJmb3JtYW5jZVRlc3RzL0VTNlNhbXBsZUJlbmNoL2luZGV4Lmh0bWwJKHdvcmtpbmcgY29weSkK
QEAgLTMsNiArMywxMiBAQAogPHRpdGxlPkVTNiBTYW1wbGUgQmVuY2g8L3RpdGxlPgogPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0ic3R5bGUuY3NzIj4KIDwvaGVh
ZD4KKzxzY3JpcHQ+Cit3aW5kb3cub25lcnJvciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHVybCwgbGlu
ZU51bWJlcikKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidHJpZ2dlciIpLmlubmVy
SFRNTCA9ICJFUlJPUjogIiArIHVybCArICI6IiArIGxpbmVOdW1iZXIgKyAiOiAiICsgbWVzc2Fn
ZTsKK30KKzwvc2NyaXB0PgogPHNjcmlwdCBzcmM9ImRyaXZlci5qcyI+PC9zY3JpcHQ+CiA8c2Ny
aXB0IHNyYz0icmVzdWx0cy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0ic3RhdHMuanMiPjwv
c2NyaXB0PgpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9FUzZTYW1wbGVCZW5jaC9CYXNpYy9iYXNp
Yy10ZXN0cy55YW1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVu
Y2gvQmFzaWMvYmFzaWMtdGVzdHMueWFtbAkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVz
dHMvRVM2U2FtcGxlQmVuY2gvQmFzaWMvYmFzaWMtdGVzdHMueWFtbAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDI4IEBACisjIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMK
KyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uIAorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorIyBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorIyBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyMgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLSBwYXRo
OiAuCisgIHRlc3RzOgorICAgIC0gc3RyZXNzLXRlc3QuanMKKyAgY21kOiBkZWZhdWx0UnVuTm9p
c3lUZXN0IHVubGVzcyBwYXJzZVJ1bkNvbW1hbmRzCisKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMv
RVM2U2FtcGxlQmVuY2gvQmFzaWMvc3RyZXNzLXRlc3QuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9y
bWFuY2VUZXN0cy9FUzZTYW1wbGVCZW5jaC9CYXNpYy9zdHJlc3MtdGVzdC5qcwkocmV2aXNpb24g
MCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvQmFzaWMvc3RyZXNzLXRlc3Qu
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCitsb2FkKCJhc3QuanMiKTsK
K2xvYWQoImJhc2ljLmpzIik7Citsb2FkKCJjYXNlbGVzc19tYXAuanMiKTsKK2xvYWQoImxleGVy
LmpzIik7Citsb2FkKCJudW1iZXIuanMiKTsKK2xvYWQoInBhcnNlci5qcyIpOworbG9hZCgicmFu
ZG9tLmpzIik7Citsb2FkKCJzdGF0ZS5qcyIpOworbG9hZCgidXRpbC5qcyIpOworbG9hZCgiYmVu
Y2htYXJrLmpzIik7CisKK2xldCBiZW5jaG1hcmsgPSBuZXcgQmVuY2htYXJrKCk7CitsZXQgYmVm
b3JlID0gcHJlY2lzZVRpbWUoKTsKKworLy8gUnVuIGZvciBhdCBsZWFzdCAxMCBpdGVyYXRpb25z
LgorZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgKytpKSB7CisgICAgcHJpbnQoIlJ1bm5pbmcgbWFu
ZGF0b3J5IGl0ZXJhdGlvbiAjIiArIChpICsgMSkgKyAiOiIpOworICAgIGJlbmNobWFyay5ydW5J
dGVyYXRpb24oKTsKK30KKworLy8gUnVuIHVudGlsIHdlIGhhdmUgYmVlbiBydW5uaW5nIGZvciB0
d28gc2Vjb25kcy4KK3doaWxlIChwcmVjaXNlVGltZSgpIDwgYmVmb3JlICsgMikgeworICAgIHBy
aW50KCJSdW5uaW5nIGJvbnVzIGl0ZXJhdGlvbjoiKTsKKyAgICBiZW5jaG1hcmsucnVuSXRlcmF0
aW9uKCk7Cit9CisKK3ByaW50KCJTdWNjZXNzISIpOworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDIwMjY1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMSBAQAorMjAxNi0wNi0yOSAgRmlsaXAgUGl6
bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEdlbmVyYXRvcnMgdmlvbGF0ZSBieXRl
Y29kZSBsaXZlbmVzcyB2YWxpZGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTkyNzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKyAgICAgICAgCisgICAgICAgIEZpeCBhIGxpdmVuZXNzIGJ1ZyBmb3VuZCBieSBCYXNp
Yy4gVGhlIHByb2JsZW0gaXMgdGhhdCByZXN1bWUncyBpbnRlbmRlZCBsaXZlbmVzcyBydWxlIGlz
OgorICAgICAgICAibGl2ZS1pbiBpcyBqdXN0IHRoZSB0b2tlbiBhcmd1bWVudCIsIGJ1dCB0aGUg
bGl2ZW5lc3MgYW5hbHlzaXMgdGhvdWdodCB0aGF0IHRoZSBydWxlIHdhcworICAgICAgICAibGl2
ZS1pbiBpcyBsaXZlLW91dCBtaW51cyBkZWZzIHBsdXMgbGl2ZS1hdC1jYXRjaCIuIENsZWFybHkg
dGhlc2UgdHdvIHJ1bGVzIGFyZSBxdWl0ZQorICAgICAgICBkaWZmZXJlbnQuIFRoZSB3YXkgdGhp
cyBzb3J0IG9mIHdvcmtlZCBiZWZvcmUgaXMgdGhhdCB3ZSB3b3VsZCBkZWZpbmUgdGhlIGRlZnMg
b2YgcmVzdW1lCisgICAgICAgIGFzIGJlaW5nIGVxdWFsIHRvIG91ciBwcmVkaWN0aW9uIG9mIHdo
YXQgdGhlIGxpdmUtb3V0cyB3b3VsZCBiZS4gV2UgZGlkIHRoaXMgaW4gdGhlIGhvcGUKKyAgICAg
ICAgdGhhdCB3ZSB3b3VsZCBzdWJ0cmFjdCBhbGwgbGl2ZS1vdXRzLiBCdXQsIHRoaXMgbWlzc2Vz
IHRoZSBsaXZlLWF0LWNhdGNoIHBhcnQuIFNvLCB0aGlzCisgICAgICAgIGNoYW5nZSBhZGRzIGFu
b3RoZXIgaGFjayB0byBuZXV0cmFsaXplIGxpdmUtYXQtY2F0Y2guCisgICAgICAgIAorICAgICAg
ICBUaGlzIHdvdWxkIG1ha2UgYSBsb3QgbW9yZSBzZW5zZSBpZiB3ZSB3cm90ZSBhIG5ldyBsaXZl
bmVzcyBhbmFseXNpcyB0aGF0IHdhcyBqdXN0IGZvcgorICAgICAgICBnZW5lcmF0b3IgY29udmVy
c2lvbi4gSXQgY291bGQgcmV1c2UgQnl0ZWNvZGVVc2VEZWYgYnV0IG90aGVyd2lzZSBpdCB3b3Vs
ZCBiZSBhIG5ldyB0aGluZy4KKyAgICAgICAgSXQgd291bGQgYmUgZWFzeSB0byB3cml0ZSBjcmF6
eSBydWxlcyBmb3Igc2F2ZS9yZXN1bWUgaW4gc3VjaCBhbiBhbmFseXNpcywgZXNwZWNpYWxseSBp
ZgorICAgICAgICB0aGF0IGFuYWx5c2lzIHJld3JvdGUgdGhlIGJ5dGVjb2RlLiBXZSBjb3VsZCB0
aGVuIGp1c3QgaGF2ZSBhbiBvcF95aWVsZCB0aGF0IGlzIGEgbm8tb3AuCisgICAgICAgIFdlIHdv
dWxkIGp1c3QgcmVjb3JkIHRoZSBsaXZlLW91dHMgb2Ygb3BfeWllbGQgYW5kIHVzZSB0aGF0IGZv
ciByZXdyaXRpbmcgdGhlIGNvZGUgaW4gdGVybXMKKyAgICAgICAgb2YgYSBzd2l0Y2ggc3RhdGVt
ZW50LgorCisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcDoK
KyAgICAgICAgKEpTQzo6c3RlcE92ZXJJbnN0cnVjdGlvbik6CisgICAgICAgIChKU0M6OkJ5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpczo6ZHVtcFJlc3VsdHMpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKToKKwog
MjAxNi0wNi0yOSAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBX
ZSBkb24ndCBlbWl0IFREWiBjaGVja3MgZm9yIGNhbGxfZXZhbApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcy5jcHAJKHJldmlzaW9uIDIwMjYyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIs
OSArMTMyLDE3IEBAIHN0YXRpYyB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oQ29kZUJsb2MKICAg
ICAvLyBJZiB3ZSBoYXZlIGFuIGV4Y2VwdGlvbiBoYW5kbGVyLCB3ZSB3YW50IHRoZSBsaXZlLWlu
IHZhcmlhYmxlcyBvZiB0aGUgCiAgICAgLy8gZXhjZXB0aW9uIGhhbmRsZXIgYmxvY2sgdG8gYmUg
aW5jbHVkZWQgaW4gdGhlIGxpdmUtaW4gb2YgdGhpcyBwYXJ0aWN1bGFyIGJ5dGVjb2RlLgogICAg
IGlmIChIYW5kbGVySW5mbyogaGFuZGxlciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2Rl
T2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KSkgewotICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGhh
bmRsZXJCbG9jayA9IGZpbmRCYXNpY0Jsb2NrV2l0aExlYWRlck9mZnNldChiYXNpY0Jsb2Nrcywg
aGFuZGxlci0+dGFyZ2V0KTsKLSAgICAgICAgQVNTRVJUKGhhbmRsZXJCbG9jayk7Ci0gICAgICAg
IGhhbmRsZXJCbG9jay0+aW4oKS5mb3JFYWNoU2V0Qml0KHVzZSk7CisgICAgICAgIC8vIEZJWE1F
OiBUaGlzIHJlc3VtZSBjaGVjayBzaG91bGQgbm90IGJlIG5lZWRlZC4KKyAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTI4MQorICAgICAgICBJbnRl
cnByZXRlciogaW50ZXJwcmV0ZXIgPSBjb2RlQmxvY2stPnZtKCktPmludGVycHJldGVyOworICAg
ICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBjb2RlQmxvY2stPmluc3RydWN0
aW9ucygpLmJlZ2luKCk7CisgICAgICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9ICZpbnN0
cnVjdGlvbnNCZWdpbltieXRlY29kZU9mZnNldF07CisgICAgICAgIE9wY29kZUlEIG9wY29kZUlE
ID0gaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGluc3RydWN0aW9uLT51Lm9wY29kZSk7CisgICAg
ICAgIGlmIChvcGNvZGVJRCAhPSBvcF9yZXN1bWUpIHsKKyAgICAgICAgICAgIEJ5dGVjb2RlQmFz
aWNCbG9jayogaGFuZGxlckJsb2NrID0gZmluZEJhc2ljQmxvY2tXaXRoTGVhZGVyT2Zmc2V0KGJh
c2ljQmxvY2tzLCBoYW5kbGVyLT50YXJnZXQpOworICAgICAgICAgICAgQVNTRVJUKGhhbmRsZXJC
bG9jayk7CisgICAgICAgICAgICBoYW5kbGVyQmxvY2stPmluKCkuZm9yRWFjaFNldEJpdCh1c2Up
OworICAgICAgICB9CiAgICAgfQogfQogCkBAIC0yODksNiArMjk3LDcgQEAgdm9pZCBCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVLaQogCiB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpczo6ZHVtcFJlc3VsdHMoKQogeworICAgIGRhdGFMb2coIlxuRHVtcGluZyBieXRlY29kZSBs
aXZlbmVzcyBmb3IgIiwgKm1fY29kZUJsb2NrLCAiOlxuIik7CiAgICAgSW50ZXJwcmV0ZXIqIGlu
dGVycHJldGVyID0gbV9jb2RlQmxvY2stPnZtKCktPmludGVycHJldGVyOwogICAgIEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdp
bigpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Jhc2ljQmxvY2tzLnNpemUoKTsg
aSsrKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VE
ZWYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVVc2VEZWYuaAkocmV2aXNpb24gMjAyNjI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4Miw2ICs0ODIsOCBA
QCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsCiAgICAgfQogICAgIGNh
c2Ugb3BfcmVzdW1lOiB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJsb2NrLT5zdWNjZXNzb3Jz
KCkuc2l6ZSgpID09IDEpOworICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyByZWFsbHkgZGlydHku
CisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTky
ODEKICAgICAgICAgYmxvY2stPnN1Y2Nlc3NvcnMoKVswXS0+aW4oKS5mb3JFYWNoU2V0Qml0KFsm
XSh1bnNpZ25lZCBsb2NhbCkgewogICAgICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3Ry
dWN0aW9uLCBvcGNvZGVJRCwgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobG9jYWwpLm9mZnNldCgp
KTsKICAgICAgICAgfSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjAyNjI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NzMsNyArMTY3Myw5
IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoCiAgICAgICAgICAgICBpbnQgZ2VuZXJh
dG9yID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICB1bnNpZ25lZCBsaXZlQ2FsbGVl
TG9jYWxzSW5kZXggPSAoKytpdCktPnUudW5zaWduZWRWYWx1ZTsKICAgICAgICAgICAgIGludCBv
ZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGNvbnN0IEZhc3RCaXRWZWN0
b3ImIGxpdmVuZXNzID0gbV9yYXJlRGF0YS0+bV9saXZlQ2FsbGVlTG9jYWxzQXRZaWVsZFtsaXZl
Q2FsbGVlTG9jYWxzSW5kZXhdOworICAgICAgICAgICAgRmFzdEJpdFZlY3RvciBsaXZlbmVzczsK
KyAgICAgICAgICAgIGlmIChsaXZlQ2FsbGVlTG9jYWxzSW5kZXggPCBtX3JhcmVEYXRhLT5tX2xp
dmVDYWxsZWVMb2NhbHNBdFlpZWxkLnNpemUoKSkKKyAgICAgICAgICAgICAgICBsaXZlbmVzcyA9
IG1fcmFyZURhdGEtPm1fbGl2ZUNhbGxlZUxvY2Fsc0F0WWllbGRbbGl2ZUNhbGxlZUxvY2Fsc0lu
ZGV4XTsKICAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgInNhdmUiKTsKICAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAiLCByZWdpc3Rlck5h
bWUoZ2VuZXJhdG9yKS5kYXRhKCkpOwogICAgICAgICAgICAgbGl2ZW5lc3MuZHVtcChvdXQpOwpA
QCAtMTY4Myw3ICsxNjg1LDkgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSgKICAgICAg
ICAgY2FzZSBvcF9yZXN1bWU6IHsKICAgICAgICAgICAgIGludCBnZW5lcmF0b3IgPSAoKytpdCkt
PnUub3BlcmFuZDsKICAgICAgICAgICAgIHVuc2lnbmVkIGxpdmVDYWxsZWVMb2NhbHNJbmRleCA9
ICgrK2l0KS0+dS51bnNpZ25lZFZhbHVlOwotICAgICAgICAgICAgY29uc3QgRmFzdEJpdFZlY3Rv
ciYgbGl2ZW5lc3MgPSBtX3JhcmVEYXRhLT5tX2xpdmVDYWxsZWVMb2NhbHNBdFlpZWxkW2xpdmVD
YWxsZWVMb2NhbHNJbmRleF07CisgICAgICAgICAgICBGYXN0Qml0VmVjdG9yIGxpdmVuZXNzOwor
ICAgICAgICAgICAgaWYgKGxpdmVDYWxsZWVMb2NhbHNJbmRleCA8IG1fcmFyZURhdGEtPm1fbGl2
ZUNhbGxlZUxvY2Fsc0F0WWllbGQuc2l6ZSgpKQorICAgICAgICAgICAgICAgIGxpdmVuZXNzID0g
bV9yYXJlRGF0YS0+bV9saXZlQ2FsbGVlTG9jYWxzQXRZaWVsZFtsaXZlQ2FsbGVlTG9jYWxzSW5k
ZXhdOwogICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24s
IGl0LCAicmVzdW1lIik7CiAgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgIiwgcmVnaXN0ZXJO
YW1lKGdlbmVyYXRvcikuZGF0YSgpKTsKICAgICAgICAgICAgIGxpdmVuZXNzLmR1bXAob3V0KTsK
SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIwMjY1NykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE1IEBACisyMDE2LTA2LTI5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisK
KyAgICAgICAgR2VuZXJhdG9ycyB2aW9sYXRlIGJ5dGVjb2RlIGxpdmVuZXNzIHZhbGlkYXRpb24K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTI3OQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAg
QWRkIEJhc2ljIHRvIG91ciB0ZXN0IGhhcm5lc3MuCisKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1q
YXZhc2NyaXB0Y29yZS10ZXN0czoKKyAgICAgICAgKHJ1bkpTQ1N0cmVzc1Rlc3RzKToKKwogMjAx
Ni0wNi0yOSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHN1
cHBvcnQgZm9yIGNvbGxlY3RpbmcgY3VtdWxhdGl2ZSBMTElOVCBzdGF0cyB2aWEgYSBKU0NfbGxp
bnRTdGF0c0ZpbGUgb3B0aW9uLgpJbmRleDogVG9vbHMvU2NyaXB0cy9ydW4tamF2YXNjcmlwdGNv
cmUtdGVzdHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9ydW4tamF2YXNjcmlwdGNvcmUt
dGVzdHMJKHJldmlzaW9uIDIwMjYyOSkKKysrIFRvb2xzL1NjcmlwdHMvcnVuLWphdmFzY3JpcHRj
b3JlLXRlc3RzCSh3b3JraW5nIGNvcHkpCkBAIC0yNjksNiArMjY5LDcgQEAgc3ViIHJ1bkpTQ1N0
cmVzc1Rlc3RzCiAgICAgICAgICAgICAiUGVyZm9ybWFuY2VUZXN0cy9TdW5TcGlkZXIvdGVzdHMv
c3Vuc3BpZGVyLTEuMCIsCiAgICAgICAgICAgICAiUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0v
Y2Rqcy9jZGpzLXRlc3RzLnlhbWwiLAogICAgICAgICAgICAgIlBlcmZvcm1hbmNlVGVzdHMvRVM2
U2FtcGxlQmVuY2gvQWlyL2FpcmpzLXRlc3RzLnlhbWwiLAorICAgICAgICAgICAgIlBlcmZvcm1h
bmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvQmFzaWMvYmFzaWMtdGVzdHMueWFtbCIsCiAgICAgICAg
ICAgICAiU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL2V4ZWN1dGFibGVBbGxvY2F0aW9uRnV6
ei55YW1sIiwKICAgICAgICAgICAgICJTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvZXhjZXB0
aW9uRnV6ei55YW1sIiwKICAgICAgICAgICAgICJQZXJmb3JtYW5jZVRlc3RzL1N1blNwaWRlci9u
by1hcmNoaXRlY3R1cmUtc3BlY2lmaWMtb3B0aW1pemF0aW9ucy55YW1sIiwK
</data>
<flag name="review"
          id="306206"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
          </attachment>
      

    </bug>

</bugzilla>