#27571 closed enhancement (fixed)
py3: automorphism_group, canonical_label, canonical_form and doctest in MathonPseudocyclicStronglyRegularGraph
Reported by: | dcoudert | Owned by: | |
---|---|---|---|
Priority: | major | Milestone: | sage-8.9 |
Component: | graph theory | Keywords: | py3, graph |
Cc: | tscrim, dimpase, stumpc5 | Merged in: | |
Authors: | David Coudert | Reviewers: | Dima Pasechnik |
Report Upstream: | N/A | Work issues: | |
Branch: | 2136e19 (Commits) | Commit: | 2136e19817814b9466acb712bd15daa1ca2ca83b |
Dependencies: | Stopgaps: |
Description (last modified by )
This ticket fix py3 failing doctest in graphs.MathonPseudocyclicStronglyRegularGraph
:
Failed example: L = sum(i*(r[a]-r[b]) for i,(a,b) in zip(range(1,len(ff)+1), ff)); L Expected: [ 0 1 -1 -3 -2 -4 3 4 2] [-1 0 1 -4 -3 -2 2 3 4] [ 1 -1 0 -2 -4 -3 4 2 3] [ 3 4 2 0 1 -1 -3 -2 -4] [ 2 3 4 -1 0 1 -4 -3 -2] [ 4 2 3 1 -1 0 -2 -4 -3] [-3 -2 -4 3 4 2 0 1 -1] [-4 -3 -2 2 3 4 -1 0 1] [-2 -4 -3 4 2 3 1 -1 0] Got: [ 0 1 4 2 -3 -1 -4 -2 3] [-1 0 3 4 -4 1 -2 -3 2] [-4 -3 0 1 2 -2 4 3 -1] [-2 -4 -1 0 4 -3 3 2 1] [ 3 4 -2 -4 0 2 -1 1 -3] [ 1 -1 2 3 -2 0 -3 -4 4] [ 4 2 -4 -3 1 3 0 -1 -2] [ 2 3 -3 -2 -1 4 1 0 -4] [-3 -2 1 -1 3 -4 2 4 0]
and
Failed example: G9.automorphism_group(algorithm="bliss").order() # optional - bliss Expected: 9 Got: 3
in this ticket, we do
- ensure that the ordering with
'sage'
and'bliss'
is the same inautomorphism_group
andcanonical_label
/canonical_form
- clean bliss to avoid for instance indexing a dictionary with a possibly not hashable key. The new solution is slower but safe.
- specify the partition in the doctest of
MathonPseudocyclicStronglyRegularGraph
to make the doctest stable with py2 and py3 - pass correct domain to
PermutationGroup
inbliss.pyx
Change History (61)
comment:1 Changed 9 months ago by
- Branch set to public/graphs/27571_automorphism_group
- Commit set to 45630b83893e2242dd9585778d326c4ca33d7d90
- Description modified (diff)
- Status changed from new to needs_review
comment:2 Changed 9 months ago by
- Branch changed from public/graphs/27571_automorphism_group to public/graphs/27571_automorphism
- Commit changed from 45630b83893e2242dd9585778d326c4ca33d7d90 to 88bde074188d451a70022cdaa6f592199e42d387
previous branch was not correct (direct modification of develop. oups..)
New commits:
88bde07 | trac #27571: fix a doctest in MathonPseudocyclicStronglyRegularGraph
|
comment:3 Changed 9 months ago by
- Commit changed from 88bde074188d451a70022cdaa6f592199e42d387 to cedcb226dee96aa3959eb134242b98cd4bb65120
Branch pushed to git repo; I updated commit sha1. New commits:
cedcb22 | trac #27571: clean bliss, canonical_form, and automorphism_group
|
comment:4 Changed 9 months ago by
- Description modified (diff)
- Summary changed from py3: automorphism_group and doctest in MathonPseudocyclicStronglyRegularGraph to py3: automorphism_group, canonical_label, canonical_form and doctest in MathonPseudocyclicStronglyRegularGraph
comment:5 Changed 9 months ago by
- Commit changed from cedcb226dee96aa3959eb134242b98cd4bb65120 to 9006edba8dcff2c3642bbbc67d2cb8205ad0d531
Branch pushed to git repo; I updated commit sha1. New commits:
9006edb | trac #27571: remove not tested tag in petersen_family
|
comment:6 Changed 9 months ago by
With py3 I regularly tag has not tested the doctest of pertersen_family
. This is a bug reported in #26800...
comment:7 Changed 9 months ago by
- Cc tscrim dimpase added
comment:8 Changed 9 months ago by
- Commit changed from 9006edba8dcff2c3642bbbc67d2cb8205ad0d531 to 8fcd5842211b9a469d3a631cb7f28cdc1a944be1
comment:9 Changed 9 months ago by
- Description modified (diff)
comment:10 follow-up: ↓ 37 Changed 8 months ago by
- Description modified (diff)
I tried to investigate further on the possible cause of the issues with automorphism_group
and the Python3 failing doctests in src/sage/graphs/generators/families.py
.
The good news is that we have the same result with 'bliss'
and 'sage'
sage: G = graphs.PaleyGraph(9) sage: a = G.automorphism_group(partition=[sorted(G)]) sage: it = (x for x in a.normal_subgroups() if x.order() == 9) sage: subg = next(iter(it)) sage: r = [matrix(libgap.PermutationMat(libgap(z), 9).sage()) ....: for z in subg] sage: ff = list(map(lambda y: (y[0]-1,y[1]-1), ....: Permutation(map(lambda x: 1+r.index(x^-1), r)).cycle_tuples()[1:])) sage: L = sum(i*(r[a]-r[b]) for i,(a,b) in zip(range(1,len(ff)+1), ff)); L [ 0 1 -1 -3 -2 -4 3 4 2] [-1 0 1 -4 -3 -2 2 3 4] [ 1 -1 0 -2 -4 -3 4 2 3] [ 3 4 2 0 1 -1 -3 -2 -4] [ 2 3 4 -1 0 1 -4 -3 -2] [ 4 2 3 1 -1 0 -2 -4 -3] [-3 -2 -4 3 4 2 0 1 -1] [-4 -3 -2 2 3 4 -1 0 1] [-2 -4 -3 4 2 3 1 -1 0] sage: G.relabel() sage: G3x3=graphs.MathonPseudocyclicStronglyRegularGraph(2,G=G,L=L) sage: G3x3.is_strongly_regular(parameters=True) (441, 220, 109, 110) sage: G3x3.automorphism_group(algorithm="bliss").order() # optional - bliss 3 # <-- expect 27 in Python 2 sage: G3x3.automorphism_group(algorithm="sage").order() # long time 3 # <-- expect 27 in Python 2
The issue may come from PermutationGroup
that is used in both case...
comment:11 Changed 7 months ago by
- Commit changed from 8fcd5842211b9a469d3a631cb7f28cdc1a944be1 to 15790aa56f4c445a53f708b02c9759e15441ddf4
Branch pushed to git repo; I updated commit sha1. New commits:
15790aa | trac #27571: fix merge conflict with 8.8.beta5
|
comment:12 Changed 7 months ago by
Any comment is more than welcome.
comment:13 Changed 7 months ago by
hmm, I don't understand, are you saying there is a discrepancy between Python 2 and Python 3 answers?
comment:14 Changed 7 months ago by
Yes, the answer in py2 of sage: G3x3.automorphism_group(algorithm="sage").order()
is different than in py3. have no clue whats going on.
Here, I try to align the behaviors with sage
and bliss
, and fix an issue in MathonPseudocyclicStronglyRegularGraph
.
comment:15 Changed 7 months ago by
I presume that py2 is giving the correct answer, right?
comment:16 Changed 7 months ago by
I don't know. We should ask experts in these graph and methods.
comment:17 follow-up: ↓ 18 Changed 7 months ago by
why would you think there is graphs.PasechnikGraph(..)
there?
you are talking to one of them ;-)
$ git blame src/sage/graphs/generators/families.py ... 4c7cb931a9b (Dima Pasechnik 2015-11-07 17:41:10 +0000 3124) def MathonPseudocyclicStronglyRegularGraph(t, G=None, L=None): ...
you can take canonical forms of G3x3 in py2 and in py3,
in py2 compute G3x3.canonical_label().automorphism_group()
(of order 27)
and check that it is also an automorphism group for G3x3 in py3.
(you should also chech that the canonical labellings are the same, naturally)
I guess it's a bug in py3 implementation (or in bliss)
comment:18 in reply to: ↑ 17 ; follow-up: ↓ 19 Changed 7 months ago by
you can take canonical forms of G3x3 in py2 and in py3, in py2 compute
G3x3.canonical_label().automorphism_group()
(of order 27) and check that it is also an automorphism group for G3x3 in py3.
How can I do that ?
(you should also chech that the canonical labellings are the same, naturally)
Since we try to avoid sorting vertices, canonical labels in py2 and py3 have no reason to be the same. And, we use partition = [list(self)]
I guess it's a bug in py3 implementation (or in bliss)
I don't know. I'm having hard time trying to understand this code.
I'll be happy if we could at least finalize this ticket, and possibly let the other issue for another dedicated ticket.
comment:19 in reply to: ↑ 18 ; follow-up: ↓ 20 Changed 7 months ago by
Replying to dcoudert:
you can take canonical forms of G3x3 in py2 and in py3, in py2 compute
G3x3.canonical_label().automorphism_group()
(of order 27) and check that it is also an automorphism group for G3x3 in py3.How can I do that ?
G3x3.canonical_label().automorphism_group()
gives the group by a list of generators,
so apply each of them to the other graph...
(you should also chech that the canonical labellings are the same, naturally)
Since we try to avoid sorting vertices, canonical labels in py2 and py3 have no reason to be the same. And, we use
partition = [list(self)]
well, this is manifestly not true - canonical means lexicographically minimal (or maximal) 0-1 adjacency matrix (converted into a vector). A non-lexicographically optimal "canonical" is not canonical...
comment:20 in reply to: ↑ 19 Changed 7 months ago by
G3x3.canonical_label().automorphism_group()
gives the group by a list of generators, so apply each of them to the other graph...
I really don't know how to do that. I have never studied or used these tools.
comment:21 Changed 7 months ago by
Well, applying a permutation p
to a a graph g
is just g.relabel(perm=p)
. E.g.
sage: g=graphs.PetersenGraph() sage: aut=g.automorphism_group() sage: amat=g.adjacency_matrix() sage: g.relabel(perm=aut.gens()[0]) sage: amat==g.adjacency_matrix() # as expected, as a.gens() are automorphims of g True age: p=PermutationGroupElement("(1,2,3,4,5,6,7,8,9,10)") sage: g.relabel(perm=p) # but p is not sage: amat==g.adjacency_matrix() # so the adjacency matrix gets changed False
comment:22 Changed 7 months ago by
I tried this with Python 2 with and without this patch and get the same error:
sage: g = graphs.PetersenGraph() sage: h = g.canonical_label() sage: aut = h.automorphism_group() sage: aut Permutation Group with generators [(3,6)(4,7)(5,9), (1,4)(2,6)(5,7)(8,9), (0,1)(3,4)(6,7)] sage: list(aut.gens()) [(3,6)(4,7)(5,9), (1,4)(2,6)(5,7)(8,9), (0,1)(3,4)(6,7)] sage: amat = h.adjacency_matrix() sage: p = PermutationGroupElement("(3,6)(4,7)(5,9)") sage: h.relabel(inplace=False, perm=p).adjacency_matrix() == amat True sage: p = PermutationGroupElement("(1,4)(2,6)(5,7)(8,9)") sage: h.relabel(inplace=False, perm=p).adjacency_matrix() == amat True sage: p = PermutationGroupElement("(0,1)(3,4)(6,7)") --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-15-d9b1c60b9f74> in <module>() ----> 1 p = PermutationGroupElement("(0,1)(3,4)(6,7)") /Users/dcoudert/sage/local/lib/python2.7/site-packages/sage/groups/perm_gps/permgroup_element.pyx in sage.groups.perm_gps.permgroup_element.PermutationGroupElement.__init__ (build/cythonized/sage/groups/perm_gps/permgroup_element.c:5853)() 502 503 degree = max([1] + [max(cycle+(1,)) for cycle in v]) --> 504 v = from_cycles(degree, v) 505 506 self.__gap = 'PermList({})'.format(list(v)) # Make sure it is a list /Users/dcoudert/sage/local/lib/python2.7/site-packages/sage/combinat/permutation.pyc in from_cycles(n, cycles, parent) 7041 # Only positive elements 7042 if int(flattened_and_sorted[0]) < 1: -> 7043 raise ValueError("All elements should be strictly positive " 7044 "integers, and I just found a non-positive one.") 7045 ValueError: All elements should be strictly positive integers, and I just found a non-positive one.
comment:23 Changed 7 months ago by
probably there must be commas between cycles. check the docs on the function you get the error in.
e.g. [(1,2),(3,4)]
should. away from the kbd now, in a train, sorry.
comment:24 Changed 7 months ago by
The format of the input is ok. I tried PermutationGroupElement([(0,1), (3,4), (6,7)])
with same result (i.e., error).
As I said, this ticket fixes 1 doctest and aligns the behaviors of the implementations bliss
and sage
. I don't understand the problem with automorphisms, permutation groups, etc. and so I propose to let the resolution of thee issues to another ticket with experts in these questions.
comment:25 Changed 7 months ago by
- Cc stumpc5 added
It is a bug in the constructor of PermutationGroupElement
. The code assumes that 0
is not in the domain...
A workaround would be to relabel the graph vertices from 1, to n, not from 0 to n-1. OK, our flight is boarding, need to go :-)
comment:26 follow-up: ↓ 27 Changed 7 months ago by
Should we open a new ticket for the bug in PermutationGroupElement
?
comment:27 in reply to: ↑ 26 Changed 7 months ago by
comment:28 Changed 7 months ago by
To test if automorphisms are OK, one can also convert permutations into matrices.
sage: G3x3=G3x3.canonical_label() sage: a=G3x3.automorphism_group() sage: pm=map(lambda t: t.matrix(), a.gens()) sage: am=G3x3.adjacency_matrix() sage: map(lambda t: t*am==am*t, pm) [True, True, True]
So one can output matrices in py2 and input in py3, and do the check. (assuming G3x3 is already in canonical label form in both)
comment:29 Changed 6 months ago by
Running the example with py3 gives [False]
with this patch
sage: G = graphs.PaleyGraph(9) sage: a = G.automorphism_group(partition=[sorted(G)]) sage: it = (x for x in a.normal_subgroups() if x.order() == 9) sage: subg = next(iter(it)) sage: r = [matrix(libgap.PermutationMat(libgap(z), 9).sage()) ....: for z in subg] sage: ff = list(map(lambda y: (y[0]-1,y[1]-1), ....: Permutation(map(lambda x: 1+r.index(x^-1), r)).cycle_tuples()[1:])) sage: L = sum(i*(r[a]-r[b]) for i,(a,b) in zip(range(1,len(ff)+1), ff)); L [ 0 1 -1 -3 -2 -4 3 4 2] [-1 0 1 -4 -3 -2 2 3 4] [ 1 -1 0 -2 -4 -3 4 2 3] [ 3 4 2 0 1 -1 -3 -2 -4] [ 2 3 4 -1 0 1 -4 -3 -2] [ 4 2 3 1 -1 0 -2 -4 -3] [-3 -2 -4 3 4 2 0 1 -1] [-4 -3 -2 2 3 4 -1 0 1] [-2 -4 -3 4 2 3 1 -1 0] sage: G.relabel() sage: G3x3=graphs.MathonPseudocyclicStronglyRegularGraph(2,G=G,L=L) sage: G3x3 = G3x3.canonical_label() sage: a = G3x3.automorphism_group() sage: pm = list(map(lambda t: t.matrix(), a.gens())) sage: am = G3x3.adjacency_matrix() sage: list(map(lambda t: t*am==am*t, pm)) [False]
and without this patch, we get
[False, False, False]
comment:30 Changed 6 months ago by
thus, it was broken before the patch, as [False, False, False]
is obviously not correct (probably due to incorrect indexing of vertices), and even more broken after the patch, which appears to break either the construction of the graph, or the very computation of the automorphism group. :-(
To rule out that the construction gets broken, can you compare the adjacency matrices of the canonical label computed with py2, with the one computed with py3?
comment:31 Changed 6 months ago by
even quicker might be to compare G3x3.graph6_string()
here is what I get with py2
'~?Ex?????GCH@aUBIGU?[oIi@aoXEpgIpSFOJs[DUY`LTa@}DZDuLYHyFkBHTrxhHf^IcV\\{YJiBxbLaJxWiwL{@rqEA@FeOoWDZWIHaErl\\tAI{vfUGFZl[{BqEEjtXZ@PViyKqEFi|_zAqpgwXyGqx`p`{BXSppOLtBDnOBDepPlq@PF[KE~?KBrWgpB?gJ\\OpSK?oKz`_wI@_BWul?c]\\`[FUoAY{sLPVk?dj[OGfYocTo\\O_nQocVPVH?^hORKpk[?~?w?~Fw?ExPT`^IQphieKULqxKFdpo[g^UQgnEfK_NjYDTxJKj?NVkHbyELJGF]Z@[}?{uKguHTowbJ\\PW\\_lMIPgrmBIl@XwqJ?f`Pe]fk|LIw\\Op[nIzejPwdWo\\fMjlJq[ETP^Wu@llEe@TKFu\\_JUqiWe`Wvql?ZlPebFgbuDYrl`u\\kKtHyBlcvPrrXDhI}CZklWyvX?nj[}gypWTxk]Bzf\\w\\iEhNeTkfZrnIjopP|KxwO@fWWkvVhVdgG_?zdCZjlTNJWS_?mXPbm\\XrjWRCLlesFiKthvrigPVZl@f`YZRzjJCBj\\hDjBs]VvYWEWf?p]vt]ujIW\\LDI`Pnlq~R]SgjDPMGo^l{vqyowZ?deLziMGVZMPjaLBJP]ypoT[yXeqc[`]B}]FAe]qpMcjWhaE`VxRL`cyZnR_RWL?|tcUpIxmvMSaYDGtx[Tgg}YnqfFlUyw@VZRb?mhmBhZ\\k{OLU|IoEZbWmEZ\\mi?]uYY_MxYbKBd]?auNf^Kj[izurCq}?XYMy}i]ps}\\mCkv?auFmvKytK}tm_z?`adZIzsrjwN[ZXLcAFA[ri}RrvA}UucjG_ic]Ru{Uy{RsutWJxbc[_~lmDBjxA~rOFtTWj@^U}EDuyC~]cEx[XbGv\\n@bM}?~ufA[\\YIQ|`u^eyo^y^PGgs|`hLUNhxnbD~exaCTdZBQjg|Vh{sZ{vpOCXvcu?pf\\lz@J]zRNtAb|Xk@P\\fZ|CTr|LVZca|Xl?o\\\\^^@RU~RRvYusaey}i@Yjo|]EE?upZkWhk|qoKrjF\\ggWD\\dtkKLmne?]ZS^X`a_MlYwlvH`sQVWVp][G@YvmJRF{RPrCjaf[lh_CknZ`qL|QW{SeYFtXxG@WnygQt?}DEM{\\NMHSiA[ajoiiQJoTPytTyiPM_eIJlBKsOvCMFtbNpqPK_tEZKW^|yfgXCYzO~kALoDIdsz^v{YtCXLf_~XCbWB`Mh|N|zehPPRmW^x?jSBIHl^BydMjBaizx}Bd_Y?Z\\`fT]wRwqjA|m^WiYD_Dupa{X}KVMSYejy}bFCW_YthFfAFxbgqm{z]q]gAAIg|\\ipALtTRdNZlmhjoCC`o}upi@Dx[YkNrj^MYk?_iK\\tmM?P}@}@~}MN~?w?w?wFF?w~zx~nbG]vlPKbEz@Iuc_iq]nN||PI|t]DHSVwIDsgbEqn]nvvCh|VUKHo^gadYIBbMnUfyGBFXUaOJV[[EhKdBtphLez@AMq]KOQfxX@yGhaluWZb^_`DU\\WgAs|LGjSPotrRRP~?PJXo\\eErYgg`UhdORLqTFyA@ZNAjgTud`_olhK_xXdiNqGDkmGz_\\ueEASm`sCk\\DyxTX{Ma^pLK^T]AkEkVnZ[hdqsqzFIVwJozrX_k`wfnuwxdYUU^PxH}DYTx\\geOjS}}tSuYU{kZ_G\\kvOz]]WKDjDxutNKIlh[r?IZmkbzNN@CZWNhmlj_XkxSy?hYzkFlllCOZgvdjqm_VPNF\\VR_Ld]^D\\ou?lQOnTViLWVM\\]sgBhtvbZSL_XccNe\\wZkBt[|Ue@Uumw\\ZDgBscE{p{jShlSAQr[\\~dLaA{sKdmW@lREtKJj_QTbk^|YWcFhhDNM_RQefjAi{PHKkt^xYY_fLKPrm?RouXzuHbb{mvUNdLT{AS\\qykAl^yW|}Aii|fm\\FfRD{aDTs{xAZNuZM^OVFMr|\\`yY[vOKMrfbGJZ}hjav[ZpVey?oluEo\\Eg]ZI~HC|gommkvEjuoEBMsMbWTauxR|GdySTZes}FjYoIBrWjDW]E]kN{aRyPRRsFkx}a\\ci{]yJAzSaic`LCbZjixDZi~abkK{y}RA^DCmDHJC_zxzN@j[^rDUXfT^IgNkIeIHceOT{~US]tZ^CmLRGzqVm?U{IkFeYJhGhic}bZyKwZYBue\\kAVeFC\\StMQTBgTy\\lrBp[iFr`}g@^QbOxec}QOaq`nzpcnLDM[DatkEQO^`aERaDVhi_nzwhNJSht@iLxAooVdGgdogVq\\AF~mFHtQ[mGpLrGX`Ey``C{DR]ALtyf[GcVfTHokMS^?YRWzRNDTEYg^fpmWKKtklI`hMF[AqYbwZfGxDVP]]xfObDVksbEKhTwEHmFhMtFDDzVB_]oX}AsxzUtZT_X[?}hdVO]K@YlIWVoP~Aht]dvYrGXS_]mI[qMi?UzdIHyGnpLJfsj\\pXDeOF]PptBf?Qz]{ldycqui^OSpc~@Pj]DKv@jTAFcH|[ZNpMTk[}ADhF{GpvSYEyKUwDM`B|RZMxJLbdx@T`VwcUtWYRkUVCD]?a`N]q[wllgoJ~H]W[KW`o`Txy`[nUpGN^qTqLjXSQ~pUsShWISILVj_]ivbWD|zGyWvYbAvye]ESL@R@PytkRrVLY[kyzf`e@lLO@jDyFbj{|Kp]]EJHFjIXltrjDgD]M?PsZo\\ZZfxEXtqaVHMZXW{{ziF_FYp?Uo^GxjnV[TFfiISd]NQVhdmRNiojTAGtdMovYvQs[rCEK}F}IdiX^cN]oMpaOLhikVyVeUMcsCimd}bDeZJsdyyHpoIDps\\B|J{JbouAFRe^cU^In`cQHcUZcDMlWFk|EfOtoIT}ylMHiy[|Dc_JIUtGXLy_^FwS{hiOTl{vXRBhrbuES_jG]pG[m]?zVWY{HxADvmzFGauj?f|afUAuma?tZtH@ezFGPn|dXa`E`meGe|kM\\ATxi?LuliAH~BaDl~TFP_Sp\\QsB]uh\\`BjhGDutsOPngy?u~yEwKQWYy~oTVrGVcChDQJXZgfbfDjUEGpUI]FnL]~AbvaIj_JOKqYqx_|S{YVacWXdDsnU\\j}G\\]ahiOJOsImUmAxqw]TiEHDcfe^SVS{ts[rPu_b}VNEnaWurQijWTAIjLg`}l[ls{TkW|_I|rj`zeSLnOxayKOXbZa`^bk[y]W{kNa@vh{wjyMDlhbMT`oGmNUOZkVzRhfYmI|UMFbtM]WDH]k?BfR[lbL_skTvrbRmswumLS\\XmVU_XJNC?NEZx[FiHd_r]{iZeroyukWxlq\\]?[djO?\\TNjSUwHqbAPmAI[~yyTOeGIuVpQd{MkYLk[{JQrALglO^CEbn}jPcEgGtruEH{pki\\YMmHStOlgiWJo_t\\}|hKA[CbhzSHvQmPizBr_kwkEsrApk\\JnA`kuXD\\]A\\jWDzuWbBssQ`MV]ikTmBkYrySBmigNZKFLu_NxnAINcokHRj|F`iYItQzrAIze_t\\gduu?vllCK\\r?kFHnky`w]chdbHMfVW_@duOzfcaAkf}IdqN~ga]RxmncHkiHVet[GAFTo]fggaLJ}gxS\\~q_]dvkzqWeVCbrVl@?QZhFqxP_MH~cxWi~}OJc}uzVv\\NnGcAreJTXrtWj@BA\\~cGPAayqLRtimHnuh|xHGTdUSzQuy`wGSRZ~@?aEKubW^iVaZnUtvsh@KeYs\\Rr]Eg_oL^|?_oWMwjD\\yYiZ}M@p}@oMN~Fwwww~~???w^_?^~~_?^_[Bb|R`VKVAb\\@gXiznukCuEEJswLwwh~yhNKbE_RbHsXoTl_kBhZ|}tAbSQH{tA|Sp^|cfhdFCJIc^C]GZUHGmenvZoapPafrCNfGf~yH[uPU@jjA@ZE`Zmpk?ZUluuwBlvLj_wyUKzfpeoL`UY{GDkIhlfUg?j]tuZWFmZhxbIxWNYv`u_UbE\\iAHYETYyto?\\rmZugFttqmafMSUlzaz?L`iIiRKot^o?]YZcTnq}SDFcgn{btHL@tDQm^BkIVBcYIzy?LJRyBmyvMCKy`F}q[chc[eYFjeMhXbJCo|mo@Yhn_unJyWSVaa^kjpGtBpDi]\\IqmOv[sV|rdXZcgQWKCgxsutVYF`@vyAYmxJx_e[P^bRN{{\\SncGPWgaclsZpvWX`BvkIM]hNd_f\\?~Ss^vYfg^Q_IgoSI]Yu[xkU_bzwPW~Czi_Zm]sZoQmmaV@LFCOYdFFV[PeZQ}Jy\\UFyIzqhh?jYliHE|QRoLKkABsaY]^AirLV`~QzB^BT|D\\?LerYoRiuhMCsROGjPdd\\wMXNR[ZlLsVkNZqEs@ouOMljl^zoKRnLW?ald~hRBt@Hbx~ASTw]RHal_v@Fliv^{ooNlkWAEtU~KKjd?drf|IDRe]GsWu`YOiu|lnzOgVrpgCBmd~`TRo`Ijj{pQFh\\PWbkVw?FF??F?{[^{B{[?B~b~_N~}M@pp}@poMMN~~|o_vkZjkeS?ynLl?QcbnGHUZV\\B@bRut[tjUitymGLjSzfXX?FM{]W@`PmyCbHtncSSK|nFpyNRi]qwGlZeZjMP?]NjN?OgjNoHEY|^?p`T|fMlRVbs}DwlYodYuRRy@iZOwcQtW]UFmjZw{a`sV|yHoWLKdrEv`G|[hdxCsmGwP`mgtJRtpnt]BAkZ}sqhCEiQyLugHrta[}@Kyo[DELwTqd|bZvM_pkF~ebaPDJCbk|UEJjYkIntmAp_ZgoJBqubxlblZ?Ls`bZFFsfce{|PPi|hPJ|]gbPDjDAgtLk]zS^EkAxgSMtbnAxsll]EB]ZJEZnL_uGZWKRAll`vZ`zFOL\\@`UtTxbjfe^pRENhPElY\\CJ[Be_sj{xV?sFCRRriotimniIbj\\Nos[NR_TuhuATiETOX\\}KmaWHoIjffHNFM]{HUU\\VwsTFYWPlyT_rWadcTZ]jKoeHSArtwrLWvfjEEcLl\\i}VjTeC?\\uk?b\\D?]]uvxly_`ZAe_Tig~Ugkc_v[vjxjlJOGEtZO@lWWD]ll|zXwGPsXKBSmLvgbIMDj\\jvTZX]@?Tmw_JZB?Yt|lzZYp?Yox_FhantHXD\\vkOqUuU[D|DRnU?THsn`FJQsDu^\\whbaWxTQTUctL|U`cljKeH}EMvL?JSivIFDhkQk|}uRB`TSxhBkQmQ|\\_kdmTd@|`qnp_RPKniBhRkDkn^ebPoVFEYS\\ClofPjliI{|JRgRDWrm?og\\WZN?nVWLxsT`avv@YXKIy|kJev`lYq{jCo\\BrgDBEtEVSRTlbUtbWWZ\\sEsTINNtWZljBjtUZWEbWUx_KWTwSyoi|YJfkFPOv{ouaLQ]^mn_sZnJCk[UbAKqaw{tS~TXDTFEJjdYaxca}g[FyFxnMpgf]kWUhJT@QhPwx]H~KkiWqhFfqVBNHB]TEF{FyvNghe^JPddQfAOmE[\\Tp^rJGVCwXxsUozX?~`TB{b}[|J[LOKv}ugqAtGEfJ]Y@cr^dMAFjlD]Pfg{dfU]VHMks{o{@\\^|UD_Lq?h{tm_`Kv}RCH[}qFcy[jhJfUh{SilM\\DWBm~mKKaLo@jixs`HS~sY_Xx{TMdTxMH\\uTriHcsm@LUDgXkzXEhJMav^uWyJHfSsttbRmb?rlGl`?L~alXM?Y{Aqcy|kDqebSnvZoxDfHyLYm`fv@`FscUp?U~HYpN?RtCi`j^X@mIicnvus]HXXUlFl`T{pPD{Hdg_P~iWdt{jTfemFh@{{?s~SUuLh_uKKCUXStdiRVtcIO|nGfUS^NWvJfXpZOfVODV{Hj[ZaRJAa@hrJXShT~SPgLu{AxhSxzMp\\mNE]@[{_K~dPujXCeYKCKYVFXgQ|vcBOlngFpobXyFrHVWi^MV`cyXKYBiHm~OwbEPfq{}SO|WOTkAQSeXdd{Jwc|dFNTfQP{qapEXa\\}iT@oejf\\[kI]Q_gx@`aJqsXzEyHtXMVpfeD[uGuAyIZmqf@Sdhs~MkAmY_`lAECiu[RcDyx?BJf[ny\\Ih\\@i}rH{DJwbFpKBR]bUCn|^uqlUFWdF?^ic@Cz\\J~MqJUoUfjiV`C}gL\\Q_KvkNDH~V|jeXg}EahCzpGAM]xZ}TqYTaK|vQ]HHv@Xq[@S~`UgNzvlsnPbs\\rfQVj[Ker@FIjPFtEX_hM?CdKu{\\zsF^PZsnHhZYtG^OTw|hI|iE\\hAFP\\cFmDiGsT?IQXZ[^NwI}gnlMRTukZ_n_MylYUjZDdiaBqZDBl`yGLP_GcZE}NZuG}rJ{NQXuwvGZcRmMM?NoMM@~?F?FwFFww~?~b_B_^~{^b{[?[N}?FwFF~~wCjG]ttUZIHRrJFcl`dAkywkZW^Sp[aG~zhKkcQFVZ_~KVcpXQ}fbkXoMTuW\\FXGwFJrbOzPusbwDD}~HhPK_s~Sb|G{fhcXy]\\dcohtqgxRXaWbNNFAlbvOrgCr}{ejHC`[|qF{KyVbvv|cX[bgY{fCJq{`PDazciNZcDES}}XOG`qu^WV]QJKGyQ||zXa\\Khc{f_rM[iQ@c~EgYzsHCfNmZAB@iuVsRxoigo[\\NnnZC[wedfQwQlNPPOqfiojT}@EFJnhdAGVJXv@|hcsQFJeejqtH`]Jee{M^UWoXK[q[]Jiqt~HAiSMSOxwxJg_^ZD{_akp^U`JBwtTNhN]MaaiIeeptM[ezyWFD`QohVTPv@A}wZcgLbXnISiLouXnKlxmBEaMRebc}KzZmCWdbJ?i][Tr@E}g^QG\\vxbceO{epJdO}xI_{Qi[?PPZJYPRLkve}}Brjf[f^hXMH`Q}yikeOldgijC]|Og\\Oww_CTIqySQ|[lxm}`{]]tFzmYQhPCn]VERWKrkKp[F^a`FHbdO?oduTgpUyp|Nzc]iz]I|}TQ[cCcJsstwPlI?s]r}xIRR}YCubpU{MPK`uhWA|]hYI^KqXhGTxTovdLNSDYW@fUvnpQSzvOIuMRfpSXSLlHOLx{JWr]DqjH?zQ{_}\\LMSFR_DTZvnSHsn\\GJ[\\PzbDFOTkd_Nfql_tyTMbcC\\rSfwYP`BkCaXrH]ITfk@||a~wRt@|QqLcUUKfnLvmYKqGZQeObuyU_WSl@aeVHUqDfxA\\~I^yDv@^BalWEUjDvL}]whSgZCiS`|]WsIAepBDRkeYKqzGVvXN|_~CZdLExBJFI\\s~Z\\cJcDk`go^`P|{VWFHZruoofaarbDeRJwezBGqvD`ywF{LLEphmrRQn@cZaBFnirGhMvXla_{dExWXUUMweuJGfjKI{onoYYmRJTwwd{I_}KKM}x[`ce}llBAy`bhgXXq]iYsKgxlSYma^`RRiRb\\kkewYA{[|AFtl}CXTaX\\YMxcghFnzqkcL@HHA[vQlRshxPwM~aBdNhMKurQDxZ~@`XiXZWh|DWXBz~Q|GL?XB?^FQyTu`xW{Q~iBFRw[ZFjR@nJ^pClHLd\\cnaJB_z~lYhAcOeCJjLZO~AmkNA^xGiY{qjJ[uqFF`tadU^s\\c_zRgPoOEezjQUNr}obUmFbSjPFUwJlQNUKvkTu_ptFJSMr\\ilDBsxaPa?NK~Ecr]^{SFlamMHuC]N`Twp\\bW~OlY`TUNJBFT|MpPFsm@T@?lM{sfJ\\^lOTmi[VGuGxnCu[KxjJ^?bUIFi|Pnuxi_minPEjD_sPZmLglS`t\\on_}d?zbpCsUegBKUm}QtED]jW^}mMCYyZp@m`cKpJylhJF@U^alpMsGrZU@TPew@YFi}TF_pi|[J~\\UIBZJx_moqDPD~EsjFGZRtQ{JwSJijOJHiZ?NBNZgeAUi|iEN|TufdqWpyD_VYzjyG|Sx@NqiD?rRBfmh{crlvMT?WAyoahtZoo~mYs|LqajcWa]rnMtDrdQBmfAaGZPTrtrgitl}Rg?oEtOhg|YpP}uZYxtMBf_Y@}N[}crppoQ{wiOHNDFZ]VIJutyhcA_Yc]euece?\\RXnCr`hkwMU`_b{ovmfqJme\\`Ki]hA\\hXevVzjna@CQVMlLHM?d[tN`UeLL[QqiCP~CfzdsRzc^_YhV`KXxTInr}x|o_SChx\\hhHOC{mewJqUeNAXXQC^gr^M[i^MJsROxqcdre`\\x~s}{CQ?cvViyMl[MEYAjEH\\erEBElkNzBMaKb@rKLvDYvtnLb`KFSU{ciDGumrtoxjWwioPsLRKlwSWLn`myJ[BSIIZ`Zib]vL}LXIC[g|tHCaXjfY{pw|PpeGMokTqlgWgmua}kNKJOKXMbXmLj^MyphaO{JNpGeQJn]klLAF]L{`@gVIfheLdLClGXzChEhhPNrjh{YyvG_RSYUp[}IS^vvbJRSEvD|D@WFqFyDhfPalAJiwgThRBLtxp|RmVgCQosetNMQ[N|vrXRQ`Vo~I_bCyIzQkqYoqe@ttOqKyDE{{{mxlJ{A@pUcwfjiHb~fQwJbpdRmeDhIAzYyhRsuDfA_zR[[czeqzC]TTSe@VCsR]Ub\\ylHuueOrfDedxKLiORzRdqYhs[iKDUjpwg}e[u`ybeCkQ[IcureF{vQZlUiOymEUfwguaGNlNePjLWuKKPsnbiI}XMuBw[UQgPwJSuhwVuzQX{sU{j|eCeEqvqDSrq{{RzK^qCaNKZ[KG_ZWMmlqoYqJo^VoYH\\kQpQpejMz]@MDMVsbPVS{{r]gnqg_Y{F]IG_EuLfd{SUMRKZfqIQ^[DcSjD\\W~ZPHPdJz_XJjfVPnsR|DOJUanb?oAuarq}bELIlD{|@iRy_koctusJqu}WZLYWLdkwxGvUxOj^GwJUQx?PZQBqpI[NOHBie~QRh^Ke]uNtGvdu{IuNR@WxfbiA{ngTFzCpJaeq?WuaNU@rE[aGXdNuQnBvXD{jN\\?}lZsgytLCY]VFaB{n`Ovkq_lgyo@Esg^ICtQ{A_m`ntG{rvHFkd_hysvdmMYmChFtnmaJ`\\wpSAVIZlGgNIKQvsrXOnv{``HW}ZJLOCcPgHzsuXnFUX`MBvZmiQhZ\\CU?lWfzAgIq[Dlxk]CZn{iDGZMYw|ACcDEGniZZFpxJgMOzZ}XIpd^Gr?Dke~EObUI_nnKlSB|~PQcPjhsudAQ?fILpPxYGRUr_mhl^tXBDr`ZBlMaaqU}lsX]?iEr[hko\\VBZsnSV]C@uqo^EFRWQUMwbVJN\\zOWXwhYNhkEKS|vkorqCWtZHpibK{I}xZ`ft?ItQp]EM\\_XEjiBZbt|\\Og\\iDk]ekWLFNyvArgB`[lMUJDswM~JL`vd?ZEUIVE]QlJLS}od{KOBzxLDknsjP{hH~CFz@iHISqfNyHA]|_eHHIf~FjTBdTfabRJc}sF\\GoB^\\R@{l{hT]bBmsDuph@JPUJr}P?t~OggWRh}xrx`dbdtBRd[VZA^KP?nnaWuq|okzqEVuA]sSodhBHy~I_enwPCoqL^t]]fUuP}KfDr~itJ_eKTejmUYKDgGfsPo?FUE~b{SeRR`mpm@L_Xqp~O[_xrmqFwXpNV~DmX@MEWnTsktOiPDMoYO@Eqlzf[`MUSplhsHY?{e\\yPwDx\\jWNpXTNNzdqh@iPYju[ifAY?p^@X?@VINynSPhpqUleWFWAsxVlBgRr@aGqumsvjd{|YTM?kPqvg\\GpgsaS_uByvJ^qqbZ}@q|}j_HcG{uOX{VYOkAklfhu]d{|uDi_LPSnkNBBhK_f@KPzkx^yqJY|aS||xoHWAnKcF]LVAE_[lb|JZqvVuKsWEHbd}BeHShoFGHg\\lsn~JGlvgRfvj[?xARhcaz`kv[wz_|@notmGWkgqDgiVqm{PFtKh^tEI]AHQ]pbCAYpm?hnUma|yZYvRru]TrDXB~DXtAbFAoX`q\\pvoamrTB}rBBsDHQ}BWGFEpsBLY|UFysu{umnVY[yLSJ}K][EBRBG]EH|Mz_q^ROr~PGjcCfHyIgGdbUWBVNNWZyeunS{}eEEZfbj~lda?jL{_ElHy}X@ffGqoGongrhVsi}lOGKh]DBZLzcvIbSXQJMDERmkZ~\\fG_ZP|G@nQ]\\ePdwwdaHAjrBw\\xMnZOGHMU``U|fwfWpUJCXxP`XfUjnyyX_BivH?mYVNioU\\Sol?hR]H[p~G|rXCCMUWoMuu|RKwN@cg~pss}{nk\\PLbt?yILI]YvjVALXropwIyF?\\@C_sDPkpP|TvusIG{OwcmTx~FdL|X|[jEKywBdPYQvP|wyDX[mSko\\Qi@w@cEGKjDgjwy}v`DHogxDSy{}M\\L|XvS{IqjWFcKYM\\L}jKFDs|OuaLiKBcCQJ?sbTcf[^^X_cj_ihRFYso|SrgFBcrOo}hYgEZ^^CZhh_qWwSKvys^VLuCTKc^sy~KHfch^qH]e?hCeWtsqhESkkWK\\mWk@zVv_yxROceiKIlzkNVZ\\@`LGvk}^ghTwg^qXMsOgSg]IuZE`Qe[kDFmTe?lm}wTrYWOep`bP|lbnNZ`DDHU|VN{SY\\Or|GfyGOqPJs[nW_oac_nZe^S[ar~PnwaALFhHKnqPnag|{d@~y^@QC{zJQLPPOdtxjpI^IhzKE@c`C}tN]JHEz{r^`CDhMXBT]aZ]FDzXIF~q{GoJffEbaQWSk{|MWR~Gx{aIGaWB}plxLHbn{R~@CEd]CrR[hZ[WrzXAN~MwcGNVSsipPDQVUs|EJ}]_IERNxJen`^JugI`]{uIphkA^smobPGwQkloMjx[H}s\\ewiOkAkptUmb|JVGEDcVyRlZdZitkGhU{liRhY?^uis_rGeC{dwFN\\Sp]tVTiabK@jD\\Ll`~Gxw?pcb}Rfbyd{rmC`e^TkLSz?J~RWoTCq_ya}@uneQfZM]LqDI_NGxdmk^ce`PfZBBJoavNgVEWyaRHdswl`{|KuhMqpU~M_fwp}CyLArFMyEZTaNUsDyBqxBDrXPa^@Q}^?{UboeUOlix[JxxW|BekavvX@nHrkJdWQxJ\\RAy{Bi{pLSMewKF\\dCbmHByzCw]FI`qQtMjSZjfJKqwkrZvWHmdVgNcWJhNLhInSInN@Tc[wtZgCBETS~ymqA@LhnPccB}Ct{w}Fo{nnRAirCCfdqn{fTh@{djPFJJm}@\\Y{XZXCAM`[n}Xk_aJYNdHGa}hFnEmhsmlytOrkP@bhmZ{jpkP]dWrDXXy}`NFmFLi_PDTK\\~Jl__SZU{`HOvdJVird[rq~SkYMb@AxtJ~PxuOZqWtEKk~ZcFen_vGHSKdMxVuM{L@MZNjA\\yk@DDi@~R]SgZ]tHt{O]daXFEK}hoL}WpTJnLDq_RqOUGXH|RvLVeKIVY\\sRZpoHAlCLuVtd@V{wNfkBKwfO[MTvI`\\swbbNZQiU?VQOV@XD{\\]k^Qoa\\i}oL^M_DQScVtVdo`vnCm]sDiYdOwirwwbVegpo~NQXW@ExYL}qPugqC[\\kNtSQrE@UdKo^{tYY[OTmRDdqMdJJTDL\\@U\\Yw^^OGiI~tAIVqrB~k_|Hs?wzLJtpENAaQtLCN~FEU]AFidSkyFDrRD`jV?U]ZiM}sAahn|?g[yV`^{cNgi_TT]KzpKLgWP]Egb~jEij`BVCmE^@qqikos]WRJplbvsaQCn|cCheaHVNrjKQB{hG[OefxmZhzPvJFcdTyJkEuHCHrRb__HuKm@P]lrI]~jt?{m]JyxORp~Tqi_VjQAc`L^pmtjsjjFMdAzTNPKrB?VeTS_`QmDsGbv[jBv~MwDxdq^Ux?\\T~Eqw`NJQES@h~Umufoxkt]PRXc~@NGp?]fHqACRiUWCrzSkjz{~CRifi\\wpHEnm^GBHnOS[s?~kY}{YdRFcnBcOkhvcmO}UCmPIp~BcMMSj^xcfiYjotoLcgwQLN^fHCH^oOsk_^xW}|UFBXskpsBLBftIanUCMqGu^bHQYVB^vXHqjbtFQJdAmAThzts_cjx@UTOFzLf^MIdL]Qs]@IiV]JDRxOXXSbVwhIjJIN}xH]Dm[jXBUIRthL?E{c~yKkfRAn`x]SG{\\kQEn}I^[ePU[hDCLGX{KfG^S_nL{vCmErFOfO~o`jLIh?uhM~ofH]SD|RisiBizORL^sRzscbbsQIGXajeD]B]WHZjwydaeieTIh}cJNEas@YxJ}pRHxoexVe[IFMz@HN^eJnqCpjqPB@TEfQPyDxgJMzjMQiWmTPKj{oW}rixuCH@BxL[mCGkztwvAqCM{}ziv^EZOUhCC}CgbJ`zvLTJIl^LP@xsbEwlDjbjimp}CAOKxjTY_oX^V[NaKgI~Njre}sUsEwW@nCWEie]nhlAwzN\\B@jU`TjJHXpq|EynOOQCmk]JWQBNj^DwL`BZjl}NVuIsbWp@LoRAsqVt{peSzFmdCTzOMLjDW{]FoCCDAmIf^aLuxySeYeCsYc}Ze]CiY]fJ@\\^bs}ad]iyLTLUzdR{EKeot_\\Cdkq?~?_GI`wpr|PMnreCmpSDjQds}bscQr{jIBx|VewpMvRpWxau}a^pDXEgy@wglWSD}?P@Ahox\\xKrnV`QmHWTLMRe}JeQIjmKkRfvMZqHuZNK[YrY}P^`FHWjWBeIVHCRsKLjr[WBlx@e@Jk{IzhMdwKZK^qLYHmmDsmgt@E^mIPQdpE_Zoyz]tllzOEH_QZzxDDjy\\aAZ|AHaIl\\I^YQf[IJYNqjERlihejahOHvyqDCdsT_JrIz]vjlZSGhOAjv~?ovnKsPJ^_PgSuNKNjQY^B@nB|FEiUnDVRK\\ACmzYKcarQK@|HxnzVUxk`Cw@D}~}@poN~}M@o~~Fw?F~wFw?{???^{[B{^b{B_MNpwF?~~?wz{?^{?[[????[^_B~b~~E{hk_~gMnKXh|^iDgPYWxcZvBcRyKaOjnN@Q`XhITXDQc|HULVNwjN@IflAgSWID}JssqP~_fmo\\M{~Ie_HYi\\EZxPpRkSh?x{|AQhTHaXhPRQkjWLs~eK|?yXtQIPGWRuFrhc`}pI}gmdx~`TGSh[mPNsieJwMQAM|[bGThcHs[cMctDsVX^gx[`KukgdECKFrPUGeuqxwYtNiV]LA[mEtOmBNEQsDlqtNl?eNIqt__}jcHT}QmTqmRL?LxBrYRkWqxqgsBZY]mJJLxMnLGNeSrabaFipWaM|WjmcEhwVMg_fs{Cc~pRg|RhEg@{h]NPThTVNGZ?euxxpbsvaZysAyhRpI[H[xQoEnqo}lAWmhR]AAzNOHr|O}Ro}PK_VgrjLPuFRTyCzMFKPYW{{g~uy\\OcTCYIpV[HrAjzXBMyepkoTbqiIH}fH\\XGVbQZR[KqHJn~vs_SqB{iMaXhPy{K~]ixI_p_iMbXkJhQZxdP^MUhcpLFRHHLzTFLdEYhhLpsVOHL~~ze?SwDzENDDR`{ya~rX{SO[OXf@vSFognnGg}wzCrO]FMaae}chvGhTrQZJKMgCy~~vo`AXiA@XlSiWMLz}_nWnv[iM?|k}\\Cj|d?CwF]pc\\GqpV|GgBK@ews^jMBmo^\\d`uE[unUkOPJLg[[HUt~WTlTz^STGYtvigp}mGAWazwa[wPpJ~KP?d_MxWrnJ`NwRyss]aivFxwwGDcuSxOhl^}Cr[vt{HqAlv]Kozmc_EgX}gd[cRSv{K_DSAyep]k{Q}`\\lpbwYNTm^?uzJ\\xfKZGwlyEzRKZPw?]obLxE]PRk{vGKsL^?D{OPjWLFo_kXhuti\\g^{ze|q]_qu@V{lfwmd[c[mXbZTojTg?}aHNcu]BImmwcKtL]?TwGLLgKvaALEfzPlMe^nXzNq[_rU?zzJ\\s^BiIitiUlJg\\MW?~?ovhX\\@pvVTGTQfm?ewOUbWTZ__uHjueyTh^umuvh]@Wr^`\\GIUOH[@Ki]jyor}vXc]OcttI[jhtyKdHc|IcpPEutX}R~@\\WmBxGbN@@WeQj~fWJ|sjgGRWGk_eSVs|Xa~ZjiFgCy[hhrT]\\`ccq]sYQac]ZJnp^gYxFa\\DDJcCWqpD~t{Hn]Xe_hEOhQ@kHzN]QN}rm_}AQfoySlffwUPId|HcHHU]sm|R{`le[JdEO|@@gxQZ|nOjzkvYEWacLEKHu\\M[q`XLBsjVDA^vFok{y}_yKDw]Z|CjjAmtfhC[dUsxKW]OC|@Emu{U|d^QFOWceIoep{hyU@kpFYLtOi^xZ_nVM{bWaFoynxSfJE^PugeKfUqgmE\\?Qk_w|ZtFyq~gJ_aRKHgLYxq{JCXkFozWdP^svaUmz]ArCLox^{aNdC}exdPUPzFDTH]?FT@U[vqZxjsqWBS^?tZxwTsquwVcVL``CIfyeFzUP[Yu`VG}DHIF~UWIssaVoZMXyhQbxnwdhoKNelYeY@WZoFL|rEuP]tByEmSSI@e|fB^NGXpxQhwVQKKQ~]h@swqQ{RJp^CxQ[n|QKyCdtw{rX_KTm@[^\\g\\[UZWv_Zh`_cYZySVnU@tYeg]cxcKHf|]CZQohZ`K|FmHoji~ceipBM^W{Ncb[GRxYvDrfLfFpJIVmnVsCl_wcOYTIZSKcctI[FCqWT~`iWlt@zrx~eaQncpNIJMfPsmQ\\d@JsmreVdldVHJ`v[|zcQLacpAYOmYTCbcXawRaHhF}axEVobnrf|uQI]e`^Aii^`rMcjQ_\\wZ\\TNRuRfSdI^]^VoCubIE@LDXNAaTQsHwdSQeR|`mGndBzjj}whO|r?}hLEn[oSMG@{MYZzpVRxu`RphDNtwecuKBsn`jEPVaKttMpoFdHwh}vtDF_PkqgjZ^bsGySBb[yYGTS@MSzDzyeizmWHykcJ{{eeYa`]RkLfORsW]jMphCy`\\C~y}EFSOTxCfNZu[_uQ`RkncoTF?DtJa^nHZNm]CVMHS^riYEwKRc}axTBMWd]sjUOV`FeJ}zdDT`@uqINL|joJXAKjRz\\kYAxSpq@oJLBPvzNnlAuw}C[_At@{[~`Elh{NfgqERqEn|hWQT@A]bAgq^rAQb^^yaIH|[tQBxAxWDGdkDU^ZvvpB^F[PS_IpBlV\\`YUtrNVcIQNQe^thhQD@Q[ooeh^hPQJ^nqRAdzfbgHsTSqEOJpBLvlnnkEui{EM?RCbuM}_s|hsnfIP`VHS~mfEHO_h]HIJQ^oiGp~^wghHzeGNna~xaR@gxIYnnQ[?fQcX~GNR]jrKxLBGGx|clKzmdPQSSY?GQBVTtpGqfHHtFyUi[^VRWDvrN}cWghdKTt}iN?QYco~hByNr\\HtEeIGNNkTdR|q`XOiP_?h@Mm][DTEcg{e}R\\KZx{e`Nmb~wWREa[HZvjIwCdMPJ{c\\j[novDLGo`t}Spsnr`PpQDW?IORZFf`FQXGjpZxErTm^CAqsJN[woLwX}{i\\tFUSzhA_XAQjjXZYo}`nMkS|a`PPilIKHUmNyWz{zZqfedVWDMg}?_MCGqtJNdpOmgl}{`|sdXsnCg`CqIYxjLnA}A}isY}BCSLMTKKFW{^yJZuxzgysrXgEj`u?OmABXQknRootW]zyI}XRqY^HQAHHOlnDzYb[bnFas|E@HUbKwSHu[^lEnnNNqTyDvCLEpy?`NYUXwCKfQfWKynit~GgWNogs}Q\\yyAA[veAY{^iAhQj\\aHrrHDPfDNj\\@RSf}glTSNnlJLC{zG{m?SdwTtDb\\x]nkcBEy`SzqQ~T`@Hun@RMj|?sHs^gKu]GckVEFtycLYE~cpkyB|vdd_]VaZXoDA]W]Wqmve]zIGgnIFQ|HNnWOQVYsPLrmqBKRL}ALjghR@tD\\xlBPeZ}GvPc]~fJEDsYwzUh\\P`pb?q?|la^eXCwHGjlxszVBR`BeZn[NTRb\\IVphrajHfdaF`fIrrG@xJudQOpCy|Grp|IteWSwTCQC|tA~`XagHGmnjqxsph`QxX~TNHVD{HvMbhqLDyqgYaxNRpCBdNuEQOsBr{`xpyVh\\ChSbAHA}m@~QkSW_eXvffNXJQ_huM~am[NBxa^TJqgwitdoT`syjggBgzwrH@WDxv@w_UUTSz@r?CKwZr{x}e|prIar[XwCvDKJztuPmdlUz][xGse]_D~GqiWxZXrfFaw_xj?ECY`UCGqran`J_AERBy~Rnq^ipdqTMp[aVGe`~]\\WfTuJt^VRHWrRo?~hUDpXXw}VIuWcMfO?oZChoOZJFByCy?_kgnN{mze}LTWjRLFgFSpKZnfeXe\\kr\\x{kaot[_R{fIXEdxjhsxii@xk?IDaW^Z}OI`qbwCZSHn|L|jMFHWZUpsw\\?fG}i[_kV`XG`}{JGufEIjiaOumF{BuEThOb[]SZMwvlfv\\v?gTQloAjoMn{l}bqbcWzVBedL?xF[yU?k]hSKD}wbIZSsMYyHBY[ZkJwTDdaRUUTijo~enVjyPAgwZoC\\Wdvxu|LhTHglybrISaSi}LKaTMTgaEzwLcuXWWlkqAs{VsRsYQj?hlZB\\Fp]{]r?~FFw~?w????[^~{^{Bb_N~p}N~o?M@o?Np~wFB~bb~{[Po?M@}Np~po?@~pp}?M?w?wFw~~w'}}}
comment:32 Changed 6 months ago by
py3 without this patch and no canonical labeling
'~?Ex???C^ckeoLON?T_P~FHYklbWZBU[@zE@VT?bp~FJclUZJWuZBWYlXoFbuKAlVT?{Pw~`ZqxJRYrXZ@nXkLa[tYr_pfbuKDTUji_]NC]NFUj]VJcZLjLeqEr]rXkCy[tYlOpwrpw{AjTTitWFaNwb}GyvclxJ]PlXZUUtcLzB]ovkCxjMYregWruK|bN?iiyimij?fTUqsvwpwuswvTU}@nolfWutS{Rk\\TkZUailLw~CxkBWvT{J[[wAvFwZRihkAilLw~CxlFZEyn`Zbf[fa\\bilbYuqRijXYZ{W|_Uw~BY\\TLlOL}DkzEuif_WuswvTU}DWBWvT{J[[yNwfTUqsvwp{dhZb{LhtSvXZELlMLtTnbWZ@nolfWutTjMAilLw~Cxk]p_{Rk\\TkZUiygAvFwZRihmNF{E~Au\\bZT]VHYfTUqsvwpuZJWijR]NpMZZL`kWuswvTU}EjU[Fa\\bilbYs{]p_ZEyn`ZbfIt\\S?vwUrkZYjwbp~DTYZp}HrXZqxJULlMLtTn`lXkl`kZi}DmM[ZuZBW{Rk\\TkZUrejU[AvFwZRihnE]NWoRijXYZ{WyilVT?{Rk\\TkZU}NC]NFUw~BY\\TLjTnJdqLb\\VolprerYrXk`nolfWutSuZuZL_fTUqsvwprhrTitBEufEyivpbpfbpwDTYZp}HrYjTTitWELlMLtTnbpF{P~C^pMptUplYlxJ]QvcijR]NpMZLjJYqukavFwZRihkvkLzB]oLb\\VolprhrU[tfLOfTUqsvwpwruK|bN?L}DkzEuitT\\TVTT_^oF{@~??BbFHHh@tOB}??^~w?M[TK[dIQ?^~~{???Ik`qcpc`r}??^oF{@QBqRajGp????~~oF}QiBxBbEc??@~??N~|bHhI_xrGB~~????B~chKO{dS[?~_NwB}??KXLHSFMXGwB}??^~w?wpqQYO\\Tq?N~~}???KdHaFcibdc~_?F{@~?@rahbchQ\\_???F~}?~ik`qcpc`ug??F{??~~xIgNcMKYPwF~}????F}cFcfDUPaj?~_NwB}??XIRCNHTFG~_@~??N~{?iqFIREQFxJOB~~~_???wpqQYO\\TXZF{??~_NwAQiBxBbEdkL_???^~wB}FMIeMQdHYr_??Nw?@~~s_{cwiqKRuKF~}????F|bHhI_xrGji_^oF{@~??HIgNcMKYS]Nw?^o?B~~?KXLHSFMXMVHY?^~~{???S_{cwiqKZLdk^o?B}?~_BbFHHh@tUrWZ????~~oF~HQW`xIgwtYr_??Nw?@~~ik`qcpc`rpzEB~~????B}FMIeMQdHTiygF{@~?^o?AcFcfDUPbwbp~?B}??^~wBHQW`xIgwlx[dg@~~~o???pcsdO[xcZUZJW~_?F{@~?Ik`qcpc`r]rWZ????~~oF{wpqQYO\\TMYlXo??F{??~~oxpSpqShMK{]p_~~o????~qTO^G[WsiilVT?~_NwB}??@rahbchQ^FaNFb_Nw?@~~_IO]Q[TXEItZqx[_B~~~_??AQiBxBbEcuZUZLc~_?F{@~?XIRCNHTFBXnXku????^~wB}pcsdO[xcfRejTi??@~??N~{wpqQYO\\TbpfbpwF~}????F|TcMSeKcNTiitYkB}?~_Nw??iqFIREQF{P~C^pF?^o?B~~?QTO^G[WsdnHZqU{_B~~~_???M[TK[dIQukljJYq^o?B}?~_EKeciBfK`nWZuE|_???F~}?~s_{cwiqKXrU[tfLO??Nw?@~~xIRCNHTFKXzE]pf_^~w????^rbFHHh@tTTVTTtTWDVElLlnCz}?~_Nw?@MildhnpbZ]B\\U[lp_Nw?@~~_KZY[Zij^BpTfWtjWu?~~~w???L}DkzEuicxZTZWr^b}??^oF{@wfWyjWulAtlb{ExtS???^~wB~TUe{^a[u?vM{JYmLk??^o?B~~ZEyn`Zbf?peuszpTU~~w????^tmNoufTRWEKuuf]Iiv}?~_Nw?@TUe{^a[ub}IkzElZEoF{??~~oBWvT{J[[zciwthllwf?N~~}???NCzFTZEtlcUlk^_vMi~o?B}?~_HtTklL}K]oLn@mjMUwo??@~~_NyvFwZRihliCxZTZWr^_??~_?F~}Z{JXuLlTN?LrnAujbZ^~w????^{ZY[Zij^Ak@Yup}B[yj~?^oF{??ZEyn`ZbfP~@m\\wUt[ZW@~??N~{@MildhnpbxJSxZTZWr^_@~~~o???lp}EsyiZklajbUeuva\\~??NwB}?plhpmil{ZBWpeuszpTU_??B~~?^r^`ZMplijU[FajMpjUpk??~_?F~~TUe{^a[uNWoLn@mjMUw~~{????N~a\\bilbYtVT?LrnAujbZ^oF{@~??DmNoufTR[]Nwiwthllwf?Nw?@~~_B^`ZMplinJclWrZY\\wijOF~~~???CyiuUe~EMrXZBZoZirdmN}??^oF{@TUe{^a[uuZBW{TXuLYuL_??B~~?^{ZY[Zij^BTjM@Yup}B[yi??^o?B~~{Rk\\TkZUfbuKCxZTZWr^b~~????B}uLt^AvFMTiygBZoZirdmN}?~_Nw??Z{JXuLlT{Pw~a[lilkXno?~_?F~}?ijR]NpMZJ]VHYUlk^_vMi_N~~}???KZY[Zij^BYrXZEKuuf]Iiv}??^oF{?uLt^AvFMLzL`kExv`ZTpl_??@~~_N~a\\bilbYu[tYr_iwthllwf??F{??~~tmNoufTR]K{]p_{TXuLYuL~~w????^xtTklL}K\\TUji_]IkzElZE~wB}?~_?Fa\\bilbYvpwbpwytlb{ExtS@~??N~{?lp}EsyiZUj]VJcZ]B\\U[lp_N~~}???EpmjwUwxrXlXkuOvM{JYmLl~??NwB}?L}DkzEuier]rXkCxZTZWr^_???^~wB~MildhnpbfRejTiEKuuf]Iis??~_?F~~bZRb\\TZwpwrpw{AjbUeuva\\~~_???@~ijR]NpMZTYilUj?fJYjZEZ{^oF{@~??KZY[Zij^FaNwb}G}Kuuf]Iis@~??N~{@wfWyjWulU{dnHZqExv`ZTpl_F~~~???DTYZp}HrXlXZUUtc{TXuLYuL~o?B}?~_DmNoufTRXnWZuE|_iwthllwf???B~~?^upmjwUwxsxjMYregLn@mjMUwo?B}??^~{yiuUe~ENE]pfkXwAtlb{ExtV~~????B}Z{JXuLlTiiyimij?EcxTRAwRQXKeRHcqYmLYZZ]Hv{@~?^o??fSohf?uTHcqXKeRHZ]B\\U[lp_Nw?@~~_CjAR[TCouRHcqXKeRwirkYtkZ?^~~{???DPKwdBQ]ERHcqXKeRMUtUuKvw~_?F{@~?BAwiBSsgfHcqXKeRHUlk^_vMi_??B~~?^o[BSpMT`iQXKeRHcqR[zoliwuo?@~??N~{AYSLocybaRHcqXKeRbLlhvail~~o????~_CyeDKwEqeJDapWkUMKuuf]Iiv}?~_Nw?@FiHfCgYRokUJDapWk^DU\\bUlbWB}??^~wBcomI_tLIHkUJDapWkYmLYZZ]HoB~~~_??AqHhOvARiMEJDapWkUItlb{ExtV}??^oF{@kB_YeHqkLPapWkUJDau{EykxZb???F~}?~lOEcxTRAwRKUJDapWkXquiupe~??@~??N~{{AT`HmIaWYpWkUJDapLrnAujbZ^~w????^tWCjAR[TCoudQhSiTIclZW~@m\\T~_NwB}??P~EDpSEhhPMdQhSiTIcZf]DlVEu?^o?B~~?[dgfSohf?uTQhSiTIdQfJYjZEZ{?N~~}???JJW[BSpMT`iSiTIdQhSimLYZZ]Hv{??~_NwBWZDPKwdBQ]EdQhSiTIdbLlhvail???F~}?~lXoHhOvARiMITIdQhSiVajMpjUpk??~_?F~}]p_EcxTRAwRSiTIdQhSev_vTfJ[^~}????F|VT?iHfCgYRofB`ow[MFB[zoliwuv{@~?^o?ANF{HhOvARiMB`ow[MFBdVElLlnCw@~??N~{@qxJR_YeHqkLOw[MFB`oxbLlhvail?^~~{???UZJWdWQZageEfB`ow[MFEv_vTfJ[^{??~_NwBXkL_YRdTKJ`K[MFB`ow[{TXuLYuL_??B~~?^ujU[@Mh`RM@kgw[MFB`owlZW~@m\\T??Nw?@~~fbuKEDpSEhhPKw[MFB`oxMUtUuKvw~~o????~it\\SBAwiBSsgfcqXKeRHcZ]B\\U[lp~oF{@~??NC]Nw[BSpMT`iXKeRHcqXHquiupe~?B}??^~w@ZqxJTPKwdBQ]FHcqXKeRGlZW~@m\\T?^~~{???LjLdkBQ[ih`[HkeRHcqXKeKuuf]Iiv}??^oF{?ZuZBWRQ`mCfS[XKeRHcqXB[zoliwuo???~~oF}[tYr_dWQZageExKeRHcqXImLYZZ]Ho?@~??N~~E]NWoCyeDKwEqkeRHcqXKfajMpjUpn~~????B~TTiygB_YeHqkLPSiTIdQhTwirkYtkZ~_NwB}??]NC]NFEcxTRAwRIdQhSiTIdjZFwLrigB}??^~w@Ylx[mPLIEwQ\\PoiTIdQhSiZ]B\\U[lp_N~~}???ErYrXk`Mh`RM@khSiTIdQhSZf]DlVEu~_?F{@~?Er]rXkCjAR[TCotSiTIdQhTMUtUuKvw???F~}?~rhrTitBAwiBSsgeiTIdQhSipeuszpTU_?F{??~~{]K{]N?iHfCgYRoidQhSiTIimLYZZ]Hv~}????F}jTTitWAYSLocyb_MFB`ow[NMUtUuKvw~_NwB}??]G~aNwbqkHLpSRBOw[MFB`o}Kuuf]Iis@~??N~{?lxJ]QvcEcxTRAwR@ow[MFB`r[zoliwuoB~~~_??@lXZUUtcomI_tLIH`ow[MFB`~DU\\bUlb^{??~_Nw?vkLzB]oCyeDKwEq_w[MFB`o|VElLlnCw???^~wB~MYrekxiDPKwdBQ]CMFB`ow[Mu{EykxZb??Nw?@~~wruK|bN?[BSpMT`i@ow[MFB`tjZFwLrin~}????F}ijiiyikBXXTfek^dMildhnpbk{brTVFuBQ[ih`[HimLYZZ]HqljXbfmUrEufEyivotuPrtfcjHtKIXoLdLn@mjMUwpzdFTzJJSvwUrkZYjqYi|c]q]dWQZageE}IkzElZEqq]Y{g}pVwfWyjWulNI}S\\jkktCraSLHwXquiupe~?bzMTdUtNTThnFwfLl`yqjxLW}DpSEhhPLYup}B[yiFHVkYuRs\\kZi}DmM[jblZMo|q[BSpMT`iExv`ZTpl_LWxzXqTuTmNoufTR[]rkxFdZTLIEwQ\\PpbLlhvail?kfenINkTtThnFwfLmRTVkbuRpMh`RM@kjEZZRnDTZFYprurcjklb\\Volprl`yqjxLW|PKwdBQ]FpTfWtjWvq[d]pjXNP~CzFTZEtjVXFNU]QnAwiBSsgfTpjRZZpMk`zdFTzJJU\\TZJR^bEjblZMo|qRQ`mCfS[JUuNoZfT\\_uUTXxjFxJ[^`lMierqndFYzJJ_YeHqkLPlwLtXqvEt@UtkprvJWZ{JXuLlTbu\\fG{jYbQ[ih`[Hhquiupe~@wC^XqkiuhzEufEyivpXxFeimNkdWQZageEexv`ZTpldWAljXbfmUpkZi}DmM[]T{gzVXXdWQZageEjUuNoZfTW~aq]Y{g}pVMildhnpbbu\\fG{jYwVDOYedCr[zoliwuvHYbzMTdUtNJ[^`lMiet[\\jXuFmPMh`RM@ki[lilkXnpXZBUM]u[d\\fEufEyivpqYi|c]q][BSpMT`iT[Ysuu{Rl`k[d]pjXNPr^`ZMplilfc]Yiw}qge[Q`hNBbLlhvailYr_uUTXxjFxTThnFwfLemqM]k{dYYSLocybbpTfWtjWu]p_N[gynXXY}HuMiuLj\\`yqjxLWwsfIiWVAXlwLtXqvEji_FmS\\VkklTmNoufTRZVXFNU]Qmge[Q`hNAZf]DlVEubp~C^XqkiuhwvwUrkZYi]T{gzVXXRQ`mCfS[T[Ysuu{RmVHYTlZK[|quRijXYZ{W|`yqjxLWz_YeHqkLREZZRnDTZXklbcjuLZHyNTUe{^a[ubu\\fG{jYqkHLpSRBUv_vTfJ[]rWZDc{txP|anEufEyivojblZMo|qEcxTRAwR]IkzElZEujU[BUM]u[d\\fpMptUplZXxFeimNkHtKIXoLdJUuNoZfTRpzEBXXTfek^cuLt^AvFMxLT]qNXNWVDOYedCxquiupe~AlVT?Yprurcjke~Au\\bZTT[\\jXuFmUDpSEhhPLlwLtXqvFwbp~@zdFTzJJUilLw~CxlXxFeimNk[BSpMT`iRdlTlbL}DnJclZJIk{tb{kZY[Zij^C]rkxFdZUge[Q`hNAlZW~@m\\TZUZJWbzMTdUtNLb\\VolpremqM]k{dWsfIiWVAZEZZRnDTYZuZBWTlZK[|qu]HuMiuLj]RTVkbuRqYSLocyb_vM{JYmLlMYlXoURrVdFuItmNoufTR]o|XT{ek]T`HmIaWZTpjRZZpMpfbuKFHVkYuRs]\\TZJR^bE]T{gzVXXHtKIXoLd]IkzElZEyilVT?bzMTdUtN]HuMiuLjW|fXqNIuj_YeHqkLRpTfWtjWvw{Pw{^cjuLZHyMlp}EsyiZxLT]qNXNBQ[ih`[HdjZFwLriitZqx[dc{txP|alkZi}DmM\\XxFeimNkRQ`mCfS[Ln@mjMUwurYrXkeqqjNLW~GvwUrkZYjkNUT^HjFHtKIXoLdExv`ZTplbXnXku@jFNZMQmrMildhnpbYzGxyrqTqkHLpSRBXquiupe~Cy[tYlON[gynXXYwuswvTU}BqndFYzJMDpSEhhPNEZZRnDTZbpfbpwAljXbfmUqilLw~CxkjblZMo|qiHfCgYRot[Ysuu{RilTUjT_[d]pjXNP{ZY[Zij^Eo|XT{ek\\LIEwQ\\PpMUtUuKvw{P~C^pFuUTXxjFx]HuMiuLjT[\\jXuFmSjAR[TCovEZZRnDTYlxJ]QvcYprurcjktThnFwfLbqndFYzJGsfIiWVAWvM{JYmLkukljJYqIuleM]xZDmNoufTR\\fc]Yiw}rAwiBSsgfwirkYtkZLzB]ovk@zdFTzJJTkZi}DmM\\FkzMPxUtHtKIXoLdT[Ysuu{RhrU[tfLObzMTdUtNRijXYZ{W}RTVkbuRtPKwdBQ]DlwLtXqvFbNWruK{Aq]Y{g}pUZ{JXuLlTYzGxyrqTm@iWfIotDjZFwLrilTVTTtTWCeRHcqXKerqNLT[^X~?^oF{??MK[cecFTZJIk{tb{`hMTSomCseRHcqXKdjkbfjNHU?~_?F~}?BfDRFHQciuleM]xZA\\RAe[BXQRHcqXKeRqYi|c]q]?^~~{???Ik`qcpc`rvIMjuUUkjAR[TCoscqXKeRHcfd^IMtuU^w?@~?^oDGNHMIkbEq]Y{g}pVSRMHOsf`CeRHcqXKfW]ki}RUM???N~{@~ci_}OwphP|fIqjYfkJagLRQaWQXKeRHcqT[\\jXuFmO?@~??N~|bHhI_xrHqTzElc|F[BSpMT`i?cqXKeRHcpzMrc]Tl^~{????N}QcpBqTPpjFNZMQmqedB[HMgw?WkUJDapW{einXFkfnwB}?~_?BERQT@reQq]Y{g}pURiWSr_ZIbkUJDapWk\\`yqjxLWwB}??^~w?wpqQYO\\StbflfHVXiHfCgYRo{bDapWkUJDjkbfjNHU?~~~w???qSeG]QiM[d]pjXNP{JagLRQa\\cWkUJDapWiwzUrkN[nw?@~?^o?[wiWxISc|qbi|ddiedB[HMgwu@apWkUJDa]T{gzVXX???F~}?~ik`qcpc`|ddU]Yp}R_YeHqkLPiBDapWkUJENXu[bqli??^o?B~~ci_}OwphIuleM]xZ@hMTSomCpwBDapWkUJErqNLT[^X~~_???@~h@xHpTcWp|fIqjYfhUCewiH`ikAdQhSiTIc]T{gzVXX~_NwB}??XIRCNHTFDZUrFN[lcjAR[TCouNwhSiTIdQhPzMrc]TlOF{??~~oAjG[hKXG]q]Y{g}pV`[T@iYSRxJTIdQhSiTHVFYu\\`zc?~~~w???MK[cecFTP|fIqjYfa\\RAe[BXTdkSiTIdQhSmRTVkbuRv{??~_NwAQiBxBbEctbflfHVX[BSpMT`iZBWhSiTIdQhU]Pxijbz???@~~_Nw[wiWxISfcjuLZHyNSRMHOsf`Yr_hSiTIdQhL\\c[|XxIo?B}??^~|GNHMIkbFXXTfek^cedB[HMgwNWoSiTIdQhSl`yqjxLW~~}????F|bHhI_xrG]xPt]qqtEcxTRAwRIyg@ow[MFB`pjkbfjNHV~?^oF{??ci_}OwphFmS\\VkklYaXpIEc{K]NwMFB`ow[MFd^IMtuUOF{??~~oBERQT@reQNkxUTZS{edB[HMgwx[dgw[MFB`oxkNUT^HjF?^~~{???S_{cwiqKTZUrFN[lb_YeHqkLQrXZ@ow[MFB`qNXu[bqlj~??NwB}?MK[cecFT[d]pjXNPxUCewiH`mrWZ@ow[MFB`pVFYu\\`zc???N~{@~qSeG]QiMURrVdFuIphMTSomCrTjM?w[MFB`oxXxFeimNk??Nw?@~~ik`qcpc`uk[|kxIzHMh`RM@kg{]p_MFB`ow[M[einXFkfn~{????Nw[wiWxISfXXTfek^d`[T@iYSRTiygERHcqXKePVFYu\\`zd~?^oF{??h@xHpTcWlWxzXqTu[JagLRQa^aNF{XKeRHcqXJNG{tTp|_B}??^~wBHQW`xIgw]xPt]qqt[BSpMT`iJ]VHYqXKeRHcqPzMrc]TlOF~~~???BERQT@reRXXTfek^dSRMHOsf`ZUZJWqXKeRHcqL\\c[|XxI~w?@~?^oAjG[hKXG]NkxUTZS{LHqieDoeLzL`kXKeRHcqXMRTVkbuRo???~~oF{wpqQYO\\SjYuWxzdkRQ`mCfS[RejU[ERHcqXKeRW]ki}RUM??^o?B~~BfDRFHQcuRrVdFuIxUCewiH`mK{]p_qXKeRHcqFd^IMtuU^~{????N{dSFqFELJcjuLZHyMRiWSr_ZIiit\\S@SiTIdQhTFkzMPxUt~_NwB}??@rahbchQW}rdXTlRr_YeHqkLRpwbpwyhSiTIdQjctTzG|c{?~_?F~}?h@xHpTcW{d]pjXNPphMTSomCqtZqx[ahSiTIdQirqNLT[^W?~~~w???ci_}OwphURrVdFuIssgZ`HtFBXlXkuPSiTIdQhTkNUT^HjF~_?F{@~?XIRCNHTFLddU]Yp}PMh`RM@kguZuZL_TIdQhSiTL\\c[|XxIo??@~~_NzERQT@rePjFNZMQmrIocvDPKLfRejTiAhSiTIdQg{jxPumqq??^o?B~~MK[cecFTFmS\\Vkkl[JagLRQa]NE]NF_IdQhSiTId[\\jXuFmV~}????F|TcMSeKcMjYuWxzdkiHfCgYRotYilUj?B`ow[MFBzBtdVqYp~wB}?~_?AjG[hKXG^cjuLZHyMedB[HMgw{P~C^pFB`ow[MFBiwzUrkN[_F{??~~oCdSFqFELJXXTfek^dIocvDPKLU{dnHZq@ow[MFB`rqndFYzJGB~~~_???M[TK[dIQtbflfHVXEcxTRAwRLjJYquk_[MFB`ow]rqNLT[^X~??NwB}?WqYQgM[qIuleM]xZKJagLRQaXnWZuE|_B`ow[MFBpzMrc]TlO??@~~_N|GNHMIkbC|qbi|ddiRiWSr_ZIfLXrU[t?MFB`ow[NqYi|c]q]??Nw?@~~xIRCNHTFG}rdXTlRtPKwdBQ]FE]pfkXw?[MFB`ow\\jkbfjNHV~~_???@~MK[cecFTURrVdFuIv?tKRdWYdTVTTtTWDfc]Yiw}oYRdTKJ`K[WxHLGMiiwthllwfRijXYZ{WxKeRHcqXMqqjNLW~HjkbfjNHURiWSr_ZIBfDRFHQcln@mjMUw{ZY[Zij^CeRHcqXKdUtkprvJWxLT]qNXNQkHLpSRBTUOxQWqO~ajMpjUpkvwUrkZYjHcqXKeRHN[gynXXY`xVqbl\\dege[Q`hNBQBqRajGpfJYjZEZ{]HuMiuLjXKeRHcqXLc{txP|akZBtdVqYp{JagLRQa[dSFqFELHYup}B[yjTUe{^a[ucqXKeRHcp|fIqjYf_TpulfW]xM@iWfIotEKeciBfK`m\\wUt[ZXkZi}DmM\\HcqXKeRHxI|bUq]b_bu\\fG{jYhhOvARiMKdHaFcibeKuuf]IitZb{LhtSvHcqXKeRHYprurcjk_[einXFkfa\\RAe[BXRERQT@reREZZRnDTZTUe{^a[uWkUJDapWuRrVdFuIw}o|XT{ek]ge[Q`hNA[WxHLGMi{TXuLYuLlb\\VolpreJDapWkUJUM]u[d\\fcYzGxyrqTwVDOYedC{dHaFcibdVElLlnCzpMptUplYpWkUJDapxI|bUq]buPVFYu\\`zcedB[HMgwBfDRFHQcjUuNoZfTXtTklL}KZDapWkUJC|qbi|ddjk@xVqbl\\ddoLRCxUEgiqFIREQFZ]B\\U[lpj[^`lMieuJDapWkUMqqjNLW~HiC]rkxFdZSYRdTKJ`LHT@{`pbQfJYjZEZ{E~Au\\bZTUJDapWkUIljXbfmUo{ArqNLT[^XIocvDPKLh@xHpTcWexv`ZTplkZY[Zij^BDapWkUJENkxUTZS{j?NI}S\\jkkqkHLpSRB[dHaFcibatlb{ExtTkZi}DmM\\QhSiTIdQTlZK[|quP~C]rkxFdZVAwiBSsgeiqFIREQFLrnAujbZRijXYZ{WyTIdQhSiTc{txP|anclIwzUrkN[a\\RAe[BXPpbccs_yi[lilkXnolp}EsyiZhSiTIdQhP|fIqjYfjJWxLT]qNXNM@iWfIotHIgNcMKYTVElLlnCzEufEyivpQhSiTIdQYprurcjkzBWk{brTVFuTCraSLHwOxpSpqShMKuuf]IisvwUrkZYjQhSiTIdQxI|bUq]blXoL\\c[|XxIssgZ`HtFDGNHMIkbFpTfWtjWvTUe{^a[uhSiTIdQhZJIk{tb{buKEo|XT{ek[YRdTKJ`KpcsdO[xcZ]B\\U[lp}HuMiuLjYTIdQhSiPzdFTzJJTVT?YzGxyrqTtCraSLHwXIgNcMKYPm\\wUt[ZXZb{LhtSu[MFB`ow[N[gynXXYpw~_{jxPumqqedB[HMgwWqYQgM[qT[Ysuu{Rb^`ZMplihow[MFB`qNkxUTZS|qxJUo|XT{ek\\oLRCxUEhQBqRajGppeuszpTUrijXYZ{Wr`ow[MFBaljXbfmUqrXZC]rkxFdZUT`HmIaWY[WxHLGMiZ]B\\U[lptThnFwfLb`ow[MFBfHVkYuRs^XkL`VFYu\\`zcLHqieDoeqSeG]QiM]IkzElZE{ZY[Zij^@ow[MFB`qq]Y{g}pUtYr_k{brTVFuCyeDKwEqdUOxQWqOytlb{ExtVpMptUplY[MFB`ow[YprurcjkfbuKFHijuPzHzAwiBSsgeFMIeMQdHfJYjZEZ{Lb\\Volprb`ow[MFBeqqjNLW~HUji_IwzUrkN[kJagLRQa\\GNHMIkbDlwLtXqvEZ{JXuLlTqXKeRHcqLWxzXqTu^C]Nwk{brTVFuM@iWfIotKdHaFcibcxZTZWr^ailLw~CxlcqXKeRHcN[gynXXYj]VHYbu\\fG{jYtCraSLHwUKeciBfKatlb{ExtVEufEyivpcqXKeRHcuUTXxjFxLjLdkL\\c[|XxIphMTSomCqjG[hKXG^EZZRnDTYuLt^AvFMqXKeRHcqP|fIqjYfb]rWZFHijuPzHxLIEwQ\\Po[WxHLGMiLrnAujbZ]HuMiuLj[eRHcqXKaljXbfmUq[tYr_uFjInctbqkHLpSRBOxpSpqShLVElLlnCxZb{LhtSvcqXKeRHckfenINkTwrpzE?{jxPumqqRiWSr_ZIci_}Owph]IkzElZExtTklL}K]RHcqXKeRcjuLZHyNTTiygC]rkxFdZToLRCxUEgFMIeMQdH{TXuLYuL}HuMiuLjTQhSiTIdS^Xqkiuhzpwbpw~HijuPzHwYRdTKJ`LQBqRajGpUlk^_vMij[^`lMietQhSiTIdVHVkYuRs\\Ylx[mQrqNLT[^WedB[HMgwci_}OwphLn@mjMUwupmjwUwxqhSiTIdQiq]Y{g}pUuZUZLcuFjInctbcyeDKwEqkdHaFcib`m\\wUt[ZWvwUrkZYiiTIdQhSiuUTXxjFxEr]rXkBVXFNU]QmT`HmIaWYpcsdO[xcfJYjZEZ{RijXYZ{WtQhSiTIdRUM]u[d\\e\\MYlUgFd^IMtuU[JagLRQaXpbccs_yjEZZRnDTZbZRb\\TZwTIdQhSiTFmS\\Vkkl[]K{]N?TpulfW]xTCraSLHwTUOxQWqO|VElLlnCyilLw~CxkiTIdQhSiTlZK[|quTYilUj?uFjInctbhhOvARiMDUOxQWqO{xZTZWr^bEufEyivoFB`ow[MFxI|bUq]b}G~aNwbiwzUrkN[hUCewiH`kdSFqFELJEZZRnDTZwfWyjWulB`ow[MFBzJIk{tb{dnHZqU{`xVqbl\\dcYRdTKJ`KFMIeMQdHLrnAujbZTThnFwfL_w[MFB`ozUM]u[d\\dlXZUUtck{brTVFuWVDOYedCuKeciBfKfajMpjUplZb{LhtSuFB`ow[MFTlZK[|quE|`nWZuANXu[bqliRiWSr_ZIh@xHpTcWt[Ysuu{RepmjwUwxo[MFB`ow[|qbi|ddjMYrekxiFHijuPzHyge[Q`hNBchKO{dS[Z]B\\U[lprijXYZ{Wow[MFB`o{^XqkiuhzE]pfkXwBVXFNU]QloLRCxUEg[WxHLGMiUlk^_vMie~Au\\bZTOw[MFB`o|c{txP|amijiiyik?wpqQYO\\TTpjRZZpMuUTXxjFxRijXYZ{WphMTSomCv{@~?^o?ArqNLT[^XHcqXKeRHBfDRFHQcln@mjMUwtZUrFN[leLlMLtTn_fSohf?uS?~_?F~}?YzGxyrqTqXKeRHcqQjG[hKXG^pTfWtjWu]xPt]qqtL}DkzEuiqkHLpSRBOF~~~???FHijuPzHyRHcqXKeQS_{cwiqKXquiupe~Dc{txP|anpMptUplZSRMHOsf`~_?F{@~?Fd^IMtuUXKeRHcqXGci_}OwphJUuNoZfTW}rdXTlRtTYZp}HrZAwiBSsge???N~{@~uFjInctbqXKeRHcqOWqYQgM[qExv`ZTplmQnWtkfgzWvT{J[[xoLRCxUEg??^o?B~~TpulfW]xQXKeRHcqOXIRCNHTFKXllM{TTjUM]u[d\\dZb{LhtSuedB[HMgw~~o????~pzMrc]TlXKeRHcqXGBERQT@reREZZRnDTZXNL]S^WjijR]NpMZCyeDKwEqnwB}?~_?FHijuPzHxapWkUJDbFMK[cecFT]IkzElZEuk[|kxIzJWvT{J[[yge[Q`hNA?~_?F~}?uFjInctbkUJDapWk]RHQW`xIgxTpjRZZpMxI|bUq]b}HuMiuLj[JagLRQaWB~~~_??@jkbfjNHUpWkUJDapk_[wiWxISdYup}B[yi]xPt]qqtfTUqsvwphhOvARiMNw?@~?^oAmMtkzBvHapWkUJDbkAjG[hKXG\\lwLtXqvFkkirrUNqUw~BY\\TLm@iWfIot???@~~_NxxVqbl\\ddapWkUJDatAQiBxBbEdMUtUuKvwTlZK[|quE~Au\\bZTPhMTSomCo?@~??N~}NXu[bqlipWkUJDapN?h@xHpTcWexv`ZTplg}rdXTlRuLlMLtTnaT`HmIaWZ~~_???@~k{brTVFuKUJDapWkTWEQcpBqTPpYup}B[yijYuWxzdkZEyn`ZbfQkHLpSRB^wB}?~_?@xVqbl\\dedQhSiTIdF{Ik`qcpc`r[zoliwutc{txP|am\\TZJR^bF`[T@iYSR?^o?B~~?PzMrc]TlYTIdQhSiVHYMK[cecFTRdlTlbL}G}rdXTlRqvFwZRihkfSohf?uS?~~~w???TpulfW]xSiTIdQhSjJWci_}OwphT[Ysuu{Rek[|kxIzMLlMLtTn`oLRCxUEh~??NwB}?xLT]qNXNSiTIdQhSl`k@rahbchQ[XllM{TTnHVkYuRs[vwUrkZYjSRMHOsf`???F~}?~u]PxijbzITIdQhSiRU[DGNHMIkbFpTfWtjWvkkirrUNqijR]NpMZHhOvARiM??B}??^~zVXFNU]QmdQhSiTIc]p_WqYQgM[qLn@mjMUwrvIMjuUUna\\bilbYsYRdTKJ`L~~_???@~uFjInctbsiTIdQhSd\\SAQiBxBbEcZf]DlVEuN[gynXXYj[^`lMieyaXpIEc{N{@~?^o?@jkbfjNHU[MFB`ow[bp~BERQT@reQjbUeuva\\Fu[jIli]L}DkzEuihhOvARiM?F{??~~o@xVqbl\\dcw[MFB`oxqxJTGNHMIkbFEZZRnDTYjYuWxzdkfTUqsvwpm@iWfIot?F~~~???Eo|XT{ek[w[MFB`oxXkl_wpqQYO\\Su{EykxZbxI|bUq]btThnFwfLhUCewiH`n{??~_NwANXu[bqli[MFB`ow[uZBWqSeG]QiM]IkzElZEzHxjqbzD]LlMLtTn_YRdTKJ`K???N~{@~TpulfW]xFB`ow[MFEjU[AjG[hKXG\\Yup}B[yitbflfHVX{Rk\\TkZUcyeDKwEq_?B}??^~|fc]Yiw}ow[MFB`ow]NWo@rahbchQXquiupe~EqqjNLW~HkZi}DmM\\`[T@iYSR~~o????~{einXFkfb`ow[MFBalVT?h@xHpTcWln@mjMUwuk[|kxIzHnolfWutVAwiBSsgf~?^oF{??TpulfW]xXKeRHcqXNC]NwqSeG]QiMRdlTlbL}BvIMjuUUlTYZp}HrXoLRCxUEg?~_?F~}?k{brTVFuXKeRHcqXDnJclKXLHSFMXDjZFwLrimqqjNLW~JEufEyivpSRMHOsf`?^~~{???PzMrc]Tl[eRHcqXKbYrXZAjG[hKXG^EZZRnDTZFu[jIli]ZEyn`ZbfBQ[ih`[Hnw?@~?^oBVXFNU]QnHcqXKeRGZuZBWMK[cecFTExv`ZTpldZUrFN[lfa\\bilbYtLIEwQ\\Po???N~{@~xLT]qNXNXKeRHcqXHrTjM?M[TK[dIRTpjRZZpMkfenINkTj[^`lMiexUCewiH`g?@~??N~~W]ki}RUNcqXKeRHcpfbuKCdSFqFELJpTfWtjWvqTzElc|FfTUqsvwpcyeDKwEqn~{????NxxVqbl\\dfHcqXKeRHTTiyg?[wiWxISfpTfWtjWvFu[jIli]{Rk\\TkZUm@iWfIotNwB}?~_?C]rkxFdZTSiTIdQhTw{Pw{]cFcfDUPalZW~@m\\TxI|bUq]bj[^`lMiephMTSomCoB}??^~wBctTzG|c{iTIdQhSiUj]VJcci_}OwphLn@mjMUwzHxjqbzDZWvT{J[[xLIEwQ\\Po?~~~w???k{brTVFuIdQhSiTIerYrXkeQcpBqTPovM{JYmLlkkirrUNqL}DkzEuicyeDKwEqnw?@~?^oEo|XT{ek\\SiTIdQhSZLzLeoKXLHSFMXHquiupe~BUM]u[d\\e\\TZJR^bFIocvDPKL???F~}?~l\\c[|XxItQhSiTIdSy[tYlOMK[cecFTWrZY\\wijRvIMjuUUmLlMLtTnbAwiBSsge??^o?B~~NI}S\\jkkidQhSiTIk]K{]N?TXBdHbHBt[Ysuu{RdZUrFN[ldTYZp}HrYge[Q`hNB~~_???@~TpulfW]xIdQhSiTIilTUjT_Ik`qcpc`xquiupe~FHVkYuRs^EufEyivoedB[HMgw~_NwB}??ZBtdVqYpow[MFB`o~aNwb}G{dSFqFELJEZZRnDTZkkirrUNq{Rk\\TkZUqkHLpSRBOF{??~~oAmMtkzBvGMFB`ow[MlxJ]QvcBfDRFHQcexv`ZTplek[|kxIzLTYZp}HrWYRdTKJ`K?~~~w???NI}S\\jkk`ow[MFB`utdlXZUPbHhI_xrHwirkYtkZTlZK[|quJ[^`lMie{JagLRQa^{??~_NwArqNLT[^WFB`ow[MFLzB]ovkDGNHMIkbEjbUeuva[]xPt]qqtZEyn`ZbfCyeDKwEq_??@~~_N{]rkxFdZSMFB`ow[NMYrekxiEQcpBqTPplwLtXqvFFu[jIli]fTUqsvwptCraSLHwO?B}??^~~HijuPzHwMFB`ow[NbNWruK{?wpqQYO\\SlZW~@m\\TkfenINkTe~Au\\bZTV?tKRdWYf~}????F|jkbfjNHUFB`ow[MFiiyimij?'
py3 without this patch but with canonical labeling
'~?ExH__gOWkwRGNvRBv?qFBBWHcsLb^sGQOUe_}rejchQkJC^GARlW\\@IpUAlDCFAplU[YI}QMYsqEBWr_TYx]AiIoZXcHzWyHuhVMTK{CGV^zVGGxICymlcuf^CGJ{KOTgBbVth?WeoQN??}\\rqZBx]rjaiX}qaqmeMTBkC{FA??hESePw@Am_lUhXedcAo\\wdGxugMiBQQ}kBF{Q}T_mI_Bp_~?tpWhMiXbQ^IjsWD\\loj|UQC@hi{YJrsyxinQ`ybF\\yJx{Bcyz|akU@yNlYU_fKt}xQ[nN}Y[C{aNoaRMedU~qDLSTMhJkXhxsEtiVYeqe^KGQIJy^lKVbHSyKolAdaKDevQTfLCA_^S^z]MWDSr}dMbMe{jECHU^MDG{QdL{dV|IDyH\\ZEbwkECO}uLOVIbOuoDYSpLHHTu]@zOxB`CPryhvD`hW}d|cUgJSNl}E^SK_FctfkvTNz|DpihjSUTM]k\\\\jl?NLbTXeNMAyUjWd\\{hcXo]XAEeByCZ]^~\\geTzqh@]^erkLYNtFEx[Rys|vCXGlFVBrmgukoYx`^e[J[EUyYFMbaartPyfreNrMqyEbDwErZXrKF|dskWbduZqOnDkifl}qnZndgqpLjOee|l?`ylvm{ZPUwRM]cInO{hCUMJ\\b|se_YVLAfvr_}JJNAajZgA}eKMlqkzbzwxvNrWtMT^YbAt^GzPO`[YX^}o^dCiyF^bxuI@GfnjIzpE_oW{\\mgM]]wDu{^er|IMrYEmj\\chjad|dQiTuBsm{{JHeiTY[ldZE^racrJGMEu^NKKTqsTV]iSLtXG^uYHMp\\ez`zX[yOLLtJt~MzXCxM??LjEBxzrBnrbDWxVGSxnqt_ylqvFkAzwQGWvT|wafzODSvK{|`}vqZcQztYtAzURcyliWm^Az[QZYqFwobOn[sVzNpdLuMNqE_fkLf~yP{T\\x@l_{nEhH[JHy\\I~`lq~rxKpmezvBWoDQnej`n|hLG^aBDMB_WtgFChuZtBwGpVSVDOXCbekEvJEbxfSu]Q_@aAG`AjvHzpvR`]yeJNAiGeVpH@?JWo_\\vxir@m@?aFMZafVCRV@{FqlY?rWF?MwyfW|Qv_FwM}\\SJAwat@GUiPjtcGVTPWp^QAKopzdJq}GVG_qaFCMNV?u}D]ZQGpY_WZs[Ey{Ma\\jWwRcBPVeZcqECWs|`Av_F}VBltyyHjgWIX^RJKapG?soPm?NuDl?p}uifgGtJcXN@}ni@xd`gJLMWm]CQeD]Z~QSC`}}XPPKIs`PNhFr_oO{\\XVrjBY?{`Gj@kvnCl~DYpWGltD\\{MsCP@JlzKySEjLkFESRxdVpQ{YKhb}`_ia_dVmzE{wPkmI[Dux\\cNVQ~N?ltLCgHKNEJhQieVI}Hx[tfTGdhb@i[jN?FZyB\\H?|BjZXhTdNpQoC|I?\\Kby@mIKrUjKWmMtN^SOD{zjYG~vRhk?`ZWrWuAxH\\AnvdmIG^\\o{vYrRc{Dca_WuWR{|eXXNQPx^ViGRDho_Ld`sRLdE`k?ZL{Qvwm]?ZtGnLSfx_fQgOXG~\\xhtMyhUgqS^qMS@mLZu\\vW]ts?IIHYiZ{@le{TFWxS|JDg|JRycQJKL~geszyGMKZX]^eoKGtkuFaJS{u_OvvsDN_\\y^CgoDAF]rD}|nic\\^aQ@BvT}Iwa\\s[BKqw|GrxMP^fz]NmIcAwkAsRhGUFtXOie~]SAoAwaxwMF\\TUHfzqj?RQ}@FwP}T@MC~}yM@kOkpm{xiJH}SQvd^iJHnPHKtDWdWaOcVv|EpjSk\\YJxcoVl?Niacz}WgLJU[RLy[SkOPQd]nMiRS`zqy{{uVDrKTeA~TyOWogL{sxBujXinx]uIUCyESv?EL|nbB`LtHiLpRn`ZddtKyKhFWIiCnbC}dRrPUZZ_KbEVjshSkkRHm@^\\lJvWE\\VLnk?hpV@f{zD}Qe_N@fPsQLFtMQHcl^aSqVQUbSbj]]SJxVonsHZj`QFDhvDUh}U?Z[VHafE[F[fOEI@]RxuFod[zlqQYzJ|_UfiuMpRKvzmOhr~hft_H?PWE@iM[ru^yvvn~RCe?nt[pWsGG?[X?Y|ZbJJS_}FPnLR}?}KskPPps~bk?G~t]skRMOdk{BhWluV_qqno_}hwm^s|no^s]OWeE\\io]bCAFiOBQT`|^kzOk}|?AbvfWcVwgOF}@iElc~z}~\\KkUJmLiDBY~nK_Bg`gVh[bP~hTNTQK|HpYpE}PgsZFkHWU@fF}NLWfoUN@RgrmpzUew`KTlysTvyBfFcnHxp@teK}q}bTHYAVBUxJTxrXYPSmRxdFm{ktkqJQYOQdd_w^FVfZSFl\\NaIsSfo`R|IZarXJkaRjmK]EWWn]?FjBqTgcc}ltxMSeXckcbOQqrUnN|@{t]OpQR]U`OOb]nIulLYs?\\txypDNnfHkgQv?_rm]eI\\Ks}Ahxk{SaUNJbjPVe]J`AvcerhVdd[]groGLSIqyv[][iueNiRM{@?zL`bZmhcllacHNF^S?[rFc~s`]`je~mmSWckNiIElH~}j~DJZHGxA?BjQQIGvJQbbo^R}[Y`bL{vnaGbLXAdXxYMa}\\TVgiqjeh@}u|_DbZU[FrSQmetmRw?}QlOikkLnzj_S@HeyTglFryMUTt~WNAMGc^E\\z\\xcaT@Pwr]pYU`yHy^GOKMJ]]_n[qhzZYv?cSFwVKxI{ykh~JqbklP_eIuQxFfNrDFKYiEzjnDcGjndhCUWLVH_rf?]{r?uRFCDf^~zl?TUZ\\qKYBhFpkVAizrusDqJ}AJvAakHxsNEfTOsuMOz@SKwLJwvBzk}RU@iR}IFxf[q]o~tcPs[{ldlIkSo\\KW|RBnByUZ[ZiSMA[gN|GPxbtxgHODzDlmYjPU]RD^k\\vBaKG]WLZ{zruGqFLmVTO_RyKdr{r`]WrL]C\\GHNMtT\\VABNex_idiQrgvnqk}VCsArE?bd@~iG`STZmQulnRO`j{^j\\idQENel]zCatnRSmCp@tAuUxZU\\bvCwQX@N?D~fsb\\eE@Iy}sf]X{J@uuTO[NtfdJOvyod@PUQKgy|n?[{ayTgVubtc]rzH~?_YKaR\\T\\}MeiRrMybnExEO]guG{bw]dPdUQIfxZS[TDjF~Le{JIA|WJuj@erX?vSs@dFW\\y]Zv[wpfSr]uAAXRudWSotGb}{iU?|capeu|kvSp[za]]hCCyHo~?zCpe`~EOU{fNzaUwnKjmBelmFs|yGRm?]ZrnRr?eoYcU`@@Sf?D_l{GpdM|z{X|ZsXe{JNhSshbN_JDtKp~x?BTlCVyw^ZTVCZaN}aJoZJZ?SM?nLyllVaQPwrEdFodE|{j{Sabu_HqVIdTDs@q^K\\\\dFzu`xXASUVUCWcz[j|eUYpC`dGYPUmiju{]FTyMXLcIafEShz]`uCATXzZUIALLZtxKrShmT{m`Kl`Mfrrpt?rBx`DxKoJmTu|EVUTwQbyJTZb_[V~SggRGljQAKOQNxvEzVamfYGQn@gW|}UE`y[W[hLamGJi@YzwxHfKW\\^_Yt}k@~RoqrLVDS[f]_kPKElJbpKPTL^YS~fVA?D^xlovbYzFTFeZEpSdTOM}vY`fVVhZOJl\\VPXqWqTX_dSyzknEgoafxRcemZxKq]dk[lzhtNs?K]_Re?F?C}b^XIeMzMLZq^qLB^KyUppeyE^AJPgvZzCUU@gWiBfN@|EeydUv]dJC^XfjQdRWWvzKSoTlmIrsEB?Zc?cT~fMuqQbuu~LLmQU|LCoJYTae]oeiAwGZLnCT~cdmjZBI_jtj[kjQjoCMYHUfnyZGFGBV{DAmzLTNX]M{IrU[trOKHfYpyHsLJ@T`Epb]Y~pB~bHg`kxZPVPvDtYLugANU^n?iAP}?NYBrxUZp~Bo^QBYZBWqTprU}FdNrMooAdQ?jp^]s^X|PsgpO`QjtZikThwb{GMRYqDrQg[VgHe[[xLJrNYxVovL{nC?N[]OEyRYQVS{FEwoSQ|~rxjXtXCT~fpkA_FBw|CsEoSiXOO]XtbxIG?????????????????B~~~~~~~~~~~~~~~~~~|HPb{uVf?o_BZQIGOSK~o]mg~v}T[Kl?XfY}iFEiww_MZhOLhGyeoK|}Kz^V@|~tbg\\GgrcHFAsbqmNArqDw~D@_\\_YBr^oHYyax~eP^`aW{dxFsjCfGctBOq_@NSrc]|~QFuAwMI]U{rVqXpLyOCUtaF]EjUUsWgM`WVll~rRawlU\\AuubKdTyWFGem|az\\Dy@EgTA[^W`SgtZJ\\eP|teh[j?dn{QbXXu[[XgaK{AK[u[koi]LD~egxXVQkpwI~TUQBaNW~SeWV{CFyNGikEIBjdyQD~RD}UPKmstI|`Ra|xesDEd[ZcHhp[PoFVJtYbrzUFX@O@^nsItYgvWVZ@dGS\\nANe?uVGF?Ne^cclx^Pzm[P|@CNzMi|yOTDh{bPyBLoHbhg\\SlWMilUS_C|mjt[zzPFslBPRUB@mHm}{IuL@kdryvMkaLegG~VZMFBdgF@NjrOSm_S\\Nm~KB`W_Bcd|`~UejqgPVefgqlFP[mNPArZsSIuBvLySI\\BHqjLfF[wGmC|RzqLjHKnkq{sJ\\ipAW\\FB|OUUSjJ[p}DM]eg\\VEh\\^UkHASML|HVNmwISPjSsSXXWOLzp?sVTwVTWY^LzcIjqI|_cX\\koEpdAx_Qf~SiUv]KMqzkg~vEXIY{SBdMITnglNgrOtl[EhMsxHorKR^Eo`|fbBhy{nq^?DE_zlb|mEjiD[C?Mq}dClTVbnHpfSfDpgFt?LbVeuVVFB~aJI`BqLBwCahvMlS|]Ju^~ek?Lw[[cAFGjmsHmwr|cE^mWBgcT_teW]cTlJXNBK|\\aH~zaTfTgO_]SyBi^BKdtYmSRHw`ZTyWFp|sZwr|N_d[wPFc`DhTI|v}]OHUKxig`z@}UOEc}}`PNN_kQyx{qmx`SSLmfsRAVMrF|GLWf\\C}IoSwZEopZNkGzzVeTIiTdu@WoxyxgLTdFFW|xNSdTBikANgNa`DTYtHcmD}uLubrT}zWIFEwVH{k}\\bSBL{lh@gxuvyUR\\N\\I?D{PhDZK`YAl]QZr\\f\\?A[L`ScpVI\\IZgVln?vdPaYqonX|IM}cCDUkiFdJHczStWVaDkpMbhYfWOs^YzFmEK^aXYRbVvCVEZShohgwCS^^vQ[atnhKvNiX}HG@H~abKrsLAm{LM[dWBMQ^jZ{htQgKOJnVbgsN{~KxV?BEUZ{?WOn\\s\\X_vWjoWuaPBTDniJ]pbi^DrynAP|aeWLF]r_Vw|FNH@^@qmYBvth}Ges@Xe{xVNWALQmKaiq}SvEnP}Zj`uxcdOG^XT}grJDxdvFOUEF]JX`ySlNaJEZER\\p|{ha_lPTmKQsuZ]lQDiB{KJInXANi[eG}ehZ`vOetJmUNV~IdmvOsb]EM^oPY[BIwuaRezi@XeJtKdpmRP\\x|ewWmvES]gYiqiLWHVrpZKBnuBoZDR]qbIleR|RqI`^zDSevdP`RUkc|@IVzlqejcKlX[}QX|OZv?fnbWEmCb^Dp]Gb^AsbYJjdwpGCrTiExkfjeLXuwt?AEJ[xph^YjfHj]gMjtgCw?ts_[\\xhy}JSolpxYTreC[Qh|fYoMLMXurHfEfFsVqBmCRCI^`qBvVTG\\wHJqRTFMqYxOUx|rcT||e~iYhsJFshtpR\\\\wgJePpHvXUlxbCQWioCusMzdenI@Tmtb\\UuBT?Jb]skzrSJNHOdQVhViEVOVbfH}^vEABi`Y[uVcXL\\gfbV[W^ac~O_cvastA\\y@_x`t`eq}hDln]}iREhXlXKtfA^cg]wRJfgUuPAaf}tbQqpD}nKdWlqM?pt}oAO^~]uBXfhhgTkDCELdaeqHVo^qQVGfif|s[NJ?ZvWBB{dR[~b|rpxX@uAHWkxOSg_s^eOu^BSX^}I\\gFqdRieDP[zXtwIzTH{WUpVUMDorLd@{kNFrEiM^Y{jsyOKBDsoxsQoi}MIwWLuI{vKQKkyr@rjnFdWmyttMbY@SiMbCkK\\oshdt\\XxQYNQf`TSB|]IMors\\Qivjk?X`zJivPLObwrkmrUVMrbH|LwB[epIrNz``CFUXIn~xGusM`UICXZpFDkdbspYzwZ^@zw[qPz]rK\\pOIsxGdwmI}_Xb{JVkCTyH{ohMxeI\\^?M@SdtijCavXqXHsNibkvnH@JsUxvRx?D}OyCwZL^RHADp\\r[HVBxnxz_XxlH{?WaF^Ts_I^Gk?{uZ@Pib~mAfRNTq]hHpmj_jH}~ruhPu?yOEIRmsxJjg{GCVp`gkmbjQ]DGa^`depwX@~VeYLFWNTM@~eDP{wiLv{FIBnZ}_?CygTDVAKH|qSiAQ^GWxvVs{YNBfFAwL[y^eFXqcAX`SZDq}oromw{Jy\\{EokwVRjtQT?]XrQpstbosmkWXlO}t^@audDzcwAorDCx`^WFDDiuey}_ldh|_xoHkemrcaHiEL`dUt]IZvpWWUt~HE?MzrRmrQd\\\\Ss[HDTBaKnbpJXZxH~PudILkSnsR`@gL?rlueCz}vDtm?kLXmYaUijELStU`HflmEnleVWc\\IBBYK[iIDB[yWwKjGFTMHTZkiD}eQk^lNrr]@FzKSeWlCAaJFzXXQn}^XbPAqwp{m{gHwaUfH`g`mzla@mucQ_{|\\VwPdiI}BhKi?eQIftnFq?TWNNUpxnxeKp_MNa~imQ\\@hCmeiqCHR]rUWbDvDBQHmnh]~Cj[QTqt_}SEYrJTERsctgVj?LhnTksdrYWH\\Wv?ep_TV}klgwPuj[VwY@TucWjVM~Y|xlEKMBKKPeXTMoENG~[GPHQfDHY`]pBnnlJ_QJhgmJ[z[xqxgYJpJrOYmPIaIxNg[LUdySj}JX\\un?_o~zqFbQCE~kBrT{`e\\?|iXHJCMrjClBElVWORNIkKk?qEvy~n]?UYdMG}IEziXf]hciLqR_MecHb}SUzAi}oqPnFpq~zGUdBWyh\\a?YxfO{p|ltCixKyjuTUdRcAq?YVjC_lg_o}H]mdGy]}GssgQf_nIxDakw~PQPE~dgNsx|goS_GR`\\PU~nN~VFdHnRrydY_Iais`zJeQJhTtjpyqYjHpNR]P?Th@l|S}EkhuwajZCgknOxU^LcfUIaxNNnkRPcYdT^TUFQ]J?KS|SH|WOkJ`_|URLTQOGyM{vRNKRyvgC\\_jLhV|pjK]duLI@sIsL|fuL_JVxGDN[SM@V~}KK~AiO}eEHL^KNoQYBXamJlbYPguh`kh`reCr]NbE_sbv^CGjxtma[?{]squM{}HUfDRm@GR}NBEBT~DKX_\\qTqfCVvEKpF?}w]AthKtY\\_m}kEkhgH|v`_nfTo_uQV{AtVCFFXbxuxlk^`i@un|MpF?IWpr[[j|pIE`@^`@q~aiNFaf{l^UAIWaImuGeNelbBho^\\Sqx`VasP{D{XIogn}StoRoxJHMP{eY\\csd@kDpF]QfdFcufil^OD[{]eWbASzWTXh]LrpYIhE~OIUZERgYLA[Ssvk{a|kBjM|SE`U~oAuMpT^@My}TkRHBRdQr]CaXRxv?\\?fFWAk~_N^LLLwtSzp_J}WKNcIYGKLCFVwhqy]psxs[Z@zVQQ}a]ODpYmmRm\\uVgZYj_s\\z\\WOAocqepoO^TSNxJFjLF[Krl]KME@nSPRqh^JaTq}LQzpN^i__]QhDsDvzRaJWcZRNFIy`fKPxTUuJgWPdSnPNkDVq\\^YthHRWDr{cbFXtL?~ybmPdJaiMv?aBf[@Zrlts@C_i]f~lQ]LxfLsaFSvkHm^CoH|fJDJJqVIPXSMhHuOzQZEfMMX~wWZUcFWffxad`vEUhBfxVLk_c_fyxKZexIFUBgl|HAfRUSPL[mUoTp{FB_yqjRd]CJBZVw]OlrtVu^eUG{g\\pXK?su_crXhaFKCCvhSRXu}DcmMs}}NYcc^_aMBL]N@CQMTZRnt\\yjEE@HdLPAEVzf?yVfj`kSaz[~avsWEt_q]KRIkMYfKq[|~KOkomoN_OnCsiARq~_}aTIb{?pvhBxz^NieVu`bsWLD_LxTP[`VM?V[KZ[E~EX_yde\\f?WHMdkefxr~mqzib^Sohz`QMrQ?iyGvQle_^fLxqhpBBL?rMBNn@GRcfeHGno~ITPRZTeALg{s~Ffxi`zL]yRdC\\Q`vbr@OG]RdW_JqLEo[WrvDTqlA[xmvMmPe@LLsJmx[{CdjMXp\\j}DIdWwTQYJ@LDBrFNSL[jKvfGeFrol\\n_Aq}i`M\\hyDfU?yyU[`|TYSwTkFB`FqF\\}@l]sWiDwPQOHNzl@TLiTjVchyDop`\\hiYmaMFd[awD@h`uvclTiVTxcnFfF_s@bUaelspYnOqVNlKlwWpJUxbUcjf?]OZNdgCcprjYn{Bx?qYRJl{O|?HumG^g@DzZPUm\\XhjP\\MNygZpciWK[lkILxI`aE}dkdheGQQVx_fXB@pfk\\kaSTwxtI[P|ZM}LiEHaJJYrJrC_LtmY@{\\CNO|bwZYBT]UpY[NFnzjhcaZWbGvPMkUky?GNSdZM{|VKvAHCrY`sz{V`}`DFSL@KNRvzFetRcff@tdZAO@zqXHgffJSaw_}uU`iKmFYzXSINSYow?P[Y]QqZmcLNK\\FXZsklkCItMQ]GxYvzG]UdVMeGdu?EzeWJLKeQnZ?otHItgzEb{qmgte^hXckmiiUEdb?JZmMAqsfBMlHNJEnTJBuFhUDMEDCxoQcyZvF_wo~w_wimfj^B\\mAwe]qE@UCMRbqrcUEhUxeawg}G{^`BaFAk]FT|VqPHLzRG~pLJkCsNWhOcmjZdbN_wUIokRWsjNmenBDMY]gk@Q?LlO~p`rM~Ta{}]UwEKgNtlbzgG{h_^KBslGBCCulZO_{~UDhSJ`W{s]Ix^erweOz~V{eO_hQHsZKejpqUOPhnaWiR`hX{xblzdHAC_xgFqc]ZNh`@^k\\|[YJ[qknANn?`^MZDnrDMQGoB_TGDOJEPfYfSe\\soDpz[DJ\\bqrISLT|B^OlTvuJDXVBBunSs_`\\QwcoPxUC}]oMEKVrdVFQ?qBThZe|{NF[nrASC^^P`YGQqTDGp}eX~AjqUa`qbFtC{bBUYkqrd?IaVI_^\\FmunUlDHxlThVIlV~ASIFrMAjGKwSJihOCfbWieNCBbXaG]a_OXLhEGAy?ytEiSW~Fr@YCU[}^oumDbCq`|^zNp`NeY`UMpqKRivzx~q{rko?DuOBaVu_?b}msY^oTHNWRUl[zr^R^zqKKZIlpO{|O[NE|zP^Rin~EE`]\\OQbGb}dONwAVBGfs~{rScDEBO|Xslyf|TsPE[vS{mQ`Bj[]ftn}x@QdyAsLLeUGiTqy_]Z{YokiaZkElzYseR\\iNu@xnItzAQr\\xulQBXfTObo|~@p_^kBwFA?{@|cSr_`x?^?~^m^_wNzs}fFB?|oBxz~oF}boNf\\@A^IA\\HcI}@mpJELcy]cn@\\VRQ`d\\TJQFeb^q}q`dTc]nXRBz[DS^Rfbe^CR`g@R@YjDvJbgMlMe[wRRp\\qenZZAeHSRZ}sF\\rvPGcKTnR`R`uj^WPgRhREddw[SRW]cBvrRFGRl~UOyxdhAeffv[FCPN\\CAnO]inzvcx|Q`XyIcBhLqLtr?Ag`x]|eaAj_uJKivbcgB~m]Zj^V^tGp\\ZGGZ~vkQ{GoX@OUNUSgUMb_RHcgd|{jXds^JEEiDItzsHlxY]baFacesZyUhxinK}ZC\\krfGVSxSmhUcGGLlDtMhdGsd_csJ{Kb[~eav|\\}u^kahk{LHWS[ygqv]ih\\aJEebak_d^JUt]XSy@hDz_OduluEnSK|]AnqvbjkdCsshqzKiec]C~xCmeMKMkAwt[dXS`?E^no_eAUrwTzmEWzwknvHVgV}MuoMFtoK[FFnvDxAypISuVNKAUBfSDtZMNCi^pUWInEjo_XKzbYZtVyYkjMVLqanhC[cqevwhXHBZ`erGKZvpd^^ia?AaC@SF{`v{zWFjzeWpVxP[YNOnsZfN@ZPLwuL`sPykMJS]CVfFKyEmkB?Rro{lg@OvV\\rdpPzrQNPkIkXbp}UwuVIrg\\qXWjXd@sW?|~RLOPhxPbtwByaHn~\\G[RAb`Hw]izNAy_[yWpSKpx~DzgVjqyEslDeITbBBQnHPU^K\\zWEw[BbF`WIVDkh]yr]Ut]VgjNQLExUyYRsNXuI_ufurPUHpdIjX^XSeYQDEinDl?}C}Rm{LFP|OtVp`]XF_]FSUnrNXgiD^L`yOnE}z[S]P`ZL?_wkba]Uq[dHUSIatE|`ugL{zLZup]C[`\\k\\s\\eQpRNm_vlQGXpaPHdB^Jpm}ew@Q?ZpS@zdVjZ}LDzCZswXeQHgYt_nr}C\\P{A]Ofr~VAHay?B~^CGecJMiZLZcS^|a`bal`WDRlj]mxi[KybJ?uICAN}~g{Jlu`m[wg^TD{\\KpEDvhNgYfTXaG[dOhQ|YUeqI~RBxI^IlbbZl@_f\\@}HP]iZKrvueKrrJq[gyTuL?XYachRBsT{bolYwMCM]WI`J~fxuJVMnnG@Y{pf`TouHTmXbPHx@n^GP[PLCJAUywZJukPrOnTm{IaR}Q_Wdz^tDx\\lNMM^?Ycgkl{WhtSv@ahdOMFaXyi}sW@Lp^LeKD|sBnP[XtqtAcvWXu{i^}c{MnaIeAWo}hWsG@BlgPavH{t?K^K\\snCClM^GS^^swUhiI}`QXJUBZv_GJTMn{uKflZsSk@k]TLerOtUslnEpAEOni|Aa}kJOPl\\?UyVmudrOnRkStiPGNDooaX~tF[p|Jh\\ky_x?aPdR`]iSldX\\KfrtQKZ^QhbJGDB^sfF}HYLRzC\\?dmLFx?m\\S|^@~`akHOAxDmDC|@V]@KRARl^FtPevL^kpMToe?io\\ZST~u]CaB\\{{C\\MSQXsyhtqJeLHP@G^c_ipxTvZOpNP\\rjxhXLUTBnHTa~tgLK?}B_cq~mdGA^nDTgXyv[LrFEBca?FplL\\MwY]A}|rIaNqyO`gKPnu[Qz|sqz@CL^UbPSReQh~N]R`gFLdS[gvN@PfH[`]@CSJYsm{xj~w?vyRG~BxQE{u@awfi}TSLbpBlISQwOt}Ny\\X_OFP_[XNcXaUuKNprDermoaEcAexlhEz}JCpJrfLk}O@Jzsm^[raG`hU[LVh\\ZpE{xZ@kd_mwAgnWTflT[`iUUC^vuirFhwQH\\Ecp[Sv}cbxjQErRUUFbJUQ[?_fWW?]gdtj}C]hfdEtQ[Skf}aj[EbfmcSW@reUR}Pm_HJJuU\\NVJd?jtE|ZebFGShzCOGEmd[N|heRIIlVjeBIW}^FeXt{dbu`@Yab@jGhX~[SZ]TMeDfQ^Na{AD[TDqsfqSBkVLucT_`[jlF}WPtb~@YYgzyPqGH]ucuw?CQyl^[hmkgdVmqJjT@yFEOfPXsfOWNrE|LpYDr[Iym{FKe[ZOjGNUlSiokW[FnZpVOlLrJGNF]dT]FVID}QSAdPWCnUAsf]|RZWfa^^WfmWbXEp\\aheMEKRDX]Rg}NYF]?\\IPNyt^gr?MEg[uTRZWv@jCUAeWHVvmB^_LPViSgVRph~^we_yJaIvySKiwX{gQMXZewV~A`dgipmLDfy@Cmy_T]mOUJ}Ur_w?vsVvx?spEFX}qFWxs|IzcsWnLKaoNRph_PXTMsWbLbDJVKKDT|fHu\\`t@[]cMQwutss|mUgW}@KCkJP^Am\\itCnZGfxPVHS\\NNzBaoDzMl{gIylfEB\\euCL{aF?M_FlPBnIUl~DftxXLlIuL?IuET^^FOkh`hm?PmuCMl{|cEt|b`aBiHXQLzHaSHFmYpBYc~U]XJFiohPQCFcfnMutlDgB}|Q|VOLL@~PwKKRMAXRXz|Eh]OduNOHtN?BmeVEYiRtnVog`ecm~dboMx[P]UsrqCK~SX^LYX|r^kCosiWBbOVA{byq`rnThNBqDgWlW`Hw}{LcXgjrGT~PeYW{QZjkiD[G}IGyEb^{OgsJXGqaJbNjYzibjNX^~t?[KGbCmtR?vQrJ?Qr_yB[^kYe^sgl[_@pYHD_XeXzMYuBujVddFSWAg_qpENyWdTQfUjEbnRrnmQLbTtCp{}bCJg\\EoXKGm_kMQ[McQRIMn\\cyV]WgNQokXkhgmxAgj~pCsDYVNJakQZQZqj\\FOSxqXtmpR`FpdKNXCOZ^|zTK`CB[BSuiYtls[V]RnXhOLU@rDvBd_o{?QgvDeKIdVD^M~XzTQtsmpsWDGE]cHs\\zSZmZWQx]cR@yBVoOT\\BdofVQ`Y}vn]~pkCKHHxCtV?G|rE|YVzFsARhP@kyasy`VBsPe}|TwM_MNfDowcTDE]qGLxr~[zcS`\\\\SxzD\\C|OueCdlp`eaoSnlR?tLPRTgnDvkqNFP\\sGblwJZgbEvktTTPJC^QjlmKmyVSTK?V{BzFGb@G{gJ\\dxwe|FA@\\je@DugWmz{FimRHL@qisHJ@ISvvMvycVzi|BACcfnVcbCEU|KWq\\heMW}eIzs\\mScfCdpRbJ\\s\\PAgTQwX[eyQe^bJOvlas\\`fykKilRyXbcPrDDJoonLu@KOqN`uSdq|rIx\\Ue@ctKUEHPgeOhpoUBWx\\}}qJyABV@SB@J~VNTmsn^T@Ja}LV_JxQ^JVJaF^Woex_rdcdmWdpTTHhpd?qz{cNXKP~g_^Af|R@@JW[H^uJsozoU|hYPKPANcM@cpptyP]JBe]qN{xM_Hf^\\gjbXMYYByTAS[NzTIOHTTSw@kJ\\iyhnbbBV]wbeyrk?~^yCKdcoJdOrk|K|Xo@nM@iomViE_^INuVTYFWcwvEU{KH|\\x@S`k^TiGkFAXh}XSOHkZ@m[CbuzpvTuSvWqJBLPv\\|Gabpyp_b_Ts~NEBSKLsEXZrkMd[xYS{\\@d[g~QU_ix`s[N@sSn]dzKYatd?CGy{Vd|lw\\\\MEEvoOejnYMUMhLJO`TrqGSA}cVfXK@d]@PIXAyBjy|xcEh~We`G|W[uMr\\Z\\Cub\\Hx?PtgXee[CzhOran~dSTAhpNU@\\?ZDnSXY_vTkxkbB]rjSicVP?W{TbbnK~ILOrEbUlkRyLcmSCElXyCD{xzQVRl]xR]cQ|@QDme|_`BWfvFwd`tbo}cIf[ftMCjpeatR?i|XhRbua_ZxN{bWCRqf[o^CPILra{kMvVTvPIu\\gAVBrH`uYelGPAiTvz@fP]dbnCKHY}Va|MYfQDrccHbTe]_tqV`KAu\\Tc|xIjiAwyQVxPpDYjT|GVxAImRlVOPDzwYanhka\\_\\{QGtS@YlAtz\\ettPkeFpVF|gRDR\\lsDth{@U@_p[T{Ef}j^XRbFHfm[?l~JA[_XF?gwEoV[ArpXxn~af_hCAsLPUe}YLEiKdQVA|f[[kSe|QupgpPELxPRoI~qgdi]MptMtvOflLWDLhSZbxRdE`I|yG{Wo\\sARcFhIIN|oxUkmuskWRXOEOx]{v[YLd`jGJB\\KtqrYFSshYH`l|[\\??i~g`Kg\\nAm^jBuUTwXZH\\kGmc]hPNRDnVy_t]cJYE`MWYxUyC\\NBex\\GLpwBbC]gcsg~fG_dLtf[HqlzQS\\{rIHG{BlGVYAn}}CNKTnkIM~pQzqMOd`oo[tS|PAKBad|WrTwgO||ERIoOmuu^PC`jsPOxhFhMhu|cFSkzPxEaOFhsZMjbQTCtjmksCeAGB|uRByFhhZyqVmVxClBhizyuCkd_ePGT}AU[s}ZZKn|JEUoNjX{mDGatEgwFT\\nOca~CQvfOKITyRMyE{}DkZL}YEtpM?DtooNRxEmwI[dw]ZdZhbHulbGWy^VW_UgF{LQwpv?|]}hQjWAISyZ`dKbLpqKeXwfhii@WyoNjnf{Ba|GX{CscwNaul?SwF{czDkkkVnHa]fP?|cfqxuhcJV_TQJoIEuWB|rTxpyTBRU\\qrfYrw{qAAm`SGrUwPRbPCN|QU{q\\jgBerSkZcWiJhzSj^DVB^BI[FpFHUYypdm[ozhkUCNIshoJ|dYXjtaLAfkel?i~bgIKX]RIq^ujPO}TX{?XjGbYhw?\\g|@b`NevYnnCKNLmVSEqxQQf@anCgme~xM?sZqlkkOicVKuFf_Ez?IHKvdxR{w|cAM@iqxavgTs\\Q{sQHchz}fDXKwrIiXFG`kMzQWJQFeinmneP`MwHlgwEbT}ak[mIkFYFYNx`@wFDIHNNDXW\\nwxCH\\pWRdtUeF\\Kgoq@zdWZW|DWhM\\RjbGQQg}OZfu`YOZ^tHIfGhIZCYBt|\\UMuvA]hGLWNUfeNLJ{OyXvnWKxDCkPGrE\\rEAVlfcBOYVlBpSeVae{cEn}M^hyIDSjNaqcYlvgw@MPdizLwqeOt}xQorraAERgY\\TIqxGTiv|dPSbTQH~@jSE~G|PZQimPhxklkj}cPYQnEkw@^dATc\\cHv{zV_WjUBO?I{~HcuUrfB^HygQs|BTsPWqUbPrStxZ_WjteZREZTZYnmmsXqcbuUAq]NWjgXRwLkO@QonyZLniKqv@lW_~AzhjDE}qCyP[cg|WKbXvSofI|SfIgUSTclSTSwM^~^s?ojcYwEj\\hM@ZGUCFDDtnydNsxpprHnS?LLLcDV]PtSf_p\\O{bzz@T|HbCkunIBAW|KEiNvV_yngZFeMRSYfEUsXoWl\\G|TIDnOtIxa@XuxG{jbQG{cLGdoTRlv|ioyDtHmMG{Bbpr^{zGM`@Kjtb}ocDgr@yYkdZQ\\mhqCrzRPUHkMIoXciNIwI|dIkAvDuPTexBjVDDbQZp~bDhNhX]LaIEXHlvyEG@|eNke[PkIJ`NnOMDkvVq?{@MFsbkP{sdXeaNVbv^RP`aVWkeiwdpXxe^bNsGpO]ZShIfGPewyzrkUuO~NVFc~AHDPyA@OH}t|PMLnnPB]]US@VBNxhIjcaIHM]]~p\\hIlAd}GFO\\\\JYf~LaIAKS]?MqwY~TMCbQ`E~wHJSy]]yTS@nKg{CX|BSQgBFRtzcrajVvtoljFJBgBq]SSYlCxOlDvvZktiT@UW|`gMnJ@_EikqzqNZ@q_Aom}t`{OdaXvw@xNQM|dZZSVfEJSXsW?KkbHy|ixHZZXsLL@x_}yXkGbt\\tCGEGSN]uVmivWeOcjE}dydM`kdrIJMdAHbm}SlAXBy?ecZEphZ}UsstoUE@ZIQ\\CfBnmViOnDKKl`zVrP}M{OR@B}GV[dHoBpz|nBNqPwqQZoMeOr\\k?[mZmCfjoCgiA}EWETjMCUXFQNu|L[p[s\\S]wthy\\sAx_\\[Ox{qu\\RUYoJplljZ?A@VYRfp`lw]q{_Ift~ALa|Vi?kPOzZEjq_QOFmHfHNHy\\gjvD[c~LsT_HMcEVIjbeqzNlQiknB[iJvhpGY_TThorbRO@}p[wixELAJgdro[oq^}OHidPFZy|Fh\\heQ_jfe^bIBz{vY`dDjh^KgQScEGvFzsXDQsFlFI`bF^ReG?WlF`YyAmkrGzv`nfaHdu`j{DJ@rIT{ttqRDTxP{{SZGPc~sx`HE~BMka@tYcs?SYtMztybXn@@IoLdGSVydr[dKhy^`uflaqauq\\QXJ`vx{WUveKD{C[guTpcEKPNUD^JvJBdqGnwGFm^FTiAHpGGDVywyBHlLepXutJg~FiMbsr?dlom}tnEIuRcKARTUIJJcGqE]Nvpw[|CSLc[E_vr`h\\DdKKJvipq}owGhY^lsy_`Fbz`xWutyiSfus[WzSsLJRTAt`a?XyFj\\B[fD_doqx[hMc@QuN{EXhFsRP]TLIwntorYt]zl_HhXv[t}GcLLqphv}gC\\lTYLJgW|PlWIncGchvRGC\\fob_JAvGUsS^}XAxcTNFbrdr?uZfshmwPtky?^ULWxbZl|PuLA^c?KlQiYiUxyBJPe_|JE]a}}BGEkKoDWkw?OUp^^bjc}\\@b[~u\\A[_{lQB~s`^W^a~mcfgGmM{MNKOR`PakOitjuI]BxwIM_GkCcJ^nFsiFg~]W~}n`wh`g]a[DVYAbcyqZzTntiUNuHHK{NMAMEm?SFqo_j^_LjrQIOwar_gsCtRJb|ydEXGayJ~zRh?JJPVs~][Ks~b^Rp`FjXNqPnBjLGvKiIxCxHhUe_NQHbVHBCVaKGbloHWS|cWr|]aRJHpoyDey^j[h{]nHcKpdi{eMhtkxvkftV[cs?}qsTCRKCfCEtwv\\SMExoGznQP_DbKLhKTO{a^[^FUn{{wcN`XYZ[v}xAu`_s{WXYp{}uKgPCEWNfBFbuBfGrkc\\k@XFMO[ywBowMCppxfPujy{]FBjYB`w}Ob}Uo^oBw~o^~b~w?xoB~rcRob_F??~~?]?^w?WR|c?F?Bo?Fw?N~}^o?^K~O]F{?^wFw?^~}Nf|bK????????????????????????????????????N~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
py3 with this patch but no canonical labeling
'~?Ex???C^ckeoLON?T_P~FHYklbWZBU[@zE@VT?bp~FJclUZJWuZBWYlXoFbuKAlVT?{Pw~`ZqxJRYrXZ@nXkLa[tYr_pfbuKDTUji_]NC]NFUj]VJcZLjLeqEr]rXkCy[tYlOpwrpw{AjTTitWFaNwb}GyvclxJ]PlXZUUtcLzB]ovkCxjMYregWruK|bN?iiyimij?fTUqsvwpwuswvTU}@nolfWutS{Rk\\TkZUailLw~CxkBWvT{J[[wAvFwZRihkAilLw~CxlFZEyn`Zbf[fa\\bilbYuqRijXYZ{W|_Uw~BY\\TLlOL}DkzEuif_WuswvTU}DWBWvT{J[[yNwfTUqsvwp{dhZb{LhtSvXZELlMLtTnbWZ@nolfWutTjMAilLw~Cxk]p_{Rk\\TkZUiygAvFwZRihmNF{E~Au\\bZT]VHYfTUqsvwpuZJWijR]NpMZZL`kWuswvTU}EjU[Fa\\bilbYs{]p_ZEyn`ZbfIt\\S?vwUrkZYjwbp~DTYZp}HrXZqxJULlMLtTn`lXkl`kZi}DmM[ZuZBW{Rk\\TkZUrejU[AvFwZRihnE]NWoRijXYZ{WyilVT?{Rk\\TkZU}NC]NFUw~BY\\TLjTnJdqLb\\VolprerYrXk`nolfWutSuZuZL_fTUqsvwprhrTitBEufEyivpbpfbpwDTYZp}HrYjTTitWELlMLtTnbpF{P~C^pMptUplYlxJ]QvcijR]NpMZLjJYqukavFwZRihkvkLzB]oLb\\VolprhrU[tfLOfTUqsvwpwruK|bN?L}DkzEuitT\\TVTT_CstRBI[BUIiRQq@rdQSe[WPhKxHWxDTGMobVDOeedX?|Ha[ci`L`dBV@MgFWfDSfHQB_eLRTHUDTQqF?zEQ?ugRdHkJaRcT@yPpaASwocplPLQM@xJDTc?RWXOtoRiIiUOwFWqW{hp`HbYaYRcT@yPpbqBY`MSeom?zCwicxITcobVDOeedKTSedcBfL_HhieESwEsb_]QpTXEgTHQXp`Ec{_]cpMQTPwB_eLRTHUCxHWxDTGMj?iQcrbALHq[agNQMKW~`L`dBV@MgpTQYUOM[xJR_eLRTHUEc[BqUIjHXZChp`HbYaWxHWxDTGNkL_ZSHqcuDpcBseHqQiYr_HhieESwEiiUOwFWqRuKECYwiCssgMpMIhMQcji_WPjagRRQiPoNHWikc]Nw[CpiYhIox?|Ha[cimVHYiQcrbALHkTSedcBfJLdkBY`MSeomDTJG[BkXMrWZAZBIEmA\\OxHWxDTGMtYr_dMKHKZSR@uHpTHqSbpzE?eeiWXR_ZHqI_|GwpTiygChp`HbYaZGFhKRcdTwbp~ECYwiCsshTQqF?zEQlx[dgeeiWXR_Y[ck[aicFZUZJW[CpiYhIoq[agNQMKR]rWZDQSe[WPhKMpMIhMQdMYlXoHkKgYwHtIPoNHWikeK{]p_EtA[hL`[KTSedcBfIilVT?[CpiYhIo`uHpTHqSnFaNFbbY`MSeomIPoNHWikatZqx[aZBIEmA\\QRcT@yPpauZUZLcHhieESwEx?|Ha[cibXnXkuASwocplPKpTQYUOM[fRejTiECYwiCssgxHWxDTGNbpfbpwDQSe[WPhLTQqF?zERTiitYk?ZSHqcuDo[ck[aicF{P~C^pFHhieESwE`uHpTHqSdnHZqU{chp`HbYaXTQqF?zEQukljJYqTHQXp`EcyPoNHWik`nWZuE|_obVDOeedQ[agNQMKXrU[tfLO[CpiYhIokTSedcBfKXzE]pf_HkKgYwHtK_]cpMQTTTVTTtTWFJWtTfg|eRHcqXKeRXxFeimNkuIrteNqYqXKeRHcqUmqM]k{dXi]uPt\\fdHcqXKeRHxLT]qNXNAmrFY{l`yRHcqXKeQ]T{gzVXX@yMjxUUmqRHcqXKeRkNUT^HjFANqkzEhxVHcqXKeRHTpulfW]x?kl]PzWjbqXKeRHcqW|fXqNIugEpU]kp}RTapWkUJDbqYi|c]q]bizK\\jquFeJDapWkUMo|XT{ek^cNPt^IqtuKUJDapWkUmqM]k{d\\ckl]PzWjbkUJDapWkT[\\jXuFmUoP}TfWtNIuJDapWkUHxVqbl\\ddiFJWtTfg|dapWkUJDbFkzMPxUtN?Yflc\\VXxKUJDapWkZNG{tTp|ak@i]uPt\\fdQhSiTIdQNI}S\\jkkp~@yMjxUUmqdQhSiTIdFkzMPxUtxJUpU]kp}RUdQhSiTIcjblZMo|qklaNqkzEhxVQhSiTIdQxLT]qNXNZBWTuWzVdkNSiTIdQhSjNG{tTp|bU[DdjqNZD[]dQhSiTIctuPrtfcjNWo[lbTU]buYTIdQhSiUo|XT{ek\\VT?TuWzVdkNFB`ow[MFEmqM]k{d[]Nwkl]PzWjbfB`ow[MFBqndFYzJNJclP}TfWtNIr`ow[MFBeo|XT{ek]rXZBS|kbizNGw[MFB`oxFkzMPxUtuZBWxZEik|FkfB`ow[MFD[\\jXuFmRTjMBWjNUW~Hi[MFB`ow[k{brTVFuFbuK@yMjxUUmow[MFB`oxqYi|c]q]Tiyg@yMjxUUmrHcqXKeRGjblZMo|q{Pw~aNqkzEhxVcqXKeRHck{brTVFuJ]VHYTuWzVdkNXKeRHcqXG|fXqNIujYrXZFJWtTfg|fHcqXKeRGtuPrtfcjLzL`kUUnG|kTp{eRHcqXKfHijuPzHy[tYr_Yflc\\VXxXKeRHcqXL`yqjxLW}K{]p_uIrteNqYxKeRHcqXBqndFYzJLTUji_P}TfWtNItQhSiTIdS]rkxFdZVpwbpw~JWtTfg|dSiTIdQhTqYi|c]q]Uj]VJckl]PzWjbidQhSiTIjNG{tTp|bXlXkuRWjNUW~HiiTIdQhSiuFjInctber]rXkBS|kbizNHSiTIdQhStuPrtfcjfRejTi@yMjxUUmpSiTIdQhS]T{gzVXXpwrpw{@VXbl]Uo{iTIdQhSiTpulfW]xTYilUj?kl]PzWjb`ow[MFB`|`yqjxLW~aNwb}GzS|kbizNGMFB`ow[MjblZMo|qU{dnHZq[lbTU]buOw[MFB`oxxVqbl\\ddlXZUUtcNPt^Iqtu@ow[MFB`zNG{tTp|`nWZuE|_uIrteNqY`ow[MFB`w|fXqNIukxjMYregIzK\\jquF_w[MFB`o~HijuPzHzE]pfkXwC^dXuLRqkMFB`ow[MtuPrtfcjiiyimij?RB[KigwHbQ[ih`[HerXkuZLerDTHhX?xqSR[WSougRiWSr_ZIZLerXkuZFHJFGih@ouTSHmCuET`HmIaWYuZLerXkuq@yRCxHTEEgL[QaYYge[Q`hNAuZLerXkuBkRaiRch?f`RT@khp`[T@iYSRZLerXkuZIiUOwFWqOiMHQWf`Em@iWfIotErXkuZLesfGiBsbbCB`KREwYchLIEwQ\\PouZLerXkuhF?{daiq?BXTOewRWQ\\RAe[BXSy\\MfRhsxTQqF?zERFHwStOZI[TCraSLHwXsy\\MfRhsfGiBsbbFcdCvEDKLiWVDOYedCxsy\\MfRho\\a[TQ[dIqTFChKRobSsgZ`HtFCy\\MfRhsxaicsk_[xkEEgL[QaYXoLRCxUEhMfRhsy\\MhF?{daiqLO[HaWvBSdBQ[ih`[Hhsy\\MfRhuONQWfHIg{@KLoqib_fIocvDPKLfRhsy\\MfFHJFGih@tWEEgL[QaYYT`HmIaWYlUjTitYlcxDO]c[Wp~B`KREwYcjAwiBSsgelUjTitYlWihLJGFM[digwdHa]CYRiWSr_ZIUjTitYlUsb_]QpTXJJWEqi`Loeom@iWfIotDitYlUjThqQpqIiO^WZAWZ`dTF@Mge[Q`hNAlUjTitYlq@yRCxHTLXoQaZbAeEtCsgZ`HtFAtYlUjTitTQqF?zEQ]p_HwStOZI[BQ[ih`[HditYlUjTg\\a[TQ[dHVT?dCvEDKLiTCraSLHw[]NFbpw{\\GwFckTUQNF{WY_tpIHhcsgZ`HtFENFbpw{]NGFhKRcdTqxJPNAeiBXR`oLRCxUEhbpw{]NFbWihLJGFMUZJW[HaWvBSdQkHLpSRB[]NFbpw{YidcM@uKfXkLagwdHa]CYLHqieDoepw{]NFbpfHJFGih@ujU[AWZ`dTF@KfSohf?uTbpw{]NFbBkRaiRchFbuK?uTSHmCuFAwiBSsgfbpw{]NFbcxDO]c[Wit\\SAgwdHa]CZ`[T@iYSRLerXkuZLx?|Ha[cinC]NwRB[KigwHm@iWfIotBXkuZLerYidcM@uKdZqxJR`KREwYcige[Q`hNAZLerXkuZMQUMPTQBljLdkQaZbAeEt@hMTSomCpkuZLerXmRcT@yPpaZuZBWEqi`LoeohhOvARiMBXkuZLerW\\a[TQ[dI[tYr_HwStOZI[QkHLpSRBRXkuZLer\\GwFckTURE]NWoWY_tpIHha\\RAe[BXPkuZLerXlaicsk_[xTTiygB`KREwYchoLRCxUEhTitYlUjTBkRaiRch]NC]NFEqi`LoeobQ[ih`[HilUjTitYlGwFckTUPYlx[mPKLoqib_eedB[HMgwitYlUjTiq[agNQMKUrYrXk`NAeiBXR_fSohf?uTTitYlUjTq@yRCxHTEr]rXkCgewoh`lQT`HmIaWZTitYlUjTWihLJGFMRhrTitBBSEmHPLL`[T@iYSRitYlUjTifHJFGih@{]K{]N?iMHQWf`EtCraSLHwYlUjTitYiidcM@uKejTTitW@NAeiBXR`LIEwQ\\Ppw{]NFbpwMQUMPTQB}G~aNwbtFChKRobXUCewiH`nbpw{]NF_MpMIhMQclxJ]Qvcot@jaSRRBQ[ih`[HnFbpw{]NAidcM@uKdlXZUUtcRB[KigwHwVDOYedC~Fbpw{]NDGwFckTUOvkLzB]oMCpKZ`iQa\\RAe[BXVbpw{]NFaRcT@yPpbMYrekxi?uTSHmCuEge[Q`hNBw{]NFbpwWihLJGFMWruK|bN?dCvEDKLiM@iWfIotNFbpw{]NEONQWfHIiijiiyik@kuZLerXlXxFeimNkxZEik|FkcstRBI[BXtTklL}KZXkuZLerXjkbfjNHVkTfjK^ctiQcrbALHwuswvTU}BXkuZLerZctTzG|c{tNZGymrqobVDOeedE~Au\\bZTPkuZLerXk]T{gzVXXTuWzVdkNHkKgYwHtNCzFTZEtgZLerXkuZZBtdVqYprs\\Vqkl\\b_eLRTHUEilLw~CxkBXkuZLerXVFYu\\`zdFxU\\bS{jEtA[hL`[Lb\\Volpr_LerXkuZLg|fXqNIuldjqNZD[]SwocplPKlp}EsyiZ?fRhsy\\Mf[einXFkflak|Xb{eiZBIEmA\\QilLw~CxlFfRhsy\\MfZBtdVqYpt\\eMtxZBshp`HbYaXkZi}DmM\\qRhsy\\MfRemqM]k{dXyMjxUUmoZSHqcuDpwfWyjWulkcy\\MfRhsxVFYu\\`zdXY{bupVFobVDOeedRijXYZ{W|_fRhsy\\MfFd^IMtuUW~IrkYfdXLLSoqf?tZb{LhtSutA\\MfRhsy\\FkzMPxUtxZEik|FktHQXp`Ecr^`ZMplihwCy\\MfRhsyrqNLT[^WtNZGymrq[CpiYhIowuswvTU}DWAtYlUjTis{jxPumqqtNZGymrqiQcrbALHlb\\Volprg~`YlUjTitZFkzMPxUtNPt^IqtuHkKgYwHtHtTklL}K^HYUjTitYlUiwzUrkN[lak|Xb{ej_eLRTHUDZb{LhtSvXZAtYlUjTivctTzG|c|FxU\\bS{jdMKHKZSRWuswvTU}L`kJTitYlUjZNG{tTp|amrFY{l`wZSHqcuDoZ{JXuLlTYr_UjTitYlUl\\c[|XxIzJVc]uIwxLLSoqf?uilLw~Cxk]p_UjTitYlUzBtdVqYp}UpijNPzMCYwiCssjpMptUplYji_W{]NFbpwumqM]k{dYmrFY{l`zAL[TAYYSlp}EsyiZbp~ENFbpw{]K{jxPumqrXY{bupVF[CpiYhIoe~Au\\bZT]VHYpw{]NFbpzBtdVqYpw~IrkYfd\\QSe[WPhM\\TZJR^bFXklbFbpw{]NFFkzMPxUtYflc\\VXxBY`MSeomIisvb{ReurWZENFbpw{]LVFYu\\`zdquLTXyNXRWXOtoRiWuswvTU}EjU[ENFbpw{]MrqNLT[^XkTfjK^ctdMKHKZSR]HuMiuLjRpzEBFbpw{]NFqYi|c]q]NPt^IqtuCstRBI[BUpmjwUwxqlVT?LerXkuZLiwzUrkN[bs\\Vqkl\\chp`HbYaWvwUrkZYjwbp~@kuZLerXmrqNLT[^XFxU\\bS{jobVDOeedTThnFwfLdnJclErXkuZLew|fXqNIuimrFY{l`weeiWXR_ZbZRb\\TZwZUZJWLerXkuZLl\\c[|XxI}UpijNPzJ_eLRTHUDkZi}DmM[ZuZBWLerXkuZL{einXFkfjJVc]uIw|QSe[WPhNpMptUplZMYlXoErXkuZLe|`yqjxLWzS|kbizNHL`dBV@Mglp}EsyiZpfbuK@kuZLerXk{jxPumqrkTfjK^ctEtA[hL`[RijXYZ{WyilVT?itYlUjTipzMrc]TlW~IrkYfdZ_eLRTHUFpMptUplZw{Pw{]jTitYlUjqYi|c]q]xZEik|FkbY`MSeomDmNoufTRYtZqx[dUjTitYlUrqNLT[^XXY{bupVFRWXOtoRiLb\\VolprerYrXkdUjTitYlVW]ki}RUNkTfjK^ctHhieESwEe~Au\\bZTRXnXkuAjTitYlUituPrtfcjYflc\\VXxQfECeLiHhtTklL}K[y[tYlOitYlUjTifd^IMtuURs\\Vqkl\\eCYwiCssjEufEyivpbpfbpwDUjTitYlTVFYu\\`zcjkpunJW]iQcrbALHtThnFwfLilTUjT_]NFbpw{]L`yqjxLW|djqNZD[[ZSHqcuDpbZRb\\TZw{P~C^pF{]NFbpw{IwzUrkN[ehzXFTu]PLLSoqf?vpMptUplYlxJ]Qvc{]NFbpw{Fd^IMtuU]UpijNPzKhp`HbYaYilLw~CxkukljJYq]NFbpw{]JNG{tTp|`yMjxUUmqhIRMKGselp}EsyiZLzB]ovkFbpw{]NFaNXu[bqljkTfjK^ctobVDOeedLb\\VolprhrU[tfLO{]NFbpw{[einXFkfd\\eMtxZBr_eLRTHUE\\TZJR^bFbNWruK{Bpw{]NFbotuPrtfcjb{jMpi]ThkKgYwHtB^`ZMplilTVTTtTW@pbccs_yijbUeuva\\~?^oF{??EcxTRAwRLerXkuZLcovBIiMAW[wiWxISdlwLtXqvE?~_?F~}?HtKIXoLdLerXkuZLhPLp`RBY`TcMSeKcNwirkYtkZ?^~~{???QkHLpSRBUrXkuZLeouTSHmCuCh@xHpTcWrdlTlbL}Nw?@~?^oDPKwdBQ]DkuZLerXl`iBVCgeeCdSFqFELHYup}B[yi???N~{@~omI_tLIHlerXkuZLa]DLSEqf?KXLHSFMXB[zoliwuo?@~??N~|oLRCxUEguZLerXkuiMHQWf`E_qSeG]QiMWrZY\\wij^~{????NyYSLocyb`kuZLerXkwRCpmEhI?WqYQgM[qWrZY\\wij^wB}?~_?@Mh`RM@ki\\MfRhsy[LdTAZ`L`bfEMQRQBinDU\\bUlbWB}??^~wAge[Q`hNBMfRhsy\\MHwStOZI[[eQcpBqTPqjbUeuva[?~~~w???omI_tLIHrhsy\\MfRhPLp`RBYdcBfDRFHQcjUuNoZfT^w?@~?^oAYSLocyba\\MfRhsy\\S[QcpNALu@TcMSeKcMu{EykxZb???F~}?~m@iWfIotHsy\\MfRhuEgL[QaYXiCdSFqFELI[lilkXno??^o?B~~EcxTRAwRRhsy\\MfRfAWeLotHPwDGNHMIkbCvM{JYmLl~~_???@~dWQZageErhsy\\MfRcovBIiMAYkBHQW`xIgwlZW~@m\\T~_NwB}??QkHLpSRBTitYlUjTmEgL[QaYYNwTXBdHbHBexv`ZTpl_F{??~~oEDpSEhhPLYlUjTitYwRCpmEhIxJPpbccs_yi[lilkXno?~~~w???HtKIXoLdJTitYlUjYbaSeHwPldkQTO^G[WsimLYZZ]Hv{??~_Nw@oLRCxUEglUjTitYlEqi`LoeozBWBfDRFHQcwrZY\\wijO??@~~_N|PKwdBQ]DYlUjTitYeEwXTPoRYr_h@xHpTcW}IkzElZEo?B}??^~yYSLocyb`YlUjTitZIHmKIWZSNWoKXLHSFMXEv_vTfJ[^~}????F{YRdTKJ`KlUjTitYlHwStOZI[IygCdSFqFELGvM{JYmLl~?^oF{??iHfCgYRow{]NFbpwxPLp`RBYc]NwWqYQgM[qT[Ysuu{R_F{??~~oAYSLocybbFbpw{]NF`iBVCgeex[dicFcfDUPbbLlhvail?^~~{???M@iWfIotK]NFbpw{XNAeiBXRarXZ@pbccs_yhlwLtXqvF~??NwB}?dWQZageEw{]NFbpwvAWeLotHUrWZEQcpBqTPrpTfWtjWu???N~{@~EcxTRAwRW{]NFbpwybaSeHwPjTjM@TcMSeKcMlZW~@m\\T??Nw?@~~cyeDKwEqk]NFbpw{YWZ`dTF@K{]p_BfDRFHQcrdlTlbL}N~{????N}DpSEhhPNFbpw{]NELdTAZ`L`TiygDGNHMIkbDlwLtXqvF~?^oF{??omI_tLIHerXkuZLeybaSeHwPnaNF{XIRCNHTFHquiupe~?B}??^~w@oLRCxUEgZLerXkuZRB[KigwHj]VHYWqYQgM[qJUuNoZfTOF~~~???DPKwdBQ]CuZLerXkuwRCpmEhIZUZJWTXBdHbHBwrZY\\wij^w?@~?^o?sfIiWVAWuZLerXkvIHmKIWZSLzL`kFEMQRQBib[zoliwuo???~~oF|LIEwQ\\PoZLerXkuZEqi`LoeorejU[?[wiWxISejbUeuva[??^o?B~~dWQZageEerXkuZLeq]DLSEqfEK{]p_ci_}Owph]IkzElZE~~{????NxMh`RM@kguZLerXkv`iBVCgeeiit\\S?M[TK[dIRwirkYtkZ~_NwB}??M@iWfIotIlUjTitYj`KREwYcjpwbpw|GNHMIkbDYup}B[yi?~_?F~}?EcxTRAwRTYlUjTitPkigR[HkItZqx[cdSFqFELHlwLtXqvE?~~~w???RQ`mCfS[TYlUjTitSovBIiMAZXlXkuRHQW`xIgwZf]DlVEu~_?F{@~?CyeDKwEqilUjTitYhNAeiBXR_uZuZL_WqYQgM[qRdlTlbL}???@~~_N{jAR[TCoujTitYlUjIHmKIWZSfRejTi@pbccs_yjEZZRnDTY??^o?B~~omI_tLIHtYlUjTit[LOYwdCsuNE]NF_Ik`qcpc`ymLYZZ]Hv~}????F}ge[Q`hNBTitYlUjTiMHQWf`EtYilUj?TXBdHbHBrdlTlbL}NwB}?~_?AYSLocybbpw{]NFboRohi_uSw{P~C^pFci_}OwphWrZY\\wijOF{??~~oCjAR[TCovpw{]NFbpS[QcpNALU{dnHZq@rahbchQR[zoliwuoB~~~_???YRdTKJ`Lw{]NFbpwot@jaSRRLjJYqukbERQT@reRpTfWtjWv~??NwB}?omI_tLIH}NFbpw{]CovBIiMAXnWZuE|_h@xHpTcWt[Ysuu{R_??@~~_NxMh`RM@kjpw{]NFbowRCpmEhIfLXrU[tBHQW`xIgwu{EykxZb??Nw?@~~tCraSLHw^Fbpw{]N?uTSHmCuFE]pfkXw@pbccs_yhYup}B[yj~~_???@~[BSpMT`i]NFbpw{]HPLp`RBYdTVTTtTW?B}?~_N~{wpqQYO\\SiMSkccMpk{brTVFu[lbTU]buXKeRHcqXKyiuUe~EN}?~~o?B}FMIeMQdHc`{ahbQML\\c[|XxI|ak|Xb{ekeRHcqXKfEufEyivo~_??B~~~ik`qcpc`oyha[hQ[fHijuPzHxi]uPt\\fdHcqXKeRHL}DkzEui_B~~?^oF}cFcfDUPaphIhHrGFNI}S\\jkkizK\\jquFhKeRHcqXNa\\bilbYs^~~{??~_HIgNcMKYTIQ[BxEIjW]ki}RUM]bi}TdjkcqXKeRHctThnFwfL_~~oF~}??KXLHSFMXKbCNQTFHImMtkzBvINqkzEhxVHcqXKeRHZEyn`Zbf???N~~~~?XIRCNHTFBeQQpBiiS]rkxFdZUqtxFlamNHcqXKeRHUw~BY\\TL_?NwB}?~~uKeciBfK`rHHW`tTJctTzG|c|kTfjK^ctWkUJDapWtThnFwfLg~{@~~_?F{wpqQYO\\SFTKRdIRcuFjInctbizK\\jquFeJDapWkUJWvT{J[[zc~_??B~~~xIRCNHTFDPqdcc`uJVXFNU]Qk|FT{jJVWpWkUJDap{Rk\\TkZUuO@~~_NwB}FMIeMQdHhQR_^GpTIwzUrkN[jJVc]uIwzDapWkUJE\\TZJR^bFkF~~~??Nw@TcMSeKcNHBxDREc[NI}S\\jkkp}TfWtNIuJDapWkUIvFwZRihliF~}?~~o?AQiBxBbEcphIhHrGFbu\\fG{jY{lbTU]buUJDapWkUHnolfWutS{???~~~~{@QBqRajGpqKO|HS[cu]PxijbzEhzXFTu]RDapWkUJFEufEyivoj??^oF{@~~xIRCNHTFIScwFqKTPxVqbl\\ddi]uPt\\fdQhSiTIdQZEyn`ZbfP~F{@~~_?F|TcMSeKcNcW`yQgxHbu\\fG{jYfgyndXYzITIdQhSiSyiuUe~ENcl^o??@~~~rbFHHh@tREcicfK_\\VFYu\\`zdkTfjK^cthSiTIdQhJ[^`lMiezJW?^~wB}?~qTO^G[WsdPqdcc`uNHijuPzHyNqkzEhxVQhSiTIdQplhpmil{ZBW~~~w?@~?@rahbchQReQQpBiiTfc]Yiw}pVXbl]Uo|QhSiTIdQL}DkzEuilXo^~wB~~??IO]Q[TXEG\\SpMShMPjkbfjNHVXY{bupVFhSiTIdQhTThnFwfLbuK??@~~~~w@bHhI_xrHHBxDREc[uFjInctb{lbTU]buYTIdQhSiVa\\bilbYtVT??^oF{@~~qTO^G[WskbCNQTFHJVXFNU]QlVXbl]Uo{[MFB`ow[Uw~BY\\TLpw~b}?~~o?B}pcsdO[xcTFIUQQFWfd^IMtuUZJVc]uIwxow[MFB`ovwUrkZYjqxJV{???^~~}cFcfDUPa[qQUG\\TQuFjInctbp}TfWtNIr`ow[MFBcyiuUe~EMrXZ?B~~?^oF{wpqQYO\\THBxDREc[bu\\fG{jYlRuqMjk{b`ow[MFBdTYZp}HrZXkLb~~~_?F{@chKO{dS[BieHqdHqIwzUrkN[mUpijNPzHow[MFB`rEufEyivotYr_~~oF~}??Ik`qcpc`yScwFqKTTfc]Yiw}rWjNUW~Hi[MFB`ow[{Rk\\TkZUfbuK??@~~~~w?M[TK[dIQphIhHrGFxLT]qNXNFgyndXYzB`ow[MFBbWvT{J[[xUji_?NwB}?~~yO]Q[TXEKcNcTKYPpVFYu\\`zc]bi}TdjkqXKeRHcqE~Au\\bZT^C]Nw~_N~{??~xIRCNHTFELHTHMX?|fc]Yiw}qNqkzEhxVcqXKeRHcijR]NpMZJ]VHY~_??B~~~kXLHSFMXIScwFqKTS]rkxFdZTVXbl]Uo|cqXKeRHcplhpmil{LjLdk?N~{@~?^tUOxQWqOxrHHW`tTHjkbfjNHVquLTXyNXqXKeRHcqLb\\Volprb]rWZF~~~??Nw?wpqQYO\\TcW`yQgxHxLT]qNXNUUnG|kTp{eRHcqXKfa\\bilbYu[tYr_~~oF~}??@rahbchQTPqdcc`uMo|XT{ek\\i]uPt\\fdcqXKeRHcUw~BY\\TLwrpzE???~~~~{@HT@{`pbQBieHqdHqFd^IMtuU\\ak|Xb{emRHcqXKeQ\\TZJR^bFTTiyg?B}?~_N~{M[TK[dIQFTKRdIRcbu\\fG{jYp}TfWtNItQhSiTIdVa\\bilbYvpwbpw~{@~~_?F}cFcfDUPbQcf?}PaixLT]qNXN[lbTU]buTQhSiTIdQvFwZRihlYlx[mR}???N~~~HT@{`pbQc`{ahbQMU]PxijbzJJVc]uIwyhSiTIdQhkZi}DmM[uZUZLc?^~wB}?~xIRCNHTFKbCNQTFHMo|XT{ek^WjNUW~HiiTIdQhSiL}DkzEuier]rXkF~~~??Nw@bHhI_xrGphIhHrGFYzGxyrqTlRuqMjk{dQhSiTIdSyiuUe~EM\\MYlUg^~wB~~??BbFHHh@tPrHHW`tTG{jxPumqq]bi}TdjkTIdQhSiTWuswvTU}K]K{]N???N~~~~?Ik`qcpc`tPqdcc`uImMtkzBvHVXbl]Uo{iTIdQhSiijR]NpMZTYilUj??^oF{@~~ik`qcpc`uLHTHMX?}o|XT{ek]qtxFlamMFB`ow[MFplhpmil{]G~aNwb~oF~}??^xIgNcMKYPrHHW`tTHVFYu\\`zctNZGymrqB`ow[MFB}HuMiuLjTnHZqU{f{???^~~{M[TK[dIRcW`yQgxHNI}S\\jkk{lbTU]buOw[MFB`o|TYZp}HrXlXZUUtc?^~wB}?~kXLHSFMX?yha[hQ[dfc]Yiw}o|FT{jJVWFB`ow[MFUw~BY\\TLe|`nWZuB~~~_?F{@QBqRajGpTFIUQQFWpzMrc]Tl\\ak|Xb{eg[MFB`ow\\kZi}DmM\\MYrekxiF~}?~~o?BHQW`xIgxHBxDREc[xLT]qNXNIzK\\jquF_w[MFB`o{yiuUe~ENE]pfkXw??@~~~~w?wpqQYO\\TQcf?}PaiYzGxyrqTp}TfWtNIow[MFB`oxnolfWutUijiiyik@S[hXHG\\a?~_NwB~~prbZXZwilerXkuZLcovBIiMAWsfIiWVAZXXTfek^cpTQYUOM[c`{ahbQM^oF~}??^~EMjMLjUrXkuZLerYSR[WSougRiWSr_ZITlZK[|quFHJFGih@o\\SpMShMR}???N~~~TLwtkxlwZLerXkuZBXTOewRWXUCewiH`hzdFTzJJVGFhKRcdSKYQiQ[q@oF~}?~_NyvouptR[xkuZLerXl`iBVCgeeiHfCgYRouRrVdFuIozCwicxIOhQR_^GpT^~~{??~_EtVoZprdjXkuZLerWf`RT@khp`[T@iYSRbzMTdUtNIiUOwFWqOqKO|HS[c~~wB~~??HrXZT{WrZXkuZLerYgwdHa]CYwEha[jBSxI|bUq]bq[agNQMKOFKcdaFTS_?B~~~~o@lZM{LimLkuZLerXkwRCpmEhIRQ`mCfS[LWxzXqTuYPoNHWik_@rHHW`tTG@~?^oF~~MZJYnbEZfRhsy\\MfBXTOewRWQ\\RAe[BXTc{txP|alTQqF?zERFBieHqdHq^oF~}??^{[wuuU}Iky\\MfRhswf`RT@khpSRMHOsf`Yprurcjkq[agNQMK]PS[hXHG\\b~???F~~~LjXv`lTprhsy\\MfRhPLp`RBYeDpSEhhPNcjuLZHyMFWfDSfHQkdIQ[BxEIg@~~_NwB~wptXplYufRhsy\\MfTFChKRobSsgZ`HtF@zdFTzJJTaicsk_[xkCcNcTKYPr~~~_?F{@TLwtkxlwfRhsy\\MfWY_tpIHhf?tKRdWYeqqjNLW~Ic[BqUIjGt@bQTQReON~~_N~{??ZT^@nFMUrhsy\\MfRfAWeLotHOsfIiWVAXUtkprvJXcBseHqQiN?qKO|HS[c_?F~~~~_Dn`lbiexsy\\MfRhsxKLoqib_fIocvDPKLbzMTdUtNFHJFGih@tWDIQ[BxEIg@~?^oF~}ZUrnBYjbUjTitYlUwY_tpIHhhUCewiH`iljXbfmUqRcT@yPpbF{XEG]ciMQ^wB~~??N|SvbUrev`YlUjTitYwRCpmEhIomI_tLIHuRrVdFuIuIiRQq@rfHYWsdScxcB~o??@~~~{[wuuU}IitYlUjTiugwdHa]CYRiWSr_ZIbzMTdUtNSb_]QpTXJJWTFIUQQFW_N~{@~?^utVoZprditYlUjTisZIiCvAZAwEha[jBSYprurcjkfHJFGih@|`kFKcdaFTSn~~}??^oFbFTfEtjXYlUjTitYeEwXTPoRiHfCgYRo{d]pjXNP{_]cpMQTRU[?\\SpMShMR~~?^~w??l{Lk\\SvMUjTitYlUqaZbAeEtCsgZ`HtFEqqjNLW~HTQqF?zEQ]p_c`{ahbQM??F~~~~_HrXZT{WrYtYlUjTisf`RT@khoLHqieDoeN[gynXXY`uHpTHqSd\\SBGpBsdPqQ?~_NwB~~ZT^@nFMUw{]NFbpwxPLp`RBYdPKwdBQ]C|qbi|ddjQM@xJDTcbp~AgxQqQOzF}?~~o?B~MZJYnbEZpw{]NFbpwY_tpIHhcsgZ`HtFC^XqkiuhzGFhKRcdTqxJPrHHW`tTJ}???N~~}l{Lk\\SvMpw{]NFbpc{IYgLdMF?tKRdWYaljXbfmUpaicsk_[xXklaQFqIeLGw?~~oF{@~prbZXZwiw{]NFbpwvAWeLotHSjAR[TCovcjuLZHyMihXB_\\bHuZBWBieHqdHq^~~{??~_BYu\\wZT[]NFbpw{]MgwdHa]CYLHqieDoekfenINkTfHJFGih@ujU[DIQ[BxEIj~~?^~w?@TLwtkxlwpw{]NFbph`mETS[Cq\\RAe[BXRUM]u[d\\cMpMIhMQc]NWoKYQiQ[q@o?B~~~~oFbFTfEtjZFbpw{]NELdTAZ`L`omI_tLIHzJIk{tb{hMPSFhFEIlVT?c`{ahbQM?NwB}?~~tn`lbiexpkuZLerXmgwdHa]CZ`[T@iYSRYprurcjkx?|Ha[cinC]NwWsdScxcB~oF~}??^rYu\\wZT[XkuZLerXlKLoqib_ewEha[jBSN[gynXXYiiUOwFWqTnJclShHoNcWinw???~~~{xkli}KXkuZLerXkuwRCpmEhIiHfCgYRozJIk{tb{bcdbcTS_zYrXZ@rHHW`tTG@~~_NwB~TLwtkxlwLerXkuZLqaZbAeEt@hMTSomCs^XqkiuhyRcT@yPpaZuZBWqKO|HS[c~~~{??~_K[wuuU}IhkuZLerXkZIiCvAZAedB[HMgwTlZK[|qu@uHpTHqShrTjM@S[hXHG\\b~~_N~{??{WykwulZErXkuZLeq]DLSEqfCjAR[TCouq]Y{g}pVQM@xJDTcpfbuK?\\SpMShMO??~~~~{?ui}B]M[lLerXkuZLwY_tpIHha\\RAe[BXVHVkYuRs\\aicsk_[xTTiyg?\\SpMShMO@~?^oF~~wptXplYuitYlUjTimCpKZ`iQf?tKRdWYc^XqkiuhwMpMIhMQdw{Pw{]dHM@{bDT~?^~w?@~U}EuMiZfTYlUjTitPkigR[HkGsfIiWVAZcjuLZHyNQM@xJDTcUj]VJcc`{ahbQM^o??@~~~utVoZprdlUjTitYlTKLoqib_eedB[HMgwkfenINkTq[agNQMKUrYrXkePaFhIbcc@~~_NwB}ZUrnBYjbitYlUjTic{IYgLdMA\\RAe[BXUqqjNLW~JGFhKRcdSZLzLeoKYQiQ[q@~~~}??^oCxkli}KXmjTitYlUjIHmKIWZSdWQZageElWxzXqTuUIiRQq@rcy[tYlOMXHJCMih^~wB~~??K[wuuU}IlUjTitYlVBSEmHPLL`[T@iYSRN[gynXXYfHJFGih@{]K{]N?TFIUQQFW_?F~~~~_IhnElfLnDUjTitYlUgwdHa]CZSRMHOsf`TlZK[|quIiUOwFWqYlTUjT_KYQiQ[q@oF{@~?^~|SvbUrevbpw{]NFboRohi_uSwRQ`mCfS[[d]pjXNPrcdbcTS_~aNwb}GxrHHW`tTJ}?~~o?B}ui}B]M[l{]NFbpw{TFChKRobXUCewiH`mqqjNLW~GMpMIhMQclxJ]QvcqKO|HS[c~o??@~~~~EMjMLjUvbpw{]NFbBSEmHPLKLHqieDoeYprurcjkiiUOwFWqUtdlXZUOMiWfISfG?~~oF{@~fLdlVpbL}NFbpw{]CovBIiMA]DpSEhhPLUtkprvJXQM@xJDTcLzB]ovkAgxQqQOzF~~~_?F{?l{Lk\\SvM{]NFbpw{MCpKZ`iQa\\RAe[BXPzdFTzJJURcT@yPpbMYrekxiCcNcTKYPr~~?^~w??ZUrnBYjb{]NFbpw{BXTOewRWYaXpIEc{K^Xqkiuhxaicsk_[xbNWruK{AdHM@{bDS??^~~~}?prbZXZwi}NFbpw{]HPLp`RBYb_YeHqkLQq]Y{g}pVcBseHqQiiiyimij?'
py3 with this patch and canonical labeling
'~?ExUARQHGKPKjGqIKmOkor_UXECpKN[G~SPBGl|?WcQucoQyisantYloNegE@bLW?uRs[SNnO{EXODSRx~?tWZSYCSJEkhHQKKkyB\\^oGqJCwYSG?la~^bW``tv`UOlUpCashl`^{AhVqPhy@Jireh@xmWSjTs\\IqczNOk_OdF\\J[Zhlm[DbF@A]jbKRUR`Z@mh{@gJ{p{udc`A@KQ{]EQ|XnE{M@gF[eVY]HHlqcAzoN^glTtI`valzLbu[@IgFyOsNgDkCuypRvL`yRRUEy|wJSYwyldAavwBFcrvtDh@|VrgE~QPcwFrxgoV|H]}sm?ai]Hx|[HMPIYQv|eYKY^UNxiLhGBoVYYhIibGutrN@dqebaHJ]At~~HorapD\\DttX`fRcD@kFJYHyk^k}CM\\bONVRS?Oxk~|Grk~XulbGK@UIchLM_vdmnA~CCVzUcr?qu`LPx}tp?C~@qvrQ[GtBVe@qLxbOx|FeJ@veOmJc]GrDtiWWluOn}^zeVChH\\nIRBA[wH{IRIZB{cwgmGjhtuDrVAnoCkLGiednimR@drrfnTZBWW_Icu^EdsFID}]ZA@ITV~EUwYkvtfS{PwhS`}eh}FYqGjDIs~tAgUTzXk[LK}P}c@PtmeRkiE\\}r|ZOAa}K~F}TMfwuJ_PleruMN}fWTeOBmSsNwsTifJaWvakhx?yNex|eUXK{Hs@|tFZRqY\\ZbGD{dgOSvYtDQYzRokMznVogGy{}SMo}PVvtEv~cGxT~FsBMrD@pyaRZzodKd~iPl}Q[XXUxE@oHJid}}v}oRjtuzFERkNt_TY{nyR`s]EyNLE^toYj`\\XR}dgC|NqiIjrYRZQtSbEN}rd{I[odywVMyBH|iJYxJrxQlisNqwm`bP|EPmfVbmj~pcsyFWcp^y`lT~|Kje|OumqKRS\\JDyaWr|llrxC}fWN|B|ow{K{b~mEqKgjFllg~owli[j\\K~znLTIeOvn~[uIpa|V@QykugHAa{QO?^Nfr@PdJOcVm{?WtQxd`Sq_mgQqcFIlzcBoUo~EeATXfpL?zXeWEGgqyraTl_S?YumM^wCD?M~dtMeF?NF[ANl?T_}A^KvgGIy_x\\F[`UuxJL?wSUENEsJuWp{uBbaUDZh?qTWjYLdLssc?THE[dNmmRWcBnrErJOrkAijwWxAZDwaC}XEZ`aBqxv@aqNdov?kwV~m\\DKsOnEw^S{TkBIpCVdPDdYvGnuMglPZhGQZCNnb_wwmRQvOo{RkTdUFIj^a@`m^DE}BojK}@L]YsQErbaotL[RqYuzDyKqsPAJ~hQPLPAJtizGvFxtSJHF{osfHi||p?GqO{utBSNBTt@YRqfmOkaIlHmCf{tKm?`jdYs}ILnQiNIKEEoK[YeFbnZEzaCCYDEzlo\\u@MUY}V^[{lPqqk@IVI}\\hGfkCr\\qh}~gPedYmRHSRGeCy@ZmKUUoz}gAuJAvZUpXgO_VD|jl_ShwfZJX?^aMnkU?gku|vqJjHindxyu_FKQLuUSIDXjeh\\^JbIKDPBgsYICx]vxX\\urYNqHLzFh`HfIw]zDPeOGzcWQr@NeYYAJBE_y?vvxJy^lRpJhvTb\\kiwBkcaeZAcyQzVSIYmiQe~gsbPcwp_Q|uQehj]LJwu^wcTfn?u?eicYpOY}AAKnyM^lKBQeWssU|gdA^KQN?{VLR]oNvoRTQGZ`\\vJ`HDhOYcygpIVkRzXZcfK_Df|TsF`DqOstMIgfUCuscxrcpa]`rdq_F|V]iZS`Ca]H|ZHnEW`x\\[kYkiReCK^FEN\\{l}dTi_GYkn|HJaMYekekxzfnjG{aUGAaTXMq_HT|hUTf|D}bDnoE?OtcZT|o}YWRSeL[QxMcb]smdbZJwAZmppKJdJcxzrLjorQpiCD\\Lm`@Ntm^dypHBRtFb^]nK`tqdYCjA{?j{bax]nyquB_ByrQHLBGKj|p}Al\\QEZQ^Loi`RfkrJeVL[H?gUefJbqEQxrOqET`|PRxiTDtdUUdT?D~wrf}xYrACzwrMMEoj?sGUxx{oWj{f}@{HPjglQsOJVKj`vPf^dOG]@vqP?ah~Rj]wV?zRn_DLJZuNHLmDI\\@ss\\h]_l`xib}dfgchm]S^tHs}SWcq|PbzQYjBvDaKxjTeS@B``Y^kNo[fMorxf`@OndYt\\pXIVdkLyXZpyUvQBXcSpWgucoyEzo`xwiyNZ\\GIxjuAHDEfLvYPqlptvbwevCJENa]byYm[MFb^ABA[VGRHNZUMYA~BkHFJg|zmG`DXuJZzswmEmdklliToM~WeWZOFTbSq}IZeZZOFHXJ\\]lerBCrqJRKXbsUpq~OT{bm|a@lX@@lavbAkyXJft\\]d{XuJv@wj{|WVtsJeHwIEDozsTW|UThikKeCVtyOSbiUCNqqkztevW|?xzkBrT\\wG?dfpNQF]{~NkBbLVCCE@tzCpMdkAV~dcy_fwQh]fUlWgfL@z~kwq[G^eMRlljiuON~[C@LTFm_Sp}QSmbZrAXXd`QfthjaCRZF|[|eoq_SzZWoA~rAnP^SjkjWy^[EdbGEhTox]DwhLykTpimysyM[DoqY^xnae\\b@Bofamn@asANB|n[k_L\\aV]dlWfm?BBfR}L]i?_UWIs{{x@r|fdTIAliLvGESdz^qPmQlgGNjkNVAHFYh^td{LEaoDx_t[^hURYcxVRbhmNidhM@Dezy@PzA^VkCI~\\xH_Th~pNK[{|ySa`{Ok_jgafOwfRCWmm}[z`}_\\xOTGVLWN[rX[ej~dcc|BEfowSEvH[]QzSfRXqYwAFqj^~GopRUe?MDexzd^YE]KFvflC]pod?VInFRcIoaGaVNj\\|YPAIzPHEyEKwzfUvCg~~T[SpSljQtItaH~ty_it\\oO{Tg\\@jb@sV}MlGZTOSW|O}RKxwyXtPl_}jMUn}cSlglSA~hNLW_fTp{HNuLDUj|wDPoU^n_EJ^kcNG`|C}K|slaplzePEUIcpVdXRFIc^]QakoIngNYsy~r_dWwKPZKtUphEQZs\\VsbPvs[n@}{dJ`c\\p{SJpWZTRW`ukevSEXVYALwXNnsFZP@~ApLWJO}[XewfOT|}kQsZgn|naA}tVXI]CmaEFJOKsdbk]r|SJJDXPS}rfX]msHXEY`eiYDM|YVQpga@KEyppzkvsDlDt]hB[g}Z]Bc[hKdEX\\yUJF^ARsJJiaM~UL|iJDOjYZnCJreCnHYTLQxRDEHwrrY`{VkdcUjC^kBnBX^WH?FdeRPo}yRAM_Ht}ndwYUIQO~xxSVQoXDt`QxSXnMlpuI^cm}SMVaFQXMP|Mbi{BxH]taUgW?rxwk~gUsjAI[P}suCu^Xz@OqRRK}sMuQ_U}I^jwja~]fAaGqdQhlfCn[SHTc}NL]f{OQjRetht_mY|slAdR^DgQ{xcddBN]BWiy[sQVOojgJzzHR}Uloj}[tO?]PNwvoGXgf[ehTEwL\\jmxV?tlosuddBzAlOYYCyBuwJRaOV\\rUtQnp~kYI}H]RQmIBBYH@f~A^OrHo]J}E?kKhNJfF_SbyE~Q[\\}hLbhjcJyue_?Ece}gz`vw\\kmbstgDxTCOD~uBfmHDK}tAdhXalXE}ExRSyUeEnUgq@]Na}oZIAsaYZr}iHJaCitJ[xFVYoCH~lD[B~JbGxbAi^ELg^Pg]Asp[\\{j[\\MNBFB]Km~XD[ACeviqMxsn_beoGsSf~oEltZwhDLbtZrKWgQFcaDvTJWr[jShpoVVuVzQpN`vgjNl\\IJ?eGBy^L?Js{`jyD_OJVw\\Zvzh`MilTsELbQ{]WwFVdznC?EGo@xqGvToaJTS^~~zXCYQsQvKwtbWfPe\\{TrP^KC_h`UTNHDvkyKX~XynQyoqCkSbvRPh`sa|oMWY_d\\cqXI?iuE}VyzZZUw{eoj`R|IVvwgX?OT_Pewgmfh}lMVmPTFxaPjMo\\x\\J}c?J[`oIgARuJ}PA\\~@UNtGf}{DQq|NGJNkmdUOCg]NKZsMKGaYEVtWbf~xmiF]\\{cJvVH\\EaceWESZ_C~@gp_?????????????????B~~~~~~~~~~~~~~~~~~U^QKUv?NOWTDFW\\@SbZu}{`cU]~hYjeWJh\\_xqcX_IBVbLXpzF|A?lOLVU}m]X^HXPGTVzYBfnjCfHIJqe[iPbG`XcwdXz@bhuJfb{F~KqHmlJGlYuOf]ULB[{XB@d?mNo|fQmzsgp|MFTsPKslH]{Juw_JuFKa_CFEVwwPxq}~dsryhLFARwNWdEFRnsEjo[[BowsSkDcFmhLfRW|hqGPsUzZ{wZRtoT_w?QnL\\lqkjYOqa\\h~Zd~UGLEVlSs{eYCiJdbNmDADJhl@Bwlnzo@MJzNYua`hUpMV\\AWTzpRkcC\\W\\gO^vHiCu^@Tczqngi]|E}qj?Y~AzO@qvQNLBPlCLoF`RrmyOjD~FS`kOZnppZl]iN\\SaJyEGoByIQyefyDIeK}hjd[e|vvJnkvcA?sKInq`qtFHEaJTlcf\\GHxKN{RbaXwEm[bVMDy[vVBRYMVZ`IwXJhkbRZY~?`K]SewsTK\\vbHI`YR^TnfXKZQe\\MN{UWkcKKm?^\\{OEpXhtLhGxyNpxkS\\EdNeMa?L@Iqayx^cPzIO{ljXSqKzNqlkrpz?[fo[iTqJzHPhE?N{^\\xDVRbuHeCdSp]EPk^AzHzhKia{W~^hgP]iTzR[InQ]e_[\\@xDr\\CWGfsk^uDKnB^zRGJXwOpfJMOfzCyTcq]D[lI}uhXzIC~`nKtJMxAoAWqMKYbbpoDBlbbwy]UipoN~dW_y?~Yqgcy_~GmzW[macRe?vNmft_|_BOvDq}LamtAisZSNh[jK[yFRXyMhLgrP}xYUtNBUF@{KIQGjzUPYCp}txkDoJmWMzoZirqHzrtTvD]d]SI?Qog\\MjLExKL{i]WBsrGYqy[fFEEVy^VEma?{L_aUxQtdBry|TsSYiczkdVXAu_FzJPRlRZdOw@L~s\\Z_z?RaXuWgRiiHP]G~BF~Vn@DkSJSa|M|W]moDSofbT}P@YW|[hLhWFzDKaXj^a{Rv}vAiRPJUkmDiwuyc_WQzeq`ezbogZQ~pLvkvaIWMdj@^@{j\\mK_P~k`|SOm`_SwYkX^hTIzD\\HQqkVuMZafwpBbTvbOEK[j|Bv[EXcZHRUm[Tt^V|eUiq@_`e[Qs{lnYpvTTaaADdMDeHFRn[qJjB}X|wScsdNg[RXNwev_pT|CRFQA`U^jDcksfRs{A}nhoopwnx`lVqa@gwZwnyZklaQjijkOTLGuqBFvMZ^zfpYsrOdCTLcehaKDsN[oUiru{KvK|cmeJlGOG_iz@DSY]ru}ElAn[fDlub[@t~LzzAxB??h@AF|jkp\\zO`|ft|b_B}MrphGLJ@YWelxHDT|lwJbxqH\\qUMPo`tnhWD`Ji[QBapyrVx\\`\\][Ry{{@dU\\abEWP]]w\\rbSRBMtWxDqljiEVJTKmwg]Ta\\d}|]UyuFT?eRR}OREX?wSqI{ZfsVWX}gsqBWl\\YUQvaZZJDjy{oHW`mVv?FaXk|]KLGJttx{kPLJG{@NgnyYrLlYJXzJw}wIaaTqHltIAftq}PBo\\bRe~c|CXgOh]aOzVBqY[Q^xAflz?f@~_UHIseHJK~xbidnSCsSxm`ToMJfsIBzXFLTdrC|xq]_v?Gxe@tfeki|fWyFo_IsmVJKi\\p|mtMydFsYFAp_o~bjgwFrp^LYHGqYDG\\UPDNr~NZ~?ziS\\PaElvjVSEVRSzAdLKLta|\\\\OTUqM`\\EFetU?MUeQnQyK|qnWmWsrKHf{dO`eYmG`|S}^A}leS{SHiSMCMDjInmNxOo?U|Pilopm|Bl_tdvbIvgYYJiODcjU^fKLpgjSxyoccmIum\\PTGwJ^@tqdZU|wJDaFzKIq?qtF{qXyzaucEijEtwokAEEKZy}yNOJvs\\M}VUNUEzSa?[NBPO}YYKThlyUuRRAotaN]owWRnAZ^Wb~_K^y}J@bfxIJqDClC[]b`aF?dB|jyxuoDPZ]?QqCXR]^zSjZmB`cVFpL_Y`Yd[Carw^b}r}ob]{~HeEUOdCA\\WxLMdzZdpF@YUyS~E_WdqrhRe_tcMyhUxfr?YIJ_j`kEbuyyeNGtgpm^HJpPc_T}ygT^odFfZtPzQGZGfru}x`EO}?]rTvr]WTTrKE}sEMdaooXUN\\SDSunEfITyx|C]UrVAFb_OzWg{{ghh{kbCFwm`HJ}WLLHDlfjFnQirSxFeLKBrnKigsDpEdYoYiw_qu|h`\\ZtC_klmcdtYY\\]N?bqlQZT`uqL`DFmpijoAu~i`n{XeLQ?y{AEV{`vmDoMOWR|VHLDHCganh}^ur|i]xb[VbOsdV`iraQ?IPVZax~Pc}zU^fPYr{??EcnXFoeSmHViBEWrrvr?VZov@Wnwj?JCmCby{X`fbXiWKu_JVmRXeUjKbdhODmhlufk?If}OEG^pZrXQhaPqiL^sNY{onQdRtgWSlo|yul?aCLHrecP^Mw`JjZu~`Yi]JgcBDNxRTVYVUnOjEKXpNtdVqiWOqjleBeoo[iDIXfUShELilITQZRZ?Eqpebj|rFAQ\\bhNyUqZDDSjZeE[}V}HSDHrtU~GkLk_YQxYU{E[lLXp[vIfqBUI|h{x`q_fBOMVbm~OfYO~{zGHsKZCpkpsb}[EiUFtp[dnVme`\\hPAhFMQAQw}PxJVtFUIcChWnLvNeyK^h?tdfP|i[ZVwzbIwF?z[@WDYIEvktGMO]Envw|qc@jp`DKzAEqYcYTYsdyFBWiM\\esp`|TY`xFwbKoeKxnk?JdMlsbrR}Jcth@FbT^lx{aARLBmFx`u@_`iLO_gLnbB^A\\^[uJiSzuO_{fGfXpLffPD}CTJXUnX?xWyKrXrLT\\BK|OG}wfACLn]duIyRdYksPVqVtXqMRHyziKd?rRDPUduGfwgvPlNI?s~zwkZPD^yQaycEqRA}QYrgt@pzrczqHJeDC|xISpouMst{iZmoVrCfE[FPdEsxoyhEsDy^icl@XcNsngBZ}cZ\\CKT`]woZoZvjpkP~[{O?EJhRbCzW}A\\ER@UxdEt~IBhXfsIhilqvdQ[WodvQeY]`yutdnX?XdN^FsMeJRjaR_\\_qt_Uowla}L@dos\\HMMQhRwUNFlqWz{iXMA`pOq]t^WAzvNyEDISic]O{gpnw]{lG|Zpz`xFfdoROvaPXipiFfYia[zXPtR_|pT_xB`zR|aOeWKZ\\EUkhdmXIW?|sTSWzrmdVLNrvTrHro_SlmLqI``AsfqRdmOqkfrc{Gm@Cd|VaerQ{[vOr]^YAFv]|}Ta[eP[OV__XhY_jIeX]xbpmZ|O{dKVum}kqTeDSC@~hIP?sKP_PtpTjfvfuFj|QgjIH[`rjah[}Cfp^Syf{EedOseHZGBvDoNBttSYTsLUhlGnmoOpr]XUIQTJKjhlrzuEhOxsOqtRLJ}org_wUlmaTERHNqSh[?pfoENQdY{otY[Wqd^Tqi`sMl^GUrQK][ZelXtRtIo{EC_TZHmjdY@\\TacNc^A|}MwIFUHbqNeY`EreuZosgWryBuYtPKK[bnDrnMe_RTTcvVSfdJj\\WLjQ\\EimnIRIojU\\{tneg`SGIp]PYLjRBCin@ncahZraUKnrKyyVS{VtLaE??JnkwgsV`gJdFB_al{~e~@IJc@rRUVW~AHVivzj^zbcZDG[dqUlW@HA`u_jf[zX^ZIsKp@v_GG^D@`REBVrwlFqlgxdKz`Ktm|BAB^ZbaImuef^t]JW`_T@maBTWFxEeRW@ZMVNlTMA[{VFBxNevVr_jaaclSpAy@SxjRr[jNDnJ?XUzDvTwjT?rOg{ZR`GMNRxsttqEonKwdMUQ}wwEejdnGYchEUvQMKahfMhht[o{lBFdVjkpJJWe`{^BDrbR?X^eNOqXlMDOY~bAeoxEYzjppEC]XEqEfNv^MDWs[~SsW?oKJ|a[~vWddHoqW]biQRP{KJ@W^NtPpDXq|lH`][oXHvRNmcU|VvWafM?Pdj\\Adfi?AVrlGy{sZHBVRjw_arc}tR^M]H{VgNXsIIq\\RRhX^qX_Yo|RnPD[}NXsaI_pb~NAR[GdHxGhP[mCuut^fMf\\h]\\Sd`?WTE]LPFkAbWN}G[wZhS`{RoNFw]J|NP]KWBeQzHTcFvi}`ogvbqzVA@OPR\\EXRsskT\\mqwpiX~Zt[kwGX?[\\XWAeOn^w]FkVytVXLYoGYWGgLB~oy`HFkZQBE~`igdwlOR[^M_cf`GO~u}vVD]qb[hHTOtiH]B]aN?ufHPjEFGM`{szkINqfsg?qWBXD}NDat[[y~oyy`CA~qpQrMHOepeiX\\`X\\TqLCsms{PtEmwRWxtj?KbQhO]{BlVsUX}Ak[lUPZDXrXV\\r^{r`aGYw@LiGAkPtDPhqdA~p`QNmOvL\\Qv@qT]pIJgygt~ha|ZtKQQZOKvvkJBKE@fbsADTgFmWWCbgn|NTir^ThEDzYIhonfq\\L`^IIo_BGePb\\gdzNF\\wKupFrNKCo\\KXihJeKXim}Zny]Spu[RHHoarjbeCOOfsqe_|sDf\\ciDSh{aM]o]Ii[]saLAnO{ttaCZQv^pF[MUUqKKd}OiMdgtDMmYHViH^L_Ve_XvPFc?RwZbeUrLJnNBEnOrP~VdATozboL`VTDy_iz[jhC@KhnSqM@AT|~WA_a~@T~ICmtQYQVVOwz_^Nazd|DtaBERWB^Q~hhaCqBhSGIiD[vfxmw_AqaI}flp^PlE|gdxC]@JfWxNrCXAFeLPZbje^_CgADKz]__EiP}LYXAk}mdrugd^Eu{tvKWY@uIt`RmmscGg}zQyOxSgHCNeto?OmaUI^fI^AUbmZ{PAl{RS{E|xwybr`YJeM?lLIX_U|`[LjqX@oJCel|SYmIIj@K@ziNuZhv?]inGMAzmM{kwJOZWZSHcvAyWAq}TUHiCbYY|b^Blx]GaHDQSkXqYGt^TB{]{NDRZXmZhWSN|J|TO`PEkNCCuGxyt]EagjsyO_mSo?[bVm^bZpcYyBYz`k}g?mzXZWDrTG_WA}_xuouSFNKpWITVQTB_wvoJTXK{}pwSFLuZuba~~A[HCwTiTzMlWGM|^l?_MG?|o@VRLfeljXms@CG?iKF\\iGqkuByVir}ft}TZ{kXmWJIqp_Q`I]?JHc\\TDZXY|HOCDwLqZ_Ohs]jwQOYlcse@b?IQJ[kAB~{p^piaqBXF^zi~jB}\\kYI]P|Z[rtaY]v?bOER\\QXNu?_g}Pf{Pgl|vu[ZKP}nGPzII~PSl_fYXHT|eJ~Ngd}JPtZDFBkZwoBGUPqHTiZrGJqhedLfenvMTygwsXxQm{SqLW~BrbyBpMrlleDb|JLSHqgWa_Q}af{KAXVfGBiDwxvBhzUmfn\\ofLhhl~~CDcTZuOivdUH`JaeSLKrwHTDEwP^xd~s?f~GOHEk{ixun`^iwgzHWEYO~zh^mWsVuc~RIs@LNKOQgtZ@FJtiIVEtWVpljX\\ogBJuD~earaOzH{]a|SzbrmyO{tV[VVCcKYMSgoFtDxKWl`bK[JmkXbfDtd^xWb}d`TF{wXqO~QvazmiXJjC`dywVIDgw^GpDyMZ`pjaJZOft|INUjRMI|GuUfyh_AoVI}\\ydPHwN~cJi@\\oaKeL}HFzE?z_mfxbqOw_UVc\\rN~tJpQFPLsQNMGs`XcbY{tzr}_qoPWJmaHy`@fXOFyz}`O_ZX}]rOcunv[BWTNjaN^QyK_t\\^Ou|uxeGxFeM?hbgHouzQEl\\WM^@VDsXHr\\}i{zahc\\kODrkFz`[s{XO\\nT~\\Fw_ETcV}[`bdJsMOLXAPNeArSnws@PXyFepciEqT~\\}RCZJ~Y^GlAMPnvvG\\`_yCDSqVW{kFalvAPvd?mRQ{]kD?mtu[PyEX[Zyxd@VIy_~Jg~QJ^j_lTmMUEW?BpD\\ov\\BrkFkOs]XRC~UXzpqkSB@[Fze|UpV@l{PmhNkK\\wYP@^x|FLlq@Th`iKmpEHQFzhegYfUXKVZ}KsBZGMjND]rs]tomI{EYQB\\?}ult^cJwSJyWfP]IZB?oBQ|e^_dS[}KUXNIua[jKjm~NQ^^}C@c~mEONAs|JOuNYM~h?QP|@u|]hpIClYQAiYI@hHGmFxkPH^\\ZZ~tSEcolTu~{?dSdzuEfW\\OYD`HUJ{P`bPJPN]L|@}hGdFtXxWt^IIMPzvEFt_Q{Q__N{^|]hzfKaeC@sakgadEqRDCHlGx|{ZltLXhSk|dUptoNHjC^a]yn~FxLPB_OGbyWL|UxMKNyXssTBrNZ@CQlPYWeweZFtEAfTHiEdb}vECz~CY_\\SyFTrYreVXCti}DxLssqwJzwQHCw}RRBhWJcGV^@HFANreJ]MzYUjmywyJ]XpSuek_oe[{nSdFbC@AtiULw{tVdp{kSWDjwFGEpkqRtrnBcXy|oh`VhDJtZjAhvqNDgVjQZ_pn{ChKI`EinYqjAQyGx^kll\\Oa_~I[{Xky`zJgszPsvkUZwrgDOa\\DvNs_LhikRhcDdOfhQAdwlYT~hd_[B}e\\ETSdTnxbFtB|bBiABjJ}`vkD|}WwWMWhl_tfAzcOdSJ|jYe?wvBqVgnVHpYug{vdgOZDVWpBrBBMCkoZ|zVjfJmIQgqQODR^kyMbPD]UEzcRU@M?m~RVIM^f_@ugc{~SMpIt|a`o\\viHk{h@sry[xAF`BtccoXXMQosr]MjMI[oE~cjPt}P^jXaPBllGq\\MAdTxUl{^gtLbW[InBDqCHf@QyiQqsKYjd|PTWdwBVQ~SdOhHrtnNqkUXcj\\T\\]|E^K[Vw?dJeh`QKzGfSgVdRVWhiHUXscPVOsqEZjmR`OmbLduyNQuhlFpSVnSaOSmlD}[mQiwP}tLRCoutY_VbgmWlNUbFKeLGG^YL_~d`~}Wqm@I^JaS?Tvn]hBoMfcMtx\\Ps\\_EM}FBG`[seYDrITRwmFsIeHeuoekXNuBU^dDt\\VixDFIlhxpsYoU_NzP][A?|pGfLNMbNZA|_@JWrbpxCTXo^RanyGvyUTISNefH\\?XcsqExHwqyr^VbS|A^hOKYSEonMBWY`s~uTmqaqNYtNIeGZzKpWxTPJnurR]kGFDfX`cqztmWaQHHleBgqGShaHNjZetkpRiiUGTKqrS`UxivK}AzYzobNc}oWf\\GpTJ\\`PdmtqxJugL[ZgP_sy]@vjCcrsyClaiXZKjVQe\\xgZ~kWbOc@xHzqwmTrwrBbAPs~wqMEQ\\idDkZHSVHy}?ce|`motcoAbll`mIdFU|NiSJ]tthJj{l?yY_cpwD`vs}RsPKpfnApZcH?X|NYYI{DgZaExEwoxPQuH~bzFLqPMjx\\IEm{PHUbwRG]sxphYEOJCkEZuAFM@IKV`EY\\Y~Rs{VacjV]_LKbN[RirUs_skoVx~KrsQyQIthrUeqUY}\\IDJwQXHRPmgoMyNvxYpJuO\\zkBXTfhsASPpszPx_EapTdslORUr}NNakZhImg{afrOYAh~Q^xHyGEglddXarFFdGn\\aIvhtNOkLShIuiUZy|ZF?BF]doJSC{uN@RCICHOcYNzNgudBgN~}Zm[YE?OXL\\xWOrZxzklmXxpbW_NmgQroE|QbsVeZqlzRBvoosT{joAJ?Nh|kN[?uqL_nfmBwvwHSsRfZ[YcNbY?KZh~ACwfE]^bZV@L_wNzXKTMLDBwqDe}PM[auGGbcLtokAbyLbyyS~~tTweVU@TVQiH?^fYMegCILowNtSr?xmkWgaLnHKeN\\ZBMpPAVU{JoElf~onjAFHCqFN~I^hcgurSrQQBGAl_Rime@xKWrIHkPFrj{xJEvixn]@c[@hfCv??~c~Umgg`bB{NMo]|w\\hWvXo?wcfpYxyW@_DjXvZ_vB|ff`wbq`VpvCAUbZQsfPR_q^nmuFQAbmkMvi_XLyXcZOgnnEyDmABrczbUjNCYQdtZOFNr[_BL^Jlot{AKo[bxU|FLFS]|Ut?IjwVXl`j_YMchVSxqhMYWkFXMV[a^WYX\\ROpDjATVJue^srDgHDVm[uhUU[VHAkRsaQ@~i{xTKJ@jSVG\\A][X^wA@nzBlU?NjTsugsW|noDl]xbgiBgEgb}dOzHd[^[`HQYvee`ROGDU_}XIvstTwL?GZIntaLR^Fcp`P^h`U~Q`J]TEwrHgGncnBFk\\[euWnLDTLPFgGqVydkf|fAODsPTAs}J|kkwemwFReFDk~WrRCdTFOfwIeX}oNhA|UOZwzkMEXlXscSQsBBheeUBLffnPu@WLD~IPiM}H`uQmPrhyssT|_CeAEMDgF^uekkflkba|qVAMI@mkVg\\CyILJdObXvBMnNPIgPB{U_mgEwJ~vZ}APegBB{hUi\\J`~nl?]aJMRMAvO[JhkQmQU\\XXMEfOi`LLFb}Zt``Sqed{AEJuyaMsR}C^PaZrvDmSNEc\\MeAy{WmTWvd]rYl{IjZI|T?dCw}?[`~QOcSMry_qExftf@dzlutMOlgYKE}]RmyLo`^@TWRerkNJWMouCoyxqKzVNocgs}oB]hd|XgkEgPAwk|dLju`Wb`XCEy|\\IXXY|XD|fEiGTRPwWOX`taeDopmkmQoZmJ}lqsW^SEOnkRYU^CxO|IIRBuZtuL\\ah}rLgJo?_aCx}ox{hMl@tlJ{d@HqpjpjgCtc_XUzqlRxSku_]LXlJgc]AXuIH}Qo~MAqa]td|`O~tse@FQQce^P?f[g`qmLrHzZuxi_q@txKvH]?FbKunp[pekymdN`s\\OK]OVRjIUr`YgYBvy]bg{jCan|\\HypDWJ?zjWsYWdH|_tLMsWyjekBoxaQRcnaKa}|GJxEtFtINR}PIRDvj{NHWnC{Q?w~D[kdHVwkD_G|OZ^s_f\\D{FziLyu@Az`YWbAd~GeFj[jiMigdkh]tMbEsuwrFhAfqzgcZJClqAAK_}jGj}?p}hWbu]vdqZw[D?]hnVz[[TQgWcB\\\\`fbhgnEO[YSXo}KRX^ubidYdY{dYVP}\\?@wd?ZSmk~eWwnlNAg~uaW_u?FiNeWFnPRIEbGx^uWyuaHLbhtjqtA|@gsg`?LHhsCtVB|iJt@}}|RurDYVe`pdN\\qkQ?Yd{{CtPMQQ{ohUGn{{cthE|RPuKwh[G?dRwwMTHrRZYttdd@}p?R|yhn@Y|c@B\\|b`KuhEww~oSXusCwS{N^IlFz|Yau?PKpd_C~EZR}KW~JxPE_rTFzESgX`?Ikcqr^RJA}^_k?dTzKkF^YI{SRCTjFfAgtZ_zclzw^s`j{oVZfpAoTou?ycOdzsN\\MKKjHbUvGSHzHZ]J_w@]eaNaORDyKXzsSb|hWUjfLcskqTGjCj~W[Pf}YPkVxSnHTHhE]Pt[m_?~KwwreHQM`m@NlaGANyVygfYjLTCtYys~[KBz\\{GYArUYHWx`sVq?lLczyQIMYbTMTSY{t@apsvpQrYhPoInklSee`oZNmvJGZFfIN`D_L`XLJ]s}\\BQpkT|V?[eBFM_{dinGQtz_WMmacTbxXxooXPExM~WlBjRsDcfxtUPvDmopp]WKLp]VDTEetS\\`CMJBiZSHsVH}VBSZbWQkNyrhu_yhL{xcZRwWHxUkk]EsZbojkjz[wLECcO_\\nvq?o`NCEzAWgHmn^[v\\krUrGfj]ImSaHZu|SrROCIdjKutefTEVVIxKXp_J_|QaU^VdrQB~WU|JADWtQv}gL?gsariepQkZmLqJhta`T}sGkf]Z@fnGSFfxOrf\\YWf@wnZ@?qfbdQUadE~zWxCP?sV\\fj`dIWNyGENFi~S^E?rmrdmJoAvMfRca_lNa]CRmWJ{{hsERVKrF`v?uXqXxDtazGB{HzkATTWyfOR]r?ywmabKAnm{jIFM[dsE?JSPOvFzSkTJP|N|t_LVLeZb`TKWPUadZw]PuDNYFTYuecK`t_xu`K~gMfyJpISSw]pi_s}ojen_Svd?xtkUeSjWZHCVBYzOK@jzjxAZjNkF_hGPKwMI~HiV?q[zgxzSeQ@i[zdvhbH{J[?|Dx\\u?PreEmCtN\\XsXjcsT`rfRgFAhqY?XJz~FrTqIbyPLp\\riLHhlxTpd_FXjXMnR_n@JaBPKByDn[MUDVouscxUwOndlQvA?o{MGEMhvpD~[GDDfvpA]`|IF{RbnmQYXkpoMkb\\`]PJNf@xWLbdouXKICQ~ymLea\\TBawdkJBv[sOSAzgF?pJZfE[j|RnKLM~PBgqaLf\\Dp[AfWisnT_nzHgpHIzWE_^EuKwi\\FLAXJudp`@LmVnQxW@NbAkfVBMPs~f_^\\|hQb`lwJMLPAyqcL{QhVEe_BgsukQdF[bH~iuHJoYfIl}behXqHWzNR{wBgPtUYJ`Lrt`PUJxi^MYWzcE[dQcR[d{`^GKzKMRfoaH~?hun?`qqwlk~GyAi]?leY?UvOjDZ^}MLsR{LO~gAXTbCyFHfx}PcivhWHEmAuYqprIgw~WoqqvKit]pu_hz@PHHitGxsDt|weNGZ|Q`][\\@{cJ}CErPPhkYKtZq?YZ@z|DHnaqGkClmxid^]FpJhFRtsOhl^?hr{bfnMC{F`TN?S{UuLDITAIS@~^m@UNvchVA^HaowLC[sg{G^uV^ktwoIDLXTy?eix`_x|eTnfA~jMiP[[HHMokTbPeSicjAHrXxyUxdtAAbHqztAeeNKYezP^WdO{qpQXhT?EbZE]Eq}vcsZb[pPep[CaKRHuESvYQiijp[piJ]cCk?iVH|qrZi]gXmmAHvefMLbI[gR]eIlto[fj@rCPEygxV{km^S{PXtBQgWAALsNNug|xXO`^rcG_GmWVCzeE~ZyLVhu^iBAa{aToM_[[NyTqveCyMnrPBhQRAoZeSZqXwozCME\\]fU?`xrNqr[KFMSeDhseBD?~{x~xu`D_WXbXeBYl`?TTrV}JNMmyg{xpHS@sWplpV[kWUM`t@jfG_qhCvAJ{\\kz{i_HoeonR[|DQdxfnqWtBhU|_ot`eVU{ss{Vgn}E{FDOd]CRrWn?ZeFK_GMWoYBDOJ|UzTFJ~[bFbwU~VtC}m?P]ZO@wf?e}kd}h\\th^gQsl\\OgrQzLA_cnuOUw\\fSJY@H_zWDBXXltTS^wg~clyP|gfdttd?NgmlYHgzsK{`Be|P|NHyYp_rjO@PQPj\\XmpDk|w\\t?WEXnEtUma_@^jiSwNFJ^wAzrHP}FUCdtZ~XOQe]iJqXw\\Rl_@oV`gwtyXC[oOy|ch}SRG\\a]}hqbWuBD?~GK^A_vfkksJDfvdIjWsVHrAfIjtZuIV{UsBnHcSTuoxWmWoyGPLxLYZPaJPlMUpHpUV\\KaiUMhE}{eILygK_hljXlbK~`kKMxIq]wJxnbROSeAUQDpc~YUZfGvRThOopaW{|tfCa_EiKwqmZjridQfSGT_kfI^fL}tpEY^_jCWaL~]nHuoKUwpiz_qfAtaIbD`mqfajpUPl[AQzOGnUTKsx[]}?aJSfNdyDN{nYpRE_jG~hgb}h?ez|\\uY|vQ_G?_I}\\vlYF]OTBXgxoC@zMXKlJVS}S]COfKjjcuqbj[`a|PkmayLKHQCeu^MEsxNnxxjySFM@|deTKdiSByGlFg\\IpehxOHhOoPg}~AMhWCMtWfVxw[xz\\MRnxyabGomQJFnmgwihT~saBAKj@lfb_zVSxgHYu_LV?RJPoxSV}_WrEylp]wkCZeQtJMlFRF{Nd]nAZ`mA[KdVUHX^z?jk?S_FS@NsMZmrxwjZVoNk]T_[OrFRKm?]Q[Y[siSRqjwqTyEvdp`wRSr}KrcQnSaZ^UDffeavMxbWhOBmHB@ieWysplY`{aqBRFkOs[YDVagLGg^_XuGL^}~z|kJE^o[nh^IR~gb`AhWztsAiawuetSn@mCmINgBTW_BAgrPmFxUmIpwBfRGQn\\~}cExUY[UpVsiIjcG|GIIdr`{{}FxZnx[tgog`RBxBnMJOcDB}ZaQR|oWeUExDBYBI[Z]ndyOGvXsOzNVNv?{_wekeC\\ckzu\\?Z}vmmcQpPkQXLhnrEoWOFvuGyUXhRX?ocZpmxkYOJDS\\JM[z?fKNmrBeFn}CcA}YvzqVrymqQtTk@NBCAGawjN`WdZ{mYNOwTc]sY?PIOatg^?{MvO^ybMS~}HXuPBeJLnC\\qwS{^rqgHuFUD]cc~zy`SwzJQMEZAJwAtWeFOs_E^uiXOQIhOzEg\\_ydm\\Ed}`YDm[t}sy{K{Xf|o`{M]FBoBxwyMv^lPFN[H?{EFo{NwAFAKfowGFoG~o[?^@~EM{PBKhFF{pe@@~`}N}\\kEzo^{N_B}@~?N~wFx}Oz\\?N?{F?B}?N{?F}?}FmsEW?Nw?N{??~~@}Br?uc~?Bo]?~~_@~}Bb~zs????????????????????????????????????N~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
comment:33 Changed 6 months ago by
OK, I checked these 4 graphs, and it appears that the 1st two are not isomorphic to the 2nd two (assuming we trust our py2 implementations of automorphism computations - the 1st two have groups of order 27, teh 2nd two of order 3). Quite unexpectedly to me, the 2nd two are strongly regular with the same parameters as the 1st two (this explains why it takes forever to try to compute isomorphisms).
So this invalidates my claim that the automorphism computation broke, it's the construction of this particular graph that broke (a bit).
comment:34 Changed 6 months ago by
I can not help for checking the validity of MathonPseudocyclicStronglyRegularGraph
...
comment:35 Changed 6 months ago by
The fact is that this doctest the latter produces different results in py2 and py3.
I understand that there is a way to skip a test for py3, so this can be done here, and another py3-specific ticket opened to deal with the discrepancy.
comment:36 Changed 6 months ago by
You mean that we should hide the py3 failing doctest ? Is it really useful ?
Currently, this ticket align the behaviors of the 2 methods ('sage' and 'bliss'), do some cleaning and fix 1 doctest for py3. The other issues for which further work is needed are not touched.
comment:37 in reply to: ↑ 10 Changed 6 months ago by
Replying to dcoudert:
I tried to investigate further on the possible cause of the issues with
automorphism_group
and the Python3 failing doctests insrc/sage/graphs/generators/families.py
.The good news is that we have the same result with
'bliss'
and'sage'
sage: G = graphs.PaleyGraph(9) sage: a = G.automorphism_group(partition=[sorted(G)]) sage: it = (x for x in a.normal_subgroups() if x.order() == 9) sage: subg = next(iter(it)) sage: r = [matrix(libgap.PermutationMat(libgap(z), 9).sage()) ....: for z in subg] sage: ff = list(map(lambda y: (y[0]-1,y[1]-1), ....: Permutation(map(lambda x: 1+r.index(x^-1), r)).cycle_tuples()[1:])) sage: L = sum(i*(r[a]-r[b]) for i,(a,b) in zip(range(1,len(ff)+1), ff)) sage: G.relabel() sage: G3x3=graphs.MathonPseudocyclicStronglyRegularGraph(2,G=G,L=L) sage: G3x3.is_strongly_regular(parameters=True) (441, 220, 109, 110) sage: G3x3.automorphism_group(algorithm="bliss").order() # optional - bliss 3 # <-- expect 27 in Python 2 sage: G3x3.automorphism_group(algorithm="sage").order() # long time 3 # <-- expect 27 in Python 2The issue may come from
PermutationGroup
that is used in both case...
I'm checking this example in Py3, comparing with Py2, and I see that G.relabel()
is the place where the first discrepancy occurs.
Namely, the order of the new vertices in Py3 differs from the one in Py2, where the order is the same as in the output of G.vertices()
before relabeling.
In Py2 the edge (0,1), where 0,1 are elements of the finite field GF(9), and they also come the 1st in G.vertices()
, is mapped by relabeling to (0,1), but in Py3 this edge is gone.
Is there a way to force G.relabel()
to keep the order of G.vertices()
?
comment:38 Changed 6 months ago by
In fact, this looks like a Py3-bug to me.
sage: G = graphs.PaleyGraph(9); G.relabel() sage: graphs.PaleyGraph(9).adjacency_matrix()==G.adjacency_matrix() # Py3 -in Py2 it's True False
It is really totally unexpected that G.relabel()
breaks the ordering. Imagine G
being in the canonical form, and then G.relabel()
breaking it.
I think G.relabel()
must leave the adjacency matrix of G
intact.
comment:39 Changed 6 months ago by
I disagree with that. The only way to preserve the ordering is to sort vertex labels, and we want to avoid sorting as much as possible in py3.
If a user wants a specific ordering, it is possible to use G.relabel(perm=G.vertices())
.
Similarly for the adjacency matrix, we can now specify the ordering of the vertices.
Now, for the canonical labeling, the labeling is not unique. It depends on the algorithm used ('sage' and 'bliss' can give different answers), and also on vertex labels.
So we need to find another solution.
comment:40 Changed 6 months ago by
- Commit changed from 15790aa56f4c445a53f708b02c9759e15441ddf4 to ad9b46f7d3e00bca5ff399f78a54897b1366f1b7
Branch pushed to git repo; I updated commit sha1. New commits:
ad9b46f | relabel with an identity perm
|
comment:41 Changed 6 months ago by
this commit should do the trick, at least this fixes the two failing doctest in src/sage/graphs/generators/families.py for this branch on Py3.
comment:42 Changed 6 months ago by
- Reviewers set to Dima Pasechnik
- Status changed from needs_review to positive_review
OK
comment:43 Changed 6 months ago by
failing patchbot is not compatible with positive review :
sage -t --long src/sage/geometry/polyhedron/ppl_lattice_polytope.py ********************************************************************** File "src/sage/geometry/polyhedron/ppl_lattice_polytope.py", line 986, in sage.geometry.polyhedron.ppl_lattice_polytope.LatticePolytope_PPL_class.restricted_automorphism_group Failed example: set(G.domain()) == set(Z3square.vertices()) Expected: True Got: False
comment:44 Changed 6 months ago by
- Status changed from positive_review to needs_work
indeed, None
in the domain of the group G
below, due to something wrong in this branch.
sage: from sage.geometry.polyhedron.ppl_lattice_polytope import LatticePolytope_PPL sage: Z3square = LatticePolytope_PPL((0,0), (1,2), (2,1), (3,3)) sage: Z3square.restricted_automorphism_group(vertex_labels=(1,2,3,4)) == PermutationGroup([[(2,3)],[(1,2),(3,4)]]) True sage: G = Z3square.restricted_automorphism_group() sage: G == PermutationGroup([[((1,2),(2,1))],[((0,0),(1,2)),((2,1),(3,3))],[((0,0),(3,3))]]) True sage: G.domain() {(0, 0), (1, 2), (2, 1), (3, 3), None, None, None, None} sage: Z3square.vertices() ((0, 0), (1, 2), (2, 1), (3, 3)) sage: set(G.domain()) {None, (0, 0), (1, 2), (2, 1), (3, 3)}
comment:45 Changed 6 months ago by
to narrow this None
nonsense down; in this branch one gets:
sage: G=Graph([(0, 1, 1/4), (0, 2, 1/4), (0, 3, -1/4), (1, 2, -1/4), (1, 3, 1/4), (2, 3, 1/4)]) sage: a=G.automorphism_group(edge_labels=True) sage: a.domain() {0, 1, 2, 3, None, None, None, None}
comment:46 Changed 6 months ago by
even more specifically, the problem is in bliss interface:
sage: a=G.automorphism_group(edge_labels=True, algorithm="sage") sage: a.domain() {0, 1, 2, 3} sage: a=G.automorphism_group(edge_labels=True, algorithm="bliss") sage: a.domain() {0, 1, 2, 3, None, None, None, None}
comment:47 Changed 6 months ago by
OK, so the bug is here in src/sage/graphs/bliss.pyx
:
gens = automorphism_group_gens_from_edge_list(Vnr, Vout, Vin, Lnr, labels, int2vert, partition, directed) from sage.groups.perm_gps.permgroup import PermutationGroup - return PermutationGroup(gens, domain=list(G)) + return PermutationGroup(gens, domain=int2vert)
this change does not take into account that automorphism_group_gens_from_edge_list
modifies int2vert
for edge-labelled graphs (bliss cannot do edge-labelled graphs directly, and so a bunch of axiliary vertices and edges is created to deal with them).
(Specifically, adds stuff to the end of the list; so one can return the original
slice of int2vert
).
88bde074188 (David Coudert 2019-03-30 15:45:07 +0100 741) return PermutationGroup(gens, domain=int2vert)
David, can you fix this?
comment:48 Changed 6 months ago by
- Commit changed from ad9b46f7d3e00bca5ff399f78a54897b1366f1b7 to 50a69e8454a4b77beaffc726c6babc472488641a
comment:49 Changed 6 months ago by
Thank you Dima for identifying this issue. Fixed.
comment:50 Changed 6 months ago by
green bot. back to needs review ?
comment:51 Changed 6 months ago by
- Status changed from needs_work to needs_review
Yes, forgot to set it back. Thanks.
comment:52 Changed 6 months ago by
- Description modified (diff)
I have updated the ticket description as this ticket fix all doctests in families.py
.
comment:53 Changed 6 months ago by
Could you rather chop off the extra tail grown in automorphism_group_gens_from_edge_list
rather than creating yet another list?
comment:54 Changed 6 months ago by
- Commit changed from 50a69e8454a4b77beaffc726c6babc472488641a to 2136e19817814b9466acb712bd15daa1ca2ca83b
comment:55 Changed 6 months ago by
Done.
comment:56 Changed 6 months ago by
IMHO the latest commit creates a memory leak. These extra entries for the domain need to be explicitly deallocated in automorphism_group_gens_from_edge_list
, no?
comment:57 Changed 6 months ago by
Are you sure ? int2vert[:G.order()]
gives a new sublist (a copy?) to PermutationGroup
, no? and then variable int2vert
is deallocated.
comment:58 Changed 6 months ago by
- Status changed from needs_review to positive_review
OK. It's fine, I didn't pay attention to int2vert
being a Python list.
comment:59 Changed 6 months ago by
Thank you.
comment:60 Changed 6 months ago by
- Branch changed from public/graphs/27571_automorphism to 2136e19817814b9466acb712bd15daa1ca2ca83b
- Resolution set to fixed
- Status changed from positive_review to closed
comment:61 Changed 5 months ago by
- Milestone changed from sage-8.8 to sage-8.9
Not in Sage 8.8. Let's please to try keep tickets' milestones related to the release in which we actually intend to include them, and in particular the release in which they were actually included, especially when closing tickets.
New commits:
trac #27571: fix a doctest in families.py