
    QjZ                    T   % S r SSKJr  SSKrSSKrSSKrSSKrSSKrSSKJ	r	J
r
  SSKJr  SSKJr  \" \5      R!                  5       R"                  S   r\S-  r\S	-  r\S
-  r\S-  r\S-  r\S-  r\S-  r\S-  r\S-  r\S-  r0 rS\S'   S6S jr\" SSS5        \" SSS5        \" SSS5        \" SSS 5        \" S!S"S#5        \" S$S%S&5        \" S'S(S)5        \" S*S+S,5        S7S- jr S8S. jr!S9S/ jr"S:S0 jr#S;S1 jr$S<S2 jr%S=S3 jr&S>S4 jr'\(S5:X  a  \RR                  " \'" 5       5        gg)?a  Audit public API -> user documentation coverage for Nexamas UI.

The compiled assembly inventory is the type/member authority. This audit verifies that
all consumer-visible CLR types have:
  1. an assembly-derived API reference entry; and
  2. contextual user-facing documentation outside the generated batch tables.

It also reconciles source classification and V1 approval manifests and writes the
Phase 4 coverage matrix/summary used by the documentation gate.
    )annotationsN)Counterdefaultdict)Path)unquote   z5docs/_inventory/assembly-api/public-api-assembly.jsonz2docs/_inventory/user-documentation-audit-scope.csvz9eng/tests/Nexamas.UI.PublicApiClassificationBaseline.jsonz1eng/tests/Nexamas.UI.ApprovedV1PublicSurface.jsonz3eng/tests/Nexamas.UI.PublicSurfaceTypeBaseline.jsonz5docs/_inventory/public-api-documentation-coverage.csvz4docs/_inventory/public-api-documentation-coverage.mdz9docs/_inventory/phase4-code-to-documentation-summary.jsonz;docs/_inventory/phase4-code-to-documentation-gap-ledger.csvz<docs/_inventory/phase4-supporting-contract-verification.jsonzdict[str, tuple[str, str]]PHASE4_RECONCILIATIONSc                F    U R                  5        H  nX4[        U'   M     g N)splitr	   )namespathactionnames       Q/mnt/data/nexamas_phase4/tools/docs/Audit-NexamasUIPublicDocumentationCoverage.pyregisterr   &   s    (,~t$     zHostFocusLostEventHandler PointerDownEventHandler PointerLeftEventHandler PointerMovedEventHandler PointerUpEventHandler PointerWheelEventHandlerz,docs/reference/application-facade-surface.mdzzGrouped the VB compiler-generated input delegates under MASApplicationWindowInput and documented exact handler parameters.zMASDropDownMenuItemIntent MASDropDownMenuModel MASDropDownMenuNode MASDropDownMenuNodeKind MASToolbarItemSizing MASToolbarSpacer MASTopBarCommandEventArgs MASTopBarWindowCommand MASTopBarWindowCommandEventArgs MASMenuButtonz2docs/reference/controls/navigation-and-commands.mdzPAdded owner-scoped toolbar, drop-down, TopBar, and compatibility-route guidance.zMASAgendaViewMode MASAppLayoutSnapshot MASDashboardGridWidgetSnapshot MASKanbanBoardSnapshot MASKanbanCardSnapshot MASKanbanColumnSnapshot MASMasterDetailItemSnapshotz1docs/reference/product-controls-user-reference.mdz^Added product-control view-mode and snapshot DTO boundaries with parent create/restore routes.(MASAppliedFilterRemoveRequestedEventArgsz<docs/reference/controls/applied-filters-and-chart-legends.mdzTNamed and described the filter-removal event-data contract at the event usage point.zMASFileExplorerItemActivatedEventArgs MASFileExplorerItemKind MASFileExplorerLocationKind MASFilePickerResultEventArgs MASFilePickerMode MASFilePickerOptions MASFilePickerResult MASFileSystemSelectionKindszIdocs/reference/controls/file-explorer-property-grid-and-filter-builder.mdzhAdded explorer model and File Picker option/result contracts plus application responsibility boundaries.a  MASListViewChromeMode MASListViewColumnClickEventArgs MASListViewColumnTextAlign MASListViewEmptySpaceContextMenuRequestedEventArgs MASListViewInlineRenameCommittedEventArgs MASListViewItemContextMenuRequestedEventArgs MASListViewItemKind MASListViewSortDirection MASListTreeIconSizeModez.docs/reference/controls/list-and-tree-views.mdzHAdded list/tree presentation enums and interaction event-data contracts.zkIMASIconResolver MASIconImageRole MASIconKind MASIconObjectKind MASIconPalette MASIconRequest MASIconResultz)docs/reference/icon-resolution-surface.mdziCreated a dedicated advanced icon-resolution reference including resolver and image ownership boundaries.zPMASSurfaceStrength MASCardVisualStyle MASThemeContext MASTypography MASTextStylez'docs/reference/theme-surface-surface.mdz]Added advanced rendering, surface-strength, theme-context, and typography lifecycle guidance.c                    U R                  SS9 n[        R                  " U5      sS S S 5        $ ! , (       d  f       g = f)N	utf-8-sigencoding)openjsonload)r   fs     r   	load_jsonr   ]   s)    	K	(Ayy| 
)	(	(s   0
>c                b    [         R                  " S[         R                  " U 5      -   S-   5      $ )Nz(?<![A-Za-z0-9_])z(?![A-Za-z0-9_]))recompileescape)r   s    r   exact_patternr"   b   s%    ::*RYYt_<?RRSSr   c                d   U S   nU S   nUS:X  a  U R                  S5      (       a  S$ S$ US:X  a  gUS	:X  a  g
US:X  a  gUR                  S5      (       a  gUR                  S5      (       a  gUR                  S5      (       d  UR                  S5      (       a  gSU;   a  gUR                  S5      (       a  gUR                  S5      (       a  gUR                  S5      (       a  gUR                  S5      (       d  SU;   a  gUR                  S5      (       d  UR                  S5      (       a  g g!)"Nr   kindDelegateisNestedzGenerated event delegatezDelegate contractEnumzSupporting enum	InterfacezExtension interface	StructurezValue contract	EventArgszEvent-data contractOptionszOptions contractResult
ShowResultzResult contractSnapshotzSnapshot contractBuilderzBuilder surfaceHandlezHandle contractScopezScope/lifetime contractDiagnosticszDiagnostics/evidence contractModelNodezSupporting modelzClass surface)getendswith)tr   r$   s      r   role_forr8   f   s   V9DV9Dz-.UU:->->)WDWWv~ {${}}[!!$}}Y!}}X$--"="= T"}}Y }}X }}W(}}]##}'<.}}Wv!6!6!r   c                X    U S:X  a  gU S:X  a  gU S:X  a  gU S:X  a  gU S	:X  a  g
U S:X  a  gg)NStablez+V1 API reference + contextual user guidanceAdvancedz.Advanced API reference + owner-scoped guidanceEvidencez7Evidence API reference + explicit non-beginner boundaryPreviewz1Preview API reference + parent/ownership boundaryCompatz9Compatibility API reference + preferred replacement routeGeneratedDelegatez/Owner event reference + exact handler signaturez)API reference + contextual classification )categoryroles     r   documentation_levelrC      sH    8<:?:H9B8J&&@6r   c                |   U R                  S5      (       a  gU R                  S5      (       a  gU R                  S5      (       a  gU R                  S5      (       d  U R                  S5      (       a  g	U R                  S
5      (       a  gU R                  S5      (       d  U R                  S5      (       d  U S;   a  gg)Nzdocs/reference/api/apiReferencezdocs/reference/curatedReferencezdocs/recipes/recipezdocs/examples/zsamples/examplezdocs/product/productz
docs/core/z
docs/user/>   	README.mddocs/index.mddocs/README.mddocs/customer-guide.mddocs/developer-guide.mddocs/reference-guide.mddocs/company-adoption-guide.mdguide	otherUser)
startswith)rels    r   
path_grouprU      s    
~~+,,
~~'((!
~~o&&
~~&''3>>*+E+E
~~o&&
~~l##s~~l'C'Cs O H r   c                z   [        5       n[        [        5      nU R                  SSS9R	                  5        H  n[
        R                  " SU5      nU(       d  M#  UR                  S5      n[
        R                  " SSU5      n[
        R                  " SS	U5      nUR                  S
S5      R                  5       R                  5       n[
        R                  " SSU[
        R                  S9n[
        R                  " SSU5      nX&   nX&==   S-  ss'   U(       a  U SU 3nUR                  U5        GM     U$ )Nutf-8ignorer   errorsz^#{1,6}\s+(.+?)\s*#*\s*$   z<[^>]+> z\[([^\]]+)\]\([^)]*\)z\1`z[^\w\- ])flagsz\s+-)setr   int	read_text
splitlinesr   matchgroupsubreplacestriplowerUNICODEadd)r   anchors
duplicateslinemtextslugns           r   heading_anchorsrs      s   G(3C(8JALLNHH0$7wwqzvvj"d+vv.t<||C$**,224vvk2t2::>vvfc4(AV1QC=DD O Nr   c           	     @   Sn/ n0 n[         R                  " S5      nU  GH  nUR                  SSS9nUR                  U5       GH  nUR	                  5       nU(       a  UR                  S5      (       a  M3  UR                  S5      (       a  UR                  S5      (       a  US	S
 nUR                  S5      u  pn
U(       a  [        UR                  5       S   5      OSnU(       d  UOUR                  U-  R                  5       nUS	-  nUR                  5       (       d4  UR                  [        UR                  [         5      5      USS.5        GM  U
(       d  GM  UR#                  5       (       d  GM3  UR$                  R'                  5       S:X  d  GMT  UR)                  U[+        U5      5      n[        U
5      R	                  5       R'                  5       nX;  d  GM  UR                  [        UR                  [         5      5      USS.5        GM     GM     X4$ )Nr   z(?<!!)\[[^\]]*\]\(([^)]+)\)rW   rX   rY   )zhttp://zhttps://zmailto:<>r[   #r\   zmissing target)sourcetargetreasonz.mdzmissing anchor)r   r    rb   findallrh   rS   r6   	partitionr   r   parentresolveexistsappendstrrelative_toROOTis_filesuffixri   
setdefaultrs   )pathscheckedrZ   anchor_cachelink_resrcrp   rawtarget_text_fragmentrz   rl   frags                 r   check_markdown_linksr      s   GF)+Ljj78G}}gh}???4(C))+C#..)KLL~~c""s||C'8'8!Bi'*}}S'9$KH=H'+"3"3"5a"89bK +S#**{2J1S1S1UFqLG==??S__T-B)Cs^nopxFNN,,1D1D1F%1O&11&/&:QRx(..0668&MMS1F-GSVbr"st# ) ( ?r   c                   ^7^:^;^< [        [        5      n [        [        5      n[        [        5      n[        [        5      n[
        R                  SS9 n[        [        R                  " U5      5      nS S S 5        W Vs/ s H  ofS   S:X  d  M  [        US   -  PM     nnU Vs/ s H7  oR                  5       (       a  M  [        UR                  [        5      5      PM9     n	nU Vs/ s H  oR                  5       (       d  M  UPM     nn0 n
[        [        5      nU HC  nUR                  [        5      R                  5       nU[!        U5         R#                  U5        ME     UR%                  5        H  u  pSR'                  S U 5       5      X'   M!     US    Vs0 s H  nUS	   US
   US   4U_M     nnUS    Vs1 s H  nUS	   US
   US   4iM     nnUS    Vs0 s H  nUS	   US
   US   4U_M     nn/ m</ n/ n/ nU S    GH  nUS	   US
   US   4nUS   S:H  =(       a,    UR)                  S5      =(       a    UR)                  S5      S:H  nUR)                  U5      nU(       a  SOU(       a  US   OSnU(       d  Uc  UR#                  US   5        UU;   nUS:X  a  U(       d  UR#                  SUS    35        US:w  a  U(       a  UR#                  SUS    35        [+        US
   5      nU
R%                  5        VVs0 s H!  u  nnU[-        UR/                  U5      5      _M#     snnm;T;R)                  SS5      nT; V s/ s H  n U S:w  d  M  U PM     n!n [1        U;4S jU! 5       5      n"/ n#U! Hf  nX    H[  nUR3                  UR5                  SSS95      (       d  M)  U#R#                  UR                  [        5      R                  5       5        M]     Mh     [7        [9        U#5      5      n#/ n$UR)                  S/ 5       H[  nUR3                  UR5                  SSS95      (       d  M)  U$R#                  UR                  [        5      R                  5       5        M]     [7        [9        U$5      5      n$[;        U5      n%US:  a  U"S:  a  S OS!n&0 SUS   _S	US	   _S
US
   _SUS   _SU_S"[        U5      R=                  5       _S#U%_S$[?        UU%5      _S%US%   _S&U_S'U"_S(T;R)                  S)S5      _S*T;R)                  S+S5      _S,T;R)                  S-S5      _S.T;R)                  S/S5      _S0T;R)                  S1S5      _S2T;R)                  S3S5      _S4R'                  U$5      S4R'                  U#5      U&S5.En'T<R#                  U'5        U&S :w  d  GM  UR#                  U'5        GM     T<RA                  S6 S79  [        T<S   RC                  5       5      n([D        R                  S8SS9S:9 n[        RF                  " UU(S;9n)U)RI                  5         U)RK                  T<5        S S S 5        [L        R                  S8SS9S:9 n/ S<Qn*[        RF                  " UU*S;9n)U)RI                  5         [7        [N        5       H&  m7[N        T7   u  n+n,U)RQ                  T7S=U,U+S>S<.5        M(     S S S 5        [S        U5      u  n-n.[T        R                  5       (       a  [        [T        5      OS?SS@/SA.n/U/R)                  SB5      S :w  a  U/R)                  SC/ 5      O/ n0[W        SD T< 5       5      n1[W        SE T< 5       5      n2[W        SF T< 5       5      n3[1        SG T< 5       5      n4[1        SH T< 5       5      n5[X        RZ                  " [D        R]                  5       5      R_                  5       Ra                  5       n6SISJU(       d%  U(       d  U(       d  U	(       d  U.(       d	  U0(       d  S OSKU SL   U6[-        U5      [-        U5      U	SM.[-        U S   5      USN   [1        SO T< 5       5      [1        SP T< 5       5      [c        [7        U1R%                  5       5      5      [c        [7        U2R%                  5       5      5      SQ.[1        SR T< 5       5      [1        SS T< 5       5      U5U4[c        [7        U3R%                  5       5      5      [-        U5      ST.[-        [N        5      [1        U<4SU j[N         5       5      [N         V7^7s/ s H!  m7[e        U74SV jT< 5       S5      S:X  d  M  T7PM#     sn7SW.UUSX.U-U.SY.U// SZQS[.n8[f        Ri                  [j        Rl                  " U8S\S]S^9S-   SSS:9  S_S9S`S9SaU SL    Sb3Sc[-        U S   5       Sb3SdU8Se   Sf    Sb3SgU8Se   Sh    Sb3Si[-        U5       Sb3SjU6 Sb3S9SkS9SlSmSnSoS9SpS9SqSr/n9[7        U15       H4  m:U9R#                  SsT: StU1T:    Su[1        U:4Sv jT< 5       5       Sw35        M6     U9S9SxS9Sy[-        [N        5       Sz[-        U8S{   S|   5       S}3S9S~S9SS9SU5 Sb3SU4 Sb3S9SS9SS9/-  n9U(       a;  U9SS/-  n9U H-  nU9R#                  SsUS    SUS    StUS&    SuUS'    Sw3	5        M/     OU9R#                  S5        U9S9SS9S[-        U5       Sb3S[-        U5       Sb3S[-        U5       Sb3SU- Sb3S[-        U.5       Sb3SU/R)                  SS5       Sb3S[-        U/R)                  SC/ 5      5       Sb3S9SS9SU8SB    S3/-  n9[n        Ri                  SR'                  U95      S-   SSS:9  [q        [j        Rl                  " U8SB   [-        T<5      U8Se   Sf   U8Se   Sh   [-        U5      [-        U5      [-        U5      U-[-        U.5      S.	S\S95        U8SB   S :X  a  S$ S$ ! , (       d  f       GN== fs  snf s  snf s  snf s  snf s  snf s  snf s  snnf s  sn f ! , (       d  f       GN= f! , (       d  f       GNN= fs  sn7f )Nr   r   scopezPrimary user auditr   
c              3  @   #    U  H  oR                  S SS9v   M     g7f)rW   rX   rY   N)rb   ).0ps     r   	<genexpr>main.<locals>.<genexpr>   s      _Y^TUgh!OY^s   classifications	namespacer   r$   approvedPublicTypespublicTypestypesr%   r&   declaringTypez0Nexamas.UI.Application.MASApplicationWindowInputr?   rA   UnclassifiedfullNamer:   z!Stable type missing V1 approval: zNon-stable type V1-approved: rE   r   c              3  .   >#    U  H
  nTU   v   M     g 7fr   r@   )r   gcountss     r   r   r     s     >~!F1I~s   rW   rX   rY   PASSGAP
v1ApprovedrB   requiredDocumentationmemberCountapiReferenceMentionscontextualMentionscuratedReferenceMentionsrF   guideMentionsrQ   productMentionsrI   recipeMentionsrG   exampleMentionsrH   otherUserMentionsrR   z; )apiReferencePathscontextPathsstatusc                V    U S   R                  5       U S   R                  5       U S   4$ )Nr   r   r$   )ri   )xs    r   <lambda>main.<locals>.<lambda>1  s*    an&:&:&<aioo>OQRSYQZ%[r   )keywr\   )r   newline)
fieldnames)typephase3Stater   targetDocumentationphase4Statez6Full API table only; no contextual user-facing mentionzContextual coverage PASSNOT_RUNz1Phase 4 supporting-contract verifier was not run.)r   
assertionsfailuresr   r   c              3  *   #    U  H	  oS    v   M     g7f)rA   Nr@   r   rs     r   r   r   K  s     C]
m]   c              3  *   #    U  H	  oS    v   M     g7f)rB   Nr@   r   s     r   r   r   L  s     ;]F)]r   c              3  *   #    U  H	  oS    v   M     g7f)r   Nr@   r   s     r   r   r   M  s     ?AhKr   c              3  b   #    U  H%  n[        US    5      [        US   5      -   S:  v   M'     g7f)r   r   r   Nra   r   s     r   r   r   N  s4     &wivdes1-=+>'?#aHYFZB['[^_'_ivs   -/c              3  D   #    U  H  n[        US    5      S:  v   M     g7f)r   r   Nr   r   s     r   r   r   O  s#     &eWdRSs1-G+H'IA'MWd    z(Nexamas.UI.DocumentationAudit.Phase4/1.0z,Code-to-documentation reverse coverage auditFAILpublicApiHash)classifiedMarkdownFilesprimaryUserDocumentationFilesmissingPrimaryScopeFilestotalPublicTypeCountc              3  0   #    U  H  oS    S:H  v   M     g7f)rA   r?   Nr@   r   s     r   r   r   `  s     2oan\]Z=DW3Wan   c              3  0   #    U  H  oS    S:H  v   M     g7f)r   trueNr@   r   s     r   r   r   a  s     (ZMq<F)BMr   )consumerVisibleClrTypesexplicitSourceDeclaredTypescompilerGeneratedEventDelegatesv1ApprovedStableTypescategoryCounts
roleCountsc              3  D   #    U  H  n[        US    5      S:  v   M     g7f)r   r   Nr   r   s     r   r   r   f  s$     7rdq_`A>T<U8VYZ8Zdqr   c              3  D   #    U  H  n[        US    5      S:  v   M     g7f)r   r   Nr   r   s     r   r   r   g  s$     7pbo]^A>R<S8TWX8Xbor   )$typesWithAssemblyDerivedApiReference$typesWithContextualUserDocumentationtypesWithCuratedReferencetypesWithRecipeOrExampleMentionstatusCountsremainingCoverageGapsc              3  \   >#    U  H  oT Vs1 s H  o"S    iM	     sn;   v   M     gs  snf 7f)r   Nr@   )r   r   r   coverage_rowss      r   r   r   o  s+     "qZpRV}+M}!fI}+M#MZp+Ms   
,',c              3  T   >#    U  H  oS    T:X  d  M  [        US   5      v   M     g7f)r   r   Nr   )r   r   r   s     r   r   r   r  s.     b}!RXPY]aPa5Q3455}s   (()typesPreviouslyApiTableOnlytypesReconciledremainingPreviouslyApiTableOnly)classificationErrorsv1ApprovalErrors)localMarkdownLinksCheckedrZ   )zxPhase 4 proves reverse type-level documentation coverage and classification, not runtime behavior for every prose claim.a  Recipe/example mentions are reported as an adoption metric; supporting enums, event args, DTOs, generated delegates, preview snapshots, evidence types, and compatibility types are intentionally documented with their owning surface rather than requiring standalone recipes.zoPhase 5 must compile and run documentation examples in a clean Windows/.NET Framework 4.8 consumer environment.)schemaphaser   assemblyPublicApiHashcoverageMatrixSha256r   publicSurfacecoveragephase4Reconciliation
governancelinkssupportingContractVerificationremainingBoundariesr   F)indentensure_asciiz## Public API Documentation CoveragezThis matrix is the Phase 4 reverse audit: every consumer-visible type exported by the compiled `Nexamas.UI.dll` is checked against the assembly-derived API tables and against contextual user documentation outside those generated tables.z- Assembly public API hash: `r]   z- Consumer-visible CLR types: `z&- Types with API reference coverage: `r   r   z-- Types with contextual user documentation: `r   z- Remaining coverage gaps: `z- Coverage matrix SHA-256: `z## Coverage policyzJ- Every public CLR type must appear in the assembly-derived API reference.zS- Every type must also have contextual guidance outside the generated batch tables.z- Supporting enums, event records, options/results, snapshots, generated delegates, evidence types, and compatibility types may be documented with their owning surface instead of receiving a standalone recipe.zd- Stable types require V1 approval; non-stable categories must not be silently promoted to V1Stable.z## Category resultz$| Category | Types | Coverage gaps |z|---|---:|---:|z| `z` | z | c              3  P   >#    U  H  oS    T:H  =(       a    US   S:g  v   M     g7f)rA   r   r   Nr@   )r   r   cats     r   r   r     s=       AD  vCpq:PSASAkXYZbXcekXkAk  vCs   #&z |z## Phase 4 reconciliationzPhase 3 found `z` types that appeared only in the full API tables. Phase 4 assigned all of them to an owning user-facing reference and reduced that gap to `r   r   z`.zThe detailed action ledger is [`phase4-code-to-documentation-gap-ledger.csv`](phase4-code-to-documentation-gap-ledger.csv). The complete 302-row matrix is [`public-api-documentation-coverage.csv`](public-api-documentation-coverage.csv).z## Adoption-depth metricz0- Types mentioned in a curated reference page: `z6- Types mentioned in at least one recipe or example: `zRecipe/example coverage is not a type-by-type gate: many public types are supporting contracts consumed through a parent control. Phase 5 validates the executable examples themselves.z## Remaining gapsz5| Type | Category | API mentions | Context mentions |z|---|---|---:|---:|z` | `zlNone. All 302 consumer-visible CLR types have both API-reference and contextual user-documentation coverage.z## Governance and link checksz'- Unclassified explicit public types: `z - V1 approval/category errors: `z(- Primary user Markdown files checked: `z!- Local Markdown links checked: `z- Link/anchor errors: `z#- Supporting-contract assertions: `r   z+- Supporting-contract assertion failures: `z## Acceptancez**um   ** — reverse public-type documentation coverage is closed when all counts above remain at zero gaps/errors.)	r   r   apiReferenceCoveredcontextCoveredgapsr   r   linksChecked
linkErrors)r   r[   )9r   ASSEMBLY_APICLASSIFICATIONV1_APPROVALSOURCE_BASELINE	SCOPE_CSVr   listcsv
DictReaderr   r   r   r   r   as_posixrU   r   itemsjoinr5   r"   lenr|   sumsearchrb   sortedr`   r8   ri   rC   sortkeysOUT_CSV
DictWriterwriteheader	writerows
OUT_LEDGERr	   writerowr   SUPPORT_VERIFYr   hashlibsha256
read_bytes	hexdigestupperdictnextOUT_SUMMARY
write_textr   dumpsOUT_MDprint)=apiclassificationapprovalsource_baseliner   
scope_rowsr   primary_pathsr   missing_scope_filestextsgrouped_pathsr   rT   re   r   r   	class_mapapproved
source_mapr  classification_errorsapproval_errorsr7   r   	generatedcrA   is_v1patrp   	api_countr   context_groupscontext_countcontext_files	api_filesrB   r   rowr   r   fieldsrz   r   
link_countlink_errorssupporting_verificationsupporting_errorscategory_countsrole_countsstatus_countstypes_with_recipe_or_exampletypes_with_curated_reference
matrix_shar   summarylinesr   r   r   s=                                                          `  @@@r   mainrM     s(   
L
!C~.N%H0O		-#..+,
 
./9`z!wZK_=_%TAfI%zM`=J]]RZRZR\33q}}T23]] -<1QM<E2=d2CMt$--/jo&--d3  &++-yy _Y^ __ . ESSdDefDeq!K.!F)QvY7:DeIf@HI^@_`@_1;6AfI6@_H`ETUbEcdEc1[>1V9ai8!;EcJd "MD')!#O\~qy!F)4fI+  Sj0A  SaeeOF\  aS  GS	MM#*3&1!J-R`QY!((:7xx""%Fq}o#VWxE""%B1Z=/#RSAfI&CH;;=Q=KE4%S[[.//=QJJ~q1	%+CVqN/B!VC>~>>#E")::akk78kLMM!((t)<)E)E)GH * $ s=12	"">26Azz!++wx+HII  t!4!=!=!?@ 7 3y>*	{$q=]Q->E
*
;
 AfI
 AfI	

 
 #e***,
 D
 $%84%H
 1]+
 #I
 !-
 '

3Eq(I
 VZZ3
 vzz)Q7
 fjj15
  vzz)Q7!
"  K!;#
$ "&9!5 IIm4)
, 	S!VKKq t [\mA&++-.J	cK	<NN14	]3 
= 
{B	?1XNN10	12D3D9NFFJJW '-9  3	 
@ 3=AJ;I;P;P;R;Ri71;n:oY H_GbGbckGlpvGv/33JC|~C]CCO;];;K???M#&&wiv&w#w #&&eWd&e#e  2 2 45??AGGIJ<?!%)>/Uhlw  |M&  TZ!$_!5 *'*:-0-?(;
 (+3w<'8+:;Q+R/22oan2o/o%((ZM(Z%Z"6/*?*?*A#BCvk&7&7&9:;
 587rdq7r4r477pbo7p4p)E/K (;(;(=!>?%(Y
 ,//E+F""qZp"qq!70!7b}bdefjkk !70!
 %: /

 *4!
 +B 
Y1Gd 4::gaeLtS^eost 	.
 	w

'O(<'=Q?
)#c'l*;)<A>
01DEk1l0mmno
7
8KLr8s7ttuv
&s4yk3
&zl!4

T] 	\n

.-E0 o&s3%tOC$8#9S  AD  vC  AD  >D  =E  EG  H  	I '	
#

#456  7C  DG  HO  Pf  Hg  hI  HJ  DK  CL  LN  	O
 	w
"

:;W:XXYZ
@A]@^^_`
 	B

! E$ IK`aaALL3q}oU1Z=/aH^F_E``cdefzd{c||~  A  	  D  	E	
'

1#6K2L1MQO
*3+?*@B
23}3E2FaH
+J<q9
!#k"2!315
-.E.I.I,XY.Z-[[\]
5c:Q:U:UV`bd:e6f5gghi


WX   M  	N E  dii&-N	$**(#]#&z23YZ!*-.TUD	 #$9 :0"+&
 
 
 !V+122k 
.	-`]< g`d* RCZ 
=	< 
@	?p0sy    n* n<n<&o"o*oo"oo%o(o
o o 97o%A#o7>p	 p	*
n9%
o47
p__main__)r   r   r   r   r   r   returnNone)r   r   rO  r!  )r   r   rO  zre.Pattern[str])r7   r!  rO  r   )rA   r   rB   r   rO  r   )rT   r   rO  r   )r   r   rO  zset[str])r   z
list[Path]rO  ztuple[int, list[dict]])rO  ra   )*__doc__
__future__r   r
  r  r   r   syscollectionsr   r   pathlibr   urllib.parser   __file__r   parentsr   r  r  r  r  r  r  r&  r#  r  r  r	   __annotations__r   r   r"   r8   rC   rU   rs   r   rM  __name__exitr@   r   r   <module>r\     s  	 # 
   	 
 ,   H~''*MMGG	SSHHNN
H
H	F	FPPQQ
VV57 2 76 	N2 A	 	4 9V 	P7d	 	.BZ
 	" Pn 	 5N 	q/o
 	V-c
T@7 &*8{3| zHHTV r   