Äï`[������ådocutils.nodesîådocumentîìî)Åî}î(å	rawsourceîå�îåchildrenî]î(h�årawîìî)Åî}î(hå\newpageîh]îh�åTextîìîå\newpageîÖîÅî}î(hhåparentîhubaå
attributesî}î(åidsî]îåclassesî]îånamesî]îådupnamesî]îåbackrefsî]îåformatîålatexîå	xml:spaceîåpreserveîuåtagnameîh	åsourceîå]/var/lib/jenkins/jobs/metacat_beta/workspace/metacat/docs/user/metacat/source/query-index.rstîålineîKhhhhubh�åsectionîìî)Åî}î(hhh]î(h�åtitleîìî)Åî}î(håMetacat Indexingîh]îhåMetacat IndexingîÖîÅî}î(hh3hh1hhh'Nh)Nubah}î(h]îh]îh]îh]îh ]îuh&h/hh,hhh'h(h)Kubh�å	paragraphîìî)Åî}î(håŸMetacat v2.1 introduces support for building a SOLR index of Metacat content.
While we continue to support the "pathquery" search mechanism, this will be phased out
in favor of the more efficient SOLR query interface.îh]îhå›Metacat v2.1 introduces support for building a SOLR index of Metacat content.
While we continue to support the “pathquery” search mechanism, this will be phased out
in favor of the more efficient SOLR query interface.îÖîÅî}î(hhChhAhhh'Nh)Nubah}î(h]îh]îh]îh]îh ]îuh&h?h'h(h)Khh,hhubh@)Åî}î(hå]Metacat deployments that opt to use the Metacat SOLR index will be able to take advantage
of:îh]îhå]Metacat deployments that opt to use the Metacat SOLR index will be able to take advantage
of:îÖîÅî}î(hhQhhOhhh'Nh)Nubah}î(h]îh]îh]îh]îh ]îuh&h?h'h(h)K
hh,hhubh�åbullet_listîìî)Åî}î(hhh]î(h�å	list_itemîìî)Åî}î(håfast search performanceîh]îh@)Åî}î(hhfh]îhåfast search performanceîÖîÅî}î(hhfhhhubah}î(h]îh]îh]îh]îh ]îuh&h?h'h(h)Khhdubah}î(h]îh]îh]îh]îh ]îuh&hbhh_hhh'h(h)Nubhc)Åî}î(håbuilt-in paging featuresîh]îh@)Åî}î(hh}h]îhåbuilt-in paging featuresîÖîÅî}î(hh}hhubah}î(h]îh]îh]îh]îh ]îuh&h?h'h(h)Khh{ubah}î(h]îh]îh]îh]îh ]îuh&hbhh_hhh'h(h)Nubhc)Åî}î(hå2customizable return formats (for advanced admins)
îh]îh@)Åî}î(hå1customizable return formats (for advanced admins)îh]îhå1customizable return formats (for advanced admins)îÖîÅî}î(hhòhhñubah}î(h]îh]îh]îh]îh ]îuh&h?h'h(h)Khhíubah}î(h]îh]îh]îh]îh ]îuh&hbhh_hhh'h(h)Nubeh}î(h]îh]îh]îh]îh ]îåbulletîå*îuh&h]h'h(h)Khh,hhubh+)Åî}î(hhh]î(h0)Åî}î(håIndexed documents and fieldsîh]îhåIndexed documents and fieldsîÖîÅî}î(hh∑hhµhhh'Nh)Nubah}î(h]îh]îh]îh]îh ]îuh&h/hh≤hhh'h(h)Kubh@)Åî}î(håqMetacat integrates the existing DataONE index library which includes many common metadata formats
out-of-the-box:îh]îhåqMetacat integrates the existing DataONE index library which includes many common metadata formats
out-of-the-box:îÖîÅî}î(hh≈hh√hhh'Nh)Nubah}î(h]îh]îh]îh]îh ]îuh&h?h'h(h)Khh≤hhubh�åenumerated_listîìî)Åî}î(hhh]î(hc)Åî}î(håEMLîh]îh@)Åî}î(hhÿh]îhåEMLîÖîÅî}î(hhÿhh⁄ubah}î(h]îh]îh]îh]îh ]îuh&h?h'h(h)Khh÷ubah}î(h]îh]îh]îh]îh ]îuh&hbhh”hhh'h(h)Nubhc)Åî}î(håFGDCîh]îh@)Åî}î(hhÔh]îhåFGDCîÖîÅî}î(hhÔhhÒubah}î(h]îh]îh]îh]îh ]îuh&h?h'h(h)KhhÌubah}î(h]îh]îh]îh]îh ]îuh&hbhh”hhh'h(h)Nubhc)Åî}î(håDryad*

îh]îh@)Åî}î(håDryad*îh]îhåDryad*îÖîÅî}î(hj
��hj��ubah}î(h]îh]îh]îh]îh ]îuh&h?h'h(h)Khj��ubah}î(h]îh]îh]îh]îh ]îuh&hbhh”hhh'h(h)Nubeh}î(h]îh]îh]îh]îh ]îåenumtypeîåarabicîåprefixîhåsuffixîå.îuh&h—hh≤hhh'h(h)Kubeh}î(h]îåindexed-documents-and-fieldsîah]îh]îåindexed documents and fieldsîah]îh ]îuh&h*hh,hhh'h(h)Kubh+)Åî}î(hhh]î(h0)Åî}î(håDefault indexed fieldsîh]îhåDefault indexed fieldsîÖîÅî}î(hj4��hj2��hhh'Nh)Nubah}î(h]îh]îh]îh]îh ]îuh&h/hj/��hhh'h(h)Kubh@)Åî}î(håSFor a complete listing of the indexed fields, please see the DataONE documentation.îh]îhåSFor a complete listing of the indexed fields, please see the DataONE documentation.îÖîÅî}î(hjB��hj@��hhh'Nh)Nubah}î(h]îh]îh]îh]îh ]îuh&h?h'h(h)K hj/��hhubh@)Åî}î(håLhttp://mule1.dataone.org/ArchitectureDocs-current/design/SearchMetadata.htmlîh]îh�å	referenceîìî)Åî}î(hjP��h]îhåLhttp://mule1.dataone.org/ArchitectureDocs-current/design/SearchMetadata.htmlîÖîÅî}î(hhhjT��ubah}î(h]îh]îh]îh]îh ]îårefuriîjP��uh&jR��hjN��ubah}î(h]îh]îh]îh]îh ]îuh&h?h'h(h)K"hj/��hhubh@)Åî}î(håIMetacat also reports on the currently-indexed fields, simply navigate to:îh]îhåIMetacat also reports on the currently-indexed fields, simply navigate to:îÖîÅî}î(hjj��hjh��hhh'Nh)Nubah}î(h]îh]îh]îh]îh ]îuh&h?h'h(h)K$hj/��hhubh@)Åî}î(håehttp://mule1.dataone.org/ArchitectureDocs-current/apis/MN_APIs.html#MNQuery.getQueryEngineDescriptionîh]îjS��)Åî}î(hjx��h]îhåehttp://mule1.dataone.org/ArchitectureDocs-current/apis/MN_APIs.html#MNQuery.getQueryEngineDescriptionîÖîÅî}î(hhhjz��ubah}î(h]îh]îh]îh]îh ]îårefuriîjx��uh&jR��hjv��ubah}î(h]îh]îh]îh]îh ]îuh&h?h'h(h)K&hj/��hhubh@)Åî}î(håwith "solr" as the engine.îh]îhåwith ‚Äúsolr‚Äù as the engine.îÖîÅî}î(hjê��hjé��hhh'Nh)Nubah}î(h]îh]îh]îh]îh ]îuh&h?h'h(h)K(hj/��hhubeh}î(h]îådefault-indexed-fieldsîah]îh]îådefault indexed fieldsîah]îh ]îuh&h*hh,hhh'h(h)Kubh+)Åî}î(hhh]î(h0)Åî}î(håIndex configurationîh]îhåIndex configurationîÖîÅî}î(hj©��hjß��hhh'Nh)Nubah}î(h]îh]îh]îh]îh ]îuh&h/hj§��hhh'h(h)K+ubh@)Åî}î(hXK��Metacat-index is deployed as a separate web application (metacat-index.war) and should be deployed
as a sibling of the Metacat webapp (metacat.war). Deploying metacat-index.war is only required when SOLR support
is desired (e.g., for MetacatUI) and can safely be omitted if it will not be utilized for any given Metacat deployment.îh]îhXK��Metacat-index is deployed as a separate web application (metacat-index.war) and should be deployed
as a sibling of the Metacat webapp (metacat.war). Deploying metacat-index.war is only required when SOLR support
is desired (e.g., for MetacatUI) and can safely be omitted if it will not be utilized for any given Metacat deployment.îÖîÅî}î(hj∑��hjµ��hhh'Nh)Nubah}î(h]îh]îh]îh]îh ]îuh&h?h'h(h)K,hj§��hhubh@)Åî}î(hXí��During the initial installation/upgrade, an empty index will be initialized in the configured "solr-home" location.
Metacat-index will index all the existing Metacat content when the webapp next initializes.
Note: the configured solr-home directory should not exist before configuring Metacat with indexing for the first time,
otherwise the blank index will not be created for metacat-index to utilize.îh]îhXñ��During the initial installation/upgrade, an empty index will be initialized in the configured ‚Äúsolr-home‚Äù location.
Metacat-index will index all the existing Metacat content when the webapp next initializes.
Note: the configured solr-home directory should not exist before configuring Metacat with indexing for the first time,
otherwise the blank index will not be created for metacat-index to utilize.îÖîÅî}î(hj≈��hj√��hhh'Nh)Nubah}î(h]îh]îh]îh]îh ]îuh&h?h'h(h)K1hj§��hhubh@)Åî}î(håÇAdditional advanced configuration options are available in the metacat.properties file (shared between Metacat and Metacat-index).îh]îhåÇAdditional advanced configuration options are available in the metacat.properties file (shared between Metacat and Metacat-index).îÖîÅî}î(hj”��hj—��hhh'Nh)Nubah}î(h]îh]îh]îh]îh ]îuh&h?h'h(h)K6hj§��hhubeh}î(h]îåindex-configurationîah]îh]îåindex configurationîah]îh ]îuh&h*hh,hhh'h(h)K+ubh+)Åî}î(hhh]î(h0)Åî}î(hå+Adding additional document types and fieldsîh]îhå+Adding additional document types and fieldsîÖîÅî}î(hjÏ��hjÍ��hhh'Nh)Nubah}î(h]îh]îh]îh]îh ]îuh&h/hjÁ��hhh'h(h)K:ubh@)Åî}î(håDTBD: Step-by-step guide for adding new documents and indexed fields.îh]îhåDTBD: Step-by-step guide for adding new documents and indexed fields.îÖîÅî}î(hj˙��hj¯��hhh'Nh)Nubah}î(h]îh]îh]îh]îh ]îuh&h?h'h(h)K;hjÁ��hhubeh}î(h]îå+adding-additional-document-types-and-fieldsîah]îh]îå+adding additional document types and fieldsîah]îh ]îuh&h*hh,hhh'h(h)K:ubh+)Åî}î(hhh]î(h0)Åî}î(håQuerying the indexîh]îhåQuerying the indexîÖîÅî}î(hj��hj��hhh'Nh)Nubah}î(h]îh]îh]îh]îh ]îuh&h/hj��hhh'h(h)K?ubh@)Åî}î(håáThe SOLR index can be queried using standard SOLR syntax and return options.
The DataONE query interface exposes the SOLR query engine.îh]îhåáThe SOLR index can be queried using standard SOLR syntax and return options.
The DataONE query interface exposes the SOLR query engine.îÖîÅî}î(hj!��hj��hhh'Nh)Nubah}î(h]îh]îh]îh]îh ]îuh&h?h'h(h)K@hj��hhubh@)Åî}î(håQhttp://mule1.dataone.org/ArchitectureDocs-current/apis/MN_APIs.html#MNQuery.queryîh]îjS��)Åî}î(hj/��h]îhåQhttp://mule1.dataone.org/ArchitectureDocs-current/apis/MN_APIs.html#MNQuery.queryîÖîÅî}î(hhhj1��ubah}î(h]îh]îh]îh]îh ]îårefuriîj/��uh&jR��hj-��ubah}î(h]îh]îh]îh]îh ]îuh&h?h'h(h)KChj��hhubh@)Åî}î(håQPlease see the SOLR documentation for examples and exhaustive syntax information.îh]îhåQPlease see the SOLR documentation for examples and exhaustive syntax information.îÖîÅî}î(hjG��hjE��hhh'Nh)Nubah}î(h]îh]îh]îh]îh ]îuh&h?h'h(h)KEhj��hhubh@)Åî}î(håhttp://lucene.apache.org/solr/îh]îjS��)Åî}î(hjU��h]îhåhttp://lucene.apache.org/solr/îÖîÅî}î(hhhjW��ubah}î(h]îh]îh]îh]îh ]îårefuriîjU��uh&jR��hjS��ubah}î(h]îh]îh]îh]îh ]îuh&h?h'h(h)KGhj��hhubeh}î(h]îåquerying-the-indexîah]îh]îåquerying the indexîah]îh ]îuh&h*hh,hhh'h(h)K?ubh+)Åî}î(hhh]î(h0)Åî}î(håAccess Policy enforcementîh]îhåAccess Policy enforcementîÖîÅî}î(hjx��hjv��hhh'Nh)Nubah}î(h]îh]îh]îh]îh ]îuh&h/hjs��hhh'h(h)KKubh@)Åî}î(hXâ��Access control is enforced by the index such that only records that are readable by the
user performing the query are returned to the user. Any SOLR query submitted will be
augmented with access control criteria corresponding to if and how the user is currently
authenticated. Both certificate-based (DataONE API) and JSESSIONID-based (Metacat API)
authentication are simultaneously supported.îh]îhXâ��Access control is enforced by the index such that only records that are readable by the
user performing the query are returned to the user. Any SOLR query submitted will be
augmented with access control criteria corresponding to if and how the user is currently
authenticated. Both certificate-based (DataONE API) and JSESSIONID-based (Metacat API)
authentication are simultaneously supported.îÖîÅî}î(hjÜ��hjÑ��hhh'Nh)Nubah}î(h]îh]îh]îh]îh ]îuh&h?h'h(h)KLhjs��hhubeh}î(h]îåaccess-policy-enforcementîah]îh]îåaccess policy enforcementîah]îh ]îuh&h*hh,hhh'h(h)KKubh+)Åî}î(hhh]î(h0)Åî}î(håRegenerating the indexîh]îhåRegenerating the indexîÖîÅî}î(hjü��hjù��hhh'Nh)Nubah}î(h]îh]îh]îh]îh ]îuh&h/hjö��hhh'h(h)KTubh@)Åî}î(håÜWhen the SOLR index has been drastically modified, a complete regeneration of the
index may be necessary. In order to accomplish this:îh]îhåÜWhen the SOLR index has been drastically modified, a complete regeneration of the
index may be necessary. In order to accomplish this:îÖîÅî}î(hj≠��hj´��hhh'Nh)Nubah}î(h]îh]îh]îh]îh ]îuh&h?h'h(h)KUhjö��hhubh“)Åî}î(hhh]î(hc)Åî}î(hå"Login as the Metacat administratorîh]îh@)Åî}î(hjæ��h]îhå"Login as the Metacat administratorîÖîÅî}î(hjæ��hj¿��ubah}î(h]îh]îh]îh]îh ]îuh&h?h'h(h)KXhjº��ubah}î(h]îh]îh]îh]îh ]îuh&hbhjπ��hhh'h(h)Nubhc)Åî}î(håBNavigate to: <host>/<metacat_context>/metacat?action=reindexall


îh]îh@)Åî}î(hå?Navigate to: <host>/<metacat_context>/metacat?action=reindexallîh]îhå?Navigate to: <host>/<metacat_context>/metacat?action=reindexallîÖîÅî}î(hjŸ��hj◊��ubah}î(h]îh]îh]îh]îh ]îuh&h?h'h(h)KYhj”��ubah}î(h]îh]îh]îh]îh ]îuh&hbhjπ��hhh'h(h)Nubeh}î(h]îh]îh]îh]îh ]îj"��j#��j$��hj%��j&��uh&h—hjö��hhh'h(h)KXubeh}î(h]îåregenerating-the-indexîah]îh]îåregenerating the indexîah]îh ]îuh&h*hh,hhh'h(h)KTubh+)Åî}î(hhh]î(h0)Åî}î(håClass design overviewîh]îhåClass design overviewîÖîÅî}î(hj˛��hj¸��hhh'Nh)Nubah}î(h]îh]îh]îh]îh ]îuh&h/hj˘��hhh'h(h)K^ubh�åfigureîìî)Åî}î(hhh]î(h�åimageîìî)Åî}î(håS.. figure:: images/indexing-class-diagram.png

   Figure 1. Class design overview.
îh]îh}î(h]îh]îh]îh]îh ]îåuriîå!images/indexing-class-diagram.pngîå
candidatesî}îh±j��suh&j��hj��h'h(h)Kbubh�åcaptionîìî)Åî}î(hå Figure 1. Class design overview.îh]îhå Figure 1. Class design overview.îÖîÅî}î(hj#��hj!��ubah}î(h]îh]îh]îh]îh ]îuh&j��h'h(h)Kbhj��ubeh}î(h]îåid1îah]îh]îh]îh ]îuh&j
��h)Kbhj˘��hhh'h(ubh�åcommentîìî)Åî}î(hXu��@startuml images/indexing-class-diagram.png

      package "Current cn-index-processor (library)" {

              interface IDocumentSubprocessor {
                      + boolean canProcess(Document doc)
                      + initExpression(XPath xpath)
                      + Map<String, SolrDoc> processDocument(String identifier, Map<String, SolrDoc> docs, Document doc)
              }
              class AbstractDocumentSubprocessor {
                      - List<SolrField> fields
                      + setMatchDocument(String matchDocument)
                      + setFieldList(List<SolrField> fieldList)
              }
              class ResourceMapSubprocessor {
              }
              class ScienceMetadataDocumentSubprocessor {
              }

              interface ISolrField {
                      + initExpression(XPath xpathObject)
                      + List<SolrElementField> getFields(Document doc, String identifier)
              }
              class SolrField {
                      - String name
                      - String xpath
                      - boolean multivalue
              }
              class CommonRootSolrField {
              }
              class RootElement {
              }
              class LeafElement {
              }
              class FullTextSolrField {
              }
              class MergeSolrField {
              }
              class ResolveSolrField {
              }
              class SolrFieldResourceMap {
              }

              class SolrDoc {
                    - List<SolrElementField> fieldList
              }

              class SolrElementField {
                    - String name
                    - String value
              }

      }

      IDocumentSubprocessor <|-- AbstractDocumentSubprocessor
      AbstractDocumentSubprocessor <|-- ResourceMapSubprocessor
      AbstractDocumentSubprocessor <|-- ScienceMetadataDocumentSubprocessor

      ISolrField <|-- SolrField
      SolrField <|-- CommonRootSolrField
      CommonRootSolrField o--"1" RootElement
      RootElement o--"*" LeafElement
      SolrField <|-- FullTextSolrField
      SolrField <|-- MergeSolrField
      SolrField <|-- ResolveSolrField
      SolrField <|-- SolrFieldResourceMap

      AbstractDocumentSubprocessor o--"*" ISolrField

      IDocumentSubprocessor --> SolrDoc

      SolrDoc o--"*" SolrElementField

      package "SOLR (library)" {

      abstract class SolrServer {
          + add(SolrInputDocument doc)
          + deleteByQuery(String id)
          + query(SolrQuery query)
      }
      class EmbeddedSolrServer {
      }
      class HttpSolrServer {
      }

  }

  SolrServer <|-- EmbeddedSolrServer
  SolrServer <|-- HttpSolrServer

      package "Metact-index (webapp)" {

              class ApplicationController {
                  - List<SolrIndex> solrIndex
                  + regenerateIndex()
              }

              class SolrIndex {
                      - List<IDocumentSubprocessor> subprocessors
                      - SolrServer solrServer
                      + insert(String pid, InputStream data)
                      + update(String pid, InputStream data)
                      + remove(String pid)
              }

              class SystemMetadataEventListener {
                      - SolrIndex solrIndex
                      + itemAdded(ItemEvent<SystemMetadata>)
                      + itemRemoved(ItemEvent<SystemMetadata>)
              }

      }

      package "Metacat (webapp)" {

              class MetacatSolrIndex {
                      - SolrServer solrServer
                      + InputStream query(SolrQuery)
              }

              class HazelcastService {
                      - IMap hzIndexQueue
                      - IMap hzSystemMetadata
                      - IMap hzObjectPath
              }

      }

      MetacatSolrIndex o--"1" SolrServer
      HazelcastService .. SystemMetadataEventListener

      ApplicationController o--"*" SolrIndex
      SolrIndex o--"1" SolrServer
      SolrIndex "1"--o SystemMetadataEventListener
      SolrIndex o--"*" IDocumentSubprocessor: Assembled using Spring bean configuration




@endumlîh]îhXu��@startuml images/indexing-class-diagram.png

      package "Current cn-index-processor (library)" {

              interface IDocumentSubprocessor {
                      + boolean canProcess(Document doc)
                      + initExpression(XPath xpath)
                      + Map<String, SolrDoc> processDocument(String identifier, Map<String, SolrDoc> docs, Document doc)
              }
              class AbstractDocumentSubprocessor {
                      - List<SolrField> fields
                      + setMatchDocument(String matchDocument)
                      + setFieldList(List<SolrField> fieldList)
              }
              class ResourceMapSubprocessor {
              }
              class ScienceMetadataDocumentSubprocessor {
              }

              interface ISolrField {
                      + initExpression(XPath xpathObject)
                      + List<SolrElementField> getFields(Document doc, String identifier)
              }
              class SolrField {
                      - String name
                      - String xpath
                      - boolean multivalue
              }
              class CommonRootSolrField {
              }
              class RootElement {
              }
              class LeafElement {
              }
              class FullTextSolrField {
              }
              class MergeSolrField {
              }
              class ResolveSolrField {
              }
              class SolrFieldResourceMap {
              }

              class SolrDoc {
                    - List<SolrElementField> fieldList
              }

              class SolrElementField {
                    - String name
                    - String value
              }

      }

      IDocumentSubprocessor <|-- AbstractDocumentSubprocessor
      AbstractDocumentSubprocessor <|-- ResourceMapSubprocessor
      AbstractDocumentSubprocessor <|-- ScienceMetadataDocumentSubprocessor

      ISolrField <|-- SolrField
      SolrField <|-- CommonRootSolrField
      CommonRootSolrField o--"1" RootElement
      RootElement o--"*" LeafElement
      SolrField <|-- FullTextSolrField
      SolrField <|-- MergeSolrField
      SolrField <|-- ResolveSolrField
      SolrField <|-- SolrFieldResourceMap

      AbstractDocumentSubprocessor o--"*" ISolrField

      IDocumentSubprocessor --> SolrDoc

      SolrDoc o--"*" SolrElementField

      package "SOLR (library)" {

      abstract class SolrServer {
          + add(SolrInputDocument doc)
          + deleteByQuery(String id)
          + query(SolrQuery query)
      }
      class EmbeddedSolrServer {
      }
      class HttpSolrServer {
      }

  }

  SolrServer <|-- EmbeddedSolrServer
  SolrServer <|-- HttpSolrServer

      package "Metact-index (webapp)" {

              class ApplicationController {
                  - List<SolrIndex> solrIndex
                  + regenerateIndex()
              }

              class SolrIndex {
                      - List<IDocumentSubprocessor> subprocessors
                      - SolrServer solrServer
                      + insert(String pid, InputStream data)
                      + update(String pid, InputStream data)
                      + remove(String pid)
              }

              class SystemMetadataEventListener {
                      - SolrIndex solrIndex
                      + itemAdded(ItemEvent<SystemMetadata>)
                      + itemRemoved(ItemEvent<SystemMetadata>)
              }

      }

      package "Metacat (webapp)" {

              class MetacatSolrIndex {
                      - SolrServer solrServer
                      + InputStream query(SolrQuery)
              }

              class HazelcastService {
                      - IMap hzIndexQueue
                      - IMap hzSystemMetadata
                      - IMap hzObjectPath
              }

      }

      MetacatSolrIndex o--"1" SolrServer
      HazelcastService .. SystemMetadataEventListener

      ApplicationController o--"*" SolrIndex
      SolrIndex o--"1" SolrServer
      SolrIndex "1"--o SystemMetadataEventListener
      SolrIndex o--"*" IDocumentSubprocessor: Assembled using Spring bean configuration




@endumlîÖîÅî}î(hhhj8��ubah}î(h]îh]îh]îh]îh ]îh$h%uh&j6��hj˘��hhh'h(h)Kubeh}î(h]îåclass-design-overviewîah]îh]îåclass design overviewîah]îh ]îuh&h*hh,hhh'h(h)K^ubeh}î(h]îåmetacat-indexingîah]îh]îåmetacat indexingîah]îh ]îuh&h*hhhhh'h(h)Kubeh}î(h]îh]îh]îh]îh ]îåsourceîh(uh&håcurrent_sourceîNåcurrent_lineîNåsettingsîådocutils.frontendîåValuesîìî)Åî}î(h/Nå	generatorîNå	datestampîNåsource_linkîNå
source_urlîNå
toc_backlinksîåentryîåfootnote_backlinksîKå
sectnum_xformîKåstrip_commentsîNåstrip_elements_with_classesîNå
strip_classesîNåreport_levelîKå
halt_levelîKåexit_status_levelîKådebugîNåwarning_streamîNå	tracebackîàåinput_encodingîå	utf-8-sigîåinput_encoding_error_handlerîåstrictîåoutput_encodingîåutf-8îåoutput_encoding_error_handlerîjy��åerror_encodingîåUTF-8îåerror_encoding_error_handlerîåbackslashreplaceîå
language_codeîåenîårecord_dependenciesîNåconfigîNå	id_prefixîhåauto_id_prefixîåidîå
dump_settingsîNådump_internalsîNådump_transformsîNådump_pseudo_xmlîNåexpose_internalsîNåstrict_visitorîNå_disable_configîNå_sourceîh(å_destinationîNå
_config_filesî]îåpep_referencesîNåpep_base_urlîå https://www.python.org/dev/peps/îåpep_file_url_templateîåpep-%04dîårfc_referencesîNårfc_base_urlîåhttps://tools.ietf.org/html/îå	tab_widthîKåtrim_footnote_reference_spaceîâåfile_insertion_enabledîàåraw_enabledîKåsyntax_highlightîålongîåsmart_quotesîàåsmartquotes_localesîNåcharacter_level_inline_markupîâådoctitle_xformîâå
docinfo_xformîKåsectsubtitle_xformîâåembed_stylesheetîâåcloak_email_addressesîàåenvîNågettext_compactîàubåreporterîNåindirect_targetsî]îåsubstitution_defsî}îåsubstitution_namesî}îårefnamesî}îårefidsî}îånameidsî}î(jS��jP��j,��j)��j°��jû��j‰��j·��j��j��jp��jm��jó��jî��jˆ��jÛ��jK��jH��uå	nametypesî}î(jS��Nj,��Nj°��Nj‰��Nj��Njp��Njó��Njˆ��NjK��Nuh}î(jP��h,j)��h≤jû��j/��j·��j§��j��jÁ��jm��j��jî��js��jÛ��jö��jH��j˘��j1��j��uå
footnote_refsî}îå
citation_refsî}îå
autofootnotesî]îåautofootnote_refsî]îåsymbol_footnotesî]îåsymbol_footnote_refsî]îå	footnotesî]îå	citationsî]îåautofootnote_startîKåsymbol_footnote_startîK�åid_startîKåparse_messagesî]îåtransform_messagesî]îåtransformerîNå
decorationîNhhub.