Äcdocutils.nodes
document
q)Åq}q(U	nametypesq}q(X���member node tiersqNX���proposal for api refactoringqNuUsubstitution_defsq}q	Uparse_messagesq
]qUcurrent_sourceqNU
decorationq
NUautofootnote_startqKUnameidsq}q(hUmember-node-tiersqhUproposal-for-api-refactoringquUchildrenq]qcdocutils.nodes
section
q)Åq}q(U	rawsourceqU�UparentqhUsourceqXj���/var/lib/jenkins/jobs/API_Documentation_trunk/workspace/api-documentation/source/notes/api_refactoring.txtqUtagnameqUsectionqU
attributesq}q(Udupnamesq ]Uclassesq!]Ubackrefsq"]Uidsq#]q$haUnamesq%]q&hauUlineq'KUdocumentq(hh]q)(cdocutils.nodes
title
q*)Åq+}q,(hX���Proposal for API Refactoringq-hhhhhUtitleq.h}q/(h ]h!]h"]h#]h%]uh'Kh(hh]q0cdocutils.nodes
Text
q1X���Proposal for API Refactoringq2ÖÅq3}q4(hh-hh+ubaubcdocutils.nodes
paragraph
q5)Åq6}q7(hX��The DataONE service APIs currently contain methods that are grouped by the
general category of functionality provided. For example, the CRUD API contains
methods that support create, read, update, and delete operations against the
Member Nodes. Such a grouping is convenient for development activities,
however does not relate well to the overall functionality that must be
expressed by a Member Node to participate at different "tiers" within the
DataONE federation. A particular MN might operate in a read-only manner and so
must express only a small selection of methods pulled from several different
APIs as they are currently defined.q8hhhhhU	paragraphq9h}q:(h ]h!]h"]h#]h%]uh'Kh(hh]q;h1X��The DataONE service APIs currently contain methods that are grouped by the
general category of functionality provided. For example, the CRUD API contains
methods that support create, read, update, and delete operations against the
Member Nodes. Such a grouping is convenient for development activities,
however does not relate well to the overall functionality that must be
expressed by a Member Node to participate at different "tiers" within the
DataONE federation. A particular MN might operate in a read-only manner and so
must express only a small selection of methods pulled from several different
APIs as they are currently defined.q<ÖÅq=}q>(hh8hh6ubaubh5)Åq?}q@(hX+��Further complicating the division of methods between APIs is the need to
support versioning of services. Current versioning operates across the entire
set of APIs and thus requires that a service implements all methods of a
single version. A more granular approach would versioning at the API level, so
that in many cases (where there are no inter-dependencies) it will be possible
to update a set of methods without affecting other methods, and so service
update on a particular node can be more progressive, and so less disruptive to
ongoing operations.qAhhhhhh9h}qB(h ]h!]h"]h#]h%]uh'Kh(hh]qCh1X+��Further complicating the division of methods between APIs is the need to
support versioning of services. Current versioning operates across the entire
set of APIs and thus requires that a service implements all methods of a
single version. A more granular approach would versioning at the API level, so
that in many cases (where there are no inter-dependencies) it will be possible
to update a set of methods without affecting other methods, and so service
update on a particular node can be more progressive, and so less disruptive to
ongoing operations.qDÖÅqE}qF(hhAhh?ubaubh5)ÅqG}qH(hX§��Grouping the methods into API definitions more aligned with the functionality
that should be exposed by different classes or tiers of nodes should also
simplify the overall process of node service updates since the entire group of
methods can be updated rather than working with methods pulled from different
method groups of different versions to define the service that must be
implemented by a particular Member Node.qIhhhhhh9h}qJ(h ]h!]h"]h#]h%]uh'Kh(hh]qKh1X§��Grouping the methods into API definitions more aligned with the functionality
that should be exposed by different classes or tiers of nodes should also
simplify the overall process of node service updates since the entire group of
methods can be updated rather than working with methods pulled from different
method groups of different versions to define the service that must be
implemented by a particular Member Node.qLÖÅqM}qN(hhIhhGubaubh5)ÅqO}qP(hX£���This document outlines a strategy for refactoring the APIs to better align
with the tiers of Member Nodes that are likely to participate in the DataONE
federation.qQhhhhhh9h}qR(h ]h!]h"]h#]h%]uh'Kh(hh]qSh1X£���This document outlines a strategy for refactoring the APIs to better align
with the tiers of Member Nodes that are likely to participate in the DataONE
federation.qTÖÅqU}qV(hhQhhOubaubh)ÅqW}qX(hU�hhhhhhh}qY(h ]h!]h"]h#]qZhah%]q[hauh'K$h(hh]q\(h*)Åq]}q^(hX���Member Node Tiersq_hhWhhhh.h}q`(h ]h!]h"]h#]h%]uh'K$h(hh]qah1X���Member Node TiersqbÖÅqc}qd(hh_hh]ubaubh5)Åqe}qf(hXG���Five tiers of Member Node functionality have currently been identified:qghhWhhhh9h}qh(h ]h!]h"]h#]h%]uh'K&h(hh]qih1XG���Five tiers of Member Node functionality have currently been identified:qjÖÅqk}ql(hhghheubaubcdocutils.nodes
field_list
qm)Åqn}qo(hU�hhWhhhU
field_listqph}qq(h ]h!]h"]h#]h%]uh'K(h(hh]qr(cdocutils.nodes
field
qs)Åqt}qu(hU�hhnhhhUfieldqvh}qw(h ]h!]h"]h#]h%]uh'K(h(hh]qx(cdocutils.nodes
field_name
qy)Åqz}q{(hX���Tier 1q|hhthhhU
field_nameq}h}q~(h ]h!]h"]h#]h%]uh'K�h]qh1X���Tier 1qÄÖÅqÅ}qÇ(hh|hhzubaubcdocutils.nodes
field_body
qÉ)ÅqÑ}qÖ(hX���Public read, no Authn/AuthzqÜh}qá(h ]h!]h"]h#]h%]uhhth]qàh5)Åqâ}qä(hhÜhhÑhhhh9h}qã(h ]h!]h"]h#]h%]uh'K(h]qåh1X���Public read, no Authn/AuthzqçÖÅqé}qè(hhÜhhâubaubahU
field_bodyqêubeubhs)Åqë}qí(hU�hhnhhhhvh}qì(h ]h!]h"]h#]h%]uh'K)h(hh]qî(hy)Åqï}qñ(hX���Tier 2qóhhëhhhh}h}qò(h ]h!]h"]h#]h%]uh'K�h]qôh1X���Tier 2qöÖÅqõ}qú(hhóhhïubaubhÉ)Åqù}qû(hX���Read/Resolve with Authn/Authzqüh}q†(h ]h!]h"]h#]h%]uhhëh]q°h5)Åq¢}q£(hhühhùhhhh9h}q§(h ]h!]h"]h#]h%]uh'K)h]q•h1X���Read/Resolve with Authn/Authzq¶ÖÅqß}q®(hhühh¢ubaubahhêubeubhs)Åq©}q™(hU�hhnhhhhvh}q´(h ]h!]h"]h#]h%]uh'K*h(hh]q¨(hy)Åq≠}qÆ(hX���Tier 3qØhh©hhhh}h}q∞(h ]h!]h"]h#]h%]uh'K�h]q±h1X���Tier 3q≤ÖÅq≥}q¥(hhØhh≠ubaubhÉ)Åqµ}q∂(hXG���Write (create, update, delete), possibly limited support for data typesq∑h}q∏(h ]h!]h"]h#]h%]uhh©h]qπh5)Åq∫}qª(hh∑hhµhhhh9h}qº(h ]h!]h"]h#]h%]uh'K*h]qΩh1XG���Write (create, update, delete), possibly limited support for data typesqæÖÅqø}q¿(hh∑hh∫ubaubahhêubeubhs)Åq¡}q¬(hU�hhnhhhhvh}q√(h ]h!]h"]h#]h%]uh'K+h(hh]qƒ(hy)Åq≈}q∆(hX���Tier 4q«hh¡hhhh}h}q»(h ]h!]h"]h#]h%]uh'K�h]q…h1X���Tier 4q ÖÅqÀ}qÃ(hh«hh≈ubaubhÉ)ÅqÕ}qŒ(hX1���Limited Replication target (specified data types)qœh}q–(h ]h!]h"]h#]h%]uhh¡h]q—h5)Åq“}q”(hhœhhÕhhhh9h}q‘(h ]h!]h"]h#]h%]uh'K+h]q’h1X1���Limited Replication target (specified data types)q÷ÖÅq◊}qÿ(hhœhh“ubaubahhêubeubhs)ÅqŸ}q⁄(hU�hhnhhhhvh}q€(h ]h!]h"]h#]h%]uh'K,h(hh]q‹(hy)Åq›}qfi(hX���Tier 5qflhhŸhhhh}h}q‡(h ]h!]h"]h#]h%]uh'K�h]q·h1X���Tier 5q‚ÖÅq„}q‰(hhflhh›ubaubhÉ)ÅqÂ}qÊ(hX#���Replication target, any data types
h}qÁ(h ]h!]h"]h#]h%]uhhŸh]qËh5)ÅqÈ}qÍ(hX"���Replication target, any data typesqÎhhÂhhhh9h}qÏ(h ]h!]h"]h#]h%]uh'K,h]qÌh1X"���Replication target, any data typesqÓÖÅqÔ}q(hhÎhhÈubaubahhêubeubeubh5)ÅqÒ}qÚ(hXM���The methods that must be supported by each of these are indicated in Table 1.qÛhhWhhhh9h}qÙ(h ]h!]h"]h#]h%]uh'K.h(hh]qıh1XM���The methods that must be supported by each of these are indicated in Table 1.qˆÖÅq˜}q¯(hhÛhhÒubaubcdocutils.nodes
table
q˘)Åq˙}q˚(hU�hhWhNhUtableq¸h}q˝(h ]h!]h"]h#]q˛Uid1qˇah%]uh'Nh(hh]r���(h*)År��}r��(hX���**Table 1.** DataONE service methods supported at different
             tiers of Member Node functionality. (*)Authentication and
             Authorization APIs are under active development and may change
             from the specifications listed here.h}r��(h ]h!]h"]h#]h%]uhh˙h]r��(cdocutils.nodes
strong
r��)År��}r��(hX���**Table 1.**h}r��(h ]h!]h"]h#]h%]uhj��h]r	��h1X���Table 1.r
��ÖÅr��}r��(hU�hj��ubahUstrongr
��ubh1X��� DataONE service methods supported at different
             tiers of Member Node functionality. (*)Authentication and
             Authorization APIs are under active development and may change
             from the specifications listed here.r��ÖÅr��}r��(hXÙ��� DataONE service methods supported at different
             tiers of Member Node functionality. (*)Authentication and
             Authorization APIs are under active development and may change
             from the specifications listed here.hj��ubehh.ubcdocutils.nodes
tgroup
r��)År��}r��(hU�h}r��(h#]h"]h ]h!]h%]UcolsKuhh˙h]r��(cdocutils.nodes
colspec
r��)År��}r��(hU�h}r��(h#]h"]h ]h!]h%]UcolwidthKuhj��h]hUcolspecr��ubj��)År��}r��(hU�h}r��(h#]h"]h ]h!]h%]UcolwidthKuhj��h]hj��ubj��)År��}r��(hU�h}r ��(h#]h"]h ]h!]h%]UcolwidthKuhj��h]hj��ubj��)År!��}r"��(hU�h}r#��(h#]h"]h ]h!]h%]UcolwidthK
uhj��h]hj��ubcdocutils.nodes
thead
r$��)År%��}r&��(hU�h}r'��(h ]h!]h"]h#]h%]uhj��h]r(��cdocutils.nodes
row
r)��)År*��}r+��(hU�h}r,��(h ]h!]h"]h#]h%]uhj%��h]r-��(cdocutils.nodes
entry
r.��)År/��}r0��(hU�h}r1��(h ]h!]h"]h#]h%]uhj*��h]r2��h5)År3��}r4��(hX���Tierr5��hj/��hhhh9h}r6��(h ]h!]h"]h#]h%]uh'K8h]r7��h1X���Tierr8��ÖÅr9��}r:��(hj5��hj3��ubaubahUentryr;��ubj.��)År<��}r=��(hU�h}r>��(h ]h!]h"]h#]h%]uhj*��h]r?��h5)År@��}rA��(hX
���Existing APIsrB��hj<��hhhh9h}rC��(h ]h!]h"]h#]h%]uh'K9h]rD��h1X
���Existing APIsrE��ÖÅrF��}rG��(hjB��hj@��ubaubahj;��ubj.��)ÅrH��}rI��(hU�h}rJ��(h ]h!]h"]h#]h%]uhj*��h]rK��h5)ÅrL��}rM��(hX���Proposed APIrN��hjH��hhhh9h}rO��(h ]h!]h"]h#]h%]uh'K:h]rP��h1X���Proposed APIrQ��ÖÅrR��}rS��(hjN��hjL��ubaubahj;��ubj.��)ÅrT��}rU��(hU�h}rV��(h ]h!]h"]h#]h%]uhj*��h]rW��h5)ÅrX��}rY��(hX���MethodsrZ��hjT��hhhh9h}r[��(h ]h!]h"]h#]h%]uh'K;h]r\��h1X���Methodsr]��ÖÅr^��}r_��(hjZ��hjX��ubaubahj;��ubehUrowr`��ubahUtheadra��ubcdocutils.nodes
tbody
rb��)Årc��}rd��(hU�h}re��(h ]h!]h"]h#]h%]uhj��h]rf��(j)��)Årg��}rh��(hU�h}ri��(h ]h!]h"]h#]h%]uhjc��h]rj��(j.��)Årk��}rl��(hU�h}rm��(h ]h!]h"]h#]h%]uhjg��h]rn��h5)Åro��}rp��(hX���Corerq��hjk��hhhh9h}rr��(h ]h!]h"]h#]h%]uh'K<h]rs��h1X���Corert��ÖÅru��}rv��(hjq��hjo��ubaubahj;��ubj.��)Årw��}rx��(hU�h}ry��(h ]h!]h"]h#]h%]uhjg��h]rz��h5)År{��}r|��(hX���MN_health, MN_crudr}��hjw��hhhh9h}r~��(h ]h!]h"]h#]h%]uh'K=h]r��h1X���MN_health, MN_crudrÄ��ÖÅrÅ��}rÇ��(hj}��hj{��ubaubahj;��ubj.��)ÅrÉ��}rÑ��(hU�h}rÖ��(h ]h!]h"]h#]h%]uhjg��h]rÜ��h5)Årá��}rà��(hX���MN_corerâ��hjÉ��hhhh9h}rä��(h ]h!]h"]h#]h%]uh'K>h]rã��h1X���MN_corerå��ÖÅrç��}ré��(hjâ��hjá��ubaubahj;��ubj.��)Årè��}rê��(hU�h}rë��(h ]h!]h"]h#]h%]uhjg��h]rí��h5)Årì��}rî��(hXb���ping, getCapabilities, getStatus, [getObjectStatistics],
[getOperationStatistics], [getLogRecords]rï��hjè��hhhh9h}rñ��(h ]h!]h"]h#]h%]uh'K?h]ró��h1Xb���ping, getCapabilities, getStatus, [getObjectStatistics],
[getOperationStatistics], [getLogRecords]rò��ÖÅrô��}rö��(hjï��hjì��ubaubahj;��ubehj`��ubj)��)Årõ��}rú��(hU�h}rù��(h ]h!]h"]h#]h%]uhjc��h]rû��(j.��)Årü��}r†��(hU�h}r°��(h ]h!]h"]h#]h%]uhjõ��h]r¢��h5)År£��}r§��(hX���Tier 1r•��hjü��hhhh9h}r¶��(h ]h!]h"]h#]h%]uh'KAh]rß��h1X���Tier 1r®��ÖÅr©��}r™��(hj•��hj£��ubaubahj;��ubj.��)År´��}r¨��(hU�h}r≠��(h ]h!]h"]h#]h%]uhjõ��h]rÆ��h5)ÅrØ��}r∞��(hX"���MN_crud, MN_replication, MN_healthr±��hj´��hhhh9h}r≤��(h ]h!]h"]h#]h%]uh'KBh]r≥��h1X"���MN_crud, MN_replication, MN_healthr¥��ÖÅrµ��}r∂��(hj±��hjØ��ubaubahj;��ubj.��)År∑��}r∏��(hU�h}rπ��(h ]h!]h"]h#]h%]uhjõ��h]r∫��h5)Årª��}rº��(hX���MN_readrΩ��hj∑��hhhh9h}ræ��(h ]h!]h"]h#]h%]uh'KCh]rø��h1X���MN_readr¿��ÖÅr¡��}r¬��(hjΩ��hjª��ubaubahj;��ubj.��)År√��}rƒ��(hU�h}r≈��(h ]h!]h"]h#]h%]uhjõ��h]r∆��h5)År«��}r»��(hXQ���get, getSystemMetadata, listObjects, describe, getChecksum,
synchronizationFailedr…��hj√��hhhh9h}r ��(h ]h!]h"]h#]h%]uh'KDh]rÀ��h1XQ���get, getSystemMetadata, listObjects, describe, getChecksum,
synchronizationFailedrÃ��ÖÅrÕ��}rŒ��(hj…��hj«��ubaubahj;��ubehj`��ubj)��)Årœ��}r–��(hU�h}r—��(h ]h!]h"]h#]h%]uhjc��h]r“��(j.��)År”��}r‘��(hU�h}r’��(h ]h!]h"]h#]h%]uhjœ��h]r÷��h5)År◊��}rÿ��(hX���Tier 2rŸ��hj”��hhhh9h}r⁄��(h ]h!]h"]h#]h%]uh'KFh]r€��h1X���Tier 2r‹��ÖÅr›��}rfi��(hjŸ��hj◊��ubaubahj;��ubj.��)Årfl��}r‡��(hU�h}r·��(h ]h!]h"]h#]h%]uhjœ��h]r‚��h5)År„��}r‰��(hX#���MN_authorization, MN_authenticationrÂ��hjfl��hhhh9h}rÊ��(h ]h!]h"]h#]h%]uh'KGh]rÁ��h1X#���MN_authorization, MN_authenticationrË��ÖÅrÈ��}rÍ��(hjÂ��hj„��ubaubahj;��ubj.��)ÅrÎ��}rÏ��(hU�h}rÌ��(h ]h!]h"]h#]h%]uhjœ��h]rÓ��h5)ÅrÔ��}r��(hX���MN_authrÒ��hjÎ��hhhh9h}rÚ��(h ]h!]h"]h#]h%]uh'KHh]rÛ��h1X���MN_authrÙ��ÖÅrı��}rˆ��(hjÒ��hjÔ��ubaubahj;��ubj.��)År˜��}r¯��(hU�h}r˘��(h ]h!]h"]h#]h%]uhjœ��h]r˙��h5)År˚��}r¸��(hX;���MNCore + login(*), logout(*), isAuthorized(*), setAccess(*)r˝��hj˜��hhhh9h}r˛��(h ]h!]h"]h#]h%]uh'KIh]rˇ��h1X;���MNCore + login(*), logout(*), isAuthorized(*), setAccess(*)r���ÖÅr��}r��(hX;���MNCore + login(*), logout(*), isAuthorized(*), setAccess(*)hj˚��ubaubahj;��ubehj`��ubj)��)År��}r��(hU�h}r��(h ]h!]h"]h#]h%]uhjc��h]r��(j.��)År��}r��(hU�h}r	��(h ]h!]h"]h#]h%]uhj��h]r
��h5)År��}r��(hX���Tier 3r
��hj��hhhh9h}r��(h ]h!]h"]h#]h%]uh'KJh]r��h1X���Tier 3r��ÖÅr��}r��(hj
��hj��ubaubahj;��ubj.��)År��}r��(hU�h}r��(h ]h!]h"]h#]h%]uhj��h]r��h5)År��}r��(hX���MN_crudr��hj��hhhh9h}r��(h ]h!]h"]h#]h%]uh'KKh]r��h1X���MN_crudr��ÖÅr��}r��(hj��hj��ubaubahj;��ubj.��)År��}r ��(hU�h}r!��(h ]h!]h"]h#]h%]uhj��h]r"��h5)År#��}r$��(hX
���MN_storager%��hj��hhhh9h}r&��(h ]h!]h"]h#]h%]uh'KLh]r'��h1X
���MN_storager(��ÖÅr)��}r*��(hj%��hj#��ubaubahj;��ubj.��)År+��}r,��(hU�h}r-��(h ]h!]h"]h#]h%]uhj��h]r.��h5)År/��}r0��(hX ���MNAuth + create, update, delete,r1��hj+��hhhh9h}r2��(h ]h!]h"]h#]h%]uh'KMh]r3��h1X ���MNAuth + create, update, delete,r4��ÖÅr5��}r6��(hj1��hj/��ubaubahj;��ubehj`��ubj)��)År7��}r8��(hU�h}r9��(h ]h!]h"]h#]h%]uhjc��h]r:��(j.��)År;��}r<��(hU�h}r=��(h ]h!]h"]h#]h%]uhj7��h]r>��h5)År?��}r@��(hX���Tier 4rA��hj;��hhhh9h}rB��(h ]h!]h"]h#]h%]uh'KNh]rC��h1X���Tier 4rD��ÖÅrE��}rF��(hjA��hj?��ubaubahj;��ubj.��)ÅrG��}rH��(hU�h}rI��(h ]h!]h"]h#]h%]uhj7��h]rJ��h5)ÅrK��}rL��(hX���MN_replicationrM��hjG��hhhh9h}rN��(h ]h!]h"]h#]h%]uh'KOh]rO��h1X���MN_replicationrP��ÖÅrQ��}rR��(hjM��hjK��ubaubahj;��ubj.��)ÅrS��}rT��(hU�h}rU��(h ]h!]h"]h#]h%]uhj7��h]rV��h5)ÅrW��}rX��(hX���MN_replicationrY��hjS��hhhh9h}rZ��(h ]h!]h"]h#]h%]uh'KPh]r[��h1X���MN_replicationr\��ÖÅr]��}r^��(hjY��hjW��ubaubahj;��ubj.��)År_��}r`��(hU�h}ra��(h ]h!]h"]h#]h%]uhj7��h]rb��h5)Årc��}rd��(hX���MNStorage + replicatere��hj_��hhhh9h}rf��(h ]h!]h"]h#]h%]uh'KQh]rg��h1X���MNStorage + replicaterh��ÖÅri��}rj��(hje��hjc��ubaubahj;��ubehj`��ubj)��)Årk��}rl��(hU�h}rm��(h ]h!]h"]h#]h%]uhjc��h]rn��(j.��)Åro��}rp��(hU�h}rq��(h ]h!]h"]h#]h%]uhjk��h]rr��h5)Års��}rt��(hX���Tier 5ru��hjo��hhhh9h}rv��(h ]h!]h"]h#]h%]uh'KRh]rw��h1X���Tier 5rx��ÖÅry��}rz��(hju��hjs��ubaubahj;��ubj.��)År{��}r|��(hU�h}r}��(h ]h!]h"]h#]h%]uhjk��h]hj;��ubj.��)År~��}r��(hU�h}rÄ��(h ]h!]h"]h#]h%]uhjk��h]hj;��ubj.��)ÅrÅ��}rÇ��(hU�h}rÉ��(h ]h!]h"]h#]h%]uhjk��h]rÑ��h5)ÅrÖ��}rÜ��(hX)���MNReplicationCore (no additional methods)rá��hjÅ��hhhh9h}rà��(h ]h!]h"]h#]h%]uh'KUh]râ��h1X)���MNReplicationCore (no additional methods)rä��ÖÅrã��}rå��(hjá��hjÖ��ubaubahj;��ubehj`��ubehUtbodyrç��ubehUtgroupré��ubeubeubeubahU�Utransformerrè��NU
footnote_refsrê��}rë��Urefnamesrí��}rì��Usymbol_footnotesrî��]rï��Uautofootnote_refsrñ��]ró��Usymbol_footnote_refsrò��]rô��U	citationsrö��]rõ��h(hUcurrent_linerú��NUtransform_messagesrù��]rû��Ureporterrü��NUid_startr†��KU
autofootnotesr°��]r¢��U
citation_refsr£��}r§��Uindirect_targetsr•��]r¶��Usettingsrß��(cdocutils.frontend
Values
r®��or©��}r™��(Ufootnote_backlinksr´��KUrecord_dependenciesr¨��NUrfc_base_urlr≠��Uhttps://tools.ietf.org/html/rÆ��U	tracebackrØ��àUpep_referencesr∞��NUstrip_commentsr±��NU
toc_backlinksr≤��j;��U
language_coder≥��Uenr¥��U	datestamprµ��NUreport_levelr∂��KU_destinationr∑��NU
halt_levelr∏��KU
strip_classesrπ��Nh.NUerror_encoding_error_handlerr∫��Ubackslashreplacerª��Udebugrº��NUembed_stylesheetrΩ��âUoutput_encoding_error_handlerræ��Ustrictrø��U
sectnum_xformr¿��KUdump_transformsr¡��NU
docinfo_xformr¬��KUwarning_streamr√��NUpep_file_url_templaterƒ��Upep-%04dr≈��Uexit_status_levelr∆��KUconfigr«��NUstrict_visitorr»��NUcloak_email_addressesr…��àUtrim_footnote_reference_spacer ��âUenvrÀ��NUdump_pseudo_xmlrÃ��NUexpose_internalsrÕ��NUsectsubtitle_xformrŒ��âUsource_linkrœ��NUrfc_referencesr–��NUoutput_encodingr—��Uutf-8r“��U
source_urlr”��NUinput_encodingr‘��U	utf-8-sigr’��U_disable_configr÷��NU	id_prefixr◊��U�U	tab_widthrÿ��KUerror_encodingrŸ��UUTF-8r⁄��U_sourcer€��hUgettext_compactr‹��àU	generatorr›��NUdump_internalsrfi��NUsmart_quotesrfl��âUpep_base_urlr‡��U https://www.python.org/dev/peps/r·��Usyntax_highlightr‚��Ulongr„��Uinput_encoding_error_handlerr‰��jø��Uauto_id_prefixrÂ��UidrÊ��Udoctitle_xformrÁ��âUstrip_elements_with_classesrË��NU
_config_filesrÈ��]Ufile_insertion_enabledrÍ��àUraw_enabledrÎ��KU
dump_settingsrÏ��NubUsymbol_footnote_startrÌ��K�UidsrÓ��}rÔ��(hhhhWhˇh˙uUsubstitution_namesr��}rÒ��hh(h}rÚ��(h ]h#]h"]Usourcehh!]h%]uU	footnotesrÛ��]rÙ��Urefidsrı��}rˆ��ub.