Changeset 220370 in webkit


Ignore:
Timestamp:
Aug 7, 2017 4:55:36 PM (7 years ago)
Author:
Devin Rousso
Message:

Web Inspector: Preview Canvas path when viewing a recording
https://bugs.webkit.org/show_bug.cgi?id=174967

Reviewed by Brian Burg.

Source/WebCore:

Tests: fast/canvas/2d.currentPoint.html

fast/canvas/2d.getPath.modification.html
fast/canvas/2d.getPath.newobject.html
fast/canvas/2d.setPath.html

  • html/canvas/CanvasPath.idl:
  • html/canvas/CanvasPath.h:
  • html/canvas/CanvasPath.cpp:

(WebCore::CanvasPath::currentX const):
(WebCore::CanvasPath::currentY const):

  • html/canvas/CanvasRenderingContext2D.idl:
  • html/canvas/CanvasRenderingContext2D.h:
  • html/canvas/CanvasRenderingContext2D.cpp:

(WebCore::CanvasRenderingContext2D::setPath):
(WebCore::CanvasRenderingContext2D::getPath const):

  • page/RuntimeEnabledFeatures.h:

(WebCore::RuntimeEnabledFeatures::setInspectorAdditionsEnabled):
(WebCore::RuntimeEnabledFeatures::inspectorAdditionsEnabled const):
Add runtime flag for added IDL items above so that they are only usable within the inspector
process. The runtime flag is not enabled from anywhere else as of now.

  • inspector/InspectorCanvas.cpp:

(WebCore::InspectorCanvas::buildInitialState):
Send current path as part of the InitialState.
Drive-by: deduplicate more string values.

Source/WebInspectorUI:

  • Localizations/en.lproj/localizedStrings.js:
  • UserInterface/Base/Setting.js:
  • UserInterface/Views/RecordingContentView.js:

(WI.RecordingContentView):
(WI.RecordingContentView.supportsCanvasPathDebugging):
(WI.RecordingContentView.prototype.get navigationItems):
(WI.RecordingContentView.prototype.shown):
(WI.RecordingContentView.prototype._generateContentCanvas2D):
(WI.RecordingContentView.prototype._actionModifiesPath):
(WI.RecordingContentView.prototype._updateCanvasPath):
(WI.RecordingContentView.prototype._showPathButtonClicked):
Show each segment of the current path as an overlay when the setting is enabled.
Drive-by: fix forgotten function rename.

  • UserInterface/Views/RecordingContentView.css:

(.content-view:not(.tab).recording canvas.path):

  • UserInterface/Views/RecordingStateDetailsSidebarPanel.js:

(WI.RecordingStateDetailsSidebarPanel.prototype._generateDetailsCanvas2D):
Show the currentX/currentY in the current state.

  • UserInterface/Models/RecordingAction.js:

(WI.RecordingAction.isFunctionForType):
(WI.RecordingAction.prototype.swizzle):
Use Sets for better performance.

Source/WebKit:

  • Shared/WebPreferencesDefinitions.h:
  • UIProcess/API/C/WKPreferencesRefPrivate.h:
  • UIProcess/API/C/WKPreferences.cpp:

(WKPreferencesSetInspectorAdditionsEnabled):
(WKPreferencesGetInspectorAdditionsEnabled):

  • WebProcess/WebPage/WebPage.cpp:

(WebKit::WebPage::updatePreferences):
Add plumbing for new InspectorAdditions runtime flag.

  • WebProcess/WebPage/WebInspectorUI.cpp:

(WebKit::WebInspectorUI::WebInspectorUI):
Enable InspectorAdditions by default in the WebInspector page.

Source/WebKitLegacy/mac:

  • WebView/WebPreferenceKeysPrivate.h:
  • WebView/WebPreferences.mm:

(+[WebPreferences initialize]):
(-[WebPreferences inspectorAdditionsEnabled]):
(-[WebPreferences setInspectorAdditionsEnabled:]):

  • WebView/WebPreferencesPrivate.h:
  • WebView/WebView.mm:

(-[WebView _preferencesChanged:]):
Add plumbing for new InspectorAdditions runtime flag.

Tools:

  • DumpRenderTree/TestOptions.h:
  • DumpRenderTree/TestOptions.mm:

(TestOptions::TestOptions):

  • DumpRenderTree/mac/DumpRenderTree.mm:

(setWebPreferencesForTestOptions):

  • WebKitTestRunner/TestController.cpp:

(WTR::TestController::resetPreferencesToConsistentValues):
(WTR::updateTestOptionsFromTestHeader):

  • WebKitTestRunner/TestOptions.h:

(WTR::TestOptions::hasSameInitializationOptions const):
Add plumbing for new InspectorAdditions runtime flag.

LayoutTests:

  • fast/canvas/2d.currentPoint-expected.txt: Added.
  • fast/canvas/2d.currentPoint.html: Added.
  • fast/canvas/2d.getPath.modification-expected.txt: Added.
  • fast/canvas/2d.getPath.modification.html: Added.
  • fast/canvas/2d.getPath.newobject-expected.txt: Added.
  • fast/canvas/2d.getPath.newobject.html: Added.
  • fast/canvas/2d.setPath-expected.txt: Added.
  • fast/canvas/2d.setPath.html: Added.
  • inspector/canvas/recording-2d-expected.txt:
  • inspector/canvas/recording-2d.html:

Updated for additional deduplication in InitialState.

Location:
trunk
Files:
8 added
36 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r220350 r220370  
     12017-08-07  Devin Rousso  <drousso@apple.com>
     2
     3        Web Inspector: Preview Canvas path when viewing a recording
     4        https://bugs.webkit.org/show_bug.cgi?id=174967
     5
     6        Reviewed by Brian Burg.
     7
     8        * fast/canvas/2d.currentPoint-expected.txt: Added.
     9        * fast/canvas/2d.currentPoint.html: Added.
     10        * fast/canvas/2d.getPath.modification-expected.txt: Added.
     11        * fast/canvas/2d.getPath.modification.html: Added.
     12        * fast/canvas/2d.getPath.newobject-expected.txt: Added.
     13        * fast/canvas/2d.getPath.newobject.html: Added.
     14        * fast/canvas/2d.setPath-expected.txt: Added.
     15        * fast/canvas/2d.setPath.html: Added.
     16
     17        * inspector/canvas/recording-2d-expected.txt:
     18        * inspector/canvas/recording-2d.html:
     19        Updated for additional deduplication in InitialState.
     20
    1212017-08-07  Ryan Haddad  <ryanhaddad@apple.com>
    222
  • trunk/LayoutTests/inspector/canvas/recording-2d-expected.txt

    r220188 r220370  
    2020      ],
    2121      "globalAlpha": 1,
    22       "globalCompositeOperation": "source-over",
     22      "globalCompositeOperation": 0,
    2323      "lineWidth": 1,
    24       "lineCap": "butt",
    25       "lineJoin": "miter",
     24      "lineCap": 1,
     25      "lineJoin": 2,
    2626      "miterLimit": 10,
    2727      "shadowOffsetX": 0,
    2828      "shadowOffsetY": 0,
    2929      "shadowBlur": 0,
    30       "shadowColor": "rgba(0, 0, 0, 0)",
     30      "shadowColor": 3,
    3131      "setLineDash": [
    3232        []
    3333      ],
    3434      "lineDashOffset": 0,
    35       "font": "10px sans-serif",
    36       "textAlign": "start",
    37       "textBaseline": "alphabetic",
    38       "direction": "ltr",
    39       "strokeStyle": 0,
    40       "fillStyle": 0,
     35      "font": 4,
     36      "textAlign": 5,
     37      "textBaseline": 6,
     38      "direction": 7,
     39      "strokeStyle": 8,
     40      "fillStyle": 8,
    4141      "imageSmoothingEnabled": true,
    42       "imageSmoothingQuality": "low"
     42      "imageSmoothingQuality": 9,
     43      "setPath": [
     44        10
     45      ]
    4346    },
    4447    "content": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAAAtJREFUCB1jYEAHAAASAAGAFMrMAAAAAElFTkSuQmCC"
     
    4851      "actions": [
    4952        [
    50           1,
     53          11,
    5154          [
    5255            1,
     
    5861          ],
    5962          [
    60             4,
    61             6,
    62             7,
    63             9,
    64             11,
    6563            13,
     64            15,
    6665            16,
    6766            18,
    68             20
    69           ]
    70         ],
    71         [
    72           1,
     67            20,
     68            22,
     69            25,
     70            27,
     71            29
     72          ]
     73        ],
     74        [
     75          11,
    7376          [
    7477            6,
     
    8083          ],
    8184          [
    82             21,
    83             6,
     85            30,
     86            15,
     87            31,
     88            18,
     89            20,
    8490            22,
    85             9,
    86             11,
    87             13,
    88             16,
    89             18,
    90             20
     91            25,
     92            27,
     93            29
    9194          ]
    9295        ]
     
    9598  ],
    9699  "data": [
     100    "source-over",
     101    "butt",
     102    "miter",
     103    "rgba(0, 0, 0, 0)",
     104    "10px sans-serif",
     105    "start",
     106    "alphabetic",
     107    "ltr",
    97108    "#000000",
     109    "low",
     110    "",
    98111    "arc",
    99     "",
    100112    "inspector/canvas/recording-2d.html",
    101113    [
    102       2,
    103       3,
    104       58,
     114      10,
     115      12,
     116      77,
    105117      42
    106118    ],
    107119    "ignoreException",
    108120    [
    109       5,
    110       3,
    111       45,
     121      14,
     122      12,
     123      48,
    112124      10
    113125    ],
    114126    [
    115       2,
    116       3,
    117       58,
     127      10,
     128      12,
     129      77,
    118130      28
    119131    ],
    120132    "f",
    121133    [
    122       8,
    123       3,
    124       378,
     134      17,
     135      12,
     136      399,
    125137      24
    126138    ],
    127139    "performActions",
    128140    [
    129       10,
    130       3,
    131       382,
     141      19,
     142      12,
     143      403,
    132144      6
    133145    ],
    134146    "global code",
    135147    [
    136       12,
    137       2,
     148      21,
     149      10,
    138150      1,
    139151      15
     
    142154    "[native code]",
    143155    [
    144       14,
    145       15,
     156      23,
     157      24,
    146158      0,
    147159      0
     
    149161    "_evaluateOn",
    150162    [
    151       17,
    152       2,
     163      26,
     164      10,
    153165      128,
    154166      29
     
    156168    "_evaluateAndWrap",
    157169    [
    158       19,
    159       2,
     170      28,
     171      10,
    160172      122,
    161173      108
    162174    ],
    163175    [
    164       2,
    165       3,
    166       59,
     176      10,
     177      12,
     178      78,
    167179      42
    168180    ],
    169181    [
    170       2,
    171       3,
    172       59,
     182      10,
     183      12,
     184      78,
    173185      28
    174186    ]
     
    193205      ],
    194206      "globalAlpha": 1,
    195       "globalCompositeOperation": "source-over",
     207      "globalCompositeOperation": 0,
    196208      "lineWidth": 1,
    197       "lineCap": "butt",
    198       "lineJoin": "miter",
     209      "lineCap": 1,
     210      "lineJoin": 2,
    199211      "miterLimit": 10,
    200212      "shadowOffsetX": 0,
    201213      "shadowOffsetY": 0,
    202214      "shadowBlur": 0,
    203       "shadowColor": "rgba(0, 0, 0, 0)",
     215      "shadowColor": 3,
    204216      "setLineDash": [
    205217        []
    206218      ],
    207219      "lineDashOffset": 0,
    208       "font": "10px sans-serif",
    209       "textAlign": "start",
    210       "textBaseline": "alphabetic",
    211       "direction": "ltr",
    212       "strokeStyle": 0,
    213       "fillStyle": 0,
     220      "font": 4,
     221      "textAlign": 5,
     222      "textBaseline": 6,
     223      "direction": 7,
     224      "strokeStyle": 8,
     225      "fillStyle": 8,
    214226      "imageSmoothingEnabled": true,
    215       "imageSmoothingQuality": "low"
     227      "imageSmoothingQuality": 9,
     228      "setPath": [
     229        10
     230      ]
    216231    },
    217232    "content": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAAAtJREFUCB1jYEAHAAASAAGAFMrMAAAAAElFTkSuQmCC"
     
    221236      "actions": [
    222237        [
    223           1,
     238          11,
    224239          [
    225240            1,
     
    231246          ],
    232247          [
    233             4,
    234             6,
    235             7,
    236             9,
    237             11,
    238248            13,
     249            15,
    239250            16,
    240251            18,
    241             20
    242           ]
    243         ],
    244         [
    245           1,
     252            20,
     253            22,
     254            25,
     255            27,
     256            29
     257          ]
     258        ],
     259        [
     260          11,
    246261          [
    247262            6,
     
    253268          ],
    254269          [
    255             21,
    256             6,
     270            30,
     271            15,
     272            31,
     273            18,
     274            20,
    257275            22,
    258             9,
    259             11,
    260             13,
    261             16,
    262             18,
    263             20
    264           ]
    265         ]
    266       ]
    267     },
    268     {
    269       "actions": [
    270         [
    271           23,
     276            25,
     277            27,
     278            29
     279          ]
     280        ]
     281      ]
     282    },
     283    {
     284      "actions": [
     285        [
     286          32,
    272287          [
    273288            1,
     
    278293          ],
    279294          [
    280             24,
    281             6,
    282             25,
    283             9
    284           ]
    285         ]
    286       ]
    287     },
    288     {
    289       "actions": [
    290         [
    291           26,
     295            33,
     296            15,
     297            34,
     298            18
     299          ]
     300        ]
     301      ]
     302    },
     303    {
     304      "actions": [
     305        [
     306          35,
    292307          [],
    293308          [
    294             27,
    295             9
    296           ]
    297         ]
    298       ]
    299     },
    300     {
    301       "actions": [
    302         [
    303           28,
     309            36,
     310            18
     311          ]
     312        ]
     313      ]
     314    },
     315    {
     316      "actions": [
     317        [
     318          37,
    304319          [
    305320            1,
     
    311326          ],
    312327          [
    313             29,
    314             9
    315           ]
    316         ]
    317       ]
    318     },
    319     {
    320       "actions": [
    321         [
    322           30,
     328            38,
     329            18
     330          ]
     331        ]
     332      ]
     333    },
     334    {
     335      "actions": [
     336        [
     337          39,
    323338          [],
    324339          [
    325             31,
    326             9
    327           ]
    328         ]
    329       ]
    330     },
    331     {
    332       "actions": [
    333         [
    334           32,
     340            40,
     341            18
     342          ]
     343        ]
     344      ]
     345    },
     346    {
     347      "actions": [
     348        [
     349          41,
    335350          [
    336351            1,
     
    340355          ],
    341356          [
    342             33,
    343             9
    344           ]
    345         ]
    346       ]
    347     },
    348     {
    349       "actions": [
    350         [
    351           34,
     357            42,
     358            18
     359          ]
     360        ]
     361      ]
     362    },
     363    {
     364      "actions": [
     365        [
     366          43,
    352367          [],
    353368          [
    354             35,
    355             9
    356           ]
    357         ]
    358       ]
    359     },
    360     {
    361       "actions": [
    362         [
    363           36,
    364           [
    365             37
    366           ],
    367           [
    368             38,
    369             9
    370           ]
    371         ],
    372         [
    373           36,
    374           [
    375             39
    376           ],
    377           [
    378             40,
    379             9
    380           ]
    381         ],
    382         [
    383           36,
    384           [
    385             41,
    386             37
    387           ],
    388           [
    389             42,
    390             9
    391           ]
    392         ],
    393         [
    394           36,
    395           [
    396             43,
    397             39
    398           ],
    399           [
    400369            44,
    401             9
     370            18
    402371          ]
    403372        ]
     
    408377        [
    409378          45,
     379          [
     380            46
     381          ],
     382          [
     383            47,
     384            18
     385          ]
     386        ],
     387        [
     388          45,
     389          [
     390            48
     391          ],
     392          [
     393            49,
     394            18
     395          ]
     396        ],
     397        [
     398          45,
     399          [
     400            50,
     401            46
     402          ],
     403          [
     404            51,
     405            18
     406          ]
     407        ],
     408        [
     409          45,
     410          [
     411            52,
     412            48
     413          ],
     414          [
     415            53,
     416            18
     417          ]
     418        ]
     419      ]
     420    },
     421    {
     422      "actions": [
     423        [
     424          54,
    410425          [],
    411426          [
    412             46,
    413             9
    414           ]
    415         ]
    416       ]
    417     },
    418     {
    419       "actions": [
    420         [
    421           47,
     427            55,
     428            18
     429          ]
     430        ]
     431      ]
     432    },
     433    {
     434      "actions": [
     435        [
     436          56,
    422437          [],
    423438          [
    424             48,
    425             9
    426           ]
    427         ]
    428       ]
    429     },
    430     {
    431       "actions": [
    432         [
    433           49,
    434           [
    435             50
    436           ],
    437           [
    438             51,
    439             6,
    440             52,
    441             9
    442           ]
    443         ],
    444         [
    445           49,
     439            57,
     440            18
     441          ]
     442        ]
     443      ]
     444    },
     445    {
     446      "actions": [
     447        [
     448          58,
     449          [
     450            59
     451          ],
     452          [
     453            60,
     454            15,
     455            61,
     456            18
     457          ]
     458        ],
     459        [
     460          58,
    446461          [
    447462            2,
     
    449464          ],
    450465          [
    451             53,
    452             6,
    453             54,
    454             9
    455           ]
    456         ]
    457       ]
    458     },
    459     {
    460       "actions": [
    461         [
    462           55,
     466            62,
     467            15,
     468            63,
     469            18
     470          ]
     471        ]
     472      ]
     473    },
     474    {
     475      "actions": [
     476        [
     477          64,
    463478          [
    464479            1,
     
    468483          ],
    469484          [
    470             56,
    471             6,
    472             57,
    473             9
    474           ]
    475         ]
    476       ]
    477     },
    478     {
    479       "actions": [
    480         [
    481           58,
    482           [
    483             59,
    484             60
    485           ],
    486           [
    487             61,
    488             6,
    489             62,
    490             9
    491           ]
    492         ],
    493         [
    494           58,
    495           [
    496             63,
    497             64
    498           ],
    499           [
    500485            65,
    501             6,
     486            15,
    502487            66,
    503             9
    504           ]
    505         ],
    506         [
    507           58,
    508           [
    509             67,
    510             68
    511           ],
    512           [
    513             69,
    514             6,
     488            18
     489          ]
     490        ]
     491      ]
     492    },
     493    {
     494      "actions": [
     495        [
     496          67,
     497          [
     498            68,
     499            69
     500          ],
     501          [
    515502            70,
    516             9
    517           ]
    518         ]
    519       ]
    520     },
    521     {
    522       "actions": [
    523         [
    524           71,
     503            15,
     504            71,
     505            18
     506          ]
     507        ],
     508        [
     509          67,
     510          [
     511            72,
     512            73
     513          ],
     514          [
     515            74,
     516            15,
     517            75,
     518            18
     519          ]
     520        ],
     521        [
     522          67,
     523          [
     524            76,
     525            77
     526          ],
     527          [
     528            78,
     529            15,
     530            79,
     531            18
     532          ]
     533        ]
     534      ]
     535    },
     536    {
     537      "actions": [
     538        [
     539          80,
    525540          [
    526541            1,
     
    532547          ],
    533548          [
    534             72,
    535             6,
    536             73,
    537             9
    538           ]
    539         ]
    540       ]
    541     },
    542     {
    543       "actions": [
    544         [
    545           74,
     549            81,
     550            15,
     551            82,
     552            18
     553          ]
     554        ]
     555      ]
     556    },
     557    {
     558      "actions": [
     559        [
     560          83,
    546561          [],
    547562          [
    548             75,
    549             9
    550           ]
    551         ],
    552         [
    553           74,
    554           [
    555             76
    556           ],
    557           [
    558             77,
    559             9
    560           ]
    561         ]
    562       ]
    563     },
    564     {
    565       "actions": [
    566         [
    567           78,
    568           [
    569             79
    570           ],
    571           [
    572             80,
    573             9
    574           ]
    575         ],
    576         [
    577           78,
    578           [
    579             41,
    580             79
    581           ],
    582           [
    583             81,
    584             9
    585           ]
    586         ]
    587       ]
    588     },
    589     {
    590       "actions": [
    591         [
    592           82,
    593           [
    594             59,
     563            84,
     564            18
     565          ]
     566        ],
     567        [
     568          83,
     569          [
     570            85
     571          ],
     572          [
     573            86,
     574            18
     575          ]
     576        ]
     577      ]
     578    },
     579    {
     580      "actions": [
     581        [
     582          87,
     583          [
     584            88
     585          ],
     586          [
     587            89,
     588            18
     589          ]
     590        ],
     591        [
     592          87,
     593          [
     594            50,
     595            88
     596          ],
     597          [
     598            90,
     599            18
     600          ]
     601        ]
     602      ]
     603    },
     604    {
     605      "actions": [
     606        [
     607          91,
     608          [
     609            68,
    595610            1,
    596611            2
    597612          ],
    598613          [
    599             83,
    600             6,
    601             84,
    602             9
    603           ]
    604         ],
    605         [
    606           82,
    607           [
    608             63,
     614            92,
     615            15,
     616            93,
     617            18
     618          ]
     619        ],
     620        [
     621          91,
     622          [
     623            72,
    609624            3,
    610625            4
    611626          ],
    612627          [
    613             85,
    614             6,
    615             86,
    616             9
    617           ]
    618         ],
    619         [
    620           82,
    621           [
    622             67,
     628            94,
     629            15,
     630            95,
     631            18
     632          ]
     633        ],
     634        [
     635          91,
     636          [
     637            76,
    623638            5,
    624639            6
    625640          ],
    626641          [
    627             87,
    628             6,
    629             88,
    630             9
    631           ]
    632         ],
    633         [
    634           82,
    635           [
    636             59,
     642            96,
     643            15,
     644            97,
     645            18
     646          ]
     647        ],
     648        [
     649          91,
     650          [
     651            68,
    637652            7,
    638653            8,
     
    641656          ],
    642657          [
    643             89,
    644             6,
    645             90,
    646             9
    647           ]
    648         ],
    649         [
    650           82,
    651           [
    652             63,
     658            98,
     659            15,
     660            99,
     661            18
     662          ]
     663        ],
     664        [
     665          91,
     666          [
     667            72,
    653668            11,
    654669            12,
     
    657672          ],
    658673          [
    659             91,
    660             6,
    661             92,
    662             9
    663           ]
    664         ],
    665         [
    666           82,
    667           [
    668             67,
     674            100,
     675            15,
     676            101,
     677            18
     678          ]
     679        ],
     680        [
     681          91,
     682          [
     683            76,
    669684            15,
    670685            16,
     
    673688          ],
    674689          [
    675             93,
    676             6,
    677             94,
    678             9
    679           ]
    680         ],
    681         [
    682           82,
    683           [
    684             59,
     690            102,
     691            15,
     692            103,
     693            18
     694          ]
     695        ],
     696        [
     697          91,
     698          [
     699            68,
    685700            19,
    686701            20,
     
    693708          ],
    694709          [
    695             95,
    696             6,
    697             96,
    698             9
    699           ]
    700         ],
    701         [
    702           82,
    703           [
    704             63,
     710            104,
     711            15,
     712            105,
     713            18
     714          ]
     715        ],
     716        [
     717          91,
     718          [
     719            72,
    705720            27,
    706721            28,
     
    713728          ],
    714729          [
    715             97,
    716             6,
    717             98,
    718             9
    719           ]
    720         ],
    721         [
    722           82,
    723           [
    724             67,
     730            106,
     731            15,
     732            107,
     733            18
     734          ]
     735        ],
     736        [
     737          91,
     738          [
     739            76,
    725740            35,
    726741            36,
     
    733748          ],
    734749          [
    735             99,
    736             6,
    737             100,
    738             9
    739           ]
    740         ]
    741       ]
    742     },
    743     {
    744       "actions": [
    745         [
    746           101,
    747           [
    748             59,
     750            108,
     751            15,
     752            109,
     753            18
     754          ]
     755        ]
     756      ]
     757    },
     758    {
     759      "actions": [
     760        [
     761          110,
     762          [
     763            68,
    749764            1,
    750765            2,
     
    755770            7,
    756771            8,
    757             2
    758           ],
    759           [
    760             102,
    761             9
    762           ]
    763         ],
    764         [
    765           101,
    766           [
    767             59,
     772            10
     773          ],
     774          [
     775            111,
     776            18
     777          ]
     778        ],
     779        [
     780          110,
     781          [
     782            68,
    768783            9,
    769784            10,
     
    774789            15,
    775790            16,
    776             76
    777           ],
    778           [
    779             103,
    780             9
    781           ]
    782         ]
    783       ]
    784     },
    785     {
    786       "actions": [
    787         [
    788           104,
     791            85
     792          ],
     793          [
     794            112,
     795            18
     796          ]
     797        ]
     798      ]
     799    },
     800    {
     801      "actions": [
     802        [
     803          113,
    789804          [
    790805            1,
     
    798813          ],
    799814          [
    800             105,
    801             6,
    802             106,
    803             9
    804           ]
    805         ],
    806         [
    807           104,
     815            114,
     816            15,
     817            115,
     818            18
     819          ]
     820        ],
     821        [
     822          113,
    808823          [
    809824            8,
     
    817832          ],
    818833          [
    819             107,
    820             6,
    821             108,
    822             9
    823           ]
    824         ]
    825       ]
    826     },
    827     {
    828       "actions": [
    829         [
    830           109,
    831           [
    832             37
    833           ],
    834           [
    835             110,
    836             9
    837           ]
    838         ],
    839         [
    840           109,
    841           [
    842             39
    843           ],
    844           [
    845             111,
    846             9
    847           ]
    848         ],
    849         [
    850           109,
    851           [
    852             41,
    853             37
    854           ],
    855           [
    856             112,
    857             9
    858           ]
    859         ],
    860         [
    861           109,
    862           [
    863             43,
    864             39
    865           ],
    866           [
    867             113,
    868             9
    869           ]
    870         ]
    871       ]
    872     },
    873     {
    874       "actions": [
    875         [
    876           114,
     834            116,
     835            15,
     836            117,
     837            18
     838          ]
     839        ]
     840      ]
     841    },
     842    {
     843      "actions": [
     844        [
     845          118,
     846          [
     847            46
     848          ],
     849          [
     850            119,
     851            18
     852          ]
     853        ],
     854        [
     855          118,
     856          [
     857            48
     858          ],
     859          [
     860            120,
     861            18
     862          ]
     863        ],
     864        [
     865          118,
     866          [
     867            50,
     868            46
     869          ],
     870          [
     871            121,
     872            18
     873          ]
     874        ],
     875        [
     876          118,
     877          [
     878            52,
     879            48
     880          ],
     881          [
     882            122,
     883            18
     884          ]
     885        ]
     886      ]
     887    },
     888    {
     889      "actions": [
     890        [
     891          123,
    877892          [
    878893            1,
     
    882897          ],
    883898          [
    884             115,
    885             9
    886           ]
    887         ]
    888       ]
    889     },
    890     {
    891       "actions": [
    892         [
    893           116,
     899            124,
     900            18
     901          ]
     902        ]
     903      ]
     904    },
     905    {
     906      "actions": [
     907        [
     908          125,
    894909          [],
    895910          [
    896             117,
    897             9
    898           ]
    899         ],
    900         [
    901           116,
    902           [
    903             76
    904           ],
    905           [
    906             118,
    907             9
    908           ]
    909         ],
    910         [
    911           116,
    912           [
    913             120
    914           ],
    915           [
    916             121,
    917             9
    918           ]
    919         ],
    920         [
    921           116,
    922           [
    923             123
    924           ],
    925           [
    926             124,
    927             9
    928           ]
    929         ],
    930         [
    931           116,
    932           [
    933             128
    934           ],
    935           [
    936             129,
    937             9
    938           ]
    939         ]
    940       ]
    941     },
    942     {
    943       "actions": [
    944         [
    945           130,
    946           [
    947             60,
     911            126,
     912            18
     913          ]
     914        ],
     915        [
     916          125,
     917          [
     918            85
     919          ],
     920          [
     921            127,
     922            18
     923          ]
     924        ],
     925        [
     926          125,
     927          [
     928            129
     929          ],
     930          [
     931            130,
     932            18
     933          ]
     934        ],
     935        [
     936          125,
     937          [
     938            132
     939          ],
     940          [
     941            133,
     942            18
     943          ]
     944        ],
     945        [
     946          125,
     947          [
     948            137
     949          ],
     950          [
     951            138,
     952            18
     953          ]
     954        ]
     955      ]
     956    },
     957    {
     958      "actions": [
     959        [
     960          139,
     961          [
     962            69,
    948963            1,
    949964            2
    950965          ],
    951966          [
    952             131,
    953             9
    954           ]
    955         ],
    956         [
    957           130,
    958           [
    959             64,
     967            140,
     968            18
     969          ]
     970        ],
     971        [
     972          139,
     973          [
     974            73,
    960975            3,
    961976            4,
     
    963978          ],
    964979          [
    965             132,
    966             9
    967           ]
    968         ]
    969       ]
    970     },
    971     {
    972       "actions": [
    973         [
    974           133,
     980            141,
     981            18
     982          ]
     983        ]
     984      ]
     985    },
     986    {
     987      "actions": [
     988        [
     989          142,
    975990          [],
    976991          [
    977             134,
    978             9
    979           ]
    980         ],
    981         [
    982           133,
    983           [
    984             76
    985           ],
    986           [
    987             135,
    988             9
    989           ]
    990         ]
    991       ]
    992     },
    993     {
    994       "actions": [
    995         [
    996           136,
     992            143,
     993            18
     994          ]
     995        ],
     996        [
     997          142,
     998          [
     999            85
     1000          ],
     1001          [
     1002            144,
     1003            18
     1004          ]
     1005        ]
     1006      ]
     1007    },
     1008    {
     1009      "actions": [
     1010        [
     1011          145,
    9971012          [
    9981013            1,
     
    10021017          ],
    10031018          [
    1004             137,
    1005             6,
    1006             138,
    1007             9
    1008           ]
    1009         ]
    1010       ]
    1011     },
    1012     {
    1013       "actions": [
    1014         [
    1015           139,
     1019            146,
     1020            15,
     1021            147,
     1022            18
     1023          ]
     1024        ]
     1025      ]
     1026    },
     1027    {
     1028      "actions": [
     1029        [
     1030          148,
    10161031          [],
    10171032          [
    1018             140,
    1019             9
    1020           ]
    1021         ]
    1022       ]
    1023     },
    1024     {
    1025       "actions": [
    1026         [
    1027           141,
     1033            149,
     1034            18
     1035          ]
     1036        ]
     1037      ]
     1038    },
     1039    {
     1040      "actions": [
     1041        [
     1042          150,
    10281043          [],
    10291044          [
    1030             142,
    1031             9
    1032           ]
    1033         ]
    1034       ]
    1035     },
    1036     {
    1037       "actions": [
    1038         [
    1039           143,
    1040           [],
    1041           [
    1042             144,
    1043             9
    1044           ]
    1045         ],
    1046         [
    1047           143,
    1048           [
    1049             0
    1050           ],
    1051           [
    1052             145,
    1053             9
    1054           ]
    1055         ]
    1056       ]
    1057     },
    1058     {
    1059       "actions": [
    1060         [
    1061           146,
    1062           [],
    1063           [
    1064             147,
    1065             9
    1066           ]
    1067         ],
    1068         [
    1069           146,
    1070           [
    1071             76
    1072           ],
    1073           [
    1074             148,
    1075             9
    1076           ]
    1077         ]
    1078       ]
    1079     },
    1080     {
    1081       "actions": [
    1082         [
    1083           149,
    1084           [],
    1085           [
    1086             150,
    1087             9
    1088           ]
    1089         ],
    1090         [
    1091           149,
    1092           [
    1093             1
    1094           ],
    1095           [
    10961045            151,
    1097             9
     1046            18
    10981047          ]
    10991048        ]
     
    11071056          [
    11081057            153,
     1058            18
     1059          ]
     1060        ],
     1061        [
     1062          152,
     1063          [
     1064            0
     1065          ],
     1066          [
     1067            154,
     1068            18
     1069          ]
     1070        ]
     1071      ]
     1072    },
     1073    {
     1074      "actions": [
     1075        [
     1076          155,
     1077          [],
     1078          [
     1079            156,
     1080            18
     1081          ]
     1082        ],
     1083        [
     1084          155,
     1085          [
     1086            85
     1087          ],
     1088          [
     1089            157,
     1090            18
     1091          ]
     1092        ]
     1093      ]
     1094    },
     1095    {
     1096      "actions": [
     1097        [
     1098          158,
     1099          [],
     1100          [
     1101            159,
     1102            18
     1103          ]
     1104        ],
     1105        [
     1106          158,
     1107          [
     1108            1
     1109          ],
     1110          [
     1111            160,
     1112            18
     1113          ]
     1114        ]
     1115      ]
     1116    },
     1117    {
     1118      "actions": [
     1119        [
     1120          161,
     1121          [],
     1122          [
     1123            162,
     1124            18
     1125          ]
     1126        ],
     1127        [
     1128          161,
     1129          [
    11091130            9
    1110           ]
    1111         ],
    1112         [
    1113           152,
    1114           [
    1115             154
    1116           ],
    1117           [
    1118             155,
    1119             9
    1120           ]
    1121         ]
    1122       ]
    1123     },
    1124     {
    1125       "actions": [
    1126         [
    1127           156,
    1128           [
    1129             41,
     1131          ],
     1132          [
     1133            163,
     1134            18
     1135          ]
     1136        ]
     1137      ]
     1138    },
     1139    {
     1140      "actions": [
     1141        [
     1142          164,
     1143          [
     1144            50,
    11301145            5,
    11311146            6,
    1132             37
    1133           ],
    1134           [
    1135             157,
    1136             9
    1137           ]
    1138         ],
    1139         [
    1140           156,
    1141           [
    1142             43,
     1147            46
     1148          ],
     1149          [
     1150            165,
     1151            18
     1152          ]
     1153        ],
     1154        [
     1155          164,
     1156          [
     1157            52,
    11431158            7,
    11441159            8,
    1145             39
    1146           ],
    1147           [
    1148             158,
    1149             9
    1150           ]
    1151         ],
    1152         [
    1153           156,
     1160            48
     1161          ],
     1162          [
     1163            166,
     1164            18
     1165          ]
     1166        ],
     1167        [
     1168          164,
    11541169          [
    11551170            9,
    11561171            10,
    1157             37
    1158           ],
    1159           [
    1160             159,
    1161             9
    1162           ]
    1163         ],
    1164         [
    1165           156,
     1172            46
     1173          ],
     1174          [
     1175            167,
     1176            18
     1177          ]
     1178        ],
     1179        [
     1180          164,
    11661181          [
    11671182            11,
    11681183            12,
    1169             39
    1170           ],
    1171           [
    1172             160,
    1173             9
    1174           ]
    1175         ]
    1176       ]
    1177     },
    1178     {
    1179       "actions": [
    1180         [
    1181           161,
    1182           [
    1183             41,
     1184            48
     1185          ],
     1186          [
     1187            168,
     1188            18
     1189          ]
     1190        ]
     1191      ]
     1192    },
     1193    {
     1194      "actions": [
     1195        [
     1196          169,
     1197          [
     1198            50,
    11841199            3,
    11851200            4
    11861201          ],
    11871202          [
    1188             162,
    1189             9
    1190           ]
    1191         ],
    1192         [
    1193           161,
     1203            170,
     1204            18
     1205          ]
     1206        ],
     1207        [
     1208          169,
    11941209          [
    11951210            5,
     
    11971212          ],
    11981213          [
    1199             163,
    1200             9
    1201           ]
    1202         ]
    1203       ]
    1204     },
    1205     {
    1206       "actions": [
    1207         [
    1208           164,
     1214            171,
     1215            18
     1216          ]
     1217        ]
     1218      ]
     1219    },
     1220    {
     1221      "actions": [
     1222        [
     1223          172,
    12091224          [],
    12101225          [
    1211             165,
    1212             9
    1213           ]
    1214         ],
    1215         [
    1216           164,
    1217           [
    1218             76
    1219           ],
    1220           [
    1221             166,
    1222             9
    1223           ]
    1224         ]
    1225       ]
    1226     },
    1227     {
    1228       "actions": [
    1229         [
    1230           167,
     1226            173,
     1227            18
     1228          ]
     1229        ],
     1230        [
     1231          172,
     1232          [
     1233            85
     1234          ],
     1235          [
     1236            174,
     1237            18
     1238          ]
     1239        ]
     1240      ]
     1241    },
     1242    {
     1243      "actions": [
     1244        [
     1245          175,
    12311246          [],
    12321247          [
    1233             168,
    1234             9
    1235           ]
    1236         ],
    1237         [
    1238           167,
     1248            176,
     1249            18
     1250          ]
     1251        ],
     1252        [
     1253          175,
    12391254          [
    12401255            1
    12411256          ],
    12421257          [
    1243             169,
    1244             9
    1245           ]
    1246         ]
    1247       ]
    1248     },
    1249     {
    1250       "actions": [
    1251         [
    1252           170,
     1258            177,
     1259            18
     1260          ]
     1261        ]
     1262      ]
     1263    },
     1264    {
     1265      "actions": [
     1266        [
     1267          178,
    12531268          [],
    12541269          [
    1255             171,
    1256             9
    1257           ]
    1258         ],
    1259         [
    1260           170,
    1261           [
    1262             76
    1263           ],
    1264           [
    1265             172,
    1266             9
    1267           ]
    1268         ]
    1269       ]
    1270     },
    1271     {
    1272       "actions": [
    1273         [
    1274           173,
     1270            179,
     1271            18
     1272          ]
     1273        ],
     1274        [
     1275          178,
     1276          [
     1277            85
     1278          ],
     1279          [
     1280            180,
     1281            18
     1282          ]
     1283        ]
     1284      ]
     1285    },
     1286    {
     1287      "actions": [
     1288        [
     1289          181,
    12751290          [
    12761291            1,
     
    12781293          ],
    12791294          [
    1280             174,
    1281             9
    1282           ]
    1283         ]
    1284       ]
    1285     },
    1286     {
    1287       "actions": [
    1288         [
    1289           175,
     1295            182,
     1296            18
     1297          ]
     1298        ]
     1299      ]
     1300    },
     1301    {
     1302      "actions": [
     1303        [
     1304          183,
    12901305          [],
    12911306          [
    1292             176,
    1293             9
    1294           ]
    1295         ],
    1296         [
    1297           175,
     1307            184,
     1308            18
     1309          ]
     1310        ],
     1311        [
     1312          183,
    12981313          [
    12991314            1
    13001315          ],
    13011316          [
    1302             177,
    1303             9
    1304           ]
    1305         ]
    1306       ]
    1307     },
    1308     {
    1309       "actions": [
    1310         [
    1311           178,
    1312           [
    1313             76
    1314           ],
    1315           [
    1316             179,
    1317             9
    1318           ]
    1319         ]
    1320       ]
    1321     },
    1322     {
    1323       "actions": [
    1324         [
    1325           180,
     1317            185,
     1318            18
     1319          ]
     1320        ]
     1321      ]
     1322    },
     1323    {
     1324      "actions": [
     1325        [
     1326          186,
     1327          [
     1328            85
     1329          ],
     1330          [
     1331            187,
     1332            18
     1333          ]
     1334        ]
     1335      ]
     1336    },
     1337    {
     1338      "actions": [
     1339        [
     1340          188,
    13261341          [],
    13271342          [
    1328             181,
    1329             9
    1330           ]
    1331         ],
    1332         [
    1333           180,
     1343            189,
     1344            18
     1345          ]
     1346        ],
     1347        [
     1348          188,
    13341349          [
    13351350            1
    13361351          ],
    13371352          [
    1338             182,
    1339             9
    1340           ]
    1341         ]
    1342       ]
    1343     },
    1344     {
    1345       "actions": [
    1346         [
    1347           183,
     1353            190,
     1354            18
     1355          ]
     1356        ]
     1357      ]
     1358    },
     1359    {
     1360      "actions": [
     1361        [
     1362          191,
    13481363          [
    13491364            1,
     
    13511366          ],
    13521367          [
    1353             184,
    1354             9
    1355           ]
    1356         ]
    1357       ]
    1358     },
    1359     {
    1360       "actions": [
    1361         [
    1362           185,
    1363           [
    1364             50,
     1368            192,
     1369            18
     1370          ]
     1371        ]
     1372      ]
     1373    },
     1374    {
     1375      "actions": [
     1376        [
     1377          193,
     1378          [
     1379            59,
    13651380            5,
    13661381            6
    13671382          ],
    13681383          [
    1369             186,
    1370             9
    1371           ]
    1372         ],
    1373         [
    1374           185,
    1375           [
    1376             187,
     1384            194,
     1385            18
     1386          ]
     1387        ],
     1388        [
     1389          193,
     1390          [
     1391            195,
    13771392            7,
    13781393            8,
     
    13831398          ],
    13841399          [
    1385             188,
    1386             9
    1387           ]
    1388         ]
    1389       ]
    1390     },
    1391     {
    1392       "actions": [
    1393         [
    1394           189,
     1400            196,
     1401            18
     1402          ]
     1403        ]
     1404      ]
     1405    },
     1406    {
     1407      "actions": [
     1408        [
     1409          197,
    13951410          [
    13961411            1,
     
    14001415          ],
    14011416          [
    1402             190,
    1403             9
    1404           ]
    1405         ]
    1406       ]
    1407     },
    1408     {
    1409       "actions": [
    1410         [
    1411           191,
     1417            198,
     1418            18
     1419          ]
     1420        ]
     1421      ]
     1422    },
     1423    {
     1424      "actions": [
     1425        [
     1426          199,
    14121427          [
    14131428            1,
     
    14171432          ],
    14181433          [
    1419             192,
    1420             9
    1421           ]
    1422         ]
    1423       ]
    1424     },
    1425     {
    1426       "actions": [
    1427         [
    1428           193,
     1434            200,
     1435            18
     1436          ]
     1437        ]
     1438      ]
     1439    },
     1440    {
     1441      "actions": [
     1442        [
     1443          201,
    14291444          [],
    14301445          [
    1431             194,
    1432             9
    1433           ]
    1434         ]
    1435       ]
    1436     },
    1437     {
    1438       "actions": [
    1439         [
    1440           195,
     1446            202,
     1447            18
     1448          ]
     1449        ]
     1450      ]
     1451    },
     1452    {
     1453      "actions": [
     1454        [
     1455          203,
    14411456          [],
    14421457          [
    1443             196,
    1444             9
    1445           ]
    1446         ]
    1447       ]
    1448     },
    1449     {
    1450       "actions": [
    1451         [
    1452           197,
     1458            204,
     1459            18
     1460          ]
     1461        ]
     1462      ]
     1463    },
     1464    {
     1465      "actions": [
     1466        [
     1467          205,
    14531468          [
    14541469            1
    14551470          ],
    14561471          [
    1457             198,
    1458             9
    1459           ]
    1460         ]
    1461       ]
    1462     },
    1463     {
    1464       "actions": [
    1465         [
    1466           199,
     1472            206,
     1473            18
     1474          ]
     1475        ]
     1476      ]
     1477    },
     1478    {
     1479      "actions": [
     1480        [
     1481          207,
    14671482          [],
    14681483          [
    1469             200,
    1470             9
    1471           ]
    1472         ]
    1473       ]
    1474     },
    1475     {
    1476       "actions": [
    1477         [
    1478           201,
     1484            208,
     1485            18
     1486          ]
     1487        ]
     1488      ]
     1489    },
     1490    {
     1491      "actions": [
     1492        [
     1493          209,
    14791494          [
    14801495            1,
     
    14821497          ],
    14831498          [
    1484             202,
    1485             9
    1486           ]
    1487         ]
    1488       ]
    1489     },
    1490     {
    1491       "actions": [
    1492         [
    1493           203,
     1499            210,
     1500            18
     1501          ]
     1502        ]
     1503      ]
     1504    },
     1505    {
     1506      "actions": [
     1507        [
     1508          211,
    14941509          [
    14951510            null
    14961511          ],
    14971512          [
    1498             204,
    1499             9
    1500           ]
    1501         ],
    1502         [
    1503           203,
     1513            212,
     1514            18
     1515          ]
     1516        ],
     1517        [
     1518          211,
    15041519          [
    15051520            1
    15061521          ],
    15071522          [
    1508             205,
    1509             9
    1510           ]
    1511         ]
    1512       ]
    1513     },
    1514     {
    1515       "actions": [
    1516         [
    1517           206,
    1518           [
    1519             207
    1520           ],
    1521           [
    1522             208,
    1523             9
    1524           ]
    1525         ],
    1526         [
    1527           206,
    1528           [
    1529             76
    1530           ],
    1531           [
    1532             209,
    1533             9
    1534           ]
    1535         ]
    1536       ]
    1537     },
    1538     {
    1539       "actions": [
    1540         [
    1541           210,
    1542           [
    1543             60
    1544           ],
    1545           [
    1546             211,
    1547             9
    1548           ]
    1549         ],
    1550         [
    1551           210,
    1552           [
    1553             64,
     1523            213,
     1524            18
     1525          ]
     1526        ]
     1527      ]
     1528    },
     1529    {
     1530      "actions": [
     1531        [
     1532          214,
     1533          [
     1534            215
     1535          ],
     1536          [
     1537            216,
     1538            18
     1539          ]
     1540        ],
     1541        [
     1542          214,
     1543          [
     1544            85
     1545          ],
     1546          [
     1547            217,
     1548            18
     1549          ]
     1550        ]
     1551      ]
     1552    },
     1553    {
     1554      "actions": [
     1555        [
     1556          218,
     1557          [
     1558            69
     1559          ],
     1560          [
     1561            219,
     1562            18
     1563          ]
     1564        ],
     1565        [
     1566          218,
     1567          [
     1568            73,
    15541569            1
    15551570          ],
    15561571          [
    1557             212,
    1558             9
    1559           ]
    1560         ],
    1561         [
    1562           210,
     1572            220,
     1573            18
     1574          ]
     1575        ],
     1576        [
     1577          218,
    15631578          [
    15641579            2,
     
    15661581          ],
    15671582          [
    1568             213,
    1569             9
    1570           ]
    1571         ],
    1572         [
    1573           210,
     1583            221,
     1584            18
     1585          ]
     1586        ],
     1587        [
     1588          218,
    15741589          [
    15751590            3,
     
    15771592          ],
    15781593          [
    1579             214,
    1580             9
    1581           ]
    1582         ],
    1583         [
    1584           210,
     1594            222,
     1595            18
     1596          ]
     1597        ],
     1598        [
     1599          218,
    15851600          [
    15861601            5,
     
    15901605          ],
    15911606          [
    1592             215,
    1593             9
    1594           ]
    1595         ],
    1596         [
    1597           210,
     1607            223,
     1608            18
     1609          ]
     1610        ],
     1611        [
     1612          218,
    15981613          [
    15991614            9,
     
    16041619          ],
    16051620          [
    1606             216,
    1607             9
    1608           ]
    1609         ]
    1610       ]
    1611     },
    1612     {
    1613       "actions": [
    1614         [
    1615           217,
    1616           [
    1617             207
    1618           ],
    1619           [
    1620             218,
    1621             9
    1622           ]
    1623         ],
    1624         [
    1625           217,
    1626           [
    1627             76
    1628           ],
    1629           [
    1630             219,
    1631             9
    1632           ]
    1633         ]
    1634       ]
    1635     },
    1636     {
    1637       "actions": [
    1638         [
    1639           220,
     1621            224,
     1622            18
     1623          ]
     1624        ]
     1625      ]
     1626    },
     1627    {
     1628      "actions": [
     1629        [
     1630          225,
     1631          [
     1632            215
     1633          ],
     1634          [
     1635            226,
     1636            18
     1637          ]
     1638        ],
     1639        [
     1640          225,
     1641          [
     1642            85
     1643          ],
     1644          [
     1645            227,
     1646            18
     1647          ]
     1648        ]
     1649      ]
     1650    },
     1651    {
     1652      "actions": [
     1653        [
     1654          228,
    16401655          [
    16411656            [
     
    16451660          ],
    16461661          [
    1647             221,
    1648             9
    1649           ]
    1650         ]
    1651       ]
    1652     },
    1653     {
    1654       "actions": [
    1655         [
    1656           222,
    1657           [
    1658             207
    1659           ],
    1660           [
    1661             223,
    1662             9
    1663           ]
    1664         ],
    1665         [
    1666           222,
    1667           [
    1668             76
    1669           ],
    1670           [
    1671             224,
    1672             9
    1673           ]
    1674         ]
    1675       ]
    1676     },
    1677     {
    1678       "actions": [
    1679         [
    1680           225,
     1662            229,
     1663            18
     1664          ]
     1665        ]
     1666      ]
     1667    },
     1668    {
     1669      "actions": [
     1670        [
     1671          230,
     1672          [
     1673            215
     1674          ],
     1675          [
     1676            231,
     1677            18
     1678          ]
     1679        ],
     1680        [
     1681          230,
     1682          [
     1683            85
     1684          ],
     1685          [
     1686            232,
     1687            18
     1688          ]
     1689        ]
     1690      ]
     1691    },
     1692    {
     1693      "actions": [
     1694        [
     1695          233,
    16811696          [
    16821697            null
    16831698          ],
    16841699          [
    1685             226,
    1686             9
    1687           ]
    1688         ],
    1689         [
    1690           225,
     1700            234,
     1701            18
     1702          ]
     1703        ],
     1704        [
     1705          233,
    16911706          [
    16921707            1
    16931708          ],
    16941709          [
    1695             227,
    1696             9
    1697           ]
    1698         ]
    1699       ]
    1700     },
    1701     {
    1702       "actions": [
    1703         [
    1704           228,
     1710            235,
     1711            18
     1712          ]
     1713        ]
     1714      ]
     1715    },
     1716    {
     1717      "actions": [
     1718        [
     1719          236,
    17051720          [
    17061721            null
    17071722          ],
    17081723          [
    1709             229,
    1710             9
    1711           ]
    1712         ],
    1713         [
    1714           228,
     1724            237,
     1725            18
     1726          ]
     1727        ],
     1728        [
     1729          236,
    17151730          [
    17161731            1
    17171732          ],
    17181733          [
    1719             230,
    1720             9
    1721           ]
    1722         ]
    1723       ]
    1724     },
    1725     {
    1726       "actions": [
    1727         [
    1728           231,
     1734            238,
     1735            18
     1736          ]
     1737        ]
     1738      ]
     1739    },
     1740    {
     1741      "actions": [
     1742        [
     1743          239,
    17291744          [
    17301745            1,
    17311746            2,
    17321747            3,
    1733             232
    1734           ],
    1735           [
    1736             233,
    1737             9
    1738           ]
    1739         ],
    1740         [
    1741           231,
     1748            240
     1749          ],
     1750          [
     1751            241,
     1752            18
     1753          ]
     1754        ],
     1755        [
     1756          239,
    17421757          [
    17431758            4,
    17441759            5,
    17451760            6,
    1746             76,
     1761            85,
    17471762            7
    17481763          ],
    17491764          [
    1750             234,
    1751             9
    1752           ]
    1753         ],
    1754         [
    1755           231,
     1765            242,
     1766            18
     1767          ]
     1768        ],
     1769        [
     1770          239,
    17561771          [
    17571772            8,
     
    17621777          ],
    17631778          [
    1764             235,
    1765             9
    1766           ]
    1767         ],
    1768         [
    1769           231,
     1779            243,
     1780            18
     1781          ]
     1782        ],
     1783        [
     1784          239,
    17701785          [
    17711786            12,
     
    17761791          ],
    17771792          [
    1778             236,
    1779             9
    1780           ]
    1781         ],
    1782         [
    1783           231,
     1793            244,
     1794            18
     1795          ]
     1796        ],
     1797        [
     1798          239,
    17841799          [
    17851800            17,
     
    17921807          ],
    17931808          [
    1794             237,
    1795             9
    1796           ]
    1797         ],
    1798         [
    1799           231,
     1809            245,
     1810            18
     1811          ]
     1812        ],
     1813        [
     1814          239,
    18001815          [
    18011816            24,
     
    18091824          ],
    18101825          [
    1811             238,
    1812             9
    1813           ]
    1814         ]
    1815       ]
    1816     },
    1817     {
    1818       "actions": [
    1819         [
    1820           239,
    1821           [
    1822             60
    1823           ],
    1824           [
    1825             240,
    1826             9
    1827           ]
    1828         ],
    1829         [
    1830           239,
    1831           [
    1832             64,
     1826            246,
     1827            18
     1828          ]
     1829        ]
     1830      ]
     1831    },
     1832    {
     1833      "actions": [
     1834        [
     1835          247,
     1836          [
     1837            69
     1838          ],
     1839          [
     1840            248,
     1841            18
     1842          ]
     1843        ],
     1844        [
     1845          247,
     1846          [
     1847            73,
    18331848            1
    18341849          ],
    18351850          [
    1836             241,
    1837             9
    1838           ]
    1839         ],
    1840         [
    1841           239,
     1851            249,
     1852            18
     1853          ]
     1854        ],
     1855        [
     1856          247,
    18421857          [
    18431858            2,
     
    18451860          ],
    18461861          [
    1847             242,
    1848             9
    1849           ]
    1850         ],
    1851         [
    1852           239,
     1862            250,
     1863            18
     1864          ]
     1865        ],
     1866        [
     1867          247,
    18531868          [
    18541869            3,
     
    18561871          ],
    18571872          [
    1858             243,
    1859             9
    1860           ]
    1861         ],
    1862         [
    1863           239,
     1873            251,
     1874            18
     1875          ]
     1876        ],
     1877        [
     1878          247,
    18641879          [
    18651880            5,
     
    18691884          ],
    18701885          [
    1871             244,
    1872             9
    1873           ]
    1874         ],
    1875         [
    1876           239,
     1886            252,
     1887            18
     1888          ]
     1889        ],
     1890        [
     1891          247,
    18771892          [
    18781893            9,
     
    18831898          ],
    18841899          [
    1885             245,
    1886             9
    1887           ]
    1888         ]
    1889       ]
    1890     },
    1891     {
    1892       "actions": [
    1893         [
    1894           246,
     1900            253,
     1901            18
     1902          ]
     1903        ]
     1904      ]
     1905    },
     1906    {
     1907      "actions": [
     1908        [
     1909          254,
    18951910          [
    18961911            1,
     
    19021917          ],
    19031918          [
    1904             247,
    1905             9
    1906           ]
    1907         ],
    1908         [
    1909           246,
     1919            255,
     1920            18
     1921          ]
     1922        ],
     1923        [
     1924          254,
    19101925          [
    19111926            [
     
    19191934          ],
    19201935          [
    1921             248,
    1922             6,
    1923             249,
    1924             9
    1925           ]
    1926         ],
    1927         [
    1928           246,
     1936            256,
     1937            15,
     1938            257,
     1939            18
     1940          ]
     1941        ],
     1942        [
     1943          254,
    19291944          [
    19301945            [
     
    19381953          ],
    19391954          [
    1940             250,
    1941             6,
    1942             251,
    1943             9
    1944           ]
    1945         ]
    1946       ]
    1947     },
    1948     {
    1949       "actions": [
    1950         [
    1951           252,
     1955            258,
     1956            15,
     1957            259,
     1958            18
     1959          ]
     1960        ]
     1961      ]
     1962    },
     1963    {
     1964      "actions": [
     1965        [
     1966          260,
    19521967          [],
    19531968          [
    1954             253,
    1955             9
    1956           ]
    1957         ],
    1958         [
    1959           252,
     1969            261,
     1970            18
     1971          ]
     1972        ],
     1973        [
     1974          260,
    19601975          [
    19611976            1
    19621977          ],
    19631978          [
    1964             254,
    1965             9
    1966           ]
    1967         ]
    1968       ]
    1969     },
    1970     {
    1971       "actions": [
    1972         [
    1973           255,
     1979            262,
     1980            18
     1981          ]
     1982        ]
     1983      ]
     1984    },
     1985    {
     1986      "actions": [
     1987        [
     1988          263,
    19741989          [],
    19751990          [
    1976             256,
    1977             9
    1978           ]
    1979         ],
    1980         [
    1981           255,
    1982           [
    1983             76
    1984           ],
    1985           [
    1986             257,
    1987             9
    1988           ]
    1989         ]
    1990       ]
    1991     },
    1992     {
    1993       "actions": [
    1994         [
    1995           258,
     1991            264,
     1992            18
     1993          ]
     1994        ],
     1995        [
     1996          263,
     1997          [
     1998            85
     1999          ],
     2000          [
     2001            265,
     2002            18
     2003          ]
     2004        ]
     2005      ]
     2006    },
     2007    {
     2008      "actions": [
     2009        [
     2010          266,
    19962011          [],
    19972012          [
    1998             259,
    1999             9
    2000           ]
    2001         ],
    2002         [
    2003           258,
     2013            267,
     2014            18
     2015          ]
     2016        ],
     2017        [
     2018          266,
    20042019          [
    20052020            1
    20062021          ],
    20072022          [
    2008             260,
    2009             9
    2010           ]
    2011         ]
    2012       ]
    2013     },
    2014     {
    2015       "actions": [
    2016         [
    2017           261,
     2023            268,
     2024            18
     2025          ]
     2026        ]
     2027      ]
     2028    },
     2029    {
     2030      "actions": [
     2031        [
     2032          269,
    20182033          [],
    20192034          [
    2020             262,
    2021             9
    2022           ]
    2023         ],
    2024         [
    2025           261,
     2035            270,
     2036            18
     2037          ]
     2038        ],
     2039        [
     2040          269,
    20262041          [
    20272042            1
    20282043          ],
    20292044          [
    2030             263,
    2031             9
    2032           ]
    2033         ]
    2034       ]
    2035     },
    2036     {
    2037       "actions": [
    2038         [
    2039           264,
     2045            271,
     2046            18
     2047          ]
     2048        ]
     2049      ]
     2050    },
     2051    {
     2052      "actions": [
     2053        [
     2054          272,
    20402055          [],
    20412056          [
    2042             265,
    2043             9
    2044           ]
    2045         ],
    2046         [
    2047           264,
    2048           [
    2049             41
    2050           ],
    2051           [
    2052             266,
    2053             9
    2054           ]
    2055         ]
    2056       ]
    2057     },
    2058     {
    2059       "actions": [
    2060         [
    2061           267,
     2057            273,
     2058            18
     2059          ]
     2060        ],
     2061        [
     2062          272,
     2063          [
     2064            50
     2065          ],
     2066          [
     2067            274,
     2068            18
     2069          ]
     2070        ]
     2071      ]
     2072    },
     2073    {
     2074      "actions": [
     2075        [
     2076          275,
    20622077          [
    20632078            1,
     
    20672082          ],
    20682083          [
    2069             268,
    2070             9
    2071           ]
    2072         ]
    2073       ]
    2074     },
    2075     {
    2076       "actions": [
    2077         [
    2078           269,
     2084            276,
     2085            18
     2086          ]
     2087        ]
     2088      ]
     2089    },
     2090    {
     2091      "actions": [
     2092        [
     2093          277,
    20792094          [],
    20802095          [
    2081             270,
    2082             9
    2083           ]
    2084         ],
    2085         [
    2086           269,
    2087           [
    2088             76
    2089           ],
    2090           [
    2091             271,
    2092             9
    2093           ]
    2094         ],
    2095         [
    2096           269,
    2097           [
    2098             120
    2099           ],
    2100           [
    2101             272,
    2102             9
    2103           ]
    2104         ],
    2105         [
    2106           269,
    2107           [
    2108             123
    2109           ],
    2110           [
    2111             273,
    2112             9
    2113           ]
    2114         ],
    2115         [
    2116           269,
    2117           [
    2118             128
    2119           ],
    2120           [
    2121             274,
    2122             9
    2123           ]
    2124         ]
    2125       ]
    2126     },
    2127     {
    2128       "actions": [
    2129         [
    2130           275,
    2131           [
    2132             60,
     2096            278,
     2097            18
     2098          ]
     2099        ],
     2100        [
     2101          277,
     2102          [
     2103            85
     2104          ],
     2105          [
     2106            279,
     2107            18
     2108          ]
     2109        ],
     2110        [
     2111          277,
     2112          [
     2113            129
     2114          ],
     2115          [
     2116            280,
     2117            18
     2118          ]
     2119        ],
     2120        [
     2121          277,
     2122          [
     2123            132
     2124          ],
     2125          [
     2126            281,
     2127            18
     2128          ]
     2129        ],
     2130        [
     2131          277,
     2132          [
     2133            137
     2134          ],
     2135          [
     2136            282,
     2137            18
     2138          ]
     2139        ]
     2140      ]
     2141    },
     2142    {
     2143      "actions": [
     2144        [
     2145          283,
     2146          [
     2147            69,
    21332148            1,
    21342149            2
    21352150          ],
    21362151          [
    2137             276,
    2138             9
    2139           ]
    2140         ],
    2141         [
    2142           275,
    2143           [
    2144             64,
     2152            284,
     2153            18
     2154          ]
     2155        ],
     2156        [
     2157          283,
     2158          [
     2159            73,
    21452160            3,
    21462161            4,
     
    21482163          ],
    21492164          [
    2150             277,
    2151             9
    2152           ]
    2153         ]
    2154       ]
    2155     },
    2156     {
    2157       "actions": [
    2158         [
    2159           278,
     2165            285,
     2166            18
     2167          ]
     2168        ]
     2169      ]
     2170    },
     2171    {
     2172      "actions": [
     2173        [
     2174          286,
    21602175          [],
    21612176          [
    2162             279,
    2163             9
    2164           ]
    2165         ],
    2166         [
    2167           278,
    2168           [
    2169             76
    2170           ],
    2171           [
    2172             280,
    2173             9
    2174           ]
    2175         ]
    2176       ]
    2177     },
    2178     {
    2179       "actions": [
    2180         [
    2181           281,
     2177            287,
     2178            18
     2179          ]
     2180        ],
     2181        [
     2182          286,
     2183          [
     2184            85
     2185          ],
     2186          [
     2187            288,
     2188            18
     2189          ]
     2190        ]
     2191      ]
     2192    },
     2193    {
     2194      "actions": [
     2195        [
     2196          289,
    21822197          [],
    21832198          [
    2184             282,
    2185             9
    2186           ]
    2187         ],
    2188         [
    2189           281,
    2190           [
    2191             76
    2192           ],
    2193           [
    2194             283,
    2195             9
    2196           ]
    2197         ]
    2198       ]
    2199     },
    2200     {
    2201       "actions": [
    2202         [
    2203           284,
     2199            290,
     2200            18
     2201          ]
     2202        ],
     2203        [
     2204          289,
     2205          [
     2206            85
     2207          ],
     2208          [
     2209            291,
     2210            18
     2211          ]
     2212        ]
     2213      ]
     2214    },
     2215    {
     2216      "actions": [
     2217        [
     2218          292,
    22042219          [
    22052220            1,
     
    22112226          ],
    22122227          [
    2213             285,
    2214             9
    2215           ]
    2216         ]
    2217       ]
    2218     },
    2219     {
    2220       "actions": [
    2221         [
    2222           286,
     2228            293,
     2229            18
     2230          ]
     2231        ]
     2232      ]
     2233    },
     2234    {
     2235      "actions": [
     2236        [
     2237          294,
    22232238          [
    22242239            1,
     
    22262241          ],
    22272242          [
    2228             287,
    2229             9
    2230           ]
    2231         ]
    2232       ]
    2233     },
    2234     {
    2235       "actions": [
    2236         [
    2237           288,
     2243            295,
     2244            18
     2245          ]
     2246        ]
     2247      ]
     2248    },
     2249    {
     2250      "actions": [
     2251        [
     2252          296,
    22382253          [],
    22392254          [
    2240             289,
    2241             9
    2242           ]
    2243         ]
    2244       ]
    2245     },
    2246     {
    2247       "actions": [
    2248         [
    2249           290,
     2255            297,
     2256            18
     2257          ]
     2258        ]
     2259      ]
     2260    },
     2261    {
     2262      "actions": [
     2263        [
     2264          298,
    22502265          [
    22512266            1,
     
    22552270          ],
    22562271          [
    2257             291,
    2258             6,
    2259             292,
    2260             9
    2261           ]
    2262         ]
    2263       ]
    2264     },
    2265     {
    2266       "actions": [
    2267         [
    2268           293,
     2272            299,
     2273            15,
     2274            300,
     2275            18
     2276          ]
     2277        ]
     2278      ]
     2279    },
     2280    {
     2281      "actions": [
     2282        [
     2283          301,
    22692284          [],
    22702285          [
    2271             294,
    2272             9
    2273           ]
    2274         ],
    2275         [
    2276           293,
     2286            302,
     2287            18
     2288          ]
     2289        ],
     2290        [
     2291          301,
    22772292          [
    22782293            1
    22792294          ],
    22802295          [
    2281             295,
    2282             9
    2283           ]
    2284         ]
    2285       ]
    2286     },
    2287     {
    2288       "actions": [
    2289         [
    2290           296,
     2296            303,
     2297            18
     2298          ]
     2299        ]
     2300      ]
     2301    },
     2302    {
     2303      "actions": [
     2304        [
     2305          304,
    22912306          [],
    22922307          [
    2293             297,
    2294             9
    2295           ]
    2296         ],
    2297         [
    2298           296,
     2308            305,
     2309            18
     2310          ]
     2311        ],
     2312        [
     2313          304,
    22992314          [
    23002315            [
     
    23042319          ],
    23052320          [
    2306             298,
    2307             9
    2308           ]
    2309         ]
    2310       ]
    2311     },
    2312     {
    2313       "actions": [
    2314         [
    2315           299,
     2321            306,
     2322            18
     2323          ]
     2324        ]
     2325      ]
     2326    },
     2327    {
     2328      "actions": [
     2329        [
     2330          307,
    23162331          [],
    23172332          [
    2318             300,
    2319             9
    2320           ]
    2321         ],
    2322         [
    2323           299,
     2333            308,
     2334            18
     2335          ]
     2336        ],
     2337        [
     2338          307,
    23242339          [
    23252340            1
    23262341          ],
    23272342          [
    2328             301,
    2329             9
    2330           ]
    2331         ]
    2332       ]
    2333     },
    2334     {
    2335       "actions": [
    2336         [
    2337           302,
    2338           [
    2339             50,
     2343            309,
     2344            18
     2345          ]
     2346        ]
     2347      ]
     2348    },
     2349    {
     2350      "actions": [
     2351        [
     2352          310,
     2353          [
     2354            59,
    23402355            5,
    23412356            6
    23422357          ],
    23432358          [
    2344             303,
    2345             9
    2346           ]
    2347         ],
    2348         [
    2349           302,
    2350           [
    2351             187,
     2359            311,
     2360            18
     2361          ]
     2362        ],
     2363        [
     2364          310,
     2365          [
     2366            195,
    23522367            7,
    23532368            8,
     
    23582373          ],
    23592374          [
    2360             304,
    2361             9
     2375            312,
     2376            18
    23622377          ]
    23632378        ]
     
    23662381  ],
    23672382  "data": [
     2383    "source-over",
     2384    "butt",
     2385    "miter",
     2386    "rgba(0, 0, 0, 0)",
     2387    "10px sans-serif",
     2388    "start",
     2389    "alphabetic",
     2390    "ltr",
    23682391    "#000000",
     2392    "low",
     2393    "",
    23692394    "arc",
    2370     "",
    23712395    "inspector/canvas/recording-2d.html",
    23722396    [
    2373       2,
    2374       3,
    2375       58,
     2397      10,
     2398      12,
     2399      77,
    23762400      42
    23772401    ],
    23782402    "ignoreException",
    23792403    [
    2380       5,
    2381       3,
    2382       45,
     2404      14,
     2405      12,
     2406      48,
    23832407      10
    23842408    ],
    23852409    [
    2386       2,
    2387       3,
    2388       58,
     2410      10,
     2411      12,
     2412      77,
    23892413      28
    23902414    ],
    23912415    "f",
    23922416    [
    2393       8,
    2394       3,
    2395       378,
     2417      17,
     2418      12,
     2419      399,
    23962420      24
    23972421    ],
    23982422    "performActions",
    23992423    [
    2400       10,
    2401       3,
    2402       382,
     2424      19,
     2425      12,
     2426      403,
    24032427      6
    24042428    ],
    24052429    "global code",
    24062430    [
    2407       12,
    2408       2,
     2431      21,
     2432      10,
    24092433      1,
    24102434      15
     
    24132437    "[native code]",
    24142438    [
    2415       14,
    2416       15,
     2439      23,
     2440      24,
    24172441      0,
    24182442      0
     
    24202444    "_evaluateOn",
    24212445    [
    2422       17,
    2423       2,
     2446      26,
     2447      10,
    24242448      128,
    24252449      29
     
    24272451    "_evaluateAndWrap",
    24282452    [
    2429       19,
    2430       2,
     2453      28,
     2454      10,
    24312455      122,
    24322456      108
    24332457    ],
    24342458    [
    2435       2,
    2436       3,
    2437       59,
     2459      10,
     2460      12,
     2461      78,
    24382462      42
    24392463    ],
    24402464    [
    2441       2,
    2442       3,
    2443       59,
     2465      10,
     2466      12,
     2467      78,
    24442468      28
    24452469    ],
    24462470    "arcTo",
    24472471    [
    2448       2,
    2449       3,
    2450       62,
     2472      10,
     2473      12,
     2474      81,
    24512475      44
    24522476    ],
    24532477    [
    2454       2,
    2455       3,
    2456       62,
     2478      10,
     2479      12,
     2480      81,
    24572481      28
    24582482    ],
    24592483    "beginPath",
    24602484    [
    2461       2,
    2462       3,
    2463       65,
     2485      10,
     2486      12,
     2487      84,
    24642488      26
    24652489    ],
    24662490    "bezierCurveTo",
    24672491    [
    2468       2,
    2469       3,
    2470       68,
     2492      10,
     2493      12,
     2494      87,
    24712495      30
    24722496    ],
    24732497    "canvas",
    24742498    [
    2475       2,
    2476       3,
    2477       71,
     2499      10,
     2500      12,
     2501      90,
    24782502      16
    24792503    ],
    24802504    "clearRect",
    24812505    [
    2482       2,
    2483       3,
    2484       74,
     2506      10,
     2507      12,
     2508      93,
    24852509      26
    24862510    ],
    24872511    "clearShadow",
    24882512    [
    2489       2,
    2490       3,
    2491       77,
     2513      10,
     2514      12,
     2515      96,
    24922516      28
    24932517    ],
     
    24952519    "nonzero",
    24962520    [
    2497       2,
    2498       3,
    2499       80,
     2521      10,
     2522      12,
     2523      99,
    25002524      21
    25012525    ],
    25022526    "evenodd",
    25032527    [
    2504       2,
    2505       3,
    2506       81,
     2528      10,
     2529      12,
     2530      100,
    25072531      21
    25082532    ],
    25092533    "M1 2",
    25102534    [
    2511       2,
    2512       3,
    2513       82,
     2535      10,
     2536      12,
     2537      101,
    25142538      21
    25152539    ],
    25162540    "M3 4",
    25172541    [
    2518       2,
    2519       3,
    2520       83,
     2542      10,
     2543      12,
     2544      102,
    25212545      21
    25222546    ],
    25232547    "closePath",
    25242548    [
    2525       2,
    2526       3,
    2527       86,
     2549      10,
     2550      12,
     2551      105,
    25282552      26
    25292553    ],
    25302554    "commit",
    25312555    [
    2532       2,
    2533       3,
    2534       89,
     2556      10,
     2557      12,
     2558      108,
    25352559      23
    25362560    ],
     
    25592583    ],
    25602584    [
    2561       2,
    2562       3,
    2563       92,
     2585      10,
     2586      12,
     2587      111,
    25642588      54
    25652589    ],
    25662590    [
    2567       2,
    2568       3,
    2569       92,
     2591      10,
     2592      12,
     2593      111,
    25702594      28
    25712595    ],
    25722596    [
    2573       2,
    2574       3,
    2575       93,
     2597      10,
     2598      12,
     2599      112,
    25762600      54
    25772601    ],
    25782602    [
    2579       2,
    2580       3,
    2581       93,
     2603      10,
     2604      12,
     2605      112,
    25822606      28
    25832607    ],
    25842608    "createLinearGradient",
    25852609    [
    2586       2,
    2587       3,
    2588       96,
     2610      10,
     2611      12,
     2612      115,
    25892613      59
    25902614    ],
    25912615    [
    2592       2,
    2593       3,
    2594       96,
     2616      10,
     2617      12,
     2618      115,
    25952619      28
    25962620    ],
     
    25992623    "testA",
    26002624    [
    2601       2,
    2602       3,
    2603       99,
     2625      10,
     2626      12,
     2627      118,
    26042628      52
    26052629    ],
    26062630    [
    2607       2,
    2608       3,
    2609       99,
     2631      10,
     2632      12,
     2633      118,
    26102634      28
    26112635    ],
     
    26132637    "testB",
    26142638    [
    2615       2,
    2616       3,
    2617       100,
     2639      10,
     2640      12,
     2641      119,
    26182642      52
    26192643    ],
    26202644    [
    2621       2,
    2622       3,
    2623       100,
     2645      10,
     2646      12,
     2647      119,
    26242648      28
    26252649    ],
     
    26272651    "testC",
    26282652    [
    2629       2,
    2630       3,
    2631       101,
     2653      10,
     2654      12,
     2655      120,
    26322656      52
    26332657    ],
    26342658    [
    2635       2,
    2636       3,
    2637       101,
     2659      10,
     2660      12,
     2661      120,
    26382662      28
    26392663    ],
    26402664    "createRadialGradient",
    26412665    [
    2642       2,
    2643       3,
    2644       104,
     2666      10,
     2667      12,
     2668      123,
    26452669      59
    26462670    ],
    26472671    [
    2648       2,
    2649       3,
    2650       104,
     2672      10,
     2673      12,
     2674      123,
    26512675      28
    26522676    ],
    26532677    "direction",
    26542678    [
    2655       2,
    2656       3,
    2657       107,
     2679      10,
     2680      12,
     2681      126,
    26582682      16
    26592683    ],
    26602684    "test",
    26612685    [
    2662       2,
    2663       3,
    2664       108,
     2686      10,
     2687      12,
     2688      127,
    26652689      16
    26662690    ],
     
    26682692    "element",
    26692693    [
    2670       2,
    2671       3,
    2672       111,
     2694      10,
     2695      12,
     2696      130,
    26732697      34
    26742698    ],
    26752699    [
    2676       2,
    2677       3,
    2678       112,
     2700      10,
     2701      12,
     2702      131,
    26792703      34
    26802704    ],
    26812705    "drawImage",
    26822706    [
    2683       2,
    2684       3,
    2685       115,
     2707      10,
     2708      12,
     2709      134,
    26862710      48
    26872711    ],
    26882712    [
    2689       2,
    2690       3,
    2691       115,
     2713      10,
     2714      12,
     2715      134,
    26922716      28
    26932717    ],
    26942718    [
    2695       2,
    2696       3,
    2697       116,
     2719      10,
     2720      12,
     2721      135,
    26982722      48
    26992723    ],
    27002724    [
    2701       2,
    2702       3,
    2703       116,
     2725      10,
     2726      12,
     2727      135,
    27042728      28
    27052729    ],
    27062730    [
    2707       2,
    2708       3,
    2709       117,
     2731      10,
     2732      12,
     2733      136,
    27102734      48
    27112735    ],
    27122736    [
    2713       2,
    2714       3,
    2715       117,
     2737      10,
     2738      12,
     2739      136,
    27162740      28
    27172741    ],
    27182742    [
    2719       2,
    2720       3,
    2721       118,
     2743      10,
     2744      12,
     2745      137,
    27222746      48
    27232747    ],
    27242748    [
    2725       2,
    2726       3,
    2727       118,
     2749      10,
     2750      12,
     2751      137,
    27282752      28
    27292753    ],
    27302754    [
    2731       2,
    2732       3,
    2733       119,
     2755      10,
     2756      12,
     2757      138,
    27342758      48
    27352759    ],
    27362760    [
    2737       2,
    2738       3,
    2739       119,
     2761      10,
     2762      12,
     2763      138,
    27402764      28
    27412765    ],
    27422766    [
    2743       2,
    2744       3,
    2745       120,
     2767      10,
     2768      12,
     2769      139,
    27462770      48
    27472771    ],
    27482772    [
    2749       2,
    2750       3,
    2751       120,
     2773      10,
     2774      12,
     2775      139,
    27522776      28
    27532777    ],
    27542778    [
    2755       2,
    2756       3,
    2757       121,
     2779      10,
     2780      12,
     2781      140,
    27582782      48
    27592783    ],
    27602784    [
    2761       2,
    2762       3,
    2763       121,
     2785      10,
     2786      12,
     2787      140,
    27642788      28
    27652789    ],
    27662790    [
    2767       2,
    2768       3,
    2769       122,
     2791      10,
     2792      12,
     2793      141,
    27702794      48
    27712795    ],
    27722796    [
    2773       2,
    2774       3,
    2775       122,
     2797      10,
     2798      12,
     2799      141,
    27762800      28
    27772801    ],
    27782802    [
    2779       2,
    2780       3,
    2781       123,
     2803      10,
     2804      12,
     2805      142,
    27822806      48
    27832807    ],
    27842808    [
    2785       2,
    2786       3,
    2787       123,
     2809      10,
     2810      12,
     2811      142,
    27882812      28
    27892813    ],
    27902814    "drawImageFromRect",
    27912815    [
    2792       2,
    2793       3,
    2794       126,
     2816      10,
     2817      12,
     2818      145,
    27952819      34
    27962820    ],
    27972821    [
    2798       2,
    2799       3,
    2800       127,
     2822      10,
     2823      12,
     2824      146,
    28012825      34
    28022826    ],
    28032827    "ellipse",
    28042828    [
    2805       2,
    2806       3,
    2807       130,
     2829      10,
     2830      12,
     2831      149,
    28082832      46
    28092833    ],
    28102834    [
    2811       2,
    2812       3,
    2813       130,
     2835      10,
     2836      12,
     2837      149,
    28142838      28
    28152839    ],
    28162840    [
    2817       2,
    2818       3,
    2819       131,
     2841      10,
     2842      12,
     2843      150,
    28202844      46
    28212845    ],
    28222846    [
    2823       2,
    2824       3,
    2825       131,
     2847      10,
     2848      12,
     2849      150,
    28262850      28
    28272851    ],
    28282852    "fill",
    28292853    [
    2830       2,
    2831       3,
    2832       134,
     2854      10,
     2855      12,
     2856      153,
    28332857      21
    28342858    ],
    28352859    [
    2836       2,
    2837       3,
    2838       135,
     2860      10,
     2861      12,
     2862      154,
    28392863      21
    28402864    ],
    28412865    [
    2842       2,
    2843       3,
    2844       136,
     2866      10,
     2867      12,
     2868      155,
    28452869      21
    28462870    ],
    28472871    [
    2848       2,
    2849       3,
    2850       137,
     2872      10,
     2873      12,
     2874      156,
    28512875      21
    28522876    ],
    28532877    "fillRect",
    28542878    [
    2855       2,
    2856       3,
    2857       140,
     2879      10,
     2880      12,
     2881      159,
    28582882      25
    28592883    ],
    28602884    "fillStyle",
    28612885    [
    2862       2,
    2863       3,
    2864       143,
    2865       16
    2866     ],
    2867     [
    2868       2,
    2869       3,
    2870       144,
     2886      10,
     2887      12,
     2888      162,
     2889      16
     2890    ],
     2891    [
     2892      10,
     2893      12,
     2894      163,
    28712895      16
    28722896    ],
    28732897    "linear-gradient",
    28742898    [
    2875       119,
     2899      128,
    28762900      [
    28772901        1,
     
    28832907    ],
    28842908    [
    2885       2,
    2886       3,
    2887       145,
     2909      10,
     2910      12,
     2911      164,
    28882912      16
    28892913    ],
    28902914    "radial-gradient",
    28912915    [
    2892       122,
     2916      131,
    28932917      [
    28942918        1,
     
    29022926    ],
    29032927    [
    2904       2,
    2905       3,
    2906       146,
     2928      10,
     2929      12,
     2930      165,
    29072931      16
    29082932    ],
     
    29112935    "no-repeat",
    29122936    [
    2913       125,
    2914       126,
    2915       127
    2916     ],
    2917     [
    2918       2,
    2919       3,
    2920       147,
     2937      134,
     2938      135,
     2939      136
     2940    ],
     2941    [
     2942      10,
     2943      12,
     2944      166,
    29212945      16
    29222946    ],
    29232947    "fillText",
    29242948    [
    2925       2,
    2926       3,
    2927       150,
     2949      10,
     2950      12,
     2951      169,
    29282952      25
    29292953    ],
    29302954    [
    2931       2,
    2932       3,
    2933       151,
     2955      10,
     2956      12,
     2957      170,
    29342958      25
    29352959    ],
    29362960    "font",
    29372961    [
    2938       2,
    2939       3,
    2940       154,
    2941       16
    2942     ],
    2943     [
    2944       2,
    2945       3,
    2946       155,
     2962      10,
     2963      12,
     2964      173,
     2965      16
     2966    ],
     2967    [
     2968      10,
     2969      12,
     2970      174,
    29472971      16
    29482972    ],
    29492973    "getImageData",
    29502974    [
    2951       2,
    2952       3,
    2953       158,
     2975      10,
     2976      12,
     2977      177,
    29542978      51
    29552979    ],
    29562980    [
    2957       2,
    2958       3,
    2959       158,
     2981      10,
     2982      12,
     2983      177,
    29602984      28
    29612985    ],
    29622986    "getLineDash",
    29632987    [
    2964       2,
    2965       3,
    2966       161,
     2988      10,
     2989      12,
     2990      180,
    29672991      28
    29682992    ],
    29692993    "getTransform",
    29702994    [
    2971       2,
    2972       3,
    2973       164,
     2995      10,
     2996      12,
     2997      183,
    29742998      29
    29752999    ],
    29763000    "globalAlpha",
    29773001    [
    2978       2,
    2979       3,
    2980       167,
    2981       16
    2982     ],
    2983     [
    2984       2,
    2985       3,
    2986       168,
     3002      10,
     3003      12,
     3004      186,
     3005      16
     3006    ],
     3007    [
     3008      10,
     3009      12,
     3010      187,
    29873011      16
    29883012    ],
    29893013    "globalCompositeOperation",
    29903014    [
    2991       2,
    2992       3,
    2993       171,
    2994       16
    2995     ],
    2996     [
    2997       2,
    2998       3,
    2999       172,
     3015      10,
     3016      12,
     3017      190,
     3018      16
     3019    ],
     3020    [
     3021      10,
     3022      12,
     3023      191,
    30003024      16
    30013025    ],
    30023026    "imageSmoothingEnabled",
    30033027    [
    3004       2,
    3005       3,
    3006       175,
    3007       16
    3008     ],
    3009     [
    3010       2,
    3011       3,
    3012       176,
     3028      10,
     3029      12,
     3030      194,
     3031      16
     3032    ],
     3033    [
     3034      10,
     3035      12,
     3036      195,
    30133037      16
    30143038    ],
    30153039    "imageSmoothingQuality",
    30163040    [
    3017       2,
    3018       3,
    3019       179,
    3020       16
    3021     ],
    3022     "low",
    3023     [
    3024       2,
    3025       3,
    3026       180,
     3041      10,
     3042      12,
     3043      198,
     3044      16
     3045    ],
     3046    [
     3047      10,
     3048      12,
     3049      199,
    30273050      16
    30283051    ],
    30293052    "isPointInPath",
    30303053    [
    3031       2,
    3032       3,
    3033       183,
     3054      10,
     3055      12,
     3056      202,
    30343057      30
    30353058    ],
    30363059    [
    3037       2,
    3038       3,
    3039       184,
     3060      10,
     3061      12,
     3062      203,
    30403063      30
    30413064    ],
    30423065    [
    3043       2,
    3044       3,
    3045       185,
     3066      10,
     3067      12,
     3068      204,
    30463069      30
    30473070    ],
    30483071    [
    3049       2,
    3050       3,
    3051       186,
     3072      10,
     3073      12,
     3074      205,
    30523075      30
    30533076    ],
    30543077    "isPointInStroke",
    30553078    [
    3056       2,
    3057       3,
    3058       189,
     3079      10,
     3080      12,
     3081      208,
    30593082      32
    30603083    ],
    30613084    [
    3062       2,
    3063       3,
    3064       190,
     3085      10,
     3086      12,
     3087      209,
    30653088      32
    30663089    ],
    30673090    "lineCap",
    30683091    [
    3069       2,
    3070       3,
    3071       193,
    3072       16
    3073     ],
    3074     [
    3075       2,
    3076       3,
    3077       194,
     3092      10,
     3093      12,
     3094      212,
     3095      16
     3096    ],
     3097    [
     3098      10,
     3099      12,
     3100      213,
    30783101      16
    30793102    ],
    30803103    "lineDashOffset",
    30813104    [
    3082       2,
    3083       3,
    3084       197,
    3085       16
    3086     ],
    3087     [
    3088       2,
    3089       3,
    3090       198,
     3105      10,
     3106      12,
     3107      216,
     3108      16
     3109    ],
     3110    [
     3111      10,
     3112      12,
     3113      217,
    30913114      16
    30923115    ],
    30933116    "lineJoin",
    30943117    [
    3095       2,
    3096       3,
    3097       201,
    3098       16
    3099     ],
    3100     [
    3101       2,
    3102       3,
    3103       202,
     3118      10,
     3119      12,
     3120      220,
     3121      16
     3122    ],
     3123    [
     3124      10,
     3125      12,
     3126      221,
    31043127      16
    31053128    ],
    31063129    "lineTo",
    31073130    [
    3108       2,
    3109       3,
    3110       205,
     3131      10,
     3132      12,
     3133      224,
    31113134      23
    31123135    ],
    31133136    "lineWidth",
    31143137    [
    3115       2,
    3116       3,
    3117       208,
    3118       16
    3119     ],
    3120     [
    3121       2,
    3122       3,
    3123       209,
     3138      10,
     3139      12,
     3140      227,
     3141      16
     3142    ],
     3143    [
     3144      10,
     3145      12,
     3146      228,
    31243147      16
    31253148    ],
    31263149    "measureText",
    31273150    [
    3128       2,
    3129       3,
    3130       212,
     3151      10,
     3152      12,
     3153      231,
    31313154      28
    31323155    ],
    31333156    "miterLimit",
    31343157    [
    3135       2,
    3136       3,
    3137       215,
    3138       16
    3139     ],
    3140     [
    3141       2,
    3142       3,
    3143       216,
     3158      10,
     3159      12,
     3160      234,
     3161      16
     3162    ],
     3163    [
     3164      10,
     3165      12,
     3166      235,
    31443167      16
    31453168    ],
    31463169    "moveTo",
    31473170    [
    3148       2,
    3149       3,
    3150       219,
     3171      10,
     3172      12,
     3173      238,
    31513174      23
    31523175    ],
    31533176    "putImageData",
    31543177    [
    3155       2,
    3156       3,
    3157       222,
     3178      10,
     3179      12,
     3180      241,
    31583181      29
    31593182    ],
     
    31893212    ],
    31903213    [
    3191       2,
    3192       3,
    3193       223,
     3214      10,
     3215      12,
     3216      242,
    31943217      29
    31953218    ],
    31963219    "quadraticCurveTo",
    31973220    [
    3198       2,
    3199       3,
    3200       226,
     3221      10,
     3222      12,
     3223      245,
    32013224      33
    32023225    ],
    32033226    "rect",
    32043227    [
    3205       2,
    3206       3,
    3207       229,
     3228      10,
     3229      12,
     3230      248,
    32083231      21
    32093232    ],
    32103233    "resetTransform",
    32113234    [
    3212       2,
    3213       3,
    3214       232,
     3235      10,
     3236      12,
     3237      251,
    32153238      31
    32163239    ],
    32173240    "restore",
    32183241    [
    3219       2,
    3220       3,
    3221       235,
     3242      10,
     3243      12,
     3244      254,
    32223245      24
    32233246    ],
    32243247    "rotate",
    32253248    [
    3226       2,
    3227       3,
    3228       238,
     3249      10,
     3250      12,
     3251      259,
    32293252      23
    32303253    ],
    32313254    "save",
    32323255    [
    3233       2,
    3234       3,
    3235       241,
     3256      10,
     3257      12,
     3258      262,
    32363259      21
    32373260    ],
    32383261    "scale",
    32393262    [
    3240       2,
    3241       3,
    3242       244,
     3263      10,
     3264      12,
     3265      265,
    32433266      22
    32443267    ],
    32453268    "setAlpha",
    32463269    [
    3247       2,
    3248       3,
    3249       247,
     3270      10,
     3271      12,
     3272      268,
    32503273      25
    32513274    ],
    32523275    [
    3253       2,
    3254       3,
    3255       248,
     3276      10,
     3277      12,
     3278      269,
    32563279      25
    32573280    ],
     
    32593282    "undefined",
    32603283    [
    3261       2,
    3262       3,
    3263       251,
     3284      10,
     3285      12,
     3286      272,
    32643287      38
    32653288    ],
    32663289    [
    3267       2,
    3268       3,
    3269       252,
     3290      10,
     3291      12,
     3292      273,
    32703293      38
    32713294    ],
    32723295    "setFillColor",
    32733296    [
    3274       2,
    3275       3,
    3276       255,
     3297      10,
     3298      12,
     3299      276,
    32773300      29
    32783301    ],
    32793302    [
    3280       2,
    3281       3,
    3282       256,
     3303      10,
     3304      12,
     3305      277,
    32833306      29
    32843307    ],
    32853308    [
    3286       2,
    3287       3,
    3288       257,
     3309      10,
     3310      12,
     3311      278,
    32893312      29
    32903313    ],
    32913314    [
    3292       2,
    3293       3,
    3294       258,
     3315      10,
     3316      12,
     3317      279,
    32953318      29
    32963319    ],
    32973320    [
    3298       2,
    3299       3,
    3300       259,
     3321      10,
     3322      12,
     3323      280,
    33013324      29
    33023325    ],
    33033326    [
    3304       2,
    3305       3,
    3306       260,
     3327      10,
     3328      12,
     3329      281,
    33073330      29
    33083331    ],
    33093332    "setLineCap",
    33103333    [
    3311       2,
    3312       3,
    3313       263,
     3334      10,
     3335      12,
     3336      284,
    33143337      27
    33153338    ],
    33163339    [
    3317       2,
    3318       3,
    3319       264,
     3340      10,
     3341      12,
     3342      285,
    33203343      27
    33213344    ],
    33223345    "setLineDash",
    33233346    [
    3324       2,
    3325       3,
    3326       267,
     3347      10,
     3348      12,
     3349      288,
    33273350      28
    33283351    ],
    33293352    "setLineJoin",
    33303353    [
    3331       2,
    3332       3,
    3333       270,
     3354      10,
     3355      12,
     3356      291,
    33343357      28
    33353358    ],
    33363359    [
    3337       2,
    3338       3,
    3339       271,
     3360      10,
     3361      12,
     3362      292,
    33403363      28
    33413364    ],
    33423365    "setLineWidth",
    33433366    [
    3344       2,
    3345       3,
    3346       274,
     3367      10,
     3368      12,
     3369      295,
    33473370      29
    33483371    ],
    33493372    [
    3350       2,
    3351       3,
    3352       275,
     3373      10,
     3374      12,
     3375      296,
    33533376      29
    33543377    ],
    33553378    "setMiterLimit",
    33563379    [
    3357       2,
    3358       3,
    3359       278,
     3380      10,
     3381      12,
     3382      299,
    33603383      30
    33613384    ],
    33623385    [
    3363       2,
    3364       3,
    3365       279,
     3386      10,
     3387      12,
     3388      300,
    33663389      30
    33673390    ],
     
    33693392    "",
    33703393    [
    3371       2,
    3372       3,
    3373       282,
     3394      10,
     3395      12,
     3396      303,
    33743397      26
    33753398    ],
    33763399    [
    3377       2,
    3378       3,
    3379       283,
     3400      10,
     3401      12,
     3402      304,
    33803403      26
    33813404    ],
    33823405    [
    3383       2,
    3384       3,
    3385       284,
     3406      10,
     3407      12,
     3408      305,
    33863409      26
    33873410    ],
    33883411    [
    3389       2,
    3390       3,
    3391       285,
     3412      10,
     3413      12,
     3414      306,
    33923415      26
    33933416    ],
    33943417    [
    3395       2,
    3396       3,
    3397       286,
     3418      10,
     3419      12,
     3420      307,
    33983421      26
    33993422    ],
    34003423    [
    3401       2,
    3402       3,
    3403       287,
     3424      10,
     3425      12,
     3426      308,
    34043427      26
    34053428    ],
    34063429    "setStrokeColor",
    34073430    [
    3408       2,
    3409       3,
    3410       290,
     3431      10,
     3432      12,
     3433      311,
    34113434      31
    34123435    ],
    34133436    [
    3414       2,
    3415       3,
    3416       291,
     3437      10,
     3438      12,
     3439      312,
    34173440      31
    34183441    ],
    34193442    [
    3420       2,
    3421       3,
    3422       292,
     3443      10,
     3444      12,
     3445      313,
    34233446      31
    34243447    ],
    34253448    [
    3426       2,
    3427       3,
    3428       293,
     3449      10,
     3450      12,
     3451      314,
    34293452      31
    34303453    ],
    34313454    [
    3432       2,
    3433       3,
    3434       294,
     3455      10,
     3456      12,
     3457      315,
    34353458      31
    34363459    ],
    34373460    [
    3438       2,
    3439       3,
    3440       295,
     3461      10,
     3462      12,
     3463      316,
    34413464      31
    34423465    ],
    34433466    "setTransform",
    34443467    [
    3445       2,
    3446       3,
    3447       298,
     3468      10,
     3469      12,
     3470      319,
    34483471      29
    34493472    ],
    34503473    [
    3451       2,
    3452       3,
    3453       299,
     3474      10,
     3475      12,
     3476      320,
    34543477      51
    34553478    ],
    34563479    [
    3457       2,
    3458       3,
    3459       299,
     3480      10,
     3481      12,
     3482      320,
    34603483      28
    34613484    ],
    34623485    [
    3463       2,
    3464       3,
    3465       300,
     3486      10,
     3487      12,
     3488      321,
    34663489      51
    34673490    ],
    34683491    [
    3469       2,
    3470       3,
    3471       300,
     3492      10,
     3493      12,
     3494      321,
    34723495      28
    34733496    ],
    34743497    "shadowBlur",
    34753498    [
    3476       2,
    3477       3,
    3478       303,
    3479       16
    3480     ],
    3481     [
    3482       2,
    3483       3,
    3484       304,
     3499      10,
     3500      12,
     3501      324,
     3502      16
     3503    ],
     3504    [
     3505      10,
     3506      12,
     3507      325,
    34853508      16
    34863509    ],
    34873510    "shadowColor",
    34883511    [
    3489       2,
    3490       3,
    3491       307,
    3492       16
    3493     ],
    3494     [
    3495       2,
    3496       3,
    3497       308,
     3512      10,
     3513      12,
     3514      328,
     3515      16
     3516    ],
     3517    [
     3518      10,
     3519      12,
     3520      329,
    34983521      16
    34993522    ],
    35003523    "shadowOffsetX",
    35013524    [
    3502       2,
    3503       3,
    3504       311,
    3505       16
    3506     ],
    3507     [
    3508       2,
    3509       3,
    3510       312,
     3525      10,
     3526      12,
     3527      332,
     3528      16
     3529    ],
     3530    [
     3531      10,
     3532      12,
     3533      333,
    35113534      16
    35123535    ],
    35133536    "shadowOffsetY",
    35143537    [
    3515       2,
    3516       3,
    3517       315,
    3518       16
    3519     ],
    3520     [
    3521       2,
    3522       3,
    3523       316,
     3538      10,
     3539      12,
     3540      336,
     3541      16
     3542    ],
     3543    [
     3544      10,
     3545      12,
     3546      337,
    35243547      16
    35253548    ],
    35263549    "stroke",
    35273550    [
    3528       2,
    3529       3,
    3530       319,
     3551      10,
     3552      12,
     3553      340,
    35313554      23
    35323555    ],
    35333556    [
    3534       2,
    3535       3,
    3536       320,
     3557      10,
     3558      12,
     3559      341,
    35373560      23
    35383561    ],
    35393562    "strokeRect",
    35403563    [
    3541       2,
    3542       3,
    3543       323,
     3564      10,
     3565      12,
     3566      344,
    35443567      27
    35453568    ],
    35463569    "strokeStyle",
    35473570    [
    3548       2,
    3549       3,
    3550       326,
    3551       16
    3552     ],
    3553     [
    3554       2,
    3555       3,
    3556       327,
    3557       16
    3558     ],
    3559     [
    3560       2,
    3561       3,
    3562       328,
    3563       16
    3564     ],
    3565     [
    3566       2,
    3567       3,
    3568       329,
    3569       16
    3570     ],
    3571     [
    3572       2,
    3573       3,
    3574       330,
     3571      10,
     3572      12,
     3573      347,
     3574      16
     3575    ],
     3576    [
     3577      10,
     3578      12,
     3579      348,
     3580      16
     3581    ],
     3582    [
     3583      10,
     3584      12,
     3585      349,
     3586      16
     3587    ],
     3588    [
     3589      10,
     3590      12,
     3591      350,
     3592      16
     3593    ],
     3594    [
     3595      10,
     3596      12,
     3597      351,
    35753598      16
    35763599    ],
    35773600    "strokeText",
    35783601    [
    3579       2,
    3580       3,
    3581       333,
     3602      10,
     3603      12,
     3604      354,
    35823605      27
    35833606    ],
    35843607    [
    3585       2,
    3586       3,
    3587       334,
     3608      10,
     3609      12,
     3610      355,
    35883611      27
    35893612    ],
    35903613    "textAlign",
    35913614    [
    3592       2,
    3593       3,
    3594       337,
    3595       16
    3596     ],
    3597     [
    3598       2,
    3599       3,
    3600       338,
     3615      10,
     3616      12,
     3617      358,
     3618      16
     3619    ],
     3620    [
     3621      10,
     3622      12,
     3623      359,
    36013624      16
    36023625    ],
    36033626    "textBaseline",
    36043627    [
    3605       2,
    3606       3,
    3607       341,
    3608       16
    3609     ],
    3610     [
    3611       2,
    3612       3,
    3613       342,
     3628      10,
     3629      12,
     3630      362,
     3631      16
     3632    ],
     3633    [
     3634      10,
     3635      12,
     3636      363,
    36143637      16
    36153638    ],
    36163639    "transform",
    36173640    [
    3618       2,
    3619       3,
    3620       345,
     3641      10,
     3642      12,
     3643      366,
    36213644      26
    36223645    ],
    36233646    "translate",
    36243647    [
    3625       2,
    3626       3,
    3627       348,
     3648      10,
     3649      12,
     3650      369,
    36283651      26
    36293652    ],
    36303653    "webkitBackingStorePixelRatio",
    36313654    [
    3632       2,
    3633       3,
    3634       351,
     3655      10,
     3656      12,
     3657      372,
    36353658      16
    36363659    ],
    36373660    "webkitGetImageDataHD",
    36383661    [
    3639       2,
    3640       3,
    3641       354,
     3662      10,
     3663      12,
     3664      375,
    36423665      59
    36433666    ],
    36443667    [
    3645       2,
    3646       3,
    3647       354,
     3668      10,
     3669      12,
     3670      375,
    36483671      28
    36493672    ],
    36503673    "webkitImageSmoothingEnabled",
    36513674    [
    3652       2,
    3653       3,
    3654       357,
    3655       16
    3656     ],
    3657     [
    3658       2,
    3659       3,
    3660       358,
     3675      10,
     3676      12,
     3677      378,
     3678      16
     3679    ],
     3680    [
     3681      10,
     3682      12,
     3683      379,
    36613684      16
    36623685    ],
    36633686    "webkitLineDash",
    36643687    [
    3665       2,
    3666       3,
    3667       361,
    3668       16
    3669     ],
    3670     [
    3671       2,
    3672       3,
    3673       362,
     3688      10,
     3689      12,
     3690      382,
     3691      16
     3692    ],
     3693    [
     3694      10,
     3695      12,
     3696      383,
    36743697      16
    36753698    ],
    36763699    "webkitLineDashOffset",
    36773700    [
    3678       2,
    3679       3,
    3680       365,
    3681       16
    3682     ],
    3683     [
    3684       2,
    3685       3,
    3686       366,
     3701      10,
     3702      12,
     3703      386,
     3704      16
     3705    ],
     3706    [
     3707      10,
     3708      12,
     3709      387,
    36873710      16
    36883711    ],
    36893712    "webkitPutImageDataHD",
    36903713    [
    3691       2,
    3692       3,
    3693       369,
     3714      10,
     3715      12,
     3716      390,
    36943717      37
    36953718    ],
    36963719    [
    3697       2,
    3698       3,
    3699       370,
     3720      10,
     3721      12,
     3722      391,
    37003723      37
    37013724    ]
     
    37123735      "height": 2,
    37133736      "setTransform": [
    3714         25,
    3715         28,
    3716         57,
    3717         64,
    3718         239,
    3719         268
     3737        1,
     3738        0,
     3739        0,
     3740        1,
     3741        0,
     3742        0
    37203743      ],
    37213744      "globalAlpha": 1,
    3722       "globalCompositeOperation": "source-over",
     3745      "globalCompositeOperation": 0,
    37233746      "lineWidth": 1,
    3724       "lineCap": "butt",
    3725       "lineJoin": "miter",
    3726       "miterLimit": 1,
    3727       "shadowOffsetX": 1,
    3728       "shadowOffsetY": 1,
    3729       "shadowBlur": 1,
    3730       "shadowColor": "#ffffff",
     3747      "lineCap": 1,
     3748      "lineJoin": 2,
     3749      "miterLimit": 10,
     3750      "shadowOffsetX": 0,
     3751      "shadowOffsetY": 0,
     3752      "shadowBlur": 0,
     3753      "shadowColor": 3,
    37313754      "setLineDash": [
    3732         [
    3733           1,
    3734           2
    3735         ]
     3755        []
    37363756      ],
    3737       "lineDashOffset": 1,
    3738       "font": "10px sans-serif",
    3739       "textAlign": "start",
    3740       "textBaseline": "alphabetic",
    3741       "direction": "ltr",
    3742       "strokeStyle": 3,
    3743       "fillStyle": 4,
     3757      "lineDashOffset": 0,
     3758      "font": 4,
     3759      "textAlign": 5,
     3760      "textBaseline": 6,
     3761      "direction": 7,
     3762      "strokeStyle": 8,
     3763      "fillStyle": 8,
    37443764      "imageSmoothingEnabled": true,
    3745       "imageSmoothingQuality": "low"
     3765      "imageSmoothingQuality": 9,
     3766      "setPath": [
     3767        10
     3768      ]
    37463769    },
    37473770    "content": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAAAtJREFUCB1jYEAHAAASAAGAFMrMAAAAAElFTkSuQmCC"
     
    37513774      "actions": [
    37523775        [
    3753           5,
     3776          11,
    37543777          [
    37553778            1,
     
    37613784          ],
    37623785          [
    3763             8,
    3764             10,
    3765             11,
    37663786            13,
    37673787            15,
    3768             17,
     3788            16,
     3789            18,
    37693790            20,
    37703791            22,
    3771             24
     3792            25,
     3793            27,
     3794            29
    37723795          ]
    37733796        ]
     
    37773800  ],
    37783801  "data": [
    3779     "pattern",
    3780     "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAABNJREFUCB1j/M/AAEQMDEwgAgQAHxcCAmtAm/sAAAAASUVORK5CYII=",
    3781     "no-repeat",
    3782     [
    3783       0,
    3784       1,
    3785       2
    3786     ],
    3787     "#ffffff",
     3802    "source-over",
     3803    "butt",
     3804    "miter",
     3805    "rgba(0, 0, 0, 0)",
     3806    "10px sans-serif",
     3807    "start",
     3808    "alphabetic",
     3809    "ltr",
     3810    "#000000",
     3811    "low",
     3812    "",
    37883813    "arc",
    3789     "",
    37903814    "inspector/canvas/recording-2d.html",
    37913815    [
    3792       6,
    3793       7,
    3794       58,
     3816      10,
     3817      12,
     3818      77,
    37953819      42
    37963820    ],
    37973821    "ignoreException",
    37983822    [
    3799       9,
    3800       7,
    3801       45,
     3823      14,
     3824      12,
     3825      48,
    38023826      10
    38033827    ],
    38043828    [
    3805       6,
    3806       7,
    3807       58,
     3829      10,
     3830      12,
     3831      77,
    38083832      28
    38093833    ],
    38103834    "f",
    38113835    [
    3812       12,
    3813       7,
    3814       378,
     3836      17,
     3837      12,
     3838      399,
    38153839      24
    38163840    ],
    38173841    "performActions",
    38183842    [
    3819       14,
    3820       7,
    3821       382,
     3843      19,
     3844      12,
     3845      403,
    38223846      6
    38233847    ],
    38243848    "global code",
    38253849    [
    3826       16,
    3827       6,
     3850      21,
     3851      10,
    38283852      1,
    38293853      15
     
    38323856    "[native code]",
    38333857    [
    3834       18,
    3835       19,
     3858      23,
     3859      24,
    38363860      0,
    38373861      0
     
    38393863    "_evaluateOn",
    38403864    [
    3841       21,
    3842       6,
     3865      26,
     3866      10,
    38433867      128,
    38443868      29
     
    38463870    "_evaluateAndWrap",
    38473871    [
    3848       23,
    3849       6,
     3872      28,
     3873      10,
    38503874      122,
    38513875      108
  • trunk/LayoutTests/inspector/canvas/recording-2d.html

    r220188 r220370  
    3838    document.body.appendChild(canvas);
    3939
     40    ctx.save();
     41    ctx.save(); // This matches the `restore` call in `performActions`.
     42
    4043    runTest();
    4144}
     
    4851
    4952let timeoutID = NaN;
     53let restoreCalled = false;
    5054
    5155function cancelActions() {
     56    if (!isNaN(timeoutID)) {
     57        ctx.restore();
     58        if (!restoreCalled)
     59            ctx.restore();
     60    }
     61
    5262    clearTimeout(timeoutID);
     63    timeoutID = NaN;
     64
     65    ctx.save();
     66    ctx.save();
     67    ctx.resetTransform();
     68    ctx.beginPath();
     69    ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
     70
     71    restoreCalled = false;
    5372}
    5473
     
    234253        () => {
    235254            ctx.restore();
     255
     256            restoreCalled = true;
    236257        },
    237258        () => {
  • trunk/Source/WebCore/ChangeLog

    r220366 r220370  
     12017-08-07  Devin Rousso  <drousso@apple.com>
     2
     3        Web Inspector: Preview Canvas path when viewing a recording
     4        https://bugs.webkit.org/show_bug.cgi?id=174967
     5
     6        Reviewed by Brian Burg.
     7
     8        Tests: fast/canvas/2d.currentPoint.html
     9               fast/canvas/2d.getPath.modification.html
     10               fast/canvas/2d.getPath.newobject.html
     11               fast/canvas/2d.setPath.html
     12
     13        * html/canvas/CanvasPath.idl:
     14        * html/canvas/CanvasPath.h:
     15        * html/canvas/CanvasPath.cpp:
     16        (WebCore::CanvasPath::currentX const):
     17        (WebCore::CanvasPath::currentY const):
     18
     19        * html/canvas/CanvasRenderingContext2D.idl:
     20        * html/canvas/CanvasRenderingContext2D.h:
     21        * html/canvas/CanvasRenderingContext2D.cpp:
     22        (WebCore::CanvasRenderingContext2D::setPath):
     23        (WebCore::CanvasRenderingContext2D::getPath const):
     24
     25        * page/RuntimeEnabledFeatures.h:
     26        (WebCore::RuntimeEnabledFeatures::setInspectorAdditionsEnabled):
     27        (WebCore::RuntimeEnabledFeatures::inspectorAdditionsEnabled const):
     28        Add runtime flag for added IDL items above so that they are only usable within the inspector
     29        process. The runtime flag is not enabled from anywhere else as of now.
     30
     31        * inspector/InspectorCanvas.cpp:
     32        (WebCore::InspectorCanvas::buildInitialState):
     33        Send current path as part of the InitialState.
     34        Drive-by: deduplicate more string values.
     35
    1362017-08-07  Chris Dumez  <cdumez@apple.com>
    237
  • trunk/Source/WebCore/html/canvas/CanvasPath.cpp

    r219856 r220370  
    235235    m_path.addRect(FloatRect(x, y, width, height));
    236236}
    237 }
     237
     238float CanvasPath::currentX() const
     239{
     240    return m_path.currentPoint().x();
     241}
     242
     243float CanvasPath::currentY() const
     244{
     245    return m_path.currentPoint().y();
     246}
     247
     248}
  • trunk/Source/WebCore/html/canvas/CanvasPath.h

    r207720 r220370  
    4848    void rect(float x, float y, float width, float height);
    4949
     50    float currentX() const;
     51    float currentY() const;
     52
    5053protected:
    5154    CanvasPath() { }
  • trunk/Source/WebCore/html/canvas/CanvasPath.idl

    r207720 r220370  
    3939    [MayThrowException] void arc(unrestricted double x, unrestricted double y, unrestricted double radius, unrestricted double startAngle, unrestricted double endAngle, optional boolean anticlockwise = false);
    4040    [MayThrowException] void ellipse(unrestricted double x, unrestricted double y, unrestricted double radiusX, unrestricted double radiusY, unrestricted double rotation, unrestricted double startAngle, unrestricted double endAngle, optional boolean anticlockwise = false);
     41
     42    [EnabledAtRuntime=InspectorAdditions] readonly attribute float currentX;
     43    [EnabledAtRuntime=InspectorAdditions] readonly attribute float currentY;
    4144};
  • trunk/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp

    r219970 r220370  
    26552655}
    26562656
     2657void CanvasRenderingContext2D::setPath(DOMPath& path)
     2658{
     2659    m_path = path.path();
     2660}
     2661
     2662Ref<DOMPath> CanvasRenderingContext2D::getPath() const
     2663{
     2664    return DOMPath::create(m_path);
     2665}
     2666
    26572667} // namespace WebCore
  • trunk/Source/WebCore/html/canvas/CanvasRenderingContext2D.h

    r219970 r220370  
    227227    void setImageSmoothingQuality(ImageSmoothingQuality);
    228228
     229    void setPath(DOMPath&);
     230    Ref<DOMPath> getPath() const;
     231
    229232    bool usesDisplayListDrawing() const { return m_usesDisplayListDrawing; };
    230233    void setUsesDisplayListDrawing(bool flag) { m_usesDisplayListDrawing = flag; };
  • trunk/Source/WebCore/html/canvas/CanvasRenderingContext2D.idl

    r220008 r220370  
    190190    [ImplementedAs=imageSmoothingEnabled] attribute boolean webkitImageSmoothingEnabled;
    191191    attribute ImageSmoothingQuality imageSmoothingQuality;
     192
     193    [EnabledAtRuntime=InspectorAdditions] void setPath(DOMPath path);
     194    [EnabledAtRuntime=InspectorAdditions, NewObject] DOMPath getPath();
    192195};
    193196
  • trunk/Source/WebCore/inspector/InspectorCanvas.cpp

    r220188 r220370  
    339339        attributes->setArray(ASCIILiteral("setTransform"), buildArrayForAffineTransform(state.transform));
    340340        attributes->setDouble(ASCIILiteral("globalAlpha"), context2d->globalAlpha());
    341         attributes->setString(ASCIILiteral("globalCompositeOperation"), context2d->globalCompositeOperation());
     341        attributes->setInteger(ASCIILiteral("globalCompositeOperation"), indexForData(context2d->globalCompositeOperation()));
    342342        attributes->setDouble(ASCIILiteral("lineWidth"), context2d->lineWidth());
    343         attributes->setString(ASCIILiteral("lineCap"), context2d->lineCap());
    344         attributes->setString(ASCIILiteral("lineJoin"), context2d->lineJoin());
     343        attributes->setInteger(ASCIILiteral("lineCap"), indexForData(context2d->lineCap()));
     344        attributes->setInteger(ASCIILiteral("lineJoin"), indexForData(context2d->lineJoin()));
    345345        attributes->setDouble(ASCIILiteral("miterLimit"), context2d->miterLimit());
    346346        attributes->setDouble(ASCIILiteral("shadowOffsetX"), context2d->shadowOffsetX());
    347347        attributes->setDouble(ASCIILiteral("shadowOffsetY"), context2d->shadowOffsetY());
    348348        attributes->setDouble(ASCIILiteral("shadowBlur"), context2d->shadowBlur());
    349         attributes->setString(ASCIILiteral("shadowColor"), context2d->shadowColor());
     349        attributes->setInteger(ASCIILiteral("shadowColor"), indexForData(context2d->shadowColor()));
    350350
    351351        // The parameter to `setLineDash` is itself an array, so we need to wrap the parameters
     
    356356
    357357        attributes->setDouble(ASCIILiteral("lineDashOffset"), context2d->lineDashOffset());
    358         attributes->setString(ASCIILiteral("font"), context2d->font());
    359         attributes->setString(ASCIILiteral("textAlign"), context2d->textAlign());
    360         attributes->setString(ASCIILiteral("textBaseline"), context2d->textBaseline());
    361         attributes->setString(ASCIILiteral("direction"), context2d->direction());
     358        attributes->setInteger(ASCIILiteral("font"), indexForData(context2d->font()));
     359        attributes->setInteger(ASCIILiteral("textAlign"), indexForData(context2d->textAlign()));
     360        attributes->setInteger(ASCIILiteral("textBaseline"), indexForData(context2d->textBaseline()));
     361        attributes->setInteger(ASCIILiteral("direction"), indexForData(context2d->direction()));
    362362
    363363        int strokeStyleIndex;
     
    380380
    381381        attributes->setBoolean(ASCIILiteral("imageSmoothingEnabled"), context2d->imageSmoothingEnabled());
    382         attributes->setString(ASCIILiteral("imageSmoothingQuality"), CanvasRenderingContext2D::stringForImageSmoothingQuality(context2d->imageSmoothingQuality()));
     382        attributes->setInteger(ASCIILiteral("imageSmoothingQuality"), indexForData(CanvasRenderingContext2D::stringForImageSmoothingQuality(context2d->imageSmoothingQuality())));
     383
     384        auto setPath = Inspector::Protocol::Array<InspectorValue>::create();
     385        setPath->addItem(indexForData(buildStringFromPath(context2d->getPath()->path())));
     386        attributes->setArray(ASCIILiteral("setPath"), WTFMove(setPath));
    383387    }
    384388
  • trunk/Source/WebCore/page/RuntimeEnabledFeatures.h

    r220337 r220370  
    208208#endif
    209209
     210    void setInspectorAdditionsEnabled(bool isEnabled) { m_inspectorAdditionsEnabled = isEnabled; }
     211    bool inspectorAdditionsEnabled() const { return m_inspectorAdditionsEnabled; }
     212
    210213    WEBCORE_EXPORT static RuntimeEnabledFeatures& sharedFeatures();
    211214
     
    320323#endif
    321324
     325    bool m_inspectorAdditionsEnabled { false };
     326
    322327    friend class WTF::NeverDestroyed<RuntimeEnabledFeatures>;
    323328};
  • trunk/Source/WebInspectorUI/ChangeLog

    r220294 r220370  
     12017-08-07  Devin Rousso  <drousso@apple.com>
     2
     3        Web Inspector: Preview Canvas path when viewing a recording
     4        https://bugs.webkit.org/show_bug.cgi?id=174967
     5
     6        Reviewed by Brian Burg.
     7
     8        * Localizations/en.lproj/localizedStrings.js:
     9        * UserInterface/Base/Setting.js:
     10
     11        * UserInterface/Views/RecordingContentView.js:
     12        (WI.RecordingContentView):
     13        (WI.RecordingContentView.supportsCanvasPathDebugging):
     14        (WI.RecordingContentView.prototype.get navigationItems):
     15        (WI.RecordingContentView.prototype.shown):
     16        (WI.RecordingContentView.prototype._generateContentCanvas2D):
     17        (WI.RecordingContentView.prototype._actionModifiesPath):
     18        (WI.RecordingContentView.prototype._updateCanvasPath):
     19        (WI.RecordingContentView.prototype._showPathButtonClicked):
     20        Show each segment of the current path as an overlay when the setting is enabled.
     21        Drive-by: fix forgotten function rename.
     22
     23        * UserInterface/Views/RecordingContentView.css:
     24        (.content-view:not(.tab).recording canvas.path):
     25
     26        * UserInterface/Views/RecordingStateDetailsSidebarPanel.js:
     27        (WI.RecordingStateDetailsSidebarPanel.prototype._generateDetailsCanvas2D):
     28        Show the currentX/currentY in the current state.
     29
     30        * UserInterface/Models/RecordingAction.js:
     31        (WI.RecordingAction.isFunctionForType):
     32        (WI.RecordingAction.prototype.swizzle):
     33        Use Sets for better performance.
     34
    1352017-08-04  Devin Rousso  <drousso@apple.com>
    236
  • trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js

    r220294 r220370  
    450450localizedStrings["Hide Console"] = "Hide Console";
    451451localizedStrings["Hide Grid"] = "Hide Grid";
     452localizedStrings["Hide Path"] = "Hide Path";
    452453localizedStrings["Hide compositing borders"] = "Hide compositing borders";
    453454localizedStrings["Hide shadow DOM nodes"] = "Hide shadow DOM nodes";
     
    790791localizedStrings["Show Contexts in Resources Tab"] = "Show Contexts in Resources Tab";
    791792localizedStrings["Show Grid"] = "Show Grid";
     793localizedStrings["Show Path"] = "Show Path";
    792794localizedStrings["Show Remaining (%d)"] = "Show Remaining (%d)";
    793795localizedStrings["Show Scope Chain on pause"] = "Show Scope Chain on pause";
  • trunk/Source/WebInspectorUI/UserInterface/Base/Setting.js

    r220119 r220370  
    122122    showScopeChainOnPause: new WI.Setting("show-scope-chain-sidebar", true),
    123123    showImageGrid: new WI.Setting("show-image-grid", false),
     124    showCanvasPath: new WI.Setting("show-canvas-path", false),
    124125
    125126    // Experimental
  • trunk/Source/WebInspectorUI/UserInterface/Models/RecordingAction.js

    r220188 r220370  
    4141        this._isGetter = false;
    4242        this._isVisual = false;
    43         this._stateModifiers = [];
     43        this._stateModifiers = new Set;
    4444    }
    4545
     
    7070            return false;
    7171
    72         return functionNames.includes(name);
     72        return functionNames.has(name);
    7373    }
    7474
     
    120120
    121121        let visualNames = WI.RecordingAction._visualNames[recording.type];
    122         this._isVisual = visualNames ? visualNames.includes(this._name) : false;
    123 
    124         this._stateModifiers = [this._name];
     122        this._isVisual = visualNames ? visualNames.has(this._name) : false;
     123
     124        this._stateModifiers = new Set([this._name]);
    125125        let stateModifiers = WI.RecordingAction._stateModifiers[recording.type];
    126126        if (stateModifiers) {
    127             let modifiedByAction = stateModifiers[this._name];
    128             if (modifiedByAction)
    129                 this._stateModifiers = this._stateModifiers.concat(modifiedByAction);
     127            let modifiedByAction = stateModifiers[this._name] || [];
     128            for (let item of modifiedByAction)
     129                this._stateModifiers.add(item);
    130130        }
    131131    }
     
    297297
    298298WI.RecordingAction._functionNames = {
    299     [WI.Recording.Type.Canvas2D]: [
     299    [WI.Recording.Type.Canvas2D]: new Set([
    300300        "arc",
    301301        "arcTo",
     
    356356        "webkitGetImageDataHD",
    357357        "webkitPutImageDataHD",
    358     ],
     358    ]),
    359359};
    360360
    361361WI.RecordingAction._visualNames = {
    362     [WI.Recording.Type.Canvas2D]: [
     362    [WI.Recording.Type.Canvas2D]: new Set([
    363363        "clearRect",
    364364        "drawFocusIfNeeded",
     
    373373        "strokeText",
    374374        "webkitPutImageDataHD",
    375     ],
     375    ]),
    376376};
    377377
  • trunk/Source/WebInspectorUI/UserInterface/Views/RecordingContentView.css

    r220114 r220370  
    4242    max-height: 100%;
    4343}
     44
     45.content-view:not(.tab).recording canvas.path {
     46    position: absolute;
     47    z-index: 10;
     48}
  • trunk/Source/WebInspectorUI/UserInterface/Views/RecordingContentView.js

    r220119 r220370  
    3939
    4040        if (this.representedObject.type === WI.Recording.Type.Canvas2D) {
     41            if (WI.RecordingContentView.supportsCanvasPathDebugging()) {
     42                this._pathContext = null;
     43
     44                this._showPathButtonNavigationItem = new WI.ActivateButtonNavigationItem("show-path", WI.UIString("Show Path"), WI.UIString("Hide Path"), "Images/PaintFlashing.svg", 13, 13);
     45                this._showPathButtonNavigationItem.addEventListener(WI.ButtonNavigationItem.Event.Clicked, this._showPathButtonClicked, this);
     46                this._showPathButtonNavigationItem.activated = !!WI.settings.showCanvasPath.value;
     47            }
     48
    4149            this._showGridButtonNavigationItem = new WI.ActivateButtonNavigationItem("show-grid", WI.UIString("Show Grid"), WI.UIString("Hide Grid"), "Images/NavigationItemCheckers.svg", 13, 13);
    4250            this._showGridButtonNavigationItem.addEventListener(WI.ButtonNavigationItem.Event.Clicked, this._showGridButtonClicked, this);
     
    4654        this._previewContainer = this.element.appendChild(document.createElement("div"));
    4755        this._previewContainer.classList.add("preview-container");
    48 }
     56    }
     57
     58    // Static
     59
     60    static supportsCanvasPathDebugging()
     61    {
     62        return "currentX" in CanvasRenderingContext2D.prototype && "currentY" in CanvasRenderingContext2D.prototype;
     63    }
     64
     65    static _actionModifiesPath(recordingAction)
     66    {
     67        switch (recordingAction.name) {
     68        case "arc":
     69        case "arcTo":
     70        case "beginPath":
     71        case "bezierCurveTo":
     72        case "closePath":
     73        case "ellipse":
     74        case "lineTo":
     75        case "moveTo":
     76        case "quadraticCurveTo":
     77        case "rect":
     78            return true;
     79        }
     80
     81        return false;
     82    }
    4983
    5084    // Public
     
    5286    get navigationItems()
    5387    {
    54         if (this.representedObject.type === WI.Recording.Type.Canvas2D)
    55             return [this._showGridButtonNavigationItem];
     88        if (this.representedObject.type === WI.Recording.Type.Canvas2D) {
     89            let navigationItems = [this._showGridButtonNavigationItem];
     90            if (WI.RecordingContentView.supportsCanvasPathDebugging())
     91                navigationItems.unshift(this._showPathButtonNavigationItem);
     92            return navigationItems;
     93        }
    5694        return [];
    5795    }
     
    75113        super.shown();
    76114
    77         if (this.representedObject.type === WI.Recording.Type.Canvas2D)
     115        if (this.representedObject.type === WI.Recording.Type.Canvas2D) {
     116            this._updateCanvasPath();
    78117            this._updateImageGrid();
     118        }
    79119    }
    80120
     
    110150        let snapshot = this._snapshots[snapshotIndex];
    111151
     152        let showCanvasPath = WI.RecordingContentView.supportsCanvasPathDebugging() && WI.settings.showCanvasPath.value;
     153        let indexOfLastBeginPathAction = Infinity;
     154
    112155        let actions = this.representedObject.actions;
    113156        let applyActions = (from, to, callback) => {
     
    125168
    126169                try {
    127                     if (WI.RecordingAction.functionForType(this.representedObject.type, name))
     170                    if (WI.RecordingAction.isFunctionForType(this.representedObject.type, name))
    128171                        snapshot.context[name](...snapshot.state[name]);
    129172                    else
     
    133176                }
    134177            }
     178
     179            let shouldDrawCanvasPath = showCanvasPath && indexOfLastBeginPathAction <= to;
     180            if (shouldDrawCanvasPath) {
     181                if (!this._pathContext) {
     182                    let pathCanvas = document.createElement("canvas");
     183                    pathCanvas.classList.add("path");
     184                    this._pathContext = pathCanvas.getContext("2d");
     185                }
     186
     187                this._pathContext.canvas.width = snapshot.element.width;
     188                this._pathContext.canvas.height = snapshot.element.height;
     189                this._pathContext.clearRect(0, 0, snapshot.element.width, snapshot.element.height);
     190
     191                this._pathContext.save();
     192
     193                this._pathContext.fillStyle = "hsla(0, 0%, 100%, 0.75)";
     194                this._pathContext.fillRect(0, 0, snapshot.element.width, snapshot.element.height);
     195            }
     196
     197            let lastPathPoint = {};
     198            let subPathStartPoint = {};
    135199
    136200            for (let i = from; i <= to; ++i) {
     
    144208
    145209                this._applyAction(snapshot.context, actions[i]);
    146             }
     210
     211                if (shouldDrawCanvasPath && i >= indexOfLastBeginPathAction && WI.RecordingContentView._actionModifiesPath(actions[i])) {
     212                    lastPathPoint = {x: this._pathContext.currentX, y: this._pathContext.currentY};
     213
     214                    if (i === indexOfLastBeginPathAction)
     215                        this._pathContext.setTransform(snapshot.context.getTransform());
     216
     217                    let isMoveTo = actions[i].name === "moveTo";
     218                    this._pathContext.lineWidth = isMoveTo ? 0.5 : 1;
     219                    this._pathContext.setLineDash(isMoveTo ? [5, 5] : []);
     220                    this._pathContext.strokeStyle = i === to ? "red" : "black";
     221
     222                    this._pathContext.beginPath();
     223                    if (!isEmptyObject(lastPathPoint))
     224                        this._pathContext.moveTo(lastPathPoint.x, lastPathPoint.y);
     225
     226                    if (actions[i].name === "closePath" && !isEmptyObject(subPathStartPoint)) {
     227                        this._pathContext.lineTo(subPathStartPoint.x, subPathStartPoint.y);
     228                        subPathStartPoint = {};
     229                    } else {
     230                        this._applyAction(this._pathContext, actions[i], {nameOverride: isMoveTo ? "lineTo" : null});
     231                        if (isMoveTo)
     232                            subPathStartPoint = {x: this._pathContext.currentX, y: this._pathContext.currentY};
     233                    }
     234
     235                    this._pathContext.stroke();
     236                }
     237            }
     238
     239            if (shouldDrawCanvasPath) {
     240                this._pathContext.restore();
     241                this._previewContainer.appendChild(this._pathContext.canvas);
     242            } else if (this._pathContext)
     243                this._pathContext.canvas.remove();
    147244
    148245            callback();
     
    168265            let lastSnapshotIndex = snapshotIndex;
    169266            while (--lastSnapshotIndex >= 0) {
    170                 if (this._snapshots[--lastSnapshotIndex])
     267                if (this._snapshots[lastSnapshotIndex])
    171268                    break;
    172269            }
     
    179276                for (let key in initialState.attributes) {
    180277                    let value = initialState.attributes[key];
    181                     if (key === "strokeStyle" || key === "fillStyle")
     278
     279                    switch (key) {
     280                    case "fillStyle":
     281                    case "strokeStyle":
    182282                        value = this.representedObject.swizzle(value, WI.Recording.Swizzle.CanvasStyle);
    183 
    184                     if (value === WI.Recording.Swizzle.Invalid)
     283                        break;
     284
     285                    case "direction":
     286                    case "font":
     287                    case "globalCompositeOperation":
     288                    case "imageSmoothingEnabled":
     289                    case "imageSmoothingQuality":
     290                    case "lineCap":
     291                    case "lineJoin":
     292                    case "shadowColor":
     293                    case "textAlign":
     294                    case "textBaseline":
     295                        value = this.representedObject.swizzle(value, WI.Recording.Swizzle.String);
     296                        break;
     297
     298                    case "setPath":
     299                        value = [this.representedObject.swizzle(value[0], WI.Recording.Swizzle.Path2D)];
     300                        break;
     301                    }
     302
     303                    if (value === WI.Recording.Swizzle.Invalid || (Array.isArray(value) && value.includes(WI.Recording.Swizzle.Invalid)))
    185304                        continue;
    186305
     
    220339                    webkitLineDashOffset: snapshot.context.webkitLineDashOffset,
    221340                };
     341
     342                if (WI.RecordingContentView.supportsCanvasPathDebugging())
     343                    snapshot.state.setPath = [snapshot.context.getPath()];
    222344            });
    223345
     
    229351
    230352        this._previewContainer.removeChildren();
     353
     354        if (showCanvasPath) {
     355            indexOfLastBeginPathAction = this._index;
     356            while (indexOfLastBeginPathAction > snapshot.index && actions[indexOfLastBeginPathAction].name !== "beginPath")
     357                --indexOfLastBeginPathAction;
     358        }
    231359
    232360        applyActions(snapshot.index, this._index, () => {
     
    264392    }
    265393
     394    _updateCanvasPath()
     395    {
     396        let activated = WI.settings.showCanvasPath.value;
     397        if (this._showPathButtonNavigationItem.activated !== activated)
     398            this._generateContentCanvas2D(this._index);
     399
     400        this._showPathButtonNavigationItem.activated = activated;
     401    }
     402
    266403    _updateImageGrid()
    267404    {
     
    274411    }
    275412
     413    _showPathButtonClicked(event)
     414    {
     415        WI.settings.showCanvasPath.value = !this._showPathButtonNavigationItem.activated;
     416
     417        this._updateCanvasPath();
     418    }
     419
    276420    _showGridButtonClicked(event)
    277421    {
  • trunk/Source/WebInspectorUI/UserInterface/Views/RecordingStateDetailsSidebarPanel.js

    r220119 r220370  
    9999            return;
    100100
    101         let state = {
    102             direction: context.direction,
    103             fillStyle: context.fillStyle,
    104             font: context.font,
    105             globalAlpha: context.globalAlpha,
    106             globalCompositeOperation: context.globalCompositeOperation,
    107             imageSmoothingEnabled: context.imageSmoothingEnabled,
    108             imageSmoothingQuality: context.imageSmoothingQuality,
    109             lineCap: context.lineCap,
    110             lineDash: context.getLineDash(),
    111             lineDashOffset: context.lineDashOffset,
    112             lineJoin: context.lineJoin,
    113             lineWidth: context.lineWidth,
    114             miterLimit: context.miterLimit,
    115             shadowBlur: context.shadowBlur,
    116             shadowColor: context.shadowColor,
    117             shadowOffsetX: context.shadowOffsetX,
    118             shadowOffsetY: context.shadowOffsetY,
    119             strokeStyle: context.strokeStyle,
    120             textAlign: context.textAlign,
    121             textBaseline: context.textBaseline,
    122             transform: context.getTransform(),
    123             webkitImageSmoothingEnabled: context.webkitImageSmoothingEnabled,
    124             webkitLineDash: context.webkitLineDash,
    125             webkitLineDashOffset: context.webkitLineDashOffset,
    126         };
     101        let state = {};
     102
     103        if (WI.RecordingContentView.supportsCanvasPathDebugging()) {
     104            state.currentX = context.currentX;
     105            state.currentY = context.currentY;
     106        }
     107
     108        state.direction = context.direction;
     109        state.fillStyle = context.fillStyle;
     110        state.font = context.font;
     111        state.globalAlpha = context.globalAlpha;
     112        state.globalCompositeOperation = context.globalCompositeOperation;
     113        state.imageSmoothingEnabled = context.imageSmoothingEnabled;
     114        state.imageSmoothingQuality = context.imageSmoothingQuality;
     115        state.lineCap = context.lineCap;
     116        state.lineDash = context.getLineDash();
     117        state.lineDashOffset = context.lineDashOffset;
     118        state.lineJoin = context.lineJoin;
     119        state.lineWidth = context.lineWidth;
     120        state.miterLimit = context.miterLimit;
     121        state.shadowBlur = context.shadowBlur;
     122        state.shadowColor = context.shadowColor;
     123        state.shadowOffsetX = context.shadowOffsetX;
     124        state.shadowOffsetY = context.shadowOffsetY;
     125        state.strokeStyle = context.strokeStyle;
     126        state.textAlign = context.textAlign;
     127        state.textBaseline = context.textBaseline;
     128        state.transform = context.getTransform();
     129        state.webkitImageSmoothingEnabled = context.webkitImageSmoothingEnabled;
     130        state.webkitLineDash = context.webkitLineDash;
     131        state.webkitLineDashOffset = context.webkitLineDashOffset;
    127132
    128133        let action = this._recording.actions[this._index];
     
    148153
    149154            let classNames = [];
    150             if (!action.isGetter && action.stateModifiers.includes(name))
     155            if (!action.isGetter && action.stateModifiers.has(name))
    151156                classNames.push("modified");
    152157            if (name.startsWith("webkit"))
  • trunk/Source/WebKit/ChangeLog

    r220368 r220370  
     12017-08-07  Devin Rousso  <drousso@apple.com>
     2
     3        Web Inspector: Preview Canvas path when viewing a recording
     4        https://bugs.webkit.org/show_bug.cgi?id=174967
     5
     6        Reviewed by Brian Burg.
     7
     8        * Shared/WebPreferencesDefinitions.h:
     9        * UIProcess/API/C/WKPreferencesRefPrivate.h:
     10        * UIProcess/API/C/WKPreferences.cpp:
     11        (WKPreferencesSetInspectorAdditionsEnabled):
     12        (WKPreferencesGetInspectorAdditionsEnabled):
     13        * WebProcess/WebPage/WebPage.cpp:
     14        (WebKit::WebPage::updatePreferences):
     15        Add plumbing for new InspectorAdditions runtime flag.
     16
     17        * WebProcess/WebPage/WebInspectorUI.cpp:
     18        (WebKit::WebInspectorUI::WebInspectorUI):
     19        Enable InspectorAdditions by default in the WebInspector page.
     20
    1212017-08-07  Filip Pizlo  <fpizlo@apple.com>
    222
  • trunk/Source/WebKit/Shared/WebPreferencesDefinitions.h

    r220311 r220370  
    292292    macro(LegacyEncryptedMediaAPIEnabled, legacyEncryptedMediaAPIEnabled, Bool, bool, DEFAULT_LEGACY_ENCRYPTED_MEDIA_API_ENABLED, "Enable Legacy EME API", "Enable legacy EME API") \
    293293    macro(AllowMediaContentTypesRequiringHardwareSupportAsFallback, allowMediaContentTypesRequiringHardwareSupportAsFallback, Bool, bool, DEFAULT_ALLOW_MEDIA_CONTENT_TYPES_REQUIRING_HARDWARE_SUPPORT_AS_FALLBACK, "Allow Media Content Types Requirining Hardware As Fallback", "Allow Media Content Types Requirining Hardware As Fallback") \
     294    macro(InspectorAdditionsEnabled, inspectorAdditionsEnabled, Bool, bool, false, "Web Inspector Additions", "Enable additional page APIs used by the Web Inspector frontend page") \
    294295    \
    295296
  • trunk/Source/WebKit/UIProcess/API/C/WKPreferences.cpp

    r220121 r220370  
    18241824}
    18251825
     1826void WKPreferencesSetInspectorAdditionsEnabled(WKPreferencesRef preferencesRef, bool flag)
     1827{
     1828    toImpl(preferencesRef)->setInspectorAdditionsEnabled(flag);
     1829}
     1830
     1831bool WKPreferencesGetInspectorAdditionsEnabled(WKPreferencesRef preferencesRef)
     1832{
     1833    return toImpl(preferencesRef)->inspectorAdditionsEnabled();
     1834}
  • trunk/Source/WebKit/UIProcess/API/C/WKPreferencesRefPrivate.h

    r220121 r220370  
    510510WK_EXPORT bool WKPreferencesGetIsSecureContextAttributeEnabled(WKPreferencesRef);
    511511
     512// Defaults to false.
     513WK_EXPORT void WKPreferencesSetInspectorAdditionsEnabled(WKPreferencesRef, bool flag);
     514WK_EXPORT bool WKPreferencesGetInspectorAdditionsEnabled(WKPreferencesRef);
     515
    512516#ifdef __cplusplus
    513517}
  • trunk/Source/WebKit/WebProcess/WebPage/WebInspectorUI.cpp

    r220278 r220370  
    3535#include <WebCore/InspectorController.h>
    3636#include <WebCore/NotImplemented.h>
     37#include <WebCore/RuntimeEnabledFeatures.h>
    3738
    3839using namespace WebCore;
     
    4950    , m_frontendAPIDispatcher(page)
    5051{
     52    RuntimeEnabledFeatures::sharedFeatures().setInspectorAdditionsEnabled(true);
    5153}
    5254
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp

    r220311 r220370  
    33853385    RuntimeEnabledFeatures::sharedFeatures().setLegacyEncryptedMediaAPIEnabled(store.getBoolValueForKey(WebPreferencesKey::legacyEncryptedMediaAPIEnabledKey()));
    33863386#endif
     3387
     3388    RuntimeEnabledFeatures::sharedFeatures().setInspectorAdditionsEnabled(store.getBoolValueForKey(WebPreferencesKey::inspectorAdditionsEnabledKey()));
    33873389}
    33883390
  • trunk/Source/WebKitLegacy/mac/ChangeLog

    r220336 r220370  
     12017-08-07  Devin Rousso  <drousso@apple.com>
     2
     3        Web Inspector: Preview Canvas path when viewing a recording
     4        https://bugs.webkit.org/show_bug.cgi?id=174967
     5
     6        Reviewed by Brian Burg.
     7
     8        * WebView/WebPreferenceKeysPrivate.h:
     9        * WebView/WebPreferences.mm:
     10        (+[WebPreferences initialize]):
     11        (-[WebPreferences inspectorAdditionsEnabled]):
     12        (-[WebPreferences setInspectorAdditionsEnabled:]):
     13        * WebView/WebPreferencesPrivate.h:
     14        * WebView/WebView.mm:
     15        (-[WebView _preferencesChanged:]):
     16        Add plumbing for new InspectorAdditions runtime flag.
     17
    1182017-08-07  Brian Burg  <bburg@apple.com>
    219
  • trunk/Source/WebKitLegacy/mac/WebView/WebPreferenceKeysPrivate.h

    r220311 r220370  
    248248#define WebKitLegacyEncryptedMediaAPIEnabledKey @"WebKitLegacyEncryptedMediaAPIEnabled"
    249249#define WebKitAllowMediaContentTypesRequiringHardwareSupportAsFallbackKey @"WebKitAllowMediaContentTypesRequiringHardwareSupportAsFallback"
     250#define WebKitInspectorAdditionsEnabledPreferenceKey @"WebKitInspectorAdditionsEnabled"
  • trunk/Source/WebKitLegacy/mac/WebView/WebPreferences.mm

    r220311 r220370  
    680680        @YES, WebKitConstantPropertiesEnabledPreferenceKey,
    681681        @YES, WebKitAllowMediaContentTypesRequiringHardwareSupportAsFallbackKey,
     682        @NO, WebKitInspectorAdditionsEnabledPreferenceKey,
    682683        (NSString *)Settings::defaultMediaContentTypesRequiringHardwareSupport(), WebKitMediaContentTypesRequiringHardwareSupportPreferenceKey,
    683684        nil];
     
    32073208}
    32083209
     3210- (BOOL)inspectorAdditionsEnabled
     3211{
     3212    return [self _boolValueForKey:WebKitInspectorAdditionsEnabledPreferenceKey];
     3213}
     3214
     3215- (void)setInspectorAdditionsEnabled:(BOOL)flag
     3216{
     3217    [self _setBoolValue:flag forKey:WebKitInspectorAdditionsEnabledPreferenceKey];
     3218}
     3219
    32093220@end
    32103221
  • trunk/Source/WebKitLegacy/mac/WebView/WebPreferencesPrivate.h

    r220311 r220370  
    586586@property (nonatomic) BOOL viewportFitEnabled;
    587587@property (nonatomic) BOOL constantPropertiesEnabled;
     588@property (nonatomic) BOOL inspectorAdditionsEnabled;
    588589@property (nonatomic) BOOL allowMediaContentTypesRequiringHardwareSupportAsFallback;
    589590
  • trunk/Source/WebKitLegacy/mac/WebView/WebView.mm

    r220311 r220370  
    30393039#endif
    30403040
     3041    RuntimeEnabledFeatures::sharedFeatures().setInspectorAdditionsEnabled(preferences.inspectorAdditionsEnabled);
     3042
    30413043    settings.setAllowMediaContentTypesRequiringHardwareSupportAsFallback(preferences.allowMediaContentTypesRequiringHardwareSupportAsFallback);
    30423044
  • trunk/Tools/ChangeLog

    r220369 r220370  
     12017-08-07  Devin Rousso  <drousso@apple.com>
     2
     3        Web Inspector: Preview Canvas path when viewing a recording
     4        https://bugs.webkit.org/show_bug.cgi?id=174967
     5
     6        Reviewed by Brian Burg.
     7
     8        * DumpRenderTree/TestOptions.h:
     9        * DumpRenderTree/TestOptions.mm:
     10        (TestOptions::TestOptions):
     11        * DumpRenderTree/mac/DumpRenderTree.mm:
     12        (setWebPreferencesForTestOptions):
     13        * WebKitTestRunner/TestController.cpp:
     14        (WTR::TestController::resetPreferencesToConsistentValues):
     15        (WTR::updateTestOptionsFromTestHeader):
     16        * WebKitTestRunner/TestOptions.h:
     17        (WTR::TestOptions::hasSameInitializationOptions const):
     18        Add plumbing for new InspectorAdditions runtime flag.
     19
    1202017-08-07  obinna obike  <oobike@apple.com>
    221
  • trunk/Tools/DumpRenderTree/TestOptions.h

    r218196 r220370  
    3737    bool layerBackedWebView { false };
    3838    bool enableIsSecureContextAttribute { true };
     39    bool enableInspectorAdditions { false };
    3940
    4041    TestOptions(NSURL*, const TestCommand&);
  • trunk/Tools/DumpRenderTree/TestOptions.mm

    r220179 r220370  
    9393        else if (key == "enableIsSecureContextAttribute")
    9494            this->enableIsSecureContextAttribute = parseBooleanTestHeaderValue(value);
     95        else if (key == "enableInspectorAdditions")
     96            this->enableInspectorAdditions = parseBooleanTestHeaderValue(value);
    9597        pairStart = pairEnd + 1;
    9698    }
  • trunk/Tools/DumpRenderTree/mac/DumpRenderTree.mm

    r220322 r220370  
    983983    preferences.credentialManagementEnabled = options.enableCredentialManagement;
    984984    preferences.isSecureContextAttributeEnabled = options.enableIsSecureContextAttribute;
     985    preferences.inspectorAdditionsEnabled = options.enableInspectorAdditions;
    985986}
    986987
  • trunk/Tools/WebKitTestRunner/TestController.cpp

    r220121 r220370  
    729729    WKPreferencesSetLargeImageAsyncDecodingEnabled(preferences, false);
    730730
     731    WKPreferencesSetInspectorAdditionsEnabled(preferences, options.enableInspectorAdditions);
     732
    731733    platformResetPreferencesToConsistentValues();
    732734}
     
    10221024        if (key == "enableIsSecureContextAttribute")
    10231025            testOptions.enableIsSecureContextAttribute = parseBooleanTestHeaderValue(value);
     1026        if (key == "enableInspectorAdditions")
     1027            testOptions.enableInspectorAdditions = parseBooleanTestHeaderValue(value);
    10241028        pairStart = pairEnd + 1;
    10251029    }
  • trunk/Tools/WebKitTestRunner/TestOptions.h

    r218196 r220370  
    4949    bool enableCredentialManagement { false };
    5050    bool enableIsSecureContextAttribute { true };
     51    bool enableInspectorAdditions { false };
    5152
    5253    float deviceScaleFactor { 1 };
     
    7071            || enablePointerLock != options.enablePointerLock
    7172            || enableCredentialManagement != options.enableCredentialManagement
    72             || enableIsSecureContextAttribute != options.enableIsSecureContextAttribute)
     73            || enableIsSecureContextAttribute != options.enableIsSecureContextAttribute
     74            || enableInspectorAdditions != options.enableInspectorAdditions)
    7375            return false;
    7476
Note: See TracChangeset for help on using the changeset viewer.