
    PL
j                     T   U d Z ddlmZ ddlZddlZddlZddlmZmZ ddl	m
Z
mZmZmZmZmZmZ ddlmZmZ  ej        d          Zi 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"i d$d"d%d"d&d'd(d'd)d*d+d*d,d*d-d*d.d*d/d*d0d1d2d1d3d4d5d4d6d4d7d8d9d:i d;d<d=d<d>d?d@d?dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdNdPdQdRdQdSdQdTdUdVdUi dWdXdYdZd[d\d]d^d_d`dad^dbd^dcdddedfdgdfdhdidjdidkdldmdndodndpdqdrdqdsdtiZduedv<   e G dw dx                      Ze G dy dz                      Ze G d{ d|                      ZddZddZdddZddZddZddZ ddZ!ddZ"ddZ#da$ddZ%ddZ&ddZ'ddZ(ddZ)ddZ*ddZ+ddZ,ddZ-ddZ.ddZ/ddZ0ddZ1ddZ2ddZ3ddZ4ddZ5ddZ6ddZ7ddZ8ddZ9ddZ:ddZ;ddZ<ddZ=ddZ>ddZ?ddZ@ddZAddZBddZCddZDddZEddZFddZGddZHddZIddZJddZKddZLddZMddZNddZOddZPddZQ edde;edŬƦ           edde<e ddɬʦ           edde<e7dͬƦ           edde<e8dЬƦ           edde<e9dӬƦ           edde=e!d֬Ʀ           edde>e"d٬Ʀ           edde@e#dܬƦ           eddeAe%d߬Ʀ           eddeBe&dƦ           eddeCe'dƦ           eddeDe(dƦ           eddeEe)dƦ           eddeFe*dƦ           eddeGe+dƦ           edLdeHe,dƦ           eddeIe-dƦ           edldeJe.dƦ           eddeKe/dƦ           eddeLe0dƦ           edd eMe1dƦ           ed\dd e2dƦ           eddeNe3dƦ           edJdeOe4d	Ʀ           ed
dePe5dƦ           eddeQe6dƦ          gZRded<   ddZSddZTg dZUdS (   u  Server registry — per-language LSP server definitions.

Each :class:`ServerDef` knows how to:

- match a file by extension (or basename for extensionless files like
  ``Dockerfile``),
- resolve a project root from a file path (often via
  :func:`agent.lsp.workspace.nearest_root`),
- assemble the spawn command (binary, args, env, cwd),
- compute LSP ``initializationOptions``.

Auto-installation is a separate concern handled by
:mod:`agent.lsp.install`.  This module describes WHAT to spawn; the
install module makes the binary appear on PATH if it isn't there.

The full set of servers ships with the package, but most are only
*invoked* when the user actually edits a file in that language.  This
keeps cold-start fast — we don't probe binaries until needed.
    )annotationsN)	dataclassfield)AnyCallableDictListOptionalSequenceTuple)nearest_rootnormalize_pathzagent.lsp.servers.pypython.pyi.ts
typescript.tsxtypescriptreact.js
javascript.jsxjavascriptreact.mjs.cjs.mts.cts.vuevue.sveltesvelte.astroastro.gogo.rsrustz.rbrubyz.rakez.gemspecz.ru.cc.h.cccpp.cpp.cxx.hh.hpp.hxxz.cscsharpz.csxz.fsfsharpz.fsiz.fsxz.swiftswift.javajava.ktkotlin.kts.yamlyaml.ymlz.jsonjsonz.jsoncjsonc.lualua.phpphp.prismaprisma.dartdart.mlocaml.mli.shshellscript.bash.zsh.tf	terraform.tfvarsz.texlatexz.bibbibtex.gleamgleam.cljclojure.cljsclojurescript.cljc.edn.nixnixz.typtypstz.typc.hshaskell.lhs.jljulia.exelixir.exs.zigzig.zon.dockerfile
dockerfileDict[str, str]LANGUAGE_BY_EXTc                      e Zd ZU dZded<   ded<   ded<    ee          Zded	<    ee          Zd
ed<   dZ	ded<   dS )	SpawnSpeca/  The result of resolving a server for a file.

    Returned by :meth:`ServerDef.resolve` when a server is applicable
    to a file.  ``None`` is returned instead when the server should
    be skipped (binary missing and auto-install disabled, project
    marker not found, exclude marker hit, etc.).
    z	List[str]commandstrworkspace_rootcwddefault_factoryrl   envzDict[str, Any]initialization_optionsFboolseed_diagnostics_on_first_pushN)
__name__
__module____qualname____doc____annotations__r   dictrv   rw   ry        5/home/kuhnn/.hermes/hermes-agent/agent/lsp/servers.pyro   ro   l   s           HHH%555C5555-2U4-H-H-HHHHH+0"000000r   ro   c                  `    e Zd ZU dZded<   ded<   ded<   ded	<   d
Zded<   dZded<   ddZdS )	ServerDefa  Definition of one language server.

    The :func:`resolve_root` callable receives the absolute file path
    plus the workspace root (git worktree) and returns either the
    project-specific root for this server (e.g. the directory
    containing ``pyproject.toml``) or ``None`` to skip.

    The :func:`build_spawn` callable receives the resolved root and
    returns a :class:`SpawnSpec` (or ``None`` if the binary can't be
    found and auto-install isn't configured).
    rq   	server_idzTuple[str, ...]
extensionsz#Callable[[str, str], Optional[str]]resolve_rootz5Callable[[str, 'ServerContext'], Optional[SpawnSpec]]build_spawnFrx   seed_first_push description	file_pathreturnc                2    t          |          }|| j        v S )z2Return True iff this server handles ``file_path``.)_file_ext_or_basenamer   )selfr   exts      r   matcheszServerDef.matches   s    #I..do%%r   N)r   rq   r   rx   )rz   r{   r|   r}   r~   r   r   r   r   r   r   r   r   ~   s         
 
 NNN5555FFFF!O!!!!K& & & & & &r   r   c                      e Zd ZU dZded<   dZded<    ee          Zded<    ee          Z	d	ed
<    ee          Z
ded<   dS )ServerContexta  Context passed into :meth:`ServerDef.build_spawn`.

    Carries the user's auto-install policy, any user-overridden
    binary paths, and helpers the spawn builder needs.  All fields
    are optional; defaults yield "auto-install allowed, no overrides".
    rq   rr   autoinstall_strategyrt   zDict[str, List[str]]binary_overrideszDict[str, Dict[str, str]]env_overrideszDict[str, Dict[str, Any]]init_overridesN)rz   r{   r|   r}   r~   r   r   r   r   r   r   r   r   r   r   r      s           """""-2U4-H-H-HHHHH/4uT/J/J/JMJJJJ05d0K0K0KNKKKKKKr   r   pathrq   r   c                    t           j                            |           }t           j                            |          \  }}|r|                                S |S )u  Return the lower-cased extension OR full basename for extensionless files.

    Mirrors OpenCode's ``path.parse(file).ext || file`` — files like
    ``Dockerfile`` or ``Makefile`` match by basename, while normal
    files match by extension (``.py``, ``.ts``).
    )osr   basenamesplitextlower)r   base_rootr   s       r   r   r      sM     7D!!D!!$''JE3
 yy{{Kr   namesOptional[str]c                 D    | D ]}t          j        |          }|r|c S dS )z8Return the full path of the first command found on PATH.N)shutilwhich)r   nr   s      r   _whichr      s9      |A 	KKK	4r   r   r   	workspacemarkersSequence[str]excludesc                    t          | |||rt          j                            |          nd          }|;|r9t          | ||rt          j                            |          nd          }|dS |S |p|S )zCommon pattern: try ``nearest_root``, fall back to workspace root.

    Returns ``None`` if an exclude marker matches first (server gated off).
    N)r   ceiling)r   )r   r   r   dirname)r   r   r   r   foundrechecks         r   _root_or_workspacer      s    
 .7A	***T	  E }}
 2;EBGOOI...
 
 

 4Ir   rootctxOptional[SpawnSpec]c           	     b   t          |d          pt          dd          }|ddlm}  |d|j                  }|d S t
          j                            |          }|dv r^t
          j                            t
          j        	                    |          d          }t
          j        
                    |          r|}i }t          |           }|rd|i|d<   d|j        v r |                    |j        d                    t          |dg| | |j                            di           |	          S )
Npyrightzpyright-langserverr   try_install>   pyright.exer   
pythonPathr   --stdiorp   rr   rs   rv   rw   )_resolve_overrider   agent.lsp.installr   r   r   r   r   joinr   exists_detect_pythonr   updatero   r   get)r   r   bin_pathr   r   siblinginitpys           r   _spawn_pyrightr      sP    i00 Fi5 5H 111111;y#*>??47H%%D)))',,rwx88:NOO7>>'"" 	HD 
		B	 ,&+XC&&&C&y12229%!!)R00#   r   c                   g }t           j                            d          r%|                    t           j        d                    |                    t           j                            | d          t           j                            | d          g           |D ]L}dD ]G}t           j                            ||          }t           j                            |          r|c c S HMd S )NVIRTUAL_ENVz.venvvenv)z
bin/pythonzbin/python3zScripts/python.exe)r   environr   appendextendr   r   r   )r   
candidatesvsubps        r   r   r     s    J	z~~m$$ 5"*]3444rw||D'22BGLLv4N4NOPPP  F 	 	CQ$$Aw~~a   	 4r   c           
        t          |d          pt          d          }|ddlm}  |d|j                  }|d S t          |dg| | |j                            di           |j                            di           d          S )Nr   ztypescript-language-serverr   r   r   T)rp   rr   rs   rv   rw   ry   	r   r   r   r   r   ro   r   r   r   r   r   r   r   s       r   _spawn_typescriptr     s     l33[v>Z7[7[H111111;;S=QRR49%!!,33"155lBGG'+   r   c           
        t          |d          pt          d          }|ddlm}  |d|j                  }|d S t          |g| | |j                            di           |j                            di                     S )Ngoplsr   r   r   r   r   s       r   _spawn_goplsr   #  s     g..A&//H111111;w(<==4
!!'2.."155grBB   r   c           
        t          |d          pt          d          }|ddlm}  |d|j                  }|d S t          |g| | |j                            di           |j                            di                     S )Nrust-analyzerr   r   r   r   r   s       r   _spawn_rust_analyzerr   3  s     o66Q&:Q:QH111111;0DEE4
!!/266"155orJJ   r   c           
        t          |d          pt          d          }|ddlm}  |d|j                  }|d S t          |ddg| | |j                            di           |j                            di                     S )Nclangdr   r   z--background-indexz--clang-tidyr   r   r   s       r   _spawn_clangdr   C  s     h//C6(3C3CH111111;x)=>>4/@!!(B//"155hCC   r   Fc           
     n   t          |d          pt          d          }|ddlm}  |d|j                  }|d S t
          s+t          d          dat                              d           t          |dg| | |j	        
                    di           |j        
                    di                     S )	Nbash-language-serverr   r   
shellcheckTu   bash-language-server: shellcheck not found on PATH — diagnostics will be empty until shellcheck is installed (apt: shellcheck, brew: shellcheck, scoop: shellcheck).startr   )r   r   r   r   r   _BASH_SHELLCHECK_WARNEDloggerwarningro   r   r   r   r   s       r   _spawn_bash_lsr   V  s     &<==_H^A_A_H111111;5s7KLL4 # 
vl';';'C"&F	
 	
 	

 7#!!"8"=="1556LbQQ   r   c           
     
   t          |d          pt          d          }|ddlm}  |d|j                  }|d S t          |dg| | |j                            di           |j                            di                     S )Nyaml-language-serverr   r   r   r   r   r   s       r   _spawn_yaml_lsr   r  s     &<==_H^A_A_H111111;5s7KLL49%!!"8"=="1556LbQQ   r   c           
        t          |d          pt          d          }|ddlm}  |d|j                  }|d S t          |g| | |j                            di           |j                            di                     S )Nlua-language-serverr   r   r   r   r   s       r   _spawn_lua_lsr     s     &;<<]G\@]@]H111111;4c6JKK4
!!"7<<"1556KRPP   r   c           	     @   t          |d          pt          d          }|ddlm}  |d|j                  }|d S dddii}|                    |j                            di                      t          |dg| | |j	                            di           |          S )	Nintelephenser   r   	telemetryenabledFr   r   )
r   r   r   r   r   r   r   r   ro   r   )r   r   r   r   r   s        r   _spawn_intelephenser     s     n55O9O9OH111111;~s/CDD4)U+,DKK"&&~r::;;;9%!!."55#   r   c           
         t          |d          pt          d          }|d S t          |g| | |j                            di           |j                            di                     S )N	ocaml-lspocamllspr   r   r   ro   r   r   r   r   r   r   s      r   _spawn_ocamllspr     sw     k22HfZ6H6HHt
!!+r22"155k2FF   r   c           
     
   t          |d          pt          d          }|ddlm}  |d|j                  }|d S t          |dg| | |j                            di           |j                            di                     S )Ndockerfile-lszdocker-langserverr   r   z!dockerfile-language-server-nodejsr   r   r   r   s       r   _spawn_dockerfile_lsr     s     o66U&AT:U:UH111111;BCDXYY49%!!/266"155orJJ   r   c           	        t          |d          pt          d          }|d S ddddi}|                    |j                            di                      t          |dg| | |j                            di           |          S )Nterraform-lsexperimentalFeaturesT)prefillRequiredFieldsvalidateOnSaveserver   )r   r   r   r   r   ro   r   )r   r   r   r   s       r   _spawn_terraform_lsr    s     n55O9O9OHt%)"!
 !
D 	KK"&&~r::;;;7#!!."55#   r   c           
         t          |d          pt          d          }|d S t          |ddg| | |j                            di           |j                            di                     S )NrG   language-server--lspr   r   r   s      r   _spawn_dartr    s{     f--?Ht,g6!!&"--"155fbAA   r   c           
         t          |d          pt          dd          }|d S t          |dg| | |j                            di           |j                            di                     S )Nhaskell-language-serverzhaskell-language-server-wrapperr  r   r   r   s      r   _spawn_haskell_lsr
    s     &?@@ F)+DE EH t7#!!";R@@"1556OQSTT   r   c           
         t          |d          pt          d          }|d S t          |ddddg| | |j                            di           |j                            di                     S )Nrc   z--startup-file=noz--history-file=noz-ez!using LanguageServer; runserver()r   r   r   s      r   _spawn_juliar    s     g..A&//Ht/
 !!'2.."155grBB   r   c           
         t          |d          pt          d          }|d S t          |dg| | |j                            di           |j                            di                     S )Nclojure-lsplistenr   r   r   s      r   _spawn_clojure_lspr    sz     m44M}8M8MHt8$!!-44"155mRHH   r   c           
         t          |d          pt          d          }|d S t          |g| | |j                            di           |j                            di                     S )Nnixdr   r   r   s      r   _spawn_nixdr    su     f--?Ht
!!&"--"155fbAA   r   c           
         t          |d          pt          d          }|d S t          |g| | |j                            di           |j                            di                     S )Nzlsr   r   r   s      r   
_spawn_zlsr    su     e,,=uHt
!!%,,"155eR@@   r   c           
         t          |d          pt          d          }|d S t          |dg| | |j                            di           |j                            di                     S )NrU   lspr   r   r   s      r   _spawn_gleamr  +  sx     g..A&//Ht5!!!'2.."155grBB   r   c           
         t          |d          pt          dd          }|d S t          |g| | |j                            di           |j                            di                     S )N	elixir-lszlanguage_server.shr   r   r   s      r   _spawn_elixir_lsr  8  sz     k22_f[J^6_6_Ht
!!+r22"155k2FF   r   c           
         t          |d          pt          d          }|d S t          |dg| | |j                            di           |j                            di                     S )NrE   r  r   r   r   s      r   _spawn_prismar  E  s{     h//C6(3C3CHt,-!!(B//"155hCC   r   c           
         t          |d          pt          d          }|d S t          |g| | |j                            di           |j                            di                     S )Nkotlin-language-serverr   r   r   s      r   _spawn_kotlin_lsr!  R  s     &>?? 6 D DH t
!!":B??"1556NPRSS   r   c           
         t          |d          pt          d          }|d S t          |g| | |j                            di           |j                            di                     S )Njdtlsr   r   r   s      r   _spawn_jdtlsr$  a  sw     !g..A&//Ht
!!'2.."155grBB   r   c           
     
   t          |d          pt          d          }|ddlm}  |d|j                  }|d S t          |dg| | |j                            di           |j                            di                     S )Nvue-language-serverr   r   z@vue/language-serverr   r   r   r   s       r   
_spawn_vuer'  q  s     &;<< A AH 111111;5s7KLL49%!!"7<<"1556KRPP   r   c           
        t          |d          pt          dd          }|ddlm}  |d|j                  }|d S t          |dg| | |j                            di           |j                            di                     S )Nsvelte-language-serversvelteserverr   r   r   r   r   r   s       r   _spawn_svelter+    s     &>?? 60D DH 111111;79MNN49%!!":B??"1556NPRSS   r   c           
        t          |d          pt          dd          }|ddlm}  |d|j                  }|d S t          |dg| | |j                            di           |j                            di                     S )Nastro-language-serverzastro-lsr   r   z@astrojs/language-serverr   r   r   r   s       r   _spawn_astror.    s     &=>> &+C CH 111111;93;OPP49%!!"92>>"1556MrRR   r   r   c                    | j                             |          }|r5|d         r-t          j                            |d                   r|d         S dS )z%User can pin a binary path in config.r   N)r   r   r   r   r   )r   r   overrides      r   r   r     sS    #''	22H HQK BGNN8A;$?$? {4r   c                (    t          | |g d          S )N)zpyproject.tomlzsetup.pyz	setup.cfgzrequirements.txtPipfilezpyrightconfig.jsonr   r   r   s     r   _root_pythonr5    s#    hhh  r   c                0    t          | |g dddg          S )N)zpackage-lock.jsonz	bun.lockbzbun.lockzpnpm-lock.yamlz	yarn.lockzpackage.jsonztsconfig.jsonz	deno.jsonz
deno.jsonc)r   r3  r4  s     r   _root_typescriptr7    s8    	
 	
 	
 |,   r   c                (    t          | |g d          S )N)zgo.workzgo.modzgo.sumr3  r4  s     r   _root_gor9    s#    '''  r   c                (    t          | |ddg          S )Nz
Cargo.tomlz
Cargo.lockr3  r4  s     r   
_root_rustr;    s    i\<4PQQQr   c                &    t          | |dg          S )NGemfiler3  r4  s     r   
_root_rubyr>    s    iYK@@@r   c                (    t          | |g d          S )N)zcompile_commands.jsonzcompile_flags.txtz.clangdr3  r4  s     r   _root_clangdr@    s#    AAA  r   c                    |S Nr   r4  s     r   
_root_bashrC        r   c                    |S rB  r   r4  s     r   
_root_yamlrF    rD  r   c                (    t          | |g d          S )N)z.luarc.jsonz.luarc.jsoncz.luacheckrcz.stylua.tomlzstylua.tomlzselene.tomlz
selene.ymlr3  r4  s     r   	_root_luarH    s#    rrr  r   c                (    t          | |g d          S )N)zcomposer.jsonzcomposer.lockz.php-versionr3  r4  s     r   	_root_phprJ    s    i4f4f4fgggr   c                (    t          | |g d          S )N)zdune-projectzdune-workspacez.merlinopamr3  r4  s     r   _root_ocamlrM    s    i4i4i4ijjjr   c                    |S rB  r   r4  s     r   _root_dockerrO    rD  r   c                (    t          | |ddg          S )Nz.terraform.lock.hclzterraform.tfstater3  r4  s     r   _root_terraformrQ    s    i5JL_4`aaar   c                (    t          | |ddg          S )Nzpubspec.yamlzanalysis_options.yamlr3  r4  s     r   
_root_dartrS    s    i^E\4]^^^r   c                (    t          | |g d          S )N)z
stack.yamlzcabal.projectzhie.yamlr3  r4  s     r   _root_haskellrU  	  s    i4_4_4_```r   c                (    t          | |ddg          S )NzProject.tomlzManifest.tomlr3  r4  s     r   _root_juliarW    s    i^_4UVVVr   c                (    t          | |g d          S )N)zdeps.ednzproject.cljzshadow-cljs.ednzbb.ednz
build.bootr3  r4  s     r   _root_clojurerY    s"    9ddd  r   c                ,    t          | dg          }|p|S )Nz	flake.nix)r   )r   r   r   s      r   	_root_nixr[    s    [M22EIr   c                &    t          | |dg          S )Nz	build.zigr3  r4  s     r   	_root_zigr]    s    i[MBBBr   c                (    t          | |ddg          S )Nzmix.exszmix.lockr3  r4  s     r   _root_elixirr_     s    iY
4KLLLr   c                (    t          | |ddg          S )Nzschema.prismazprisma/schema.prismar3  r4  s     r   _root_prismara  $  s!    90FG  r   c                (    t          | |g d          S )N)settings.gradlezsettings.gradle.ktsbuild.gradlebuild.gradle.ktspom.xmlr3  r4  s     r   _root_kotlinrg  *  s#    aaa  r   c                (    t          | |g d          S )N)rf  rd  re  z.projectz
.classpathrc  r3  r4  s     r   
_root_javari  2  s#    ddd  r   r   )r   r   u   Python — Microsoft pyright)r   r   r   r   r   )r   r   r   r   r   r   r   r   Tu4   JavaScript/TypeScript — typescript-language-server)r   r   r   r   r   r   r&  )r   u   Vue.js — @vue/language-serverr)  )r    u!   Svelte — svelte-language-serverr-  )r"   u"   Astro — @astrojs/language-serverr   )r$   u   Go — goplsr   )r&   u   Rust — rust-analyzerr   )r)   r.   r,   r/   r+   r0   r1   r2   u   C/C++ — clangdr   )rK   rM   rN   z.kshu   Bash — bash-language-serverr   )r;   r=   u   YAML — yaml-language-serverr   )r@   u   Lua — lua-language-serverr   )rB   u   PHP — intelephenser   )rH   rJ   u   OCaml — ocaml-lspr   )rj   
Dockerfileu0   Dockerfile — dockerfile-language-server-nodejsr   )rO   rQ   u   Terraform — terraform-ls)rF   u!   Dart — built-in language serverr	  )r_   ra   u#   Haskell — haskell-language-server)rb   u   Julia — LanguageServer.jlr  )rV   rX   rZ   r[   u   Clojure — clojure-lspr  )r\   u   Nix — nixdr  )rg   ri   u   Zig — zls)rT   c                &    t          | |dg          S )Nz
gleam.tomlr3  )fpwss     r   <lambda>rn    s    $6r2~$N$N r   u"   Gleam — built-in language serverr  )rd   rf   u   Elixir — elixir-ls)rD   u#   Prisma — built-in language serverr   )r8   r:   u!   Kotlin — kotlin-language-serverr#  )r6   u$   Java — Eclipse JDT Language ServerzList[ServerDef]SERVERSOptional[ServerDef]c                L    t           D ]}|                    |           r|c S dS )z>Return the registry entry that handles ``file_path``, or None.N)ro  r   )r   srvs     r   find_server_for_filers    s8      ;;y!! 	JJJ	4r   c                V    t          |           }t                              |d          S )z:Return the LSP languageId to send in didOpen for ``path``.	plaintext)r   rm   r   )r   r   s     r   language_id_forrv    s%    

%
%CsK000r   )r   r   ro   ro  rs  rv  rm   )r   rq   r   rq   )r   rq   r   r   )r   )
r   rq   r   rq   r   r   r   r   r   r   )r   rq   r   r   r   r   )r   rq   r   r   )r   r   r   rq   r   r   )r   rq   r   rq   r   r   )r   rq   r   rq   r   rq   )r   rq   r   rp  )Vr}   
__future__r   loggingr   r   dataclassesr   r   typingr   r   r   r	   r
   r   r   agent.lsp.workspacer   r   	getLoggerr   rm   r~   ro   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.  r   r5  r7  r9  r;  r>  r@  rC  rF  rH  rJ  rM  rO  rQ  rS  rU  rW  rY  r[  r]  r_  ra  rg  ri  ro  rs  rv  __all__r   r   r   <module>r~     s    & # " " " " "  				  ( ( ( ( ( ( ( ( G G G G G G G G G G G G G G G G G G < < < < < < < <		.	/	/
F#	8F#
HF# 
<F# 	F#
 
<F# F# LF# LF# LF# LF# EF# xF# gF# 
4F# 
6F#  
6!F#" V#F# F#$ %F#& 
6'F#( 	#)F#* 	#+F#, 
5-F#. E/F#0 E1F#2 
53F#4 E5F#6 E7F#8 
89F#: H;F#< 
8=F#> H?F#@ HAF#B gCF#D VEF# F# F#F 
8GF#H HIF#J VKF#L FMF#N VOF#P gQF#R ESF#T EUF#V xWF#X VYF#Z 
7[F#\ G]F#^ 
=_F#` ]aF#b McF#d 
;eF#f {gF# F# F#h GiF#j HkF#l gmF#n IoF#p _qF#r YsF#t IuF#v EwF#x GyF#z W{F#| 
9}F#~ IF#@ 
7AF#B 
8CF#D HEF#F EGF#H EIF# F#J <KF# F# F F F FR 1 1 1 1 1 1 1 1" & & & & & & & &4 L L L L L L L L(          @   @
 
 
 
   "                  8           $
 
 
 
       (
 
 
 
      &
 
 
 

 
 
 

 
 
 

 
 
 

 
 
 

 
 
 
          $   $   $         "   R R R RA A A A            h h h hk k k k   b b b b_ _ _ _a a a aW W W W      
C C C CM M M M          I"!"2   IQ%%J   I'%5   I*%!7   I)% 8   I "   I!(,   IM!!&   I(3"3   I($"3   I'!1   I '*   I" #)   I!0!(F   I %$'0   I7   I+""%9   I  1   I5"&-   I"   I#!   INN 8   I"!$*   I!!9   I*"!$7   I :  cx x x x xv   1 1 1 1  r   