
    UHjQe                      d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlmZ ddlmZ ddlmZmZ ddlmZ ddlmZmZ  ee      j1                         j2                  d	   Z G d
 de      ZddZddZddddddddd	dddddddddddddddddddddddddd dddd!d"d#dd$d%dd&d'dd$d%d	d(d)dd*	Zd+d,dd-d.dd+d,d	d/d0dd+d,d1d2d3dd+d,d4d5d6dd7Z d8d9dd:Z!d;d9dd<Z"d;d9dd=Z#dd>Z$ddd?Z%ddd@Z&dddAZ'ddBZ(ddCZ)dddDZ*ddEZ+dddFZ,ddGZ-dddHZ.dddIZ/dddJZ0ddKZ1ddLZ2ddMZ3ddNZ4ddOZ5ddPZ6dddQZ7dddRZ8dddSZ9dddTZ:dddUZ;dddVZ<dddWZ=dddXZ>dYdZdd[Z?dYdZ	 	 	 	 	 	 	 	 	 	 	 dd\Z@dd]ZAdd^ZBdd_ZCdd`ZDdYdZddaZEdYdZ	 	 	 	 	 	 	 	 	 	 	 	 	 ddbZFddcZGdddZHddeZI	 	 	 	 	 	 	 	 ddfZJdYdZddgZKdYdZ	 	 	 	 	 	 	 	 	 	 	 ddhZLddiZMddjZNddkZOddlZPdddmZQdddnZRddoZSddpZTddqZUddrZVddsZWddtZXdduZYddvZZddwZ[ddxZ\ddyZ]ddzZ^dd{Z_dd|Z`dd}Zadd~ZbddZcddZdddZeddZfddZgddZhddZiddZjddZkddZlddZmddZnddZoddZpddZqddZrddZsddZtddZuddZvddZwddZxddZyddZzddZ{ddZ|ddZ}ddZ~ddZddZddZddZddZddZddZdddZddZedk(  r e        yy)a  Run a browser-engine smoke test for the mobile virtual joystick.

This test uses WebKitGTK WebDriver directly through the W3C WebDriver HTTP
protocol.  It intentionally avoids Selenium's WebKitGTK wrapper because the
Ubuntu package can be incompatible with the installed Selenium core API.
Run it under Xvfb in headless VMs:

    xvfb-run -a python3 tools/verify_mobile_browser_controls.py --base http://127.0.0.1:8013
    )annotationsN)Path)Any)	urlencodeurljoin)	HTTPError)Requesturlopen   c                      e Zd Zy)WebDriverErrorN)__name__
__module____qualname__     ;/home/exedev/hwanse/tools/verify_mobile_browser_controls.pyr   r      s    r   r   c                     t        t        j                  j                  d      xs t        j                  j                  d            S )NDISPLAYWAYLAND_DISPLAY)boolosenvirongetr   r   r   browser_display_availabler   #   s-    

y)NRZZ^^<M-NOOr   c                    | dk7  st        |t              sy|j                  d      xs i }|j                  d      xs i }|j                  d      dk(  S )N/sessionFcapabilitiesalwaysMatchbrowserNameMiniBrowser)
isinstancedictr   )pathpayloadr   always_matchs       r   mini_browser_session_requestedr'   '   sT    zGT!:;;~.4"L##M28bLM*m;;r   zexe-text-table-atahoActionsatahoActions
0x004d24ac
0x004d2d8c)
nameSourcetextTableKeytextTableIndextextTableRefVaHextextTableTextVaHex
0x004d24b4
0x004d2daa   
0x004d24bc
0x004d2dc8zexe-text-table-skillNamesBskillNamesB
0x004d2c04
0x004d4d68
0x004d2c2c
0x004d4e1e   
0x004d2c5c
0x004d4ee2   
0x004d2c6c
0x004d4f2ezexe-text-table-actionSetB
actionSetB
0x004d2864
0x004d3e3a
0x004d286c
0x004d3e58)	)r(   r   )r(   r   )r(   r2   )r5   r   )r5   r2   )r5   r:   )r5   r=   )r@   r   )r@   r   zexe-text-table-itemsitems
0x0048b984
0x0048ba7c
0x0048b98c
0x0048ba8e   
0x0048b99c
0x0048bab2   
0x0048b9ac
0x0048bad6)herbitem_2mp_recoveryitem_6 prefixc               r   t         ||f   }d
fd}| j                   |d            |d   k7  st| j                   |d            |d   k7  sW| j                   |d            |d   k7  s:| j                   |d            |d   k7  s| j                   |d            |d   k7  rt        d| d| d	|       y )Nc                D    r | d d j                          | dd   S | S Nr   uppernamerV   s    r   keyz,assert_player_battle_text_table.<locals>.key   1    :@&$r(..*+DH:6JdJr   r+   r,   r-   r.   r/   z*battle text table provenance mismatch for [z]: r]   strreturnrb   )PLAYER_BATTLE_TEXT_TABLESr   r   )rowtableindexrV   expectedr^   s      `  r   assert_player_battle_text_tableri      s    (%8HK 	L!"h|&<<773~&'8N+CC773'()X6F-GG773*+,9L0MM773+,-:N1OOI%PQRWQXX[\_[bcdd Pr   itemc               T   t         |   }dfd}| j                   |d            |d   k(  xrz | j                   |d            |d   k(  xr[ | j                   |d            |d   k(  xr< | j                   |d            |d   k(  xr | j                   |d            |d   k(  S )Nc                D    r | d d j                          | dd   S | S rY   rZ   r\   s    r   r^   z)item_text_provenance_matches.<locals>.key   r_   r   r+   r,   r-   r.   r/   ra   )ITEM_TEXT_TABLESr   )re   item_keyrV   rh   r^   s     `  r   item_text_provenance_matchesro      s    )HK 	L!"h|&<< 	QGGC'(H^,DD	QGGC()*h7G.HH	Q GGC+,-:M1NN	Q GGC,-.(;O2PPr   c               B    t        | ||      st        d| d|       y )NrU   z(item text table provenance mismatch for : )ro   r   )re   rn   rV   s      r   assert_item_text_provenancerr      s0    'XfEGzQSTWSZ[\\ Fr   c                     t        j                   t         j                  t         j                        5 } | j                  d       t	        | j                         d         cd d d        S # 1 sw Y   y xY w)N)z	127.0.0.1r   r   )socketAF_INETSOCK_STREAMbindintgetsockname)socks    r   	free_portr{      sT    	v~~v'9'9	: *d		"#4##%a()* * *s   -A**A3c           	     n   t        ||      rt               st        d      |d n#t        j                  |      j                  d      }t        d|  | ||ddi      }	 t        ||      5 }|j                         j                  d      }d d d        rt        j                  |      S d S # 1 sw Y   "xY w# t        $ rO}	|	j                         j                  dd	      }t        d
|	j                   d|	j                   d|       |	d }	~	wt        $ r}
t        d| d| d|       |
d }
~
ww xY w)NzqMiniBrowser requires DISPLAY/WAYLAND_DISPLAY. Run this browser smoke test with `xvfb-run -a ...` in headless VMs.utf-8zhttp://127.0.0.1:zContent-Typezapplication/json)datamethodheaderstimeoutreplace)errorszWebDriver HTTP  rq   z"WebDriver request timed out after zs: )r'   r   r   jsondumpsencoder	   r
   readdecoder   codereasonTimeoutErrorloads)portr   r$   r%   r   r~   requestresponsebodyerrorexcs              r   request_jsonr      sF   %dG4=V=XR
 	
 ?4

7(;(B(B7(KD
D6$(!34	GhWg. 	3(==?))'2D	3  $4::d--	3 	3 _zz|""79"=uzzl!ELL>D6RSY^^ hA'#fXUVW[V\]^dgghs=   !B; . B/B; /B84B; ;	D4A
DD4D//D4c                   t        j                         |z   }t        j                         |k  r|j                         t        d|j                         	 t        | ddd      }|r$|j                  di       j                  d      d	u ry t        j                  d       t        j                         |k  rt        d
      # t        $ r t        j                  d       Y w xY w)Nz)WebKitWebDriver exited early with status GETz/statusg      ?r   皙?valuereadyTz$WebKitWebDriver did not become ready)	time	monotonicpollr   
returncoder   	Exceptionsleepr   )r   procr   deadlinestatuss        r   wait_for_driverr      s    ~~')H
..
X
%99;" #LT__L]!^__	!$y#FF fjj"-11':dB

3 ..
X
% ?
@@  	JJsO	s   C C&%C&c                b    t        | dd| d|g d|      }|rd|vrt        d|      |d   S )NPOST	/session/z/execute/sync)scriptargsr   r   zbad execute/sync response: )r   r   )r   
session_idr   r   r   s        r   
execute_jsr      sS    
J<}-2&H wh.:8,GHHGr   c                      y)Nak  
const canvas = document.getElementById('screen');
const data = canvas.getContext('2d').getImageData(0, 0, canvas.width, canvas.height).data;
let checksum = 0;
for (let index = 0; index < data.length; index += 16) {
  checksum = (((checksum * 131) >>> 0) + data[index] + data[index + 1] * 3 + data[index + 2] * 7 + data[index + 3] * 11) >>> 0;
}
return checksum;
r   r   r   r   canvas_checksum_scriptr          r   c                    t        j                         dz   }t        j                         |k  r?t        | |dd      }|ry t        j                  d       t        j                         |k  r?t	        d      )N
   zQreturn document.readyState === 'complete' && !!document.getElementById('screen');rJ   r   皙?z,web runtime did not finish loading in WebKit)r   r   r   r   r   )r   r   r   r   s       r   wait_for_pager      sj    ~~"$H
..
X
%_	
 

3 ..
X
% G
HHr   c                N   t        j                  |      }t        j                         dz   }t        j                         |k  rCt	        | |d| dd      }|ry t        j
                  d       t        j                         |k  rCt	        | |dd      }t        d|d	|      )
Nr   z
const expected = z;
return (
  typeof scene !== 'undefined' &&
  scene === 'map' &&
  typeof map !== 'undefined' &&
  !!map &&
  (!expected || map.name === expected) &&
  !!document.getElementById('virtualJoystick')
);
rJ   r   r   a{  
return {
  readyState: document.readyState,
  hasScreen: !!document.getElementById('screen'),
  sceneType: typeof scene,
  scene: typeof scene === 'undefined' ? '' : scene,
  mapType: typeof map,
  map: typeof map === 'undefined' || !map ? '' : map.name,
  bootError: window.HWANSE_BOOT_ERROR || null,
  errorText: document.body ? document.body.innerText.slice(0, 300) : '',
};
z1web map runtime did not finish loading: expected= state=)r   r   r   r   r   r   r   )r   r   expected_maprh   r   r   states          r   wait_for_map_runtimer   	  s    zz,'H~~"$H
..
X
% 	
 
  

3' ..
X
%( 	 E" L\L\\cdiclm
nnr   c                      y)NaC  
const canvas = document.getElementById('screen');
const rect = canvas.getBoundingClientRect();
const x = rect.left + rect.width * 0.45;
const y = rect.top + rect.height * 0.45;
canvas.dispatchEvent(new PointerEvent('pointerdown', {
  bubbles: true,
  cancelable: true,
  pointerId: 77,
  pointerType: 'touch',
  isPrimary: true,
  clientX: x,
  clientY: y,
  buttons: 1,
}));
window.dispatchEvent(new PointerEvent('pointermove', {
  bubbles: true,
  cancelable: true,
  pointerId: 77,
  pointerType: 'touch',
  isPrimary: true,
  clientX: x + 90,
  clientY: y,
  buttons: 1,
}));
const joystick = document.getElementById('virtualJoystick');
const style = getComputedStyle(joystick);
return {
  active: joystick.classList.contains('active'),
  knobX: style.getPropertyValue('--knob-x'),
  knobY: style.getPropertyValue('--knob-y'),
};
r   r   r   r   start_touch_on_canvas_scriptr   4  s     r   c                    d|  dS )Na  
const canvas = document.getElementById('screen');
const rect = canvas.getBoundingClientRect();
const x = rect.left + rect.width * 0.45;
const y = rect.top + rect.height * 0.45;
window.dispatchEvent(new PointerEvent('pointerup', {
  bubbles: true,
  cancelable: true,
  pointerId: z,
  pointerType: 'touch',
  isPrimary: true,
  clientX: x + 90,
  clientY: y,
  buttons: 0,
}));
return document.getElementById('virtualJoystick').classList.contains('active');
r   
pointer_ids    r   end_touch_scriptr   X  s     \  r   c                      y)Na  
document.body.dispatchEvent(new PointerEvent('pointerdown', {
  bubbles: true,
  cancelable: true,
  pointerId: 78,
  pointerType: 'touch',
  isPrimary: true,
  clientX: 18,
  clientY: 18,
  buttons: 1,
}));
window.dispatchEvent(new PointerEvent('pointermove', {
  bubbles: true,
  cancelable: true,
  pointerId: 78,
  pointerType: 'touch',
  isPrimary: true,
  clientX: 18,
  clientY: 92,
  buttons: 1,
}));
const joystick = document.getElementById('virtualJoystick');
const style = getComputedStyle(joystick);
return {
  active: joystick.classList.contains('active'),
  knobX: style.getPropertyValue('--knob-x'),
  knobY: style.getPropertyValue('--knob-y'),
};
r   r   r   r   start_touch_on_document_scriptr   l  s    r   c                    d|  d|  dS )Na  
const canvas = document.getElementById('screen');
const rect = canvas.getBoundingClientRect();
const x = rect.left + rect.width * 0.5;
const y = rect.top + rect.height * 0.55;
canvas.dispatchEvent(new PointerEvent('pointerdown', {
  bubbles: true,
  cancelable: true,
  pointerId: ,
  pointerType: 'touch',
  isPrimary: true,
  clientX: x,
  clientY: y,
  buttons: 1,
}));
window.dispatchEvent(new PointerEvent('pointermove', {
  bubbles: true,
  cancelable: true,
  pointerId: a_  ,
  pointerType: 'touch',
  isPrimary: true,
  clientX: x,
  clientY: y + 90,
  buttons: 1,
}));
const joystick = document.getElementById('virtualJoystick');
const style = getComputedStyle(joystick);
return {
  active: joystick.classList.contains('active'),
  knobX: style.getPropertyValue('--knob-x'),
  knobY: style.getPropertyValue('--knob-y'),
};
r   r   s    r   !start_touch_on_canvas_down_scriptr     )     \ 
 \ %   r   c                    d|  d|  dS )Na  
const canvas = document.getElementById('screen');
const rect = canvas.getBoundingClientRect();
const x = rect.left + rect.width * 0.5;
const y = rect.top + rect.height * 0.45;
canvas.dispatchEvent(new PointerEvent('pointerdown', {
  bubbles: true,
  cancelable: true,
  pointerId: r   a_  ,
  pointerType: 'touch',
  isPrimary: true,
  clientX: x,
  clientY: y - 90,
  buttons: 1,
}));
const joystick = document.getElementById('virtualJoystick');
const style = getComputedStyle(joystick);
return {
  active: joystick.classList.contains('active'),
  knobX: style.getPropertyValue('--knob-x'),
  knobY: style.getPropertyValue('--knob-y'),
};
r   r   s    r   start_touch_on_canvas_up_scriptr     r   r   c                    d|  d|  dS )Nz
const button = document.getElementById('virtualActionButton');
button.dispatchEvent(new PointerEvent('pointerdown', {
  bubbles: true,
  cancelable: true,
  pointerId: z,
  pointerType: 'touch',
  isPrimary: true,
  clientX: 320,
  clientY: 760,
  buttons: 1,
}));
button.dispatchEvent(new PointerEvent('pointerup', {
  bubbles: true,
  cancelable: true,
  pointerId: zm,
  pointerType: 'touch',
  isPrimary: true,
  clientX: 320,
  clientY: 760,
  buttons: 0,
}));
return true;
r   r   s    r   tap_action_button_scriptr     s)    
 \ 
 \  r   c                      y)Na  
const button = document.getElementById('routeAssistButton');
button.click();
const frontier = document.getElementById('routeFrontierSelect');
const path = document.getElementById('routePathSelect');
const next = document.getElementById('routeNextButton');
return {
  active: button.classList.contains('active'),
  text: button.textContent,
  title: button.title,
  search: window.location.search,
  map: document.getElementById('mapSelect').value,
  frontierHidden: frontier.hidden,
  frontierValue: frontier.value,
  selectedTarget: frontier.selectedOptions[0]?.dataset.transitionTarget || '',
  pathHidden: path.hidden,
  pathTargetCount: [...path.options].map((option) => option.value).filter(Boolean).length,
  nextHidden: next.hidden,
};
r   r   r   r    click_route_assist_button_scriptr     s    r   c                      y)Na  
const frontier = document.getElementById('routeFrontierSelect');
const path = document.getElementById('routePathSelect');
const next = document.getElementById('routeNextButton');
return {
  search: window.location.search,
  frontierHidden: frontier.hidden,
  pathHidden: path.hidden,
  pathTargetCount: [...path.options].map((option) => option.value).filter(Boolean).length,
  nextHidden: next.hidden,
};
r   r   r   r   "route_assist_controls_state_scriptr         r   c                      y)Na  
if (typeof updateDialogueButton === 'function') updateDialogueButton();
const button = document.getElementById('dialogueButton');
if (!button) return { ok: false, reason: 'missing dialogueButton' };
const before = { hidden: button.hidden, text: button.textContent, title: button.title };
button.click();
return {
  ok: true,
  before,
  after: { hidden: button.hidden, text: button.textContent, title: button.title },
};
r   r   r   r   click_dialogue_button_scriptr     r   r   c                      y)Na  
if (typeof updateBattleButton === 'function') updateBattleButton();
const button = document.getElementById('battleButton');
if (!button) return { ok: false, reason: 'missing battleButton' };
const before = { hidden: button.hidden, text: button.textContent, title: button.title };
button.click();
return {
  ok: true,
  before,
  after: { hidden: button.hidden, text: button.textContent, title: button.title },
};
r   r   r   r   click_battle_button_scriptr   $  r   r   c                      y)NaK  
const select = document.getElementById('routePathSelect');
const button = document.getElementById('routeNextButton');
const targets = [...(select?.options || [])].map((option) => option.value).filter(Boolean);
return {
  scene,
  map: map?.name || '',
  search: window.location.search,
  selectedGoal: select?.value || '',
  selectedText: select?.selectedOptions?.[0]?.textContent || '',
  targetCount: targets.length,
  targets,
  nextHidden: button?.hidden ?? null,
  nextDisabled: button?.disabled ?? null,
  nextText: button?.textContent || '',
  nextTitle: button?.title || '',
};
r   r   r   r   route_goal_next_state_scriptr   3  s    r   c                      y)NaN  
const button = document.getElementById('routeNextButton');
if (!button) return { ok: false, reason: 'missing routeNextButton' };
const before = {
  hidden: button.hidden,
  disabled: button.disabled,
  text: button.textContent,
  title: button.title,
  search: window.location.search,
};
button.click();
return { ok: true, before };
r   r   r   r   click_route_next_button_scriptr   H  s    r   c                   t        j                         |z   }d}t        j                         |k  rLt        t        | |dd            }||k(  r|S t        j                  d       t        j                         |k  rLt        d|d|      )NrT   z2return document.getElementById('mapSelect').value;rJ   r   333333?zmapSelect did not become ; last value was )r   r   rb   r   r   r   )r   r   rh   r   r   r   s         r   wait_for_map_valuer   X  s    ~~')HE
..
X
%JtZ1eopqrHL

4	 ..
X
%
 4XL@QRWQZ[
\\r   c                L   t        j                         |z   }dt        j                         |k  rct        t        | |t	               d            t        fd|D              rS t        j                  d       t        j                         |k  rct        d|d      )NrT   rJ   r   c              3  &   K   | ]  }|v  
 y wNr   ).0needler   s     r   	<genexpr>z+wait_for_search_contains.<locals>.<genexpr>h  s     56v5s   r   z location search did not include r   )r   r   rb   r   current_search_scriptallr   r   )r   r   needlesr   r   r   s        @r   wait_for_search_containsr   c  s    ~~')HE
..
X
%JtZ1F1HRSTU5W55L

4	 ..
X
%
 ;G;FWX]W`a
bbr   c                |   t        j                         |z   }i }t        j                         |k  rt        | |t               d      }t	        |t
              r|ni }|j                  d      dk(  r|j                  d      r|S t        j                  d       t        j                         |k  rt        d|      )NrJ   r   scenebattlecommandsr   z2battle scene did not become ready; last state was )	r   r   r    savedat_battle_item_state_scriptr"   r#   r   r   r   r   r   r   r   r   r   s         r   wait_for_battle_scener   n  s    ~~')HE
..
X
%4-M-OYZ[#E40b99W)eii
.CL

3 ..
X
% MeYW
XXr   c                   t        j                         |z   }i }t        j                         |k  rt        | |t               d      }t	        |t
              r|ni }|j                  d      dk(  r2t        |j                  d      xs g       j                  d      dk(  r|S t        j                  d       t        j                         |k  rt        d|      )	NrJ   r   r   map
itemCounts   약초r   z8savedat menu state did not become ready; last state was )	r   r   r   savedat_menu_item_state_scriptr"   r#   r   r   r   r   s         r   wait_for_savedat_menu_stater   z  s    ~~')HE
..
X
%4-K-MWXY#E40b99W&4		,0G0M2+N+R+RS[+\`a+aL

3 ..
X
% STYS\]
^^r   c                T   t        j                         |z   }i }t        j                         |k  rkt        | |t               d      }t	        |t
              r|ni }|j                  d      |S t        j                  d       t        j                         |k  rkt        d|      )NrJ   r   okr   z<savedat menu item quick-load did not finish; last state was )	r   r   r   !menu_item_quick_load_state_scriptr"   r#   r   r   r   r   s         r   #wait_for_menu_item_quick_load_stater     s    ~~')HE
..
X
%4-N-PZ[\#E40b99T?&L

3 ..
X
% WX]W`a
bbr   c                X   t        j                         |z   }i }t        j                         |k  rmt        | |t               d      }t	        |t
              r|ni }|j                  d      du r|S t        j                  d       t        j                         |k  rmt        d|      )NrJ   r   doneTr   z@savedat menu item title continue did not finish; last state was )	r   r   r   -savedat_menu_item_title_continue_state_scriptr"   r#   r   r   r   r   s         r   )wait_for_savedat_menu_item_title_continuer     s    ~~')HE
..
X
%4-Z-\fgh#E40b99V$L

3 ..
X
% [\a[de
ffr   c                X   t        j                         |z   }i }t        j                         |k  rmt        | |t               d      }t	        |t
              r|ni }|j                  d      du r|S t        j                  d       t        j                         |k  rmt        d|      )NrJ   r   r   Tr   zCsavedat battle skill title continue did not finish; last state was )	r   r   r   0savedat_battle_skill_title_continue_state_scriptr"   r#   r   r   r   r   s         r   ,wait_for_savedat_battle_skill_title_continuer     s    ~~')HE
..
X
%4-]-_ijk#E40b99V$L

3 ..
X
% ^_d^gh
iir   c                X   t        j                         |z   }i }t        j                         |k  rmt        | |t               d      }t	        |t
              r|ni }|j                  d      du r|S t        j                  d       t        j                         |k  rmt        d|      )NrJ   r   r   Tr   zBsavedat battle item title continue did not finish; last state was )	r   r   r   /savedat_battle_item_title_continue_state_scriptr"   r#   r   r   r   r   s         r   +wait_for_savedat_battle_item_title_continuer     s    ~~')HE
..
X
%4-\-^hij#E40b99V$L

3 ..
X
% ]^c]fg
hhr   Frenderedc                   |rdnd}| j                  |      xs g D cg c]  }t        |t              s| c}S c c}w )NitemFeedbackRenderitemFeedbackLogr   r"   r#   r   r   r^   entrys       r   battle_item_feedback_entriesr    s7    "*
0AC %		# 4"QeE49PEQQQ   ;;c                   t        | |      D ]D  }|j                  d      |k(  s|j                  d      |k(  s-|j                  d      |k(  sB|c S  i S Nr   sourceitemKeytext)r  r   r   r
  rn   r  r   r  s         r   battle_item_feedback_matchr    sY     .ehG IIh6)		)$0		&!T)L Ir   c                D    dj                  d t        |       D              S )N,c              3     K   | ];  }|j                  d        d|j                  d       d|j                  d        = ywr
  :r  r  Nr   r   r  s     r   r   z/battle_item_feedback_summary.<locals>.<genexpr>  G       99X
q9!5 6a		&8I7JK   AAjoinr  r   s    r   battle_item_feedback_summaryr    s%    88 1%8  r   c                <    t        d t        | d      D              S )Nc              3  B   K   | ]  }|j                  d       du   yw)$browserBattleItemFeedbackImplementedTNr  r  s     r   r   z0battle_item_feedback_rendered.<locals>.<genexpr>  s'       			89TA   Tr   )anyr  r  s    r   battle_item_feedback_renderedr!    s#     1%$G  r   c                D    dj                  d t        |       D              S )Nr  c              3     K   | ]L  }|j                  d       r9|j                  d        d|j                  d       d|j                  d        N yw)battleItemSoundr  battleItemSoundSrcbattleItemSoundPlayedNr  r  s     r   r   z5battle_item_feedback_sound_summary.<locals>.<genexpr>  sW      99&' 99&'
(%))4H*I)J!EIIVmLnKop   AAr  r  s    r   "battle_item_feedback_sound_summaryr(    s%    88 1%8  r   c                    | j                  d      dk7  s@t        | j                  d      xs d      j                  d      r| j                  d      durt        d|       y )	Nr$  rj   r%  rT   /extract_wlk/11.wavr&  Tz+missing battle item feedback sound marker: r   rb   endswithr   feedbacks    r   !verify_battle_item_feedback_soundr/    sa    &'618<< 45;<EEF[\<</0<J8,WXX =r   c                   |rdnd}| j                  |      xs g D cg c]  }t        |t              s| c}S c c}w )NskillFeedbackRenderskillFeedbackLogr  r  s       r   battle_skill_feedback_entriesr3    s7    #+
1CC %		# 4"QeE49PEQQQr  c                   t        | |      D ]Y  }|j                  d      |k(  s|j                  d      |k(  s-|j                  d      |k(  sB|j                  d      |k(  sW|c S  i S )Nr   r
  	actorName	skillNamer  )r3  r   )r   r
  
actor_name
skill_namer  r   r  s          r   battle_skill_feedback_matchr9    sj     /uxH IIh6)		+&*4		+&*4		&!T)L Ir   c                D    dj                  d t        |       D              S )Nr  c           
   3     K   | ]M  }|j                  d        d|j                  d       d|j                  d       d|j                  d        O yw)r
  r  r5  r6  r  Nr  r  s     r   r   z0battle_skill_feedback_summary.<locals>.<genexpr>  s\       99X
q;!7 8%))K:P9QQRSXS\S\]cSdRefs   AAr  r3  r  s    r   battle_skill_feedback_summaryr=    s%    88 259  r   c                <    t        d t        | d      D              S )Nc              3  B   K   | ]  }|j                  d       du   yw)%browserBattleSkillFeedbackImplementedTNr  r  s     r   r   z1battle_skill_feedback_rendered.<locals>.<genexpr>  s'       			9:dBr  Tr   )r   r3  r  s    r   battle_skill_feedback_renderedrA    s#     254H  r   c                D    dj                  d t        |       D              S )Nr  c              3     K   | ]L  }|j                  d       r9|j                  d        d|j                  d       d|j                  d        N yw)battleSkillSoundr  battleSkillSoundSrcbattleSkillSoundPlayedNr  r  s     r   r   z6battle_skill_feedback_sound_summary.<locals>.<genexpr>  sW      99'( 99'(
)5995J+K*LAeiiXpNqMrsr'  r<  r  s    r   #battle_skill_feedback_sound_summaryrG    s%    88 259  r   c                    |j                  dd      }| j                  d      |k7  s@t        | j                  d      xs d      j                  |      r| j                  d      durt	        d|       y )Nz..rT   rD  rE  rF  Tz,missing battle skill feedback sound marker: )r   r   rb   r,  r   )r.  expected_soundexpected_srcexpected_suffixs       r   "verify_battle_skill_feedback_soundrL    st    
 #**44O'(N:8<< 56<"=FFW<<01=KH<XYY >r   c                   |rdnd}| j                  |      xs g D cg c]  }t        |t              s| c}S c c}w )NinventoryFeedbackRenderinventoryFeedbackLogr  r  s       r   inventory_item_feedback_entriesrP  )  s7    '/
#5KC %		# 4"QeE49PEQQQr  c                   t        | |      D ]D  }|j                  d      |k(  s|j                  d      |k(  s-|j                  d      |k(  sB|c S  i S r	  )rP  r   r  s         r   inventory_item_feedback_matchrR  .  sY     1J IIh6)		)$0		&!T)L Ir   c                D    dj                  d t        |       D              S )Nr  c              3     K   | ];  }|j                  d        d|j                  d       d|j                  d        = ywr  r  r  s     r   r   z2inventory_item_feedback_summary.<locals>.<genexpr>A  r  r  r  rP  r  s    r   inventory_item_feedback_summaryrV  @  s%    88 4U;  r   c                <    t        d t        | d      D              S )Nc              3  B   K   | ]  }|j                  d       du   yw)'browserInventoryItemFeedbackImplementedTNr  r  s     r   r   z3inventory_item_feedback_rendered.<locals>.<genexpr>H  s'       			;<Dr  Tr   )r   rP  r  s    r    inventory_item_feedback_renderedrZ  G  s#     4UTJ  r   c                D    dj                  d t        |       D              S )Nr  c              3     K   | ]L  }|j                  d       r9|j                  d        d|j                  d       d|j                  d        N yw)inventoryItemSoundr  inventoryItemSoundSrcinventoryItemSoundPlayedNr  r  s     r   r   z8inventory_item_feedback_sound_summary.<locals>.<genexpr>O  s[      99)* 99)*
+1UYY7N-O,PPQRWR[R[\vRwQxyr'  rU  r  s    r   %inventory_item_feedback_sound_summaryr`  N  s%    88 4U;  r   c                    | j                  d      dk7  s@t        | j                  d      xs d      j                  d      r| j                  d      durt        d|       y )	Nr]  rj   r^  rT   r*  r_  Tz.missing inventory item feedback sound marker: r+  r-  s    r   $verify_inventory_item_feedback_soundrb  V  sb    )*f48<< 78>B?HHI^_<<234?Mh\Z[[ @r   c                   t        j                         |z   }i }t        j                         |k  rt        | |t               d      }t	        |t
              r|ni }t        |j                  d      xs d      }|j                  d      r|S |j                  d      dk(  rt        | |dd       t        j                  d	       t        j                         |k  rt        d
|      )NrJ   r   activeIdrT   zsave-point-candidates:menuModezsave-point-candidatez
if (!activeDialogue && typeof startSavePointCandidateReview === 'function') {
  startSavePointCandidateReview();
}
return true;
r   z7save-point candidate menu did not open; last state was )r   r   r   &save_point_candidate_menu_state_scriptr"   r#   rb   r   
startswithr   r   )r   r   r   r   r   r   	active_ids          r   (wait_for_save_point_candidate_menu_stateri  _  s    ~~')HE
..
X
%4-S-U_`a#E40b		*-34	 89L99Z $:: 
 	

3% ..
X
%& RSXR[\
]]r   c                P   t        j                         |z   }i }t        j                         |k  rt        | |t               d      }t	        |t
              r|ni }|j                  d      xs i }|j                  d      dk(  rh|j                  d      dk(  rT|j                  d      du rA|j                  d	d
      dk\  r,|j                  dd
      dk\  r|j                  dd
      dk\  r|S t        j                  d       t        j                         |k  rt        d|      )NrJ   r   renderr   r   map2_03lenabledTcandidateCountr   loadedCountrenderedCountr   r   z4event object overlay did not render; last state was )	r   r   r    event_object_render_state_scriptr"   r#   r   r   r   )r   r   r   r   r   r   rk  s          r   "wait_for_event_object_render_staterr  x  s   ~~')HE
..
X
%4-M-OYZ[#E40b8$*IIg%'		% J.

9%-

+Q/14

=!,1

?A.!3L

3 ..
X
% OPUyY
ZZr   c                      y)Nzreturn window.location.search;r   r   r   r   r   r     s    +r   c                      y)Na  
const button = document.getElementById('overviewButton');
const before = {
  hidden: button.hidden,
  text: button.textContent,
  active: button.classList.contains('active'),
  overview: overviewMode,
  search: window.location.search,
};
button.click();
const afterOn = {
  hidden: button.hidden,
  text: button.textContent,
  active: button.classList.contains('active'),
  overview: overviewMode,
  search: window.location.search,
};
button.click();
const afterOff = {
  hidden: button.hidden,
  text: button.textContent,
  active: button.classList.contains('active'),
  overview: overviewMode,
  search: window.location.search,
};
return { before, afterOn, afterOff };
r   r   r   r   overview_button_state_scriptru    s    r   c                      y)Na  
const toggle = document.getElementById('debugControlsToggle');
const input = document.getElementById('mapFilterInput');
const select = document.getElementById('mapSelect');
const openedForTest = document.body.classList.contains('debug-ui-collapsed');
if (openedForTest) toggle.click();
const visibleDisplay = getComputedStyle(input).display;
input.value = 'map2_02d';
input.dispatchEvent(new Event('input', { bubbles: true }));
const values = [...select.options].map((option) => option.value);
const labels = [...select.options].map((option) => option.textContent);
const result = {
  display: visibleDisplay,
  count: values.length,
  values,
  labels,
  selected: select.value,
  title: select.title,
};
if (openedForTest) toggle.click();
return result;
r   r   r   r   map_filter_state_scriptrw    s    r   c                      y)Nae  
const button = document.getElementById('virtualMenuButton');
if (!button) return { ok: false, reason: 'missing virtualMenuButton' };
window.HWANSE_SOUND_COUNTS = {};
window.HWANSE_SOUND_LOG = [];
window.HWANSE_LAST_SOUND = null;
window.HWANSE_RUNTIME_MENU_SOUND_LOG = [];
window.HWANSE_LAST_RUNTIME_MENU_SOUND = null;
const before = { hidden: button.hidden, menuOpen, menuMode };
button.dispatchEvent(new PointerEvent('pointerdown', {
  bubbles: true,
  cancelable: true,
  pointerId: 61,
  pointerType: 'touch',
  isPrimary: true,
}));
button.dispatchEvent(new PointerEvent('pointerup', {
  bubbles: true,
  cancelable: true,
  pointerId: 61,
  pointerType: 'touch',
  isPrimary: true,
}));
const afterOpen = { hidden: button.hidden, menuOpen, menuMode };
window.dispatchEvent(new KeyboardEvent('keydown', {
  bubbles: true,
  cancelable: true,
  code: 'ArrowDown',
  key: 'ArrowDown',
}));
const afterMove = {
  hidden: button.hidden,
  menuOpen,
  menuMode,
  selectedMenuItemIndex,
  selectedLabel: menuItemLabel(menuItems()[selectedMenuItemIndex]),
};
button.dispatchEvent(new PointerEvent('pointerdown', {
  bubbles: true,
  cancelable: true,
  pointerId: 62,
  pointerType: 'touch',
  isPrimary: true,
}));
button.dispatchEvent(new PointerEvent('pointerup', {
  bubbles: true,
  cancelable: true,
  pointerId: 62,
  pointerType: 'touch',
  isPrimary: true,
}));
const afterClose = { hidden: button.hidden, menuOpen, menuMode };
const soundState = {
  counts: { ...(window.HWANSE_SOUND_COUNTS || {}) },
  last: window.HWANSE_LAST_SOUND || null,
  log: Array.isArray(window.HWANSE_SOUND_LOG) ? [...window.HWANSE_SOUND_LOG] : [],
  menuLog: Array.isArray(window.HWANSE_RUNTIME_MENU_SOUND_LOG)
    ? [...window.HWANSE_RUNTIME_MENU_SOUND_LOG]
    : [],
  menuLast: window.HWANSE_LAST_RUNTIME_MENU_SOUND || null,
};
return { ok: true, before, afterOpen, afterMove, afterClose, soundState };
r   r   r   r   mobile_menu_button_state_scriptry    s    >r   c                      y)Na  
return {
  scene,
  map: map?.name || '',
  dialogueBlockCount: eventDialogueBlocks.length,
  exactIds: exactDialogueCandidatesForMap().map((block) => block.blockId),
  actionId: activeActionDialogueCandidate()?.blockId || '',
  activeId: activeDialogue?.block?.blockId || '',
	  activeIndex: activeDialogue?.index ?? null,
	  activeLine: activeDialogue?.lines?.[activeDialogue.index] || '',
	  activeVmRenderEvent: activeDialogue?.vmReplay?.renderEvents?.[activeDialogue.index] || null,
	  vmReplay: window.HWANSE_LAST_EVENT_VM_REPLAY || null,
	  dialogueBoxRender: window.HWANSE_LAST_DIALOGUE_BOX_RENDER || null,
	  menuOpen,
	  notice: menuNotice,
	};
r   r   r   r   action_dialogue_state_scriptr{  	      r   c                      y)Naa  
menuOpen = true;
menuMode = 'main';
const items = menuItems();
const partyIndex = items.findIndex((item) => item.command === 'cyclePartyMembers');
if (partyIndex < 0) return `missing-cyclePartyMembers:${items.map((item) => item.command || item.key).join(',')}`;
selectedMenuItemIndex = partyIndex;
useSelectedMenuItem();
return window.location.search;
r   r   r   r   cycle_party_from_menu_scriptr~        	r   c                      y)Nal  
if (loadedSaveSummary) return { ok: false, reason: 'expected prototype party mode' };
manualPartyModeIndex = partyModeIndexForNames(['rinshan']);
manualPartyMembers = partyMembersForMode(manualPartyModeIndex);
if (typeof ensurePrototypeRuntimeState === 'function') ensurePrototypeRuntimeState();
partyTrail = [];
syncPartyQuery();
const before = {
  members: manualPartyMembers.map((member) => member.name),
  activeLabels: activePartyMembers().map((member) => member.label),
  partyModeIndex: manualPartyModeIndex,
  search: window.location.search,
  runtimeCharacters: (runtimeState?.characters || []).map((character) => character.name),
};
const saved = quickSaveRuntime();
const payload = JSON.parse(localStorage.getItem(RUNTIME_SAVE_KEY) || '{}');
manualPartyModeIndex = 0;
manualPartyMembers = partyMembersForMode(manualPartyModeIndex);
if (typeof ensurePrototypeRuntimeState === 'function') ensurePrototypeRuntimeState();
partyTrail = [];
syncPartyQuery();
const mutated = {
  members: manualPartyMembers.map((member) => member.name),
  activeLabels: activePartyMembers().map((member) => member.label),
  partyModeIndex: manualPartyModeIndex,
  search: window.location.search,
  runtimeCharacters: (runtimeState?.characters || []).map((character) => character.name),
};
window.__hwanseManualPartyQuickLoad = null;
quickLoadRuntime().then((loaded) => {
  window.__hwanseManualPartyQuickLoad = {
    ok: true,
    loaded,
    scene,
    map: map?.name || '',
    search: window.location.search,
    members: manualPartyMembers.map((member) => member.name),
    activeLabels: activePartyMembers().map((member) => member.label),
    partyModeIndex: manualPartyModeIndex,
    runtimeCharacters: (runtimeState?.characters || []).map((character) => character.name),
    payloadManualParty: payload.manualParty || null,
  };
}).catch((error) => {
  window.__hwanseManualPartyQuickLoad = { ok: false, error: String(error?.message || error) };
});
return {
  ok: true,
  saved,
  before,
  payloadManualParty: payload.manualParty || null,
  payloadRuntimeCharacters: (payload.runtimeState?.characters || []).map((character) => character.name),
  mutated,
};
r   r   r   r   #quick_save_load_manual_party_scriptr  *  s    5r   c                      y)Nz3return window.__hwanseManualPartyQuickLoad || null;r   r   r   r   $manual_party_quick_load_state_scriptr  c  s    @r   c                      y)Na  
let savedPayload = null;
try {
  const savedText = localStorage.getItem(RUNTIME_SAVE_KEY) || '';
  savedPayload = savedText ? JSON.parse(savedText) : null;
} catch (error) {
  savedPayload = { error: String(error?.message || error) };
}
const commands = battleCommandItems();
return {
  scene,
  names: (battleState?.party || []).map((member) => member.name),
  activeName: (battleState?.party || [])[battleState?.activeActorIndex || 0]?.name || "",
  partyHp: (battleState?.party || []).map((member) => ({ name: member.name, hp: member.hp, hpMax: member.hpMax })),
  commands: commands.map((command) => command.name),
  commandDetails: commands.map((command) => ({
    key: command.key || '',
    kind: command.kind || '',
    name: command.name || '',
    nameSource: command.nameSource || '',
    textTableKey: command.textTableKey || '',
    textTableIndex: command.textTableIndex ?? null,
    textTableRefVaHex: command.textTableRefVaHex || '',
    textTableTextVaHex: command.textTableTextVaHex || '',
  })),
  enemyHp: battleState?.enemy?.hp ?? null,
  turnMarker: window.HWANSE_LAST_BATTLE_TURN_RESULT || null,
  turnAutoSave: window.HWANSE_LAST_BATTLE_TURN_AUTO_SAVE || window.HWANSE_LAST_BATTLE_TURN_RESULT?.autoSave || null,
  savedPayload,
};
r   r   r   r   battle_party_state_scriptr  g  s    r   c                      y)Na
  
const actor = battleState?.party?.[0] || null;
const actorCommands = actor ? battleCommandItems(actor) : [];
const attackCommand = actorCommands.find((command) => command.key === 'attack') || null;
const skillCommand = actorCommands.find((command) => command.kind === 'skill') || null;
const skillCommands = actor
  ? actorCommands
      .filter((command) => command.kind === 'skill')
      .map((command) => ({
        name: command.name,
        nameSource: command.nameSource || '',
        textTableKey: command.textTableKey || '',
        textTableIndex: command.textTableIndex ?? null,
        textTableRefVaHex: command.textTableRefVaHex || '',
        textTableTextVaHex: command.textTableTextVaHex || '',
        skillBlock: command.skillBlock,
        skillIndex: command.skillIndex,
        skillLevel: command.skillLevel,
        skillValueHex: command.skillValueHex,
        mpCost: command.mpCost,
      }))
  : [];
return {
  scene,
  names: (battleState?.party || []).map((member) => member.name),
  commands: actorCommands.map((command) => command.name),
  commandDetails: actorCommands.map((command) => ({
    key: command.key || '',
    kind: command.kind || '',
    name: command.name || '',
    nameSource: command.nameSource || '',
    textTableKey: command.textTableKey || '',
    textTableIndex: command.textTableIndex ?? null,
    textTableRefVaHex: command.textTableRefVaHex || '',
    textTableTextVaHex: command.textTableTextVaHex || '',
  })),
  itemCounts: (runtimeState?.items || []).map((item) => [item.name, item.count]),
  actorHp: actor?.hp ?? null,
  actorHpMax: actor?.hpMax ?? null,
  actorMp: actor?.mp ?? null,
  actorMpMax: actor?.mpMax ?? null,
  actorBaseStats: actor?.baseStats || null,
  actorEnhanceStats: actor?.enhanceStats || null,
  actorSkillSummary: actor?.skillSummary || null,
  actorSkillCommands: skillCommands,
  actorAttackCommand: attackCommand ? {
    name: attackCommand.name || '',
    nameSource: attackCommand.nameSource || '',
    textTableKey: attackCommand.textTableKey || '',
    textTableIndex: attackCommand.textTableIndex ?? null,
    textTableRefVaHex: attackCommand.textTableRefVaHex || '',
    textTableTextVaHex: attackCommand.textTableTextVaHex || '',
  } : null,
  actorAttackDamage: actor ? battleAttackDamage(actor, attackCommand) : null,
  actorSkillDamage: actor && skillCommand ? battleAttackDamage(actor, skillCommand) : null,
  actorSkillMpCost: skillCommand?.mpCost ?? null,
  actorIncomingDamage: actor ? battleIncomingDamage(actor, false) : null,
  money: runtimeState?.money ?? null,
};
r   r   r   r   r   r     s    ;r   c                      y)Na  
if (!battleState || !runtimeState) return { ok: false, reason: 'missing state' };
window.HWANSE_BATTLE_SKILL_FEEDBACK_LOG = [];
window.HWANSE_BATTLE_SKILL_FEEDBACK_RENDER = [];
window.HWANSE_LAST_BATTLE_SKILL_FEEDBACK = null;
window.HWANSE_LAST_BATTLE_SKILL_FEEDBACK_RENDER = null;
if (typeof activeBattleSkillFeedbacks !== 'undefined') activeBattleSkillFeedbacks = [];
const actor = battleState.party[0];
battleState.activeActorIndex = 0;
if (battleState.enemy) {
  battleState.enemy.hpMax = Math.max(battleState.enemy.hpMax || 0, 300);
  battleState.enemy.hp = battleState.enemy.hpMax;
}
const commands = battleCommandItems(actor);
const skillIndex = commands.findIndex((command) => command.kind === 'skill');
if (skillIndex < 0) return { ok: false, reason: 'missing skill command', commands: commands.map((command) => command.name) };
const skill = commands[skillIndex];
const before = {
  actor: actor.name,
  mp: actor.mp,
  mpMax: actor.mpMax,
  enemyHp: battleState.enemy.hp,
  command: skill.name,
  mpCost: skill.mpCost,
  damage: battleAttackDamage(actor, skill),
  skillBlock: skill.skillBlock,
  skillIndex: skill.skillIndex,
  skillLevel: skill.skillLevel,
  skillValueHex: skill.skillValueHex,
  nameSource: skill.nameSource || '',
  textTableKey: skill.textTableKey || '',
  textTableIndex: skill.textTableIndex ?? null,
  textTableRefVaHex: skill.textTableRefVaHex || '',
  textTableTextVaHex: skill.textTableTextVaHex || '',
  commands: commands.map((command) => command.name),
};
battleState.selectedCommandIndex = skillIndex;
useSelectedBattleCommand();
if (typeof render === 'function') render();
const autoSave = window.HWANSE_LAST_BATTLE_SKILL_USE_AUTO_SAVE || window.HWANSE_LAST_BATTLE_SKILL_USE?.autoSave || null;
const turnAutoSave = window.HWANSE_LAST_BATTLE_TURN_AUTO_SAVE || window.HWANSE_LAST_BATTLE_TURN_RESULT?.autoSave || null;
let savedPayload = null;
try {
  const savedText = localStorage.getItem(RUNTIME_SAVE_KEY) || '';
  savedPayload = savedText ? JSON.parse(savedText) : null;
} catch (error) {
  savedPayload = { error: String(error?.message || error) };
}
const savedActor = (savedPayload?.runtimeState?.characters || []).find((character) => character.name === actor.name) || null;
const objectiveBefore = prototypeObjectiveState();
const objectiveResult = activatePrototypeObjectiveAction();
const objectiveAction = window.HWANSE_LAST_OBJECTIVE_ACTION || null;
const objectiveCompletionNotice = window.HWANSE_LAST_BATTLE_SKILL_COMPLETION_NOTICE || null;
const objectiveActiveDialogueBlock = activeDialogue?.block || null;
if (typeof render === 'function') render();
return {
  ok: true,
  before,
  after: {
    mp: actor.mp,
    hp: actor.hp,
    statuses: [...(actor.statuses || [])],
    enemyHp: battleState.enemy.hp,
    sourceMp: actor.source?.mp ?? null,
    sourceHp: actor.source?.hp ?? null,
  },
  marker: window.HWANSE_LAST_BATTLE_SKILL_USE || null,
  skillFeedbackLog: window.HWANSE_BATTLE_SKILL_FEEDBACK_LOG || [],
  skillFeedbackRender: window.HWANSE_BATTLE_SKILL_FEEDBACK_RENDER || [],
  skillFeedbackLast: window.HWANSE_LAST_BATTLE_SKILL_FEEDBACK || null,
  skillFeedbackLastRender: window.HWANSE_LAST_BATTLE_SKILL_FEEDBACK_RENDER || null,
  autoSave,
  turnMarker: window.HWANSE_LAST_BATTLE_TURN_RESULT || null,
  turnAutoSave,
  savedPayload,
  savedActor,
  objectiveBefore,
  objectiveResult,
  objectiveAction,
  objectiveCompletionNotice,
  objectiveActiveDialogueBlock,
  log: battleState.log || [],
  nextActor: battleState.party[battleState.activeActorIndex]?.name || '',
};
r   r   r   r   use_savedat_battle_skill_scriptr    s    Tr   c                      y)Nu  
window.__hwanseBattleSkillTitleContinue = null;
if (typeof returnToTitleScreen !== 'function') {
  return { ok: false, reason: 'missing returnToTitleScreen' };
}
returnToTitleScreen();
if (typeof updateRuntimeSaveControls === 'function') updateRuntimeSaveControls();
const items = typeof titleMenuItems === 'function' ? titleMenuItems() : [];
const button = document.getElementById('quickLoadButton');
const index = items.findIndex((item) => item.key === 'continue');
const titleState = {
  scene,
  quickLoadHidden: button?.hidden ?? null,
  quickLoadText: button?.textContent || '',
  titleMenuKeys: items.map((item) => item.key),
  titleMenuLabels: items.map((item) => item.label),
};
if (!button || button.hidden || button.textContent !== '이어하기' || index < 0) {
  window.__hwanseBattleSkillTitleContinue = {
    ok: false,
    pending: false,
    reason: 'continue not ready',
    titleState,
  };
  return window.__hwanseBattleSkillTitleContinue;
}
selectedTitleMenuIndex = index;
const clicked = activateSelectedTitleMenuItem();
window.__hwanseBattleSkillTitleContinue = {
  ok: clicked === true,
  pending: true,
  clicked,
  selectedTitleMenuIndex,
  titleState,
};
return window.__hwanseBattleSkillTitleContinue;
r   r   r   r   0start_savedat_battle_skill_title_continue_scriptr         $r   c                      y)Nay  
const current = window.__hwanseBattleSkillTitleContinue || null;
if (!current) return null;
if (current.done) return current;
if (scene !== 'map' || !map) {
  return {
    ...current,
    pending: true,
    scene,
    map: map?.name || '',
  };
}
let savedPayload = null;
try {
  const savedText = localStorage.getItem(RUNTIME_SAVE_KEY) || '';
  savedPayload = savedText ? JSON.parse(savedText) : null;
} catch (error) {
  savedPayload = { error: String(error?.message || error) };
}
const objectiveBefore = prototypeObjectiveState();
const completion = publishPrototypeCompletionState();
const objectiveResult = activatePrototypeObjectiveAction();
const objectiveAction = window.HWANSE_LAST_OBJECTIVE_ACTION || null;
const objectiveCompletionNotice = window.HWANSE_LAST_BATTLE_SKILL_COMPLETION_NOTICE || null;
const done = {
  ...current,
  ok: current.ok === true,
  pending: false,
  done: true,
  titleContinue: true,
  scene,
  map: map?.name || '',
  tile: footTile(),
  quickLoadText: document.getElementById('quickLoadButton')?.textContent || '',
  progressCounts: ensurePrototypeProgressState().counts || {},
  completion,
  battleSkill: completion?.battleSkill || null,
  objectiveBefore,
  objectiveResult,
  objectiveAction,
  objectiveCompletionNotice,
  activeDialogueBlock: activeDialogue?.block || null,
  savedPayload,
};
window.__hwanseBattleSkillTitleContinue = done;
return done;
r   r   r   r   r   r   H      .r   c                      y)Nu  
window.__hwanseBattleItemTitleContinue = null;
if (typeof returnToTitleScreen !== 'function') {
  return { ok: false, reason: 'missing returnToTitleScreen' };
}
returnToTitleScreen();
if (typeof updateRuntimeSaveControls === 'function') updateRuntimeSaveControls();
const items = typeof titleMenuItems === 'function' ? titleMenuItems() : [];
const button = document.getElementById('quickLoadButton');
const index = items.findIndex((item) => item.key === 'continue');
const titleState = {
  scene,
  quickLoadHidden: button?.hidden ?? null,
  quickLoadText: button?.textContent || '',
  titleMenuKeys: items.map((item) => item.key),
  titleMenuLabels: items.map((item) => item.label),
};
if (!button || button.hidden || button.textContent !== '이어하기' || index < 0) {
  window.__hwanseBattleItemTitleContinue = {
    ok: false,
    pending: false,
    reason: 'continue not ready',
    titleState,
  };
  return window.__hwanseBattleItemTitleContinue;
}
selectedTitleMenuIndex = index;
const clicked = activateSelectedTitleMenuItem();
window.__hwanseBattleItemTitleContinue = {
  ok: clicked === true,
  pending: true,
  clicked,
  selectedTitleMenuIndex,
  titleState,
};
return window.__hwanseBattleItemTitleContinue;
r   r   r   r   /start_savedat_battle_item_title_continue_scriptr  z  r  r   c                      y)Nat  
const current = window.__hwanseBattleItemTitleContinue || null;
if (!current) return null;
if (current.done) return current;
if (scene !== 'map' || !map) {
  return {
    ...current,
    pending: true,
    scene,
    map: map?.name || '',
  };
}
let savedPayload = null;
try {
  const savedText = localStorage.getItem(RUNTIME_SAVE_KEY) || '';
  savedPayload = savedText ? JSON.parse(savedText) : null;
} catch (error) {
  savedPayload = { error: String(error?.message || error) };
}
const objectiveBefore = prototypeObjectiveState();
const completion = publishPrototypeCompletionState();
const objectiveResult = activatePrototypeObjectiveAction();
const objectiveAction = window.HWANSE_LAST_OBJECTIVE_ACTION || null;
const objectiveCompletionNotice = window.HWANSE_LAST_BATTLE_ITEM_COMPLETION_NOTICE || null;
const done = {
  ...current,
  ok: current.ok === true,
  pending: false,
  done: true,
  titleContinue: true,
  scene,
  map: map?.name || '',
  tile: footTile(),
  quickLoadText: document.getElementById('quickLoadButton')?.textContent || '',
  progressCounts: ensurePrototypeProgressState().counts || {},
  completion,
  battleItem: completion?.battleItem || null,
  objectiveBefore,
  objectiveResult,
  objectiveAction,
  objectiveCompletionNotice,
  activeDialogueBlock: activeDialogue?.block || null,
  savedPayload,
};
window.__hwanseBattleItemTitleContinue = done;
return done;
r   r   r   r   r   r     r  r   c                      y)Na1  
if (!battleState || !runtimeState) return { ok: false, reason: 'missing state' };
window.HWANSE_BATTLE_SKILL_FEEDBACK_LOG = [];
window.HWANSE_BATTLE_SKILL_FEEDBACK_RENDER = [];
window.HWANSE_LAST_BATTLE_SKILL_FEEDBACK = null;
window.HWANSE_LAST_BATTLE_SKILL_FEEDBACK_RENDER = null;
if (typeof activeBattleSkillFeedbacks !== 'undefined') activeBattleSkillFeedbacks = [];
const actor = battleState.party[0];
battleState.activeActorIndex = 0;
battleState.itemMenuOpen = false;
if (battleState.enemy) {
  battleState.enemy.hpMax = Math.max(battleState.enemy.hpMax || 0, 700);
  battleState.enemy.hp = battleState.enemy.hpMax;
}
const commands = battleCommandItems(actor);
const skillIndex = commands.findIndex((command) => command.kind === 'skill');
if (skillIndex < 0) return { ok: false, reason: 'missing skill command', commands: commands.map((command) => command.name) };
const skill = commands[skillIndex];
actor.mp = Math.max(0, (skill.mpCost || 0) - 1);
syncBattleMember(actor);
const before = {
  actor: actor.name,
  mp: actor.mp,
  sourceMp: actor.source?.mp ?? null,
  enemyHp: battleState.enemy.hp,
  command: skill.name,
  mpCost: skill.mpCost,
  damage: battleAttackDamage(actor, skill),
  nameSource: skill.nameSource || '',
  textTableKey: skill.textTableKey || '',
  textTableIndex: skill.textTableIndex ?? null,
  textTableRefVaHex: skill.textTableRefVaHex || '',
  textTableTextVaHex: skill.textTableTextVaHex || '',
};
battleState.selectedCommandIndex = skillIndex;
useSelectedBattleCommand();
if (typeof render === 'function') render();
return {
  ok: true,
  before,
  after: {
    mp: actor.mp,
    sourceMp: actor.source?.mp ?? null,
    enemyHp: battleState.enemy.hp,
  },
  skillFeedbackLog: window.HWANSE_BATTLE_SKILL_FEEDBACK_LOG || [],
  skillFeedbackRender: window.HWANSE_BATTLE_SKILL_FEEDBACK_RENDER || [],
  skillFeedbackLast: window.HWANSE_LAST_BATTLE_SKILL_FEEDBACK || null,
  skillFeedbackLastRender: window.HWANSE_LAST_BATTLE_SKILL_FEEDBACK_RENDER || null,
  log: battleState.log || [],
  nextActor: battleState.party[battleState.activeActorIndex]?.name || '',
};
r   r   r   r   %use_savedat_battle_skill_no_mp_scriptr    s    4r   c                      y)Nal  
if (!battleState || !runtimeState) return { ok: false, reason: 'missing state' };
return {
  ok: true,
  members: (battleState.party || []).map((member) => ({
    name: member.name,
    skills: battleCommandItems(member)
      .filter((command) => command.kind === 'skill')
      .map((command) => ({
        name: command.name,
        nameSource: command.nameSource || '',
        textTableKey: command.textTableKey || '',
        textTableIndex: command.textTableIndex ?? null,
        textTableRefVaHex: command.textTableRefVaHex || '',
        textTableTextVaHex: command.textTableTextVaHex || '',
        skillBlock: command.skillBlock,
        skillIndex: command.skillIndex,
        skillLevel: command.skillLevel,
        skillValueHex: command.skillValueHex,
        mpCost: command.mpCost,
        damage: battleAttackDamage(member, command),
      })),
  })),
};
r   r   r   r    savedat_party_skill_state_scriptr    s    r   c                      y)NuQ  
if (!battleState || !runtimeState) return { ok: false, reason: 'missing state' };
const runSkill = (actorName, skillName) => {
  const actorIndex = battleState.party.findIndex((member) => member.name === actorName);
  if (actorIndex < 0) return { ok: false, reason: `missing actor ${actorName}` };
  const actor = battleState.party[actorIndex];
  battleState.activeActorIndex = actorIndex;
  battleState.itemMenuOpen = false;
  actor.hp = actor.hpMax;
  syncBattleMember(actor);
  if (battleState.enemy) {
    battleState.enemy.hpMax = Math.max(battleState.enemy.hpMax || 0, 700);
    battleState.enemy.hp = battleState.enemy.hpMax;
  }
  const commands = battleCommandItems(actor);
  const skillIndex = commands.findIndex((command) => command.kind === 'skill' && (!skillName || command.name === skillName));
  if (skillIndex < 0) return { ok: false, reason: `missing skill ${actorName} ${skillName}`, commands: commands.map((command) => command.name) };
  const skill = commands[skillIndex];
  const before = {
    actor: actor.name,
    mp: actor.mp,
    mpMax: actor.mpMax,
    enemyHp: battleState.enemy.hp,
    command: skill.name,
    mpCost: skill.mpCost,
    damage: battleAttackDamage(actor, skill),
    skillBlock: skill.skillBlock,
    skillIndex: skill.skillIndex,
    skillLevel: skill.skillLevel,
    skillValueHex: skill.skillValueHex,
    nameSource: skill.nameSource || '',
    textTableKey: skill.textTableKey || '',
    textTableIndex: skill.textTableIndex ?? null,
    textTableRefVaHex: skill.textTableRefVaHex || '',
    textTableTextVaHex: skill.textTableTextVaHex || '',
    commands: commands.map((command) => command.name),
  };
  battleState.selectedCommandIndex = skillIndex;
  useSelectedBattleCommand();
  return {
    ok: true,
    before,
    after: {
      mp: actor.mp,
      enemyHp: battleState.enemy.hp,
      sourceMp: actor.source?.mp ?? null,
    },
    log: [...(battleState.log || [])],
    nextActor: battleState.party[battleState.activeActorIndex]?.name || '',
  };
};
return {
  ok: true,
  rinshan: runSkill('Rinshan', '장궁'),
  smashu: runSkill('Smashu', '투구쪼개기'),
};
r   r   r   r   (use_savedat_party_skill_execution_scriptr  (      8r   c                      y)Na<  
if (!battleState || !runtimeState) return { ok: false, reason: 'missing state' };
window.HWANSE_BATTLE_ITEM_FEEDBACK_LOG = [];
window.HWANSE_BATTLE_ITEM_FEEDBACK_RENDER = [];
window.HWANSE_LAST_BATTLE_ITEM_FEEDBACK = null;
window.HWANSE_LAST_BATTLE_ITEM_FEEDBACK_RENDER = null;
if (typeof activeBattleItemFeedbacks !== 'undefined') activeBattleItemFeedbacks = [];
const actor = battleState.party[0];
battleState.activeActorIndex = 0;
actor.hp = Math.max(1, actor.hpMax - 20);
syncBattleMember(actor);
const itemCommandIndex = battleCommandItems(actor).findIndex((command) => command.key === 'item');
battleState.selectedCommandIndex = Math.max(0, itemCommandIndex);
const firstItem = runtimeState.items.find((item) => item.key === 'herb' && item.count > 0)
  || runtimeState.items.find((item) => item.count > 0);
const before = {
  hp: actor.hp,
  hpMax: actor.hpMax,
  count: firstItem?.count ?? 0,
  item: firstItem?.name || '',
};
const commandResult = useSelectedBattleCommand();
const openedItemMenu = battleState.itemMenuOpen === true;
const itemMenuLabels = battleInventoryItems().map((item) => `${item.name} x${item.count}`);
if (battleState.itemMenuOpen) {
  battleState.selectedItemIndex = Math.max(0, battleInventoryItems().findIndex((item) => item.key === firstItem?.key));
  useSelectedBattleCommand();
}
const targetMenuLabels = battleState.targetMenuOpen
  ? battleItemTargetItems().map((target) => target.name)
  : [];
if (battleState.targetMenuOpen) {
  const targetIndex = battleItemTargetItems().findIndex((target) => target.member?.name === actor.name);
  battleState.selectedTargetIndex = Math.max(0, targetIndex);
  useSelectedBattleCommand();
}
if (typeof render === 'function') render();
const afterItem = runtimeState.items.find((item) => item.name === before.item) || {};
const autoSave = window.HWANSE_LAST_BATTLE_ITEM_USE_AUTO_SAVE || window.HWANSE_LAST_BATTLE_ITEM_USE?.autoSave || null;
const turnAutoSave = window.HWANSE_LAST_BATTLE_TURN_AUTO_SAVE || window.HWANSE_LAST_BATTLE_TURN_RESULT?.autoSave || null;
let savedPayload = null;
try {
  const savedText = localStorage.getItem(RUNTIME_SAVE_KEY) || '';
  savedPayload = savedText ? JSON.parse(savedText) : null;
} catch (error) {
  savedPayload = { error: String(error?.message || error) };
}
const objectiveBefore = prototypeObjectiveState();
const objectiveResult = activatePrototypeObjectiveAction();
const objectiveAction = window.HWANSE_LAST_OBJECTIVE_ACTION || null;
const objectiveCompletionNotice = window.HWANSE_LAST_BATTLE_ITEM_COMPLETION_NOTICE || null;
const objectiveActiveDialogueBlock = activeDialogue?.block || null;
return {
  ok: true,
  before,
  after: {
    hp: actor.hp,
    hpMax: actor.hpMax,
    count: afterItem.count ?? null,
  },
  commandResult,
  openedItemMenu,
  itemMenuLabels,
  targetMenuLabels,
  targetSelectionMarker: window.HWANSE_LAST_BATTLE_ITEM_TARGET_SELECTION || null,
  targetSelectionLog: window.HWANSE_BATTLE_ITEM_TARGET_SELECTION_LOG || [],
  marker: window.HWANSE_LAST_BATTLE_ITEM_USE || null,
  itemFeedbackLog: window.HWANSE_BATTLE_ITEM_FEEDBACK_LOG || [],
  itemFeedbackRender: window.HWANSE_BATTLE_ITEM_FEEDBACK_RENDER || [],
  itemFeedbackLast: window.HWANSE_LAST_BATTLE_ITEM_FEEDBACK || null,
  itemFeedbackLastRender: window.HWANSE_LAST_BATTLE_ITEM_FEEDBACK_RENDER || null,
  autoSave,
  turnMarker: window.HWANSE_LAST_BATTLE_TURN_RESULT || null,
  turnAutoSave,
  savedPayload,
  objectiveBefore,
  objectiveResult,
  objectiveAction,
  objectiveCompletionNotice,
  objectiveActiveDialogueBlock,
  log: battleState.log || [],
  nextActor: battleState.party[battleState.activeActorIndex]?.name || '',
};
r   r   r   r   use_savedat_battle_item_scriptr  d  s    Sr   c                      y)Nu  
if (!battleState || !runtimeState) return { ok: false, reason: 'missing state' };
window.HWANSE_BATTLE_ITEM_FEEDBACK_LOG = [];
window.HWANSE_BATTLE_ITEM_FEEDBACK_RENDER = [];
window.HWANSE_LAST_BATTLE_ITEM_FEEDBACK = null;
window.HWANSE_LAST_BATTLE_ITEM_FEEDBACK_RENDER = null;
if (typeof activeBattleItemFeedbacks !== 'undefined') activeBattleItemFeedbacks = [];
const rinshanIndex = battleState.party.findIndex((member) => member.name === 'Rinshan');
if (rinshanIndex >= 0) battleState.activeActorIndex = rinshanIndex;
const actor = battleState.party[battleState.activeActorIndex] || battleState.party[0];
actor.mp = Math.max(0, actor.mpMax - 60);
syncBattleMember(actor);
let potion = runtimeState.items.find((item) => item.key === 'mp_recovery');
if (!potion) {
  potion = { key: 'mp_recovery', name: saveItemName('mp_recovery', '마법의 물약'), count: 0 };
  runtimeState.items.push(potion);
}
potion.count = 1;
const herb = runtimeState.items.find((item) => item.key === 'herb');
if (herb && herb.count <= 0) herb.count = 1;
const itemCommandIndex = battleCommandItems(actor).findIndex((command) => command.key === 'item');
battleState.selectedCommandIndex = Math.max(0, itemCommandIndex);
battleState.selectedItemIndex = 0;
battleState.itemMenuOpen = false;
const before = {
  actor: actor.name,
  mp: actor.mp,
  mpMax: actor.mpMax,
  potionCount: potion.count,
  inventoryLabels: battleInventoryItems().map((item) => `${item.name} x${item.count}`),
};
useSelectedBattleCommand();
const opened = battleState.itemMenuOpen === true;
const labels = battleInventoryItems().map((item) => `${item.name} x${item.count}`);
battleState.selectedItemIndex = Math.max(0, battleInventoryItems().findIndex((item) => item.key === 'mp_recovery'));
useSelectedBattleCommand();
const targetLabels = battleState.targetMenuOpen
  ? battleItemTargetItems().map((target) => target.name)
  : [];
if (battleState.targetMenuOpen) {
  const targetIndex = battleItemTargetItems().findIndex((target) => target.member?.name === actor.name);
  battleState.selectedTargetIndex = Math.max(0, targetIndex);
  useSelectedBattleCommand();
}
if (typeof render === 'function') render();
const afterPotion = runtimeState.items.find((item) => item.key === 'mp_recovery') || {};
const autoSave = window.HWANSE_LAST_BATTLE_ITEM_USE_AUTO_SAVE || window.HWANSE_LAST_BATTLE_ITEM_USE?.autoSave || null;
const turnAutoSave = window.HWANSE_LAST_BATTLE_TURN_AUTO_SAVE || window.HWANSE_LAST_BATTLE_TURN_RESULT?.autoSave || null;
let savedPayload = null;
try {
  const savedText = localStorage.getItem(RUNTIME_SAVE_KEY) || '';
  savedPayload = savedText ? JSON.parse(savedText) : null;
} catch (error) {
  savedPayload = { error: String(error?.message || error) };
}
const objectiveBefore = prototypeObjectiveState();
const objectiveResult = activatePrototypeObjectiveAction();
const objectiveAction = window.HWANSE_LAST_OBJECTIVE_ACTION || null;
const objectiveCompletionNotice = window.HWANSE_LAST_BATTLE_ITEM_COMPLETION_NOTICE || null;
const objectiveActiveDialogueBlock = activeDialogue?.block || null;
return {
  ok: true,
  opened,
  before,
  labels,
  targetLabels,
  targetSelectionMarker: window.HWANSE_LAST_BATTLE_ITEM_TARGET_SELECTION || null,
  targetSelectionLog: window.HWANSE_BATTLE_ITEM_TARGET_SELECTION_LOG || [],
  after: {
    mp: actor.mp,
    mpMax: actor.mpMax,
    potionCount: afterPotion.count ?? null,
    itemMenuOpen: battleState.itemMenuOpen === true,
  },
  marker: window.HWANSE_LAST_BATTLE_ITEM_USE || null,
  itemFeedbackLog: window.HWANSE_BATTLE_ITEM_FEEDBACK_LOG || [],
  itemFeedbackRender: window.HWANSE_BATTLE_ITEM_FEEDBACK_RENDER || [],
  itemFeedbackLast: window.HWANSE_LAST_BATTLE_ITEM_FEEDBACK || null,
  itemFeedbackLastRender: window.HWANSE_LAST_BATTLE_ITEM_FEEDBACK_RENDER || null,
  autoSave,
  turnMarker: window.HWANSE_LAST_BATTLE_TURN_RESULT || null,
  turnAutoSave,
  savedPayload,
  objectiveBefore,
  objectiveResult,
  objectiveAction,
  objectiveCompletionNotice,
  objectiveActiveDialogueBlock,
  log: battleState.log || [],
  nextActor: battleState.party[battleState.activeActorIndex]?.name || '',
};
r   r   r   r   #use_savedat_battle_item_menu_scriptr    s    [r   c                      y)NuK  
if (!battleState || !runtimeState) return { ok: false, reason: 'missing state' };
window.HWANSE_BATTLE_ITEM_FEEDBACK_LOG = [];
window.HWANSE_BATTLE_ITEM_FEEDBACK_RENDER = [];
window.HWANSE_LAST_BATTLE_ITEM_FEEDBACK = null;
window.HWANSE_LAST_BATTLE_ITEM_FEEDBACK_RENDER = null;
if (typeof activeBattleItemFeedbacks !== 'undefined') activeBattleItemFeedbacks = [];
const actor = battleState.party[battleState.activeActorIndex] || battleState.party[0];
actor.statuses = ['poison'];
syncBattleMember(actor);
let antidote = runtimeState.items.find((item) => item.key === 'item_2');
if (!antidote) {
  antidote = { key: 'item_2', name: saveItemName('item_2', '해독초'), count: 0 };
  runtimeState.items.push(antidote);
}
antidote.count = 1;
const itemCommandIndex = battleCommandItems(actor).findIndex((command) => command.key === 'item');
battleState.selectedCommandIndex = Math.max(0, itemCommandIndex);
battleState.itemMenuOpen = true;
battleState.selectedItemIndex = Math.max(0, battleInventoryItems().findIndex((item) => item.key === 'item_2'));
const before = {
  actor: actor.name,
  statuses: [...(actor.statuses || [])],
  antidoteCount: antidote.count,
  labels: battleInventoryItems().map((item) => `${item.name} x${item.count}`),
};
useSelectedBattleCommand();
const targetLabels = battleState.targetMenuOpen
  ? battleItemTargetItems().map((target) => target.name)
  : [];
if (battleState.targetMenuOpen) {
  const targetIndex = battleItemTargetItems().findIndex((target) => target.member?.name === actor.name);
  battleState.selectedTargetIndex = Math.max(0, targetIndex);
  useSelectedBattleCommand();
}
if (typeof render === 'function') render();
const afterAntidote = runtimeState.items.find((item) => item.key === 'item_2') || {};
const autoSave = window.HWANSE_LAST_BATTLE_ITEM_USE_AUTO_SAVE || window.HWANSE_LAST_BATTLE_ITEM_USE?.autoSave || null;
const turnAutoSave = window.HWANSE_LAST_BATTLE_TURN_AUTO_SAVE || window.HWANSE_LAST_BATTLE_TURN_RESULT?.autoSave || null;
let savedPayload = null;
try {
  const savedText = localStorage.getItem(RUNTIME_SAVE_KEY) || '';
  savedPayload = savedText ? JSON.parse(savedText) : null;
} catch (error) {
  savedPayload = { error: String(error?.message || error) };
}
const objectiveBefore = prototypeObjectiveState();
const objectiveResult = activatePrototypeObjectiveAction();
const objectiveAction = window.HWANSE_LAST_OBJECTIVE_ACTION || null;
const objectiveCompletionNotice = window.HWANSE_LAST_BATTLE_ITEM_COMPLETION_NOTICE || null;
const objectiveActiveDialogueBlock = activeDialogue?.block || null;
return {
  ok: true,
  before,
  targetLabels,
  targetSelectionMarker: window.HWANSE_LAST_BATTLE_ITEM_TARGET_SELECTION || null,
  targetSelectionLog: window.HWANSE_BATTLE_ITEM_TARGET_SELECTION_LOG || [],
  after: {
    statuses: [...(actor.statuses || [])],
    sourceStatuses: [...(actor.source?.statuses || [])],
    antidoteCount: afterAntidote.count ?? null,
    itemMenuOpen: battleState.itemMenuOpen === true,
  },
  marker: window.HWANSE_LAST_BATTLE_ITEM_USE || null,
  itemFeedbackLog: window.HWANSE_BATTLE_ITEM_FEEDBACK_LOG || [],
  itemFeedbackRender: window.HWANSE_BATTLE_ITEM_FEEDBACK_RENDER || [],
  itemFeedbackLast: window.HWANSE_LAST_BATTLE_ITEM_FEEDBACK || null,
  itemFeedbackLastRender: window.HWANSE_LAST_BATTLE_ITEM_FEEDBACK_RENDER || null,
  autoSave,
  turnMarker: window.HWANSE_LAST_BATTLE_TURN_RESULT || null,
  turnAutoSave,
  savedPayload,
  objectiveBefore,
  objectiveResult,
  objectiveAction,
  objectiveCompletionNotice,
  objectiveActiveDialogueBlock,
  log: battleState.log || [],
  nextActor: battleState.party[battleState.activeActorIndex]?.name || '',
};
r   r   r   r   %use_savedat_battle_status_item_scriptr        Pr   c                      y)Nu  
if (!battleState || !runtimeState) return { ok: false, reason: 'missing state' };
window.HWANSE_BATTLE_ITEM_FEEDBACK_LOG = [];
window.HWANSE_BATTLE_ITEM_FEEDBACK_RENDER = [];
window.HWANSE_LAST_BATTLE_ITEM_FEEDBACK = null;
window.HWANSE_LAST_BATTLE_ITEM_FEEDBACK_RENDER = null;
if (typeof activeBattleItemFeedbacks !== 'undefined') activeBattleItemFeedbacks = [];
const actor = battleState.party[battleState.activeActorIndex] || battleState.party[0];
const fallen = battleState.party.find((member) => member.name === 'Smashu') || battleState.party[battleState.party.length - 1];
fallen.hp = 0;
fallen.mp = 0;
syncBattleMember(fallen);
let herb = runtimeState.items.find((item) => item.key === 'herb');
if (!herb) {
  herb = { key: 'herb', name: saveItemName('herb', '약초'), count: 0 };
  runtimeState.items.push(herb);
}
herb.count = Math.max(1, herb.count || 0);
let stone = runtimeState.items.find((item) => item.key === 'item_6');
if (!stone) {
  stone = { key: 'item_6', name: saveItemName('item_6', '마수석'), count: 0 };
  runtimeState.items.push(stone);
}
stone.count = 1;
const herbTarget = itemEffectTargetCharacter('herb', battleState.party, actor);
const itemCommandIndex = battleCommandItems(actor).findIndex((command) => command.key === 'item');
battleState.selectedCommandIndex = Math.max(0, itemCommandIndex);
battleState.itemMenuOpen = true;
battleState.selectedItemIndex = Math.max(0, battleInventoryItems().findIndex((item) => item.key === 'item_6'));
const before = {
  actor: actor.name,
  fallen: fallen.name,
  fallenHp: fallen.hp,
  fallenHpMax: fallen.hpMax,
  fallenMp: fallen.mp,
  fallenMpMax: fallen.mpMax,
  herbTarget: herbTarget?.name || '',
  stoneCount: stone.count,
  labels: battleInventoryItems().map((item) => `${item.name} x${item.count}`),
};
useSelectedBattleCommand();
const targetLabels = battleState.targetMenuOpen
  ? battleItemTargetItems().map((target) => target.name)
  : [];
if (battleState.targetMenuOpen) {
  const targetIndex = battleItemTargetItems().findIndex((target) => target.member?.name === fallen.name);
  battleState.selectedTargetIndex = Math.max(0, targetIndex);
  useSelectedBattleCommand();
}
if (typeof render === 'function') render();
const afterStone = runtimeState.items.find((item) => item.key === 'item_6') || {};
const autoSave = window.HWANSE_LAST_BATTLE_ITEM_USE_AUTO_SAVE || window.HWANSE_LAST_BATTLE_ITEM_USE?.autoSave || null;
const turnAutoSave = window.HWANSE_LAST_BATTLE_TURN_AUTO_SAVE || window.HWANSE_LAST_BATTLE_TURN_RESULT?.autoSave || null;
let savedPayload = null;
try {
  const savedText = localStorage.getItem(RUNTIME_SAVE_KEY) || '';
  savedPayload = savedText ? JSON.parse(savedText) : null;
} catch (error) {
  savedPayload = { error: String(error?.message || error) };
}
const objectiveBefore = prototypeObjectiveState();
const objectiveResult = activatePrototypeObjectiveAction();
const objectiveAction = window.HWANSE_LAST_OBJECTIVE_ACTION || null;
const objectiveCompletionNotice = window.HWANSE_LAST_BATTLE_ITEM_COMPLETION_NOTICE || null;
const objectiveActiveDialogueBlock = activeDialogue?.block || null;
return {
  ok: true,
  before,
  targetLabels,
  targetSelectionMarker: window.HWANSE_LAST_BATTLE_ITEM_TARGET_SELECTION || null,
  targetSelectionLog: window.HWANSE_BATTLE_ITEM_TARGET_SELECTION_LOG || [],
  after: {
    hp: fallen.hp,
    hpMax: fallen.hpMax,
    mp: fallen.mp,
    mpMax: fallen.mpMax,
    sourceHp: fallen.source?.hp ?? null,
    sourceMp: fallen.source?.mp ?? null,
    stoneCount: afterStone.count ?? null,
    itemMenuOpen: battleState.itemMenuOpen === true,
  },
  marker: window.HWANSE_LAST_BATTLE_ITEM_USE || null,
  itemFeedbackLog: window.HWANSE_BATTLE_ITEM_FEEDBACK_LOG || [],
  itemFeedbackRender: window.HWANSE_BATTLE_ITEM_FEEDBACK_RENDER || [],
  itemFeedbackLast: window.HWANSE_LAST_BATTLE_ITEM_FEEDBACK || null,
  itemFeedbackLastRender: window.HWANSE_LAST_BATTLE_ITEM_FEEDBACK_RENDER || null,
  autoSave,
  turnMarker: window.HWANSE_LAST_BATTLE_TURN_RESULT || null,
  turnAutoSave,
  savedPayload,
  objectiveBefore,
  objectiveResult,
  objectiveAction,
  objectiveCompletionNotice,
  objectiveActiveDialogueBlock,
  log: battleState.log || [],
  nextActor: battleState.party[battleState.activeActorIndex]?.name || '',
};
r   r   r   r   %use_savedat_battle_revive_item_scriptr  n  s    br   c                      y)Na  
return {
  scene,
  map: map?.name || "",
  menuOpen,
  itemCounts: (runtimeState?.items || []).map((item) => [item.name, item.count]),
  ataho: runtimeState?.characters?.find((character) => character.name === 'Ataho') || null,
  characterLines: menuCharacters().flatMap((character) => [
    `${character.name} ${character.detail}`,
    character.subdetail ? `  ${character.subdetail}` : '',
  ]).filter(Boolean),
  labels: menuItems().map((item) => menuItemLabel(item)),
  notice: menuNotice,
};
r   r   r   r   r   r         r   c                      y)Na  
menuOpen = true;
activeDialogue = null;
window.HWANSE_SAVE_POINT_FEEDBACK_LOG = [];
window.HWANSE_SAVE_POINT_FEEDBACK_RENDER = [];
window.HWANSE_LAST_SAVE_POINT_FEEDBACK = null;
window.HWANSE_LAST_SAVE_POINT_FEEDBACK_RENDER = null;
if (typeof activeSavePointFeedbacks !== 'undefined') activeSavePointFeedbacks = [];
const items = menuItems();
const directIndex = items.findIndex((item) => item.command === 'showSavePointCandidates');
const index = items.findIndex((item) => item.command === 'openSavePointCandidateMenu');
const labels = items.map((item) => menuItemLabel(item));
if (index < 0) {
  window.__hwanseSavePointCandidateMenu = { ok: false, reason: 'missing save-point candidate menu command', labels, directIndex };
  return window.__hwanseSavePointCandidateMenu;
}
selectedMenuItemIndex = index;
const commandResult = useSelectedMenuItem();
window.__hwanseSavePointCandidateMenu = {
  ok: true,
  index,
  directIndex,
  labels,
  commandResult,
  notice: menuNotice,
};
return window.__hwanseSavePointCandidateMenu;
r   r   r   r   &start_save_point_candidate_menu_scriptr    s    r   c                      y)Na  
if (typeof render === 'function') render();
const last = window.HWANSE_LAST_SAVE_POINT_CANDIDATES || null;
let savedPayload = null;
try {
  const text = localStorage.getItem(RUNTIME_SAVE_KEY) || '';
  savedPayload = text ? JSON.parse(text) : null;
} catch (error) {
  savedPayload = { error: String(error && error.message || error) };
}
return {
  marker: window.__hwanseSavePointCandidateMenu || null,
  scene,
  map: map?.name || '',
  menuOpen,
  menuMode,
  notice: menuNotice,
  loadedCount: window.HWANSE_SAVE_POINT_CANDIDATES?.candidateCount ?? 0,
  originalSavePointRuntimeImplemented: window.HWANSE_SAVE_POINT_CANDIDATES?.originalSavePointRuntimeImplemented ?? null,
  last,
  runtimeSave: window.HWANSE_LAST_SAVE_POINT_RUNTIME_SAVE || null,
  completion: window.HWANSE_LAST_PROTOTYPE_COMPLETION || null,
  progress: window.HWANSE_LAST_PROTOTYPE_PROGRESS || null,
  savePointFeedbackLog: window.HWANSE_SAVE_POINT_FEEDBACK_LOG || [],
  savePointFeedbackRender: window.HWANSE_SAVE_POINT_FEEDBACK_RENDER || [],
  savePointFeedbackLast: window.HWANSE_LAST_SAVE_POINT_FEEDBACK || null,
  savePointFeedbackLastRender: window.HWANSE_LAST_SAVE_POINT_FEEDBACK_RENDER || null,
  savedPayload,
  activeId: activeDialogue?.block?.blockId || '',
  activeIndex: activeDialogue?.index ?? null,
  activeLines: activeDialogue?.lines?.slice(0, 12) || [],
  labels: menuItems().map((item) => menuItemLabel(item)),
};
r   r   r   r   rf  rf    s    !r   c                      y)Nz
return {
  scene,
  map: map?.name || '',
  showEventHotspots,
  search: window.location.search,
  assetKeys: Object.keys(window.HWANSE_OBJECT_ASSETS || {}).sort(),
  render: window.HWANSE_LAST_EVENT_OBJECT_RENDER || null,
};
r   r   r   r   rq  rq  *  r  r   c                      y)Nu  
if (!runtimeState) return { ok: false, reason: 'missing runtimeState' };
window.HWANSE_INVENTORY_ITEM_FEEDBACK_LOG = [];
window.HWANSE_INVENTORY_ITEM_FEEDBACK_RENDER = [];
window.HWANSE_LAST_INVENTORY_ITEM_FEEDBACK = null;
window.HWANSE_LAST_INVENTORY_ITEM_FEEDBACK_RENDER = null;
if (typeof activeInventoryItemFeedbacks !== 'undefined') activeInventoryItemFeedbacks = [];
menuOpen = true;
menuMode = 'main';
selectedMenuItemIndex = 0;
const ataho = runtimeState.characters.find((character) => character.name === 'Ataho');
ataho.hp = Math.max(1, ataho.hpMax - 30);
const beforeItem = runtimeState.items.find((item) => item.name === '약초') || runtimeState.items[0];
const before = { hp: ataho.hp, hpMax: ataho.hpMax, count: beforeItem?.count ?? 0 };
const mainItems = menuItems();
const inventoryMenuIndex = mainItems.findIndex((item) => item.command === 'openInventoryItemMenu');
if (inventoryMenuIndex < 0) {
  return { ok: false, reason: 'missing inventory menu', labels: mainItems.map((item) => menuItemLabel(item)) };
}
selectedMenuItemIndex = inventoryMenuIndex;
const menuOpenResult = useSelectedMenuItem();
const inventoryOpenMarker = window.HWANSE_LAST_INVENTORY_ITEM_SELECT_MENU || null;
const inventoryItems = menuItems();
const itemIndex = inventoryItems.findIndex((item) => !item.command && item.key === beforeItem.key);
if (itemIndex < 0) {
  return {
    ok: false,
    reason: 'missing savedat inventory item',
    menuOpenResult,
    inventoryOpenMarker,
    inventoryLabels: inventoryItems.map((item) => menuItemLabel(item)),
  };
}
selectedMenuItemIndex = itemIndex;
useSelectedMenuItem();
if (typeof render === 'function') render();
const itemUseNotice = menuNotice;
const afterItem = runtimeState.items.find((item) => item.key === beforeItem.key) || {};
const autoSave = window.HWANSE_LAST_INVENTORY_ITEM_USE_AUTO_SAVE || window.HWANSE_LAST_INVENTORY_ITEM_USE?.autoSave || null;
let savedPayload = null;
try {
  const savedText = localStorage.getItem(RUNTIME_SAVE_KEY) || '';
  savedPayload = savedText ? JSON.parse(savedText) : null;
} catch (error) {
  savedPayload = { error: String(error?.message || error) };
}
const objectiveBefore = prototypeObjectiveState();
const objectiveResult = activatePrototypeObjectiveAction();
const objectiveAction = window.HWANSE_LAST_OBJECTIVE_ACTION || null;
const objectiveCompletionNotice = window.HWANSE_LAST_ITEM_USE_COMPLETION_NOTICE || null;
const objectiveActiveDialogueBlock = activeDialogue?.block || null;
activeDialogue = null;
return {
	  ok: true,
	  selectedMenuItemIndex: itemIndex,
	  menuOpenResult,
	  inventoryOpenMarker,
	  inventorySelectionMarker: window.HWANSE_LAST_INVENTORY_ITEM_MENU_SELECTION || null,
	  inventoryLabels: inventoryItems.map((item) => menuItemLabel(item)),
	  before,
  after: {
    hp: ataho.hp,
    hpMax: ataho.hpMax,
    count: afterItem.count ?? null,
  },
  marker: window.HWANSE_LAST_INVENTORY_ITEM_USE || null,
  inventoryFeedbackLog: window.HWANSE_INVENTORY_ITEM_FEEDBACK_LOG || [],
  inventoryFeedbackRender: window.HWANSE_INVENTORY_ITEM_FEEDBACK_RENDER || [],
  inventoryFeedbackLast: window.HWANSE_LAST_INVENTORY_ITEM_FEEDBACK || null,
  inventoryFeedbackLastRender: window.HWANSE_LAST_INVENTORY_ITEM_FEEDBACK_RENDER || null,
  autoSave,
  savedPayload,
  objectiveBefore,
  objectiveResult,
  objectiveAction,
  objectiveCompletionNotice,
  objectiveActiveDialogueBlock,
  notice: itemUseNotice,
  labels: menuItems().map((item) => menuItemLabel(item)),
};
r   r   r   r   use_savedat_menu_item_scriptr  7  r  r   c                      y)NuN  
if (!runtimeState) return { ok: false, reason: 'missing runtimeState' };
menuOpen = true;
menuMode = 'main';
selectedMenuItemIndex = 0;
const ataho = runtimeState.characters.find((character) => character.name === 'Ataho');
ataho.statuses = ['poison', 'paralysis'];
let antidote = runtimeState.items.find((item) => item.key === 'item_2');
if (!antidote) {
  antidote = { key: 'item_2', name: saveItemName('item_2', '해독초'), count: 0 };
  runtimeState.items.push(antidote);
}
antidote.count = 1;
const mainItems = menuItems();
const inventoryMenuIndex = mainItems.findIndex((item) => item.command === 'openInventoryItemMenu');
if (inventoryMenuIndex < 0) {
  return { ok: false, reason: 'missing inventory menu', labels: mainItems.map((item) => menuItemLabel(item)) };
}
selectedMenuItemIndex = inventoryMenuIndex;
const menuOpenResult = useSelectedMenuItem();
const inventoryOpenMarker = window.HWANSE_LAST_INVENTORY_ITEM_SELECT_MENU || null;
const items = menuItems();
const itemIndex = items.findIndex((item) => !item.command && item.key === 'item_2');
if (itemIndex < 0) {
  return {
    ok: false,
    reason: 'missing antidote inventory item',
    menuOpenResult,
    inventoryOpenMarker,
    labels: items.map((item) => menuItemLabel(item)),
  };
}
selectedMenuItemIndex = itemIndex;
const before = {
  statuses: [...(ataho.statuses || [])],
  antidoteCount: antidote.count,
  labels: items.map((item) => menuItemLabel(item)),
};
useSelectedMenuItem();
const afterAntidote = runtimeState.items.find((item) => item.key === 'item_2') || {};
return {
	  ok: true,
	  selectedMenuItemIndex: itemIndex,
	  menuOpenResult,
	  inventoryOpenMarker,
	  inventorySelectionMarker: window.HWANSE_LAST_INVENTORY_ITEM_MENU_SELECTION || null,
	  before,
  after: {
    statuses: [...(ataho.statuses || [])],
    antidoteCount: afterAntidote.count ?? null,
  },
  notice: menuNotice,
  characterLines: menuCharacters().flatMap((character) => [
    `${character.name} ${character.detail}`,
    character.subdetail ? `  ${character.subdetail}` : '',
  ]).filter(Boolean),
  labels: menuItems().map((item) => menuItemLabel(item)),
};
r   r   r   r   #use_savedat_menu_status_item_scriptr    s    :r   c                      y)Nu  
if (!runtimeState) return { ok: false, reason: 'missing runtimeState' };
menuOpen = true;
const atahoBeforeSave = runtimeState.characters.find((character) => character.name === 'Ataho');
if (atahoBeforeSave) atahoBeforeSave.statuses = ['poison'];
const saveItems = menuItems();
const saveIndex = saveItems.findIndex((item) => item.command === 'quickSave');
if (saveIndex < 0) return { ok: false, reason: 'missing quickSave command', labels: saveItems.map((item) => menuItemLabel(item)) };
selectedMenuItemIndex = saveIndex;
const saveLabels = saveItems.map((item) => menuItemLabel(item));
const saveCommandResult = useSelectedMenuItem();
const saveNotice = menuNotice;
const payload = JSON.parse(localStorage.getItem(RUNTIME_SAVE_KEY) || '{}');
const savedItem = (payload.runtimeState?.items || []).find((item) => item.name === '약초') || {};
const savedAtaho = (payload.runtimeState?.characters || []).find((character) => character.name === 'Ataho') || {};
const liveItem = runtimeState.items.find((item) => item.name === '약초') || runtimeState.items[0];
const liveAtaho = runtimeState.characters.find((character) => character.name === 'Ataho');
if (liveItem) liveItem.count = 0;
if (liveAtaho) liveAtaho.hp = 1;
if (liveAtaho) liveAtaho.statuses = [];
menuOpen = true;
const loadItems = menuItems();
const loadIndex = loadItems.findIndex((item) => item.command === 'quickLoad');
const loadLabels = loadItems.map((item) => menuItemLabel(item));
if (loadIndex < 0) return { ok: false, reason: 'missing quickLoad command', saveLabels, loadLabels };
window.__hwanseMenuItemQuickLoad = null;
selectedMenuItemIndex = loadIndex;
const loadCommandResult = useSelectedMenuItem();
const loadNoticeStart = menuNotice;
let loadPollCount = 0;
function finishMenuCommandQuickLoad(ok, extra = {}) {
  const loadedItem = (runtimeState?.items || []).find((item) => item.name === '약초') || {};
  const loadedAtaho = (runtimeState?.characters || []).find((character) => character.name === 'Ataho') || {};
  const saveMapValues = [...document.getElementById('saveMapSelect').options].map((option) => option.value).filter(Boolean);
  window.__hwanseMenuItemQuickLoad = {
    ok,
    scene,
    map: map?.name || '',
    loadedCount: loadedItem.count ?? null,
    loadedHp: loadedAtaho.hp ?? null,
    loadedStatus: [...(loadedAtaho.statuses || [])],
    fieldMaps: loadedSaveSummary?.fieldMaps || [],
    routeStatus: loadedSaveSummary?.routeEvidence?.status || '',
    saveMapHidden: document.getElementById('saveMapSelect').hidden,
    saveMapValues,
    notice: menuNotice,
    loadCommandResult,
    loadNoticeStart,
    loadLabelsAfter: menuItems().map((item) => menuItemLabel(item)),
    ...extra,
  };
}
function pollMenuCommandQuickLoad() {
  loadPollCount += 1;
  if (menuNotice === '임시 저장을 불러왔습니다.' || menuNotice === '불러올 임시 저장이 없습니다.' || loadPollCount >= 80) {
    finishMenuCommandQuickLoad(menuNotice === '임시 저장을 불러왔습니다.', { loadPollCount });
    return;
  }
  window.setTimeout(pollMenuCommandQuickLoad, 50);
}
try {
  pollMenuCommandQuickLoad();
} catch (error) {
  finishMenuCommandQuickLoad(false, { error: String(error?.message || error) });
}
return {
  ok: true,
  saveIndex,
  loadIndex,
  saveLabels,
  loadLabels,
  saveCommandResult,
  loadCommandResult,
  saveNotice,
  loadNoticeStart,
  saved: !!payload.version,
  savedCount: savedItem.count ?? null,
  savedHp: savedAtaho.hp ?? null,
  savedStatus: [...(savedAtaho.statuses || [])],
  savedFieldMaps: payload.loadedSaveSummary?.fieldMaps || [],
  savedRouteStatus: payload.loadedSaveSummary?.routeEvidence?.status || '',
  mutatedCount: liveItem?.count ?? null,
  mutatedHp: liveAtaho?.hp ?? null,
  mutatedStatus: [...(liveAtaho?.statuses || [])],
};
r   r   r   r   (quick_save_load_savedat_menu_item_scriptr    s    Ur   c                      y)Nz0return window.__hwanseMenuItemQuickLoad || null;r   r   r   r   r   r   "	  s    =r   c                      y)Nu  
window.__hwanseSavedatMenuItemTitleContinue = null;
if (typeof returnToTitleScreen !== 'function') {
  return { ok: false, reason: 'missing returnToTitleScreen' };
}
returnToTitleScreen();
if (typeof updateRuntimeSaveControls === 'function') updateRuntimeSaveControls();
const items = typeof titleMenuItems === 'function' ? titleMenuItems() : [];
const button = document.getElementById('quickLoadButton');
const index = items.findIndex((item) => item.key === 'continue');
const titleState = {
  scene,
  quickLoadHidden: button?.hidden ?? null,
  quickLoadText: button?.textContent || '',
  titleMenuKeys: items.map((item) => item.key),
  titleMenuLabels: items.map((item) => item.label),
};
if (!button || button.hidden || button.textContent !== '이어하기' || index < 0) {
  window.__hwanseSavedatMenuItemTitleContinue = {
    ok: false,
    pending: false,
    reason: 'continue not ready',
    titleState,
  };
  return window.__hwanseSavedatMenuItemTitleContinue;
}
selectedTitleMenuIndex = index;
const clicked = activateSelectedTitleMenuItem();
window.__hwanseSavedatMenuItemTitleContinue = {
  ok: clicked === true,
  pending: true,
  clicked,
  selectedTitleMenuIndex,
  titleState,
};
return window.__hwanseSavedatMenuItemTitleContinue;
r   r   r   r   -start_savedat_menu_item_title_continue_scriptr  &	  r  r   c                      y)Nu  
const current = window.__hwanseSavedatMenuItemTitleContinue || null;
if (!current) return null;
if (current.done) return current;
if (scene !== 'map' || !map || !runtimeState) {
  return {
    ...current,
    pending: true,
    scene,
    map: map?.name || '',
  };
}
let savedPayload = null;
try {
  const savedText = localStorage.getItem(RUNTIME_SAVE_KEY) || '';
  savedPayload = savedText ? JSON.parse(savedText) : null;
} catch (error) {
  savedPayload = { error: String(error?.message || error) };
}
const item = (runtimeState.items || []).find((entry) => entry.name === '약초') || {};
const ataho = (runtimeState.characters || []).find((character) => character.name === 'Ataho') || {};
const saveMapValues = [...document.getElementById('saveMapSelect').options]
  .map((option) => option.value)
  .filter(Boolean);
const objectiveBefore = prototypeObjectiveState();
const objectiveResult = activatePrototypeObjectiveAction();
const objectiveAction = window.HWANSE_LAST_OBJECTIVE_ACTION || null;
const objectiveCompletionNotice = window.HWANSE_LAST_ITEM_USE_COMPLETION_NOTICE || null;
const objectiveActiveDialogueBlock = activeDialogue?.block || null;
activeDialogue = null;
const done = {
  ...current,
  ok: current.ok === true,
  pending: false,
  done: true,
  titleContinue: true,
  scene,
  map: map?.name || '',
  tile: footTile(),
  quickLoadText: document.getElementById('quickLoadButton')?.textContent || '',
  itemCount: item.count ?? null,
  atahoHp: ataho.hp ?? null,
  atahoStatuses: [...(ataho.statuses || [])],
  fieldMaps: loadedSaveSummary?.fieldMaps || [],
  routeStatus: loadedSaveSummary?.routeEvidence?.status || '',
  saveMapHidden: document.getElementById('saveMapSelect').hidden,
  saveMapValues,
  objectiveBefore,
  objectiveResult,
  objectiveAction,
  objectiveCompletionNotice,
  objectiveActiveDialogueBlock,
  savedPayload,
};
window.__hwanseSavedatMenuItemTitleContinue = done;
return done;
r   r   r   r   r   r   N	  r  r   c                      y)Na  
window.__hwanseSyntheticSavedatFileLoad = null;
fetch('../out/synthetic_savedat_selector_2_0.dat', { cache: 'no-store' })
  .then((response) => {
    if (!response.ok) throw new Error(`synthetic savedat fetch failed ${response.status}`);
    return response.arrayBuffer();
  })
  .then((buffer) => {
    const file = new File([buffer], 'synthetic_savedat_selector_2_0.dat', { type: 'application/octet-stream' });
    return loadSavedatFile(file);
  })
  .then(() => {
    const saveMapValues = [...document.getElementById('saveMapSelect').options]
      .map((option) => option.value)
      .filter(Boolean);
    const frontierOptions = [...document.getElementById('routeFrontierSelect').options]
      .map((option) => ({
        value: option.value,
        target: option.dataset.transitionTarget || '',
        tile: option.dataset.transitionTile || '',
        text: option.textContent || '',
      }))
      .filter((option) => option.value);
    window.__hwanseSyntheticSavedatFileLoad = {
      ok: true,
      scene,
      map: map?.name || '',
      tile: footTile(),
      notice: menuNotice,
      trialTransitions,
      selectedTransitionTarget,
      transitionTargetExplicit,
      routeEvidence: loadedSaveSummary?.routeEvidence || null,
      debugRouteEvidence: window.HWANSE_LAST_SAVEDAT_ROUTE_EVIDENCE || null,
      debugSummary: window.HWANSE_LAST_SAVEDAT_SUMMARY || null,
      fileName: loadedSaveSummary?.fileName || '',
      group: loadedSaveSummary?.group ?? null,
      slot: loadedSaveSummary?.slot ?? null,
      fieldMaps: loadedSaveSummary?.fieldMaps || [],
      saveMapHidden: document.getElementById('saveMapSelect').hidden,
      saveMapValues,
      routeFrontierHidden: document.getElementById('routeFrontierSelect').hidden,
      frontierOptions,
    };
  })
  .catch((error) => {
    window.__hwanseSyntheticSavedatFileLoad = { ok: false, error: String(error?.message || error) };
  });
return true;
r   r   r   r   (start_synthetic_savedat_file_load_scriptr  	  s    1r   c                      y)Nz7return window.__hwanseSyntheticSavedatFileLoad || null;r   r   r   r   (synthetic_savedat_file_load_state_scriptr  	  s    Dr   c                      y)Na  
window.__hwanseSyntheticSavedatDropLoad = null;
fetch('../out/synthetic_savedat_selector_2_0.dat', { cache: 'no-store' })
  .then((response) => {
    if (!response.ok) throw new Error(`synthetic savedat fetch failed ${response.status}`);
    return response.arrayBuffer();
  })
  .then((buffer) => {
    const file = new File([buffer], 'synthetic_drop_savedat2.dat', { type: 'application/octet-stream' });
    const transfer = new DataTransfer();
    transfer.items.add(file);
    const eventInit = {
      bubbles: true,
      cancelable: true,
      dataTransfer: transfer,
      clientX: Math.max(4, Math.floor(window.innerWidth / 2)),
      clientY: Math.max(4, Math.floor(window.innerHeight / 2)),
    };
    document.dispatchEvent(new DragEvent('dragenter', eventInit));
    const activeAfterEnter = document.body.classList.contains('save-drop-active');
    document.dispatchEvent(new DragEvent('dragover', eventInit));
    const activeAfterOver = document.body.classList.contains('save-drop-active');
    document.dispatchEvent(new DragEvent('drop', eventInit));
    const activeAfterDrop = document.body.classList.contains('save-drop-active');
    window.__hwanseSyntheticSavedatDropLoad = {
      ok: true,
      dragDispatched: true,
      activeAfterEnter,
      activeAfterOver,
      activeAfterDrop,
      scene,
      map: map?.name || '',
      tile: footTile(),
      notice: menuNotice,
      drop: window.HWANSE_LAST_SAVEDAT_DROP || null,
      routeEvidence: loadedSaveSummary?.routeEvidence || null,
      fileName: loadedSaveSummary?.fileName || '',
      group: loadedSaveSummary?.group ?? null,
      slot: loadedSaveSummary?.slot ?? null,
      fieldMaps: loadedSaveSummary?.fieldMaps || [],
      trialTransitions,
      selectedTransitionTarget,
    };
  })
  .catch((error) => {
    window.__hwanseSyntheticSavedatDropLoad = { ok: false, error: String(error?.message || error) };
  });
return true;
r   r   r   r   (start_synthetic_savedat_drop_load_scriptr  	  s    0r   c                      y)Nas  
const state = window.__hwanseSyntheticSavedatDropLoad || null;
if (!state) return null;
return {
  ...state,
  scene,
  map: map?.name || '',
  tile: footTile(),
  notice: menuNotice,
  drop: window.HWANSE_LAST_SAVEDAT_DROP || state.drop || null,
  routeEvidence: loadedSaveSummary?.routeEvidence || state.routeEvidence || null,
  fileName: loadedSaveSummary?.fileName || state.fileName || '',
  group: loadedSaveSummary?.group ?? state.group ?? null,
  slot: loadedSaveSummary?.slot ?? state.slot ?? null,
  fieldMaps: loadedSaveSummary?.fieldMaps || state.fieldMaps || [],
  trialTransitions,
  selectedTransitionTarget,
};
r   r   r   r   (synthetic_savedat_drop_load_state_scriptr  	      r   c                      y)Na   
window.__hwanseSyntheticSavedatZipLoad = null;
function makeStoredZip(name, payload) {
  const nameBytes = new TextEncoder().encode(name);
  const localOffset = 0;
  const localSize = 30 + nameBytes.length + payload.length;
  const centralOffset = localSize;
  const centralSize = 46 + nameBytes.length;
  const endOffset = centralOffset + centralSize;
  const zip = new Uint8Array(endOffset + 22);
  const view = new DataView(zip.buffer);
  const writeU16 = (offset, value) => view.setUint16(offset, value, true);
  const writeU32 = (offset, value) => view.setUint32(offset, value, true);
  writeU32(0, 0x04034b50);
  writeU16(4, 20);
  writeU16(6, 0);
  writeU16(8, 0);
  writeU32(10, 0);
  writeU32(14, 0);
  writeU32(18, payload.length);
  writeU32(22, payload.length);
  writeU16(26, nameBytes.length);
  writeU16(28, 0);
  zip.set(nameBytes, 30);
  zip.set(payload, 30 + nameBytes.length);
  writeU32(centralOffset, 0x02014b50);
  writeU16(centralOffset + 4, 20);
  writeU16(centralOffset + 6, 20);
  writeU16(centralOffset + 8, 0);
  writeU16(centralOffset + 10, 0);
  writeU32(centralOffset + 12, 0);
  writeU32(centralOffset + 16, 0);
  writeU32(centralOffset + 20, payload.length);
  writeU32(centralOffset + 24, payload.length);
  writeU16(centralOffset + 28, nameBytes.length);
  writeU16(centralOffset + 30, 0);
  writeU16(centralOffset + 32, 0);
  writeU32(centralOffset + 34, 0);
  writeU32(centralOffset + 38, 0);
  writeU32(centralOffset + 42, localOffset);
  zip.set(nameBytes, centralOffset + 46);
  writeU32(endOffset, 0x06054b50);
  writeU16(endOffset + 8, 1);
  writeU16(endOffset + 10, 1);
  writeU32(endOffset + 12, centralSize);
  writeU32(endOffset + 16, centralOffset);
  writeU16(endOffset + 20, 0);
  return zip;
}
fetch('../out/synthetic_savedat_selector_2_0.dat', { cache: 'no-store' })
  .then((response) => {
    if (!response.ok) throw new Error(`synthetic savedat fetch failed ${response.status}`);
    return response.arrayBuffer();
  })
  .then((buffer) => {
    const zip = makeStoredZip('SAVEDATA/savedat_zip.dat', new Uint8Array(buffer));
    const file = new File([zip], 'synthetic_savedat_bundle.zip', { type: 'application/zip' });
    return loadSavedatFile(file);
  })
  .then(() => {
    const archive = window.HWANSE_LAST_SAVEDAT_ARCHIVE || {};
    window.__hwanseSyntheticSavedatZipLoad = {
      ok: true,
      scene,
      map: map?.name || '',
      tile: footTile(),
      notice: menuNotice,
      trialTransitions,
      selectedTransitionTarget,
      transitionTargetExplicit,
      routeEvidence: loadedSaveSummary?.routeEvidence || null,
      fileName: loadedSaveSummary?.fileName || '',
      group: loadedSaveSummary?.group ?? null,
      slot: loadedSaveSummary?.slot ?? null,
      fieldMaps: loadedSaveSummary?.fieldMaps || [],
      archive: {
        fileName: archive.fileName || '',
        entryCount: archive.entryCount ?? null,
        loaded: archive.loaded ?? null,
        loadedMap: archive.loadedMap || '',
        selected: archive.selected || null,
        rows: (archive.rows || []).map((row) => ({
          name: row.name || '',
          valid: !!row.valid,
          selector: row.selector || '',
          routeStatus: row.routeStatus || '',
          routeProofCandidate: !!row.routeProofCandidate,
          realRouteProofCandidate: !!row.realRouteProofCandidate,
          syntheticDiagnostic: !!row.syntheticDiagnostic,
        })),
      },
    };
  })
  .catch((error) => {
    window.__hwanseSyntheticSavedatZipLoad = { ok: false, error: String(error?.message || error) };
  });
return true;
r   r   r   r   'start_synthetic_savedat_zip_load_scriptr  
  s    ar   c                      y)Nz
const state = window.__hwanseSyntheticSavedatZipLoad || null;
if (!state) return null;
return {
  ...state,
  hudLines: window.HWANSE_LAST_SAVE_HUD_LINES || [],
};
r   r   r   r   'synthetic_savedat_zip_load_state_scriptr  r
  s    r   c                      y)Na  
window.__hwanseSyntheticQuickLoad = null;
const saved = quickSaveRuntime();
const payload = JSON.parse(localStorage.getItem(RUNTIME_SAVE_KEY) || '{}');
const savedSummary = payload.loadedSaveSummary || {};
const before = {
  saved,
  status: savedSummary.routeEvidence?.status || '',
  routeProofCandidate: !!savedSummary.routeEvidence?.routeProofCandidate,
  realRouteProofCandidate: !!savedSummary.routeEvidence?.realRouteProofCandidate,
  routeSyntheticDiagnostic: !!savedSummary.routeEvidence?.syntheticDiagnostic,
  syntheticDiagnostic: savedSummary.syntheticDiagnostic === true,
  fingerprint: savedSummary.fingerprint || '',
};
loadedSaveSummary = null;
quickLoadRuntime()
  .then(() => {
    window.__hwanseSyntheticQuickLoad = {
      ok: true,
      before,
      map: map?.name || '',
      status: loadedSaveSummary?.routeEvidence?.status || '',
      routeProofCandidate: !!loadedSaveSummary?.routeEvidence?.routeProofCandidate,
      realRouteProofCandidate: !!loadedSaveSummary?.routeEvidence?.realRouteProofCandidate,
      routeSyntheticDiagnostic: !!loadedSaveSummary?.routeEvidence?.syntheticDiagnostic,
      syntheticDiagnostic: loadedSaveSummary?.syntheticDiagnostic === true,
      fingerprint: loadedSaveSummary?.fingerprint || '',
    };
  })
  .catch((error) => {
    window.__hwanseSyntheticQuickLoad = {
      ok: false,
      before,
      error: String(error?.message || error),
    };
  });
return before;
r   r   r   r   &start_synthetic_quick_save_load_scriptr  }
  s    %r   c                      y)Nz1return window.__hwanseSyntheticQuickLoad || null;r   r   r   r   !synthetic_quick_load_state_scriptr  
  s    >r   c                      y)Na  
let guard = 0;
while (scene === 'battle' && battleState && !battleState.finished && guard < 12) {
  battleState.selectedCommandIndex = 0;
  useSelectedBattleCommand();
  guard += 1;
}
return {
  scene,
  guard,
  finished: !!battleState?.finished,
  rewardGranted: !!battleState?.rewardGranted,
  rewardMoney: battleState?.reward?.money ?? null,
  enemyHp: battleState?.enemy?.hp ?? null,
  log: battleState?.log || [],
};
r   r   r   r   finish_battle_state_scriptr  
  r|  r   c                      y)Na  
const before = runtimeState?.money ?? null;
const canSave = canQuickSaveRuntime();
const victorySave = window.HWANSE_LAST_BATTLE_VICTORY_SAVE || null;
const payload = JSON.parse(localStorage.getItem(RUNTIME_SAVE_KEY) || 'null');
if (runtimeState) runtimeState.money = 0;
window.__hwanseQuickLoadMoney = null;
return {
  before,
  canSave,
  saved: victorySave?.saved === true,
  source: victorySave?.source || '',
  autoSave: victorySave,
  savedMoney: victorySave?.runtimeMoney ?? payload?.runtimeState?.money ?? null,
  savedScene: scene,
  payloadManualParty: payload?.manualParty || null,
  progress: victorySave?.progress || payload?.prototypeProgress || null,
};
r   r   r   r   battle_reward_quick_save_scriptr  
  r  r   c                      y)Nz
return {
  scene,
  map: map?.name || "",
  money: runtimeState?.money ?? null,
  notice: menuNotice,
  battleActive: !!battleState,
};
r   r   r   r   scene_state_scriptr  
  r   r   c                      y)Na  
window.__hwanseQuickLoadMoney = null;
quickLoadRuntime().then(() => {
  window.__hwanseQuickLoadMoney = {
    scene,
    map: map?.name || "",
    money: runtimeState?.money ?? null,
    activeLabels: activePartyMembers().map((member) => member.label),
    search: window.location.search,
  };
}).catch((error) => {
  window.__hwanseQuickLoadMoney = `error:${error.message || error}`;
});
return true;
r   r   r   r   start_quick_load_money_scriptr  
  r  r   c                      y)Nz%return window.__hwanseQuickLoadMoney;r   r   r   r   quick_load_money_scriptr  
  s    2r   c                      y)Nz
const controls = document.getElementById('mobileReviewControls');
return {
  hidden: controls.hidden,
  buttonCount: controls.querySelectorAll('button').length,
};
r   r   r   r   #mobile_review_controls_state_scriptr  
      r   c                      y)Na  
const target = 'map2_02d';
const candidate = mapExitTrialCandidateForTarget(target);
return {
  targets: transitionTargetsAtFoot(),
  summary: mapExitCandidateSummary(candidate, target),
  autoTrigger: candidate?.autoTrigger === true,
  side: candidate?.side || '',
};
r   r   r   r    route_assist_exit_summary_scriptr     r  r   c                      y)Nz
window.HWANSE_LAST_SAVEDAT_SCAN = {
  paths: [],
  found: [],
  errors: [],
  loaded: false,
  loadedMap: '',
  selected: null,
};
window.HWANSE_LAST_SAVEDAT_SCAN_HUD_LINES = [];
return true;
r   r   r   r    force_no_savedat_scan_hud_scriptr    r   r   c                      y)Nz
return {
  loaded: !!loadedSaveSummary,
  scan: window.HWANSE_LAST_SAVEDAT_SCAN || null,
  lines: window.HWANSE_LAST_SAVEDAT_SCAN_HUD_LINES || [],
};
r   r   r   r    no_savedat_scan_hud_state_scriptr    r  r   c                      y)Na  
return {
  keys: Object.keys(sounds || {}).sort(),
  volumes: Object.fromEntries(
    Object.entries(sounds || {}).map(([key, audio]) => [key, audio.volume])
  ),
  sources: Object.fromEntries(
    Object.entries(sounds || {}).map(([key, audio]) => [key, audio.getAttribute('src') || audio.src || ''])
  ),
  counts: window.HWANSE_SOUND_COUNTS || {},
  last: window.HWANSE_LAST_SOUND || null,
  log: (window.HWANSE_SOUND_LOG || []).slice(-12),
};
r   r   r   r   sound_state_scriptr  &  s    r   c                   t         dz  }|j                  dd       |dz  }|dz  }|j                  t        j                  | dd      d	z   d
       ddd| j                  d       dd| j                  d       dd| j                  d       dd| j                  d       dd| j                  d       dd| j                  d       dd| j                  d       dd| j                  d       dd| j                  d        dd!| j                  d"       dd#| j                  d$       dd%| j                  d&       dd'| j                  d(       ddd)dd*d+g}| j                  d,      xs i }d-D ]-  }|j                  d.| d/|j                  |      xs d0 d1       / |j                  d       |j                  d	j                  |      d
       y )2NoutTparentsexist_okz"mobile_browser_controls_smoke.jsonz mobile_browser_controls_smoke.mdF)r  r  )ensure_ascii
separators
r}   )encodingz# Mobile Browser Controls SmokerT   z- status: `r   `z	- base: `basez- initial url: `
initialUrlz- movement search: `movementSearchz- normal route search: `normalRouteSearchz- routeGoal search: `routeGoalSearchz- routeGoal blocker search: `routeGoalBlockerSearchz- routeGoal target search: `routeGoalTargetSearchz- routeGoal finish search: `routeGoalFinishSearchz- route return focus search: `routeReturnFocusSearchz- route return target search: `routeReturnTargetSearchz- routeAssist search: `routeAssistSearchz- route continuation search: `routeContinueSearchz	## Checksz| check | evidence |z| --- | --- |checks)canvasJoystickdocumentJoystickoverviewButton	mapFiltermobileMenuButtonrouteAssistControlssavedatScanHudsoundsdialogue	menuPartynormalRouterouteGoalNextrouteGoalBlockerrouteGoalClickThroughrouteReturnr   savedatBattleItemsavedatMenuItemsavePointCandidatecandidateSavePointeventObjectPreview
savedatUrlsavedatUrlZipsavedatScansavedatDropsyntheticSelector20
savedatZipsyntheticQuickSaveLoadrouteAssistrouteContinuez| z | -z |)ROOTmkdir
write_textr   r   r   appendr  )reportout_dir	json_pathmd_pathlinesr  r]   s          r   write_smoke_reportr  7  s    UlGMM$M.>>I::GF:VY]]hop 	*

fjj*+1-
FJJv&'q)
6::l34A6
vzz*:;<A>
"6::.A#B"C1E


+< =>a@
'

3K(L'MQO
&vzz2I'J&K1M
&vzz2I'J&K1M
(4L)M(NaP
)&**5N*O)PPQR
!&**-@"A!B!D
(4I)J(K1M

)E, ZZ!'RF  @@ 	r$s6::d#3#:s";2>?A @B 
LLtyy'':r   c           #     p opqrstu t        j                  d      }|st        d      t               }t        dz  dz  }|j
                  j                  dd       |j                  d      5 }t        j                  |dd	| d
g|t        j                        }d}t        dz  dz  }t        dz  dz  }	t        dz  dz  }
d}d}d}	 t        dz  dz  dz  dz  }|j                         s5|j
                  j                  dd       t        j                  ||       d}|	j                         sj|	j
                  j                  dd       t        j                  |	dt        j                        5 }|j!                  t        dz  dz  d       d d d        d}|
j                         sj|
j
                  j                  dd       t        j                  |
dt        j                        5 }|j!                  t        dz  dz  d       d d d        d}t#        ||       t%        |ddddddiiid !      }t'        |d"   d#         }t%        |dd$| d%d&d&d'd(d)d*!       t)        d+d,d-d.d/d0      }t+        | j-                  d1      d1z   d2|       }t%        |dd$| d3d4|id !       t/        ||       t1        ||d+       t3        ||t5                     }h d5}t7        |t8              rt;        |j=                  d6      xs g       n	t;               }t7        |t8              r|j=                  d7      ni }t7        |t8              r|j=                  d8      ni ut7        |t8              r|j?                  |      rqtA        tC        |xs i j=                  d9d:            d;z
        d<kD  sCtA        tC        |xs i j=                  d=d:            d>z
        d<kD  stE        ufd?|D              st        d@|      tG        jH                  dA       t3        ||tK                      tG        jH                  dB       t3        ||tM                     }|j=                  dC      xs g }|j=                  dD      dusYt7        |j=                  dE      t8              r:dF|vs6tO        dG |D              r$tO        dH |D              rtO        dI |D              st        dJ|      t3        ||tQ                     }|j=                  dK      xs i }|j=                  dL      xs i }|j=                  dM      xs g }|D cg c]   }t'        |j=                  dN      xs d      " }}|D cg c]   }t'        |j=                  dO      xs d      " }}|j=                  dP      r{|j=                  dQi       j=                  dR      dusW|j=                  dQi       j=                  dS      dus3|j=                  dTi       j=                  dS      dus|j=                  dTi       j=                  dU      dVk7  s|j=                  dWi       j=                  dS      dus|j=                  dWi       j=                  dX      dYk7  s|j=                  dZi       j=                  dS      dus|j=                  d[      d\k7  sm|j=                  d]      dYk7  sY|g d^k7  sRtE        d_ |d&   |d\   fD              r8|dY   jS                  d`      r$tE        da |D              rtE        db |D              st        dc|      t3        ||tU                     } | j=                  dd      dus:| j=                  de      dus'| j=                  df      d&k7  s| j=                  dg      durt        dh|       t3        ||tW                     }!t3        ||tY                     }"|"j=                  di      st        dj|"      |"j=                  dk      dlk7  rt        dm|"      tG        jH                  dn       t3        ||tW                     }#t3        ||t[                     }$|$rt        do      |#|!k(  rt        dp      t'        t3        ||t]                           }%dq|%vsdr|%vrt        ds|%      dt|%vrt        du|%      dv|%v rt        dw|%      t3        ||t5                     }&|&xs i j=                  dL      xs i }'t_        |'j=                  d9      xs d&      dYk  rt        dx|&      t3        ||ta                     }(|(j=                  dQi       j=                  dR      dus|(j=                  dyi       j=                  dz      dus|(j=                  dyi       j=                  di      dusd{|(j=                  dyi       j=                  d|      xs dvsm|(j=                  d}i       j=                  dz      dusJ|(j=                  d}i       j=                  di      dus'd{|(j=                  d}i       j=                  d|      xs dv rt        d~|(      t3        ||tc                     })|)j=                  d      dk(  smd|)j=                  d      xs g vsV|)j=                  d      d+k7  sBt'        |)j=                  d      xs d      jS                  d      r|)j=                  dd&      dkD  rt        d|)      t3        ||te                     }*|*j=                  di      st        d|*      |*j=                  d      dlk7  rt        d|*      t3        ||t[        d            }+|+rt        d      t)        ddd/t'        tG        jf                               d      },t+        | j-                  d1      d1z   d2|,       }-t%        |dd$| d3d4|-id !       t/        ||       t3        ||ti               d!      }.|.j=                  d      dk7  rt        d|.      t3        ||tW                     }/t3        ||tk               d!      }0|0j=                  dP      rQ|0j=                  dQi       j=                  dR      s0dt'        |0j=                  dQi       j=                  d      xs d      vrt        d|0      i }1tG        jl                         dz   }2tG        jl                         |2k  rYt3        ||ti               d!      }1|1j=                  d      dk(  rn-tG        jH                  d       tG        jl                         |2k  rY|/}3tG        jl                         d\z   }2tG        jl                         |2k  rHt3        ||tW                     }3|3|/k7  rn-tG        jH                  d       tG        jl                         |2k  rHtG        jl                         d\z   }2tG        jl                         |2k  r|1j=                  d      xs i }4|1j=                  d      dk(  r(|4j=                  d      xs i j=                  d      dk(  rnDtG        jH                  d       t3        ||ti               d!      }1tG        jl                         |2k  r|1j=                  d      xs i }5|1j=                  d      xs i }6|1j=                  d      xs i }4|4j=                  d      xs i }7|1j=                  d      dk7  s_|1j=                  d      d&k7  sJ|1j=                  d      r8d|1j=                  d      xs g vs |5j=                  d      dk7  s|5j=                  d      dus|5j=                  d      dus|5j=                  dd&      dYk  s|5j=                  dd&      d\k  s|5j=                  d      dk7  s|5j=                  d      dk7  s|6j=                  d      d&k7  s|6j=                  d      dk7  sk|7j=                  d      dk7  sW|4j=                  di       j=                  d      d&k7  s3d|5j=                  d      xs g vsd|5j=                  d      xs g vs|3|/k(  rt        d|/ d|3 d|1      t3        ||to        d             tG        jH                  d       t3        ||ti               d!      }8|8j=                  d      dk7  s;|8j=                  d      dYk7  s'|8j=                  d      xs i j=                  d      dYk7  rt        d|8      t3        ||t5                     }9|9xs i j=                  dL      xs i }:t_        |:j=                  d      xs d&      d\k  rt        d|9      t)        d+d,d.d/t'        tG        jf                               d      };t+        | j-                  d1      d1z   d2|;       }<t%        |dd$| d3d4|<id !       t/        ||       tG        jH                  dA       t'        t3        ||tq                           }=d|=vrt        d|=      t3        ||ts                     }>d }?tG        jl                         dz   }2tG        jl                         |2k  rEt3        ||tu                     }?|?n-tG        jH                  d       tG        jl                         |2k  rE|>j=                  dP      rA|>j=                  d      r/|>j=                  di       j=                  d      dk7  s
|>j=                  di       j=                  d      dgk7  sd|>j=                  d«      xs g vs|>j=                  di       j=                  d      g k7  st7        |?t8              r|?j=                  dP      r|?j=                  dī      dk7  su|?j=                  d      d+k7  sa|?j=                  d      dgk7  sL|?j=                  dū      dgk7  s7d|?j=                  dƫ      xs g vs dt'        |?j=                  d|      xs d      vrt        d|>d|?      t3        ||tw                     }@|@j=                  di      r@j=                  d      dk7  rt        d@      @j=                  de      dus'@j=                  df      dk7  s@j=                  dg      durt        d@      dt'        @j=                  d      xs d      vrt        d@      dt'        @j=                  d|      xs d      vrt        d@      t)        d+d,d/t'        tG        jf                               d      }At+        | j-                  d1      d1z   d2|A       }Bt%        |dd$| d3d4|Bid !       t/        ||       tG        jH                  dA       t3        ||tW                     }Ct3        ||to                      ty        ||dѫ       t3        ||tW                     }Dt'        t3        ||t]                           }E|D|Ck(  rt        dҫ      dEvsdEvrt        dE      t3        ||tw                     }F|Fj=                  di      rFj=                  d      dk7  sFj=                  dd      dusFj=                  d֫      dk7  sdt'        Fj=                  d      xs d      vs`dt'        Fj=                  d|      xs d      vs@dt'        Fj=                  d|      xs d      vs dt'        Fj=                  d|      xs d      vrt        dF      t)        d+d,ddd/t'        tG        jf                               dܜ      }Gt+        | j-                  d1      d1z   d2|G       }Ht%        |dd$| d3d4|Hid !       t/        ||       tG        jH                  dn       t3        ||t{               d!      }I|Ij=                  d      d+k7  sIj=                  dݫ      dk7  sIj=                  dg      sIj=                  dޫ      svIj=                  d߫      dk7  sbIj=                  d      dk7  sNdIj=                  d      xs g vs7d+Ij=                  d      xs g vs dt'        Ij=                  d      xs d      vrt        dI      t3        ||t}               d!      }J|Jj=                  dP      r!Jj=                  dQi       j=                  d      rt        dJ      ty        ||dd!       t3        ||t{               d!      }Kt'        t3        ||t]                           }L|Kj=                  d      dk7  szKj=                  dݫ      dk7  sfKj=                  dg      sUKj=                  dޫ      sDKj=                  d߫      dk7  s0dt'        Kj=                  d      xs d      vsdLvsdLvsdLvsdLvrt        dKdL      t3        ||t}               d!      }M|Mj=                  dP      r!Mj=                  dQi       j=                  d      rt        dM      t        ||g dd!      }Nt3        ||t{               d!      }O|Oj=                  d      dk7  sHOj=                  dݫ      dk7  s4Oj=                  d߫      dk7  s dt'        Oj=                  d      xs d      vrt        dO      t3        ||t}               d!      }P|Pj=                  dP      rEPj=                  dQi       j=                  d      s$Pj=                  dQi       j=                  d      dk7  rt        dP      ty        ||dd!       t        ||g dd!      }Qt3        ||t{               d!      }R|Rj=                  d      dk7  sHRj=                  dݫ      dk7  s4Rj=                  d߫      dk7  s dt'        Rj=                  d      xs d      vrt        dR      t3        ||t}               d!      }S|Sj=                  dP      rESj=                  dQi       j=                  d      s$Sj=                  dQi       j=                  d      dk7  rt        dS      t        ||g dd!      }Tt3        ||t{               d!      }U|Uj=                  d      dk7  sHUj=                  dݫ      dk7  s4Uj=                  d߫      dk7  s dt'        Uj=                  d      xs d      vrt        dU      t3        ||t}               d!      }V|Vj=                  dP      rEVj=                  dQi       j=                  d      s$Vj=                  dQi       j=                  d      dk7  rt        dV      ty        ||dd!       t        ||g dd!      }Wt3        ||t{               d!      }X|Xj=                  d߫      }Y|Xj=                  d      dk7  s+Xj=                  dݫ      dk7  sXj=                  dޫ      dusYdvrt        dX      t)        dddd+d/t'        tG        jf                               dܜ      }Zt+        | j-                  d1      d1z   d2|Z       }[t%        |dd$| d3d4|[id !       t/        ||       tG        jH                  dn       t3        ||t{               d!      }\|\j=                  d      dk7  sj\j=                  dݫ      d+k7  sV\j=                  dg      sE\j=                  dޫ      s4\j=                  d߫      dk7  s dt'        \j=                  d      xs d      vrt        d\      t3        ||t}               d!      }]|]j=                  dP      rE]j=                  dQi       j=                  d      s$]j=                  dQi       j=                  d      dk7  rt        d]      t        ||g d d!      }^t3        ||t{               d!      }_|_j=                  d      dk7  sH_j=                  dݫ      d+k7  s4_j=                  d߫      dk7  s dt'        _j=                  d      xs d      vrt        d_      t3        ||t}               d!      }`|`j=                  dP      rE`j=                  dQi       j=                  d      s$`j=                  dQi       j=                  d      dk7  rt        d`      ty        ||d+d!       t        ||g dd!      }at3        ||t{               d!      }b|bj=                  d߫      }c|bj=                  dޫ      du xr cdv }dbj=                  dޫ      du xr( cdk(  xr  dt'        bj=                  d      xs d      v }ebj=                  d      d+k7  sbj=                  dݫ      d+k7  sdsest        db      t)        d+d-d/t'        tG        jf                               d      }ft+        | j-                  d1      d1z   d2|f       }gt%        |dd$| d3d4|gid !       t/        ||       tG        jH                  dA       t3        ||t               d!      }h|hj=                  dP      rRhj=                  dQi       j=                  dR      s1dt'        hj=                  dQi       j=                  d      xs d      vrt        dh      t        ||       t3        ||tW                     }i|id&k(  rt        d	      t3        ||t                     }jt        |jj=                  d
      xs i gd&   dd&       jj=                  dī      dk7  sLjj=                  d      g dk7  s4jj=                  d      dk7  sjj=                  d      xs d gd&   dk7  rt        dj      t3        ||to                      tG        jH                  d       t3        ||tW                     }k|kik(  rt        d      t3        ||t                     }l|lj=                  d      xs i }mt        |mdd&d       t        lj=                  d
      xs i gd&   dd&       lj=                  d      xs i }n|nj=                  d      xs i j=                  dL      xs i }ot        d nj=                  d      xs i j=                  d      xs g D        i       }pt        d lj=                  d       xs g D        i       }qlj=                  d      dk7  slj=                  d!d"      jj=                  d!d&      k\  slj=                  d      xs d gd&   d#k7  smj=                  d      dusmj=                  d$      d%k7  smj=                  d&      d'k7  smj=                  d(      dk7  symj=                  d)      dk7  scmj=                  d*      qj=                  d+      k7  s>oj=                  d%      xs d&dYk  s%pj=                  d+      qj=                  d+      k7  rt        d,l      t3        ||t                     }r|rj=                  d-      r~rj=                  d.      rlrj=                  d!      d&k7  sWtO        d/ rj=                  d0      xs g D              r0d1rj=                  d0      xs g D scg c]  }st'        |s       c}svrt        d2r      t3        ||t5                     }t|txs i j=                  dL      xs i }ut_        |uj=                  d3      xs d&      dYk  sDt_        uj=                  d4      xs d&      dYk  s"t_        uj=                  d5      xs d&      dYk  rt        d6t      t3        ||t                     }v|vj=                  d7      xs i j=                  dL      xs i }wvj=                  d8      rvj=                  d      rvj=                  d$      d9k7  svj=                  d:      |vj=                  dQ      k7  svj=                  d:d&      d&k  svvj=                  d;      dk7  s`vj=                  di       j=                  d      d-k7  s<vj=                  di       j=                  d      dd<gk7  swj=                  d9      dYk7  rt        d=v      t3        ||to                      tG        jH                  d       t3        ||t                     }x|xj=                  dī      dk7  sQxj=                  d      d+k7  s=xj=                  d>      s+xj=                  d?      d@k7  sxj=                  dA      d&k7  rt        dBx      t3        ||t                      d }ytG        jl                         dz   }2tG        jl                         |2k  rEt3        ||t                     }y|yn-tG        jH                  d       tG        jl                         |2k  rEt7        yt8              ryj=                  dA      vj=                  d:      k7  s_yj=                  dī      dk7  sKyj=                  d      d+k7  s7yj=                  dū      ddCgk7  s dtt'        yj=                  d|      xs d      vrt        dDvdEy      t)        dFd.d/t'        tG        jf                               dG      }zt+        | j-                  d1      d1z   d2|z       }{t%        |dd$| d3d4|{id !       t/        ||       t        ||      }|t9        ||j=                  dH      xs g       }}|j=                  dI      xs i }~|j=                  dJ      }||j=                  dK      }||j=                  dL      xs i }|j=                  dM      xs i j=                  dN      xs g }j=                  dO      xs i j=                  dN      xs g }|j=                  dP      xs g }t        |j=                  dQ      xs i dd&       t        d d\ ddgdYd\g      D ]  \  }}}t        |||        |j=                  dī      dk7  sj|j=                  d      g dk7  sQdR|j=                  d      xs g vs7dS|j=                  d      xs g vsdT|j=                  d      xs g vsr d&   j=                  dU      d&k7  sd&   j=                  dV      dYk7  sd&   j=                  dW      dXk7  srd&   j=                  dU      d&k7  sd&   j=                  dV      dYk7  sd&   j=                  dW      dYk7  sed d\ D cg c]  }|j=                  dZ       c}dMdOgk7  s:d d\ D cg c]  }|j=                  dU       c}d&d&gk7  s}j=                  dR      dk7  s|j=                  dA      d[k7  s~j=                  d\      d]k7  s~j=                  d^      d_k7  st7        |j=                  d`      t^              r|j=                  d`      d_k  st7        |j=                  da      t^              rd|j=                  da      ||j=                  d`      k  s?|j=                  db      d\k7  s*t7        t^              rdYk  st7        t^              rk\  rt        dc|      t3        ||t                     }|j=                  d      xs g D ci c])  }|j=                  dd      |j=                  de      xs g + }}|j=                  d      xs g }j=                  dC      xs g }dfdgg}dhdig}|df||dCffD ]  \  }}}t        |      t        |      k  rt         dj      t              D ]  \  }\  }}}}}}}}t        |||       |j=                  dd      |k7  s|j=                  dZ      k7  s|j=                  dU      k7  su|j=                  dk      k7  s`|j=                  dl      k7  sK|j=                  dm      k7  s6t7        |j=                  dn      t^              r|j=                  dn      d&k  st         do         dpdqj                  dr d d\ D               dsdqj                  dt d d\ D               }t3        ||t                     }|j=                  dP      st        du      dvD ]  \  }}j=                  |      xs i }|j=                  dQ      xs i }j=                  dw      xs i }\
  }}}}}}}}}}t        ||       | dx| dx|j=                  dn       dy| }sj=                  d0      xs g D scg c]  }st'        |s       }}sj=                  dP      r8j=                  dz      k7  s"j=                  d      k7  sj=                  dZ      k7  sj=                  dU      k7  sj=                  dk      k7  sj=                  dl      k7  sj=                  dm      k7  sj=                  d{      j=                  d{d&      z
  k7  szj=                  d|      |j=                  d{      k7  sUj=                  d!      j=                  d!d&      |j=                  dnd&      z
  k7  ssvsj=                  d}      k7  st        d~ d       t3        ||t                     }|j=                  d0      xs g D scg c]  }st'        |s       }}sj=                  dQi       t|j=                  dwi       r|j=                  d      xs i sj=                  d      xs i }j=                  d      xs i }|j=                  d      xs i j=                  dL      xs i }j=                  d      xs i }j=                  d      xs i }j=                  d      xs i }j=                  d      xs i }|j=                  dC      xs g D scg c]  }st'        |s       }}stj=                  dz       dxtj=                  d       dxtj=                  dn       dytj=                  dm       }tj=                  d       dtj=                  dn       dtj=                  dm       }d}t        dddS|      }t        |dddS|d      }t        |dddS|      }t        |dddS|d      }t        tddY       t        |ddYd       t        sddYd       t        ddYd       t        |d4d       t        |d4d       t        |d[d       t        |d[d       |j=                  dP      rܐtj=                  d      dSk7  sĐtj=                  dZ      dMk7  stj=                  dU      d&k7  stj=                  dk      dYk7  s~tj=                  dl      dXk7  sftj=                  dm      |j=                  db      k7  s?rj=                  d{      tj=                  d{d&      tj=                  dmd&      z
  k7  srj=                  d|      rj=                  d{      k7  sِrj=                  d!      tj=                  d!d&      tj=                  dnd&      z
  k7  svsj=                  d}      dk7  sj=                  d      duskj=                  d      dusVj=                  d      dusAj=                  d      dus,j=                  d      dusj=                  d      tj=                  d{      k7  sj=                  d      rj=                  d{      k7  sj=                  dm      tj=                  dm      k7  sj=                  d      tj=                  d!      k7  s{j=                  d      rj=                  d!      k7  sTj=                  dn      tj=                  dn      k7  s-j=                  d      dk7  sj=                  d      dusj=                  d      k7  ssj=                  d      dusאsj=                  d$      dk7  ssj=                  d&      dk7  ssj=                  d      dSk7  ssj=                  d      dk7  swsj=                  d      tj=                  d{      k7  sOsj=                  d      rj=                  d{      k7  s'sj=                  d      tj=                  d!      k7  ssj=                  d      rj=                  d!      k7  sאsj=                  d      j=                  d      k7  sj=                  d      xs d&dYk  sj=                  d      dusj=                  d$      d%k7  slj=                  d&      d'k7  sUj=                  d(      dSk7  s>j=                  d)      dk7  s'j=                  d*      rj=                  d+      k7  s j=                  d%      xs d&dYk  sj=                  d{      rj=                  d{      k7  sj=                  d+      rj=                  d+      k7  sj=                  d      dk7  sj=                  d$      dk7  skj=                  d      dk7  sTdt'        j=                  d      xs d      vs1dSt'        j=                  d      xs d      vsj=                  d      dusj=                  dN      dk7  sj=                  d      dusj=                  d      dk7  sj=                  d      dk7  stO        d D              rtO        d D              rztO        d D              rftO        rtfdD              rMtO        rstfdD              r2tO        tfdD              rj=                  d      dusj=                  d      dusj=                  d$      dk7  sj=                  d      k7  sj=                  d      dk7  sj=                  d      dSk7  sj=                  d      tj=                  d{      k7  spj=                  d      rj=                  d{      k7  sIj=                  dm      tj=                  dm      k7  s"j=                  d)      sj=                  d      k7  sj=                  d      sj=                  d      k7  sj=                  d      tj=                  d!      k7  sj=                  d      rj=                  d!      k7  sj=                  dn      tj=                  dn      k7  sdj=                  d      dusPj=                  d      dus<j=                  d      dus(j=                  d      dusj=                  d      k7  rt        d      t3        ||t               d!      }t        ||      }|j=                  d      xs i }|j=                  d      xs g D cg c]  }t'        |       }}j=                  d      xs i }j=                  d      xs i }j=                  d      xs i }|j=                  dC      xs g D scg c]  }st'        |s       }}sj=                  d      xs i }j=                  d      xs i }t7        t8              r<j=                  dP      dus(j=                  d      xs i j=                  d      dk7  stO        d D              rj=                  dP      dusj=                  d      dusj=                  d      dk7  sj=                  d      dk7  sj=                  d      xs d&dYk  szj=                  d      dusej=                  d      dSk7  sNj=                  d      rj=                  d{      k7  s'j=                  d      rj=                  d!      k7  s j=                  d      dk7  sj=                  d$      dk7  sj=                  d      dk7  sj=                  d      dusj=                  dN      dk7  sj=                  d      dusj=                  d      dk7  smj=                  d      dk7  sXtO        d D              rEtO        d D              r2tO        rtfdD              rtO        rstfdD              st        dd      t%        |dd$| d3d4{id !       t/        ||       t        ||      }|t3        ||t                     }|j=                  d0      xs g D scg c]  }st'        |s       }}sj=                  dQi       }|j=                  dwi       }|j=                  d       d}t        |dddS|      }t        |dddS|d      }t        |ddY       t        |ddYd       t        |d[d       t        |d[d       |j=                  dP      rj=                  d      dSk7  sj=                  dm      |j=                  db      k7  s{j=                  d{      |j=                  dmd&      k\  sTj=                  d|      |j=                  d{      k7  s.j=                  d{      j=                  d{      k7  sj=                  d|      j=                  d|      k7  sj=                  d!      j=                  d!      k7  sdvsj=                  d}      dk7  sj=                  d      dusj=                  d      dusuj=                  dë      dus`j=                  dī      dusKj=                  d      dus6j=                  d      dus!j=                  d      dusj=                  d      j=                  d{      k7  sj=                  d      j=                  d{      k7  sj=                  dm      j=                  dm      k7  sj=                  d      j=                  d!      k7  sxj=                  d      j=                  d!      k7  sSj=                  dn      d&k7  s>j=                  d      dk7  s(j=                  d      dusj=                  d      k7  rt        d      t3        ||t                     ooj=                  d0      xs g D scg c]  }st'        |s       }}soj=                  dQi       j=                  dƫ      p|j=                  dK      }t7        pt^              rt7        t^              rpz
  nd }Đdǐp d1p }Őoj=                  dȫ      xs i }|j=                  dɫ      xs i j=                  d      xs i }ǐoj=                  d      xs i }|j=                  d7      xs i j=                  dL      xs i }j=                  d      xs i }t        dʄ |j=                  d      xs g D        i       }t        d˄ j=                  d̫      xs g D        i       }̐oj=                  d      xs i }͐oj=                  d      xs i }|j=                  d      xs i j=                  dL      xs i }t        d̈́ j=                  d      xs i j=                  d      xs g D        i       }t        d΄ j=                  d      xs i j=                  d̫      xs g D        i       }ѐoj=                  d      xs i }Ґoj=                  d      xs i }Ӑoj=                  d      xs i }|j=                  dC      xs g D scg c]  }st'        |s       }}st        odϐdАdѐҫ      }t        odϐdАddӫ      }t        |֫       t        |׫       oj=                  dP      roj=                  dQi       j=                  dԫ      dRk7  soj=                  dwi       j=                  d      oj=                  dQi       j=                  dd&      dYz
  k7  s9oj=                  dwi       j=                  d+      k7  svsoj=                  d}      dk7  sj=                  d      dusj=                  d$      dk7  sj=                  d&      dk7  sj=                  d׫      dRk7  sj=                  d)      dk7  sj=                  dث      oj=                  dwi       j=                  d      k7  sNj=                  d٫      pk7  s7t        ƐdЫ      r)t        ȐdЫ      rt        ǐdЫ      rj=                  d׫      dRk7  sj=                  d)      dk7  sj=                  dګ      dk7  sj=                  d      dk7  sj=                  dܫ      dusj=                  dݫ      dust        ֐dЫ      ryj=                  dܫ      dusdj=                  d      dk7  sNt        אdЫ      r@t7        j=                  dի      t^              rj=                  dd&      dYk  sj=                  d      j=                  d      k7  sj=                  d+      pk7  sj=                  d      oj=                  dwi       j=                  d      k7  sj=                  d      dusj=                  d$      d%k7  skj=                  d&      d'k7  sTj=                  d(      dRk7  s=t        ͐dАd      r+j=                  d)      dk7  sj=                  d*      oj=                  dwi       j=                  d+      k7  sj=                  d%      xs d&dYk  sj=                  d+      oj=                  dwi       j=                  d+      k7  sj=                  d      oj=                  dwi       j=                  d      k7  sTj=                  d      dk7  s>j=                  d$      dk7  s'j=                  d      dk7  sdt'        j=                  d      xs d      vsdRt'        j=                  d      xs d      vs̐oj=                  d      dusj=                  dN      dk7  sj=                  d      dusj=                  d      dk7  syj=                  d      dk7  sdtO        d D              rQtO        d D              r>tO        d D              r+tO        d D              rtO        opfdD              st        do      t3        ||t               d!      }t        ||      }|j=                  d      xs i }|j=                  d      xs g D cg c]  }t'        |       }}j=                  d      xs i }j=                  d      xs i }j=                  d      xs i }|j=                  dC      xs g D scg c]  }st'        |s       }}sj=                  d      xs i }j=                  d      xs i }t7        t8              r4j=                  dP      dus j=                  d      xs i j=                  d      dk7  stO        d D              rj=                  dP      dusj=                  d      dusj=                  d      dk7  sj=                  d      dk7  sj=                  dի      xs d&dYk  srj=                  d      dus]j=                  d׫      dRk7  sFj=                  dث      oj=                  dwi       j=                  d      k7  sj=                  d٫      pk7  sj=                  d      dk7  sj=                  d$      dk7  sj=                  d      dk7  sj=                  d      dusj=                  dN      dk7  sj=                  d      dus{j=                  d      dk7  sfj=                  d      dk7  sQtO        d D              r>tO        d D              r+tO        d D              rtO        opfdD              st        d؛dٛ      t%        |dd$| d3d4{id !       t/        ||       t        ||      }|t3        ||t                     qqj=                  d0      xs g D scg c]  }st'        |s       }}sqj=                  dQi       j=                  d      }t7        |t^              r2t        qj=                  dQi       j=                  d{d&      dz         nd }d| d1 }qj=                  dȫ      xs i }|j=                  dɫ      xs i j=                  d      xs i }qj=                  d      xs i }|j=                  d7      xs i j=                  dL      xs i }j=                  d      xs i }t        d |j=                  d      xs g D        i       }t        d j=                  d̫      xs g D        i       }qj=                  d      xs i }qj=                  d      xs i }|j=                  d      xs i j=                  dL      xs i }t        d j=                  d      xs i j=                  d      xs g D        i       }t        d j=                  d      xs i j=                  d̫      xs g D        i       }qj=                  d      xs i }qj=                  d      xs i }qj=                  d      xs i }|j=                  dC      xs g D scg c]  }st'        |s       }}st        qdϐddҫ      }t        qdϐdddӫ      }t        |       t        |       qj=                  dP      rqj=                  d      rݐdqj=                  d      xs g vsqj=                  dwi       j=                  d{      k7  sqj=                  dwi       j=                  d      d&k7  srqj=                  dwi       j=                  d      sMvsHqj=                  d}      dCk7  s0j=                  d      dusj=                  d$      dk7  sj=                  d&      dk7  sj=                  d׫      dk7  sj=                  d)      dk7  sj=                  dث      d&k7  sj=                  d      k7  st        d      rt        d      ryt        d      rkj=                  d׫      dk7  sTj=                  d)      dk7  s>j=                  d      dk7  s'j=                  d      dk7  sj=                  dܫ      dusj=                  dݫ      dust        d      rj=                  dܫ      dusj=                  d      dk7  st        d      rt7        j=                  dի      t^              r~j=                  dd&      dYk  sgj=                  d      j=                  d      k7  sBj=                  d{      k7  s,j=                  d      d&k7  sj=                  d      dusj=                  d$      d%k7  sj=                  d&      d'k7  sj=                  d(      dk7  st        dd      rj=                  d)      dk7  sj=                  d%      xs d&dYk  s|j=                  d{      k7  sfj=                  d      d&k7  sQj=                  d      dk7  s;j=                  d$      dk7  s$j=                  d      dk7  sdt'        j=                  d      xs d      vsdt'        j=                  d      xs d      vsʐqj=                  d      dusj=                  dN      dk7  sj=                  d      dusj=                  d      dk7  swj=                  d      dk7  sbtO        d D              rOtO        d  D              r<tO        d D              r)tO        d D              rtO        qfdD              st        dq      t3        ||t                     }|j=                  d0      xs g D scg c]  }st'        |s       }}sj=                  dȫ      xs i }|j=                  dɫ      xs i j=                  d      xs i }j=                  d      xs i }j=                  d      xs i }j=                  d      xs i }j=                  d      xs i }j=                  d      xs i } j=                  d      xs i }|j=                  dC      xs g D scg c]  }st'        |s       }}st        dϐddҫ      }t        |dϐdddӫ      }t        |       t        |       |j=                  dP      rFj=                  dQi       j=                  d      dgk7  sd	j=                  dQi       j=                  d      xs g vsj=                  dwi       j=                  d      g k7  sj=                  dwi       j=                  d
      g k7  sj=                  dwi       j=                  d      d&k7  sj=                  dwi       j=                  d      s[dvsUj=                  d}      dk7  s>j=                  d      dus*j=                  d$      dk7  sj=                  d&      dk7  sj=                  d׫      dk7  sj=                  d)      dCk7  sj=                  dث      d&k7  st        d      rt        d      rt        d      rj=                  d׫      dk7  svj=                  d)      dCk7  s^j=                  d      dgk7  sEj=                  d      dk7  s-j=                  dܫ      dusj=                  dݫ      dusj=                  d      dust        d      rܐj=                  dܫ      dusƐj=                  d      dk7  st        d      rj=                  d      j=                  d      k7  s{j=                  d      dusgj=                  d$      d%k7  sPj=                  d&      d'k7  s9j=                  d(      dk7  s"t        dd      rj=                  d      dk7  sj=                  d$      dk7  sj=                  d      dk7  sj=                  d      dus j=                  dN      dk7  s j=                  d      dus j=                  d      dk7  szj=                  d      dk7  sdtO        d D              rPtO        d D              r<tO        d D              r(tO        d D              rtO        d D              st        d      t3        ||t                     }|j=                  d0      xs g D scg c]  }st'        |s       }}sj=                  dQi       }|j=                  dwi       }|j=                  dȫ      xs i }	|	j=                  dɫ      xs i j=                  d      xs i }
j=                  d      xs i }j=                  d      xs i }j=                  d      xs i }j=                  d      xs i }j=                  d      xs i }j=                  d      xs i }|j=                  dC      xs g D scg c]  }st'        |s       }}st        dϐddҫ      }t        |dϐdddӫ      }t        |       t        |       dj=                  d       dj=                  d+       d1|j=                  dƫ       d|j=                  d{       d1|j=                  d       
}|j=                  dP      rPj=                  d      dCk7  s8j=                  d      d&k7  s!j=                  d      d&k7  s
j=                  d      dCk(  sdj=                  d      xs g vsאj=                  d+      |j=                  dƫ      k7  sj=                  d{      |j=                  d      k7  sj=                  d       |j=                  dƫ      k7  s_j=                  d|      |j=                  d      k7  s7j=                  d!      d&k7  s j=                  d      svsj=                  d}      dk7  sj=                  d      dusِj=                  d$      dk7  sj=                  d&      dk7  sj=                  d׫      d"k7  sj=                  d)      dCk7  syj=                  dث      d&k7  sbj=                  d٫      j=                  dƫ      k7  s:j=                  d      j=                  d      k7  st        	d      rt        d      rt        
d      rj=                  d׫      d"k7  s͐j=                  d)      dCk7  sj=                  d#      dusj=                  dګ      j=                  dƫ      k7  swj=                  d      j=                  d      k7  sOj=                  d      dk7  s7j=                  dܫ      dus!j=                  dݫ      dust        d      rj=                  dܫ      dusj=                  d      dk7  st        d      rj=                  d      j=                  d      k7  sj=                  d      dusj=                  d$      d%k7  slj=                  d&      d'k7  sTj=                  d(      d"k7  s<t        dd      r)j=                  d      dk7  sj=                  d$      dk7  sj=                  d      dk7  sj=                  d      dusϐj=                  dN      dk7  sj=                  d      dusj=                  d      dk7  sj=                  d      dk7  sxtO        d$ D              rdtO        d% D              rPtO        d& D              r<tO        d' D              r(tO        d( D              rtO        d) D              st        d*      t)        dFd.d/t'        tG        jf                               d+      }t+        | j-                  d1      d1z   d2|       }t%        |dd$| d3d4|id !       t/        ||       t        ||      }|j=                  d      dk7  sj=                  dS      rxtO        d, j=                  d      xs g D              rPj=                  d-i       j=                  d+      d"k7  s(tO        d. j=                  d/      xs g D              st        d0      t3        ||t                     }|j=                  dȫ      xs i }|j=                  dɫ      xs i j=                  d      xs i }j=                  d      xs i }j=                  d      xs i }|j=                  d      xs i j=                  dL      xs i }j=                  d      xs i }j=                  d      xs i }j=                  d      xs i } | j=                  dC      xs g D scg c]  }st'        |s       }!}st        d1dАd2ҫ      }"t        |d1dАd2dӫ      }#|j=                  dP      rzj=                  dwi       j=                  d      |j=                  dQi       j=                  dd&      dYz
  k7  s/j=                  dwi       j=                  d+      |j=                  dQi       j=                  dƫ      k7  sd3t'        j=                  d?      xs d      vsd4j=                  d5      xs g vsj=                  d6      xs i j=                  d$      d7k7  s{j=                  d8      xs i j=                  d$      d7k7  sOj=                  d8      xs i j=                  d9      dk7  s#j=                  d8      xs i j=                  d:      j=                  dQi       j=                  d      k7  sؐj=                  d8      xs i j=                  d;      dVk7  s"j=                  d<      dus"j=                  d=      dus"j=                  dݫ      dusk"j=                  d      dusU"j=                  d)      dk7  s="j=                  dګ      d k7  s&"j=                  d      d&k7  s"j=                  d:      j=                  dQi       j=                  d      k7  sؐ"j=                  dث      j=                  dwi       j=                  d      k7  s"j=                  d      d>k7  st        dЫ      ryt        dЫ      rjt        "dЫ      r[#j=                  d<      dusE#j=                  d      d2k7  s.t        #dЫ      rj=                  d      dus
j=                  d$      dk7  sj=                  d׫      dRk7  sڐj=                  d)      dk7  sj=                  dث      j=                  dwi       j=                  d      k7  sj=                  d٫      j=                  dwi       j=                  d+      k7  sQt        dЫ      rBj=                  d      j=                  d      k7  sj=                  dի      xs d&dYk  s j=                  d      d?k7  sj=                  d$      d@k7  sӐj=                  d      dk7  sj=                  d      dusj=                  dN      dAk7  sj=                  d      dus|j=                  d      dBk7  sf j=                  d      dBk7  sPtO        dC !D              r<tO        dD !D              r(tO        dE !D              rtO        dF !D              st        dG      t        "       t        #       t3        ||t                     }$|$j=                  dP      rِ$j=                  dXd:      d&k  sÐ$j=                  dQi       j=                  d      ddHgk7  s$j=                  dwi       j=                  d      g k7  sr$j=                  dwi       j=                  d      d&k7  sKdIt'        $j=                  d?      xs d      vs(tO        dJ $j=                  d/      xs g D              rt        dK$      t3        ||t                     }%|%j=                  dP      r%j=                  dLd:      d&k  s%j=                  dMd:      d&k  s%j=                  dN      ro%j=                  dO      r[%j=                  dP      dQk7  sC%j=                  dR      dSk7  s+dT%j=                  dU      xs g vsd%j=                  dV      xs g vs%j=                  d      r%j=                  dW      d\k7  sΐ%j=                  dX      j=                  dwi       j=                  d+      k7  s%j=                  dY      dgk7  s~t;        %j=                  dZ      xs g       dd+hk7  sY%j=                  d[      d\k7  sB%j=                  d]      d&k7  s,%j=                  d^      dYk7  s%j=                  d_      g k7  rt        d`%      t        ||      }&|&j=                  dP      rJ&j=                  dī      dk7  s4&j=                  d      dk7  s&j=                  da      d\k7  s&j=                  db      j=                  dwi       j=                  d+      k7  sϐ&j=                  dc      dgk7  st;        &j=                  dd      xs g       dd+hk7  s&j=                  de      d\k7  s{&j=                  df      dusft;        &j=                  dg      xs g       dd+hk7  sA&j=                  d?      dhk7  s*&j=                  dR      dSk7  s&j=                  dO      st        di&      t3        ||t               d!      }'t        ||      }(|(j=                  d      xs i })|)j=                  d      xs g D cg c]  }t'        |       }*}(j=                  d      xs i }+(j=                  d      xs i },(j=                  d      xs i }-|-j=                  dC      xs g D scg c]  }st'        |s       }.}st7        't8              r'j=                  dP      dusѐ'j=                  d      xs i j=                  d      dk7  stO        dj *D              r(j=                  dP      dus{(j=                  d      duse(j=                  d      dk7  sM(j=                  dī      dk7  s7(j=                  d      dk7  s!(j=                  dk      &j=                  da      k7  s(j=                  dl      &j=                  db      k7  sѐ(j=                  dm      &j=                  dc      k7  st;        (j=                  dd      xs g       dd+hk7  s(j=                  de      d\k7  sk(j=                  df      dusUt;        (j=                  dg      xs g       dd+hk7  s/+j=                  d      d?k7  s+j=                  d$      d@k7  s +j=                  d      dnk7  s+j=                  d      dk7  sҐ+j=                  do      d\k7  s(j=                  d      dus,j=                  dN      dAk7  s,j=                  d      dus|,j=                  d      dBk7  sf-j=                  d      dBk7  sPtO        dp .D              r<tO        dq .D              r(tO        dr .D              rtO        ds .D              st        dt'd(      t3        ||t                     }/t'        |/j=                  d?      xs d      }0/j=                  dP      r{/j=                  dud:      d&k  sd/j=                  dv      d:k7  sNtO        dw /j=                  d      xs g D              r&/j=                  dx      r0j                  dy      st        dz/      t        ||      }1|1j=                  d{      xs g D scg c]  }st'        |s       }2}s1j=                  d|      xs i }3|3j=                  d}      xs g }41j=                  dī      dk7  s1j=                  d      dk7  sӐ1j=                  d      d~k7  s1j=                  d      d&k7  s1j=                  dad&      d*k  s1j=                  d      dus|3j=                  d&      dk7  se3j=                  d      dk7  sO3j=                  d      dus:d2vs4d2vs.d2vs(tO        d 4D              rtO        d 4D              rt        d1      t)        ddd/t'        tG        jf                               d      }5t+        | j-                  d1      d1z   d2|5       }6t%        |dd$| d3d4|6id !       t/        ||       t1        ||d       t3        ||t                     }7t'        |7j=                  d?      xs d      }87j=                  dP      r{7j=                  dud:      d&k  sd7j=                  dv      d:k7  sNtO        d 7j=                  d      xs g D              r&7j=                  dx      r8j                  dy      st        d7      t        ||      }9|9j=                  d{      xs g D scg c]  }st'        |s       }:}s9j=                  d|      xs i };9j=                  d      xs i }<9j=                  d      xs i }=<j=                  d      xs i }>=j=                  d      xs i }?9j=                  dī      dk7  s89j=                  d      dk7  s!9j=                  d      dk7  s
;j=                  d&      dk7  s;j=                  d      dYk7  sސ;j=                  d      dusɐ<j=                  d      dus<j=                  d      dus<j=                  d&      dk7  s<j=                  d      dYk7  st<j=                  d      dus_d<j=                  d      xs g vsE=j=                  d      dk7  s/=j=                  d      dYk7  s?>k7  sd:vsd:vsd:vrt        d9      t)        ddd.d/t'        tG        jf                               d      }@t+        | j-                  d1      d1z   d2|@       }At%        |dd$| d3d4|Aid !       t/        ||       t1        ||d       t        ||      }B|Bj=                  d      xs i }Ct;        Bj=                  d      xs g       }DCj=                  d      xs g }EBj=                  dī      dk7  sƐBj=                  d      dk7  sBj=                  d      dusCj=                  d      dusCj=                  d      dk7  spCj=                  da      dk7  sZCj=                  d      dYk  sDh dDk  r;h dED ch c]  }|j=                  d       c}k  rtE        d ED              st        dB      t)        dd/t'        tG        jf                               d      }Ft+        | j-                  d1      d1z   d2|F       }Gt%        |dd$| d3d4|Gid !       t/        ||       d }HtG        jl                         dz   }2tG        jl                         |2k  rRt3        ||d      }H|HrHj=                  dD      rn-tG        jH                  d       tG        jl                         |2k  rRt7        Ht8              rHj=                  dD      rߐHj=                  dī      dk7  sʐHj=                  d      dk7  sHj=                  d      dk7  sHj=                  dO      dYk7  sHj=                  d      d&k7  ssHj=                  de      d\k7  s\Hj=                  d      d\k7  sEHj=                  d      dk7  s.dHj=                  dd      xs g vsHj=                  df      durt        dH      t)        dd/t'        tG        jf                               d      }It+        | j-                  d1      d1z   d2|I       }Jt%        |dd$| d3d4|Jid !       t/        ||       d }KtG        jl                         dz   }2tG        jl                         |2k  rzt3        ||d      }K|Kr;Kj=                  dD      r)tO        d Kj=                  d      xs g D              rn-tG        jH                  d       tG        jl                         |2k  rzKxs i j=                  d      xs i }Lt7        Kt8              rKj=                  dD      rKj=                  dī      dk7  spKj=                  d      dk7  sZKj=                  d      dk7  sBKj=                  dO      d\k7  s+Kj=                  d      d&k7  sKj=                  de      dk7  sKj=                  d      dk7  sKj=                  d      dk7  sϐLj=                  d      dk7  sLj=                  d      dYk7  sLj=                  dD      dusLj=                  d      dk7  syLj=                  d      xs i j=                  dd      dk7  sPtO        d Lj=                  d      xs g D              r(tO        d Kj=                  d      xs g D              st        dK      t)        d.d/t'        tG        jf                               d      }Mt+        | j-                  d1      d1z   d2|M       }Nt%        |dd$| d3d4|Nid !       t/        ||       d }OtG        jl                         dz   }2tG        jl                         |2k  ret3        ||d      }O|Or&Oj=                  dE      xs i j=                  dD      rn-tG        jH                  d       tG        jl                         |2k  reOxs i j=                  dE      xs i j=                  d      xs g }POxs i j=                  d      xs i }Qt7        Ot8              rt7        Oj=                  dE      t8              r|r(Oj=                  dE      xs i j=                  dD      dus|r*Oj=                  dE      xs i j=                  d      dk7  sb|rOj=                  d      dk7  sJ|rOj=                  d      dk7  s0|rOj=                  d      dk7  s|rOj=                  d      dk7  s|rQj=                  d      dk7  s|rQj=                  dD      dus|r)Qj=                  d      xs i j=                  dd      dk7  sOj=                  d      dk7  st        Oj=                  dE      xs i j=                  d      xs g       dk7  sV|rOj=                  dD      rB|rtO        dÄ PD              r,|rtO        dĄ PD              r|r$tO        dń PD              st        dƐO      t        |      Od<   t        |      |Od<   t3        ||t                      d }RtG        jl                         dz   }2tG        jl                         |2k  rIt3        ||t               d!      }R|Rn-tG        jH                  d       tG        jl                         |2k  rIRxs i j=                  dɫ      xs i }SRxs i j=                  dʫ      xs i }TRxs i j=                  d˫      xs i }Ut7        Rt8              rRj=                  d̫      ng }Vt7        Rt8              rRj=                  dP      roRj=                  d      dk7  sYRj=                  d      d͐dΐdϜk7  s<Rj=                  d      dk7  s%Rj=                  dO      d\k7  sRj=                  d      d&k7  sddhj?                  t;        Rj=                  dd      xs g             rŐSj=                  dЫ      dk7  sSj=                  dѫ      dusSj=                  dҫ      dusSj=                  dӫ      duskTj=                  dЫ      dk7  sSTj=                  dѫ      dus=Tj=                  dҫ      dus'Tj=                  dӫ      dusUj=                  dԫ      dk7  sRj=                  dի      dk7  sRj=                  d֫      dk7  sΐRj=                  d׫      dusRj=                  df      dusddhj?                  t;        Rj=                  dg      xs g             rsRj=                  dث      dus^tO        dل Vxs g D              rFdt'        Rj=                  d?      xs d      vs#dt'        Rj=                  d?      xs d      vrt        dܐR      t3        ||t                      d }WtG        jl                         dz   }2tG        jl                         |2k  rst3        ||t               d!      }W|W+Wj=                  dݫ      xs i j=                  dЫ      dDk(  rn-tG        jH                  d       tG        jl                         |2k  rsWxs i j=                  dݫ      xs i }XWxs i j=                  dɫ      xs i }Yt7        Wt8              rWj=                  dP      rݐWj=                  dޫ      dusǐWj=                  d߫      dusWj=                  d      dusWj=                  d      dusWj=                  d      dk7  soWj=                  d      dk7  sWWj=                  dO      d\k7  s@Wj=                  d      d&k7  s)Xj=                  dЫ      dDk7  sXj=                  d      dk7  sXj=                  de      dk7  sXj=                  dѫ      dusϐXj=                  dҫ      dusXj=                  dӫ      dusYj=                  dЫ      dk7  sYj=                  dѫ      dusyYj=                  dҫ      dusdYj=                  dӫ      dusOWj=                  dի      dk7  s9Wj=                  d֫      dk7  s#dt'        Wj=                  d?      xs d      vrt        dW      t3        ||t                      d }ZtG        jl                         dz   }2tG        jl                         |2k  rt3        ||t               d!      }Z|ZQtO        d Zj=                  d      xs g D              r)tO        d Zj=                  d      xs g D              rn-tG        jH                  d       tG        jl                         |2k  rZxs i j=                  d      xs i }[Zxs i j=                  dɫ      xs i }\t7        Zt8              rZj=                  dP      rҐZj=                  d      dk7  sZj=                  d      dk7  sZj=                  dO      d\k7  sZj=                  d      d&k7  sv\j=                  dЫ      dk7  s^\j=                  dѫ      dusH\j=                  dҫ      dus2\j=                  dӫ      dus[j=                  d      dk7  s[j=                  d      dYk7  s[j=                  dD      dusڐ[j=                  d      dk7  sĐ[j=                  d      xs i j=                  dd      dk7  stO        d [j=                  d      xs g D              rsdt'        Zj=                  d?      xs d      vsPtO        d Zj=                  d      xs g D              r(tO        d Zj=                  d      xs g D              st        dZ      t3        ||t               d!      }]|]j=                  d      r]j=                  dЫ      dk7  sk]j=                  dѫ      dusV]j=                  dҫ      dusA]j=                  d      dus,]j=                  dӫ      dus]j=                  d      dk7  rt        d]      d }^tG        jl                         dz   }2tG        jl                         |2k  rIt3        ||t               d!      }^|^n-tG        jH                  d       tG        jl                         |2k  rIt7        ^t8              r^j=                  dP      r^j=                  d      dk7  s^j=                  dЫ      dk7  sk^j=                  dѫ      dusV^j=                  dҫ      dusA^j=                  d      dus,^j=                  dӫ      dus^j=                  d      dk7  rt        d^      t)        ddڐdd/t'        tG        jf                               d      }_t+        | j-                  d1      d1z   d2|_       }`t%        |dd$| d3d4|`id !       t/        ||       tG        jH                  dA       t3        ||tW                     }at3        ||t                     }b|bj=                  dR      sbj=                  dd&      d\k  rt        db      t3        ||t                     }cd|cj=                  dg       vspdt'        cj=                  d      xs d      vsMdt'        cj=                  d      xs d      vs*cj=                  d      rcj=                  d      dk7  rt        dc      t3        ||t        d            }d|dj=                  di      st        dd      dj=                  d      dk7  rt        d d      ty        ||d       t3        ||tW                     }et'        t3        ||t]                           }ft3        ||t[        d             |eak(  rt        d      dfvsdϐfvrt        df      dfv rt        df      t3        ||tw                     }g|gj=                  d֫      }h|gj=                  di      r֐gj=                  d      dk7  sgj=                  dd      dushdk7  sgj=                  d      dk7  st'        h      t'        gj=                  d      xs d      vsedt'        gj=                  d|      xs d      vsDdt'        gj=                  d|      xs d      vs"dt'        gj=                  d|      xs d      vrt        d	g      t3        ||tW                     }it3        ||t        d
            }j|jj=                  di      st        dj      jj=                  d      dk7  rt        dj      ty        ||dېd!       t3        ||tW                     }kt'        t3        ||t]                           }lt3        ||t[        d
             |kik(  rt        d      dlvsdϐlvrt        dl      dlv rt        dl      i dАdd| d|d|%dEdfdldLdNdQdTdWd^dadi d d!|! d"|# d#|"j=                  dk       d$d%|*j=                  di       d&|*j=                  d       d'|(j=                  dyi       j=                  d|       d(|(j=                  d}i       j=                  d|       d)|)j=                  d       d*|)j=                  d       d+d,|j=                  dQi       j=                  dR       dx|j=                  dQi       j=                  dS       d"|j=                  dTi       j=                  dS       d"|j=                  dZi       j=                  dS       d-|j=                  dWi       j=                  dX       d.|j=                  d[       d/|j=                  d]       d0dqj                  |       d1dqj                  |       d2d3| j=                  de       d4@j=                  de      du  d5|@j=                  df       d6d7j                  |      d8t        |       d9|j=                  d9       d:|j=                  d=       d;uj=                  d3       d<|'j=                  d9       d=|:j=                  d       d>uj=                  d3       d?|uj=                  d4       d@|uj=                  d5       ddA|1j=                  d       dB|1j=                  d       d"|8j=                  d       dC|1j=                  d      xs i j=                  d       dD|1j=                  d      xs i j=                  d       dEdqj                  |1j=                  d      xs i j=                  d      xs g        dF|1j=                  d      xs i j=                  d       dG|1j=                  d      xs i j=                  d       d1|1j=                  d      xs i j=                  dH       dI|1j=                  d      xs i j=                  d       dJ|1j=                  d      xs i j=                  d       dK|= dLdqj                  |?j=                  dū      xs g        dx|?j=                  d|       dMC d"D d7E dNIj=                  dݫ       dx|Ij=                  d       d(L dOKj=                  d       d(N dPPj=                  dQi       j=                  d       dxQ d7Sj=                  dQi       j=                  d       dxT d7Vj=                  dQi       j=                  d       dxW dQ\j=                  d       d(^ d7`j=                  dQi       j=                  d       dxa ddRjj=                  d       d"lj=                  d       dS|lj=                  d      xs i j=                  d$       dTmj=                  dU       dV|mj=                  dW       dX|mj=                  dY       dZlj=                  d
      xs i gd&   j=                  d[       d\lj=                  d
      xs i gd&   j=                  d]       d^lj=                  d
      xs i gd&   j=                  d_       d`rj=                  d.       davj=                  d$       dbyj=                  dA       dcdqj                  |yj=                  dū      xs g        dddj                  g de~j=                  d\       df|~j=                  d^       dg|j=                  d`       d1||j=                  dK       dh||j=                  dQ      xs i j=                  d[       di|j=                  dQ      xs i j=                  d]       dj|j=                  dQ      xs i j=                  d_       d7 dkj=                  di       j=                  dQi       j=                  d       d1|j=                  dli       j=                  dQi       j=                  d       dm|j=                  di       j=                  dQi       j=                  d]       d"|j=                  di       j=                  dQi       j=                  d_       dn|j=                  dli       j=                  dQi       j=                  d]       d"|j=                  dli       j=                  dQi       j=                  d_       doj=                  dQi       j=                  d       dx|j=                  dQi       j=                  dZ       dp|j=                  dQi       j=                  dU       dq|j=                  dQi       j=                  d[       dr|j=                  dQi       j=                  d]       ds|j=                  dQi       j=                  d_       d|j=                  dQi       j=                  d{       d"|j=                  dwi       j=                  d{       dt|j=                  d      xs i j=                  d$       dut               dvt        |       dwt        |       dx|j=                  d      xs i j=                  d$       dyj=                  d      xs i j=                  d       dzj=                  d      xs i j=                  dN       d{j=                  d      xs i j=                  d       d|j=                  d$       d}|j=                  d       d~j=                  d      du  d|j=                  d       d}|j=                  d       d}|j=                  d       dj=                  d      xs i j=                  d       d1j=                  d      xs i j=                  dN       d1j=                  d      xs i j=                  d       dj=                  dQi       j=                  d{       d1|j=                  dQi       j=                  dm       d|j=                  dQi       j=                  d!       d"|j=                  dwi       j=                  d!       dt        |       dt        |       dt        |       d7oj=                  dQi       j=                  dԫ       dxoj=                  dQi       j=                  d       d"oj=                  dwi       j=                  d       doj=                  d      xs i j=                  d$       dj=                  d       d|j=                  d       d|j=                  d       dt        o       dt        o       dt        o       doj=                  d      xs i j=                  d       doj=                  d      xs i j=                  dN       doj=                  d      xs i j=                  d       dj=                  d      xs i j=                  d       d1j=                  d      xs i j=                  dN       d1j=                  d      xs i j=                  d       doj=                  d}       dqj=                  dwi       j=                  d       dqj=                  d      xs i j=                  d$       dj=                  d       dt        q       dt        q       dt        q       dqj=                  d      xs i j=                  d       dqj=                  d      xs i j=                  dN       dqj=                  d      xs i j=                  d       dj=                  dQi       j=                  d       d"|j=                  dwi       j=                  d       dj=                  d       dt        |       dt        |       dt        |       d|j=                  d      xs i j=                  d       dj=                  d      xs i j=                  dN       dj=                  d      xs i j=                  d       dj=                  dQi       j=                  d       dx|j=                  dwi       j=                  d+       d1|j=                  dwi       j=                  dƫ       d	j=                  d       dt        |       dt        |       dt        |       d|j=                  d      xs i j=                  d       dj=                  d      xs i j=                  dN       dj=                  d      xs i j=                  d             dj                  g dj=                  dQi       j=                  d       d"|j=                  dwi       j=                  d       d|j=                  d      xs i j=                  d$       dj=                  d       dt               dt        |       dt        |       d|j=                  d      xs i j=                  d       dj=                  d      xs i j=                  dN       dj=                  d      xs i j=                  d       d$j=                  dQi       j=                  d       d"|$j=                  dwi       j=                  d       d%j=                  dY       d"&j=                  dc       d|%j=                  dX       d|&j=                  db       d(j=                  d       d|(j=                  dk       d|(j=                  dl       d|(j=                  dm       d|(j=                  d      xs i j=                  d       d(j=                  d      xs i j=                  dN       d(j=                  d      xs i j=                  d             1j=                  d       d3j=                  d&       d|3j=                  d       d|1j=                  d       dÐ2r2d&   nd 	9j=                  d       d;j=                  d&       d|;j=                  d       dĐ<j=                  d       dŐ=j=                  d       dƐdqj                  |<j=                  d      xs g        Cj=                  d      xs Bj=                  d       dǐCj=                  d       dE|Cj=                  da       dȐ|Cj=                  d       dɐdqj                  dʄ ED               dːBj=                  d       Hj=                  d       d̐|Hj=                  dO       d}|Hj=                  d       d͐|Hj=                  d       dΐ|Hj=                  de       	Lj=                  d      xs i j=                  dd       dϐLj=                  d       dАKj=                  dO       d}|Kj=                  d       dΐ|Kj=                  de       dѐd7j                  |Kj=                  d      xs g        dҐOj=                  dE      xs i j=                  dD       dӐOj=                  d       dԐ|Oj=                  dE      xs i j=                  d      xs i j=                  d       dՐOj=                  dO       d}|Oj=                  d       d֐|Oj=                  dǫ       dt        P       Xj=                  d       dАWj=                  dO       d}|Wj=                  d       dΐ|Xj=                  de       dؐ|Wj=                  d߫       dِ|Wj=                  d       dڐ|Wj=                  d       dې|Xj=                  dҫ       dܐ|Xj=                  dӫ       dݐRj=                  d       dА|Rj=                  dO       d}|Rj=                  d       dΐSj=                  dЫ       [j=                  d      xs i j=                  dd       dϐ[j=                  d       dАZj=                  dO       d}|Zj=                  d       dΐ\j=                  dЫ       dѐd7j                  |Zj=                  d      xs g        dސ]j=                  dЫ       dȐ^j=                  dЫ       dې|^j=                  dҫ       dܐ|^j=                  dӫ       cj=                  d       d7a d"e d7f dߐh d7i d"k d7l ddi d|"d'|(d|*d8|d)|)d+|d6|d|0d|.d|1d|8d|>d|?dhdIdJdKi dMdOdPdRdSdUdVdXd\d]d_d`dbdjdldrdxi dvd yd|ddddddddodؓd	ٓd
qddddi d$d%d&d'd(d/d1d7d9dBdHdKdOdRdZd|]d|^b|cgjd }mt        |m       |md   }nt        dj                  g d!| d"|! d"|# d#|nd     d$|nd$    d%|% d&|nd    d'|ndK    d;|nd    d(|ndd    d)|nd    d*|nd+    d,|nd-    d.|nd    d/|nd6    d0|nd1    d2|nd    d3|nd4                 |r	 t%        |d5d$| d!       |j	                          	 |j                  d!       |r|j                  d6       |r|	j                  d6       |r|
j                  d6       	 d d d        |s|j                  d6       y y # 1 sw Y   xY w# 1 sw Y   xY wc c}w c c}w c c}sw c c}w c c}w c c}w c c}sw c c}sw c c}sw c c}w c c}sw c c}sw c c}sw c c}sw c c}w c c}sw c c}sw c c}sw c c}sw c c}sw c c}sw c c}sw c c}sw c c}w c c}sw c c}sw c c}sw c c}w # t        $ r Y ;w xY w# t        j                  $ r& |j                          |j                          Y Sw xY w# |r%	 t%        |d5d$| d!       n# t        $ r Y nw xY w|j	                          	 |j                  d!       n<# t        j                  $ r% |j                          |j                          Y nw xY w|r|j                  d6       |r|	j                  d6       |r|
j                  d6       w w xY w# 1 sw Y   xY w(7  NWebKitWebDriverzNWebKitWebDriver is not installed; install webkit2gtk-driver and run under Xvfbr  zmobile_browser_webkitdriver.logTr  wbz--host=127.0.0.1z--port=z--replace-on-new-session)stdoutstderrrT   SAVEDATAsavedat9.datzsavedat8.zipzsavedat_zip_probe.zipFr~   public_savedataflack3rzsavedat2.datw)compressionz"synthetic_savedat_selector_2_0.datSAVEDATA/savedat_zip.datr   r   r   r   r    r!      r   r   	sessionIdr   z/window/rectr   i  iL  )xywidthheightr=   map1_02bz11,12zrinshan,smash180)r   	startTilepartyspriteDebugmoveMs/z/web/game.html?z/urlurl>	   rj   stepvictoryr  menuMove	battleHit
transitionbattleStartmenuConfirmkeysvolumessourcesr1  gffffff?gMbP?r5  g?c              3  z   K   | ]2  }t        xs i j                  |d             j                  d       4 yw)rT   z.wavN)rb   r   r,  )r   r^   sound_sourcess     r   r   z!verify_browser.<locals>.<genexpr>  s4     oX[3 388bABKKFSos   8;z3WLK sound assets were not initialized as expected: g?g      ?r  loadedscanzsavedat scan: no captured savesc              3  $   K   | ]  }d |v  
 yw)z$put savedat1-9 .dat/.zip in SAVEDATANr   r   lines     r   r   z!verify_browser.<locals>.<genexpr>  s     gdATIg   c              3  $   K   | ]  }d |v  
 yw)zdrag a savedat .dat/.zipNr   rA  s     r   r   z!verify_browser.<locals>.<genexpr>  s     [$5=[rC  c              3  $   K   | ]  }d |v  
 yw)zneed 2:0 0x00540714Nr   rA  s     r   r   z!verify_browser.<locals>.<genexpr>  s     VT0D8VrC  zBsavedat no-save scan HUD did not render expected intake guidance: 
soundStatecountsmenuLogactionsoundSrcr   beforehiddenmenuOpen	afterOpenre  main	afterMoveselectedMenuItemIndexr   
afterCloser7  r2   r3  )openmoveclosec              3  >   K   | ]  }|j                  d         yw)z/extract_wlk/04.wavN)r,  )r   r
  s     r   r   z!verify_browser.<locals>.<genexpr>  s        Nf6??+@A  Ns   z/extract_wlk/03.wavc              3  B   K   | ]  }|j                  d       du   yw)"browserRuntimeMenuSoundImplementedTNr  r   re   s     r   r   z!verify_browser.<locals>.<genexpr>  s      tWZCGG$HITQtr  c              3  B   K   | ]  }|j                  d       du   yw)#originalMenuSoundRuntimeImplementedFNr  rY  s     r   r   z!verify_browser.<locals>.<genexpr>  s      vY\CGG$IJeSvr  z0mobile menu button did not toggle runtime menu: frontierHidden
pathHiddenpathTargetCount
nextHiddenz=route assist controls should stay hidden before routeAssist: activez(canvas touch did not activate joystick: knobX48pxz4canvas touch did not clamp joystick knob to radius: g333333?z*canvas touch release did not hide joystickz9canvas touch did not change the rendered map/player framemap=map1_02bz
startTile=zBcanvas touch movement did not keep current map/start tile in URL: zparty=rinshan%2Csmashz;canvas touch movement did not preserve party query in URL: zstartTile=11%2C12z7canvas touch movement did not update startTile in URL: z:canvas touch movement did not request the step WLK sound: afterOnoverviewz
overview=1searchafterOffz3overview button did not toggle overview URL/state: displaynonemap2_02dvaluesselectedtitlemapscount   zEmap filter did not narrow map dropdown while preserving current map: z*document touch did not activate joystick: knobYz6document touch did not clamp joystick knob to radius: N   r   z,document touch release did not hide joystickmap4_08nz11,11)r   r+  r.  _rJ   r   z dialogue test map did not load: u   대사r  z3dialogue button was not ready for the current map: rM   rd  zevent-dialogue-block-005r   r   dialogueBoxRendervmReplayrenderCoverageStatuszpartial-render-prefixactiveVmRenderEventactiveIndex
activeLineexactIdsblockId&browserEventVmPartialReplayImplemented browserEventVmFullImplementationrenderEventCountvmDrivenLineCountfirstRenderTextSourceValueHex
0x00030000	lineIndextextSourceValueHexvmRenderEvent0x0dexecutedOpcodes0x0bz?dialogue button did not open exact map-linked dialogue: before=z after=r   R   z#mobile A did not advance dialogue: r  z;dialogue open/advance did not request dialogue WLK sounds: )r   r+  menur.  rt  zparty=rinshanz0menu party command did not persist party query: savedpayloadManualPartyr^   rinshanmembersRinshanpayloadRuntimeCharactersmutatedr   activeLabelsruntimeCharactersz9manual party quick save/load did not restore party: save=z load=u   후보 진행 켬z0route assist button did not enable routeAssist:    z8route assist button did not expose route path controls: u   후보 진행z6route assist button title did not expose active mode: trialTransitions=routeAssistz1route assist button did not persist mode in URL: map1_01az=confirmed normal transition did not change the rendered scenemap=map1_01azstartTile=11%2C11zEconfirmed normal transition did not persist current map/tile in URL: selectedTargettransitionTarget=map2_02dfocusTile=18%2C0z>route assist button did not activate first map1_01a frontier: r	  map2_18d)r   r+  trialTransitions	routeGoalr.  rt  selectedGoalnextDisablednextTextu   다음targetCountmap5_40ftargetszmap1_02b -> map1_01a	nextTitlez8routeGoal path did not select the first confirmed step: disabledz)routeGoal next button was not clickable: u   후보zmap1_01a -> map2_02drouteGoal=map2_18dz9routeGoal next button did not follow the confirmed edge: z search=z,routeGoal blocker button was not clickable: )r  startTile=18%2C0r  r  r  r  u   진입zBrouteGoal blocker focus did not preserve the selected trial step: z3routeGoal blocker target button was not clickable: )map=map2_02dzstartTile=47%2C47r  r  zmap2_02d -> map2_18dzArouteGoal target step did not select the post-blocker candidate: z;routeGoal post-blocker candidate button was not clickable: )r  r  ztransitionTarget=map2_18dr  z=routeGoal post-blocker focus did not preserve the candidate: z+routeGoal finish button was not clickable: )map=map2_18dr  r  >      도착   완료z:routeGoal finish did not land on the selected route goal: zmap1_01a -> map1_02bz;route return path did not select the reciprocal candidate: z-route return focus button was not clickable: )r  r  r  r  ztransitionTarget=map1_02brouteGoal=map1_02bz>route return focus did not preserve the reciprocal candidate: z.route return target button was not clickable: )rc  zstartTile=58%2C95r  r  u   이어가기z7route return did not land on the selected return goal: )r   r,  r.  rt  u   전투z1battle button was not ready for the current map: z$battle scene rendered a blank canvascommandDetailsr(   r   names)Atahor  Smashu
activeNamer  r   u   정권z/battle scene did not use manual party members: g?z8battle A-button action did not change the rendered sceneturnAutoSavecommandrU   r5   savedPayloadprototypeProgressc              3  J   K   | ]  }|j                  d       dk(  s|  ywr]   r  Nr  rY  s     r   r   z!verify_browser.<locals>.<genexpr>  s3       Impmtmtu{m|  AH  nH  I   ##runtimeState
charactersc              3  J   K   | ]  }|j                  d       dk(  s|  ywr  r  rY  s     r   r   z!verify_browser.<locals>.<genexpr>
  s!     hSWWU[_`gMghr  partyHpenemyHpi  u   유미쌍조r
  zbattle-turn-prototypescopezbattle-turncommandName
targetNametargetHpAfterhpz3battle A-button action did not advance party turn: finishedrewardGrantedc              3  6   K   | ]  }d t        |      v   yw)u   보상 소지금 +Nrb   rA  s     r   r   z!verify_browser.<locals>.<genexpr>   s     h/3t9<h   logu   승리했다.z1battle attack loop did not grant victory reward: r6  r4  r2  z5battle start/hit/victory did not request WLK sounds: progresscanSavezbattle-victory
savedMoney
savedScenesmashz6finished battle auto-save did not store reward state: battleActivenoticeu   전투 종료moneyzJfinished battle A-button did not return to map with pending reward state: r  z/quick load did not restore reward money: saved=z loaded=zhhe-debug-savedat2)
publicSaver   r.  rt  r   actorBaseStats
actorHpMaxactorIncomingDamageactorSkillSummary
individualentriesgroupactorSkillCommandsactorAttackCommandr   u   돌려차기u	   던지기
skillIndexlevelvalueHex0x0a0x23
skillBlock   atk   defr:   actorAttackDamageactorSkillDamageactorSkillMpCostz:public savedat battle did not expose savedat party/items: r]   skills)   장궁r  r   r   0x09rJ   r5   r:   )u	   충격파r  r   r   0x1crp  r5   r=   )u   마구베기r  r   r   0x05r2   r@   r   )   투구쪼개기r  r   r   0x14rJ   r5   r2   z savedat skills are missing: 
skillLevelskillValueHexmpCostdamagez! savedat skill command mismatch: zRinshan=r  c              3  @   K   | ]  }|j                  d d        ywr]   rT   Nr  rY  s     r   r   z!verify_browser.<locals>.<genexpr>  s     #VCCGGFB$7#V   z	; Smashu=c              3  @   K   | ]  }|j                  d d        ywr  r  rY  s     r   r   z!verify_browser.<locals>.<genexpr>  s     "T337762#6"Tr  z-public savedat party skill execution failed: ))r  )
r  r  r  r   r   r  rJ   r  r5   r:   )smashu)
r  r  r  r   r   r  rJ   r  r5   r2   afterr   z MP-actormpsourceMp	nextActorzpublic savedat z" skill did not execute correctly: autoSave
savedActorobjectiveBeforeobjectiveActionobjectiveCompletionNoticez -z / MP -   전투 기술 완료 1/1zbattle-skill-use)r
  r7  r8  r  )r
  r7  r8  r  r   z'battle-skill-completion-notice-feedbackskillz../extract_wlk/09.wavz../extract_wlk/04.wavr@  prototypeSkillUseImplementedoriginalSkillFormulaImplemented originalCombatFormulaImplemented#originalStoryFlagRuntimeImplementedmpBeforempAfterenemyHpBeforeenemyHpAfter
durationMsi  zbattle-skill-prototypezbattle-skillr6  r5  
payloadMapu"   후보 전투 기술 완료 btl_a1z!prototype-battle-skill-completion
nextActionu   완료 알림 확인detailobjectiveResultzbattle-skill-completion-noticehandledzbattle-skill-complete:map1_01ac              3  $   K   | ]  }d |v  
 ywr  Nr   rA  s     r   r   z!verify_browser.<locals>.<genexpr>>  s     ]$5=]rC  c              3  $   K   | ]  }d |v  
 ywbtl_a1Nr   rA  s     r   r   z!verify_browser.<locals>.<genexpr>?  s     K8t+KrC  c              3  $   K   | ]  }d |v  
 ywu   Ataho 돌려차기Nr   rA  s     r   r   z!verify_browser.<locals>.<genexpr>@  s     WD/47WrC  c              3  n   K   | ],  }d j                  d       dj                  d       |v  . ywzMP r  ->Nr  r   rB  skill_afterskill_befores     r   r   z!verify_browser.<locals>.<genexpr>A  s;     z_cS!1!1$!7 8;??4;P:QRVZZz   25c              3     K   | ]=  }j                  d        dj                  d       dj                  d       |v  ? yw	enemyName HP r  r  Nr  r   rB  r  skill_auto_saver  s     r   r   z!verify_browser.<locals>.<genexpr>B  sb       h  MQo11+>?tLDTDTU^D_C``bcncrcrs|c}b~  DH  H  h   AAc              3  J   K   | ]  }d j                  d       |v   yw)u   피해 r  Nr  )r   rB  r  s     r   r   z!verify_browser.<locals>.<genexpr>C  s)     idW\%5%5h%?$@ATIis    #r"  zEpublic savedat battle skill command did not consume MP/damage enemy: 
titleStatetitleMenuLabelsprogressCountsbattleSkillquickLoadTextu   이어하기c              3  $   K   | ]  }d |v  
 ywu   이어하기 map1_01a 1,2Nr   r   labels     r   r   z!verify_browser.<locals>.<genexpr>l  s     `E6%?`rC  titleContinueu   임시 불러오기	completedc              3  $   K   | ]  }d |v  
 ywr  r   rA  s     r   r   z!verify_browser.<locals>.<genexpr>~  s     c$5=crC  c              3  $   K   | ]  }d |v  
 ywr  r   rA  s     r   r   z!verify_browser.<locals>.<genexpr>  s     ]D/47]rC  c              3  n   K   | ],  }d j                  d       dj                  d       |v  . ywr  r  r  s     r   r   z!verify_browser.<locals>.<genexpr>  sA       A_cS!1!1$!7 8;??4;P:QRVZZ  Ar  c              3     K   | ]=  }j                  d        dj                  d       dj                  d       |v  ? ywr!  r  r$  s     r   r   z!verify_browser.<locals>.<genexpr>  sb       n  MQo11+>?tLDTDTU^D_C``bcncrcrs|c}b~  DH  H  nr&  zVpublic savedat battle skill title continue did not restore completed objective: start=z	 restore=u
    MP 부족zbattle-skill-no-mpu   Ataho MP가 부족하다.failedinsufficientMpz7public savedat battle skill no-MP guard mutated state: hpMaxu   약초 Ataho HP markerprogressEventc              3  J   K   | ]  }|j                  d       dk(  s|  ywr  r  rY  s     r   r   z!verify_browser.<locals>.<genexpr>  s%     rWZW^W^_eWfjqWqrr  c              3  J   K   | ]  }|j                  d       dk(  s|  ywr]   r   Nr  rY  s     r   r   z!verify_browser.<locals>.<genexpr>  s%     nRURYRYZ`RaemRmnr  rE   c              3  J   K   | ]  }|j                  d       dk(  s|  ywr  r  rY  s     r   r   z!verify_browser.<locals>.<genexpr>  s3       Jnqnunuv|n}  BI  oI  Jr  c              3  J   K   | ]  }|j                  d       dk(  s|  ywr>  r  rY  s     r   r   z!verify_browser.<locals>.<genexpr>  s3       Filipipqwix  }E  jE  Fr  zbattle-item-userP   zHP +20)r
  rn   r  )r
  rn   r  r   rj   zitem-use-prototypezbattle-itemitemName
countAfterhpAfterhpGain   r  $originalItemEffectFormulaImplementedu"   후보 전투 도구 완료 btl_a1z prototype-battle-item-completionzbattle-item-completion-noticezbattle-item-complete:map1_01ac              3  $   K   | ]  }d |v  
 ywu   전투 도구 완료 1/1Nr   rA  s     r   r   z!verify_browser.<locals>.<genexpr>(  s     d$5=drC  c              3  $   K   | ]  }d |v  
 ywr  r   rA  s     r   r   z!verify_browser.<locals>.<genexpr>)  s     R8t+RrC  c              3  $   K   | ]  }d |v  
 ywu   Ataho 약초Nr   rA  s     r   r   z!verify_browser.<locals>.<genexpr>*  s     Xd>T1XrC  c              3  $   K   | ]  }d |v  
 ywu   약초 3->2Nr   rA  s     r   r   z!verify_browser.<locals>.<genexpr>+  s     WT=D0WrC  c              3  p   K   | ]-  }d j                  di       j                  d       d |v  / ywz	Ataho HP rK  r  r  Nr  r   rB  savedat_itemsavedat_item_hp_maxs     r   r   z!verify_browser.<locals>.<genexpr>,  sG       XuyY|'7'7"'E'I'I$'O&PPRSfRghlpp  X   36z9public savedat battle item command did not consume/heal: 
battleItemc              3  $   K   | ]  }d |v  
 ywr.  r   r/  s     r   r   z!verify_browser.<locals>.<genexpr>B  s     _E6%?_rC  c              3  $   K   | ]  }d |v  
 ywrH  r   rA  s     r   r   z!verify_browser.<locals>.<genexpr>T  s     b$5=brC  c              3  $   K   | ]  }d |v  
 ywrK  r   rA  s     r   r   z!verify_browser.<locals>.<genexpr>U  s     Vd>T1VrC  c              3  $   K   | ]  }d |v  
 ywrM  r   rA  s     r   r   z!verify_browser.<locals>.<genexpr>V  s     UT=D0UrC  c              3  p   K   | ]-  }d j                  di       j                  d       d |v  / ywrO  r  rP  s     r   r   z!verify_browser.<locals>.<genexpr>W  sG       VuyY|'7'7"'E'I'I$'O&PPRSfRghlpp  VrS  zUpublic savedat battle item title continue did not restore completed objective: start=mpMax2   u   마법의 물약 Rinshan MP c              3  J   K   | ]  }|j                  d       dk(  s|  ywr]   r  Nr  rY  s     r   r   z!verify_browser.<locals>.<genexpr>o  s%     y\_\c\cdj\kox\xyr  c              3  J   K   | ]  }|j                  d       dk(  s|  ywr^   rR   Nr  rY  s     r   r   z!verify_browser.<locals>.<genexpr>s  s%     wWZW^W^_dWeivWvwr  c              3  J   K   | ]  }|j                  d       dk(  s|  ywr]  r  rY  s     r   r   z!verify_browser.<locals>.<genexpr>z  s;       Qsvszsz  |B  tC  GP  tP  Qr  c              3  J   K   | ]  }|j                  d       dk(  s|  ywr_  r  rY  s     r   r   z!verify_browser.<locals>.<genexpr>~  s3       Onqnunuv{n|  AN  oN  Or  rR   zMP +50openedu   마법의 물약 x1labelspotionCountitemMenuOpenu   마법의 물약mpGainc              3  $   K   | ]  }d |v  
 ywrH  r   rA  s     r   r   z!verify_browser.<locals>.<genexpr>       i$5=irC  c              3  $   K   | ]  }d |v  
 ywr  r   rA  s     r   r   z!verify_browser.<locals>.<genexpr>  s     W8t+WrC  c              3  $   K   | ]  }d |v  
 yw)u   Rinshan 마법의 물약Nr   rA  s     r   r   z!verify_browser.<locals>.<genexpr>  rh  rC  c              3  $   K   | ]  }d |v  
 yw)u   마법의 물약 1->0Nr   rA  s     r   r   z!verify_browser.<locals>.<genexpr>  s     ft2d:frC  c              3     K   | ]L  }d j                  di       j                  d       dj                  di       j                  d       |v  N yw)zRinshan MP rK  r  r  r  Nr  )r   rB  savedat_item_menus     r   r   z!verify_browser.<locals>.<genexpr>  s       }  VZ[):)>)>x)L)P)PQU)V(WWYZkZoZopwy{Z|  [A  [A  BF  [G  ZH  I  MQ  Q  }s   AAz;public savedat battle item menu did not select/use potion: rQ   u
   독 회복statusespoisonu   해독초 x1sourceStatusesantidoteCountu   해독초 Smashu 독 회복u	   해독초curedStatuses originalStatusFormulaImplementedc              3  $   K   | ]  }d |v  
 ywrH  r   rA  s     r   r   z!verify_browser.<locals>.<genexpr>       f$5=frC  c              3  $   K   | ]  }d |v  
 ywr  r   rA  s     r   r   z!verify_browser.<locals>.<genexpr>       T8t+TrC  c              3  $   K   | ]  }d |v  
 yw)u   Smashu 해독초Nr   rA  s     r   r   z!verify_browser.<locals>.<genexpr>       ^$-5^rC  c              3  $   K   | ]  }d |v  
 yw)u   해독초 1->0Nr   rA  s     r   r   z!verify_browser.<locals>.<genexpr>       \+t3\rC  c              3  $   K   | ]  }d |v  
 yw)u   상태 poison->정상Nr   rA  s     r   r   z!verify_browser.<locals>.<genexpr>  s     ct2d:crC  z9public savedat battle antidote item did not cure status: rS   u   부활u
   마수석 fallenr#  z MP fallenHpfallenMp
herbTargetu   마수석 x1sourceHp
stoneCountu	   마수석revivedc              3  $   K   | ]  }d |v  
 ywrH  r   rA  s     r   r   z!verify_browser.<locals>.<genexpr>v  ru  rC  c              3  $   K   | ]  }d |v  
 ywr  r   rA  s     r   r   z!verify_browser.<locals>.<genexpr>w  rw  rC  c              3  $   K   | ]  }d |v  
 yw)u   Ataho 마수석Nr   rA  s     r   r   z!verify_browser.<locals>.<genexpr>x  s     ],4]rC  c              3  $   K   | ]  }d |v  
 yw)u   마수석 1->0Nr   rA  s     r   r   z!verify_browser.<locals>.<genexpr>y  r{  rC  c              3  $   K   | ]  }d |v  
 yw)zSmashu HP 0->999Nr   rA  s     r   r   z!verify_browser.<locals>.<genexpr>z  ry  rC  c              3  $   K   | ]  }d |v  
 yw)zSmashu MP 0->999Nr   rA  s     r   r   z!verify_browser.<locals>.<genexpr>{  ry  rC  z@public savedat battle revive item did not revive fallen member: )r  r  r.  rt  c              3  P   K   | ]  }t        |      j                  d          yw)u   도구 선택N)rb   rg  r/  s     r   r   z!verify_browser.<locals>.<genexpr>  s     pe3u:00Aps   $&atahoc              3  r   K   | ]/  }d t        |      v xr dt        |      v xr dt        |      v  1 yw)zEXP zATK u   기술 Nr  rA  s     r   r   z!verify_browser.<locals>.<genexpr>  sB       Xfj6SY.a6SY3Fa9X[\`XaKaa  Xs   57characterLinesz6public savedat menu did not expose savedat inventory: zinventory-item-useu   약초 HP +30u   약초 Ataho HPu	   약초 x3inventoryLabelsinventoryOpenMarkerzprototype-inventory-item-menuinventorySelectionMarkerr  countBeforeafterMenuModerY  prototypeItemUseImplementediL  u   후보 도구 완료 map1_01azprototype-item-use-completionzitem-use-completion-noticezitem-use-complete:map1_01ac              3  $   K   | ]  }d |v  
 ywu   도구 사용 완료 1/1Nr   rA  s     r   r   z!verify_browser.<locals>.<genexpr>  rh  rC  c              3  $   K   | ]  }d |v  
 ywrK  r   rA  s     r   r   z!verify_browser.<locals>.<genexpr>  s     ]d>T1]rC  c              3  $   K   | ]  }d |v  
 yw)zHP 969 -> 999Nr   rA  s     r   r   z!verify_browser.<locals>.<genexpr>       ^t?d2^rC  c              3  $   K   | ]  }d |v  
 yw)u   약초 3 -> 2Nr   rA  s     r   r   z!verify_browser.<locals>.<genexpr>  r  rC  z/public savedat menu item did not consume/heal: 	paralysisu!   해독초 Ataho 독/마비 회복c              3  T   K   | ]   }d t        |      v xs dt        |      v  " yw)u
   상태 독u   상태 마비Nr  rA  s     r   r   z!verify_browser.<locals>.<genexpr>  s1       NUY|s4y0POs4y4PP  Ns   &(z7public savedat menu antidote item did not cure status: 	saveIndex	loadIndexsaveCommandResultloadCommandResult
saveNoticeu   임시 저장했습니다.loadNoticeStartu!   임시 저장을 불러옵니다.u   임시 저장
saveLabels
loadLabels
savedCountsavedHpsavedStatussavedFieldMapssavedRouteStatusznot-current-selectormutatedCount	mutatedHpmutatedStatusz=public savedat menu item quick save did not persist payload: ro  loadedHploadedStatus	fieldMapsrouteStatussaveMapHiddensaveMapValuesu$   임시 저장을 불러왔습니다.z=public savedat menu item quick load did not restore payload: c              3  0   K   | ]  }d |v xr d|v   yw)u   이어하기 map1_01au   세이브 0:0Nr   r/  s     r   r   z!verify_browser.<locals>.<genexpr>!  s+       A]b2e;XSX@XX  As   	itemCountatahoHpatahoStatuses   Ataho 해독초progressTotalc              3  $   K   | ]  }d |v  
 ywr  r   rA  s     r   r   z!verify_browser.<locals>.<genexpr>8  s     j$5=jrC  c              3  $   K   | ]  }d |v  
 yw)r  Nr   rA  s     r   r   z!verify_browser.<locals>.<genexpr>9  s     a,4arC  c              3  $   K   | ]  }d |v  
 yw)zHP 999 -> 999Nr   rA  s     r   r   z!verify_browser.<locals>.<genexpr>:  s     _t?d2_rC  c              3  $   K   | ]  }d |v  
 yw)u   해독초 1 -> 0Nr   rA  s     r   r   z!verify_browser.<locals>.<genexpr>;  s     b$-5brC  zGpublic savedat menu item title continue did not restore payload: start=rg   directIndexc              3  6   K   | ]  }d t        |      v   ywu   세이브 선택Nr  r/  s     r   r   z!verify_browser.<locals>.<genexpr>G  s     x-U;xr  commandResultu   세이브 후보z1save-point candidate menu command did not start: activeLineslast
candidateszsave-point-candidates:map1_01a#originalSavePointRuntimeImplementedzglobal-review   u6   세이브 후보 map1_01a: 6개 (전체 후보 검토)uC   원본 저장 실행이 아니라 후보 텍스트 검토입니다.uK   event opcode와 좌표가 미확정이라 임시 저장과 별개입니다.c              3  D   K   | ]  }|j                  d       dk(    yw)r|  zevent-dialogue-block-046Nr  rY  s     r   r   z!verify_browser.<locals>.<genexpr>]  s      rPS3779-1KKr    c              3  B   K   | ]  }|j                  d       dv   yw)strength>   false-positive-likelysystem-ui-not-savepointNr  rY  s     r   r   z!verify_browser.<locals>.<genexpr>^  s'       GGJ'+__r  zBsave-point candidate menu did not open read-only review dialogue: map2_07ec              3  6   K   | ]  }d t        |      v   ywr  r  r/  s     r   r   z!verify_browser.<locals>.<genexpr>u  s     r-U;rr  z6candidate save-point prototype command did not start: runtimeSavetilezsave-point-candidates:map2_07ezcurrent-mapeligiblezevent-dialogue-block-033blockIdsversionu9   후보 저장 map2_07e: 완료 (현재 맵 직접 연결)uI   원본 저장 실행 증명이 아니라 프로토타입 저장입니다.uF   현재 위치와 상태를 임시 저장 슬롯에 보존했습니다.zIcandidate save-point prototype did not quick-save current-map candidate: rl  )r   r+  eventsr.  rt  rk  	assetKeysobjectsshowEventHotspotsrm  rn  rp  >   zm_2zs_rgzg_kniassetKeyc              3  R   K   | ]  }|j                  d       xs i dddk(   ! yw)anchor   r$  r%  Nr  rY  s     r   r   z!verify_browser.<locals>.<genexpr>  s(     hsCGGH-3br8JJhs   %'z<event object overlay did not expose linked object previews: z,../data/public_savedata/flack3r/savedat2.dat)r  r.  rt  a  
return {
  scene,
  map: map?.name || '',
  loaded: !!loadedSaveSummary,
  fileName: loadedSaveSummary?.fileName || '',
  group: loadedSaveSummary?.group ?? null,
  slot: loadedSaveSummary?.slot ?? null,
  routeStatus: loadedSaveSummary?.routeEvidence?.status || '',
  debugRouteStatus: window.HWANSE_LAST_SAVEDAT_ROUTE_EVIDENCE?.status || '',
  debugSelector: window.HWANSE_LAST_SAVEDAT_SUMMARY?.selector || '',
  fieldMaps: loadedSaveSummary?.fieldMaps || [],
  saveMapHidden: document.getElementById('saveMapSelect').hidden,
};
fileNameslotdebugRouteStatusdebugSelectorz1:0z7savedatUrl did not load and classify flack3r savedat2: z!../SAVEDATA/savedat_zip_probe.zipa  
const archive = window.HWANSE_LAST_SAVEDAT_ARCHIVE || {};
return {
  scene,
  map: map?.name || '',
  loaded: !!loadedSaveSummary,
  fileName: loadedSaveSummary?.fileName || '',
  group: loadedSaveSummary?.group ?? null,
  slot: loadedSaveSummary?.slot ?? null,
  routeStatus: loadedSaveSummary?.routeEvidence?.status || '',
  debugRouteStatus: window.HWANSE_LAST_SAVEDAT_ROUTE_EVIDENCE?.status || '',
  debugSelector: window.HWANSE_LAST_SAVEDAT_SUMMARY?.selector || '',
  fieldMaps: loadedSaveSummary?.fieldMaps || [],
  hudLines: window.HWANSE_LAST_SAVE_HUD_LINES || [],
  archive: {
    fileName: archive.fileName || '',
    entryCount: archive.entryCount ?? null,
    loaded: archive.loaded ?? null,
    loadedMap: archive.loadedMap || '',
    selected: archive.selected || null,
    rows: (archive.rows || []).map((row) => ({
      name: row.name || '',
      valid: !!row.valid,
      selector: row.selector || '',
      routeStatus: row.routeStatus || '',
      routeProofCandidate: !!row.routeProofCandidate,
    })),
  },
};
c              3  $   K   | ]  }d |v  
 ywzzip savedat_zip.datNr   rA  s     r   r   z!verify_browser.<locals>.<genexpr>       rd1T9rrC  hudLinesarchivez/savedat_zip_probe.zip::SAVEDATA/savedat_zip.datzsynthetic-selector-evidencez2:0
entryCount	loadedMapc              3  j   K   | ]+  }|j                  d       dk(  xr |j                  d       - ywr]   r!  validNr  rY  s     r   r   z!verify_browser.<locals>.<genexpr>"  s7       Lbe3776?.HH]SWWU\M]]  L   13rowsc              3  $   K   | ]  }d |v  
 ywzzip savedat_zip.dat 1 entryNr   rA  s     r   r   z!verify_browser.<locals>.<genexpr>#       yT8D@yrC  zAsavedatUrl zip did not load and classify synthetic selector 2:0: )r  r.  rt  ao  
const scan = window.HWANSE_LAST_SAVEDAT_SCAN || null;
const archive = window.HWANSE_LAST_SAVEDAT_ARCHIVE || {};
return {
  scene,
  map: map?.name || '',
  loaded: !!loadedSaveSummary,
  fileName: loadedSaveSummary?.fileName || '',
  group: loadedSaveSummary?.group ?? null,
  slot: loadedSaveSummary?.slot ?? null,
  routeStatus: loadedSaveSummary?.routeEvidence?.status || '',
  debugRouteStatus: window.HWANSE_LAST_SAVEDAT_ROUTE_EVIDENCE?.status || '',
  debugSelector: window.HWANSE_LAST_SAVEDAT_SUMMARY?.selector || '',
  selectValue: document.getElementById('publicSaveSelect')?.value || '',
  hudLines: window.HWANSE_LAST_SAVE_HUD_LINES || [],
  archive: {
    fileName: archive.fileName || '',
    entryCount: archive.entryCount ?? null,
    loaded: archive.loaded ?? null,
    loadedMap: archive.loadedMap || '',
    selected: archive.selected || null,
  },
  scan,
};
found&savedat8.zip::SAVEDATA/savedat_zip.datselectValue__savedatScanpaths$   c              3  D   K   | ]  }|j                  d       dk(    yw)r  r  Nr  rY  s     r   r   z!verify_browser.<locals>.<genexpr>_  s     1v\_#''*2E2W1vr  c              3  D   K   | ]  }|j                  d       dk(    yw)r  r  Nr  rY  s     r   r   z!verify_browser.<locals>.<genexpr>`  s&       6Uz}cggj6IMu6u  6Ur  c              3     K   | ]B  }|j                  d       dk(  xr( |j                  d      du xr |j                  d      du  D yw)r  r  syntheticDiagnosticTrealRouteProofCandidateFNr  rY  s     r   r   z!verify_browser.<locals>.<genexpr>a  s       6p  VYcggj6IMu6u  7Qz}  {B  {B  CX  {Y  ]a  {a  7Q  fi  fm  fm  nG  fH  LQ  fQ  7Q  6ps   AA
z:savedatScan did not scan and load a local SAVEDATA probe: localProbeSyntheticlocalProbeDatSamplerouteEvidencedebugRouteEvidencedebugSummaryfrontierOptions"      r  r   routeProofCandidater  r  selectorr  selectedTransitionTargettransitionTargetExplicitrouteFrontierHiddenc              3  D   K   | ]  }|j                  d       dk(    yw)targetrj  Nr  )r   options     r   r   z!verify_browser.<locals>.<genexpr>  s     f&6::h/:=fr  z*synthetic selector 2:0 routeAssist enabledzstrict hotspot still neededzHsynthetic selector 2:0 savedat file load did not expose route evidence: dropdragDispatchedactiveAfterEnteractiveAfterOveractiveAfterDropzsynthetic_drop_savedat2.datu%   synthetic_drop_savedat2.dat 불러옴zMsynthetic selector 2:0 savedat drop load did not expose drop route evidence: c              3  $   K   | ]  }d |v  
 ywr  r   rA  s     r   r   z!verify_browser.<locals>.<genexpr>  r  rC  c              3  $   K   | ]  }d |v  
 ywz(save synthetic_savedat_bundle.zip::savedNr   rA  s     r   r   z!verify_browser.<locals>.<genexpr>  s        CdJrC  z6synthetic_savedat_bundle.zip::SAVEDATA/savedat_zip.datzsynthetic_savedat_bundle.zipc              3  j   K   | ]+  }|j                  d       dk(  xr |j                  d       - ywr  r  rY  s     r   r   z!verify_browser.<locals>.<genexpr>  s7       Hbe3776?.HH]SWWU\M]]  Hr  c              3  $   K   | ]  }d |v  
 ywr  r   rA  s     r   r   z!verify_browser.<locals>.<genexpr>  s       GRVEM  GrC  c              3  $   K   | ]  }d |v  
 ywr  r   rA  s     r   r   z!verify_browser.<locals>.<genexpr>  r  rC  zOsynthetic selector 2:0 savedat zip load did not expose archive route evidence: routeSyntheticDiagnosticfingerprint
0xcc06ddd0zHsynthetic selector quick save did not persist synthetic route metadata: zHsynthetic selector quick load did not restore synthetic route metadata: z18,0)r   r  r+  r.  rt  buttonCountz3routeAssist did not expose mobile review controls: zauto topsummaryzspawn 47,47autoTriggersidetopz:routeAssist exit summary did not identify top auto spawn: P   z-routeAssist touch did not activate joystick: z-48pxz7routeAssist touch did not clamp joystick up to radius: z8routeAssist transition did not change the rendered scener  z:routeAssist transition did not persist current route URL: ztransitionTarget=zErouteAssist transition leaked an implicit transitionTarget into URL: frontierValuezmap2_18d:46,0z
focusTile=zGroute assist button did not continue from map2_02d candidate frontier: S   z=map2_02d route continuation touch did not activate joystick: zGmap2_02d route continuation touch did not clamp joystick up to radius: z=map2_02d route continuation did not change the rendered scener  z?map2_02d route continuation did not persist current route URL: z>map2_02d route continuation leaked transitionTarget into URL: passedr  r  r  r  r  r  r  r  r  routeGoalCandidateSearchr  r  r  r  r  z	checksum r  z; knobX=r  zactive=z; knobY=r  z -> r  z options; selected=r  zhidden=z selectedAfterMove=z menuConfirmSoundCount=z menuMoveSoundCount=z menuSound=runtime-menu-sound:z menuSoundSrcs=r  zhiddenBefore=z; shownAfter=z
; targets=r  z; r  z WAV keys; step=z transition=z battle=z movementStepCount=z dialogueCount=z battleStartCount=z battleHitCount=z victoryCount=zdialogueButton z line z vmPartial=z vmFull=z vmOpcodes=z
 vmRender=z
 vmDriven=	lineCountz vmCoverage=z
 vmSource=r  z; quickLoad=r  r  r  r  r  zbattleButton z; normalTurnAutoSource=z; normalTextTable=commandTextTableKeyz normalTextRef=commandTextTableRefVaHexz normalTextVa=commandTextTableTextVaHexz; nextCommandTextTable=r,   z nextCommandTextRef=r.   z nextCommandTextVa=r/   z; rewardGranted=z; autoSource=z; quickLoadMoney=z; quickLoadParty=r  zATK=z DEF=z damage=z; attackTextTable=z attackTextRef=z attackTextVa=z; partySkillExec=r  z; partySkillTextRefs=Rinshan:z,Smashu:z; skill=#z skillTextTable=z skillTextRef=z skillTextVa=z; skillAutoSource=z; skillFeedback=z; skillFeedbackRender=z; skillFeedbackSound=z; turnAutoSource=z; skillObjective=z; skillObjectiveAction=z; skillObjectiveActiveId=z; skillNoticeFeedback=r  z; skillNoticeFeedbackRender=z; skillNoticeSound=rD  rE  rF  z; skillTitleContinue=z; noMP=z enemy z; noMPFeedback=z; noMPFeedbackRender=z; noMPFeedbackSound=z; itemAutoSource=z; itemTextTable=itemTextTableKeyz itemTextRef=itemTextTableRefVaHexz itemTextVa=itemTextTableTextVaHexz; itemFeedback=z; itemFeedbackRender=z; itemFeedbackSound=z; itemObjective=z; itemObjectiveAction=z; itemObjectiveActiveId=z; itemTitleContinue=z; next=z; menuPotion=z; menuAutoSource=z; menuItemTextRef=z; menuItemFeedback=z; menuItemFeedbackRender=z; menuItemFeedbackSound=z; menuObjective=z; menuObjectiveAction=z; menuObjectiveActiveId=z; antidote=z; statusItemTextRef=z; statusItemFeedback=z; statusItemFeedbackRender=z; statusItemFeedbackSound=z; statusObjective=z; statusObjectiveAction=z; statusObjectiveActiveId=z	; revive=z; reviveItemTextRef=z; reviveItemFeedback=z; reviveItemFeedbackRender=z; reviveItemFeedbackSound=z; reviveObjective=z; reviveObjectiveAction=z; reviveObjectiveActiveId=zcount z; itemTextRef=z; inventoryFeedback=z; inventoryFeedbackRender=z; inventoryFeedbackSound=z; statusSave=z
; savedHp=z; loadedHp=z; titleContinue=z; titleCount=z
; titleHp=z; titleStatus=z; titleObjective=z; titleObjectiveAction=z; titleObjectiveActiveId=z scope=z count=z	 runtime=z line=z saved=z payloadMap=z
 blockIds=z candidates=z
 rendered=z assets=c              3  @   K   | ]  }|j                  d d        yw)r  rT   Nr  rY  s     r   r   z!verify_browser.<locals>.<genexpr>0  s     *`s377:r+B*`r  z events=z
 selector z map=z status=z	 entries=z
 selector=z hud=zloaded=z; map=z; selected=z; selector=z; syntheticLocalProbe=z; found=z enter=z over=z dropActive=z real=z synthetic=zmap=zsave=ztarget=)r  r  r   r  r  r  r  r  r  r  r  r	  r
  	snapshotscanvasdocumentdialogueButtondialogueReadydialogueOpendialogueAdvancedmanualPartyQuickSavemanualPartyQuickLoadbattleButtonrouteGoalBeforerouteGoalClickrouteGoalAfterrouteGoalBlockerClickrouteGoalBlockerAfterrouteGoalTargetClickrouteGoalTargetAfterrouteGoalCandidateClickrouteGoalCandidateAfterrouteGoalFinishClickrouteGoalFinishAfterrouteReturnBeforerouteReturnFocusClickrouteReturnFocusAfterrouteReturnTargetClickrouteReturnTargetAfterbattlePartybattleAfterStatebattleFinish
battleExitbattleQuickSavebattleQuickLoadsavedatBattlesavedatBattlePartySkillssavedatBattlePartySkillExecsavedatBattleSkill$savedatBattleSkillTitleContinueStartsavedatBattleSkillTitleContinuesavedatBattleSkillNoMp#savedatBattleItemTitleContinueStartsavedatBattleItemTitleContinuesavedatBattleItemMenusavedatBattleStatusItemsavedatBattleReviveItemsavedatMenur  savedatMenuStatusItemsavedatMenuQuickSavesavedatMenuQuickLoadsavedatMenuTitleContinueStartsavedatMenuTitleContinuesavePointCandidateStartsavePointCandidateMenucandidateSavePointStartcandidateSavePointMenur  r  r  r  syntheticSavedatsyntheticSavedatZipsyntheticQuickSavesyntheticQuickLoad)routeReviewrouteSummarypostFrontierrouteContinueStatezok mobile browser controls z
 checksum z canvas=z
 document=z movementSearch=z
 dialogue=z menuParty=z savedatBattleItem=z savedatMenuItem=z savePointCandidate=r  z candidateSavePoint=r   z eventObjectPreview=z savedatScan=z syntheticQuick=r  z routeAssist=z routeContinue=r
  DELETE)
missing_ok)shutilwhichr   r{   r  parentr  rS  
subprocessPopenSTDOUTexistscopyfilezipfileZipFile
ZIP_STOREDwriter   r   rb   r   r   rstripr   r   r   r  r"   r#   setr   issubsetabsfloatr   r   r   r  r  r   ry  r,  r   r   r   r   r   rx   ru  rw  r   time_nsr{  r   r   r   r~  r  r  r   r   r   r   r   r   r   r  ri   nextr  r  r  r  r  zipr  lenr  r  r  r9  rL  r  r   r  r  r  r/  ro   r  r   r  minr  r  r   r  rR  rb  r  r  r   r  r   r  rg  ri  rr  r   r  r  r  r  r  r  r  r  r  r  r   r=  rA  rG  r  r!  r(  rV  rZ  r`  r  printr   	terminatewaitTimeoutExpiredkillunlink(v  r  keep_logdriver_pathr   log_pathr  r   r   scan_probe_pathscan_zip_probe_pathzip_probe_pathremove_scan_proberemove_scan_zip_proberemove_zip_probescan_probe_sourcer  sessionparamsr0  sound_staterequired_sounds
sound_keyssound_volumesno_savedat_scan_hudno_savedat_linesmobile_menu_buttonmobile_menu_soundmobile_menu_sound_countsmobile_menu_sound_logre   mobile_menu_sound_actionsmobile_menu_sound_sourcesnormal_assist_controlsrK  canvas_statemovedactive_after_canvasmovement_searchmovement_sound_statemovement_sound_countsoverview_button
map_filterdocument_stateactive_after_documentdialogue_paramsdialogue_urlaction_dialogue_readyaction_dialogue_beforedialogue_button_clickaction_dialogue_openr   action_dialogue_afterdialogue_box_render	vm_replayvm_render_eventdialogue_box_vmaction_dialogue_advanceddialogue_sound_statedialogue_sound_countsmenu_paramsmenu_urlmenu_party_searchmanual_party_quick_savemanual_party_quick_loadassist_buttonnormal_route_paramsnormal_route_urlnormal_route_beforenormal_route_afternormal_route_searchsource_assist_buttonroute_goal_paramsroute_goal_urlroute_goal_beforeroute_goal_clickroute_goal_afterroute_goal_searchroute_goal_blocker_clickroute_goal_blocker_searchroute_goal_blocker_afterroute_goal_target_clickroute_goal_target_searchroute_goal_target_afterroute_goal_candidate_clickroute_goal_candidate_searchroute_goal_candidate_afterroute_goal_finish_clickroute_goal_finish_searchroute_goal_finish_afterroute_goal_finish_next_textroute_return_paramsroute_return_urlroute_return_beforeroute_return_focus_clickroute_return_focus_searchroute_return_focus_afterroute_return_target_clickroute_return_target_searchroute_return_target_afterroute_return_target_next_textroute_return_arrivedroute_return_continuationbattle_params
battle_urlbattle_button_clickbattle_beforebattle_partybattle_afterbattle_after_statenormal_turn_autonormal_turn_payloadnormal_turn_countsnormal_turn_atahonormal_turn_ataho_afterbattle_finishrB  battle_sound_statebattle_sound_countsbattle_savebattle_save_countsbattle_exitquick_load_moneysavedat_battle_paramssavedat_battle_urlsavedat_battleitem_countsactor_base_statsactor_hp_maxactor_incoming_damageskill_summaryindividual_entriesgroup_entriesskill_commandsrf   
text_indexr  savedat_party_skillsparty_skill_rowsrinshan_skillssmashu_skillsexpected_rinshan_skillsexpected_smashu_skillsr  rh   r0  r]   blockrg   r  	value_hexmp_costparty_skill_summarysavedat_party_skill_exec
result_keyresultexec_before
exec_afterr  
next_actorlogssavedat_skillsavedat_skill_logskill_turn_autoskill_saved_payloadskill_saved_progress_countsskill_saved_actorskill_objectiveskill_objective_actionskill_objective_noticeskill_notice_lines
skill_lineskill_feedback_textskill_notice_feedback_textskill_feedbackskill_feedback_renderskill_notice_feedbackskill_notice_feedback_renderskill_title_continue_startskill_title_continue_restoreskill_title_stateskill_title_labelsskill_title_objectiveskill_title_actionskill_title_noticeskill_title_notice_linesskill_title_countsskill_title_completionsavedat_skill_no_mpsavedat_skill_no_mp_logno_mp_beforeno_mp_afterno_mp_feedback_textno_mp_feedbackno_mp_feedback_rendersavedat_item_logsavedat_item_enemy_damagesavedat_item_expected_after_hpsavedat_item_heal_linesavedat_item_markersavedat_item_progress_detailsavedat_item_autosavedat_item_auto_countssavedat_item_auto_runtimesavedat_item_auto_atahosavedat_item_auto_herbsavedat_item_turn_autosavedat_item_payloadsavedat_item_payload_countssavedat_item_payload_atahosavedat_item_payload_herbsavedat_item_objectivesavedat_item_objective_actionsavedat_item_objective_noticesavedat_item_notice_linessavedat_item_feedbacksavedat_item_feedback_renderitem_title_continue_startitem_title_continue_restoreitem_title_stateitem_title_labelsitem_title_objectiveitem_title_actionitem_title_noticeitem_title_notice_linesitem_title_countsitem_title_completionsavedat_item_menu_logsavedat_item_menu_mp_maxsavedat_item_menu_expected_mpsavedat_item_menu_heal_linesavedat_item_menu_marker!savedat_item_menu_progress_detailsavedat_item_menu_autosavedat_item_menu_auto_countssavedat_item_menu_auto_runtimesavedat_item_menu_auto_rinshansavedat_item_menu_auto_potionsavedat_item_menu_turn_autosavedat_item_menu_payload savedat_item_menu_payload_counts!savedat_item_menu_payload_rinshan savedat_item_menu_payload_potionsavedat_item_menu_objective"savedat_item_menu_objective_action"savedat_item_menu_objective_noticesavedat_item_menu_notice_linessavedat_item_menu_feedback!savedat_item_menu_feedback_rendersavedat_status_itemsavedat_status_logsavedat_status_markersavedat_status_progress_detailsavedat_status_autosavedat_status_turn_autosavedat_status_payloadsavedat_status_objectivesavedat_status_objective_action$savedat_status_item_objective_noticesavedat_status_notice_linessavedat_status_feedbacksavedat_status_feedback_rendersavedat_revive_itemsavedat_revive_logsavedat_revive_beforesavedat_revive_aftersavedat_revive_markersavedat_revive_progress_detailsavedat_revive_autosavedat_revive_turn_autosavedat_revive_payloadsavedat_revive_objectivesavedat_revive_objective_action$savedat_revive_item_objective_noticesavedat_revive_notice_linessavedat_revive_feedbacksavedat_revive_feedback_rendersavedat_revive_linesavedat_menu_paramssavedat_menu_urlsavedat_menusavedat_menu_itemsavedat_menu_item_marker!savedat_menu_item_progress_detailsavedat_menu_item_autosavedat_menu_item_payloadsavedat_menu_item_countssavedat_menu_item_objective"savedat_menu_item_objective_action"savedat_menu_item_objective_noticesavedat_menu_item_notice_linessavedat_menu_item_feedback!savedat_menu_item_feedback_rendersavedat_menu_statussavedat_menu_quick_savesavedat_menu_quick_load!savedat_menu_title_continue_startsavedat_menu_title_continuesavedat_menu_title_statesavedat_menu_title_labelssavedat_menu_title_objective#savedat_menu_title_objective_action#savedat_menu_title_objective_noticesavedat_menu_title_notice_linessave_point_candidate_startsave_point_candidate_noticesave_point_candidate_menusave_point_linessave_point_lastsave_point_last_candidatescandidate_save_paramscandidate_save_urlcandidate_save_startcandidate_save_noticecandidate_save_menucandidate_save_linescandidate_save_lastcandidate_save_runtimecandidate_save_payloadcandidate_save_tilecandidate_save_payload_tileevent_object_paramsevent_object_urlevent_object_previewevent_object_renderevent_object_asset_keysevent_object_rowssavedat_url_paramssavedat_urlsavedat_url_statesavedat_zip_url_paramssavedat_zip_urlsavedat_zip_url_statezip_url_archivesavedat_scan_paramssavedat_scan_urlsavedat_scan_statesavedat_scan_foundsavedat_scan_archivesynthetic_savedat_filesynthetic_route_evidencesynthetic_debug_evidencesynthetic_debug_summarysynthetic_frontierssynthetic_savedat_drop
drop_statedrop_route_evidencesynthetic_savedat_zipzip_archivezip_route_evidencesynthetic_quick_savesynthetic_quick_loadroute_params	route_urlroute_beforeroute_review_stateroute_assist_summaryroute_stateroute_afterroute_searchpost_frontier_buttonpost_frontier_targetroute_continue_beforeroute_continue_stateroute_continue_afterroute_continue_searchsmoke_reportr  rQ  rR  rm  r  r%  r  r=  sv                                                                                                                                                                                                                                                                                                                                                                                 @@@@@@@r   verify_browserr  z  s   ,,01Kmnn;De|??HOO$6	t	 X)7"$ *	 $$	
 
+n<"Z/.@
*-DD! % F)	7 $v0A AI MP^ ^"))+&&,,TD,I 1?C$(!&--/#**000M__%8#7K]K]^ sbiMM$,1U"UWqrs(,%!((*%%++D4+H__^SgFXFXY s]dMM$,1U"UWqrs#' D$'"--1O!PQG WW-k:;JJ<|4a#= !$("  F $++c*S0OF82LMCv:,d'CeS\[]^$
+ z:>$T:7I7KLK
O @J+W[?\[__V4:;bebgJ:D[RV:WKOOI6]_M:D[RV:WKOOI6]_M{D1&//
;um1r66vrBCdJKeSum1r66|RHIDPQTYYo_noo$'Z[fZi%jkkJJsOtZ)I)KLJJt",T:?_?a"b266w?E2#''1>!"5"9"9&"A4H4<LLgVfgg[JZ[[VEUVV$XYlXop  ",D*>]>_!` 2 6 6| D J'8'<'<X'F'L"$$5$9$9)$D$J!Qf(g#SWWX->-D")E(g%(gSh(iCSWWZ-@-FB)G(i%(i&**40%))(B7;;HEUR%))(B7;;JGuT%))+r:>>zJRVV%))+r:>>zJfT%))+r:>>zJRVV%))+r:>>?VW[\\%)),;??
KSXX+//>!C+//
;q@,0II  NQjklQm  pI  JK  pL  QM  N  N03<<=RSt^sttv`uvv$'WXjWm%noo%/jBdBf%g"&**+;<DH)--l;4G)--.?@AE)--l;4G$'de{d~%  A  Aj2H2JKF%dJ8T8VWL##H-$'OP\O_%`aa(F2$'[\h[k%lmmJJsOtZ1G1IJE",T:?O?Q"R"$%QRR$%`aa!*T:?T?V"WXO_4O8[$'ijyi|%}~~&o=$'bcrbu%vww"o5$'^_n^q%rss#-dJ@R@T#U %9%?R$D$DX$N$TRT!(,,V49:Q>$'abvay%z{{(z;W;YZO##Hb155h?uL"&&y"599*ETQ"&&y"599(C4O(;(;Ir(J(N(Nx(X(^\^_"&&z26:::FeS"&&z26::8DEQO$7$7
B$G$K$KH$U$[Y[\$'Z[jZm%noo#D*6M6OPJy)V3jnnX&>&D"E>>*-;:>>'28b9BB6J>>'1-1$'lmwlz%{||'j:X:Z[N!%%h/$'QR`Qc%dee!!'*f4$']^l]o%pqq$.tZAQ]_A`$a!$$%STT'!$(	) O #4;;s#3c#9__L];^_Lv:,d'Ce\EZdfg$
+$.tZA]A_ij$k!$((/:=$'GH]G`%abb%/jBXBZ%["$.tZA]A_ij$k!)--d3(,,Xr:>>xH3'<'@'@2'N'R'RSY'Z'`^`#aa$'Z[pZs%tuu#% ~~'!+H.."X-'1$
D`Dblm'n$'++J7;UU

4 	 .."X-
 %;!~~'!+H.."X-(24E[E](^%(,BB

3	 .."X-
 ~~'!+H.."X-&:&>&>?R&S&YWY#(,,Z8<VV,00<BGGH^_czz

3'1$
D`Dblm'n$ .."X- -00<BI2667LMSQSO"6":":;N"O"USU155jAGRO$((48RR'++M:a?+//=-6J6N6Nz6Z6`^`a==+/II==!IJRVV==!CDEQ==!3Q7!;==!4a81<==!78<SS==!@A\Q"&&{3q8"&&';<L"&&'=>BYY&**?B?CCKPTUU)--0A"B"HbI)--0A"B"HbI(,BB$UVlUm n237;O:RT  tZ)AR)PQJJt'1$
D`Dblm'n$(,,Z8<VV+//>!C,001FGM2RRS^_cdd$'JKcJf%ghh#-dJ@R@T#U %9%?R$D$DX$N$TRT!(,,Z8=A>B$'bcwbz%{||#!$(% K t{{3/#57VWHv:,d'CeXEV`bc$
+JJsO #JtZA]A_$` a&77$'WXiWl%mnn&0zCfCh&i#&*#~~'!+H.."X-*4T:GkGm*n'*6

4 	 .."X- ,//5.227;*../CRHLLUSW``*../CRHLLYW\e[ff%<%@%@A[%\%b`bc*..y"=AA)LPRR!"94@.2248*..w75@*..u5C*..y9i[H*..~>9+M%<%@%@AT%U%[Y[\"#.E.I.I(.S.YWY*ZZ$36f=T<WY 
 'tZ9Y9[\M $$X.-2C2CF2KOb2b$'WXeWh%ijj!!,/u< $$%672= $$\2%?$'_`m_p%qrrc-*;*;G*D*J&KK$']^k]n%opp-S9J9J89T9ZXZ5[[$'XYfXi%jkk"+!$(	- #  't{{3'7#'=QdPe?fgv:,d'CeM]E^hjk$
+JJsO",T:?U?W"XtZ)A)CDtZ<!+D*>T>V!W"%jzCXCZ&["\!%88$%dee%88<OWj<j$'l  nA  mD  &E  F  F#-dJ@`@b#c (,,X6'++E2j@'++,<=UJ'++,<=KS)=)A)A')J)Pb%QQ1=Q=U=UV^=_=ece9ff.c:N:R:RS[:\:b`b6cc%S1E1I1I(1S1YWY-ZZ$'efze}%~ )!$$1'(+ ! %T[[%5%;O`Na=bcNv:,d'Ce^E\fhi$
+JJsO *4=Y=[ef g!%%e,
:$((8JF$((6$((8$((4@$((72=&7&;&;I&F&L"M&7&;&;I&F&L"M)5F5J5J;5W5][]1^^$'_`q_t%uvv)$
<Z<\fgh#''-1A1E1EhPR1S1W1WXb1c$'PQaPd%efftZQG)$
<X<Zdef #JtZAVAX$Y Z $$U+z9#''7:E#''5#''7#''
3x?)5E5I5I+5V5\Z\1]]!)::&.??19JJ'/@@$'`aq`tt|  ~O  }R  &S  T  T'1$
DbDdno'p$+//59Q9U9UV^`b9c9g9ghr9s$'STlSo%pqq(@ )% (2$
D`Dblm'n$(,,U3zA+//?:M+//
;xG)5M5Q5QR]5^5dbd1ee$XYqXtu  '1zCaCcmn&o#+//5*..x<@@L*..x<@@HHT$'Z[rZu%vwwtZQG'? 
($ '1zC_Cakl&m#'++E2j@*..~>*L*..z:hF)5L5P5PQ\5]5cac1dd$'h  jA  iD  &E  F  F)3D*FdFfpq)r&.2248-11(B?CCJO-11(B?CCFKxW$'bc}  cA  &B  C  C*B 
+' *4D*FbFdno)p&*..u5C-11.AZO-11*=I)5O5S5ST_5`5fdf1gg$'de  eC  &D  E  E&0zCaCcmn&o#+//5*..x<@@L*..x<@@HHT$'RSjRm%nootZQG'?
 	($ '1zC_Cakl&m#*A*E*Ej*Q''++E2j@*..~>*L*..~>dJ.6JJ$'abya|%}~~"+!$$1'(- #  't{{3'7#'=QdPe?fgv:,d'CeM]E^hjk$
+JJsO",T:?[?]gh"i#''.*<&**>:jH&**<8&**>:&**:6(B)5H5L5L[5Y5_]_1``$'bcvby%z{{'1$
DbDdno'p$,006+//"=AA*M+//"=AA&IXU$'TUmTp%qrr(@ )% (2$
D`Dblm'n$(,,U3zA+//?:M+//
;xG)5M5Q5QR]5^5dbd1ee$'ef~  fB  &C  D  D(24EcEeop(q%-11$7,002>BB:N,002>BB6JhV$'UVoUr%stttZQG)A 
*& )34EaEcmn(o%,E,I,I*,U))--n=E J15II !
 *--n=F d1^Cd*c2K2O2OP[2\2b`b.cc & *--e4
B,00@JN,0I$'^_x^{%|}}%!((	' M !S!1C!7?=/9Z[Jv:,d'CeZEXbde$
+JJsO",T:?Y?[ef"g'++D1&**8R8<<XF3':'>'>x'L'P'PQW'X'^\^#__$'XYlXo%pqq!$
3&tZ9O9QRM!$%KLL%dJ8Q8STL+\-=-=>N-O-WTVSWYZ,[]kmno  )X5##G,0NN##L1W< $$Z0:TFA>(J$'VWcVf%ghhtZ)A)CDJJsO%dJ8N8PQL},$%_``!+D*>W>Y!Z155nEK+,<naXab+-?-C-CDT-U-]Z\Y]_`,acprst"4"8"8"H"NB#6#:#:;N#O#USU"Z"Z[c"d"jhj $ I"5"9"9."I"OR!T!TUa!b!hfh  I! '+h!3!7!7	!B!Hbh'#
 #&&|4	A%)))S9\=M=MiYZ=[[&**:6@4&!DV#''0<#''15LL#''0MA#''6(B#''5@#''8<S<W<WX\<]]&**+BCHqAM$((.2I2M2Md2SS$'Z[mZp%qrr&tZ9S9UVM!%%j1$((9 $$Y/14hIZIZ[`IaIgeghh"ARARSXAYA_]_*`3t9*``$'XYfXi%jkk!+D*>P>R!S#5#;"@"@"J"Pb'++M:?a@1D*..{;@qAAE*..y9>Q?!C$'\]o\r%stt$T:7V7XYK#.??:#>#D""I"I("S"YWYOOI."w/??8,0@@??<0KOOH4MM??<3q8??<0H<??#7<@@G?Z??#7<@@KPY[bOcc%))*:;q@$']^i]l%mnntZ)A)CDJJsO$T:7I7KLK(E1??5)Z7??>2??8,???7+q0$'qr}  rA  &B  C  CtZ)F)HI#~~'!+H.."X-#-dJ@W@Y#Z #/

4 	 .."X- /6#''0KOOL4QQ#''0E9#''.*<#''7Ix;PP*#6F6J6J86T6ZXZ2[[$'VWbVeemn~  nB  &C  D  D$-2(	/ %! ")S)9C)??ShRiAj!kv:,d'CeM_E`jlm$
+24DN~11,?E2FK-112BCIr)--l;L$2$6$67L$M!*../BCIrM"/"3"3L"A"GR!L!LY!W!][]*..w7=2BB9MSQSM+//0DEKN+N,>,>?S,T,ZXZ\jlmn*-r"0A+ H&UJ
 0UJGH ""7+x7!%%g.2PPN$6$6z$B$HbI!.*<*<Z*H*NBO~'9'9*'E'KL)%a(,,\:a?%a(,,W5:%a(,,Z8FB$ #''5: #''0A5 #''
3v==KBQ=OP'GKK-PUacjTkk=KBQ=OP'GKK-PUVXYTZZ??8,1!%%g.#5#''."4#''.!3!."4"45H"I3O!%%&9:a?!."4"45G"H#N!%%&89^=O=OPc=dd!%%&89Q>!"7=(1,|S16K|6[$'abpas%tuu#-dJ@`@b#c ThTlTlmvTwT}{}~S1B1Hb H~~-11)<BN,00:@bMKI'#
 QO&"
  !8)D 6A* r%h t9s8},(E72OPdOg)hii_bcgiq_r r[C[$ueYPZ3C
K4/77<0E977<0E977<0E977?3y@778,7)#''(*;SA778,1,w6WXlWo-pqqrr( 388#V>RTSTCU#VVW X(("T-PRQRBS"TTUW   (2$
DlDn'o$+//5$'TUmTp%qrr) B$
H 255jAGR$jj28b#ZZ06B
fnctUE5)WjRWYc/UJO$q)B(C4yQ.4jj.?.E2FdD	FF

4("w/58"y1T9"|4="|4="|4="79D"x0G;!~~d+{tQ/G'/QQ!~~j1Z^^D5II!~~i0KOOIq4QT_TcTcdlnoTp4pp4'zz+.*<(?5'Acd|c  *A  B  B5B6 'tZ9X9Z[M7D7H7H7O7USU VtT V V(,,Xr:L'++GR8K+//
;ArO+//?E2O"/"3"3N"C"Ir,?,C,CDW,X,^\^+c+cdl+m+sqs' - 1 1, ? E2+//0ABHbO%2%6%67H%I%OR"%2%6%67R%S%YWY"8N8R8RSZ8[8a_a!b#d)!b!b(,,W56a8H8H8S7TTUVbVfVfgoVpUqqu  wC  wG  wG  HP  wQ  vR  SJ%1%5%5i%@$ALDTDTU]D^C__fgsgwgw  yA  hB  gC  #D)C&8)")(N %@)")(%! %@@")/%! ,G@")/,( ,L.!L+NNAV]^+O^QW^_+O^QW`a.~{Lcd./DkSjk./DmUlm./K]\st!%%d+##I..@##L1\A##L1Q6##L1Q6##O4>##H-1C1CDV1WW??4(L,<,<T1,EHXHXYacdHe,ee??:.+//$2GG??9-1A1A)Q1OR^RbRbckmnRo1oo%66 $$[1Y>!%%&MNVZZ!%%&DETQ!%%&GHPUU!%%&HIQVV!%%&KLTYY!%%j1\5E5Ed5KK!%%i0KOOD4II!%%h/<3C3CH3MM!%%o6,:J:J9:UU!%%n59SS!%%h/<3C3CH3MM!%%l3s:(,,-TU]aa(,,V48KK"&&w/t;"&&x04LL"&&w/>A"&&{3~E"&&{3w>"&&z2l6F6Ft6LL"&&y1[__T5JJ"&&7<;K;KI;VV"&&~6+//):TT"&&|48K8O8OPU8VV/334LMRQRVWW"&&w/t;"&&x04KK"&&w/=@"&&}5G"&&|4?"&&7;??4;PP/334KLQPQUVV$((.+//$2GG$((.+//$2GG"&&w/3WW"&&x04WW"&&|48NN#o&9&9(&C&Ir"JJ!_-@-@-J-Pb)QQ $$%67tC)--h7;[[)--i8D)--j9=]])--i8<\\]J\]]K8JKKWDVWWzgyzz  h  h  Ug  h  hiVhii(,,-TU]aa(,,-KLTXX(,,X6:cc(,,V48RR(,,[9WD(,,[9^K(,,Z8L<L<LT<RR(,,Y7;??4;PP(,,X6,:J:J8:TT(,,\:o>Q>QR]>^^(,,[9_=P=PQ\=]](,,_=AQAQR[A\\(,,^<PY@ZZ(,,X6,:J:J8:TT(,,-NOW\\(,,-OPX]](,,-RS[``/334[\dhh/33F;?YY$'lmzl}%~)3@B	*& ,XX\^h+i( < @ @ N TRT:K:O:OPa:b:hfh!i#e*!i!i$@$D$DEV$W$][]!!=!A!ABS!T!ZXZ!=!A!AB]!^!dbd>P>T>TU\>]>cac'ddD	'd$'d!=!A!ABR!S!YWY%A%E%Em%T%ZXZ"94@-11$7tC.22<@FBKKO\`nn`M_``/33D9E/33ODDP/33ODH]]/33E:jH&**+CDIQN)--k:$F)--k:nL)--i8KOOD<QQ)--n=QZA[[(,,W59]](,,X6:]](,,\:>TT/334EFdR%))(37WW%)))4D@%))*59YY%)))48XXcJbcc]D\]]  Ag  A  A  n  n  Um  n  n$7:)D`Cce  v:,d'CeM_E`jlm$
+24DN",T:?d?f"g=P=T=TUZ=[=a_a&bTs4y&b#&b.228R@L-11'2>K%1%5%5i%@$A"L8#+")(N %@#+")(%! ,L.!L+NNAV]^.~}Nef./DmUlm'++D1##I..@##H-1C1CDV1WW##D)\-=-=h-JJ##J/<3C3CD3II??4(L,<,<T,BB??:.,2B2B:2NN??9-1A1A)1LL.6MM&**;77B!%%&MNVZZ!%%&DETQ!%%h/t;!%%&67tC!%%&GHPUU!%%&HIQVV!%%&KLTYY!%%j1\5E5Ed5KK!%%i0L4D4DT4JJ!%%h/<3C3CH3MM!%%o6,:J:J9:UU!%%n59I9I)9TT!%%h/14!%%l3s:(,,-TU]aa(,,V48KK$'^_r^u%vww%dJ8V8XYL6B6F6Fu6M6SQSTdD	TT"."2"28R"@"D"DW"M(6(:(:;P(Q% 137JG`be<f $&?? +
 (88K7LANaMb%c""."2"28"<"B-@-D-D_-U-[Y[,`,`ai,j,pnp( , 0 0 < B):)>)>z)J)Pb(U(UV^(_(ece$(9(=(=n(M(SQS%&*r!:!>!>|!L!RPRr'# &*n!:!>!>w!G!M2n&" &2%5%5n%E%K"#/#3#3N#C#Ir ,@,D,DEX,Y,_]_+d+dem+n+trt')- J"6":":>"J"Pb!U!UVb!c!igi  J*& )- F"6":":>"J"Pb!U!UV]!^!dbd  F)% &2%5%56G%H%NB",8,<,<=N,O,USU),8,<,<=X,Y,_]_)?\?`?`ah?i?omo(ptT(p%(p$>(	%! ,F(,( ..CD-.JK $$T*##Hb155f=I##GR044W=AQAQRZ\^A_AcAcdkmnAorsAss##GR044T:>\\)1AA##K0I=$((1=$((26JJ$((1]B$((4@$((6'A$((6,:J:J7TV:W:[:[\c:dd$((37JJ34GP34EvN34PRXY(,,Z8HD(,,\:gE(,,X6"<(,,\:cA(,,-ST\``(,,-ST\aa34I6R/334Z[cgg/33F;xG34PRXY!":">">?S"TVYZ+//0DaH1L'++E26G6K6KL6YY*..t48KK)--g6,:J:J7TV:W:[:[\c:dd)--g6dB)--h7;RR)--g6-G)--m<H34JF[de)--l;wF)--o>,BRBRSZ\^B_BcBcdhBii/334KLQPQUVV-11$7<;K;KGUW;X;\;\]a;bb,009\=M=MgWY=Z=^=^_f=gg)--g6:^^)--h7;]])--l;?UU#&<&@&@&J&Pb"QQ3'='A'A('K'Qr#RR##$56dB044X>Baa044Y?tK044Z@Dcc044Y?CbbdJcddR8QRRX>WXXW=VWW  X  ~W  X  X$'`am`p%qrr(2?A	)% +VVZ\f*g':>>|LRPR9I9M9MN_9`9fdf gU g g#>#B#BCT#U#[Y[  ; ? ?@Q R XVX ; ? ?@[ \ b`b=N=R=RSZ=[=a_a&bTs4y&b#&b ; ? ?@P Q WUW$?$C$CL$Q$WUW!8$?,006dB-11,?E2JJ?[_mm_M^__.2248D.22?C4O.22?CG\\.2259ZG%))*>?D1I(,,[9E(,,Z8HD(,,\:l>N>NwXZ>[>_>_`g>hh(,,Y7;NN'++G48\\'++H59[['++L9=SS.223DETQ$((26UU$((34?$((48WW$((37VVbJabbV>UVVU=TUU  V  ~U  V  V$69C^Bac  v:,d'CeM_E`jlm$
+24DN *4=`=b c;L;P;PQV;W;][]$^4SY$^!$^'8'<'<Xr'J'N'Nw'W$ 6< ,.?.C.CHb.Q.U.UVZ\].^ac.cd *
 -IIfHggh  jB  iC  +D''8'<'<X'F'L"$2J2N2N2_2ece1j1jks1t1zxz-%6%:%::%F%L"".D.H.H.T.ZXZ-_-_`h-i-omo)-C-G-G-W-][]*-1y!?!C!CL!Q!WUWy.* -1w!?!C!CG!L!RPRw-) +<*?*?*O*USU'(9(=(=n(M(SQS%1J1N1NOb1c1igi0n0now0x0~|~,04 Q";"?"?"O"USU!Z!Z[g!h!nln  Q1- 04 O";"?"?"O"USU!Z!Z[b!c!igi  O0, +<*?*?@Q*R*XVX'1B1F1FGX1Y1_]_.1B1F1FGb1c1igi.DfDjDjkrDsDywy-zDc$i-z*-z)C!(&	*& 1K!(&1- ..HI-.OP%))$/(,,X6(1B1F1Fx1P1VTVW$(("599$?C``$(("599-HAM$(("599.I.6KK$((5A)--g6dB)--h7;OO)--g6-G)--j9=OO)--l;yH)--l;q@)--i8<YY34Lm\34JMZ34UWde-11*=ASS-11,?9L-11(;rA-11,?3F-112XYaee-112XYaff34NP]^4889_`hll488@HL34UWde!"?"C"CDX"Y[^_0445I1MPQQ,007;Q;U;UVb;cc155d;?\\044W=B.227;4G.228<@WW.227;}L.22=AEWW34OQ^gpq.22<@IM4889PQVUVZ[[488>B__377@AE.227;?cc.228<@bb.22<@DZZC(C(G(G(Q(WUW$XX%S1L1P1PQY1Z1`^`-aa$(():;4G599(CGff599)DDP599*EIhh599)DHggiJhiiW8VWWiJhiifGeff  }  ^|  }  }$'bctbw%xyy",T:?d?f"g8K8O8OPU8V8\Z\!]#d)!]!]$7$;$;H$E$K!/D/H/H/Y/_]_.d.dem.n.trt*"5"9"9*"E"K':'>'>~'N'TRT$%8%<%<^%L%RPR"':'>'>?P'Q'WUW$.A.E.EFW.X.^\^+3F3J3JKf3g3mkm0&J&N&Nw&W&][]+"D	+' + 'A#(!!	'# .H#(!!.* ..EF-.LM'++D1&**8R8<<ZHXJV!*=*A*A(B*O*S*ST\*]*cacd&**7B7;;JG2M&**7B7;;<LMQSS&**7B7;;OLPQQ&**7B7;;NK08JJ&**;77B&**734?&**848LL&**73}D&**:6+E&**<8HD&**<8A=34I8T34GR34RT\]*..z:kI*..|<H*..?H:M*..|<C*../UV^bb*../UV^cc*../QRZ__34KXV1556\]eii155f=M34RT\]&**<8<R<V<VW\<]]+//8D+//9=TT+//8MI+//>+M34Lh_hi+//8<``+//9=__+//=AWW&**+<=TI266x@Dcc266yAM266zBFee7;;IFJiifJeffT8STT^B]^^\@[\\cGbcc$'`at`w%xyy",T:?d?f"g8K8O8OPU8V8\Z\!]#d)!]!]$7$;$;Hb$I!#6#:#:7B#G $7$;$;H$E$K!/D/H/H/Y/_]_.d.dem.n.trt*"5"9"9*"E"K':'>'>~'N'TRT$%8%<%<^%L%RPR"':'>'>?P'Q'WUW$.A.E.EFW.X.^\^+3F3J3JKf3g3mkm0&J&N&Nw&W&][]+"D	+' + 'A#(!	'# .H#(!.* ..EF-.LM266x@A B*..t45Q7K7O7OPW7X6Y Z*..t45Q7K7O7OPW7X6Y[   (++D1(,,X6(B(,,Z8A=(,,Z8A=(,,\:hF!*?*C*CH*M*SQST'++D15I5M5Mg5VV'++D15I5M5Mg5VV'++J7;O;S;ST[;\\'++J7;O;S;ST[;\\'++L9Q>'++N;&.@@&**;79D&**734?&**848LL&**73}D&**:6+E&**<8HD&**<8A=&**959M9Q9QRY9ZZ&**959M9Q9QRY9ZZ34I8T34GR34RT\]*..z:kI*..|<H*..y9E*..x8<P<T<TU\<]]*..x8<P<T<TU\<]]*..|<C*../UV^bb*../UV^cc34KXV1556\]eii155f=I34RT\]&**<8<R<V<VW\<]]+//8D+//9=TT+//8MI+//>+M34Lh_hi+//8<``+//9=__+//=AWW&**+<=TI266x@Dcc266yAM266zBFee7;;IFJiifJeffT8STT]A\]]\@[\\^B]^^^B]^^$'gh{g~%  A  A"+2(	- #  't{{3'7#'=QdPe?fgv:,d'CeM]E^hjk$
+6tZHL  ':5#''
3p|O_O_`hOiOomopp##GR044T:cA  Xnzn~n~  @P  oQ  oW  UW  X  X$']^j]m%noo *4=Y=[ \'8'<'<X'F'L"$2J2N2N2_2ece1j1jks1t1zxz-%6%:%::%F%L""(9(=(=n(M(SQS%)B)F)FGZ)[)a_a(f(fgo(p(vtv$*;*?*?@Q*R*XVX'1B1F1FGX1Y1_]_.1B1F1FGb1c1igi.DfDjDjkrDsDywy-zDc$i-z*-z)F!+$	*& 1N!+$1- &))$/$(("599'BFWF[F[\dfhFiFmFmnuwxFy|}F}}$(("599$?CTCXCXYaceCfCjCjkrCss$C0A0E0Eh0O0USU,VV'8'<'<=N'O'USUV%))*?@FBKKHUYxx%))*DEKPPQYZ^}}%))*DEKPPQZ[_ee%))*DEKPPQ^_ctcxcx  zB  DF  dG  dK  dK  LS  dT  T%))*DEKPPQ`aekk-112[\dhh-112OPX\\-112XYaff-112WX`ee-11,?7J-11(;rA-11(;q@-11-@DUDYDYZbdfDgDkDklsDtt-11,?CTCXCXY`bdCeCiCijqCrr-11,?4G34LfU34UW]^34NPVW4889bckoo488@OS34UW]^)--g6dB)--h7;OO)--j9XE)--l;wF)--l;?P?T?TU\^`?a?e?efm?nn)--i8<M<Q<QRY[]<^<b<bcg<hh34JFS)--l;?X?\?\]b?cc,001EFK!qP.227;?^^.228<@__.22<@DZZ$(():;4G599(CGcc599)DDP599*EIee599)DHddiJhii]>\]]^?]^^^?]^^$'VWhVk%lmm01KL01RS",T:?b?d"e'++D1&**+BBG!K&**8R8<<ZHXWbLcc&**7B7;;JG2M&**7B7;;OLPQQ6cBUBYBYZbBcBigi>jj  N]p]t]t  vF  ^G  ^M  KM  N  N$'^_r^u%vww&0zCkCm&n#+//5*..{B?!C*..{B?!C.223FG.223FG*..|<@\\*../@AEhh"+B+F+F|+T+ZXZ[(1H1L1L\1Z1`^`a.227;*..|<A*..y9=N=R=RSZ\^=_=c=cdh=ii*..}=(K.223CDJKPZ\fOgg*../ABF\\*..~>!C*..{;q@*..?2E$'de|d  &A  B  B&I$PZ&[#+//5*..w75@*..u5C*..}=B*..z:>O>S>ST[]_>`>d>dei>jj*..~>8*L.22;?E2F:WaJbb*..}=AWW*..?uL.22?CIrJz[eNff*..x8<bb*../@AEhh.223FG$'de|d  &A  B  B0:=?	1- +TTXZd*e''B'F'F|'T'ZXZ$AYA]A]^oApAvtv(wU(w%(w+F+J+JK\+]+cac(2M2Q2QRc2d2jhj/2M2Q2QRm2n2trt/&I&M&Mg&V&\Z\/"D	/+ / @$G488>dJ599,GM2RRSbcguu  Af  A  A.2248D.22?C4O.22?CG\\.227;uD.2259ZG.22;?CZC^C^_lCmm.229=AXA\A\]gAhh.22?CG^GbGbcqGrr266{CIrJz[eNff.22=AE[[.22?C5P266GM2NS]_iRjj/33G<@__/33H=A``/33H=ARR/33LAE[[/33ODI.223DETQ6::8DHdd6::9ETQ6:::FJff6::9EIeejJijjaA`aa_?^__bBabb$>AKfJik  *4D*FlFn)o&*-.H.L.LX.V.\Z\*]'.2248-11'2>B-11-@BFxIcIgIghpIqIwuwxx155oF2==>PQ$'XYsXv%wxx(PQUWa(b%6O6S6STa6b6hfhidD	ii7;;FCIrO)8)<)<\)J)Pb&)--g6%?,007:E,00<@``,00?1D,00BQF,001VW_dd"&&w/?B"&&w/14"&&'LMUZZKSccX`pp`hxxrWqrr 9 
 %'i  kD  jG  &H  I  I$-!$(	/ %! ")S)9C)??ShRiAj!kv:,d'CeM_E`jlm$
+ z:>#-dJ@f@h#i $'(<(@(@(J(Pb$Q!(,,T2'++GR81<'++M:b@rI]IaIabjIkIqoqrr+//@,778JK$']^r]u%vww"J4Q["\:M:Q:QR_:`:fdf#g$CI#g #g"5"9"9&"A"GR%8%<%<]%K%Qr"%8%<%<^%L%RPR""8"<"<V"D"J*@*D*DV*L*RPR'#''0E9&**51Z?&**:6:ZZ&**73}D&**73q8&**+PQY^^)--j9E)--g6dB)--g6-G)--g6!;)--.ST\aa-6L6P6PQ[6\6b`bc)--e4
B)--i8A=.2EENVjj^fzz[cww$'p  rE  qH  &I  J  J"+!$(- #  't{{3'7#'=QdPe?fgv:,d'CeM]E^hjk$
+ z:>#EdJ#W "6":":8"D"J&)*>*B*B;*O*USU&V# 3 7 7	 B Hb$((1U:'++E2j@'++,?@L&**95TA&**+;<A&**=9Q>&**?;a?26MM2Vg6hsswwz7J6hhhVghh$'cdxc{%|}}!*L(, "
 "$++c"2S"8OL^K_:`aKv:,d'Ce[EYcef$
+ $~~'!+H.."X-$.tZ B %! %):)>)>x)H

4 % .."X-( 0$7(,,X6$((1U:$((/:=$((4F$((1Q6$((0A5$((7;QQ$(();<@VV$((9UB&7&;&;K&H&NBO$((9F$'^_p^s%tuu%.A(0 &"
 &dkk#&6&<PfOg>hiOv:,d'Ce_E]gij$
+$(!~~'!+H.."X-(24 F )%> *-11(;rF[F_F_`jFkFqoqrr

4 K .."X-L  5:??	JPbO4d;,00:(,,W5>(,,U3zA(,,Z8<mm(,,W5:(,,V49(,,];?\\(,,-?@Daa(,,_=F"&&z26MM"&&|49"&&x0<"&&{3zA#''
39r>>vFJdd  Lixi|i|  ~D  jE  jK  IK  L  LyMbMfMfgqMrMxvxyy$'hi~  iB  &C  D  D"+"(- #
  't{{3'7#'=QdPe?fgv:,d'CeM]E^hjk$
+!%~~'!+H.."X-%/j C &"2 &+=+A+A&+I+OR*T*TU]*^

4 9 .."X-: $6#;"@"@"H"NB!S!ST[!\!b`b$6$<"#A#A)#L#RPR 148!"4"8"8"@$G%+=+A+A&+I+OR*T*TU]*^fj*j)/A/E/Ef/M/SQS.X.XYd.eis.s).@.D.DU.Kz.Y).@.D.DZ.PT|.|).@.D.DEW.X\y.y).@.D.D_.UY^.^).B.F.Fz.RVd.d).B.F.Fx.PX\.\)/C/G/G
/S/YWY.^.^_e.f  kE  /E%))-8OK+//7=2BB7KQrSWYY%.@.D.DX.N%c1vcu1v.v)#  6U  BT  6U  3U)#  6p  ]o  6p  3p$'abtaw%xyy8<=R8S458<=N8O45tZ)Q)ST%)"~~'!+H.."X-)3D*FnFpz{)|&)5

4 	 .."X-
 )?(D"'I'I/'Z'`^`$(>(D"'I'IJ^'_'ece$'='C&H&H&X&^\^#S]^tvzS{"8"<"<=N"O  BD5t<-11$7)--e4
B)--f5r9KK)--j9=aa)--g6!;)--f5:"J/88=S=W=WXc=d=jhj9kl+//9=ZZ+//0EFdR+//0IJRWW+//0EFdR+//9=ZZ+//0EFdR+//0IJRWW+//0EFdR*..z:eC)--.@A]R)--.HIZW)--.HIQUU)--o>eK"J/88=S=W=WXg=h=nln9op)--.CDEQfL_Leceff?sKaKeKefnKoKusuGvv0<R<V<VW_<`<fdf8gg$'o  qG  pJ  &K  L  LtZ)Q)ST%)"~~'!+H.."X-)3D*FnFpz{)|&*6044V<BGGQU]]

4  .."X- 16B;;FCIrJ#9#?R"D"D_"U"[Y[5t<-11$7)--.>?tK)--.@AM)--.?@L)--.?@M)--e4
B)--j9=ZZ)--g6!;)--f5:>>(+x7>>*-1NN>>-04QQ>>"78D>>";<EI>>"78D&**848UU&**+@AM&**+DEUR&**+@AM)--.@A]R)--.HIZW:#F\F`F`aiFjFpnpBqq$'t  vL  uO  &P  Q  QtZ)P)RS$(!~~'!+H.."X-(24ElEnxy(z%)5rF[F_F_`jFkFqoqrr $9$=$=j$I$OR 
 

4  .."X- 16B;;IFL"K"7"=2!B!B?!S!YWY4d;,006(,,U3zA(,,Z8<tt(,,W5:(,,V49%))(37TT%))*?@L%))*CDEQ%))*?@L??:.2PP??<0A5??8,D8??;/:=OOJ/52::6BF``  Hitixixy  jA  jG  EG  H  H?sK`KdKdemKnKtrtGuu  GZoZsZst~Z  [F  DF  G  GyMbMfMfgqMrMxvxyy$'v  xM  wP  &Q  R  R#-dJ@f@hrs#t (,,W5'++H59VV'++,AB$N'++,EFeS'++,FGtS'++,AB$N'++M:lJ$'o  qE  pH  &I  J  J#' ~~'!+H.."X-'1$
DeDgqr's$'3

4 	 .."X- 3T:+//5'++E2j@'++H59VV'++,AB$N'++,EFeS'++,FGtS'++,AB$N'++M:lJ$'o  qE  pH  &I  J  J$!$1#(& L  C 03 6/,8XYIv:,d'CeYEWacd$
+JJsO%dJ8N8PQL!+D*>a>c!d!%%h/3E3I3I-YZ3[^_3_$'Z[mZp%qrr#-dJ@`@b#c "6":":9b"IIS)=)A)A))L)RPR%SS ,@,D,DY,O,USU(VV+//>'++F3u<$'abvay%z{{$T:7Vbd7efK??8,$'TU`Tc%deew'72$'^_j^m%nootZ<$T:7M7OPKz$
<Q<STULtZ)9R)HIl*$%_``\15S[g5g$'abnaq%rss"l2$'lmyl|%}~~#-dJ@`@b#c #7#;#;<L#M (,,X6'++E2j@'++,<=UJ':5'++O<O+,C8L8P8PQX8Y8_]_4``1=Q=U=UV^=_=ece9ff&c2F2J2J82T2ZXZ.[[s+?+C+CH+M+SQS'TT$'n  pD  oG  &H  I  I$.tZAWAY$Z!#-dJ@_km@n#o '++H5$'deyd|%}~~#''0G;$'n  pD  oG  &H  I  ItZQG#-dJ@V@X#Y $'
4EZE\(]$^!tZ)9R)HI#'<<$%dee%::>\dy>y$'fg|f  &A  B  B"&;;$'ef{e~%  A  Ap(pp cp !/	p
 $%8p $\p &'<p "#4p )*Cp ()Ap +,Gp ()Ap )*Cp *+Ep  V$	&E7(<K[K[\cKdJe&fV&'.2D2DX2N1OxXfXjXjkrXsWt(uV %*..y"=AA(KLD*..z2>BB8LMO	V  JNN7$;#<<OPZP^P^_iPjOk!lV '!"4"8"82"F"J"J8"T!UUV-11(B?CCJOPPR-11+rBFFzRSSU-11,CGG
ST U--?-C-CKQS-T-X-XYp-q,r s11I1M1Mm1\0] ^..F.J.J:.V-W X88;AZ8[7\ ])),2K)L(MOV& *'(>(B(B<(P'Q R&&3&7&7&E&N%O P##0#4#45F#G"HJ)V0 %dii0@&A1V2 z?+ ,  - 1 1& 9: ;&&3&7&7&E%F G""/"3"3M"B!C D--B-F-Fv-N,O P))>)B)B:)N(O P,,?,C,CM,R+S T**=*A*A+*N)O P((;(?(?	(J'KM5VH  *+?+C+CJ+O*P Q!!5!9!9-!H ILdLhLhivLwKx y&';'?'?
'K'Qr&V&VW  'A  &B B#$8$<$<Z$H$NB#S#STv#w"x y&&)hh0D0H0H0T0ZXZ/_/_`q/r/xvx&y%z {%&:&>&>z&J&Pb%U%UVh%i$j k%&:&>&>z&J&Pb%U%UVi%j$kkl155jAGRLL[YZ ['(<(@(@(L(RPR'W'WXn'o&p q%&:&>&>?T&U&[Y[%`%`au%v$w	yKV`  ,-\88$;$?$?$O$USUVWWX266x@ACcVj "&9%:"=O<PPRSfRg#hkVl $,00@A,00=>dCTBUWoVt '+//<=TB[A\]wVz ,266xDHHPQQRSkRlln599(BGKKFSTTUVqUrrt266xDHHPQQRSkRln}VD ".22;?@E^D__a4882FJJ6RSSTUoTprGVL '(8(8(F'GrJ\J`J`amJnIo p01C1G1G1W1][]0b0bck0l/m n++;+?+?@U+V*W X))9)=)=>X)Y(Z [((8(<(<=X(Y'Z [02D2H2HIY2Z2b_a^bde1f0k0klz0{/| }.0B0F0FGW0X0`]_\`bc/d.i.ij}.~- @-/A/E/EFV/W/_\^[_ab.c-h-hi}-~, @))6):):?)K(L M&&1ooh&?%@ A**:*>*>w*G)H I**-((3C3G3G3W3][]*^)_aOVh (Xx Xx$ Xx/33E:; Xx5 XxAQAUAUV[A\@] Xx ^" Xx"0"4"45H"I!JXxJKXx)--.CDEXxF+Xx -;,>,>?S,T,ZXZ+_+_`n+o*pXxq)Xx +9*<*<=Q*R*XVX)])]^q)r(s	Xxt(	Xx
 *8););<P)Q)WUW(\(\]q(r'sXx
 tvXx //Xx0*Xx 477	2FJJ8UWX\\]fghXx ijXx 477"EII(TVW[[\efgXxh#Xx $<#?#?	2#N#R#RS[]_#`#d#dex#y"zXx {}Xx 477	2FJJ8UWX\\]qrsXxt"Xx #;">">x"L"P"PQY[]"^"b"bcv"w!xXx y{Xx 477"EII(TVW[[\pqrXxs!Xx "/!2!28R!@!D!DY!O PXx QRXx  ),,Xr:>>|LM!Xx  NO!Xx" ),,Xr:>>|LM#Xx"N*#Xx$ +8*;*;Hb*I*M*Mn*])^%Xx$_(%Xx& )6(9(9(B(G(K(KL_(`'a'Xx&b''Xx( (5'8'82'F'J'JK_'`&a)Xx(b)Xx* ,//"=AA$GH+Xx* IK+Xx* LYK\K\]dfhKiKmKmnrKsJt+Xx*u++Xx, -:,=,=j,I,OR+T+TU]+^*_-Xx,`)-Xx. *G})U(V/Xx.W//Xx0 0Nm/\.]1Xx0^.1Xx2 /RR_.`-a3Xx2b*3Xx4 ,9+<+<^+L+RPR*W*WX`*a)b5Xx4c*5Xx6 ,9+<+<=N+O+USU*Z*Z[b*c)d7Xx6e07Xx8 2?1B1BCT1U1[Y[0`0`ai0j/k9Xx8l29Xx: 4A3D3DEV3W3][]2b2bcm2n1o;Xx:p/;Xx< 0E/H/H/R.S=Xx< TU=Xx< VkUnUnouUvTw=Xx<x5=Xx> 6R5U5UV}5~  CG  6G  5H?Xx>H,?Xx@ -B,E,EFX,Y+ZAXx@ [\AXxB 1445JKLCXxB MNCXxD 1445MNOEXxDP.EXxF 0L/O/OPa/b/hfh.m.mnu.v-wGXxF xyGXxH 9<<=NOUSUZZ[cdeIXxH fgIXxJ 9<<=NOUSUZZ[efgKXxJh KXxL !4 7 7" E I I$ OPMXxL QRMXxN /228R@DDXNOOXxNP!OXxP "5!8!82!F!J!J9!U VQXxP WYQXxR /227B?CCINOSXxRP(SXxT )FFY(Z'[UXxT\.UXxV /MM`.a-bWXxVc-WXxX .QQd-e,fYXxX giYXxZ (++Hb9==fEF[XxZ GH[Xx\ (++Hb9==gFG]Xx\ HJ]Xx\ KWJZJZ[bdfJgJkJklsJtIu]Xx\v*]Xx^ ,8+;+;J+G+M2*R*RS[*\)]_Xx^^)_Xx` *=)@)@AS)T(UaXx`V'aXxb (;'>'>?V'W&XcXxbY&cXxd ':&=&=>V&W%XeXxdY(eXxf )E\(R'SgXxfT.gXxh /LL.Y-ZiXxh[-iXxj .PP\-],^kXxj_)kXxl +7*:*:;L*M*SQS)X)XY`)a(bmXxlc/mXxn 1=0@0@AR0S0YWY/^/^_g/h.ioXxnj1oXxp 3?2B2BCT2U2[Y[1`1`ak1l0mqXxpn-qXxr /J.M.MN_.`.fdf-k-kls-t,usXxr vwsXxt 8;;<MNTRTYYZbcduXxt efuXxv 8;;<MNTRTYYZdefwXxvg wXxx !- 0 0 =>yXxx?&yXxz '8&;&;GR&H&L&L]&[%\{Xxz]*{Xx| ,=+@+@+L+RPR*W*WX`*a)b}Xx|c+}Xx~ ,D+G+GH_+`*aXx~b,Xx@ -IIZ,[+\AXx@]2AXxB 3PPa2b1cCXxBd1CXxD 2TTe1f0gEXxDh)EXxF +<*?*?@Q*R*XVX)])]^e)f(gGXxFh/GXxH 1B0E0EFW0X0^\^/c/cdl/m.nIXxHo1IXxJ 3D2G2GHY2Z2`^`1e1efp1q0rKXxJs$KXxL %8$;$;Hb$I$M$Mj$Y#ZMXxL []MXxN /227B?CCJOPOXxNQ-OXxP .C-F-FG^-_,`QXxPa.QXxR /KK^._-`SXxRa4SXxT 5RRe4f3gUXxTh3UXxV 4VVi3j2kWXxVl+WXxX -@,C,CDU,V,\Z\+a+abi+j*kYXxXl1YXxZ 3F2I2IJ[2\2b`b1g1ghp1q0r[XxZs3[Xx\ 5H4K4KL]4^4dbd3i3ijt3u2v]Xx\w"]Xx^ #6"9"9(B"G"K"KH"U!V_Xx^ WX_Xx` /227B?CCDIJaXx` KLaXxb /227B?CCGLMcXxbN-cXxd .C-F-FG^-_,`eXxda.eXxf /KK^._-`gXxfa4gXxh 5RRe4f3giXxhh3iXxj 4VVi3j2kkXxjl+kXxl -@,C,CDU,V,\Z\+a+abi+j*kmXxll1mXxn 3F2I2IJ[2\2b`b1g1ghp1q0roXxns3oXxp 5H4K4KL]4^4dbd3i3ijt3u2vqXxkV` & !2!6!6x!D!H!H!Q R RT UfUjUjkrtvUwU{U{  }D  VE  UF  F* +<+@+@+L+RPR*W*WX`*a)bc''?'C'CD['\&]^- .MM^-_,`a3 4TTe3f2g	h2	
 3XXi2j1k
l) +<*?*?@Q*R*XVX)])]^e)f(gh/ 1B0E0EFW0X0^\^/c/cdl/m.no1 3D2G2GHY2Z2`^`1e1efp1q0rs$ %8$;$;Hb$I$M$Mj$Y#Z [] /227B?CCJOPQ& '>&A&A-&P%Q RT 366~FGH# $;#>#>y#I"JK$ %<$?$?
$K#LM) *E)H)H)Y(Z[&  'B&E&Ek&R%S! T#!" $?#B#B9#M"N#"O'#$ (C'F'F'W&X%$Y*%& ,G+J+JK\+]+cac*h*hip*q)r'&s0'( 2M1P1PQb1c1igi0n0now0x/y)(z2)* 4O3R3RSd3e3kik2p2pq{2|1}+0 588DE F!!0!4!4W!= > ?!!0!4!4W!= > ?##<#@#@Af#g"h i 7G 0 3RP	R /22:>? @!!4!8!8!A B C!!4!8!8!A B C!!7!;!;G!D E F&&<&@&@&G%H I$$'HH-C-G-G
-S-YWY$Z#[] /2259\=Q=U=UV[=\] ^&&9&=&=>N&O%P Q""5"9"9-"H!I J$$7$;$;O$L#M N""%((*`N_*`"`!a b""6":":;N"O!PR -00<=Z,009:!<M<Q<QRX<Y;Z [044U;<HEVEZEZ[hEiDjl
 ,//
;ArFFvNO P##2#6#6|#D"E F$$9$=$=g$F#GqI^IbIbciIjHk l""7";";M"J!K L#yy)>)B)B:)N)TRTUV	X "$6$:$:6$B$Hb#M#Mh#W!Y Z155e<= >$&8&<&<V&D&J%O%OPZ%[%a_a$f$fgq$r#s t$$6$:$:7$C#DAFXF\F\]cFdEe f//A/E/EF[/\.] ^!!$%7!8 9; &>>*56 7$$:$>$>w$G#HJ`JdJdekJlIm n"",.."?!@ A!!7!;!;<N!O P Q  6 : :;L MN O&&<&@&@AR&S%T U  */H IJ K%%/^^4I%J$KM 599%@A B$$:$>$>w$G#HJ`JdJdekJlIm n"":">">x"H!IK
 (OOJ7=2BB6JK L##.??<#@"A B$$9$=$=g$F#GqI^IbIbciIjHk l""4"8"8"B!C D#yy)>)B)B:)N)TRTUV	X   4 8 8 BC D  4 8 8 BC D  4 8 89R ST U%%9%=%=>S%T$UW 033I>?r'.;-r,I ""6!7r014H3ILaKbdgVpL	  IlI$oI I k	I
  I '(:I %&9I %&;I $%:I #$8I '(@I +,CI +,CI #$7I &'8I  %&6!I" %&6#I$ ,-E%I& ,-E'I( +,C)I* +,C+I, ./I-I. ./I/I0 +,C1I2 +,C3I4 ()<5I6 ,-E7I8 ,-E9I: -.G;I< -.G=I> "<?I@ '(:AIB #MCID !+EIF &{GIH &'7IIJ $^KIL /0DMIN 23KOIP )-QIR ;<VSIT 67SUIV -.AWIX (YIZ :;T[I\ 56Q]I^ ,->_I` ./BaIb ./BcId "<eIf &'8gIh ,-@iIj +,CkIl +,CmIn 45VoIp /0KqIr ./IsIt -.GuIv ./CwIx -.AyIz )*>{I| !"3}I~ $%:I@ "#5AIB '(>CID *+@EIF )*>GIH )*>IIJ $6$8$8*>QIM	pLb |,!(+F_ _- _%_!_"(_)+_,17_3_ !123_3=_>DEW>X=Y_Z"_ #2!2_3_ #:./	_ 0;	_ <B+;N:O	_P	_
 !*+_
 ,?_
 @FFY?Z>[_
\#_ $**;#<"=_>&_ '--A&B%C_D&_ '--A&B%C_D&_ '--A&B%C_D_  &&678_9"_ #))A"B!C_D_  &m45_ 6E_ FLOE\D]_   x9ZL1ISTU NN		!	$ !&&$&7$#**d*;%%%6qRX)7rR 4( Qs s
s sT )h(ij +az QP   ^ G$ !W "cL "j (eL 'cj  UH )qf !h 'cL %_F .{Z "^+L "^+^ .{x )x/f  j\ $hh 7i| ! 
 ,, 				  x9ZL1ISTU  NN		!	$,, 				 !&&$&7$#**d*;%%%6  oRX)7 X)7s  5AKa!B*K^:KZAK^4KZ)L*K^;%KZ6 K^&%KZ;^K^A7K^CK^PK^I0AN.K^XK[ X0L)K^eM,K^sK[sK^s1K[
t
EK^y.K[zEK^D&K^DK[DE
K^I!AK^J"K[J4DK^N8K[O
j8K^zK[#zAK^{/K[(|K)K^G*K[-G<N*K^V&K[2V8I>K^`6K[7aY!K^z)K[<z;AK^|K\|(K#K^HK\HJK^R!K\R3VK^h5K\iC K^l'K\l9SK^@K\@%DK^D=K\Ea(K^f7K\$g	j0K^Q9K\)RA#K^S.K\.T P
K^d
K\3dJ;K^oK\8o)M#K^}K\=}%DK^BH/K^J4KK^VK5K^b	OK^q"L)K^~M4K^LBK=K^W>Ka!XK]XKa!X&K]X9AKa!ZKZ&	Z!K^Z)KZ3	Z.BK^]
K]]Ka!]K]]Ka!]6K^^	Ka!^K^^Ka!^Ka^K^(^'Ka^(
K^5	^2Ka^4K^5	^5Ka_
K__Ka_6K`	`Ka`K`	`AKaaKa!a!Ka+c                     t        j                         } | j                  dd       | j                  dd       | j                         }t	        |j
                  |j                         y )Nz--basezhttp://127.0.0.1:8013)defaultz
--keep-log
store_true)rI  )r  )argparseArgumentParseradd_argument
parse_argsr  r  r  )parserr   s     r   rO  rO    sW    $$&F
*AB
\:D499t}}5r   __main__)rc   r   )r$   rb   r%   dict[str, Any] | Nonerc   r   )
re   dict[str, Any]rf   rb   rg   rx   rV   rb   rc   None)re   r  rn   rb   rV   rb   rc   r   )re   r  rn   rb   rV   rb   rc   r  )rc   rx   )Nr   )r   rx   r   rb   r$   rb   r%   r  r   r}  rc   r  )r=   )r   rx   r   zsubprocess.Popen[bytes]r   r}  rc   r  )
r   rx   r   rb   r   rb   r   r}  rc   r   )rc   rb   )r   rx   r   rb   rc   r  r   )r   rx   r   rb   r   z
str | Nonerc   r  )M   )r   rx   rc   rb   )r  )r!  )O   )rp  )
r   rx   r   rb   rh   rb   r   r}  rc   rb   )
r   rx   r   rb   r   z	list[str]r   r}  rc   rb   )r  )r   rx   r   rb   r   r}  rc   r  )r   r  r   r   rc   zlist[dict[str, Any]])r   r  r
  rb   rn   rb   r  rb   r   r   rc   r  )r   r  rc   rb   )r   r  rc   r   )r.  r  rc   r  )r   r  r
  rb   r7  rb   r8  rb   r  rb   r   r   rc   r  )r.  r  rI  rb   rJ  rb   rc   r  )r  r  rc   r  )F)r  rb   r  r   rc   r  )rc   r  )__doc__
__future__r   r  r   r   rm  rt   rp  r   ru  pathlibr   typingr   urllib.parser   r   urllib.errorr   urllib.requestr	   r
   __file__resolver  r  RuntimeErrorr   r   r'   rd   rm   ri   ro   rr   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r!  r(  r/  r3  r9  r=  rA  rG  rL  rP  rR  rV  rZ  r`  rb  ri  rr  r   ru  rw  ry  r{  r~  r  r  r  r   r  r  r   r  r   r  r  r  r  r  r  r  r   r  rf  rq  r  r  r  r   r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rO  r   r   r   r   <module>r     s   #   	        + " + H~''*	\ 	P< 4&)* 4&)* 4&)* 3%)* 3%)* 3%)* 3%)* 2$)* 2$)*s@ F -)* -)* -)* -)*- @ ce e W]  V\ ]
*.0A 
	I(oV!H(@!H!H6.* ]c	Y	_	c	g	j	i MR R   	
   $Y NS R   	
    (ZZZ Z 
	Z PU R   	
   $\^2[(,<2?D(
6rAD<~Up%P/d%P/d5p89xTn\~QhcL$>"J
Qh;|Vr>%P9x2jE1h,bJ&R?(,	$3
"@;Fb))JS6 zF r   