€cdocutils.nodes
document
q)q}q(U	nametypesq}q(X   requirementsqNX   introductionqNX   setupqNX   options explainedq	NX%   migrating containers (across regions)q
NX   optionsqNuUsubstitution_defsq}qUparse_messagesq]qUcurrent_sourceqNU
decorationqNUautofootnote_startqKUnameidsq}q(hUrequirementsqhUintroductionqhUsetupqh	Uoptions-explainedqh
U#migrating-containers-across-regionsqhUoptionsquUchildrenq]qcdocutils.nodes
section
q)q}q(U	rawsourceq U Uparentq!hUsourceq"XZ   /Users/jamie/projects/php/php-opencloud/doc/services/object-store/Migrating.md.storage.rstq#Utagnameq$Usectionq%U
attributesq&}q'(Udupnamesq(]Uclassesq)]Ubackrefsq*]Uidsq+]q,haUnamesq-]q.h
auUlineq/KUdocumentq0hh]q1(cdocutils.nodes
title
q2)q3}q4(h X%   Migrating containers (across regions)q5h!hh"h#h$Utitleq6h&}q7(h(]h)]h*]h+]h-]uh/Kh0hh]q8cdocutils.nodes
Text
q9X%   Migrating containers (across regions)q:…q;}q<(h h5h!h3ubaubh)q=}q>(h U h!hh"h#h$h%h&}q?(h(]h)]h*]h+]q@hah-]qAhauh/Kh0hh]qB(h2)qC}qD(h X   IntroductionqEh!h=h"h#h$h6h&}qF(h(]h)]h*]h+]h-]uh/Kh0hh]qGh9X   IntroductionqH…qI}qJ(h hEh!hCubaubcdocutils.nodes
paragraph
qK)qL}qM(h X   Currently, there exists no single API operation to copy containers
across geographic endpoints. Although the API offers a ``COPY``
operation for individual files, this does not work for cross-region
copying. The SDK, however, does offer this functionality.h!h=h"h#h$U	paragraphqNh&}qO(h(]h)]h*]h+]h-]uh/Kh0hh]qP(h9Xz   Currently, there exists no single API operation to copy containers
across geographic endpoints. Although the API offers a qQ…qR}qS(h Xz   Currently, there exists no single API operation to copy containers
across geographic endpoints. Although the API offers a h!hLubcdocutils.nodes
literal
qT)qU}qV(h X   ``COPY``h&}qW(h(]h)]h*]h+]h-]uh!hLh]qXh9X   COPYqY…qZ}q[(h U h!hUubah$Uliteralq\ubh9X~   
operation for individual files, this does not work for cross-region
copying. The SDK, however, does offer this functionality.q]…q^}q_(h X~   
operation for individual files, this does not work for cross-region
copying. The SDK, however, does offer this functionality.h!hLubeubhK)q`}qa(h Xz   You **will** be charged for bandwidth between regions, so it's advisable
to use ServiceNet where possible (which is free).h!h=h"h#h$hNh&}qb(h(]h)]h*]h+]h-]uh/Kh0hh]qc(h9X   You qd…qe}qf(h X   You h!h`ubcdocutils.nodes
strong
qg)qh}qi(h X   **will**h&}qj(h(]h)]h*]h+]h-]uh!h`h]qkh9X   willql…qm}qn(h U h!hhubah$Ustrongqoubh9Xn    be charged for bandwidth between regions, so it's advisable
to use ServiceNet where possible (which is free).qp…qq}qr(h Xn    be charged for bandwidth between regions, so it's advisable
to use ServiceNet where possible (which is free).h!h`ubeubeubh)qs}qt(h U h!hh"h#h$h%h&}qu(h(]h)]h*]h+]qvhah-]qwhauh/Kh0hh]qx(h2)qy}qz(h X   Requirementsq{h!hsh"h#h$h6h&}q|(h(]h)]h*]h+]h-]uh/Kh0hh]q}h9X   Requirementsq~…q}q€(h h{h!hyubaubcdocutils.nodes
bullet_list
q)q‚}qƒ(h U h!hsh"h#h$Ubullet_listq„h&}q…(Ubulletq†X   -h+]h*]h(]h)]h-]uh/Kh0hh]q‡cdocutils.nodes
list_item
qˆ)q‰}qŠ(h XÔ   You must install the full Guzzle package, so that the process can
take advantage of Guzzle's batching functionality (it allows parallel
requests to be batched for greater efficiency). You can do this by
running:
h!h‚h"h#h$U	list_itemq‹h&}qŒ(h(]h)]h*]h+]h-]uh/Nh0hh]qhK)qŽ}q(h XÓ   You must install the full Guzzle package, so that the process can
take advantage of Guzzle's batching functionality (it allows parallel
requests to be batched for greater efficiency). You can do this by
running:qh!h‰h"h#h$hNh&}q‘(h(]h)]h*]h+]h-]uh/Kh]q’h9XÓ   You must install the full Guzzle package, so that the process can
take advantage of Guzzle's batching functionality (it allows parallel
requests to be batched for greater efficiency). You can do this by
running:q“…q”}q•(h hh!hŽubaubaubaubcdocutils.nodes
literal_block
q–)q—}q˜(h X   php composer.phar install --devh!hsh"h#h$Uliteral_blockq™h&}qš(U	xml:spaceq›Upreserveqœh+]h*]h(]h)]q(UcodeqžX   bashqŸeh-]uh/Kh0hh]q h9X   php composer.phar install --devq¡…q¢}q£(h X   php composer.phar install --devh!h—ubaubh)q¤}q¥(h U h!hsh"h#h$h„h&}q¦(h†X   -h+]h*]h(]h)]h-]uh/Kh0hh]q§hˆ)q¨}q©(h X_   Depending on the size and number of transfer items, you will need to
raise PHP's memory limit:
h!h¤h"h#h$h‹h&}qª(h(]h)]h*]h+]h-]uh/Nh0hh]q«hK)q¬}q­(h X^   Depending on the size and number of transfer items, you will need to
raise PHP's memory limit:q®h!h¨h"h#h$hNh&}q¯(h(]h)]h*]h+]h-]uh/Kh]q°h9X^   Depending on the size and number of transfer items, you will need to
raise PHP's memory limit:q±…q²}q³(h h®h!h¬ubaubaubaubh–)q´}qµ(h X    ini_set('memory_limit', '512M');h!hsh"h#h$h™h&}q¶(h›hœh+]h*]h(]h)]q·(hžX   phpq¸eh-]uh/K!h0hh]q¹cdocutils.nodes
inline
qº)q»}q¼(h X    ini_set('memory_limit', '512M');h&}q½(h(]h)]q¾Uotherq¿ah*]h+]h-]uh!h´h]qÀh9X    ini_set('memory_limit', '512M');qÁ…qÂ}qÃ(h U h!h»ubah$UinlineqÄubaubh)qÅ}qÆ(h U h!hsh"h#h$h„h&}qÇ(h†X   -h+]h*]h(]h)]h-]uh/K"h0hh]qÈhˆ)qÉ}qÊ(h X§   You will need to enact some kind of backoff/retry strategy for rate
limits. Guzzle comes with a convenient feature that just needs to be
added as a normal subscriber:
h!hÅh"h#h$h‹h&}qË(h(]h)]h*]h+]h-]uh/Nh0hh]qÌhK)qÍ}qÎ(h X¦   You will need to enact some kind of backoff/retry strategy for rate
limits. Guzzle comes with a convenient feature that just needs to be
added as a normal subscriber:qÏh!hÉh"h#h$hNh&}qÐ(h(]h)]h*]h+]h-]uh/K"h]qÑh9X¦   You will need to enact some kind of backoff/retry strategy for rate
limits. Guzzle comes with a convenient feature that just needs to be
added as a normal subscriber:qÒ…qÓ}qÔ(h hÏh!hÍubaubaubaubh–)qÕ}qÖ(h X   use Guzzle\Plugin\Backoff\BackoffPlugin;

$client->addSubscriber(BackoffPlugin::getExponentialBackoff(10, array(500, 503, 408)));h!hsh"h#h$h™h&}q×(h›hœh+]h*]h(]h)]qØ(hžX   phpqÙeh-]uh/K+h0hh]qÚhº)qÛ}qÜ(h X   use Guzzle\Plugin\Backoff\BackoffPlugin;

$client->addSubscriber(BackoffPlugin::getExponentialBackoff(10, array(500, 503, 408)));h&}qÝ(h(]h)]qÞUotherqßah*]h+]h-]uh!hÕh]qàh9X   use Guzzle\Plugin\Backoff\BackoffPlugin;

$client->addSubscriber(BackoffPlugin::getExponentialBackoff(10, array(500, 503, 408)));qá…qâ}qã(h U h!hÛubah$hÄubaubhK)qä}qå(h XŒ   This tells the client to retry up to ``10`` times for failed requests
have resulted in these HTTP status codes: ``500``, ``503`` or ``408``.h!hsh"h#h$hNh&}qæ(h(]h)]h*]h+]h-]uh/K,h0hh]qç(h9X%   This tells the client to retry up to qè…qé}qê(h X%   This tells the client to retry up to h!häubhT)që}qì(h X   ``10``h&}qí(h(]h)]h*]h+]h-]uh!häh]qîh9X   10qï…qð}qñ(h U h!hëubah$h\ubh9XE    times for failed requests
have resulted in these HTTP status codes: qò…qó}qô(h XE    times for failed requests
have resulted in these HTTP status codes: h!häubhT)qõ}qö(h X   ``500``h&}q÷(h(]h)]h*]h+]h-]uh!häh]qøh9X   500qù…qú}qû(h U h!hõubah$h\ubh9X   , qü…qý}qþ(h X   , h!häubhT)qÿ}r   (h X   ``503``h&}r  (h(]h)]h*]h+]h-]uh!häh]r  h9X   503r  …r  }r  (h U h!hÿubah$h\ubh9X    or r  …r  }r  (h X    or h!häubhT)r	  }r
  (h X   ``408``h&}r  (h(]h)]h*]h+]h-]uh!häh]r  h9X   408r  …r  }r  (h U h!j	  ubah$h\ubh9X   .…r  }r  (h X   .h!häubeubeubh)r  }r  (h U h!hh"h#h$h%h&}r  (h(]h)]h*]h+]r  hah-]r  hauh/K0h0hh]r  (h2)r  }r  (h X   Setupr  h!j  h"h#h$h6h&}r  (h(]h)]h*]h+]h-]uh/K0h0hh]r  h9X   Setupr  …r  }r  (h j  h!j  ubaubhK)r   }r!  (h X3   You can access all this functionality by executing:r"  h!j  h"h#h$hNh&}r#  (h(]h)]h*]h+]h-]uh/K2h0hh]r$  h9X3   You can access all this functionality by executing:r%  …r&  }r'  (h j"  h!j   ubaubh–)r(  }r)  (h X6  $ordService = $client->objectStoreService('cloudFiles', 'ORD');
$iadService = $client->objectStoreService('cloudFiles', 'IAD');

$oldContainer = $ordService->getContainer('old_container');
$newContainer = $iadService->getContainer('new_container');

$iadService->migrateContainer($oldContainer, $newContainer);h!j  h"h#h$h™h&}r*  (h›hœh+]h*]h(]h)]r+  (hžX   phpr,  eh-]uh/K=h0hh]r-  hº)r.  }r/  (h X6  $ordService = $client->objectStoreService('cloudFiles', 'ORD');
$iadService = $client->objectStoreService('cloudFiles', 'IAD');

$oldContainer = $ordService->getContainer('old_container');
$newContainer = $iadService->getContainer('new_container');

$iadService->migrateContainer($oldContainer, $newContainer);h&}r0  (h(]h)]r1  Uotherr2  ah*]h+]h-]uh!j(  h]r3  h9X6  $ordService = $client->objectStoreService('cloudFiles', 'ORD');
$iadService = $client->objectStoreService('cloudFiles', 'IAD');

$oldContainer = $ordService->getContainer('old_container');
$newContainer = $iadService->getContainer('new_container');

$iadService->migrateContainer($oldContainer, $newContainer);r4  …r5  }r6  (h U h!j.  ubah$hÄubaubhK)r7  }r8  (h XÔ   It's advisable to do this process in a Cloud Server in one of the two
regions you're migrating to/from. This allows you to use ``privateURL``
as the third argument in the ``objectStoreService`` methods like this:h!j  h"h#h$hNh&}r9  (h(]h)]h*]h+]h-]uh/K>h0hh]r:  (h9X   It's advisable to do this process in a Cloud Server in one of the two
regions you're migrating to/from. This allows you to use r;  …r<  }r=  (h X   It's advisable to do this process in a Cloud Server in one of the two
regions you're migrating to/from. This allows you to use h!j7  ubhT)r>  }r?  (h X   ``privateURL``h&}r@  (h(]h)]h*]h+]h-]uh!j7  h]rA  h9X
   privateURLrB  …rC  }rD  (h U h!j>  ubah$h\ubh9X   
as the third argument in the rE  …rF  }rG  (h X   
as the third argument in the h!j7  ubhT)rH  }rI  (h X   ``objectStoreService``h&}rJ  (h(]h)]h*]h+]h-]uh!j7  h]rK  h9X   objectStoreServicerL  …rM  }rN  (h U h!jH  ubah$h\ubh9X    methods like this:rO  …rP  }rQ  (h X    methods like this:h!j7  ubeubh–)rR  }rS  (h X?   $client->objectStoreService('cloudFiles', 'IAD', 'privateURL');h!j  h"h#h$h™h&}rT  (h›hœh+]h*]h(]h)]rU  (hžX   phprV  eh-]uh/KEh0hh]rW  hº)rX  }rY  (h X?   $client->objectStoreService('cloudFiles', 'IAD', 'privateURL');h&}rZ  (h(]h)]r[  Uotherr\  ah*]h+]h-]uh!jR  h]r]  h9X?   $client->objectStoreService('cloudFiles', 'IAD', 'privateURL');r^  …r_  }r`  (h U h!jX  ubah$hÄubaubhK)ra  }rb  (h XŒ   This will ensure that traffic between your server and your new IAD
container will be held over the internal Rackspace network which is
free.rc  h!j  h"h#h$hNh&}rd  (h(]h)]h*]h+]h-]uh/KFh0hh]re  h9XŒ   This will ensure that traffic between your server and your new IAD
container will be held over the internal Rackspace network which is
free.rf  …rg  }rh  (h jc  h!ja  ubaubeubh)ri  }rj  (h U h!hh"h#h$h%h&}rk  (h(]h)]h*]h+]rl  hah-]rm  hauh/KKh0hh]rn  (h2)ro  }rp  (h X   Optionsrq  h!ji  h"h#h$h6h&}rr  (h(]h)]h*]h+]h-]uh/KKh0hh]rs  h9X   Optionsrt  …ru  }rv  (h jq  h!jo  ubaubhK)rw  }rx  (h X4   You can pass in an array of arguments to the method:ry  h!ji  h"h#h$hNh&}rz  (h(]h)]h*]h+]h-]uh/KMh0hh]r{  h9X4   You can pass in an array of arguments to the method:r|  …r}  }r~  (h jy  h!jw  ubaubh–)r  }r€  (h X·   $options = array(
    'read.batchLimit'  => 100,
    'read.pageLimit'   => 100,
    'write.batchLimit' => 50
);

$iadService->migrateContainer($oldContainer, $newContainer, $options);h!ji  h"h#h$h™h&}r  (h›hœh+]h*]h(]h)]r‚  (hžX   phprƒ  eh-]uh/KXh0hh]r„  hº)r…  }r†  (h X·   $options = array(
    'read.batchLimit'  => 100,
    'read.pageLimit'   => 100,
    'write.batchLimit' => 50
);

$iadService->migrateContainer($oldContainer, $newContainer, $options);h&}r‡  (h(]h)]rˆ  Uotherr‰  ah*]h+]h-]uh!j  h]rŠ  h9X·   $options = array(
    'read.batchLimit'  => 100,
    'read.pageLimit'   => 100,
    'write.batchLimit' => 50
);

$iadService->migrateContainer($oldContainer, $newContainer, $options);r‹  …rŒ  }r  (h U h!j…  ubah$hÄubaubh)rŽ  }r  (h U h!ji  h"h#h$h%h&}r  (h(]h)]h*]h+]r‘  hah-]r’  h	auh/KZh0hh]r“  (h2)r”  }r•  (h X   Options explainedr–  h!jŽ  h"h#h$h6h&}r—  (h(]h)]h*]h+]h-]uh/KZh0hh]r˜  h9X   Options explainedr™  …rš  }r›  (h j–  h!j”  ubaubcdocutils.nodes
table
rœ  )r  }rž  (h U h!jŽ  h"h#h$UtablerŸ  h&}r   (h(]h)]h*]h+]h-]uh/Nh0hh]r¡  cdocutils.nodes
tgroup
r¢  )r£  }r¤  (h U h&}r¥  (h+]h*]h(]h)]h-]UcolsKuh!j  h]r¦  (cdocutils.nodes
colspec
r§  )r¨  }r©  (h U h&}rª  (h+]h*]h(]h)]h-]UcolwidthKuh!j£  h]h$Ucolspecr«  ubj§  )r¬  }r­  (h U h&}r®  (h+]h*]h(]h)]h-]UcolwidthMOuh!j£  h]h$j«  ubj§  )r¯  }r°  (h U h&}r±  (h+]h*]h(]h)]h-]UcolwidthKuh!j£  h]h$j«  ubcdocutils.nodes
thead
r²  )r³  }r´  (h U h&}rµ  (h(]h)]h*]h+]h-]uh!j£  h]r¶  cdocutils.nodes
row
r·  )r¸  }r¹  (h U h&}rº  (h(]h)]h*]h+]h-]uh!j³  h]r»  (cdocutils.nodes
entry
r¼  )r½  }r¾  (h U h&}r¿  (h(]h)]h*]h+]h-]uh!j¸  h]rÀ  hK)rÁ  }rÂ  (h X   NamerÃ  h!j½  h"h#h$hNh&}rÄ  (h(]h)]h*]h+]h-]uh/K]h]rÅ  h9X   NamerÆ  …rÇ  }rÈ  (h jÃ  h!jÁ  ubaubah$UentryrÉ  ubj¼  )rÊ  }rË  (h U h&}rÌ  (h(]h)]h*]h+]h-]uh!j¸  h]rÍ  hK)rÎ  }rÏ  (h X   DescriptionrÐ  h!jÊ  h"h#h$hNh&}rÑ  (h(]h)]h*]h+]h-]uh/K]h]rÒ  h9X   DescriptionrÓ  …rÔ  }rÕ  (h jÐ  h!jÎ  ubaubah$jÉ  ubj¼  )rÖ  }r×  (h U h&}rØ  (h(]h)]h*]h+]h-]uh!j¸  h]rÙ  hK)rÚ  }rÛ  (h X   DefaultrÜ  h!jÖ  h"h#h$hNh&}rÝ  (h(]h)]h*]h+]h-]uh/K]h]rÞ  h9X   Defaultrß  …rà  }rá  (h jÜ  h!jÚ  ubaubah$jÉ  ubeh$Urowrâ  ubah$Utheadrã  ubcdocutils.nodes
tbody
rä  )rå  }ræ  (h U h&}rç  (h(]h)]h*]h+]h-]uh!j£  h]rè  (j·  )ré  }rê  (h U h&}rë  (h(]h)]h*]h+]h-]uh!jå  h]rì  (j¼  )rí  }rî  (h U h&}rï  (h(]h)]h*]h+]h-]uh!jé  h]rð  hK)rñ  }rò  (h X   ``read.pageLimit``ró  h!jí  h"h#h$hNh&}rô  (h(]h)]h*]h+]h-]uh/K_h]rõ  hT)rö  }r÷  (h jó  h&}rø  (h(]h)]h*]h+]h-]uh!jñ  h]rù  h9X   read.pageLimitrú  …rû  }rü  (h U h!jö  ubah$h\ubaubah$jÉ  ubj¼  )rý  }rþ  (h U h&}rÿ  (h(]h)]h*]h+]h-]uh!jé  h]r   hK)r  }r  (h XK  When the process begins, it has to collect all the files that exist in the old container. It does this through a conventional ``objectList`` method, which calls the ``PaginatedIterator``. This iterator has the option to specify the page size for the collection (i.e. how many items are contained per page in responses from the API)h!jý  h"h#h$hNh&}r  (h(]h)]h*]h+]h-]uh/K_h]r  (h9X~   When the process begins, it has to collect all the files that exist in the old container. It does this through a conventional r  …r  }r  (h X~   When the process begins, it has to collect all the files that exist in the old container. It does this through a conventional h!j  ubhT)r  }r	  (h X   ``objectList``h&}r
  (h(]h)]h*]h+]h-]uh!j  h]r  h9X
   objectListr  …r  }r  (h U h!j  ubah$h\ubh9X    method, which calls the r  …r  }r  (h X    method, which calls the h!j  ubhT)r  }r  (h X   ``PaginatedIterator``h&}r  (h(]h)]h*]h+]h-]uh!j  h]r  h9X   PaginatedIteratorr  …r  }r  (h U h!j  ubah$h\ubh9X‘   . This iterator has the option to specify the page size for the collection (i.e. how many items are contained per page in responses from the API)r  …r  }r  (h X‘   . This iterator has the option to specify the page size for the collection (i.e. how many items are contained per page in responses from the API)h!j  ubeubah$jÉ  ubj¼  )r  }r  (h U h&}r  (h(]h)]h*]h+]h-]uh!jé  h]r  hK)r   }r!  (h X   10,000r"  h!j  h"h#h$hNh&}r#  (h(]h)]h*]h+]h-]uh/K_h]r$  h9X   10,000r%  …r&  }r'  (h j"  h!j   ubaubah$jÉ  ubeh$jâ  ubj·  )r(  }r)  (h U h&}r*  (h(]h)]h*]h+]h-]uh!jå  h]r+  (j¼  )r,  }r-  (h U h&}r.  (h(]h)]h*]h+]h-]uh!j(  h]r/  hK)r0  }r1  (h X   ``read.batchLimit``r2  h!j,  h"h#h$hNh&}r3  (h(]h)]h*]h+]h-]uh/Kah]r4  hT)r5  }r6  (h j2  h&}r7  (h(]h)]h*]h+]h-]uh!j0  h]r8  h9X   read.batchLimitr9  …r:  }r;  (h U h!j5  ubah$h\ubaubah$jÉ  ubj¼  )r<  }r=  (h U h&}r>  (h(]h)]h*]h+]h-]uh!j(  h]r?  hK)r@  }rA  (h X1  After the data objects are collected, the process needs to send an individual GET request to ascertain more information. In order to make this process faster, these individual GET requests are batched together and sent in parallel. This limit refers to how many of these GET requests are batched together.rB  h!j<  h"h#h$hNh&}rC  (h(]h)]h*]h+]h-]uh/Kah]rD  h9X1  After the data objects are collected, the process needs to send an individual GET request to ascertain more information. In order to make this process faster, these individual GET requests are batched together and sent in parallel. This limit refers to how many of these GET requests are batched together.rE  …rF  }rG  (h jB  h!j@  ubaubah$jÉ  ubj¼  )rH  }rI  (h U h&}rJ  (h(]h)]h*]h+]h-]uh!j(  h]rK  hK)rL  }rM  (h X   1,000rN  h!jH  h"h#h$hNh&}rO  (h(]h)]h*]h+]h-]uh/Kah]rP  h9X   1,000rQ  …rR  }rS  (h jN  h!jL  ubaubah$jÉ  ubeh$jâ  ubj·  )rT  }rU  (h U h&}rV  (h(]h)]h*]h+]h-]uh!jå  h]rW  (j¼  )rX  }rY  (h U h&}rZ  (h(]h)]h*]h+]h-]uh!jT  h]r[  hK)r\  }r]  (h X   ``write.batchLimit``r^  h!jX  h"h#h$hNh&}r_  (h(]h)]h*]h+]h-]uh/Kch]r`  hT)ra  }rb  (h j^  h&}rc  (h(]h)]h*]h+]h-]uh!j\  h]rd  h9X   write.batchLimitre  …rf  }rg  (h U h!ja  ubah$h\ubaubah$jÉ  ubj¼  )rh  }ri  (h U h&}rj  (h(]h)]h*]h+]h-]uh!jT  h]rk  hK)rl  }rm  (h XÞ   Once each file has been retrieved from the API, a PUT request is executed against the new container. Similar to above, these PUT requests are batched - and this number refers to the amount of PUT requests batched together.rn  h!jh  h"h#h$hNh&}ro  (h(]h)]h*]h+]h-]uh/Kch]rp  h9XÞ   Once each file has been retrieved from the API, a PUT request is executed against the new container. Similar to above, these PUT requests are batched - and this number refers to the amount of PUT requests batched together.rq  …rr  }rs  (h jn  h!jl  ubaubah$jÉ  ubj¼  )rt  }ru  (h U h&}rv  (h(]h)]h*]h+]h-]uh!jT  h]rw  hK)rx  }ry  (h X   100rz  h!jt  h"h#h$hNh&}r{  (h(]h)]h*]h+]h-]uh/Kch]r|  h9X   100r}  …r~  }r  (h jz  h!jx  ubaubah$jÉ  ubeh$jâ  ubeh$Utbodyr€  ubeh$Utgroupr  ubaubeubeubeubah U Utransformerr‚  NUfootnote_refsrƒ  }r„  Urefnamesr…  }r†  Usymbol_footnotesr‡  ]rˆ  Uautofootnote_refsr‰  ]rŠ  Usymbol_footnote_refsr‹  ]rŒ  U	citationsr  ]rŽ  h0hUcurrent_liner  NUtransform_messagesr  ]r‘  Ureporterr’  NUid_startr“  KUautofootnotesr”  ]r•  Ucitation_refsr–  }r—  Uindirect_targetsr˜  ]r™  Usettingsrš  (cdocutils.frontend
Values
r›  orœ  }r  (Ufootnote_backlinksrž  KUrecord_dependenciesrŸ  NUrfc_base_urlr   Uhttp://tools.ietf.org/html/r¡  U	tracebackr¢  ˆUpep_referencesr£  NUstrip_commentsr¤  NUtoc_backlinksr¥  jÉ  Ulanguage_coder¦  Uenr§  U	datestampr¨  NUreport_levelr©  KU_destinationrª  NU
halt_levelr«  KUstrip_classesr¬  Nh6NUerror_encoding_error_handlerr­  Ubackslashreplacer®  Udebugr¯  NUembed_stylesheetr°  ‰Uoutput_encoding_error_handlerr±  Ustrictr²  Usectnum_xformr³  KUdump_transformsr´  NUdocinfo_xformrµ  KUwarning_streamr¶  NUpep_file_url_templater·  Upep-%04dr¸  Uexit_status_levelr¹  KUconfigrº  NUstrict_visitorr»  NUcloak_email_addressesr¼  ˆUtrim_footnote_reference_spacer½  ‰Uenvr¾  NUdump_pseudo_xmlr¿  NUexpose_internalsrÀ  NUsectsubtitle_xformrÁ  ‰Usource_linkrÂ  NUrfc_referencesrÃ  NUoutput_encodingrÄ  Uutf-8rÅ  U
source_urlrÆ  NUinput_encodingrÇ  U	utf-8-sigrÈ  U_disable_configrÉ  NU	id_prefixrÊ  U U	tab_widthrË  KUerror_encodingrÌ  UUTF-8rÍ  U_sourcerÎ  h#Ugettext_compactrÏ  ˆU	generatorrÐ  NUdump_internalsrÑ  NUsmart_quotesrÒ  ‰Upep_base_urlrÓ  Uhttp://www.python.org/dev/peps/rÔ  Usyntax_highlightrÕ  UlongrÖ  Uinput_encoding_error_handlerr×  j²  Uauto_id_prefixrØ  UidrÙ  Udoctitle_xformrÚ  ‰Ustrip_elements_with_classesrÛ  NU_config_filesrÜ  ]rÝ  Ufile_insertion_enabledrÞ  ˆUraw_enabledrß  KUdump_settingsrà  NubUsymbol_footnote_startrá  K Uidsrâ  }rã  (hhhhshh=hj  hjŽ  hji  uUsubstitution_namesrä  }rå  h$h0h&}ræ  (h(]h+]h*]Usourceh#h)]h-]uU	footnotesrç  ]rè  Urefidsré  }rê  ub.