From 3eae349a0ac28f94d19b4b971e8fae43f758a03d Mon Sep 17 00:00:00 2001 From: shortcutme <tamas@zeronet.io> Date: Sat, 16 Mar 2019 02:58:49 +0100 Subject: [PATCH] Remove included win_inet_pton, websocket, rsa, socks, pyelliptic, pybitcointools, pyasn1, opensslVerify, merkletools, geventwebsocket, BitcoinECC, bencode module --- src/lib/BitcoinECC/BitcoinECC.py | 467 --- src/lib/BitcoinECC/__init__.py | 0 src/lib/BitcoinECC/newBitcoinECC.py | 461 --- src/lib/PySocks/LICENSE | 22 - src/lib/PySocks/README.md | 299 -- src/lib/PySocks/__init__.py | 0 src/lib/PySocks/setup.py | 17 - src/lib/PySocks/socks.py | 699 ---- src/lib/PySocks/sockshandler.py | 79 - src/lib/bencode/__init__.py | 7 - src/lib/bencode/decode.py | 141 - src/lib/bencode/encode.py | 22 - src/lib/geventwebsocket/AUTHORS | 9 - src/lib/geventwebsocket/LICENSE | 13 - src/lib/geventwebsocket/__init__.py | 21 - src/lib/geventwebsocket/_compat.py | 23 - src/lib/geventwebsocket/exceptions.py | 19 - src/lib/geventwebsocket/gunicorn/__init__.py | 0 src/lib/geventwebsocket/gunicorn/workers.py | 6 - src/lib/geventwebsocket/handler.py | 283 -- src/lib/geventwebsocket/logging.py | 32 - src/lib/geventwebsocket/protocols/__init__.py | 0 src/lib/geventwebsocket/protocols/base.py | 35 - src/lib/geventwebsocket/protocols/wamp.py | 235 -- src/lib/geventwebsocket/resource.py | 100 - src/lib/geventwebsocket/server.py | 34 - src/lib/geventwebsocket/utf8validator.py | 224 -- src/lib/geventwebsocket/utils.py | 45 - src/lib/geventwebsocket/websocket.py | 570 ---- src/lib/merkletools/LICENSE | 21 - src/lib/merkletools/README.md | 178 -- src/lib/merkletools/__init__.py | 138 - src/lib/merkletools/setup.py | 29 - src/lib/opensslVerify/HashInfo.txt | Bin 2318 -> 0 bytes src/lib/opensslVerify/OpenSSL License.txt | 126 - src/lib/opensslVerify/ReadMe.txt | 59 - src/lib/opensslVerify/__init__.py | 0 src/lib/opensslVerify/gencert.cmd | 10 - src/lib/opensslVerify/libeay32.dll | Bin 1369088 -> 0 bytes src/lib/opensslVerify/license.txt | 127 - src/lib/opensslVerify/openssl.cnf | 70 - src/lib/opensslVerify/openssl.exe | Bin 518656 -> 0 bytes src/lib/opensslVerify/opensslVerify.py | 455 --- src/lib/opensslVerify/ssleay32.dll | Bin 337408 -> 0 bytes src/lib/pyasn1/LICENSE.rst | 24 - src/lib/pyasn1/__init__.py | 8 - src/lib/pyasn1/codec/__init__.py | 1 - src/lib/pyasn1/codec/ber/__init__.py | 1 - src/lib/pyasn1/codec/ber/decoder.py | 1048 ------ src/lib/pyasn1/codec/ber/encoder.py | 506 --- src/lib/pyasn1/codec/ber/eoo.py | 25 - src/lib/pyasn1/codec/cer/__init__.py | 1 - src/lib/pyasn1/codec/cer/decoder.py | 87 - src/lib/pyasn1/codec/cer/encoder.py | 179 -- src/lib/pyasn1/codec/der/__init__.py | 1 - src/lib/pyasn1/codec/der/decoder.py | 69 - src/lib/pyasn1/codec/der/encoder.py | 67 - src/lib/pyasn1/codec/native/__init__.py | 1 - src/lib/pyasn1/codec/native/decoder.py | 188 -- src/lib/pyasn1/codec/native/encoder.py | 215 -- src/lib/pyasn1/compat/__init__.py | 1 - src/lib/pyasn1/compat/binary.py | 25 - src/lib/pyasn1/compat/integer.py | 96 - src/lib/pyasn1/compat/octets.py | 46 - src/lib/pyasn1/debug.py | 130 - src/lib/pyasn1/error.py | 18 - src/lib/pyasn1/type/__init__.py | 1 - src/lib/pyasn1/type/base.py | 617 ---- src/lib/pyasn1/type/char.py | 378 --- src/lib/pyasn1/type/constraint.py | 283 -- src/lib/pyasn1/type/error.py | 11 - src/lib/pyasn1/type/namedtype.py | 475 --- src/lib/pyasn1/type/namedval.py | 94 - src/lib/pyasn1/type/tag.py | 342 -- src/lib/pyasn1/type/tagmap.py | 102 - src/lib/pyasn1/type/univ.py | 2806 ----------------- src/lib/pyasn1/type/useful.py | 39 - src/lib/pybitcointools/LICENSE | 27 - src/lib/pybitcointools/MANIFEST.in | 1 - src/lib/pybitcointools/README.md | 142 - src/lib/pybitcointools/__init__.py | 0 src/lib/pybitcointools/bitcoin/__init__.py | 10 - src/lib/pybitcointools/bitcoin/bci.py | 528 ---- src/lib/pybitcointools/bitcoin/blocks.py | 50 - src/lib/pybitcointools/bitcoin/composite.py | 128 - .../pybitcointools/bitcoin/deterministic.py | 199 -- src/lib/pybitcointools/bitcoin/english.txt | 2048 ------------ src/lib/pybitcointools/bitcoin/main.py | 581 ---- src/lib/pybitcointools/bitcoin/mnemonic.py | 127 - src/lib/pybitcointools/bitcoin/py2specials.py | 98 - src/lib/pybitcointools/bitcoin/py3specials.py | 123 - src/lib/pybitcointools/bitcoin/ripemd.py | 414 --- src/lib/pybitcointools/bitcoin/stealth.py | 100 - src/lib/pybitcointools/bitcoin/transaction.py | 514 --- src/lib/pybitcointools/pybtctool | 36 - src/lib/pybitcointools/setup.py | 17 - src/lib/pybitcointools/test.py | 496 --- src/lib/pybitcointools/test_stealth.py | 92 - src/lib/pyelliptic/LICENSE | 674 ---- src/lib/pyelliptic/README.md | 67 - src/lib/pyelliptic/__init__.py | 19 - src/lib/pyelliptic/arithmetic.py | 106 - src/lib/pyelliptic/cipher.py | 84 - src/lib/pyelliptic/ecc.py | 480 --- src/lib/pyelliptic/hash.py | 69 - src/lib/pyelliptic/openssl.py | 504 --- src/lib/rsa/LICENSE | 13 - src/lib/rsa/__init__.py | 42 - src/lib/rsa/_compat.py | 148 - src/lib/rsa/_version133.py | 441 --- src/lib/rsa/_version200.py | 513 --- src/lib/rsa/asn1.py | 53 - src/lib/rsa/bigfile.py | 135 - src/lib/rsa/cli.py | 383 --- src/lib/rsa/common.py | 188 -- src/lib/rsa/core.py | 57 - src/lib/rsa/key.py | 739 ----- src/lib/rsa/parallel.py | 100 - src/lib/rsa/pem.py | 125 - src/lib/rsa/pkcs1.py | 381 --- src/lib/rsa/prime.py | 178 -- src/lib/rsa/randnum.py | 98 - src/lib/rsa/transform.py | 224 -- src/lib/rsa/util.py | 79 - src/lib/rsa/varblock.py | 179 -- src/lib/websocket/ChangeLog | 302 -- src/lib/websocket/LICENSE | 135 - src/lib/websocket/README.rst | 268 -- src/lib/websocket/__init__.py | 29 - src/lib/websocket/_abnf.py | 447 --- src/lib/websocket/_app.py | 320 -- src/lib/websocket/_cookiejar.py | 52 - src/lib/websocket/_core.py | 495 --- src/lib/websocket/_exceptions.py | 87 - src/lib/websocket/_handshake.py | 180 -- src/lib/websocket/_http.py | 256 -- src/lib/websocket/_logging.py | 74 - src/lib/websocket/_socket.py | 126 - src/lib/websocket/_ssl_compat.py | 44 - src/lib/websocket/_url.py | 160 - src/lib/websocket/_utils.py | 105 - src/lib/win_inet_pton/__init__.py | 84 - 142 files changed, 27935 deletions(-) delete mode 100644 src/lib/BitcoinECC/BitcoinECC.py delete mode 100644 src/lib/BitcoinECC/__init__.py delete mode 100644 src/lib/BitcoinECC/newBitcoinECC.py delete mode 100644 src/lib/PySocks/LICENSE delete mode 100644 src/lib/PySocks/README.md delete mode 100644 src/lib/PySocks/__init__.py delete mode 100644 src/lib/PySocks/setup.py delete mode 100644 src/lib/PySocks/socks.py delete mode 100644 src/lib/PySocks/sockshandler.py delete mode 100644 src/lib/bencode/__init__.py delete mode 100644 src/lib/bencode/decode.py delete mode 100644 src/lib/bencode/encode.py delete mode 100644 src/lib/geventwebsocket/AUTHORS delete mode 100644 src/lib/geventwebsocket/LICENSE delete mode 100644 src/lib/geventwebsocket/__init__.py delete mode 100644 src/lib/geventwebsocket/_compat.py delete mode 100644 src/lib/geventwebsocket/exceptions.py delete mode 100644 src/lib/geventwebsocket/gunicorn/__init__.py delete mode 100644 src/lib/geventwebsocket/gunicorn/workers.py delete mode 100644 src/lib/geventwebsocket/handler.py delete mode 100644 src/lib/geventwebsocket/logging.py delete mode 100644 src/lib/geventwebsocket/protocols/__init__.py delete mode 100644 src/lib/geventwebsocket/protocols/base.py delete mode 100644 src/lib/geventwebsocket/protocols/wamp.py delete mode 100644 src/lib/geventwebsocket/resource.py delete mode 100644 src/lib/geventwebsocket/server.py delete mode 100644 src/lib/geventwebsocket/utf8validator.py delete mode 100644 src/lib/geventwebsocket/utils.py delete mode 100644 src/lib/geventwebsocket/websocket.py delete mode 100644 src/lib/merkletools/LICENSE delete mode 100644 src/lib/merkletools/README.md delete mode 100644 src/lib/merkletools/__init__.py delete mode 100644 src/lib/merkletools/setup.py delete mode 100644 src/lib/opensslVerify/HashInfo.txt delete mode 100644 src/lib/opensslVerify/OpenSSL License.txt delete mode 100644 src/lib/opensslVerify/ReadMe.txt delete mode 100644 src/lib/opensslVerify/__init__.py delete mode 100644 src/lib/opensslVerify/gencert.cmd delete mode 100644 src/lib/opensslVerify/libeay32.dll delete mode 100644 src/lib/opensslVerify/license.txt delete mode 100644 src/lib/opensslVerify/openssl.cnf delete mode 100644 src/lib/opensslVerify/openssl.exe delete mode 100644 src/lib/opensslVerify/opensslVerify.py delete mode 100644 src/lib/opensslVerify/ssleay32.dll delete mode 100644 src/lib/pyasn1/LICENSE.rst delete mode 100644 src/lib/pyasn1/__init__.py delete mode 100644 src/lib/pyasn1/codec/__init__.py delete mode 100644 src/lib/pyasn1/codec/ber/__init__.py delete mode 100644 src/lib/pyasn1/codec/ber/decoder.py delete mode 100644 src/lib/pyasn1/codec/ber/encoder.py delete mode 100644 src/lib/pyasn1/codec/ber/eoo.py delete mode 100644 src/lib/pyasn1/codec/cer/__init__.py delete mode 100644 src/lib/pyasn1/codec/cer/decoder.py delete mode 100644 src/lib/pyasn1/codec/cer/encoder.py delete mode 100644 src/lib/pyasn1/codec/der/__init__.py delete mode 100644 src/lib/pyasn1/codec/der/decoder.py delete mode 100644 src/lib/pyasn1/codec/der/encoder.py delete mode 100644 src/lib/pyasn1/codec/native/__init__.py delete mode 100644 src/lib/pyasn1/codec/native/decoder.py delete mode 100644 src/lib/pyasn1/codec/native/encoder.py delete mode 100644 src/lib/pyasn1/compat/__init__.py delete mode 100644 src/lib/pyasn1/compat/binary.py delete mode 100644 src/lib/pyasn1/compat/integer.py delete mode 100644 src/lib/pyasn1/compat/octets.py delete mode 100644 src/lib/pyasn1/debug.py delete mode 100644 src/lib/pyasn1/error.py delete mode 100644 src/lib/pyasn1/type/__init__.py delete mode 100644 src/lib/pyasn1/type/base.py delete mode 100644 src/lib/pyasn1/type/char.py delete mode 100644 src/lib/pyasn1/type/constraint.py delete mode 100644 src/lib/pyasn1/type/error.py delete mode 100644 src/lib/pyasn1/type/namedtype.py delete mode 100644 src/lib/pyasn1/type/namedval.py delete mode 100644 src/lib/pyasn1/type/tag.py delete mode 100644 src/lib/pyasn1/type/tagmap.py delete mode 100644 src/lib/pyasn1/type/univ.py delete mode 100644 src/lib/pyasn1/type/useful.py delete mode 100644 src/lib/pybitcointools/LICENSE delete mode 100644 src/lib/pybitcointools/MANIFEST.in delete mode 100644 src/lib/pybitcointools/README.md delete mode 100644 src/lib/pybitcointools/__init__.py delete mode 100644 src/lib/pybitcointools/bitcoin/__init__.py delete mode 100644 src/lib/pybitcointools/bitcoin/bci.py delete mode 100644 src/lib/pybitcointools/bitcoin/blocks.py delete mode 100644 src/lib/pybitcointools/bitcoin/composite.py delete mode 100644 src/lib/pybitcointools/bitcoin/deterministic.py delete mode 100644 src/lib/pybitcointools/bitcoin/english.txt delete mode 100644 src/lib/pybitcointools/bitcoin/main.py delete mode 100644 src/lib/pybitcointools/bitcoin/mnemonic.py delete mode 100644 src/lib/pybitcointools/bitcoin/py2specials.py delete mode 100644 src/lib/pybitcointools/bitcoin/py3specials.py delete mode 100644 src/lib/pybitcointools/bitcoin/ripemd.py delete mode 100644 src/lib/pybitcointools/bitcoin/stealth.py delete mode 100644 src/lib/pybitcointools/bitcoin/transaction.py delete mode 100644 src/lib/pybitcointools/pybtctool delete mode 100644 src/lib/pybitcointools/setup.py delete mode 100644 src/lib/pybitcointools/test.py delete mode 100644 src/lib/pybitcointools/test_stealth.py delete mode 100644 src/lib/pyelliptic/LICENSE delete mode 100644 src/lib/pyelliptic/README.md delete mode 100644 src/lib/pyelliptic/__init__.py delete mode 100644 src/lib/pyelliptic/arithmetic.py delete mode 100644 src/lib/pyelliptic/cipher.py delete mode 100644 src/lib/pyelliptic/ecc.py delete mode 100644 src/lib/pyelliptic/hash.py delete mode 100644 src/lib/pyelliptic/openssl.py delete mode 100644 src/lib/rsa/LICENSE delete mode 100644 src/lib/rsa/__init__.py delete mode 100644 src/lib/rsa/_compat.py delete mode 100644 src/lib/rsa/_version133.py delete mode 100644 src/lib/rsa/_version200.py delete mode 100644 src/lib/rsa/asn1.py delete mode 100644 src/lib/rsa/bigfile.py delete mode 100644 src/lib/rsa/cli.py delete mode 100644 src/lib/rsa/common.py delete mode 100644 src/lib/rsa/core.py delete mode 100644 src/lib/rsa/key.py delete mode 100644 src/lib/rsa/parallel.py delete mode 100644 src/lib/rsa/pem.py delete mode 100644 src/lib/rsa/pkcs1.py delete mode 100644 src/lib/rsa/prime.py delete mode 100644 src/lib/rsa/randnum.py delete mode 100644 src/lib/rsa/transform.py delete mode 100644 src/lib/rsa/util.py delete mode 100644 src/lib/rsa/varblock.py delete mode 100644 src/lib/websocket/ChangeLog delete mode 100644 src/lib/websocket/LICENSE delete mode 100644 src/lib/websocket/README.rst delete mode 100644 src/lib/websocket/__init__.py delete mode 100644 src/lib/websocket/_abnf.py delete mode 100644 src/lib/websocket/_app.py delete mode 100644 src/lib/websocket/_cookiejar.py delete mode 100644 src/lib/websocket/_core.py delete mode 100644 src/lib/websocket/_exceptions.py delete mode 100644 src/lib/websocket/_handshake.py delete mode 100644 src/lib/websocket/_http.py delete mode 100644 src/lib/websocket/_logging.py delete mode 100644 src/lib/websocket/_socket.py delete mode 100644 src/lib/websocket/_ssl_compat.py delete mode 100644 src/lib/websocket/_url.py delete mode 100644 src/lib/websocket/_utils.py delete mode 100644 src/lib/win_inet_pton/__init__.py diff --git a/src/lib/BitcoinECC/BitcoinECC.py b/src/lib/BitcoinECC/BitcoinECC.py deleted file mode 100644 index 6f481132..00000000 --- a/src/lib/BitcoinECC/BitcoinECC.py +++ /dev/null @@ -1,467 +0,0 @@ -# By: HurlSly -# Source: https://github.com/HurlSly/Python/blob/master/BitcoinECC.py -# Modified: random number generator in def GeneratePrivateKey(self): - -import random -import hashlib -import os - -class GaussInt: - #A class for the Gauss integers of the form a + b sqrt(n) where a,b are integers. - #n can be positive or negative. - def __init__(self,x,y,n,p=0): - if p: - self.x=x%p - self.y=y%p - self.n=n%p - else: - self.x=x - self.y=y - self.n=n - - self.p=p - - def __add__(self,b): - return GaussInt(self.x+b.x,self.y+b.y,self.n,self.p) - - def __sub__(self,b): - return GaussInt(self.x-b.x,self.y-b.y,self.n,self.p) - - def __mul__(self,b): - return GaussInt(self.x*b.x+self.n*self.y*b.y,self.x*b.y+self.y*b.x,self.n,self.p) - - def __div__(self,b): - return GaussInt((self.x*b.x-self.n*self.y*b.y)/(b.x*b.x-self.n*b.y*b.y),(-self.x*b.y+self.y*b.x)/(b.x*b.x-self.n*b.y*b.y),self.n,self.p) - - def __eq__(self,b): - return self.x==b.x and self.y==b.y - - def __repr__(self): - if self.p: - return "%s+%s (%d,%d)"%(self.x,self.y,self.n,self.p) - else: - return "%s+%s (%d)"%(self.x,self.y,self.n) - - def __pow__(self,n): - b=Base(n,2) - t=GaussInt(1,0,self.n) - while b: - t=t*t - if b.pop(): - t=self*t - - return t - - def Inv(self): - return GaussInt(self.x/(self.x*self.x-self.n*self.y*self.y),-self.y/(self.x*self.x-self.n*self.y*self.y),self.n,self.p) - -def Cipolla(a,p): - #Find a square root of a modulo p using the algorithm of Cipolla - b=0 - while pow((b*b-a)%p,(p-1)/2,p)==1: - b+=1 - - return (GaussInt(b,1,b**2-a,p)**((p+1)/2)).x - -def Base(n,b): - #Decompose n in base b - l=[] - while n: - l.append(n%b) - n/=b - - return l - -def InvMod(a,n): - #Find the inverse mod n of a. - #Use the Extended Euclides Algorithm. - m=[] - - s=n - while n: - m.append(a/n) - (a,n)=(n,a%n) - - u=1 - v=0 - while m: - (u,v)=(v,u-m.pop()*v) - - return u%s - -def b58encode(v): - #Encode a byte string to the Base58 - digit="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" - base=len(digit) - val=0 - for c in v: - val*=256 - val+=ord(c) - - result="" - while val: - (val,mod)=divmod(val,base) - result=digit[mod]+result - - pad=0 - for c in v: - if c=="\0": - pad+=1 - else: - break - - return (digit[0]*pad)+result - -def b58decode(v): - #Decode a Base58 string to byte string - digit="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" - base=len(digit) - val=0 - for c in v: - val*=base - val+=digit.find(c) - - result="" - while val: - (val,mod)=divmod(val,256) - result=chr(mod)+result - - pad=0 - for c in v: - if c==digit[0]: - pad+=1 - else: - break - - result="\0"*pad+result - - return result - -def Byte2Hex(b): - #Convert a byte string to hex number - out="" - for x in b: - y=hex(ord(x))[2:] - if len(y)==1: - y="0"+y - out+="%2s"%y - - return out - -def Int2Byte(n,b): - #Convert a integer to a byte string of length b - out="" - - for i in range(b): - (n,m)=divmod(n,256) - out=chr(m)+out - - return out - -class EllipticCurvePoint: - #Main class - #It is an point on an Elliptic Curve - - def __init__(self,x,a,b,p,n=0): - #We store the coordinate in x and the elliptic curbe parameter. - #x is of length 3. This is the 3 projective coordinates of the point. - self.x=x[:] - self.a=a - self.b=b - self.p=p - self.n=n - - def EqualProj(self,y): - #Does y equals self ? - #It computes self cross product with y and check if the result is 0. - return self.x[0]*y.x[1]==self.x[1]*y.x[0] and self.x[1]*y.x[2]==self.x[2]*y.x[1] and self.x[2]*y.x[0]==self.x[0]*y.x[2] - - def __add__(self,y): - #The main function to add self and y - #It uses the formulas I derived in projective coordinates. - #Projectives coordinates are more performant than the usual (x,y) coordinates - #because it we don't need to compute inverse mod p, which is faster. - z=EllipticCurvePoint([0,0,0],self.a,self.b,self.p) - - if self.EqualProj(y): - d=(2*self.x[1]*self.x[2])%self.p - d3=pow(d,3,self.p) - n=(3*pow(self.x[0],2,self.p)+self.a*pow(self.x[2],2,self.p))%self.p - - z.x[0]=(pow(n,2,self.p)*d*self.x[2]-2*d3*self.x[0])%self.p - z.x[1]=(3*self.x[0]*n*pow(d,2,self.p)-pow(n,3,self.p)*self.x[2]-self.x[1]*d3)%self.p - z.x[2]=(self.x[2]*d3)%self.p - else: - d=(y.x[0]*self.x[2]-y.x[2]*self.x[0])%self.p - d3=pow(d,3,self.p) - n=(y.x[1]*self.x[2]-self.x[1]*y.x[2])%self.p - - z.x[0]=(y.x[2]*self.x[2]*pow(n,2,self.p)*d-d3*(y.x[2]*self.x[0]+y.x[0]*self.x[2]))%self.p - z.x[1]=(pow(d,2,self.p)*n*(2*self.x[0]*y.x[2]+y.x[0]*self.x[2])-pow(n,3,self.p)*self.x[2]*y.x[2]-self.x[1]*d3*y.x[2])%self.p - z.x[2]=(self.x[2]*d3*y.x[2])%self.p - - return z - - def __mul__(self,n): - #The fast multiplication of point n times by itself. - b=Base(n,2) - t=EllipticCurvePoint(self.x,self.a,self.b,self.p) - b.pop() - while b: - t+=t - if b.pop(): - t+=self - - return t - - def __repr__(self): - #print a point in (x,y) coordinate. - return "x=%d\ny=%d\n"%((self.x[0]*InvMod(self.x[2],self.p))%self.p,(self.x[1]*InvMod(self.x[2],self.p))%self.p) - - def __eq__(self,x): - #Does self==x ? - return self.x==x.x and self.a==x.a and self.b==x.b and self.p==x.p - - def __ne__(self,x): - #Does self!=x ? - return self.x!=x.x or self.a!=x.a or self.b!=x.b or self.p!=x.p - - def Check(self): - #Is self on the curve ? - return (self.x[0]**3+self.a*self.x[0]*self.x[2]**2+self.b*self.x[2]**3-self.x[1]**2*self.x[2])%self.p==0 - - def GeneratePrivateKey(self): - #Generate a private key. It's just a random number between 1 and n-1. - #Of course, this function isn't cryptographically secure. - #Don't use it to generate your key. Use a cryptographically secure source of randomness instead. - #self.d = random.randint(1,self.n-1) - self.d = random.SystemRandom().randint(1,self.n-1) # Better random fix - - def SignECDSA(self,m): - #Sign a message. The private key is self.d . - h=hashlib.new("SHA256") - h.update(m) - z=int(h.hexdigest(),16) - - r=0 - s=0 - while not r or not s: - #k=random.randint(1,self.n-1) - k=random.SystemRandom().randint(1,self.n-1) # Better random fix - R=self*k - R.Normalize() - r=R.x[0]%self.n - s=(InvMod(k,self.n)*(z+r*self.d))%self.n - - return (r,s) - - def CheckECDSA(self,sig,m): - #Check a signature (r,s) of the message m using the public key self.Q - # and the generator which is self. - #This is not the one used by Bitcoin because the public key isn't known; - # only a hash of the public key is known. See the next function. - (r,s)=sig - - h=hashlib.new("SHA256") - h.update(m) - z=int(h.hexdigest(),16) - - if self.Q.x[2]==0: - return False - if not self.Q.Check(): - return False - if (self.Q*self.n).x[2]!=0: - return False - if r<1 or r>self.n-1 or s<1 or s>self.n-1: - return False - - w=InvMod(s,self.n) - u1=(z*w)%self.n - u2=(r*w)%self.n - R=self*u1+self.Q*u2 - R.Normalize() - - return (R.x[0]-r)%self.n==0 - - def VerifyMessageFromBitcoinAddress(self,adresse,m,sig): - #Check a signature (r,s) for the message m signed by the Bitcoin - # address "addresse". - h=hashlib.new("SHA256") - h.update(m) - z=int(h.hexdigest(),16) - - (r,s)=sig - x=r - y2=(pow(x,3,self.p)+self.a*x+self.b)%self.p - y=Cipolla(y2,self.p) - - for i in range(2): - kG=EllipticCurvePoint([x,y,1],self.a,self.b,self.p,self.n) - mzG=self*((-z)%self.n) - self.Q=(kG*s+mzG)*InvMod(r,self.n) - - adr=self.BitcoinAddresFromPublicKey() - if adr==adresse: - break - y=(-y)%self.p - - if adr!=adresse: - return False - - return True - - def BitcoinAddressFromPrivate(self,pri=None): - #Transform a private key in base58 encoding to a bitcoin address. - #normal means "uncompressed". - if not pri: - print "Private Key :", - pri=raw_input() - - normal=(len(pri)==51) - pri=b58decode(pri) - - if normal: - pri=pri[1:-4] - else: - pri=pri[1:-5] - - self.d=int(Byte2Hex(pri),16) - - return self.BitcoinAddress(normal) - - def PrivateEncoding(self,normal=True): - #Encode a private key self.d to base58 encoding. - p=Int2Byte(self.d,32) - p="\80"+p - - if not normal: - p+=chr(1) - - h=hashlib.new("SHA256") - h.update(p) - s=h.digest() - - h=hashlib.new("SHA256") - h.update(s) - s=h.digest() - - cs=s[:4] - - p+=cs - p=b58encode(p) - - return p - - def BitcoinAddresFromPublicKey(self,normal=True): - #Find the bitcoin address from the public key self.Q - #We do normalization to go from the projective coordinates to the usual - # (x,y) coordinates. - self.Q.Normalize() - if normal: - pk=chr(4)+Int2Byte(self.Q.x[0],32)+Int2Byte((self.Q.x[1])%self.p,32) - else: - if self.Q.x[1]%2==0: - pk=chr(2)+Int2Byte(self.Q.x[0],32) - else: - pk=chr(3)+Int2Byte(self.Q.x[0],32) - - version=chr(0) - - h=hashlib.new("SHA256") - h.update(pk) - s=h.digest() - - h=hashlib.new("RIPEMD160") - h.update(s) - kh=version+h.digest() - - h=hashlib.new("SHA256") - h.update(kh) - cs=h.digest() - - h=hashlib.new("SHA256") - h.update(cs) - cs=h.digest()[:4] - - adr=b58encode(kh+cs) - - return adr - - def BitcoinAddress(self,normal=True): - #Computes a bitcoin address given the private key self.d. - self.Q=self*self.d - - return self.BitcoinAddresFromPublicKey(normal) - - def BitcoinAddressGenerator(self,k,filename): - #Generate Bitcoin address and write them in the filename in the multibit format. - #Change the date as you like. - f=open(filename,"w") - for i in range(k): - self.GeneratePrivateKey() - adr=self.BitcoinAddress() - p=self.PrivateEncoding() - f.write("#%s\n%s 2014-01-30T12:00:00Z\n"%(adr,p)) - - #print hex(self.d) - print adr,p - - f.close() - - def TestSign(self): - #Test signature - self.GeneratePrivateKey() - self.Q=self*self.d - m="Hello World" - adresse=self.BitcoinAddresFromPublicKey() - (r,s)=self.SignECDSA(m) - - m="Hello World" - print self.VerifyMessageFromBitcoinAddress(adresse,m,r,s) - - def Normalize(self): - #Transform projective coordinates of self to the usual (x,y) coordinates. - if self.x[2]: - self.x[0]=(self.x[0]*InvMod(self.x[2],self.p))%self.p - self.x[1]=(self.x[1]*InvMod(self.x[2],self.p))%self.p - self.x[2]=1 - elif self.x[1]: - self.x[0]=(self.x[0]*InvMod(self.x[1],self.p))%self.p - self.x[1]=1 - elif self.x[0]: - self.x[0]=1 - else: - raise Exception - -def Bitcoin(): - #Create the Bitcoin elliptiv curve - a=0 - b=7 - p=2**256-2**32-2**9-2**8-2**7-2**6-2**4-1 - - #Create the generator G of the Bitcoin elliptic curve, with is order n. - Gx=int("79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798",16) - Gy=int("483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8",16) - n =int("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141",16) - - #Create the generator - return EllipticCurvePoint([Gx,Gy,1],a,b,p,n) - - -if __name__ == "__main__": - bitcoin=Bitcoin() - - #Generate the public key from the private one - print bitcoin.BitcoinAddressFromPrivate("23DKRBLkeDbcSaddsMYLAHXhanPmGwkWAhSPVGbspAkc72Hw9BdrDF") - print bitcoin.BitcoinAddress() - - #Print the bitcoin address of the public key generated at the previous line - adr=bitcoin.BitcoinAddresFromPublicKey() - print adr - - #Sign a message with the current address - m="Hello World" - sig=bitcoin.SignECDSA("Hello World") - #Verify the message using only the bitcoin adress, the signature and the message. - #Not using the public key as it is not needed. - print bitcoin.VerifyMessageFromBitcoinAddress(adr,m,sig) diff --git a/src/lib/BitcoinECC/__init__.py b/src/lib/BitcoinECC/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/src/lib/BitcoinECC/newBitcoinECC.py b/src/lib/BitcoinECC/newBitcoinECC.py deleted file mode 100644 index 65b64880..00000000 --- a/src/lib/BitcoinECC/newBitcoinECC.py +++ /dev/null @@ -1,461 +0,0 @@ -import random -import hashlib -import base64 -import math - -class GaussInt: - def __init__(self,x,y,n,p=0): - if p: - self.x=x%p - self.y=y%p - self.n=n%p - else: - self.x=x - self.y=y - self.n=n - - self.p=p - - def __add__(self,b): - return GaussInt(self.x+b.x,self.y+b.y,self.n,self.p) - - def __sub__(self,b): - return GaussInt(self.x-b.x,self.y-b.y,self.n,self.p) - - def __mul__(self,b): - return GaussInt(self.x*b.x+self.n*self.y*b.y,self.x*b.y+self.y*b.x,self.n,self.p) - - def __div__(self,b): - return GaussInt((self.x*b.x-self.n*self.y*b.y)/(b.x*b.x-self.n*b.y*b.y),(-self.x*b.y+self.y*b.x)/(b.x*b.x-self.n*b.y*b.y),self.n,self.p) - - def __eq__(self,b): - return self.x==b.x and self.y==b.y - - def __repr__(self): - if self.p: - return "%s+%s (%d,%d)"%(self.x,self.y,self.n,self.p) - else: - return "%s+%s (%d)"%(self.x,self.y,self.n) - - def __pow__(self,n): - b=Base(n,2) - t=GaussInt(1,0,self.n) - while b: - t=t*t - if b.pop(): - t=self*t - - return t - - def Inv(self): - return GaussInt(self.x/(self.x*self.x-self.n*self.y*self.y),-self.y/(self.x*self.x-self.n*self.y*self.y),self.n,self.p) - - def Eval(self): - return self.x.Eval()+self.y.Eval()*math.sqrt(self.n) - -def Cipolla(a,p): - b=0 - while pow((b*b-a)%p,(p-1)/2,p)==1: - b+=1 - - return (GaussInt(b,1,b**2-a,p)**((p+1)/2)).x - -def InvMod(a,n): - m=[] - - s=n - while n: - m.append(a/n) - (a,n)=(n,a%n) - - u=1 - v=0 - while m: - (u,v)=(v,u-m.pop()*v) - - return u%s - -def Base(n,b): - l=[] - while n: - l.append(n%b) - n/=b - - return l - -def MsgMagic(message): - return "\x18Bitcoin Signed Message:\n"+chr(len(message))+message - -def Hash(m,method): - h=hashlib.new(method) - h.update(m) - - return h.digest() - -def b58encode(v): - #Encode a byte string to the Base58 - digit="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" - base=len(digit) - val=0 - for c in v: - val*=256 - val+=ord(c) - - result="" - while val: - (val,mod)=divmod(val,base) - result=digit[mod]+result - - pad=0 - for c in v: - if c=="\x00": - pad+=1 - else: - break - - return (digit[0]*pad)+result - -def b58decode(v): - #Decode a Base58 string to byte string - digit="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" - base=len(digit) - val=0 - for c in v: - val*=base - val+=digit.find(c) - - result="" - while val: - (val,mod)=divmod(val,256) - result=chr(mod)+result - - pad=0 - for c in v: - if c==digit[0]: - pad+=1 - else: - break - - return "\x00"*pad+result - -def Byte2Int(b): - n=0 - for x in b: - n*=256 - n+=ord(x) - - return n - -def Byte2Hex(b): - #Convert a byte string to hex number - out="" - for x in b: - y=hex(ord(x))[2:] - if len(y)==1: - y="0"+y - out+="%2s"%y - - return out - -def Int2Byte(n,b): - #Convert a integer to a byte string of length b - out="" - - for _ in range(b): - (n,m)=divmod(n,256) - out=chr(m)+out - - return out - -class EllipticCurvePoint: - #Main class - #It's a point on an Elliptic Curve - - def __init__(self,x,a,b,p,n=0): - #We store the coordinate in x and the elliptic curve parameter. - #x is of length 3. This is the 3 projective coordinates of the point. - self.x=x[:] - self.a=a - self.b=b - self.p=p - self.n=n - - def __add__(self,y): - #The main function to add self and y - #It uses the formulas I derived in projective coordinates. - #Projectives coordinates are more efficient than the usual (x,y) coordinates - #because we don't need to compute inverse mod p, which is faster. - z=EllipticCurvePoint([0,0,0],self.a,self.b,self.p) - - if self==y: - d=(2*self.x[1]*self.x[2])%self.p - d3=pow(d,3,self.p) - n=(3*pow(self.x[0],2,self.p)+self.a*pow(self.x[2],2,self.p))%self.p - - z.x[0]=(pow(n,2,self.p)*d*self.x[2]-2*d3*self.x[0])%self.p - z.x[1]=(3*self.x[0]*n*pow(d,2,self.p)-pow(n,3,self.p)*self.x[2]-self.x[1]*d3)%self.p - z.x[2]=(self.x[2]*d3)%self.p - else: - d=(y.x[0]*self.x[2]-y.x[2]*self.x[0])%self.p - d3=pow(d,3,self.p) - n=(y.x[1]*self.x[2]-self.x[1]*y.x[2])%self.p - - z.x[0]=(y.x[2]*self.x[2]*pow(n,2,self.p)*d-d3*(y.x[2]*self.x[0]+y.x[0]*self.x[2]))%self.p - z.x[1]=(pow(d,2,self.p)*n*(2*self.x[0]*y.x[2]+y.x[0]*self.x[2])-pow(n,3,self.p)*self.x[2]*y.x[2]-self.x[1]*d3*y.x[2])%self.p - z.x[2]=(self.x[2]*d3*y.x[2])%self.p - - return z - - def __mul__(self,n): - #The fast multiplication of point n times by itself. - b=Base(n,2) - t=EllipticCurvePoint(self.x,self.a,self.b,self.p) - b.pop() - while b: - t+=t - if b.pop(): - t+=self - - return t - - def __repr__(self): - #print a point in (x,y) coordinate. - return "x=%d\ny=%d\n"%((self.x[0]*InvMod(self.x[2],self.p))%self.p,(self.x[1]*InvMod(self.x[2],self.p))%self.p) - - def __eq__(self,y): - #Does self==y ? - #It computes self cross product with x and check if the result is 0. - return self.x[0]*y.x[1]==self.x[1]*y.x[0] and self.x[1]*y.x[2]==self.x[2]*y.x[1] and self.x[2]*y.x[0]==self.x[0]*y.x[2] and self.a==y.a and self.b==y.b and self.p==y.p - - def __ne__(self,y): - #Does self!=x ? - return not (self == y) - - def Normalize(self): - #Transform projective coordinates of self to the usual (x,y) coordinates. - if self.x[2]: - self.x[0]=(self.x[0]*InvMod(self.x[2],self.p))%self.p - self.x[1]=(self.x[1]*InvMod(self.x[2],self.p))%self.p - self.x[2]=1 - elif self.x[1]: - self.x[0]=(self.x[0]*InvMod(self.x[1],self.p))%self.p - self.x[1]=1 - elif self.x[0]: - self.x[0]=1 - else: - raise Exception - - def Check(self): - #Is self on the curve ? - return (self.x[0]**3+self.a*self.x[0]*self.x[2]**2+self.b*self.x[2]**3-self.x[1]**2*self.x[2])%self.p==0 - - - def CryptAddr(self,filename,password,Address): - txt="" - for tag in Address: - (addr,priv)=Address[tag] - if priv: - txt+="%s\t%s\t%s\n"%(tag,addr,priv) - else: - txt+="%s\t%s\t\n"%(tag,addr) - - txt+="\x00"*(15-(len(txt)-1)%16) - - password+="\x00"*(15-(len(password)-1)%16) - crypt=twofish.Twofish(password).encrypt(txt) - - f=open(filename,"wb") - f.write(crypt) - f.close() - - def GenerateD(self): - #Generate a private key. It's just a random number between 1 and n-1. - #Of course, this function isn't cryptographically secure. - #Don't use it to generate your key. Use a cryptographically secure source of randomness instead. - #return random.randint(1,self.n-1) - return random.SystemRandom().randint(1,self.n-1) # Better random fix - - def CheckECDSA(self,sig,message,Q): - #Check a signature (r,s) of the message m using the public key self.Q - # and the generator which is self. - #This is not the one used by Bitcoin because the public key isn't known; - # only a hash of the public key is known. See the function VerifyMessageFromAddress. - (r,s)=sig - - if Q.x[2]==0: - return False - if not Q.Check(): - return False - if (Q*self.n).x[2]!=0: - return False - if r<1 or r>self.n-1 or s<1 or s>self.n-1: - return False - - z=Byte2Int(Hash(Hash(MsgMagic(message),"SHA256"),"SHA256")) - - w=InvMod(s,self.n) - u1=(z*w)%self.n - u2=(r*w)%self.n - R=self*u1+Q*u2 - R.Normalize() - - return (R.x[0]-r)%self.n==0 - - def SignMessage(self,message,priv): - #Sign a message. The private key is self.d. - (d,uncompressed)=self.DFromPriv(priv) - - z=Byte2Int(Hash(Hash(MsgMagic(message),"SHA256"),"SHA256")) - - r=0 - s=0 - while not r or not s: - #k=random.randint(1,self.n-1) - k=random.SystemRandom().randint(1,self.n-1) # Better random fix - R=self*k - R.Normalize() - r=R.x[0]%self.n - s=(InvMod(k,self.n)*(z+r*d))%self.n - - val=27 - if not uncompressed: - val+=4 - - return base64.standard_b64encode(chr(val)+Int2Byte(r,32)+Int2Byte(s,32)) - - def VerifyMessageFromAddress(self,addr,message,sig): - #Check a signature (r,s) for the message m signed by the Bitcoin - # address "addr". - - sign=base64.standard_b64decode(sig) - (r,s)=(Byte2Int(sign[1:33]),Byte2Int(sign[33:65])) - - z=Byte2Int(Hash(Hash(MsgMagic(message),"SHA256"),"SHA256")) - - val=ord(sign[0]) - if val<27 or val>=35: - return False - - if val>=31: - uncompressed=False - val-=4 - else: - uncompressed=True - - x=r - y2=(pow(x,3,self.p) + self.a*x + self.b) % self.p - y=Cipolla(y2,self.p) - - for _ in range(2): - kG=EllipticCurvePoint([x,y,1],self.a,self.b,self.p,self.n) - mzG=self*((-z)%self.n) - Q=(kG*s+mzG)*InvMod(r,self.n) - - if self.AddressFromPublicKey(Q,uncompressed)==addr: - return True - - y=self.p-y - - return False - - def AddressFromPrivate(self,priv): - #Transform a private key to a bitcoin address. - (d,uncompressed)=self.DFromPriv(priv) - - return self.AddressFromD(d,uncompressed) - - def PrivFromD(self,d,uncompressed): - #Encode a private key self.d to base58 encoding. - p=Int2Byte(d,32) - p="\x80"+p - - if not uncompressed: - p+=chr(1) - - cs=Hash(Hash(p,"SHA256"),"SHA256")[:4] - - return b58encode(p+cs) - - def DFromPriv(self,priv): - uncompressed=(len(priv)==51) - priv=b58decode(priv) - - if uncompressed: - priv=priv[:-4] - else: - priv=priv[:-5] - - return (Byte2Int(priv[1:]),uncompressed) - - def AddressFromPublicKey(self,Q,uncompressed): - #Find the bitcoin address from the public key self.Q - #We do normalization to go from the projective coordinates to the usual - # (x,y) coordinates. - Q.Normalize() - if uncompressed: - pk=chr(4)+Int2Byte(Q.x[0],32)+Int2Byte(Q.x[1],32) - else: - pk=chr(2+Q.x[1]%2)+Int2Byte(Q.x[0],32) - - kh=chr(0)+Hash(Hash(pk,"SHA256"),"RIPEMD160") - cs=Hash(Hash(kh,"SHA256"),"SHA256")[:4] - - return b58encode(kh+cs) - - def AddressFromD(self,d,uncompressed): - #Computes a bitcoin address given the private key self.d. - return self.AddressFromPublicKey(self*d,uncompressed) - - def IsValid(self,addr): - adr=b58decode(addr) - kh=adr[:-4] - cs=adr[-4:] - - verif=Hash(Hash(kh,"SHA256"),"SHA256")[:4] - - return cs==verif - - def AddressGenerator(self,k,uncompressed=True): - #Generate Bitcoin address and write them in the multibit format. - #Change the date as you like. - liste={} - for i in range(k): - d=self.GenerateD() - addr=self.AddressFromD(d,uncompressed) - priv=self.PrivFromD(d,uncompressed) - liste[i]=[addr,priv] - print "%s %s"%(addr, priv) - - return liste - -def Bitcoin(): - a=0 - b=7 - p=2**256-2**32-2**9-2**8-2**7-2**6-2**4-1 - Gx=int("79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798",16) - Gy=int("483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8",16) - n=int("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141",16) - - return EllipticCurvePoint([Gx,Gy,1],a,b,p,n) - -def main(): - bitcoin=Bitcoin() - - #Generate an adress from the private key - privkey = "PrivatekeyinBase58" - adr = bitcoin.AddressFromPrivate(privkey) - print "Address : ", adr - - #Sign a message with the current address - m="Hello World" - sig=bitcoin.SignMessage("Hello World", privkey) - #Verify the message using only the bitcoin adress, the signature and the message. - #Not using the public key as it is not needed. - if bitcoin.VerifyMessageFromAddress(adr,m,sig): - print "Message verified" - - #Generate some addresses - print "Here are some adresses and associated private keys" - bitcoin.AddressGenerator(10) - -if __name__ == "__main__": main() diff --git a/src/lib/PySocks/LICENSE b/src/lib/PySocks/LICENSE deleted file mode 100644 index 04b6b1f3..00000000 --- a/src/lib/PySocks/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright 2006 Dan-Haim. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -3. Neither the name of Dan Haim nor the names of his contributors may be used - to endorse or promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY DAN HAIM "AS IS" AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -EVENT SHALL DAN HAIM OR HIS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA -OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMANGE. diff --git a/src/lib/PySocks/README.md b/src/lib/PySocks/README.md deleted file mode 100644 index 65419240..00000000 --- a/src/lib/PySocks/README.md +++ /dev/null @@ -1,299 +0,0 @@ -PySocks -======= - -Updated version of SocksiPy. Many old bugs fixed, and overall code cleanup. - -Acts as a drop-in replacement to the socket module. - ----------------- - -Features -======== - -* Fully supports Python 2.6 - 3.4 - -* UDP support - -* SocksiPyHandler, courtesy e000, was also added as an example of how this module can be used with urllib2. See example code in sockshandler.py. `pip install` and `setup.py install` will automatically install the `sockshandler` module. - -* Bugs in the original SocksiPy were fixed, including two that could lead to infinite hanging when communicating with bad proxy servers. - -* urllib3, which powers the requests module, is working on integrating SOCKS proxy support based on this branch - -* `SOCKS5`, `SOCKS4`, and `HTTP` are now aliases for `PROXY_TYPE_SOCKS5`, `PROXY_TYPE_SOCKS4`, and `PROXY_TYPE_HTTP` - -* Tests added - -* Various style and performance improvements; codebase simplified - -* Actively maintained - -Installation -============ - - pip install PySocks - -Or download the tarball / `git clone` and... - - python setup.py install - -These will install both the `socks` and `sockshandler` modules. - -Alternatively, include just `socks.py` in your project. - --------------------------------------------- - -*Warning:* PySocks/SocksiPy only supports HTTP proxies that use CONNECT tunneling. Certain HTTP proxies may not work with this library. If you wish to use HTTP proxies (and not SOCKS proxies), it is recommended that you rely on your HTTP client's native proxy support (`proxies` dict for `requests`, or `urllib2.ProxyHandler` for `urllib2`) instead. - --------------------------------------------- - -Usage -===== - -## Example ## - - import socks - - s = socks.socksocket() - - s.set_proxy(socks.SOCKS5, "localhost") # SOCKS4 and SOCKS5 use port 1080 by default - # Or - s.set_proxy(socks.SOCKS4, "localhost", 4444) - # Or - s.set_proxy(socks.HTTP, "5.5.5.5", 8888) - - # Can be treated identical to a regular socket object - s.connect(("www.test.com", 80)) - s.sendall("GET / ...") - print s.recv(4096) - - -To monkeypatch the entire standard library with a single default proxy: - - import socket - import socks - import urllib2 - - socks.set_default_proxy(socks.SOCKS5, "localhost") - socket.socket = socks.socksocket - - urllib2.urlopen("http://...") # All requests will pass through the SOCKS proxy - -Note that monkeypatching may not work for all standard modules or for all third party modules, and generally isn't recommended. - --------------------------------------------- - -Original SocksiPy README attached below, amended to reflect API changes. - --------------------------------------------- - -SocksiPy - version 1.5.0 - -A Python SOCKS module. - -(C) 2006 Dan-Haim. All rights reserved. - -See LICENSE file for details. - - -*WHAT IS A SOCKS PROXY?* - -A SOCKS proxy is a proxy server at the TCP level. In other words, it acts as -a tunnel, relaying all traffic going through it without modifying it. -SOCKS proxies can be used to relay traffic using any network protocol that -uses TCP. - -*WHAT IS SOCKSIPY?* - -This Python module allows you to create TCP connections through a SOCKS -proxy without any special effort. -It also supports relaying UDP packets with a SOCKS5 proxy. - -*PROXY COMPATIBILITY* - -SocksiPy is compatible with three different types of proxies: - -1. SOCKS Version 4 (SOCKS4), including the SOCKS4a extension. -2. SOCKS Version 5 (SOCKS5). -3. HTTP Proxies which support tunneling using the CONNECT method. - -*SYSTEM REQUIREMENTS* - -Being written in Python, SocksiPy can run on any platform that has a Python -interpreter and TCP/IP support. -This module has been tested with Python 2.3 and should work with greater versions -just as well. - - -INSTALLATION -------------- - -Simply copy the file "socks.py" to your Python's `lib/site-packages` directory, -and you're ready to go. [Editor's note: it is better to use `python setup.py install` for PySocks] - - -USAGE ------- - -First load the socks module with the command: - - >>> import socks - >>> - -The socks module provides a class called `socksocket`, which is the base to all of the module's functionality. - -The `socksocket` object has the same initialization parameters as the normal socket -object to ensure maximal compatibility, however it should be noted that `socksocket` will only function with family being `AF_INET` and -type being either `SOCK_STREAM` or `SOCK_DGRAM`. -Generally, it is best to initialize the `socksocket` object with no parameters - - >>> s = socks.socksocket() - >>> - -The `socksocket` object has an interface which is very similiar to socket's (in fact -the `socksocket` class is derived from socket) with a few extra methods. -To select the proxy server you would like to use, use the `set_proxy` method, whose -syntax is: - - set_proxy(proxy_type, addr[, port[, rdns[, username[, password]]]]) - -Explanation of the parameters: - -`proxy_type` - The type of the proxy server. This can be one of three possible -choices: `PROXY_TYPE_SOCKS4`, `PROXY_TYPE_SOCKS5` and `PROXY_TYPE_HTTP` for SOCKS4, -SOCKS5 and HTTP servers respectively. `SOCKS4`, `SOCKS5`, and `HTTP` are all aliases, respectively. - -`addr` - The IP address or DNS name of the proxy server. - -`port` - The port of the proxy server. Defaults to 1080 for socks and 8080 for http. - -`rdns` - This is a boolean flag than modifies the behavior regarding DNS resolving. -If it is set to True, DNS resolving will be preformed remotely, on the server. -If it is set to False, DNS resolving will be preformed locally. Please note that -setting this to True with SOCKS4 servers actually use an extension to the protocol, -called SOCKS4a, which may not be supported on all servers (SOCKS5 and http servers -always support DNS). The default is True. - -`username` - For SOCKS5 servers, this allows simple username / password authentication -with the server. For SOCKS4 servers, this parameter will be sent as the userid. -This parameter is ignored if an HTTP server is being used. If it is not provided, -authentication will not be used (servers may accept unauthenticated requests). - -`password` - This parameter is valid only for SOCKS5 servers and specifies the -respective password for the username provided. - -Example of usage: - - >>> s.set_proxy(socks.SOCKS5, "socks.example.com") # uses default port 1080 - >>> s.set_proxy(socks.SOCKS4, "socks.test.com", 1081) - -After the set_proxy method has been called, simply call the connect method with the -traditional parameters to establish a connection through the proxy: - - >>> s.connect(("www.sourceforge.net", 80)) - >>> - -Connection will take a bit longer to allow negotiation with the proxy server. -Please note that calling connect without calling `set_proxy` earlier will connect -without a proxy (just like a regular socket). - -Errors: Any errors in the connection process will trigger exceptions. The exception -may either be generated by the underlying socket layer or may be custom module -exceptions, whose details follow: - -class `ProxyError` - This is a base exception class. It is not raised directly but -rather all other exception classes raised by this module are derived from it. -This allows an easy way to catch all proxy-related errors. It descends from `IOError`. - -All `ProxyError` exceptions have an attribute `socket_err`, which will contain either a -caught `socket.error` exception, or `None` if there wasn't any. - -class `GeneralProxyError` - When thrown, it indicates a problem which does not fall -into another category. - -* `Sent invalid data` - This error means that unexpected data has been received from -the server. The most common reason is that the server specified as the proxy is -not really a SOCKS4/SOCKS5/HTTP proxy, or maybe the proxy type specified is wrong. - -* `Connection closed unexpectedly` - The proxy server unexpectedly closed the connection. -This may indicate that the proxy server is experiencing network or software problems. - -* `Bad proxy type` - This will be raised if the type of the proxy supplied to the -set_proxy function was not one of `SOCKS4`/`SOCKS5`/`HTTP`. - -* `Bad input` - This will be raised if the `connect()` method is called with bad input -parameters. - -class `SOCKS5AuthError` - This indicates that the connection through a SOCKS5 server -failed due to an authentication problem. - -* `Authentication is required` - This will happen if you use a SOCKS5 server which -requires authentication without providing a username / password at all. - -* `All offered authentication methods were rejected` - This will happen if the proxy -requires a special authentication method which is not supported by this module. - -* `Unknown username or invalid password` - Self descriptive. - -class `SOCKS5Error` - This will be raised for SOCKS5 errors which are not related to -authentication. -The parameter is a tuple containing a code, as given by the server, -and a description of the -error. The possible errors, according to the RFC, are: - -* `0x01` - General SOCKS server failure - If for any reason the proxy server is unable to -fulfill your request (internal server error). -* `0x02` - connection not allowed by ruleset - If the address you're trying to connect to -is blacklisted on the server or requires authentication. -* `0x03` - Network unreachable - The target could not be contacted. A router on the network -had replied with a destination net unreachable error. -* `0x04` - Host unreachable - The target could not be contacted. A router on the network -had replied with a destination host unreachable error. -* `0x05` - Connection refused - The target server has actively refused the connection -(the requested port is closed). -* `0x06` - TTL expired - The TTL value of the SYN packet from the proxy to the target server -has expired. This usually means that there are network problems causing the packet -to be caught in a router-to-router "ping-pong". -* `0x07` - Command not supported - For instance if the server does not support UDP. -* `0x08` - Address type not supported - The client has provided an invalid address type. -When using this module, this error should not occur. - -class `SOCKS4Error` - This will be raised for SOCKS4 errors. The parameter is a tuple -containing a code and a description of the error, as given by the server. The -possible error, according to the specification are: - -* `0x5B` - Request rejected or failed - Will be raised in the event of an failure for any -reason other then the two mentioned next. -* `0x5C` - request rejected because SOCKS server cannot connect to identd on the client - -The Socks server had tried an ident lookup on your computer and has failed. In this -case you should run an identd server and/or configure your firewall to allow incoming -connections to local port 113 from the remote server. -* `0x5D` - request rejected because the client program and identd report different user-ids - -The Socks server had performed an ident lookup on your computer and has received a -different userid than the one you have provided. Change your userid (through the -username parameter of the set_proxy method) to match and try again. - -class `HTTPError` - This will be raised for HTTP errors. The message will contain -the HTTP status code and provided error message. - -After establishing the connection, the object behaves like a standard socket. -Methods like `makefile()` and `settimeout()` should behave just like regular sockets. -Call the `close()` method to close the connection. - -In addition to the `socksocket` class, an additional function worth mentioning is the -`set_default_proxy` function. The parameters are the same as the `set_proxy` method. -This function will set default proxy settings for newly created `socksocket` objects, -in which the proxy settings haven't been changed via the `set_proxy` method. -This is quite useful if you wish to force 3rd party modules to use a SOCKS proxy, -by overriding the socket object. -For example: - - >>> socks.set_default_proxy(socks.SOCKS5, "socks.example.com") - >>> socket.socket = socks.socksocket - >>> urllib.urlopen("http://www.sourceforge.net/") - - -PROBLEMS ---------- - -Please open a GitHub issue at https://github.com/Anorov/PySocks diff --git a/src/lib/PySocks/__init__.py b/src/lib/PySocks/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/src/lib/PySocks/setup.py b/src/lib/PySocks/setup.py deleted file mode 100644 index 9db0f3d2..00000000 --- a/src/lib/PySocks/setup.py +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env python -from distutils.core import setup - -VERSION = "1.5.3" - -setup( - name = "PySocks", - version = VERSION, - description = "A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information.", - url = "https://github.com/Anorov/PySocks", - license = "BSD", - author = "Anorov", - author_email = "anorov.vorona@gmail.com", - keywords = ["socks", "proxy"], - py_modules=["socks", "sockshandler"] -) - diff --git a/src/lib/PySocks/socks.py b/src/lib/PySocks/socks.py deleted file mode 100644 index ad1e9780..00000000 --- a/src/lib/PySocks/socks.py +++ /dev/null @@ -1,699 +0,0 @@ -""" -SocksiPy - Python SOCKS module. -Version 1.5.3 - -Copyright 2006 Dan-Haim. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -3. Neither the name of Dan Haim nor the names of his contributors may be used - to endorse or promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY DAN HAIM "AS IS" AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -EVENT SHALL DAN HAIM OR HIS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA -OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMANGE. - - -This module provides a standard socket-like interface for Python -for tunneling connections through SOCKS proxies. - -=============================================================================== - -Minor modifications made by Christopher Gilbert (http://motomastyle.com/) -for use in PyLoris (http://pyloris.sourceforge.net/) - -Minor modifications made by Mario Vilas (http://breakingcode.wordpress.com/) -mainly to merge bug fixes found in Sourceforge - -Modifications made by Anorov (https://github.com/Anorov) --Forked and renamed to PySocks --Fixed issue with HTTP proxy failure checking (same bug that was in the old ___recvall() method) --Included SocksiPyHandler (sockshandler.py), to be used as a urllib2 handler, - courtesy of e000 (https://github.com/e000): https://gist.github.com/869791#file_socksipyhandler.py --Re-styled code to make it readable - -Aliased PROXY_TYPE_SOCKS5 -> SOCKS5 etc. - -Improved exception handling and output - -Removed irritating use of sequence indexes, replaced with tuple unpacked variables - -Fixed up Python 3 bytestring handling - chr(0x03).encode() -> b"\x03" - -Other general fixes --Added clarification that the HTTP proxy connection method only supports CONNECT-style tunneling HTTP proxies --Various small bug fixes -""" - -__version__ = "1.5.3" - -import socket -import struct -from errno import EOPNOTSUPP, EINVAL, EAGAIN -from io import BytesIO -from os import SEEK_CUR -from collections import Callable - -PROXY_TYPE_SOCKS4 = SOCKS4 = 1 -PROXY_TYPE_SOCKS5 = SOCKS5 = 2 -PROXY_TYPE_HTTP = HTTP = 3 - -PROXY_TYPES = {"SOCKS4": SOCKS4, "SOCKS5": SOCKS5, "HTTP": HTTP} -PRINTABLE_PROXY_TYPES = dict(zip(PROXY_TYPES.values(), PROXY_TYPES.keys())) - -_orgsocket = _orig_socket = socket.socket - -class ProxyError(IOError): - """ - socket_err contains original socket.error exception. - """ - def __init__(self, msg, socket_err=None): - self.msg = msg - self.socket_err = socket_err - - if socket_err: - self.msg += ": {0}".format(socket_err) - - def __str__(self): - return self.msg - -class GeneralProxyError(ProxyError): pass -class ProxyConnectionError(ProxyError): pass -class SOCKS5AuthError(ProxyError): pass -class SOCKS5Error(ProxyError): pass -class SOCKS4Error(ProxyError): pass -class HTTPError(ProxyError): pass - -SOCKS4_ERRORS = { 0x5B: "Request rejected or failed", - 0x5C: "Request rejected because SOCKS server cannot connect to identd on the client", - 0x5D: "Request rejected because the client program and identd report different user-ids" - } - -SOCKS5_ERRORS = { 0x01: "General SOCKS server failure", - 0x02: "Connection not allowed by ruleset", - 0x03: "Network unreachable", - 0x04: "Host unreachable", - 0x05: "Connection refused", - 0x06: "TTL expired", - 0x07: "Command not supported, or protocol error", - 0x08: "Address type not supported" - } - -DEFAULT_PORTS = { SOCKS4: 1080, - SOCKS5: 1080, - HTTP: 8080 - } - -def set_default_proxy(proxy_type=None, addr=None, port=None, rdns=True, username=None, password=None): - """ - set_default_proxy(proxy_type, addr[, port[, rdns[, username, password]]]) - - Sets a default proxy which all further socksocket objects will use, - unless explicitly changed. All parameters are as for socket.set_proxy(). - """ - socksocket.default_proxy = (proxy_type, addr, port, rdns, - username.encode() if username else None, - password.encode() if password else None) - -setdefaultproxy = set_default_proxy - -def get_default_proxy(): - """ - Returns the default proxy, set by set_default_proxy. - """ - return socksocket.default_proxy - -getdefaultproxy = get_default_proxy - -def wrap_module(module): - """ - Attempts to replace a module's socket library with a SOCKS socket. Must set - a default proxy using set_default_proxy(...) first. - This will only work on modules that import socket directly into the namespace; - most of the Python Standard Library falls into this category. - """ - if socksocket.default_proxy: - module.socket.socket = socksocket - else: - raise GeneralProxyError("No default proxy specified") - -wrapmodule = wrap_module - -def create_connection(dest_pair, proxy_type=None, proxy_addr=None, - proxy_port=None, proxy_username=None, - proxy_password=None, timeout=None, - source_address=None): - """create_connection(dest_pair, *[, timeout], **proxy_args) -> socket object - - Like socket.create_connection(), but connects to proxy - before returning the socket object. - - dest_pair - 2-tuple of (IP/hostname, port). - **proxy_args - Same args passed to socksocket.set_proxy() if present. - timeout - Optional socket timeout value, in seconds. - source_address - tuple (host, port) for the socket to bind to as its source - address before connecting (only for compatibility) - """ - sock = socksocket() - if isinstance(timeout, (int, float)): - sock.settimeout(timeout) - if proxy_type is not None: - sock.set_proxy(proxy_type, proxy_addr, proxy_port, - proxy_username, proxy_password) - sock.connect(dest_pair) - return sock - -class _BaseSocket(socket.socket): - """Allows Python 2's "delegated" methods such as send() to be overridden - """ - def __init__(self, *pos, **kw): - _orig_socket.__init__(self, *pos, **kw) - - self._savedmethods = dict() - for name in self._savenames: - self._savedmethods[name] = getattr(self, name) - delattr(self, name) # Allows normal overriding mechanism to work - - _savenames = list() - -def _makemethod(name): - return lambda self, *pos, **kw: self._savedmethods[name](*pos, **kw) -for name in ("sendto", "send", "recvfrom", "recv"): - method = getattr(_BaseSocket, name, None) - - # Determine if the method is not defined the usual way - # as a function in the class. - # Python 2 uses __slots__, so there are descriptors for each method, - # but they are not functions. - if not isinstance(method, Callable): - _BaseSocket._savenames.append(name) - setattr(_BaseSocket, name, _makemethod(name)) - -class socksocket(_BaseSocket): - """socksocket([family[, type[, proto]]]) -> socket object - - Open a SOCKS enabled socket. The parameters are the same as - those of the standard socket init. In order for SOCKS to work, - you must specify family=AF_INET and proto=0. - The "type" argument must be either SOCK_STREAM or SOCK_DGRAM. - """ - - default_proxy = None - - def __init__(self, family=socket.AF_INET, type=socket.SOCK_STREAM, proto=0, _sock=None): - if type not in (socket.SOCK_STREAM, socket.SOCK_DGRAM): - msg = "Socket type must be stream or datagram, not {!r}" - raise ValueError(msg.format(type)) - - _BaseSocket.__init__(self, family, type, proto, _sock) - self._proxyconn = None # TCP connection to keep UDP relay alive - - if self.default_proxy: - self.proxy = self.default_proxy - else: - self.proxy = (None, None, None, None, None, None) - self.proxy_sockname = None - self.proxy_peername = None - - def _readall(self, file, count): - """ - Receive EXACTLY the number of bytes requested from the file object. - Blocks until the required number of bytes have been received. - """ - data = b"" - while len(data) < count: - d = file.read(count - len(data)) - if not d: - raise GeneralProxyError("Connection closed unexpectedly") - data += d - return data - - def set_proxy(self, proxy_type=None, addr=None, port=None, rdns=True, username=None, password=None): - """set_proxy(proxy_type, addr[, port[, rdns[, username[, password]]]]) - Sets the proxy to be used. - - proxy_type - The type of the proxy to be used. Three types - are supported: PROXY_TYPE_SOCKS4 (including socks4a), - PROXY_TYPE_SOCKS5 and PROXY_TYPE_HTTP - addr - The address of the server (IP or DNS). - port - The port of the server. Defaults to 1080 for SOCKS - servers and 8080 for HTTP proxy servers. - rdns - Should DNS queries be performed on the remote side - (rather than the local side). The default is True. - Note: This has no effect with SOCKS4 servers. - username - Username to authenticate with to the server. - The default is no authentication. - password - Password to authenticate with to the server. - Only relevant when username is also provided. - """ - self.proxy = (proxy_type, addr, port, rdns, - username.encode() if username else None, - password.encode() if password else None) - - setproxy = set_proxy - - def bind(self, *pos, **kw): - """ - Implements proxy connection for UDP sockets, - which happens during the bind() phase. - """ - proxy_type, proxy_addr, proxy_port, rdns, username, password = self.proxy - if not proxy_type or self.type != socket.SOCK_DGRAM: - return _orig_socket.bind(self, *pos, **kw) - - if self._proxyconn: - raise socket.error(EINVAL, "Socket already bound to an address") - if proxy_type != SOCKS5: - msg = "UDP only supported by SOCKS5 proxy type" - raise socket.error(EOPNOTSUPP, msg) - _BaseSocket.bind(self, *pos, **kw) - - # Need to specify actual local port because - # some relays drop packets if a port of zero is specified. - # Avoid specifying host address in case of NAT though. - _, port = self.getsockname() - dst = ("0", port) - - self._proxyconn = _orig_socket() - proxy = self._proxy_addr() - self._proxyconn.connect(proxy) - - UDP_ASSOCIATE = b"\x03" - _, relay = self._SOCKS5_request(self._proxyconn, UDP_ASSOCIATE, dst) - - # The relay is most likely on the same host as the SOCKS proxy, - # but some proxies return a private IP address (10.x.y.z) - host, _ = proxy - _, port = relay - _BaseSocket.connect(self, (host, port)) - self.proxy_sockname = ("0.0.0.0", 0) # Unknown - - def sendto(self, bytes, *args, **kwargs): - if self.type != socket.SOCK_DGRAM: - return _BaseSocket.sendto(self, bytes, *args, **kwargs) - if not self._proxyconn: - self.bind(("", 0)) - - address = args[-1] - flags = args[:-1] - - header = BytesIO() - RSV = b"\x00\x00" - header.write(RSV) - STANDALONE = b"\x00" - header.write(STANDALONE) - self._write_SOCKS5_address(address, header) - - sent = _BaseSocket.send(self, header.getvalue() + bytes, *flags, **kwargs) - return sent - header.tell() - - def send(self, bytes, flags=0, **kwargs): - if self.type == socket.SOCK_DGRAM: - return self.sendto(bytes, flags, self.proxy_peername, **kwargs) - else: - return _BaseSocket.send(self, bytes, flags, **kwargs) - - def recvfrom(self, bufsize, flags=0): - if self.type != socket.SOCK_DGRAM: - return _BaseSocket.recvfrom(self, bufsize, flags) - if not self._proxyconn: - self.bind(("", 0)) - - buf = BytesIO(_BaseSocket.recv(self, bufsize, flags)) - buf.seek(+2, SEEK_CUR) - frag = buf.read(1) - if ord(frag): - raise NotImplementedError("Received UDP packet fragment") - fromhost, fromport = self._read_SOCKS5_address(buf) - - if self.proxy_peername: - peerhost, peerport = self.proxy_peername - if fromhost != peerhost or peerport not in (0, fromport): - raise socket.error(EAGAIN, "Packet filtered") - - return (buf.read(), (fromhost, fromport)) - - def recv(self, *pos, **kw): - bytes, _ = self.recvfrom(*pos, **kw) - return bytes - - def close(self): - if self._proxyconn: - self._proxyconn.close() - return _BaseSocket.close(self) - - def get_proxy_sockname(self): - """ - Returns the bound IP address and port number at the proxy. - """ - return self.proxy_sockname - - getproxysockname = get_proxy_sockname - - def get_proxy_peername(self): - """ - Returns the IP and port number of the proxy. - """ - return _BaseSocket.getpeername(self) - - getproxypeername = get_proxy_peername - - def get_peername(self): - """ - Returns the IP address and port number of the destination - machine (note: get_proxy_peername returns the proxy) - """ - return self.proxy_peername - - getpeername = get_peername - - def _negotiate_SOCKS5(self, *dest_addr): - """ - Negotiates a stream connection through a SOCKS5 server. - """ - CONNECT = b"\x01" - self.proxy_peername, self.proxy_sockname = self._SOCKS5_request(self, - CONNECT, dest_addr) - - def _SOCKS5_request(self, conn, cmd, dst): - """ - Send SOCKS5 request with given command (CMD field) and - address (DST field). Returns resolved DST address that was used. - """ - proxy_type, addr, port, rdns, username, password = self.proxy - - writer = conn.makefile("wb") - reader = conn.makefile("rb", 0) # buffering=0 renamed in Python 3 - try: - # First we'll send the authentication packages we support. - if username and password: - # The username/password details were supplied to the - # set_proxy method so we support the USERNAME/PASSWORD - # authentication (in addition to the standard none). - writer.write(b"\x05\x02\x00\x02") - else: - # No username/password were entered, therefore we - # only support connections with no authentication. - writer.write(b"\x05\x01\x00") - - # We'll receive the server's response to determine which - # method was selected - writer.flush() - chosen_auth = self._readall(reader, 2) - - if chosen_auth[0:1] != b"\x05": - # Note: string[i:i+1] is used because indexing of a bytestring - # via bytestring[i] yields an integer in Python 3 - raise GeneralProxyError("SOCKS5 proxy server sent invalid data") - - # Check the chosen authentication method - - if chosen_auth[1:2] == b"\x02": - # Okay, we need to perform a basic username/password - # authentication. - writer.write(b"\x01" + chr(len(username)).encode() - + username - + chr(len(password)).encode() - + password) - writer.flush() - auth_status = self._readall(reader, 2) - if auth_status[0:1] != b"\x01": - # Bad response - raise GeneralProxyError("SOCKS5 proxy server sent invalid data") - if auth_status[1:2] != b"\x00": - # Authentication failed - raise SOCKS5AuthError("SOCKS5 authentication failed") - - # Otherwise, authentication succeeded - - # No authentication is required if 0x00 - elif chosen_auth[1:2] != b"\x00": - # Reaching here is always bad - if chosen_auth[1:2] == b"\xFF": - raise SOCKS5AuthError("All offered SOCKS5 authentication methods were rejected") - else: - raise GeneralProxyError("SOCKS5 proxy server sent invalid data") - - # Now we can request the actual connection - writer.write(b"\x05" + cmd + b"\x00") - resolved = self._write_SOCKS5_address(dst, writer) - writer.flush() - - # Get the response - resp = self._readall(reader, 3) - if resp[0:1] != b"\x05": - raise GeneralProxyError("SOCKS5 proxy server sent invalid data") - - status = ord(resp[1:2]) - if status != 0x00: - # Connection failed: server returned an error - error = SOCKS5_ERRORS.get(status, "Unknown error") - raise SOCKS5Error("{0:#04x}: {1}".format(status, error)) - - # Get the bound address/port - bnd = self._read_SOCKS5_address(reader) - return (resolved, bnd) - finally: - reader.close() - writer.close() - - def _write_SOCKS5_address(self, addr, file): - """ - Return the host and port packed for the SOCKS5 protocol, - and the resolved address as a tuple object. - """ - host, port = addr - proxy_type, _, _, rdns, username, password = self.proxy - - # If the given destination address is an IP address, we'll - # use the IPv4 address request even if remote resolving was specified. - try: - addr_bytes = socket.inet_aton(host) - file.write(b"\x01" + addr_bytes) - host = socket.inet_ntoa(addr_bytes) - except socket.error: - # Well it's not an IP number, so it's probably a DNS name. - if rdns: - # Resolve remotely - host_bytes = host.encode('idna') - file.write(b"\x03" + chr(len(host_bytes)).encode() + host_bytes) - else: - # Resolve locally - addr_bytes = socket.inet_aton(socket.gethostbyname(host)) - file.write(b"\x01" + addr_bytes) - host = socket.inet_ntoa(addr_bytes) - - file.write(struct.pack(">H", port)) - return host, port - - def _read_SOCKS5_address(self, file): - atyp = self._readall(file, 1) - if atyp == b"\x01": - addr = socket.inet_ntoa(self._readall(file, 4)) - elif atyp == b"\x03": - length = self._readall(file, 1) - addr = self._readall(file, ord(length)) - else: - raise GeneralProxyError("SOCKS5 proxy server sent invalid data") - - port = struct.unpack(">H", self._readall(file, 2))[0] - return addr, port - - def _negotiate_SOCKS4(self, dest_addr, dest_port): - """ - Negotiates a connection through a SOCKS4 server. - """ - proxy_type, addr, port, rdns, username, password = self.proxy - - writer = self.makefile("wb") - reader = self.makefile("rb", 0) # buffering=0 renamed in Python 3 - try: - # Check if the destination address provided is an IP address - remote_resolve = False - try: - addr_bytes = socket.inet_aton(dest_addr) - except socket.error: - # It's a DNS name. Check where it should be resolved. - if rdns: - addr_bytes = b"\x00\x00\x00\x01" - remote_resolve = True - else: - addr_bytes = socket.inet_aton(socket.gethostbyname(dest_addr)) - - # Construct the request packet - writer.write(struct.pack(">BBH", 0x04, 0x01, dest_port)) - writer.write(addr_bytes) - - # The username parameter is considered userid for SOCKS4 - if username: - writer.write(username) - writer.write(b"\x00") - - # DNS name if remote resolving is required - # NOTE: This is actually an extension to the SOCKS4 protocol - # called SOCKS4A and may not be supported in all cases. - if remote_resolve: - writer.write(dest_addr.encode('idna') + b"\x00") - writer.flush() - - # Get the response from the server - resp = self._readall(reader, 8) - if resp[0:1] != b"\x00": - # Bad data - raise GeneralProxyError("SOCKS4 proxy server sent invalid data") - - status = ord(resp[1:2]) - if status != 0x5A: - # Connection failed: server returned an error - error = SOCKS4_ERRORS.get(status, "Unknown error") - raise SOCKS4Error("{0:#04x}: {1}".format(status, error)) - - # Get the bound address/port - self.proxy_sockname = (socket.inet_ntoa(resp[4:]), struct.unpack(">H", resp[2:4])[0]) - if remote_resolve: - self.proxy_peername = socket.inet_ntoa(addr_bytes), dest_port - else: - self.proxy_peername = dest_addr, dest_port - finally: - reader.close() - writer.close() - - def _negotiate_HTTP(self, dest_addr, dest_port): - """ - Negotiates a connection through an HTTP server. - NOTE: This currently only supports HTTP CONNECT-style proxies. - """ - proxy_type, addr, port, rdns, username, password = self.proxy - - # If we need to resolve locally, we do this now - addr = dest_addr if rdns else socket.gethostbyname(dest_addr) - - self.sendall(b"CONNECT " + addr.encode('idna') + b":" + str(dest_port).encode() + - b" HTTP/1.1\r\n" + b"Host: " + dest_addr.encode('idna') + b"\r\n\r\n") - - # We just need the first line to check if the connection was successful - fobj = self.makefile() - status_line = fobj.readline() - fobj.close() - - if not status_line: - raise GeneralProxyError("Connection closed unexpectedly") - - try: - proto, status_code, status_msg = status_line.split(" ", 2) - except ValueError: - raise GeneralProxyError("HTTP proxy server sent invalid response") - - if not proto.startswith("HTTP/"): - raise GeneralProxyError("Proxy server does not appear to be an HTTP proxy") - - try: - status_code = int(status_code) - except ValueError: - raise HTTPError("HTTP proxy server did not return a valid HTTP status") - - if status_code != 200: - error = "{0}: {1}".format(status_code, status_msg) - if status_code in (400, 403, 405): - # It's likely that the HTTP proxy server does not support the CONNECT tunneling method - error += ("\n[*] Note: The HTTP proxy server may not be supported by PySocks" - " (must be a CONNECT tunnel proxy)") - raise HTTPError(error) - - self.proxy_sockname = (b"0.0.0.0", 0) - self.proxy_peername = addr, dest_port - - _proxy_negotiators = { - SOCKS4: _negotiate_SOCKS4, - SOCKS5: _negotiate_SOCKS5, - HTTP: _negotiate_HTTP - } - - - def connect(self, dest_pair): - """ - Connects to the specified destination through a proxy. - Uses the same API as socket's connect(). - To select the proxy server, use set_proxy(). - - dest_pair - 2-tuple of (IP/hostname, port). - """ - dest_addr, dest_port = dest_pair - - if self.type == socket.SOCK_DGRAM: - if not self._proxyconn: - self.bind(("", 0)) - dest_addr = socket.gethostbyname(dest_addr) - - # If the host address is INADDR_ANY or similar, reset the peer - # address so that packets are received from any peer - if dest_addr == "0.0.0.0" and not dest_port: - self.proxy_peername = None - else: - self.proxy_peername = (dest_addr, dest_port) - return - - proxy_type, proxy_addr, proxy_port, rdns, username, password = self.proxy - - # Do a minimal input check first - if (not isinstance(dest_pair, (list, tuple)) - or len(dest_pair) != 2 - or not dest_addr - or not isinstance(dest_port, int)): - raise GeneralProxyError("Invalid destination-connection (host, port) pair") - - - if proxy_type is None: - # Treat like regular socket object - self.proxy_peername = dest_pair - _BaseSocket.connect(self, (dest_addr, dest_port)) - return - - proxy_addr = self._proxy_addr() - - try: - # Initial connection to proxy server - _BaseSocket.connect(self, proxy_addr) - - except socket.error as error: - # Error while connecting to proxy - self.close() - proxy_addr, proxy_port = proxy_addr - proxy_server = "{0}:{1}".format(proxy_addr, proxy_port) - printable_type = PRINTABLE_PROXY_TYPES[proxy_type] - - msg = "Error connecting to {0} proxy {1}".format(printable_type, - proxy_server) - raise ProxyConnectionError(msg, error) - - else: - # Connected to proxy server, now negotiate - try: - # Calls negotiate_{SOCKS4, SOCKS5, HTTP} - negotiate = self._proxy_negotiators[proxy_type] - negotiate(self, dest_addr, dest_port) - except socket.error as error: - # Wrap socket errors - self.close() - raise GeneralProxyError("Socket error", error) - except ProxyError: - # Protocol error while negotiating with proxy - self.close() - raise - - def _proxy_addr(self): - """ - Return proxy address to connect to as tuple object - """ - proxy_type, proxy_addr, proxy_port, rdns, username, password = self.proxy - proxy_port = proxy_port or DEFAULT_PORTS.get(proxy_type) - if not proxy_port: - raise GeneralProxyError("Invalid proxy type") - return proxy_addr, proxy_port diff --git a/src/lib/PySocks/sockshandler.py b/src/lib/PySocks/sockshandler.py deleted file mode 100644 index 26c83439..00000000 --- a/src/lib/PySocks/sockshandler.py +++ /dev/null @@ -1,79 +0,0 @@ -#!/usr/bin/env python -""" -SocksiPy + urllib2 handler - -version: 0.3 -author: e<e@tr0ll.in> - -This module provides a Handler which you can use with urllib2 to allow it to tunnel your connection through a socks.sockssocket socket, with out monkey patching the original socket... -""" -import ssl - -try: - import urllib2 - import httplib -except ImportError: # Python 3 - import urllib.request as urllib2 - import http.client as httplib - -import socks # $ pip install PySocks - -def merge_dict(a, b): - d = a.copy() - d.update(b) - return d - -class SocksiPyConnection(httplib.HTTPConnection): - def __init__(self, proxytype, proxyaddr, proxyport=None, rdns=True, username=None, password=None, *args, **kwargs): - self.proxyargs = (proxytype, proxyaddr, proxyport, rdns, username, password) - httplib.HTTPConnection.__init__(self, *args, **kwargs) - - def connect(self): - self.sock = socks.socksocket() - self.sock.setproxy(*self.proxyargs) - if type(self.timeout) in (int, float): - self.sock.settimeout(self.timeout) - self.sock.connect((self.host, self.port)) - -class SocksiPyConnectionS(httplib.HTTPSConnection): - def __init__(self, proxytype, proxyaddr, proxyport=None, rdns=True, username=None, password=None, *args, **kwargs): - self.proxyargs = (proxytype, proxyaddr, proxyport, rdns, username, password) - httplib.HTTPSConnection.__init__(self, *args, **kwargs) - - def connect(self): - sock = socks.socksocket() - sock.setproxy(*self.proxyargs) - if type(self.timeout) in (int, float): - sock.settimeout(self.timeout) - sock.connect((self.host, self.port)) - self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file) - -class SocksiPyHandler(urllib2.HTTPHandler, urllib2.HTTPSHandler): - def __init__(self, *args, **kwargs): - self.args = args - self.kw = kwargs - urllib2.HTTPHandler.__init__(self) - - def http_open(self, req): - def build(host, port=None, timeout=0, **kwargs): - kw = merge_dict(self.kw, kwargs) - conn = SocksiPyConnection(*self.args, host=host, port=port, timeout=timeout, **kw) - return conn - return self.do_open(build, req) - - def https_open(self, req): - def build(host, port=None, timeout=0, **kwargs): - kw = merge_dict(self.kw, kwargs) - conn = SocksiPyConnectionS(*self.args, host=host, port=port, timeout=timeout, **kw) - return conn - return self.do_open(build, req) - -if __name__ == "__main__": - import sys - try: - port = int(sys.argv[1]) - except (ValueError, IndexError): - port = 9050 - opener = urllib2.build_opener(SocksiPyHandler(socks.PROXY_TYPE_SOCKS5, "localhost", port)) - print("HTTP: " + opener.open("http://httpbin.org/ip").read().decode()) - print("HTTPS: " + opener.open("https://httpbin.org/ip").read().decode()) diff --git a/src/lib/bencode/__init__.py b/src/lib/bencode/__init__.py deleted file mode 100644 index c484c651..00000000 --- a/src/lib/bencode/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -try: - string_type = basestring -except NameError: - string_type = str - -from .encode import encode -from .decode import decode diff --git a/src/lib/bencode/decode.py b/src/lib/bencode/decode.py deleted file mode 100644 index 65362490..00000000 --- a/src/lib/bencode/decode.py +++ /dev/null @@ -1,141 +0,0 @@ -import itertools -import collections - -from . import string_type - -try: - range = xrange -except NameError: - pass - -def decode(data): - ''' - Bdecodes data into Python built-in types. - ''' - - return consume(LookaheadIterator(data)) - -class LookaheadIterator(collections.Iterator): - ''' - An iterator that lets you peek at the next item. - ''' - - def __init__(self, iterator): - self.iterator, self.next_iterator = itertools.tee(iter(iterator)) - - # Be one step ahead - self._advance() - - def _advance(self): - self.next_item = next(self.next_iterator, None) - - def __next__(self): - self._advance() - - return next(self.iterator) - - # Python 2 compatibility - next = __next__ - -def consume(stream): - item = stream.next_item - - if item is None: - raise ValueError('Encoding empty data is undefined') - elif item == 'i': - return consume_int(stream) - elif item == 'l': - return consume_list(stream) - elif item == 'd': - return consume_dict(stream) - elif item is not None and item[0].isdigit(): - return consume_str(stream) - else: - raise ValueError('Invalid bencode object type: ', item) - -def consume_number(stream): - result = '' - - while True: - chunk = stream.next_item - - if not chunk.isdigit(): - return result - elif result.startswith('0'): - raise ValueError('Invalid number') - - next(stream) - result += chunk - -def consume_int(stream): - if next(stream) != 'i': - raise ValueError() - - negative = stream.next_item == '-' - - if negative: - next(stream) - - result = int(consume_number(stream)) - - if negative: - result *= -1 - - if result == 0: - raise ValueError('Negative zero is not allowed') - - if next(stream) != 'e': - raise ValueError('Unterminated integer') - - return result - -def consume_str(stream): - length = int(consume_number(stream)) - - if next(stream) != ':': - raise ValueError('Malformed string') - - result = '' - - for i in range(length): - try: - result += next(stream) - except StopIteration: - raise ValueError('Invalid string length') - - return result - -def consume_list(stream): - if next(stream) != 'l': - raise ValueError() - - l = [] - - while stream.next_item != 'e': - l.append(consume(stream)) - - if next(stream) != 'e': - raise ValueError('Unterminated list') - - return l - -def consume_dict(stream): - if next(stream) != 'd': - raise ValueError() - - d = {} - - while stream.next_item != 'e': - key = consume(stream) - - if not isinstance(key, string_type): - raise ValueError('Dictionary keys must be strings') - - value = consume(stream) - - d[key] = value - - if next(stream) != 'e': - raise ValueError('Unterminated dictionary') - - return d diff --git a/src/lib/bencode/encode.py b/src/lib/bencode/encode.py deleted file mode 100644 index be98f994..00000000 --- a/src/lib/bencode/encode.py +++ /dev/null @@ -1,22 +0,0 @@ -from . import string_type - -def encode(obj): - ''' - Bencodes the object. The object must be an instance of: str, int, list, or dict. - ''' - - if isinstance(obj, string_type): - return '{0}:{1}'.format(len(obj), obj) - elif isinstance(obj, int): - return 'i{0}e'.format(obj) - elif isinstance(obj, list): - values = ''.join([encode(o) for o in obj]) - - return 'l{0}e'.format(values) - elif isinstance(obj, dict): - items = sorted(obj.items()) - values = ''.join([encode(str(key)) + encode(value) for key, value in items]) - - return 'd{0}e'.format(values) - else: - raise TypeError('Unsupported type: {0}. Must be one of: str, int, list, dict.'.format(type(obj))) diff --git a/src/lib/geventwebsocket/AUTHORS b/src/lib/geventwebsocket/AUTHORS deleted file mode 100644 index 02de7096..00000000 --- a/src/lib/geventwebsocket/AUTHORS +++ /dev/null @@ -1,9 +0,0 @@ -This Websocket library for Gevent is written and maintained by - - Jeffrey Gelens <jeffrey at noppo.pro> - - -Contributors: - - Denis Bilenko - Lon Ingram diff --git a/src/lib/geventwebsocket/LICENSE b/src/lib/geventwebsocket/LICENSE deleted file mode 100644 index 2526edb3..00000000 --- a/src/lib/geventwebsocket/LICENSE +++ /dev/null @@ -1,13 +0,0 @@ - Copyright 2011-2017 Jeffrey Gelens <jeffrey@noppo.pro> - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/src/lib/geventwebsocket/__init__.py b/src/lib/geventwebsocket/__init__.py deleted file mode 100644 index 5ee3f961..00000000 --- a/src/lib/geventwebsocket/__init__.py +++ /dev/null @@ -1,21 +0,0 @@ -VERSION = (0, 10, 1, 'final', 0) - -__all__ = [ - 'WebSocketApplication', - 'Resource', - 'WebSocketServer', - 'WebSocketError', - 'get_version' -] - - -def get_version(*args, **kwargs): - from .utils import get_version - return get_version(*args, **kwargs) - -try: - from .resource import WebSocketApplication, Resource - from .server import WebSocketServer - from .exceptions import WebSocketError -except ImportError: - pass diff --git a/src/lib/geventwebsocket/_compat.py b/src/lib/geventwebsocket/_compat.py deleted file mode 100644 index 70354135..00000000 --- a/src/lib/geventwebsocket/_compat.py +++ /dev/null @@ -1,23 +0,0 @@ -from __future__ import absolute_import, division, print_function - -import sys -import codecs - - -PY3 = sys.version_info[0] == 3 -PY2 = sys.version_info[0] == 2 - - -if PY2: - bytes = str - text_type = unicode - string_types = basestring - range_type = xrange - iteritems = lambda x: x.iteritems() - # b = lambda x: x -else: - text_type = str - string_types = str, - range_type = range - iteritems = lambda x: iter(x.items()) - # b = lambda x: codecs.latin_1_encode(x)[0] diff --git a/src/lib/geventwebsocket/exceptions.py b/src/lib/geventwebsocket/exceptions.py deleted file mode 100644 index e066727e..00000000 --- a/src/lib/geventwebsocket/exceptions.py +++ /dev/null @@ -1,19 +0,0 @@ -from socket import error as socket_error - - -class WebSocketError(socket_error): - """ - Base class for all websocket errors. - """ - - -class ProtocolError(WebSocketError): - """ - Raised if an error occurs when de/encoding the websocket protocol. - """ - - -class FrameTooLargeException(ProtocolError): - """ - Raised if a frame is received that is too large. - """ diff --git a/src/lib/geventwebsocket/gunicorn/__init__.py b/src/lib/geventwebsocket/gunicorn/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/src/lib/geventwebsocket/gunicorn/workers.py b/src/lib/geventwebsocket/gunicorn/workers.py deleted file mode 100644 index d0aa1369..00000000 --- a/src/lib/geventwebsocket/gunicorn/workers.py +++ /dev/null @@ -1,6 +0,0 @@ -from geventwebsocket.handler import WebSocketHandler -from gunicorn.workers.ggevent import GeventPyWSGIWorker - - -class GeventWebSocketWorker(GeventPyWSGIWorker): - wsgi_handler = WebSocketHandler diff --git a/src/lib/geventwebsocket/handler.py b/src/lib/geventwebsocket/handler.py deleted file mode 100644 index 8aec77c0..00000000 --- a/src/lib/geventwebsocket/handler.py +++ /dev/null @@ -1,283 +0,0 @@ -import base64 -import hashlib - -from gevent.pywsgi import WSGIHandler -from ._compat import PY3 -from .websocket import WebSocket, Stream -from .logging import create_logger - - -class Client(object): - def __init__(self, address, ws): - self.address = address - self.ws = ws - - -class WebSocketHandler(WSGIHandler): - """ - Automatically upgrades the connection to a websocket. - - To prevent the WebSocketHandler to call the underlying WSGI application, - but only setup the WebSocket negotiations, do: - - mywebsockethandler.prevent_wsgi_call = True - - before calling run_application(). This is useful if you want to do more - things before calling the app, and want to off-load the WebSocket - negotiations to this library. Socket.IO needs this for example, to send - the 'ack' before yielding the control to your WSGI app. - """ - - SUPPORTED_VERSIONS = ('13', '8', '7') - GUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11" - - def run_websocket(self): - """ - Called when a websocket has been created successfully. - """ - - if getattr(self, 'prevent_wsgi_call', False): - return - - # In case WebSocketServer is not used - if not hasattr(self.server, 'clients'): - self.server.clients = {} - - # Since we're now a websocket connection, we don't care what the - # application actually responds with for the http response - - try: - self.server.clients[self.client_address] = Client( - self.client_address, self.websocket) - list(self.application(self.environ, lambda s, h, e=None: [])) - finally: - del self.server.clients[self.client_address] - if not self.websocket.closed: - self.websocket.close() - self.environ.update({ - 'wsgi.websocket': None - }) - self.websocket = None - - def run_application(self): - if (hasattr(self.server, 'pre_start_hook') and self.server.pre_start_hook): - self.logger.debug("Calling pre-start hook") - if self.server.pre_start_hook(self): - return super(WebSocketHandler, self).run_application() - - self.logger.debug("Initializing WebSocket") - self.result = self.upgrade_websocket() - - if hasattr(self, 'websocket'): - if self.status and not self.headers_sent: - self.write('') - - self.run_websocket() - else: - if self.status: - # A status was set, likely an error so just send the response - if not self.result: - self.result = [] - - self.process_result() - return - - # This handler did not handle the request, so defer it to the - # underlying application object - return super(WebSocketHandler, self).run_application() - - def upgrade_websocket(self): - """ - Attempt to upgrade the current environ into a websocket enabled - connection. If successful, the environ dict with be updated with two - new entries, `wsgi.websocket` and `wsgi.websocket_version`. - - :returns: Whether the upgrade was successful. - """ - - # Some basic sanity checks first - - self.logger.debug("Validating WebSocket request") - - if self.environ.get('REQUEST_METHOD', '') != 'GET': - # This is not a websocket request, so we must not handle it - self.logger.debug('Can only upgrade connection if using GET method.') - return - - upgrade = self.environ.get('HTTP_UPGRADE', '').lower() - - if upgrade == 'websocket': - connection = self.environ.get('HTTP_CONNECTION', '').lower() - - if 'upgrade' not in connection: - # This is not a websocket request, so we must not handle it - self.logger.warning("Client didn't ask for a connection " - "upgrade") - return - else: - # This is not a websocket request, so we must not handle it - return - - if self.request_version != 'HTTP/1.1': - self.start_response('402 Bad Request', []) - self.logger.warning("Bad server protocol in headers") - - return ['Bad protocol version'] - - if self.environ.get('HTTP_SEC_WEBSOCKET_VERSION'): - return self.upgrade_connection() - else: - self.logger.warning("No protocol defined") - self.start_response('426 Upgrade Required', [ - ('Sec-WebSocket-Version', ', '.join(self.SUPPORTED_VERSIONS))]) - - return ['No Websocket protocol version defined'] - - def upgrade_connection(self): - """ - Validate and 'upgrade' the HTTP request to a WebSocket request. - - If an upgrade succeeded then then handler will have `start_response` - with a status of `101`, the environ will also be updated with - `wsgi.websocket` and `wsgi.websocket_version` keys. - - :param environ: The WSGI environ dict. - :param start_response: The callable used to start the response. - :param stream: File like object that will be read from/written to by - the underlying WebSocket object, if created. - :return: The WSGI response iterator is something went awry. - """ - - self.logger.debug("Attempting to upgrade connection") - - version = self.environ.get("HTTP_SEC_WEBSOCKET_VERSION") - - if version not in self.SUPPORTED_VERSIONS: - msg = "Unsupported WebSocket Version: {0}".format(version) - - self.logger.warning(msg) - self.start_response('400 Bad Request', [ - ('Sec-WebSocket-Version', ', '.join(self.SUPPORTED_VERSIONS)) - ]) - - return [msg] - - key = self.environ.get("HTTP_SEC_WEBSOCKET_KEY", '').strip() - - if not key: - # 5.2.1 (3) - msg = "Sec-WebSocket-Key header is missing/empty" - - self.logger.warning(msg) - self.start_response('400 Bad Request', []) - - return [msg] - - try: - key_len = len(base64.b64decode(key)) - except TypeError: - msg = "Invalid key: {0}".format(key) - - self.logger.warning(msg) - self.start_response('400 Bad Request', []) - - return [msg] - - if key_len != 16: - # 5.2.1 (3) - msg = "Invalid key: {0}".format(key) - - self.logger.warning(msg) - self.start_response('400 Bad Request', []) - - return [msg] - - # Check for WebSocket Protocols - requested_protocols = self.environ.get( - 'HTTP_SEC_WEBSOCKET_PROTOCOL', '') - protocol = None - - if hasattr(self.application, 'app_protocol'): - allowed_protocol = self.application.app_protocol( - self.environ['PATH_INFO']) - - if allowed_protocol and allowed_protocol in requested_protocols: - protocol = allowed_protocol - self.logger.debug("Protocol allowed: {0}".format(protocol)) - - self.websocket = WebSocket(self.environ, Stream(self), self) - self.environ.update({ - 'wsgi.websocket_version': version, - 'wsgi.websocket': self.websocket - }) - - if PY3: - accept = base64.b64encode( - hashlib.sha1((key + self.GUID).encode("latin-1")).digest() - ).decode("latin-1") - else: - accept = base64.b64encode(hashlib.sha1(key + self.GUID).digest()) - - headers = [ - ("Upgrade", "websocket"), - ("Connection", "Upgrade"), - ("Sec-WebSocket-Accept", accept) - ] - - if protocol: - headers.append(("Sec-WebSocket-Protocol", protocol)) - - self.logger.debug("WebSocket request accepted, switching protocols") - self.start_response("101 Switching Protocols", headers) - - @property - def logger(self): - if not hasattr(self.server, 'logger'): - self.server.logger = create_logger(__name__) - - return self.server.logger - - def log_request(self): - if '101' not in str(self.status): - self.logger.info(self.format_request()) - - @property - def active_client(self): - return self.server.clients[self.client_address] - - def start_response(self, status, headers, exc_info=None): - """ - Called when the handler is ready to send a response back to the remote - endpoint. A websocket connection may have not been created. - """ - writer = super(WebSocketHandler, self).start_response( - status, headers, exc_info=exc_info) - - self._prepare_response() - - return writer - - def _prepare_response(self): - """ - Sets up the ``pywsgi.Handler`` to work with a websocket response. - - This is used by other projects that need to support WebSocket - connections as part of a larger effort. - """ - assert not self.headers_sent - - if not self.environ.get('wsgi.websocket'): - # a WebSocket connection is not established, do nothing - return - - # So that `finalize_headers` doesn't write a Content-Length header - self.provided_content_length = False - - # The websocket is now controlling the response - self.response_use_chunked = False - - # Once the request is over, the connection must be closed - self.close_connection = True - - # Prevents the Date header from being written - self.provided_date = True diff --git a/src/lib/geventwebsocket/logging.py b/src/lib/geventwebsocket/logging.py deleted file mode 100644 index ac0c9692..00000000 --- a/src/lib/geventwebsocket/logging.py +++ /dev/null @@ -1,32 +0,0 @@ -from __future__ import absolute_import - -from logging import getLogger, StreamHandler, getLoggerClass, Formatter, DEBUG, INFO - - -def create_logger(name, debug=False, format=None): - Logger = getLoggerClass() - - class DebugLogger(Logger): - def getEffectiveLevel(x): - if x.level == 0 and debug: - return DEBUG - else: - return Logger.getEffectiveLevel(x) - - class DebugHandler(StreamHandler): - def emit(x, record): - StreamHandler.emit(x, record) if debug else None - - handler = DebugHandler() - handler.setLevel(DEBUG) - - if format: - handler.setFormatter(Formatter(format)) - - logger = getLogger(name) - del logger.handlers[:] - logger.__class__ = DebugLogger - logger.addHandler(handler) - logger.setLevel(INFO) - - return logger diff --git a/src/lib/geventwebsocket/protocols/__init__.py b/src/lib/geventwebsocket/protocols/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/src/lib/geventwebsocket/protocols/base.py b/src/lib/geventwebsocket/protocols/base.py deleted file mode 100644 index 1c05ab62..00000000 --- a/src/lib/geventwebsocket/protocols/base.py +++ /dev/null @@ -1,35 +0,0 @@ -class BaseProtocol(object): - PROTOCOL_NAME = '' - - def __init__(self, app): - self._app = app - - def on_open(self): - self.app.on_open() - - def on_message(self, message): - self.app.on_message(message) - - def on_close(self, reason=None): - self.app.on_close(reason) - - @property - def app(self): - if self._app: - return self._app - else: - raise Exception("No application coupled") - - @property - def server(self): - if not hasattr(self.app, 'ws'): - return None - - return self.app.ws.handler.server - - @property - def handler(self): - if not hasattr(self.app, 'ws'): - return None - - return self.app.ws.handler diff --git a/src/lib/geventwebsocket/protocols/wamp.py b/src/lib/geventwebsocket/protocols/wamp.py deleted file mode 100644 index c89775be..00000000 --- a/src/lib/geventwebsocket/protocols/wamp.py +++ /dev/null @@ -1,235 +0,0 @@ -import inspect -import random -import string -import types - -try: - import ujson as json -except ImportError: - try: - import simplejson as json - except ImportError: - import json - -from .._compat import range_type, string_types -from ..exceptions import WebSocketError -from .base import BaseProtocol - - -def export_rpc(arg=None): - if isinstance(arg, types.FunctionType): - arg._rpc = arg.__name__ - return arg - - -def serialize(data): - return json.dumps(data) - - -class Prefixes(object): - def __init__(self): - self.prefixes = {} - - def add(self, prefix, uri): - self.prefixes[prefix] = uri - - def resolve(self, curie_or_uri): - if "http://" in curie_or_uri: - return curie_or_uri - elif ':' in curie_or_uri: - prefix, proc = curie_or_uri.split(':', 1) - return self.prefixes[prefix] + proc - else: - raise Exception(curie_or_uri) - - -class RemoteProcedures(object): - def __init__(self): - self.calls = {} - - def register_procedure(self, uri, proc): - self.calls[uri] = proc - - def register_object(self, uri, obj): - for k in inspect.getmembers(obj, inspect.ismethod): - if '_rpc' in k[1].__dict__: - proc_uri = uri + k[1]._rpc - self.calls[proc_uri] = (obj, k[1]) - - def call(self, uri, args): - if uri in self.calls: - proc = self.calls[uri] - - # Do the correct call whether it's a function or instance method. - if isinstance(proc, tuple): - if proc[1].__self__ is None: - # Create instance of object and call method - return proc[1](proc[0](), *args) - else: - # Call bound method on instance - return proc[1](*args) - else: - return self.calls[uri](*args) - else: - raise Exception("no such uri '{}'".format(uri)) - - -class Channels(object): - def __init__(self): - self.channels = {} - - def create(self, uri, prefix_matching=False): - if uri not in self.channels: - self.channels[uri] = [] - - # TODO: implement prefix matching - - def subscribe(self, uri, client): - if uri in self.channels: - self.channels[uri].append(client) - - def unsubscribe(self, uri, client): - if uri not in self.channels: - return - - client_index = self.channels[uri].index(client) - self.channels[uri].pop(client_index) - - if len(self.channels[uri]) == 0: - del self.channels[uri] - - def publish(self, uri, event, exclude=None, eligible=None): - if uri not in self.channels: - return - - # TODO: exclude & eligible - - msg = [WampProtocol.MSG_EVENT, uri, event] - - for client in self.channels[uri]: - try: - client.ws.send(serialize(msg)) - except WebSocketError: - # Seems someone didn't unsubscribe before disconnecting - self.channels[uri].remove(client) - - -class WampProtocol(BaseProtocol): - MSG_WELCOME = 0 - MSG_PREFIX = 1 - MSG_CALL = 2 - MSG_CALL_RESULT = 3 - MSG_CALL_ERROR = 4 - MSG_SUBSCRIBE = 5 - MSG_UNSUBSCRIBE = 6 - MSG_PUBLISH = 7 - MSG_EVENT = 8 - - PROTOCOL_NAME = "wamp" - - def __init__(self, *args, **kwargs): - self.procedures = RemoteProcedures() - self.prefixes = Prefixes() - self.session_id = ''.join( - [random.choice(string.digits + string.letters) - for i in range_type(16)]) - - super(WampProtocol, self).__init__(*args, **kwargs) - - def register_procedure(self, *args, **kwargs): - self.procedures.register_procedure(*args, **kwargs) - - def register_object(self, *args, **kwargs): - self.procedures.register_object(*args, **kwargs) - - def register_pubsub(self, *args, **kwargs): - if not hasattr(self.server, 'channels'): - self.server.channels = Channels() - - self.server.channels.create(*args, **kwargs) - - def do_handshake(self): - from geventwebsocket import get_version - - welcome = [ - self.MSG_WELCOME, - self.session_id, - 1, - 'gevent-websocket/' + get_version() - ] - self.app.ws.send(serialize(welcome)) - - def _get_exception_info(self, e): - uri = 'http://TODO#generic' - desc = str(type(e)) - details = str(e) - return [uri, desc, details] - - def rpc_call(self, data): - call_id, curie_or_uri = data[1:3] - args = data[3:] - - if not isinstance(call_id, string_types): - raise Exception() - if not isinstance(curie_or_uri, string_types): - raise Exception() - - uri = self.prefixes.resolve(curie_or_uri) - - try: - result = self.procedures.call(uri, args) - result_msg = [self.MSG_CALL_RESULT, call_id, result] - except Exception as e: - result_msg = [self.MSG_CALL_ERROR, - call_id] + self._get_exception_info(e) - - self.app.on_message(serialize(result_msg)) - - def pubsub_action(self, data): - action = data[0] - curie_or_uri = data[1] - - if not isinstance(action, int): - raise Exception() - if not isinstance(curie_or_uri, string_types): - raise Exception() - - uri = self.prefixes.resolve(curie_or_uri) - - if action == self.MSG_SUBSCRIBE and len(data) == 2: - self.server.channels.subscribe(data[1], self.handler.active_client) - - elif action == self.MSG_UNSUBSCRIBE and len(data) == 2: - self.server.channels.unsubscribe( - data[1], self.handler.active_client) - - elif action == self.MSG_PUBLISH and len(data) >= 3: - payload = data[2] if len(data) >= 3 else None - exclude = data[3] if len(data) >= 4 else None - eligible = data[4] if len(data) >= 5 else None - - self.server.channels.publish(uri, payload, exclude, eligible) - - def on_open(self): - self.app.on_open() - self.do_handshake() - - def on_message(self, message): - data = json.loads(message) - - if not isinstance(data, list): - raise Exception('incoming data is no list') - - if data[0] == self.MSG_PREFIX and len(data) == 3: - prefix, uri = data[1:3] - self.prefixes.add(prefix, uri) - - elif data[0] == self.MSG_CALL and len(data) >= 3: - return self.rpc_call(data) - - elif data[0] in (self.MSG_SUBSCRIBE, self.MSG_UNSUBSCRIBE, - self.MSG_PUBLISH): - return self.pubsub_action(data) - else: - raise Exception("Unknown call") - diff --git a/src/lib/geventwebsocket/resource.py b/src/lib/geventwebsocket/resource.py deleted file mode 100644 index 549f0d32..00000000 --- a/src/lib/geventwebsocket/resource.py +++ /dev/null @@ -1,100 +0,0 @@ -import re -import warnings - -from .protocols.base import BaseProtocol -from .exceptions import WebSocketError - -try: - from collections import OrderedDict -except ImportError: - class OrderedDict: - pass - - -class WebSocketApplication(object): - protocol_class = BaseProtocol - - def __init__(self, ws): - self.protocol = self.protocol_class(self) - self.ws = ws - - def handle(self): - self.protocol.on_open() - - while True: - try: - message = self.ws.receive() - except WebSocketError: - self.protocol.on_close() - break - - self.protocol.on_message(message) - - def on_open(self, *args, **kwargs): - pass - - def on_close(self, *args, **kwargs): - pass - - def on_message(self, message, *args, **kwargs): - self.ws.send(message, **kwargs) - - @classmethod - def protocol_name(cls): - return cls.protocol_class.PROTOCOL_NAME - - -class Resource(object): - def __init__(self, apps=None): - self.apps = apps if apps else [] - - if isinstance(apps, dict): - if not isinstance(apps, OrderedDict): - warnings.warn("Using an unordered dictionary for the " - "app list is discouraged and may lead to " - "undefined behavior.", UserWarning) - - self.apps = apps.items() - - # An app can either be a standard WSGI application (an object we call with - # __call__(self, environ, start_response)) or a class we instantiate - # (and which can handle websockets). This function tells them apart. - # Override this if you have apps that can handle websockets but don't - # fulfill these criteria. - def _is_websocket_app(self, app): - return isinstance(app, type) and issubclass(app, WebSocketApplication) - - def _app_by_path(self, environ_path, is_websocket_request): - # Which app matched the current path? - for path, app in self.apps: - if re.match(path, environ_path): - if is_websocket_request == self._is_websocket_app(app): - return app - return None - - def app_protocol(self, path): - # app_protocol will only be called for websocket apps - app = self._app_by_path(path, True) - - if hasattr(app, 'protocol_name'): - return app.protocol_name() - else: - return '' - - def __call__(self, environ, start_response): - environ = environ - is_websocket_call = 'wsgi.websocket' in environ - current_app = self._app_by_path(environ['PATH_INFO'], is_websocket_call) - - if current_app is None: - raise Exception("No apps defined") - - if is_websocket_call: - ws = environ['wsgi.websocket'] - current_app = current_app(ws) - current_app.ws = ws # TODO: needed? - current_app.handle() - # Always return something, calling WSGI middleware may rely on it - return [] - else: - return current_app(environ, start_response) diff --git a/src/lib/geventwebsocket/server.py b/src/lib/geventwebsocket/server.py deleted file mode 100644 index e939bd11..00000000 --- a/src/lib/geventwebsocket/server.py +++ /dev/null @@ -1,34 +0,0 @@ -from gevent.pywsgi import WSGIServer - -from .handler import WebSocketHandler -from .logging import create_logger - - -class WebSocketServer(WSGIServer): - handler_class = WebSocketHandler - debug_log_format = ( - '-' * 80 + '\n' + - '%(levelname)s in %(module)s [%(pathname)s:%(lineno)d]:\n' + - '%(message)s\n' + - '-' * 80 - ) - - def __init__(self, *args, **kwargs): - self.debug = kwargs.pop('debug', False) - self.pre_start_hook = kwargs.pop('pre_start_hook', None) - self._logger = None - self.clients = {} - - super(WebSocketServer, self).__init__(*args, **kwargs) - - def handle(self, socket, address): - handler = self.handler_class(socket, address, self) - handler.handle() - - @property - def logger(self): - if not self._logger: - self._logger = create_logger( - __name__, self.debug, self.debug_log_format) - - return self._logger diff --git a/src/lib/geventwebsocket/utf8validator.py b/src/lib/geventwebsocket/utf8validator.py deleted file mode 100644 index d604f966..00000000 --- a/src/lib/geventwebsocket/utf8validator.py +++ /dev/null @@ -1,224 +0,0 @@ -from ._compat import PY3 - -############################################################################### -# -# The MIT License (MIT) -# -# Copyright (c) Crossbar.io Technologies GmbH -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -############################################################################### - -# Note: This code is a Python implementation of the algorithm -# "Flexible and Economical UTF-8 Decoder" by Bjoern Hoehrmann -# bjoern@hoehrmann.de, http://bjoern.hoehrmann.de/utf-8/decoder/dfa/ - -__all__ = ("Utf8Validator",) - - -# DFA transitions -UTF8VALIDATOR_DFA = ( - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, # 00..1f - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, # 20..3f - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, # 40..5f - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, # 60..7f - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, # 80..9f - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, # a0..bf - 8, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, # c0..df - 0xa, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x4, 0x3, 0x3, # e0..ef - 0xb, 0x6, 0x6, 0x6, 0x5, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, # f0..ff - 0x0, 0x1, 0x2, 0x3, 0x5, 0x8, 0x7, 0x1, 0x1, 0x1, 0x4, 0x6, 0x1, 0x1, 0x1, 0x1, # s0..s0 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, # s1..s2 - 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, # s3..s4 - 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, # s5..s6 - 1, 3, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, # s7..s8 -) - -UTF8_ACCEPT = 0 -UTF8_REJECT = 1 - - -# use Cython implementation of UTF8 validator if available -# -try: - from wsaccel.utf8validator import Utf8Validator - -except ImportError: - # - # Fallback to pure Python implementation - also for PyPy. - # - # Do NOT touch this code unless you know what you are doing! - # https://github.com/oberstet/scratchbox/tree/master/python/utf8 - # - - if PY3: - - # Python 3 and above - - # convert DFA table to bytes (performance) - UTF8VALIDATOR_DFA_S = bytes(UTF8VALIDATOR_DFA) - - class Utf8Validator(object): - """ - Incremental UTF-8 validator with constant memory consumption (minimal state). - - Implements the algorithm "Flexible and Economical UTF-8 Decoder" by - Bjoern Hoehrmann (http://bjoern.hoehrmann.de/utf-8/decoder/dfa/). - """ - - def __init__(self): - self.reset() - - def decode(self, b): - """ - Eat one UTF-8 octet, and validate on the fly. - - Returns ``UTF8_ACCEPT`` when enough octets have been consumed, in which case - ``self.codepoint`` contains the decoded Unicode code point. - - Returns ``UTF8_REJECT`` when invalid UTF-8 was encountered. - - Returns some other positive integer when more octets need to be eaten. - """ - tt = UTF8VALIDATOR_DFA_S[b] - if self.state != UTF8_ACCEPT: - self.codepoint = (b & 0x3f) | (self.codepoint << 6) - else: - self.codepoint = (0xff >> tt) & b - self.state = UTF8VALIDATOR_DFA_S[256 + self.state * 16 + tt] - return self.state - - def reset(self): - """ - Reset validator to start new incremental UTF-8 decode/validation. - """ - self.state = UTF8_ACCEPT # the empty string is valid UTF8 - self.codepoint = 0 - self.i = 0 - - def validate(self, ba): - """ - Incrementally validate a chunk of bytes provided as string. - - Will return a quad ``(valid?, endsOnCodePoint?, currentIndex, totalIndex)``. - - As soon as an octet is encountered which renders the octet sequence - invalid, a quad with ``valid? == False`` is returned. ``currentIndex`` returns - the index within the currently consumed chunk, and ``totalIndex`` the - index within the total consumed sequence that was the point of bail out. - When ``valid? == True``, currentIndex will be ``len(ba)`` and ``totalIndex`` the - total amount of consumed bytes. - """ - # - # The code here is written for optimal JITting in PyPy, not for best - # readability by your grandma or particular elegance. Do NOT touch! - # - l = len(ba) - i = 0 - state = self.state - while i < l: - # optimized version of decode(), since we are not interested in actual code points - state = UTF8VALIDATOR_DFA_S[256 + (state << 4) + UTF8VALIDATOR_DFA_S[ba[i]]] - if state == UTF8_REJECT: - self.state = state - self.i += i - return False, False, i, self.i - i += 1 - self.state = state - self.i += l - return True, state == UTF8_ACCEPT, l, self.i - - else: - - # convert DFA table to string (performance) - UTF8VALIDATOR_DFA_S = ''.join([chr(c) for c in UTF8VALIDATOR_DFA]) - - class Utf8Validator(object): - """ - Incremental UTF-8 validator with constant memory consumption (minimal state). - - Implements the algorithm "Flexible and Economical UTF-8 Decoder" by - Bjoern Hoehrmann (http://bjoern.hoehrmann.de/utf-8/decoder/dfa/). - """ - - def __init__(self): - self.reset() - - def decode(self, b): - """ - Eat one UTF-8 octet, and validate on the fly. - - Returns ``UTF8_ACCEPT`` when enough octets have been consumed, in which case - ``self.codepoint`` contains the decoded Unicode code point. - - Returns ``UTF8_REJECT`` when invalid UTF-8 was encountered. - - Returns some other positive integer when more octets need to be eaten. - """ - tt = ord(UTF8VALIDATOR_DFA_S[b]) - if self.state != UTF8_ACCEPT: - self.codepoint = (b & 0x3f) | (self.codepoint << 6) - else: - self.codepoint = (0xff >> tt) & b - self.state = ord(UTF8VALIDATOR_DFA_S[256 + self.state * 16 + tt]) - return self.state - - def reset(self): - """ - Reset validator to start new incremental UTF-8 decode/validation. - """ - self.state = UTF8_ACCEPT # the empty string is valid UTF8 - self.codepoint = 0 - self.i = 0 - - def validate(self, ba): - """ - Incrementally validate a chunk of bytes provided as string. - - Will return a quad ``(valid?, endsOnCodePoint?, currentIndex, totalIndex)``. - - As soon as an octet is encountered which renders the octet sequence - invalid, a quad with ``valid? == False`` is returned. ``currentIndex`` returns - the index within the currently consumed chunk, and ``totalIndex`` the - index within the total consumed sequence that was the point of bail out. - When ``valid? == True``, currentIndex will be ``len(ba)`` and ``totalIndex`` the - total amount of consumed bytes. - """ - # - # The code here is written for optimal JITting in PyPy, not for best - # readability by your grandma or particular elegance. Do NOT touch! - # - l = len(ba) - i = 0 - state = self.state - while i < l: - # optimized version of decode(), since we are not interested in actual code points - try: - state = ord(UTF8VALIDATOR_DFA_S[256 + (state << 4) + ord(UTF8VALIDATOR_DFA_S[ba[i]])]) - except: - import ipdb; ipdb.set_trace() - if state == UTF8_REJECT: - self.state = state - self.i += i - return False, False, i, self.i - i += 1 - self.state = state - self.i += l - return True, state == UTF8_ACCEPT, l, self.i diff --git a/src/lib/geventwebsocket/utils.py b/src/lib/geventwebsocket/utils.py deleted file mode 100644 index 2e5bc3b7..00000000 --- a/src/lib/geventwebsocket/utils.py +++ /dev/null @@ -1,45 +0,0 @@ -import subprocess - - -def get_version(version=None): - "Returns a PEP 386-compliant version number from VERSION." - - if version is None: - from geventwebsocket import VERSION as version - else: - assert len(version) == 5 - assert version[3] in ('alpha', 'beta', 'rc', 'final') - - # Now build the two parts of the version number: - # main = X.Y[.Z] - # sub = .devN - for pre-alpha releases - # | {a|b|c}N - for alpha, beta and rc releases - - parts = 2 if version[2] == 0 else 3 - main = '.'.join(str(x) for x in version[:parts]) - - sub = '' - if version[3] == 'alpha' and version[4] == 0: - hg_changeset = get_hg_changeset() - if hg_changeset: - sub = '.dev{0}'.format(hg_changeset) - - elif version[3] != 'final': - mapping = {'alpha': 'a', 'beta': 'b', 'rc': 'c'} - sub = mapping[version[3]] + str(version[4]) - - return str(main + sub) - - -def get_hg_changeset(): - rev, err = subprocess.Popen( - 'hg id -i', - shell=True, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE - ).communicate() - - if err: - return None - else: - return rev.strip().replace('+', '') diff --git a/src/lib/geventwebsocket/websocket.py b/src/lib/geventwebsocket/websocket.py deleted file mode 100644 index 7aad7698..00000000 --- a/src/lib/geventwebsocket/websocket.py +++ /dev/null @@ -1,570 +0,0 @@ -import struct -import socket - -from ._compat import string_types, range_type, text_type -from .exceptions import ProtocolError -from .exceptions import WebSocketError -from .exceptions import FrameTooLargeException -from .utf8validator import Utf8Validator - - -MSG_SOCKET_DEAD = "Socket is dead" -MSG_ALREADY_CLOSED = "Connection is already closed" -MSG_CLOSED = "Connection closed" - - -class WebSocket(object): - """ - Base class for supporting websocket operations. - - :ivar environ: The http environment referenced by this connection. - :ivar closed: Whether this connection is closed/closing. - :ivar stream: The underlying file like object that will be read from / - written to by this WebSocket object. - """ - - __slots__ = ('utf8validator', 'utf8validate_last', 'environ', 'closed', - 'stream', 'raw_write', 'raw_read', 'handler') - - OPCODE_CONTINUATION = 0x00 - OPCODE_TEXT = 0x01 - OPCODE_BINARY = 0x02 - OPCODE_CLOSE = 0x08 - OPCODE_PING = 0x09 - OPCODE_PONG = 0x0a - - def __init__(self, environ, stream, handler): - self.environ = environ - self.closed = False - - self.stream = stream - - self.raw_write = stream.write - self.raw_read = stream.read - - self.utf8validator = Utf8Validator() - self.handler = handler - - def __del__(self): - try: - self.close() - except: - # close() may fail if __init__ didn't complete - pass - - def _decode_bytes(self, bytestring): - """ - Internal method used to convert the utf-8 encoded bytestring into - unicode. - - If the conversion fails, the socket will be closed. - """ - - if not bytestring: - return '' - - try: - return bytestring.decode('utf-8') - except UnicodeDecodeError: - self.close(1007) - - raise - - def _encode_bytes(self, text): - """ - :returns: The utf-8 byte string equivalent of `text`. - """ - - if not isinstance(text, str): - text = text_type(text or '') - - return text.encode("utf-8") - - def _is_valid_close_code(self, code): - """ - :returns: Whether the returned close code is a valid hybi return code. - """ - if code < 1000: - return False - - if 1004 <= code <= 1006: - return False - - if 1012 <= code <= 1016: - return False - - if code == 1100: - # not sure about this one but the autobahn fuzzer requires it. - return False - - if 2000 <= code <= 2999: - return False - - return True - - @property - def current_app(self): - if hasattr(self.handler.server.application, 'current_app'): - return self.handler.server.application.current_app - else: - # For backwards compatibility reasons - class MockApp(): - def on_close(self, *args): - pass - - return MockApp() - - @property - def origin(self): - if not self.environ: - return - - return self.environ.get('HTTP_ORIGIN') - - @property - def protocol(self): - if not self.environ: - return - - return self.environ.get('HTTP_SEC_WEBSOCKET_PROTOCOL') - - @property - def version(self): - if not self.environ: - return - - return self.environ.get('HTTP_SEC_WEBSOCKET_VERSION') - - @property - def path(self): - if not self.environ: - return - - return self.environ.get('PATH_INFO') - - @property - def logger(self): - return self.handler.logger - - def handle_close(self, header, payload): - """ - Called when a close frame has been decoded from the stream. - - :param header: The decoded `Header`. - :param payload: The bytestring payload associated with the close frame. - """ - if not payload: - self.close(1000, None) - - return - - if len(payload) < 2: - raise ProtocolError('Invalid close frame: {0} {1}'.format( - header, payload)) - - code = struct.unpack('!H', payload[:2])[0] - payload = payload[2:] - - if payload: - validator = Utf8Validator() - val = validator.validate(payload) - - if not val[0]: - raise UnicodeError - - if not self._is_valid_close_code(code): - raise ProtocolError('Invalid close code {0}'.format(code)) - - self.close(code, payload) - - def handle_ping(self, header, payload): - self.send_frame(payload, self.OPCODE_PONG) - - def handle_pong(self, header, payload): - pass - - def read_frame(self): - """ - Block until a full frame has been read from the socket. - - This is an internal method as calling this will not cleanup correctly - if an exception is called. Use `receive` instead. - - :return: The header and payload as a tuple. - """ - - header = Header.decode_header(self.stream) - - if header.flags: - raise ProtocolError - - if not header.length: - return header, b'' - - try: - payload = self.raw_read(header.length) - except socket.error: - payload = b'' - except Exception: - # TODO log out this exception - payload = b'' - - if len(payload) != header.length: - raise WebSocketError('Unexpected EOF reading frame payload') - - if header.mask: - payload = header.unmask_payload(payload) - - return header, payload - - def validate_utf8(self, payload): - # Make sure the frames are decodable independently - self.utf8validate_last = self.utf8validator.validate(payload) - - if not self.utf8validate_last[0]: - raise UnicodeError("Encountered invalid UTF-8 while processing " - "text message at payload octet index " - "{0:d}".format(self.utf8validate_last[3])) - - def read_message(self): - """ - Return the next text or binary message from the socket. - - This is an internal method as calling this will not cleanup correctly - if an exception is called. Use `receive` instead. - """ - opcode = None - message = bytearray() - - while True: - header, payload = self.read_frame() - f_opcode = header.opcode - - if f_opcode in (self.OPCODE_TEXT, self.OPCODE_BINARY): - # a new frame - if opcode: - raise ProtocolError("The opcode in non-fin frame is " - "expected to be zero, got " - "{0!r}".format(f_opcode)) - - # Start reading a new message, reset the validator - self.utf8validator.reset() - self.utf8validate_last = (True, True, 0, 0) - - opcode = f_opcode - - elif f_opcode == self.OPCODE_CONTINUATION: - if not opcode: - raise ProtocolError("Unexpected frame with opcode=0") - - elif f_opcode == self.OPCODE_PING: - self.handle_ping(header, payload) - continue - - elif f_opcode == self.OPCODE_PONG: - self.handle_pong(header, payload) - continue - - elif f_opcode == self.OPCODE_CLOSE: - self.handle_close(header, payload) - return - - else: - raise ProtocolError("Unexpected opcode={0!r}".format(f_opcode)) - - if opcode == self.OPCODE_TEXT: - self.validate_utf8(payload) - - message += payload - - if header.fin: - break - - if opcode == self.OPCODE_TEXT: - self.validate_utf8(message) - return self._decode_bytes(message) - else: - return message - - def receive(self): - """ - Read and return a message from the stream. If `None` is returned, then - the socket is considered closed/errored. - """ - - if self.closed: - self.current_app.on_close(MSG_ALREADY_CLOSED) - raise WebSocketError(MSG_ALREADY_CLOSED) - - try: - return self.read_message() - except UnicodeError: - self.close(1007) - except ProtocolError: - self.close(1002) - except socket.timeout: - self.close() - self.current_app.on_close(MSG_CLOSED) - except socket.error: - self.close() - self.current_app.on_close(MSG_CLOSED) - - return None - - def send_frame(self, message, opcode): - """ - Send a frame over the websocket with message as its payload - """ - if self.closed: - self.current_app.on_close(MSG_ALREADY_CLOSED) - raise WebSocketError(MSG_ALREADY_CLOSED) - - if not message: - return - - if opcode in (self.OPCODE_TEXT, self.OPCODE_PING): - message = self._encode_bytes(message) - elif opcode == self.OPCODE_BINARY: - message = bytes(message) - - header = Header.encode_header(True, opcode, b'', len(message), 0) - - try: - self.raw_write(header + message) - except socket.error: - raise WebSocketError(MSG_SOCKET_DEAD) - except: - raise - - def send(self, message, binary=None): - """ - Send a frame over the websocket with message as its payload - """ - if binary is None: - binary = not isinstance(message, string_types) - - opcode = self.OPCODE_BINARY if binary else self.OPCODE_TEXT - - try: - self.send_frame(message, opcode) - except WebSocketError: - self.current_app.on_close(MSG_SOCKET_DEAD) - raise WebSocketError(MSG_SOCKET_DEAD) - - def close(self, code=1000, message=b''): - """ - Close the websocket and connection, sending the specified code and - message. The underlying socket object is _not_ closed, that is the - responsibility of the initiator. - """ - - if self.closed: - self.current_app.on_close(MSG_ALREADY_CLOSED) - - try: - message = self._encode_bytes(message) - - self.send_frame(message, opcode=self.OPCODE_CLOSE) - except WebSocketError: - # Failed to write the closing frame but it's ok because we're - # closing the socket anyway. - self.logger.debug("Failed to write closing frame -> closing socket") - finally: - self.logger.debug("Closed WebSocket") - self.closed = True - - self.stream = None - self.raw_write = None - self.raw_read = None - - self.environ = None - - #self.current_app.on_close(MSG_ALREADY_CLOSED) - - -class Stream(object): - """ - Wraps the handler's socket/rfile attributes and makes it in to a file like - object that can be read from/written to by the lower level websocket api. - """ - - __slots__ = ('handler', 'read', 'write') - - def __init__(self, handler): - self.handler = handler - self.read = handler.rfile.read - self.write = handler.socket.sendall - - -class Header(object): - __slots__ = ('fin', 'mask', 'opcode', 'flags', 'length') - - FIN_MASK = 0x80 - OPCODE_MASK = 0x0f - MASK_MASK = 0x80 - LENGTH_MASK = 0x7f - - RSV0_MASK = 0x40 - RSV1_MASK = 0x20 - RSV2_MASK = 0x10 - - # bitwise mask that will determine the reserved bits for a frame header - HEADER_FLAG_MASK = RSV0_MASK | RSV1_MASK | RSV2_MASK - - def __init__(self, fin=0, opcode=0, flags=0, length=0): - self.mask = '' - self.fin = fin - self.opcode = opcode - self.flags = flags - self.length = length - - def mask_payload(self, payload): - payload = bytearray(payload) - mask = bytearray(self.mask) - - for i in range_type(self.length): - payload[i] ^= mask[i % 4] - - return payload - - # it's the same operation - unmask_payload = mask_payload - - def __repr__(self): - opcodes = { - 0: 'continuation(0)', - 1: 'text(1)', - 2: 'binary(2)', - 8: 'close(8)', - 9: 'ping(9)', - 10: 'pong(10)' - } - flags = { - 0x40: 'RSV1 MASK', - 0x20: 'RSV2 MASK', - 0x10: 'RSV3 MASK' - } - - return ("<Header fin={0} opcode={1} length={2} flags={3} mask={4} at " - "0x{5:x}>").format( - self.fin, - opcodes.get(self.opcode, 'reserved({})'.format(self.opcode)), - self.length, - flags.get(self.flags, 'reserved({})'.format(self.flags)), - self.mask, id(self) - ) - - @classmethod - def decode_header(cls, stream): - """ - Decode a WebSocket header. - - :param stream: A file like object that can be 'read' from. - :returns: A `Header` instance. - """ - read = stream.read - data = read(2) - - if len(data) != 2: - raise WebSocketError("Unexpected EOF while decoding header") - - first_byte, second_byte = struct.unpack('!BB', data) - - header = cls( - fin=first_byte & cls.FIN_MASK == cls.FIN_MASK, - opcode=first_byte & cls.OPCODE_MASK, - flags=first_byte & cls.HEADER_FLAG_MASK, - length=second_byte & cls.LENGTH_MASK) - - has_mask = second_byte & cls.MASK_MASK == cls.MASK_MASK - - if header.opcode > 0x07: - if not header.fin: - raise ProtocolError( - "Received fragmented control frame: {0!r}".format(data)) - - # Control frames MUST have a payload length of 125 bytes or less - if header.length > 125: - raise FrameTooLargeException( - "Control frame cannot be larger than 125 bytes: " - "{0!r}".format(data)) - - if header.length == 126: - # 16 bit length - data = read(2) - - if len(data) != 2: - raise WebSocketError('Unexpected EOF while decoding header') - - header.length = struct.unpack('!H', data)[0] - elif header.length == 127: - # 64 bit length - data = read(8) - - if len(data) != 8: - raise WebSocketError('Unexpected EOF while decoding header') - - header.length = struct.unpack('!Q', data)[0] - - if has_mask: - mask = read(4) - - if len(mask) != 4: - raise WebSocketError('Unexpected EOF while decoding header') - - header.mask = mask - - return header - - @classmethod - def encode_header(cls, fin, opcode, mask, length, flags): - """ - Encodes a WebSocket header. - - :param fin: Whether this is the final frame for this opcode. - :param opcode: The opcode of the payload, see `OPCODE_*` - :param mask: Whether the payload is masked. - :param length: The length of the frame. - :param flags: The RSV* flags. - :return: A bytestring encoded header. - """ - first_byte = opcode - second_byte = 0 - extra = b"" - result = bytearray() - - if fin: - first_byte |= cls.FIN_MASK - - if flags & cls.RSV0_MASK: - first_byte |= cls.RSV0_MASK - - if flags & cls.RSV1_MASK: - first_byte |= cls.RSV1_MASK - - if flags & cls.RSV2_MASK: - first_byte |= cls.RSV2_MASK - - # now deal with length complexities - if length < 126: - second_byte += length - elif length <= 0xffff: - second_byte += 126 - extra = struct.pack('!H', length) - elif length <= 0xffffffffffffffff: - second_byte += 127 - extra = struct.pack('!Q', length) - else: - raise FrameTooLargeException - - if mask: - second_byte |= cls.MASK_MASK - - result.append(first_byte) - result.append(second_byte) - result.extend(extra) - - if mask: - result.extend(mask) - - return result diff --git a/src/lib/merkletools/LICENSE b/src/lib/merkletools/LICENSE deleted file mode 100644 index aea5b275..00000000 --- a/src/lib/merkletools/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Tierion - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/src/lib/merkletools/README.md b/src/lib/merkletools/README.md deleted file mode 100644 index 6a160ad4..00000000 --- a/src/lib/merkletools/README.md +++ /dev/null @@ -1,178 +0,0 @@ -# pymerkletools -[](https://badge.fury.io/py/merkletools) [](https://travis-ci.org/Tierion/pymerkletools) - -This is a Python port of [merkle-tools](https://github.com/tierion/merkle-tools). - -Tools for creating Merkle trees, generating merkle proofs, and verification of merkle proofs. - -## Installation - -``` -pip install merkletools -``` - -### Create MerkleTools Object - -```python -import merkletools - -mt = MerkleTools(hash_type="md5") # default is sha256 -# valid hashTypes include all crypto hash algorithms -# such as 'MD5', 'SHA1', 'SHA224', 'SHA256', 'SHA384', 'SHA512' -# as well as the SHA3 family of algorithms -# including 'SHA3-224', 'SHA3-256', 'SHA3-384', and 'SHA3-512' -``` - -To use `sha3`, this module depends on [pysha3](https://pypi.python.org/pypi/pysha3). It will be installed as part of this module or you can install it manually with : -```bash -pip install pysha3==1.0b1 -``` - - -## Methods - -### add_leaf(value, do_hash) - -Adds a value as a leaf or a list of leafs to the tree. The value must be a hex string, otherwise set the optional `do_hash` to true to have your value hashed prior to being added to the tree. - -```python -hex_data = '05ae04314577b2783b4be98211d1b72476c59e9c413cfb2afa2f0c68e0d93911' -list_data = ['Some text data', 'perhaps'] - -mt.add_leaf(hexData) -mt.add_leaf(otherData, True) -``` - -### get_leaf_count() - -Returns the number of leaves that are currently added to the tree. - -```python -leaf_count = mt.get_leaf_count(); -``` - -### get_leaf(index) - -Returns the value of the leaf at the given index as a hex string. - -```python -leaf_value = mt.get_leaf(1) -``` - -### reset_tree() - -Removes all the leaves from the tree, prepararing to to begin creating a new tree. - -```python -mt.reset_tree() -``` - -### make_tree() - -Generates the merkle tree using the leaves that have been added. - -```python -mt.make_tree(); -``` - -### is_ready - -`.is_ready` is a boolean property indicating if the tree is built and ready to supply its root and proofs. The `is_ready` state is `True` only after calling 'make_tree()'. Adding leaves or resetting the tree will change the ready state to False. - -```python -is_ready = mt.is_ready -``` - -### get_merkle_root() - -Returns the merkle root of the tree as a hex string. If the tree is not ready, `None` is returned. - -```python -root_value = mt.get_merkle_root(); -``` - -### get_proof(index) - -Returns the proof as an array of hash objects for the leaf at the given index. If the tree is not ready or no leaf exists at the given index, null is returned. - -```python -proof = mt.get_proof(1) -``` - -The proof array contains a set of merkle sibling objects. Each object contains the sibling hash, with the key value of either right or left. The right or left value tells you where that sibling was in relation to the current hash being evaluated. This information is needed for proof validation, as explained in the following section. - -### validate_proof(proof, target_hash, merkle_root) - -Returns a boolean indicating whether or not the proof is valid and correctly connects the `target_hash` to the `merkle_root`. `proof` is a proof array as supplied by the `get_proof` method. The `target_hash` and `merkle_root` parameters must be a hex strings. - -```python -proof = [ - { right: '09096dbc49b7909917e13b795ebf289ace50b870440f10424af8845fb7761ea5' }, - { right: 'ed2456914e48c1e17b7bd922177291ef8b7f553edf1b1f66b6fc1a076524b22f' }, - { left: 'eac53dde9661daf47a428efea28c81a021c06d64f98eeabbdcff442d992153a8' }, -] -target_hash = '36e0fd847d927d68475f32a94efff30812ee3ce87c7752973f4dd7476aa2e97e' -merkle_root = 'b8b1f39aa2e3fc2dde37f3df04e829f514fb98369b522bfb35c663befa896766' - -is_valid = mt.validate_proof(proof, targetHash, merkleRoot) -``` - -The proof process uses all the proof objects in the array to attempt to prove a relationship between the `target_hash` and the `merkle_root` values. The steps to validate a proof are: - -1. Concatenate `target_hash` and the first hash in the proof array. The right or left designation specifies which side of the concatenation that the proof hash value should be on. -2. Hash the resulting value. -3. Concatenate the resulting hash with the next hash in the proof array, using the same left and right rules. -4. Hash that value and continue the process until you’ve gone through each item in the proof array. -5. The final hash value should equal the `merkle_root` value if the proof is valid, otherwise the proof is invalid. - -## Common Usage - -### Creating a tree and generating the proofs - -```python -mt = MerkleTools() - -mt.add_leaf("tierion", True) -mt.add_leaf(["bitcoin", "blockchain"], True) - -mt.make_tree() - -print "root:", mt.get_merkle_root() # root: '765f15d171871b00034ee55e48ffdf76afbc44ed0bcff5c82f31351d333c2ed1' - -print mt.get_proof(1) # [{left: '2da7240f6c88536be72abe9f04e454c6478ee29709fc3729ddfb942f804fbf08'}, - # {right: 'ef7797e13d3a75526946a3bcf00daec9fc9c9c4d51ddc7cc5df888f74dd434d1'}] - -print mt.validate_proof(mt.get_proof(1), mt.get_leaf(1), mt.get_merkle_root()) # True -``` - -## Notes - -### About tree generation - -1. Internally, leaves are stored as `bytearray`. When the tree is build, it is generated by hashing together the `bytearray` values. -2. Lonely leaf nodes are promoted to the next level up, as depicted below. - - ROOT=Hash(H+E) - / \ - / \ - H=Hash(F+G) E - / \ \ - / \ \ - F=Hash(A+B) G=Hash(C+D) E - / \ / \ \ - / \ / \ \ - A B C D E - - -### Development -This module uses Python's `hashlib` for hashing. Inside a `MerkleTools` object all -hashes are stored as Python `bytearray`. This way hashes can be concatenated simply with `+` and the result -used as input for the hash function. But for -simplicity and easy to use `MerkleTools` methods expect that both input and outputs are hex -strings. We can convert from one type to the other using default Python string methods. -For example: -```python -hash = hashlib.sha256('a').digest() # '\xca\x97\x81\x12\xca\x1b\xbd\xca\xfa\xc21\xb3\x9a#\xdcM\xa7\x86\xef\xf8\x14|Nr\xb9\x80w\x85\xaf\xeeH\xbb' -hex_string = hash.decode('hex') # 'ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb' -back_to_hash = hash_string.decode('hex') # '\xca\x97\x81\x12\xca\x1b\xbd\xca\xfa\xc21\xb3\x9a#\xdcM\xa7\x86\xef\xf8\x14|Nr\xb9\x80w\x85\xaf\xeeH\xbb' -``` diff --git a/src/lib/merkletools/__init__.py b/src/lib/merkletools/__init__.py deleted file mode 100644 index ce5c9487..00000000 --- a/src/lib/merkletools/__init__.py +++ /dev/null @@ -1,138 +0,0 @@ -import hashlib -import binascii - -class MerkleTools(object): - def __init__(self, hash_type="sha256"): - hash_type = hash_type.lower() - if hash_type == 'sha256': - self.hash_function = hashlib.sha256 - elif hash_type == 'md5': - self.hash_function = hashlib.md5 - elif hash_type == 'sha224': - self.hash_function = hashlib.sha224 - elif hash_type == 'sha384': - self.hash_function = hashlib.sha384 - elif hash_type == 'sha512': - self.hash_function = hashlib.sha512 - elif hash_type == 'sha3_256': - self.hash_function = hashlib.sha3_256 - elif hash_type == 'sha3_224': - self.hash_function = hashlib.sha3_224 - elif hash_type == 'sha3_384': - self.hash_function = hashlib.sha3_384 - elif hash_type == 'sha3_512': - self.hash_function = hashlib.sha3_512 - else: - raise Exception('`hash_type` {} nor supported'.format(hash_type)) - - self.reset_tree() - - def _to_hex(self, x): - try: # python3 - return x.hex() - except: # python2 - return binascii.hexlify(x) - - def reset_tree(self): - self.leaves = list() - self.levels = None - self.is_ready = False - - def add_leaf(self, values, do_hash=False): - self.is_ready = False - # check if single leaf - if isinstance(values, tuple) or isinstance(values, list): - for v in values: - if do_hash: - v = v.encode('utf-8') - v = self.hash_function(v).hexdigest() - v = bytearray.fromhex(v) - else: - v = bytearray.fromhex(v) - self.leaves.append(v) - else: - if do_hash: - v = values.encode("utf-8") - v = self.hash_function(v).hexdigest() - v = bytearray.fromhex(v) - else: - v = bytearray.fromhex(values) - self.leaves.append(v) - - def get_leaf(self, index): - return self._to_hex(self.leaves[index]) - - def get_leaf_count(self): - return len(self.leaves) - - def get_tree_ready_state(self): - return self.is_ready - - def _calculate_next_level(self): - solo_leave = None - N = len(self.levels[0]) # number of leaves on the level - if N % 2 == 1: # if odd number of leaves on the level - solo_leave = self.levels[0][-1] - N -= 1 - - new_level = [] - for l, r in zip(self.levels[0][0:N:2], self.levels[0][1:N:2]): - new_level.append(self.hash_function(l+r).digest()) - if solo_leave is not None: - new_level.append(solo_leave) - self.levels = [new_level, ] + self.levels # prepend new level - - def make_tree(self): - self.is_ready = False - if self.get_leaf_count() > 0: - self.levels = [self.leaves, ] - while len(self.levels[0]) > 1: - self._calculate_next_level() - self.is_ready = True - - def get_merkle_root(self): - if self.is_ready: - if self.levels is not None: - return self._to_hex(self.levels[0][0]) - else: - return None - else: - return None - - def get_proof(self, index): - if self.levels is None: - return None - elif not self.is_ready or index > len(self.leaves)-1 or index < 0: - return None - else: - proof = [] - for x in range(len(self.levels) - 1, 0, -1): - level_len = len(self.levels[x]) - if (index == level_len - 1) and (level_len % 2 == 1): # skip if this is an odd end node - index = int(index / 2.) - continue - is_right_node = index % 2 - sibling_index = index - 1 if is_right_node else index + 1 - sibling_pos = "left" if is_right_node else "right" - sibling_value = self._to_hex(self.levels[x][sibling_index]) - proof.append({sibling_pos: sibling_value}) - index = int(index / 2.) - return proof - - def validate_proof(self, proof, target_hash, merkle_root): - merkle_root = bytearray.fromhex(merkle_root) - target_hash = bytearray.fromhex(target_hash) - if len(proof) == 0: - return target_hash == merkle_root - else: - proof_hash = target_hash - for p in proof: - try: - # the sibling is a left node - sibling = bytearray.fromhex(p['left']) - proof_hash = self.hash_function(sibling + proof_hash).digest() - except: - # the sibling is a right node - sibling = bytearray.fromhex(p['right']) - proof_hash = self.hash_function(proof_hash + sibling).digest() - return proof_hash == merkle_root diff --git a/src/lib/merkletools/setup.py b/src/lib/merkletools/setup.py deleted file mode 100644 index 51f2341b..00000000 --- a/src/lib/merkletools/setup.py +++ /dev/null @@ -1,29 +0,0 @@ -import os - -from setuptools import find_packages -from setuptools import setup - -here = os.path.abspath(os.path.dirname(__file__)) -install_requires = [ - "pysha3==1.0b1" -] - -setup( - name='merkletools', - version='1.0.2', - description='Merkle Tools', - classifiers=[ - "Intended Audience :: Developers", - "Intended Audience :: Science/Research", - "License :: OSI Approved :: MIT License", - "Programming Language :: Python :: 2.7", - ], - url='https://github.com/', - author='Eder Santana', - keywords='merkle tree, blockchain, tierion', - license="MIT", - packages=find_packages(), - include_package_data=False, - zip_safe=False, - install_requires=install_requires -) diff --git a/src/lib/opensslVerify/HashInfo.txt b/src/lib/opensslVerify/HashInfo.txt deleted file mode 100644 index 32739d5592ed74e6de99019e9307995e72a610ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2318 zcmb8w-KyJG5C!0UUC2A+34$fdwj4qr(2L&mrhNj-vLJ9s0=Y?FzU}(<xcG3I28z&@ z_RsvSnOXa<Ki{>d_OUJP)-LUjwr^v5)7Gp#wfF5+`>Flfer|{M`q}d~|GRd|>XLC6 ziKz{dobztca?7}6eaqjJXYHqV?VK+wTfQ{^7Q0`v!otvwS*3Z1-nq*ScZnslLv&A> z?{ogxtsJsOX4k#A=DX&^C97k*=5NSziUdo)w_n<a%pXy(wDi;GF28oK#z-vrqixD} zpA&1Ixv$LGqj{J4C7PYSWaXN3WBwkN#_n5LW9b%&Io_VL4v#gbr^wy%vMl<o|FI<6 zHSaE~W0w-qnE4?m$(j|yBA%mX>=vesaNlBS$!k1D=HVF);~fW{UGl7v-)9^myJmOo ze)8y$7m8C>%X_&Sx_)!WOxZuiBY9U9b5_Mh^ELMQz2$_w?Xx1{Tc2H{3Cf4e#C?ba zi>jwisHgGn8!3A{rFF_E%Megysu9Yi>y&f5yu3MOO{R`{*6zVAzF&Kkknz52U-LZW z<p1e{A?JBPbK#~+A)+hh?mMqV4TI_g_=$DxmcQQx=R~GX_Bkmta8WNXJVsUo@}l;Z z?9Z9O;@mw_y}KUqIpdhsM+Lm>f;qdqlS?@1QdO$IpsymX+0$vP%KIh%$L!BJp(iVA z{!Y&<z3c*&EqAw!Y^WPv>R8+%vz0HA9P_Vga0t(;D(H}T5%Z006~HH%KWC;dN!KbC zQFG%n&;H#7xP%`vr($5Ng5;Gir;br^-If^-A-}~=p#>Kx@r@Q(@ey0-9$NG&Eaebp zv|l2jj-AA({NFO-OZa0xx<tmN9&obi8uRE7@@iX^RF&&yw$(&2p&c4TRXv2E_0ppY zK6gg`bnk{Y+5eXJM>m0Nh(o=|lMLY_ogmL_RM*QO?9@qd1aH~?eh-L7pE!@r3n6jK zlog!@54TTsiwckr42}b!0tbBg-#t)Vsv|4I(1#Trg_Q^^zii`1JXn!nWc7&M)bo#S zg7Qc9@v{6Fu_it$wu7S>@vFX6<!W4haoUhCk1@Q+F@Y+=;<`XL;a2@KWX0|B&kg#( z;AIb}^Xh)`q7(~@sv6VbUVfbJd+J}sVi>uF9zMdMn8C=hTa#~MX8~J^MlHym-gE~n z8LLwZ6>&niax!FJ^*d4bzPyvU<rO)m#0Pp++-`)rMeV|wMd((?;4Yn|#;Okg1|7>R A`v3p{ diff --git a/src/lib/opensslVerify/OpenSSL License.txt b/src/lib/opensslVerify/OpenSSL License.txt deleted file mode 100644 index 3090896c..00000000 --- a/src/lib/opensslVerify/OpenSSL License.txt +++ /dev/null @@ -1,126 +0,0 @@ - - LICENSE ISSUES - ============== - - The OpenSSL toolkit stays under a dual license, i.e. both the conditions of - the OpenSSL License and the original SSLeay license apply to the toolkit. - See below for the actual license texts. Actually both licenses are BSD-style - Open Source licenses. In case of any license issues related to OpenSSL - please contact openssl-core@openssl.org. - - OpenSSL License - --------------- - -/* ==================================================================== - * Copyright (c) 1998-2016 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - - Original SSLeay License - ----------------------- - -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ diff --git a/src/lib/opensslVerify/ReadMe.txt b/src/lib/opensslVerify/ReadMe.txt deleted file mode 100644 index d3acdd9d..00000000 --- a/src/lib/opensslVerify/ReadMe.txt +++ /dev/null @@ -1,59 +0,0 @@ -============================================================================= -OpenSSL v1.0.2l Precompiled Binaries for Win32 ------------------------------------------------------------------------------ - - *** Release Information *** - -Release Date: May 29, 2017 - -Author: Frederik A. Winkelsdorf (opendec.wordpress.com) - for the Indy Project (www.indyproject.org) - -Requirements: Indy 10.5.5+ (SVN Version or Delphi 2009 and newer) - -Dependencies: The libraries have no noteworthy dependencies - -Installation: Copy both DLL files into your application directory - -Supported OS: Windows 2000 up to Windows 10 - ------------------------------------------------------------------------------ - - *** Legal Disclaimer *** - -THIS SOFTWARE IS PROVIDED BY ITS AUTHOR AND THE INDY PROJECT "AS IS" AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -OpenSSL license terms are provided in the file "OpenSSL License.txt". - -PLEASE CHECK IF YOU NEED TO COMPLY WITH EXPORT RESTRICTIONS FOR CRYPTOGRAPHIC -SOFTWARE AND/OR PATENTS. - ------------------------------------------------------------------------------ - - *** Build Information Win32 *** - -Built with: Microsoft Visual C++ 2008 Express Edition - The Netwide Assembler (NASM) v2.11.08 Win32 - Strawberry Perl v5.22.0.1 Win32 Portable - Windows PowerShell - FinalBuilder 7 - -Commands: perl configure VC-WIN32 - ms\do_nasm - adjusted ms\ntdll.mak (replaced "/MD" with "/MT") - adjusted ms\version32.rc (Indy Information inserted) - nmake -f ms\ntdll.mak - nmake -f ms\ntdll.mak test - editbin.exe /rebase:base=0x11000000 libeay32.dll - editbin.exe /rebase:base=0x12000000 ssleay32.dll - -============================================================================= \ No newline at end of file diff --git a/src/lib/opensslVerify/__init__.py b/src/lib/opensslVerify/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/src/lib/opensslVerify/gencert.cmd b/src/lib/opensslVerify/gencert.cmd deleted file mode 100644 index 105ba6a0..00000000 --- a/src/lib/opensslVerify/gencert.cmd +++ /dev/null @@ -1,10 +0,0 @@ -openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -nodes -config openssl.cnf -REM openssl ecparam -name secp521r1 -genkey -param_enc explicit -out key-ecc.pem -config openssl.cnf - -openssl ecparam -name secp256r1 -genkey -out key-ecc.pem -openssl req -new -key key-ecc.pem -x509 -nodes -out cert-ecc.pem -config openssl.cnf - -@echo off -REM openssl ecparam -genkey -name prime256v1 -out key.pem -REM openssl req -new -key key.pem -out csr.pem -REM openssl req -x509 -days 365 -key key.pem -in csr.pem -out certificate.pem \ No newline at end of file diff --git a/src/lib/opensslVerify/libeay32.dll b/src/lib/opensslVerify/libeay32.dll deleted file mode 100644 index b66c6bbdc0e85d25a14ec74ded40d1c8e573f756..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1369088 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�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%0A_S%DukP@Qw{ap8 z{NNLRoGE3x1|vN2NpQ3wWN)Z-nYO@7t`@s7^a+|MX^~obu)q8YgQuZ=!(&KCbEhlK zz}TY;@zWthIZ1hvK8rjOsskvm(uxmWVW1C#=|hDmeVRsLKCb)4D}d@6t2*FYsBvmr zCTI}h=cLAhucSQ8o{aH@SQ&GX31&n5v(Wy)_)`d4s8Fd#eM$+)DyBaZixuyrnXMfG zd>^EAwGCHX<Y;1y=#}sHiCM5{N<9+W4&+&@3<L#~-M_QZ-Azlb&?jXF&NKXM{CrFB z^zqfUV7@{}g7sXUcrFWaO&Wh1(uXFc7sb;N=L!Jkn}XLU`AHe9@eFi*#uSAjQApsE za5J7+eDygI4I%?KQ&SZ<e)ZvW?#^;tGhKJUeT1&Q+bKV3!xcJ}p8X6-d`|_g!B}b% zMv#UHLvZd&g3}rPnf)K?6bfCRs*Dl+ouG|aRl@p~YvK#wm|I4I7wl0>NqEAmio*tG z%27&ydDpb4sU&K8sRrM$;(_oa>eJwbw6l?Z2A#&@h4x|w6gpXA5jRMj05FGm9i^0+ zaUxuc8wkwe^8=Cym?xdk{}`X1OaBEva|oX+qV^Ki^v*H(l=qF#-c3v+;L}fqPH$w4 z*rSj+<Jy1%jAo}`lqCG(^z!{H{OF48uIUoL1?lvf(l>q+<M`zgev>508k0zN9T0p* zB$F%!L6R>%wMaEW2BZ3@oyo(}IJ6kz5I%wb*W@vsMNS><G9I6e4uRrG^ubUzpG<GZ z&|i75?h5i(j+zR8gNwDh(GL3?N7bX&Cu&{JOx#|9_-hD>1O7&6e3SZRS5{q4wA$$2 zTl*?H)7FDiP{z=d;@BKINIkEe-ZOA>=t7)O>ZuzUt&3To_(9!!Xb*v+#Sj!^9b719 zX6BKVJu8IuiGOAWk$hAGLWGs;+v_GmK2a19n?Df4d|p`z@suyV`alX9oBPO$ocVNX z5xJ!e0{8PM_ltp35*m+FIZ02z?Kun3joqJeHzKMamkh+JAh_-YOpH=AYOE$Z-<Tu? zC(w3!`H#m}Auij8x^Z;a4iBLLmE!5|2p04M1m&o8*($}K5mN~F)l4OE0wW^sM+0&^ zzsSobF*<Q#A7r)>Oc*-6q6Sk`($awWs)bz8#B~#r?J*{Ns)W_uhF|PzDCB4j?b6|? zEIwEq6F)B|FtplPYXswBjbooiIuXt+BYqYhwwsK&cmSVq!Ca6m@0e??jqgBaAP6?D zLmpBgUd6#M{vN`?-O-`U@-Be`yw=90$b|E^q#j^*`!O7_<6OZ()=e{w<zDey{Y&Ue zI`BIk476z|g73sXXH6NG6Y8qJ)DRrCJqK{67^ir|0zH}FTxp!*6&3myz_}EjWyLWZ zkM605Wz-NnkHU30&;|Q=b%cguUP#cOOeh!V1h``WlsTAm?4S@#rSjJHdnb`qhv<s_ zkosk|8}betTi7CYzfN=6d~{knA~m`@tSj$8o5wG+1P}0Jj6I?=X&nr*n!Fxp{}y5X z6V->jK@M$;J4&cDHgcZ-B{(i>a`T9K<0$$lKRW6!-FMjXJnF0BjU!YHw8wb*h{sc% z(S4-$b?8qfjLlr^dFY7TV5p8xzrmoIctV&rhbxf$F#*_#@{1Gvfjhs!Ri!jqN@+Hx z6N>T6z3DnFn8Hlk%V597Q5*vhq^RyVMFe_acW4&YMWO3_Vn2A1FF^-;<9^tcU~itz zv0B1qVDBD|zXrzxrj^8n2lvL#z-a^Up4yRSkDEWIx^OFnz!-=9n_-yk!rLbBtzSzJ zE(zqM$nP#ND{X|?NO3<K=pYJc3=JrtK~fB@1Nrh-pIRP<P%&biUJx=j?y)uvLrzSB zXIMAA68?AvY>J1U{vJ4>nK&f`kf@Y*uDam=_g46m75%?!+_Ox9D0U;HSuAE;G7ALH z6UB|+)7lOL-`e;#iXjq)^Y%EPrw9;IfhH*!hCq(TBbuM2bT%v8nN-n%*#O)2S<V3u zenC=P6?`K#55)}Om}l`>&jVvZ`Q!kA97$k1T?5kP2!G}28rt$Idic<1>IZFz3X0Hi zyEA(Uh3BY#(0s^vSYPUF_3cGX^9-4vpN%)_RU^g*U@!KFwg<o0`^?(djY8;?=D2+n zC*2PQFT}FP9zJ5M>xZJF%bI2wuBb#W-hK}EqWhaVOJ)~PXUj;JIrGax3WP`U3mfw1 z8~wbP{ljIfF?Ch@5v{^Tn~Gxs!(i`Q4D&34K7<k4Cuswat36L{anzmV$0#cDR*4~6 zg@;h#S1A=9#R#(-F)M(OPQ;p_^T9*~(jXA;_%`YRigM`yhw1$F9A*pVuXw(m2F`~( zSeWS9eywLi^a?G&O1<`phn5^)P7qFfdXdzJXejC0dLem=0e=hGj!2pqz@HXz<bQ~E zWD3ZI#)b7SsW^}Y&pv~p<}W^oOk<*^vo(>RTK-~d0MRDMAImh={wnD!#I(|$P1dnt zY#qDGc=6T7&_K;Pwuh`^U0G}%g9ypSfEWWI(m#5m5rxON57hpK1xXB7`0|B*gola^ zBdHXTVmS}$C{(_b|1|yY!gzbl$8Rq&A-A{xzuVrT#oS*0;r5dLNG$dLroATW-)yuO z3}(SL$3mASG_p#3%X2Y=b7(-7IK&eTUV?C&yBr&O;5qE{Ll>!{gS6sjZ)$o7;&{N& z)rz!AUm)9$r2Ih{2IXBE*t=OLsT9AwMCv3C*od+z3^7dE24u!yDS$?Rek>B3hGdZ3 zDk7D{E6f02i8*gv1tMSt5p(dC_n}+hmecb}Xy}c>=`5%h((Engvx~-P`jXv;;as4% z#kz70T3e;x4~@pHKn)N=55JLUfT_5r>t>1k{JeDJUziw2KKP!FHV&T?+Aa|r%xJqL z+Fk%9v?oZkOGPU@9SH5EmonPwp|1Xrf7p+sA>8c~i+ahm0qO6O3T9?al1(s494hre zUorV}U~aHsKrM8c-TwqBneIL1c4H_ToBq@X;v*<E>TU#g$q#sx?`iEhAaE@-zn%}N zQu`cP2A3H41C^Za5ql<}h1dYGK=2^om$mWtAejt9KagUw!sAWAdPo^=wbAuNm56q0 zj$CGr6yl0oX}6dNiKp8;bpN@){OD36*WnkpP#uD%j)Os59BJ}H1pZnB3K+1USQ|;} zNEVy{B~gAX$`b-C-$GT8rjEePvVD`deM4mX0KQ+9=m&<ALQ<2Oz34=IfF%#B+b;Q1 zDL#=8kdaJCbqH?^SNO%@a@kxr!a#?2445Ce%#KZG&DDkME7C@y*_=WP|DUdJHuS>W z;Sr%XnXACz!xZ`DZy(@1$G9&ze#Luu#=JzL4^xMBpMyFG%e}(MCUDOrGt5a+Fe069 zd!Rgn)XAp8Nt8a>TsTQfm-{8#i&$RTA|}^{xxZjz&Y9%W>k;|Cr>Za=)Y{d-l;o)p zJMP!Mg+}m^xPT>4fYEPJ>hFhUDBi~oIISz72BMRB>j)Ei76l4tIms_2=7^CkYm_B< zd|+=B=YI$vh*V%suDo<;XTxk%4v9^d{*cOCA{AJ1>joXc(duBz0|d_kf?zI+j|{T{ z0MRB~HX`L_#4EM6E3F4;GbC^(qh7O~P(L+}`pX)9!xO2|hS14M{R8GaG4Woi&Geuo zlDztDBGqa@h{^Q;D28h}=p)el$frDj7AfBXJ~kgGj+gQWChQ>XwUBL3I>%<Sq1w#k z$9Cha`?y&?P|+fC+|2N7o*Y1cy<&_^M-2yLzf_2Z-@)F-6c9`Bh{mV7S~8XO?sf1s zibvG0=bRl`+)QA~5C9fO5!Z7aIEu&(L>f8@IGYf@x(IL5@1&z-Hl8Vo|3iCBe5bd) z_#mXuS~Bv|__AyABpid)bx5s`R$y(PnEQ9)A%h<%Z0n%#zDseXoNa?GugORsEJ+_G z87I-F?8K)@O~y&#PcB{kD=v`NRnhi|EgZ`T^<(J!0R3M9We722C@bop&^4g#^K5{# zZqndQ+HRZ}{wi})_$8Q{GtrtmE`df|JzsrkyV0N>`XPG6Z-}2AnL1Y|ghmf-{eLdx zJ*H+{cnwlul}76>sV`(Vwl2k*wY9!wHd?(eWOjd5XDXl3^=bHr%(^q0SC@{CHMTA@ zSz=vi)sEE-l*@9`gl|IGGmvA&U)6USK7nQiAIQtYFMmHd2rC`wh*!0{zpAvZ{S(NK zLF8DCYIGp2tLq6!Ie|Ow=iRI6cCGwlN&rhTjX95Bs<m<FQcvTarPE<Man^^*(5^{s zA7}T6CK!gG&y>&3$@IHJZNpLOrpYn-H8*8UZpy{20h8T7Sl3j5#2~7Tf(Bj%&oZqw z8ad_pLYC|uImCB-w2Fo}4q0Gx4)?3DvH%IOT)VTrBb)L?a`ZhL9g_T&{j<GL%0Jqp zq3u&rsx<yaJczaZq5n{wHr#masT-<vgM7+*WKnkGNfeCc=}gVR?X9N5ZY(>70U>84 z+(*WlE5tHhE?SJIVSntZc47k;#+MuM3dfnNJmPAyonC43M*X}%0fUUf@mj2^Vwv5t zjoY(xu@~zof#HItOju}Oqjt|X)w<Of%=9);Y{f0(aWw|K7sah8NY}V@qg3XB!uNqm zK1x&6F%*f;G8!R3ZOc3Kg1B)2{WY(8z8ucL5G&?^mC-BBRbH_Lc1n~52T}AO+q}qW z)sYNpMVyF47PE@`#L%Qd)@VG@DQ1KU{07zmqQZ7lQ7%A~;MX9VQynqFHGwwna_4LN zndRp|-{a6@PW80no!FV~FuUJ}w6~FtUgxN<JuNmdlo!3p2q*qryd9kw%8cHW0i=rH z>3cFNBA-DEPcYc?jo>aKwpF{^h~5Q&f<VqtLunCQWZh&g!Iyjxv#4>WJ}lbgumF=! zj3J}7aX<cs52K>;uE8(@=Bb_GmrrW=jzT3{R}!_tM>DK<(6-gYf8bB>#_*1lCQ@qf z-0+bSYjh)JIpV1uuH^q7{4xzpB>APc5R(8f23eXcr(v75By<WbTRTBAe1kEwwKm}H zUU6OFb|Z}(j>cYsD9dAjF`_JwLx*>nX_-l@7(_>O_Oxe)&L<GjBoJo-#0UujYXiF> zG#t02o1nFy#PdSeK>iw}5M3}%wF0A2)GPB6L_F5q&;A#%co^xrk4a{_kb9CXGRYoi z2&EAyDHG7(fJ0n)0S^qCP2w`r9GPl~OvOD2vW&cM!5_##JUBSzLH`6pX;)j|8V}6d zgGh;`Skk!p3X#vx#}j>_Xx0FXMf9U4jueKW>j3MXUnv~&1E$XNl}$Q23WZKp>hUL# zEjGPDl(zGh2o{wdapoBk2FKgsO-CzkCZ5k<q5Oo-QQD3R=mr3)6lZaTh<FdKYexX5 zYUseQym25V;COO)X{iBMO!?qKF`<~Ja_!RDLvS=gJ0h2a=7m=vk6)c)S3W{bbl=F8 zrA$YxpU!78;u;HJGDg{_V-lEjpb)G8rzLzbbgAkkux_nXI`wo##nS;Z2~@s@>I|Ij z59BDl_!>aKkeeQ%WeVKdR`d(^9<{Ed%Ud;sg8dTL3lC8z<G?7kzj2BQt%Gm`7n)R$ zolh=G-8mZ@izR+Y##zMa4m62T7X#0hk`Zi$UEfKF8xZS+uPuyF&`v;^9DMbfacM=i zTH?g}K%^5ZtU_mz+(Bw7RyR0~{Wc$K;5Aj8*GLFy^`q?E@KUECIE;$_jEhsh^#|ms zIG#mE3wf%zi2I_5uA&W|6TtqbJDzvAil&xgjf7d`T2#mVwMNoj5|H-S9wyARbrRl3 zWiaDlNMzIHa9By<vek0<B*=?(j@iG!D8o^h)bZoN00K>@-h+_dXn3ND^c`j78pZGN z`owB<6Rk2c(68Zb9QZYno$rgY(D<Oe!tkXKV<Yi^xd9Y98|VKFj4mjXuZ+>VDKIi{ zBL>9=KL28e%@(VFOfl#ccMg24sx3sPZ!oaYX^<3q&_BR|Zw&Lpxx$34LGr=4(n5FR z`E9ti7i<h7fe7Ihpz}!T`%)lq3dUy{ZUmNurW?!9<_a-;yqsll4=&h#3a#>Bz5G3f zAp^mCXo^n^;)&ga7_2~0DbtaM|IWEd!(*c|MNh#l2{r3wKDlF;<p>k<kM8ehmNvtF z(Ox}=<spEMju-s}7rjFkr3&>4Px^1I8v*yJRyw{wgTah{yqLu=-%UwN7P{~1#V|;Z z;CK+L<M=Ku_|o@h360fJa3+#mNOE!#u0ox~exyjD%l=3f7icMBon#9noy^M~j+G(| z(yRkx0fuoqCm{aA=bRVUPVrYBA6RVQYRfl};1kcYvJ$_83pE|Xk6=ekkER1p0zQp* zg{&^Hk%%iV;f{(EgT`NAwz821J>?PAqY}%TL0U1NaL8hOl0h4<hf1){LwM?QQ9rHn z>~a%H^*FqAIGy&dmIE(rHj)k?SBll`q-^BFMn%qS;M0}3hn?(}2J2nOiOZ~b(;t)E z#VhNS(1j?PPZ`w`2QE<H{wCHMKvm+Zt2vSJ*j_{igvgd)sJ<#XO8A2lqHHs@s+u^0 z+9xh^F_(dZe-4_E4cV#gE!^$?YjjpoQQaAIMMJZ+veLY6tg~R3L#kBTDy$MYZloOO zW|DV~s_4uj4KHHJOO10~&cY+4ff^UW)3OlT2c(Tcxi=VQjQFbX2ZS~rfzqUkVQN&T zIs6qK7Hu>_a!?;N!03k6gb3uU%6zXPT8=v)ddWHnbIXl{lZK7X&uRT}7TRS&FOXUA z#67Xp6plHU3{`d$neL90DSrf$DU3Ch6-d}&1e3(AZa;*Jl#mYsHh2-{b*FN_UP_^J zoq-h?tf#yzCuZ(?kU5ovxGSU0{rb&T_#~fS1Znvqw!P3W(1WHI&?D+AN{|FAejpIJ zIAs$#t-WK387SLv_>V#p*<=?U!->35Kxi_Z6ZgzX;zX^XLE5(A&0<tw!{uyH>wn<E z3Bw(DS*Kt(QE;bD3-Q6}l7e*$c**Dp4)aIL7kaA1`7ny2wQ_?2*$q+$B=#U~B$S+9 zSn9<+vJx;w);yTQ+R+(HM$n8GI^}G4NBIIOtDfY~e5WG3eW6dh4`U?YcI6<6fJwD5 z!{|ogG;Y!N-!VH_I<Q%T|I}=KERO^h@W@T$oh&lPwMWVfS{Qnr4XFLWLU|=Tsn5Iv zDn$u%!?oZB>yEgZHji3i<r8vTX61U634=z~#&z_>yvUTK+X&>4ZFVvxt(!{6UXKA* z>F!u@W$~NXK1Ar2u?uCqJnN=qv1#t!(0P;HowffUE;7+oa|lbC2VrAxUOg*&VUvAa ziMx&NX~Ye8Op$r*e3Y~+OGfr50f8NPLV0dS63R0E3a8${sh1?D&ac);sDb1msqrV! zJzFgyvA_p0IW7XZUX<71lND%soluHiWQRjIcF|WTBY!QR1}Bu0I}V%Bv%38Di95z| zPbYUOI@?T(B2#ccL(SY6=2%W`Z<xx1RlexL0>9{ExV?b2PL<K<S@vU^GX!eU`s(f6 zdbmBSC8Idg&-LEmg#l+8pU8x9Q9*-4{^5WWHUvWqouVv?ms_a=H^$2);{()H^Px#L z+CYbn4RbEc^?_`UAVUHs5@0eLNRw%x^<nsaVRC_DXnkO-x|QZJ8Z{QI@f*J-E^>pN zy6^xeO;B`{N4$E7DTt<=rZnj&1x6|l5>naX#+S7A&f#^vg?1}01`VGbK|sDye*pEr zc_@5qjUiZydnj4Qbt`x3fIQ;dGnqvrW$3}sK;<qyB`~S$QaD|Do$3`ebQ|l1Fo=?* z%cQ{ubw7BC>KR3wH|9!hx(tm{ey5j~YaNNB#$%#=o5q;rEYc3+3U}?CcI7s`RNxnS zv;Irw<<$&C7-UNE9zXTV01SLPZ5Lp#r)wxY&S+!4faM8(DUlRGnDfV1n{cOfHgXK2 zbNfZeqT=pcsg2SXT7-;0H8@1Qajs9~kfOovG*BnaksIe?&7SY>3Z7RbruXO_aGtUj zWu%0F&Ta_YiVir4%iwq+$E~83oH|IZ<OIr}s#>u#v6H{R;SYXjbbhDnc`VUxG<9WS zoff%7o#F(RZsi#rIPTk!b6BLj24!5zb9xFCO4J!SRos$NYoxjcF2ZVd_`12qh;MdJ ziLE3!xw5j-CthbkOtbR^kyDlJfOB91xN`idp)-_Mbf^lC9%_s;1uO<R+_!p-!PCRN z=3suf*A^VAlst&JVz*vYJU*P+r>A_bF*MdEVoME%GvSp&gMMNLCR@})r*tLJ{(vVY zS_|J>ht)3=%_nxC7&;Ali|G-YbtQ>kpZIeUtZ;9Z_4a$f*D=@1Z5cUvk!l!tD(W(* z9^eIK$xL{4>s5&%5-<24BG~@f$mogsY&iLGBkZ6UlRhz+zm>yiH`D3uItc(}-XE4D zFQ##4g_tb!LN=j;LS}Vf&m@}@7u}MnXNX#1_xhpyNLA6=c!W488%v8w^#VA)&Bw)^ zN}R<TfHM7a;NM{F-*xyUF+!q`ykdj>z|*D!^Zv;@2c`pWAChj%NKg1X8B_h8_Hp;d zk3z6iO39z*9|d;{Fl%c51GnP1ESHpj4%~}P#H4qg52XJ7F`QO>;>a1)<q7>ASkrkF zTjQI{So+}xSXz3_Vt+0^xMLnab#@Tm<aGmkwwlq-sk5b2mp7NN0Kbh`<CkE;-?eH2 zP1o_MehcZ{v}0k@RC>QCyFkh#tmM%ltU*D)3E+60c$pVCForOQH2Ow$`aZ4Ew-5M# zKVOH>3KUv|qiFzsLke)vsgLpxrIp8R=3M^V^zwus#%K2LTi}b@9=Ot@(1XYt%k^*1 z%DD!6J328?pLI(XWjM5Zc<Y&5B&o0Hv4x!5#FD`Yf2KwkO-*$E(1Kq+f9S*mOf>`R zClUxlFzZFG^vOk8e1St~xU_n!Yq%&pjvg6KE?)$?U2Syb<Cmk8)@HTDAX&+mj=p&+ zF(beQQ2dlcpaVzr3-A>&Kv0INOfFO9sl+NZAJM^4z<&)D$oGlYlq}xizODv`A<?g_ zlzD}J8kTiy7zReK^lk)JgA!Q9sn7zkf%e-I?MK{p)L)O!00AR{LA}dG$8X^e`Iu`x z9%%K99CQ?)R@68k&FSiF@ZC}~Y{4<I))v5Q?Zhs<4gVaFIB%20A>BaPj3=>i2us57 z5t2shDUId`nbsuJaMa0(6Tjr&IR{J|L<>B8O~z7MJCE`TXBSUHP+;luym1~eA0N<Q z+RhGx&RyB;&*f5ID<^jWtYJ=L<pr6i(lN;~Ua|KJDgis4wb4s+-d!@n0Av`S1VxVL z6FJC41O6+3s^JKj$@_Usg}677P9{#khLD`@no4I;k-R36OyZUe0pp)`t;h3{pOJqg z<Q10c5}OCuKb)~?M}~A{ixRLlA{iCnL|LLOrzet$&gE`d&EoqY68MrpG(UzgM`V4^ z2Qm7u#wC4Cd6USreq{;x`)^n*4?~6__%{fvQZp_SEQOC&*%i3bC-gaT(B0Xm0xh6S zHIMO#FW7gQP+m#*adr(<*SN^EKxRTL)sYEWSq?BGnoxX)=gXNln<-Bz8&If!(YHaq z5@Tu7*d-=K9=^d3m6}PK<7f|AHp*Bu!z3+k{W(OTL6{Vifwnp1{?NmDygy{Fguh4e z4`jTzL!UHEF|i9R^v94hP@&j1g6$pxBFa<v18I8Y^O`ipj)~7-3E$S`E9eU(j&*G- zVH|^R;xc@L!!k~1Y%@P=0*n(M*o^y3h1}>d3l^1*(U};&&}xIrpw3$ib-uv05}E%_ zLT2l8j0_v8;j$BuIUY^Qu^u^~+|f1hN-u_xSLw#zfJxl`0u?Q&oFZPRWBlE{)-{u% z4(L{5KF!L_hfUegwI(hOcH!;;L%*Cnr2y>`chrzFmt@_P^RH_5tIJH|vD{khJ{y18 zQ<}F*alEbYOYC>iBuqy=YcPr|qhSQS_PXz4nSaID%sfPwJS^FZKId62VX2cikbZBb zJs=0o6b_on91TAJ$&$qr+76!D9KForiC*UPsF&4v6#5Kts5E{TYgp(SN3W2h4Wzi0 z;EHT|MaYz0faU}{4@H^i6&`Q25`&vuuZvI)`4hS|P@r0Afu=Uqqdb{Cz<HMNcBhZH zFQ5NZ;A(Ivv5Y_2vF5sLgmFHbyEJ4csxP&PQz0I44>^wc)_9}kPEQ46j94Y_Zs3|5 z=vr6}(*_#xCGa(cKhZA67Cq~$VTG%r3T1vT%fPQ&tC$JK>!CQk_|D*b4TTb-7xM?8 zl!I)*z^h}hF~Bq<Z(h(WUs6lM0W{m8(QG(QC|3XtE)Ug@F;P$!Wm4#-bCC208#xf; z5A#tAz|-Qx<lb>}HrXiEHaOchcH%QLjl<`6@37vs8Shd1OZbc6IJo+CRg^w(e0(Ch z`q%K^a-Pk>x58K08}+SE0NkY>YWp&CwPoNLZ}faH?9KX5>YHY{27&D=qEnq<J={%V z3>YDH&LUBKPKEe5_+4!EEZ2GJD=qba^;R#6tbXOq&wD!0FpZv)yS2$Q8nqQ=;v{co zE86GoUEIK&jL8i9dalA9nSv%Ztu1zL%Su`xkObpS!KhA?Unl6FOLZ1;#yd&xAS@I8 z;(XvsU2{ApaT-G}gGo-N1LQMnU^Ya_DlT>8=Ds@zozyZ013L-F7A5WdzO?tww0F}( zspZF|zJp*Ub!tsV1Cf~iQ$02KW`^}+!yLjaId~fIA$vx4(1blrzM9+~Fk^kQj)WHE z;|ew@V}IysDrrjQd!64-K;QTfJeIzo?n#FUrlT+F$|0CcU6lE2FPBMXeBK0i(57;U z`{>QMkqusMlM^DL*?n~J`RZkux}@v@-#S_TkPBYtci+X}YCNX!D7rcGOTB#Pl_aw- z)AQe#xBvX|e^K5#zW>kU?Y<+&kZ)JZ!c_igS)ca)cG|o7;S~NO-eQ@J6>iCI;SM^p z2AqP){^l>JGD|woq|x)j<IG>A->8!zGkNCfe?U^wqRm_%>tkKcT>mluwg2_s=f68- znPmQ>`v2Yea@?o?S^pVO?wI+KXXyWo|DXKZzvlmz390?vvMB9+W7_-f^mhzRu`UP8 z!_6*10!a^d78;5BF@KgYz=V5E!IOOA`jk(Zq0>njSmWA{lHjWU`HV=QIqEfR+l{ZZ z!lP77GA2kl6*<6!H0R(T_Y80kbYMH%fIMOgI|e!=Q)<O^NhW`3DmSZTa9>(V8kS?R z2O`4;E_Lu8FDY2BVG^=;<!bXIp4GA%wF=W-Gi}%4rykf;crssu-nI89l6xH*_jY0f zm21~yV4r}0u1L&JQg}tLaC)OnREbxwL|4IH;#tS3Nz-Hn47!&wv;}k3nVJX;w>v9! zR9VSF5H~1eVF@9bw}~QXJ<d1YRHLq{N4-#)r9RfiC*vGG+6Kz6U_<nY^|6^yhN25x zyxt-mA>8WpL|0K;@IwUi_;l51{BL=9l;9&&BWJp5^n#`ujf5z%BM!2cL9LUt*FcfJ z_K)8Xt2lqWzIJ7T-cT9K!9p{ktU~EZqn3{68$YEATz$=8&w=J=lYUSR{Q!_ihfRY- zXsQxQI^A`y)coIZp8-i)#oz>`#Agd&d#4E+dxqe@sQp#YiVgsit0Zx)b=95tps9Gt z>KpUkTl-MTDb+XoKs-Cn*oyUH&+cKZ6|VZGQr8f5QcW0LoW^Xd&y~8)qt)^SUh(xc z(C12BW7Sult4D2bedi)|PV~Hah8^l09AI2c_R(&fhqB(b3`$yDZYO!eY5NJs*PjuW zR;ut$QsKEjj^7uocU=Q)PS6{h(Hmz02<g+@6RG1!>Tah=7|DInV)^fs`L3lT?LC<G z{z%&UhiUJ&M^fRHroBIw_P#Imo#s!3*r_40k8`~pJS;(dgV^eYs9Q@t;e|J#U;K&Q zx6rV_vhP_ZzJK#j`fj#dPaYrM;siXnS|a`y-m$a;JYTrO<`)%sr`afVhELZg2~UeU zWj54<o7U)RWft$e`-Ig)AWY#Evu(AO=uBJ(`NNg^7e_5teXx9Y$uD{}ElX4B(J}@N z6Biki?Po>I_$BK5&}!+l2o^xL@DYdgHu8#tKc9VG^s;U;X%)fjv7Dx+ZDVk{-u@^K zDot@B3e{i-9s^u1;xScW0?EfQkguhQ7-vr$(JOkrQE-w^d<f4Ls5#+-W~zzCX!QE- zs&Fe@I{o5Bl%U~-`_O0g@0AuC#AC%*z9D@ad<MiHzdlN*ihSbtctH75%Iunrne0w{ z2yZK`@&QsvFH_)E-@qA-Yw-@WO38!u<ZBS1i_WK((xf-LLYOnjwl@yqAuHV84RZh% z$TSJUW+pa|;Q(%<0yqr(Bt2srDS+PHh-cL9qCEHD8IqH(na&0L2)~+D@+}$1rlM)t zl4cN6(!Xa@EGy~eO=*yD`PKK;??CRs(J3}aVU)Im-UGO-qaB;{WFETj48H%^;elbt zg8=-<MLs@sKEf5SBLdY}*s;c1go$vS=fqGKXRl`K3YI5>=g&hI>yZDPMOZo7)&AsB zOWw_qfodh3eBp8>P&`I#OOzhh4N7x&`+brAvbTLzkxG*oh+M#6I^9u1C%A#{JPoQQ zkdbO@I1HXExp{0)TMq6KhQUG_{KG4-Eiy=bgBt1=e}gp+yiG1MAiYOaV#h_k(^^Xx z?})z#R!h9nd~4=44GkLgmKs_M`!ZXh`edj_005T0<s%d`7+L9k4CXTqutz5*U_P@w zLRD}~w03nU+z{p77PiE)!o3-x(HNT!L+C7o^XSb$Fpv2is~mvic`QR-kUR|`fL_kX zi>##+uhs3?`K4@IwQSBuv}~6*e8Sn*$!zhK$Oqt$FbXwlGo>OV<e5+&%s!e-h%98j zf$a!?ynHKwLpnLMhnHbfy_vA#o$cVMS^=9h`oI%t%zM;&skyZule!5Z2ji(J7@;og z_rOaD5|eFaj>Qx3EmfnViwx{t=D2=xH(^qhxt%u5$ZDpqJw8d--ZXpM)Ef0pMn3BC zPy_6wlAxA+YP5q~_Ws^Q2<Eo{Zu0I(dU>{<NEi+c1`{ryU_A9H!EmO+;P%DqKVkVi z#v!e|<h4Un<{F%^72HyTXrIg#>XmHnl`V++xmnI|htuyPR7QTzsOUnOl-PXSI1d-K z#bs4$SKGn-u53*|)}etcphR>E>|j%vIHOqMtB0W5eSo1gkSBqSEQT-7gPnV{x|V3l z(WFo~pNgWjE=D41*^A5uFG~MbmOjQ)OR_<WCv|+aG^V|`q`iNU_U`;c%J^)VmG<70 z_P#moy*usQ^~Y3rv(w(!q`kMMy?>kbUH~bOBtKf_roA_(y>Cl<xBpLS`KhVzpm=<J zU$Z)CeSgvpnyHVszK@^LqV6(#VU4Qr3RgR2x1};Kx`_D~HQZ!t_>^|yvF@q~A0>%( zG$VAelvu^8XEyTLGT+R6)1Ub!`g{rICW=aAp(6!%w{_g!3ub6;$jE~X>%KQ5uWRx# zMMj_q3dpP_$VwI9^?Q`$B7*_&XcnLWM&}yH!8<5vel-N{=?XaoEBl^>z@>AV%0u`A zf%^a-_Je0-d%RuT9xO^o+C@EN2W5#yq;L?o?pj7@XmU(%KkcyC+?Sgc561wG7hxC} zY-cZ^B64{}b1<3riDIk+B64sDb3(|Xk3}reLh7{HnL8^pclt7S!WZW3+m6H(YH{>_ z*4`?`f3qZTbgWu~T~2B%fD9VHh1!c{;+CcO3NzYpbzLo<Dlju&_k|?hD#}7K48EGH zi01UnZHL#~7W!a-i^?i0=83MQR2*kM8-=^<5}3M*fLFj>`PUX!oB&6M*|7?7Z}~qB zB8}j<eFrC-p-S2zq7W;Cc93j1+FoXyHwWi$u-%AqU>2vrhd9bpX49<csTAim9Ekx> zph3;=SY-hGMa^K3Gt?_VAyB7M6vp!q|HwRsbs2ep61A)(big&yb=0;B9O8eY*PGdn z_;2+(K{VizP2G6HBEu!~M%I0cceTtAnc`Gum?Br=T3K_%U!ay*B2z{sRv6Tm)JEv? zq|sCJ_JsPQL;It7aJp?re^zPO%I>@xRjV?v{wfRV;I8#yqi3xRZ(ecrAwtawYUCSQ zx+58Rh_UNb!OyEoke=u^h}aR&S<$RQ1_rTOf#vA;x!f&@UeUL#G#SJE4ep~A$TC~Q zXY4%#D{2;<BlOGh>PZ@WzRWidWi6lspVaT3;0ST~)%w_t@z`ZPveon0_28%LCNX6I z_Zx64QSf2r3E}<Ws^h@xT#<lxy7<hZ!!uN5<VnH7m6NzY4f7*wi3#OU|2i{es1pld zs6Tx_>sHA_o!C?Q_mRFs0RByVhj|K9o9#IIPU&mZi+$-k+h0#gWjyphvVZ<veTOjl zH}xGxzE6GUpPvwdC(?Ih<7v03FMX$NFEesnv~m-<eWdUF>++{F4nIQQAy6mQcP{#v zQPE}W3H2Qf+6nX>v5%o0tM718ik^8QediCdbRYVTwtq@NfaEqR^X1Oq7%vux7A#te z2)L8XT9`_tE>5wi?m~1TB*3T58S!~E0jxF=MzpH5z=T!A+AR5+5d@mi3P=~s#W6g3 zj+A?J?KJ5Wk2d&m+eu3;Gz-Y0CsP!Rr1bqV-SK#`LXwm|9SJC3-&gw6GF|kQp8o`w z_uwa?FeSlnl<6&frGFvQolo{reijmdUsGS{n`L@;U+J!=xcqGV92dVeGQG90^lxQ) z!JqmlKNktWueq=EZ8E*Luk=xW=JGZ8IWB&8$@Cq4rGGEei=OVI`~oBZzkB*h-zC!x zf9a$A7$l&)(pUO@GQBe;U0Z8o+QrRYY?hK%X})(D_j$p!Roz573+Bf#VtyT>+lc=A zyIx4QcvM?m_R=p#f?1x-rMW!Z>#*M5jtK>a^esg>dGH6_e_jr>3>sJTpPXmu39)m% z7ODg`E7ri~M^@FNUR=*Ze_0hvXh?G1jN^rK=@2J^(C|@8^5$~8?<e)E4(m7#ZFdLx zx_@(+aaNj5+VoZ__8p>6mI!Brp7GrL2$xL;9=$9U?zP_X02wzzzk$feuY`HA$S>Z? zkosHXe!?<d1Zr;76AOQ5wcf74=u5?{jn(wDh4LA!YrJ?N;epj;5%fS+gA<2<7Lnx% z%Rg!dNkZ8Y(w?ie%#sjLXW|v(h8gRc9@t!DvBFovht1YCf5!*tIfD~WDgnhIp|HK? zX|0-dM6AMByqRwyUdJso*VF#@I*qPdSTnUY-VJz~o@;GvqS{#3Ro7B!tZwBlgcytI z0;F<*xNsxQm6_Z->dad99ffU~Omr_10@n<#g8ecX5mGs4<@K^N$Li^}*wp$qW0S=O z|F722S4k?fPPDL&;J0LDl8U&s@iTg%4p_MtPpHYEDdFfvPhn>!w;2-LOtl}kAvf|| z<2X)@&kg|b$HTf|U0E-I=c~4ezlfri_{U%w6Y-B*U1DjPG9j{-7#NZN+=%rzp$$<c z+TfsVy=@v{C(O)P7I;NlZyU>BY-(rQ=Vlaa^1GpY+E5Spd{vN`0f?(t(cz7O?(No< z<OUzPml7~;#`B;F4VoWrb5=)G>JXmAs4Ov(@{P{;*gyGJGJcqHk?-LPaA!-VKk?c> zVADiD#PwhHF`Yv(htC|9ljp}U{sn$x__quHCY_s;_YVGv(K&fb@b3ep8~Vxrj2ZGb z)0CCnuU}3-bCSS7lXyKR*8o`5LH(!ooK5dqLhl~XK%1z5u-_LP$}2ox!QediOswxn z;q4l%dS}xjnb*kwFyb@myFR%K;1^G_LZvPH01`*xvFy8_Gz2XB?q_1`!Lm=T->?|? z#Yd#5Sdtb4iRFWiUt-zE<5e32l@;Ow6vnbInXf9n;=ZFy)da|6Wm*z-U|%)^JK;N! zC3mxEua!l%Q~dxc4oOS(YqIa-jKs<|WDOsMoxcSS>J0Ot_lNKFhd(|NFo)Y5@b_4> z3mix8sdaUv!KkZ=F{5Qgw4vzrG`vLX)hdE2K9vneKg=T05pFkQOC|iJWBg=u@H&!R zYCSET!H8Da`75hLXg^WP-h~q_c>Axv(i@#)7#y%=9>pP-GucRm9SsM$<PwCAdZIi1 z*HKS+Kq}G@#j185$G`$(IMs&KTC8jV)N9$mN-5Ry1dy}`Y!y}F1;NUg6V-kM>-y2p ziP3RnJ=lazgw}j^h3~3QqA*HgKWT9dZ5*=P2wpvY3*l3HGGPNO9Bli`7mG>uZ9}+} zcFj_7J~G(p*gg&()6ldbl;#L5Vi7u4+b0tDGsls4YGVU3A#8XI#eZp5*HOcQZkf;h z9+e6Xt?+xXO?1xRn3TZTEA#W$QtlBnHt3dLk5}|7*$c=tB&p~!7GgxFB64P?`a`3z zpA8Iv{hFWAd=%bVR3Qx(UhybX8Au1ulu(ce;_AZv>d&-6K>$cPMc8n{x&z`j%Ed0} zyQWR7kBr05arLEzGJSnt>2J$)^E1iiL1%fDMoA53xX@)pchw7bNj5+13=VMb2xelH z8u=A{P@BjK0WZq2S)_5ecZBvwZ=<KkZImFFR!C<5ua0^uLjQHtQ!4$Jy7-d%jfHJ8 z33~->6%Zs=-ChA}OgBnumJ~cCB$qGvGd9xTR7%`N(=|=E(Xa?}BrG$hU#_Q+bpR!3 zR+J{0W9%^xF_iCtHAA^pug1^vu%c4zhtHHW1(8VXawHJ=Af7_T2CW)9TYjQziB?`| z_aU>-{hXJoAt>N~m$dr;GqB4DnLo0YO+T0ooj6)UmLHl83vl5BTYj`zNgIQJLH>GG z(MO5+eswun-j=F&5(sSQTVPTM5WVd_=rLE3Fv1rv_MDvIqqfCU)rbLHh#t(>whOS4 z=BwnJGaZS|3i6V`SISZ)uKtSn7cv16XXDN&c%oyc{3l5|r10|uFe3EpMJfE4#P1tr z`tFo;onP5v6h3UX-cDZp)=iP6<47Hj&czSHJF)1I11Z9L){!j;T5O0;F+%sC-7cC2 zI@sQ2!Bcg63tO&e+lIZJqn@MT@3L<h7~#zNI-SQPQP0uSZp1$172k&sTW%QuQMc3_ zw7^j!KR8mJ0tcG;?$?73D7URe9`G)z#Q$-h)*+s+BKMQ2ExzWK5Y~@pRD<`B_(exL z5=OYc9AqIuf)C0h+DFjz_USFd*5IlM_>STZ_42q{Q%(gUln`$R%gyF7V{`IGgI)@L zKgGXa;or^pSA}neZ26xtL;hx(va_?~cxCsrB>Un)wlC6nh4~crMJbz;N9noRAY}9L z<>i=ClI@K&!V>nzu0mA~GFCd4!>d!(uEAyFBr71K8QajF3h@GLG6@}`gH4hkGZZcI z5Fa6XmCHk=gI|(Z*psF&X!@A$KPBUrUi5MD{xco1a-ly8*biU~naaZ~qbY(ZUlkI) zpU?@Nswpp_!PWXkaz3_v1D{cyPTrLa^$T;~8G;|;KB-V0jL&75txA$G^?RUl!jgPG z+nX@YSXUxmr-4rLucEHT{|%VbiN$FDTL;bzZoo(`3E|=%>&l0a%~w?^u4XV6y5>4w zX!oZQBh)?^3IYzAYS3QP62clZU=}J$vg-OPByM-db%jYNNz7_XAji9}YfFG<a5hAV z6(<FO$7G)8pltA4quw}7ttrHssA0g(rM9Lv_f##p1H%J+9ZSIf1gZ+FOcFj%-8MQW zR#JS>{SxA2@@OYtBO>ks-f<);d$zicI15d%L!uQ?2A5aZKVg*~UDOZ$PO(^s1Oo;> z#ugo<eCZ@sebDw%^CORw<`sFIFpWG;J%mWY?X=f_)88eTlO$l0e6zH${42rFap&`( zOn;=W^bcja4ZBE*@@R%;|CfFQb;q&)PYl<Y4Su*5%;ZfA9+mc<?_ynuN1D+02jL6N zLwiC4A`j5KrA^3ihbSkfmP!+RSt7hs7GKlE?bl>Bw7~?z4&R!@%n2=kR~V+7e&HkL z#j|n!V-^eyi?0L`5wbgELrQk^GBW}uL@(>bU%U_H1xF>^0;S~;{vEXWGgxgVgcO=! zk%-0BODrF063T>ZLt&ldEu|^s+10W%?ftRTceZ!xh>Ov1;83%Dfeeor@jFsiaaGSB z*qfa==R<X%S6uO1=-ES%f?O5icY3ZynJa;ah7i=|_XhwdoIF$<l7IC+4ki>Z!vBd& zkXkA2Mg;uJ-^76%D@2J7{H!<%@8GZyhQO5Z1A~|O6=OZL3$Y9^8B;?%+v7Ohgm{t! zZ6=O6ne?n*>RI2po62Bu8Yi5FFZjts%{Ord#I&b(oNxX1F4o@LaV6iQzlQ&jQT(2M zV&Y!>0Fnq_2`S8%*<^&Q^0FFqnL)UL#DSj2^h36CJ+^&M77aiPu>ys~R!T0-$qQuA zLJT6-A|AezfKtRVnSb5C$Uo#)dVWA;{g$rP!o70SOcg=I$iQt+IKdDw(77L+(WOmN z+@>JU0VUsdr`I>~xb+$1_+_Wz*Ym;g+LOq?B%Ysj-{bo$p7^}OTYqM?t1oZS<DPeT zK$c1D7UFyqZ4>^7=N;++?tkgL!%KfU^1pY!%nZE$lk;VrKnj{}GWmA3^rp&>mQl|o zi{o7_HEHj6rM}a6g1(Mv1=}>Dj(xI{kJPm6NX?&c4^yYqV0D{c00n7E4Ln*S?0iiT zrJEZu&=4_AT~QOcy@{S@A{>}Ga>p7x>pGw|zE8k^N&e#HQ~~^!30Or`dU?~9k36ym z%g)L$O%}SpI3LxEAApPdivtRL9HV^sukLZqC-KN{`7#M1g}A`+1o)LC{CVlnBo27s z)Ks|56h9MJat|TZ=aHbD&=7|u9k`;Rgh@YHEFBX`u;Y!FGD1=w8Km<;V~%q^DBNoD z&=H~NeaAl{u_Nh-kk&Ku=a};YW#E|Od7J6y2cX8lRHatccyU8pMJ9aC#ExI39v<40 zSf??4`#5ispl{M4O=^e&E}(OoPyQ~MzQ-IAko47#8sLm36{V8_%Ve?R)3@dORDN$M zdOmeLEl7L6C+&S#+Ph(MN_iS++MZ^OiXrC{A6%OO?cC&nGdE!<0-zRV1zuKTT?i|$ zL5zF{=kZN0%ou?TuUOh5O>4+Cu^!2xoR*96b5(n|w*=2i`I+1u3*hbu_r~@3pl+3J z>NMWNy%&eFTk7!@C6?l`gdQiZ$6ve@(2KGWf0Z%7J+Lrv1N;RV>v%?kB_@SEG=JGu zZzr!;?8J|*s^Wvx&;makiEZw^*2YHw(kF&r45ur^r$_iO8^VW8M-|GS^~%KFcUkSF z%LE*x2|J)FkKblAP_%iQ`>SMSot$r*G0$OyaWvTq;e<Y}UGfrq4;MlW3y@E-gQ$l8 z;e771)CRI1K8vsiflQwm{R~QU{3iTKPUhCO-c0c7W1Be-rfpaJ!ku%pTBzkL4-g+} zPjI9r3SSemVM(Njj3wg{yd(@KZ+I9j*lGl3h_RA(0VwEi4hutYVpwDZM}&n@+N$sw z8eJV7e=x!P70Hl>Dv+Bxj0AKk>|%Kl&EbqW$R{4Sh8@_*J1DaiB#juQ6+5YqP9VQd zJik}&Paa&yNYvxb@2AN!$s_A{^6JN)XQcCC|4Z|G)%&R;>HpXB<5O{D>pz*_ZG0Fk zZGNAdDnDA9)84nGz4xZR6TdOHfVUU@B+1|L*W0LnkMVbGDS9DQUNQSwpaq)_7_zZ& zpt}SnQ?yIG(?UX~Yx={N_=1@}iT_&a)8HkQud$|=pJ_X$d}rU~*PokSeyt2{nOwhf z%kkQy;rn>eG4(AvZhmfmH^Lcf?dA6p#PUt1M>D;r(4$TsHAu#%H5Gn~?ZxBa$MDyW zi^JphBDy>viGGXdCYF@?9!HKe`q!kwZ+SBHJ-I#3@mMt^!QVH5R}m0D6ak#{!;jn~ zZ&Ui$(Aqctpl*vNHN9nh>U(nii@r>4-;>?x?Hi3RY4vxf!Aruw)dbx%l|EU-^eOn4 zw58&oRK6Mf)zX}rF6ZNQuV%@scBFX2oxNC3yN?F*tHdjRz+`|UE>+^|zi8797St5W z9t)iU_ffjeh=n`8gfGnwo)z#ZAEFN20)HLm*?iusN7Ss7-tQ&kZDBfdL8YhIu>p2& z8KRHu4$O&Ok-??Bq6;%7U5ZTBj-i2S32PF=>RiHec2^mCkL-s|iWe#ZxY?Alx7M8t z>-lCzl46IPhPkJ}OCh3h!_I~LnWEHEoN+QP;-FD57ctGQFme~n!TG1%sTi_ifNE$J zt;rmm7=4BBS0Zyoo}7niCVrQ1d$nV=-{JviQNAl#f0zy+H2|W}<TaNx(1j$z6j~}S zfaIZD=;_+R^Za7oqgeFw^bW<@!%)cxlQ1eyC;R7{#I+uBE~%w({%@g5Y^c}`*2W!p zggaP1jv)Q%38EG#QMVQ6lg?+Q3|Qmni-H%Bs=-GYXqw(YN2r{vSNO#Te`YEp>uMqu z0Ae4yZVD>119L~=M}=RimSQi?Tg}lFy=>Izg3+iMrhoKA#55W(3#qe9!rM)V^Il5} z``Vp^FZv#~JP?B#vf&Nc5PT#nllE2BzT$N*QegOF{t`E9-%}K}WBTU^D9Ei!?w@Sg zChDJsXpeaK<>dZR03--o^kW>(2}5ABs~))sX;sE<A|q$<9xuM+V{ACYc3jdzjfUlN z&O=&#*2YIs2!yngqBnuO@(L=%V-LoYDGnXeSq$9>HEk?LLQlEHB(D~#5_C;wC2emP zh@oI2?PBmC6nv$E=nCJGy2}v&urgrOLZ0J%_7#)@4yh}`n6Q)MpB+_9kVaQ1<54aO zzK1FX<UvwL#P~e1zfXL8IfIS&h=Lxmc2bWl#Nndo%u#&a2C*@N1IL#cg2j`upbLLz zs{JBxtMV<4@EZfyV}xIPGxH0;NV7MA+3~srqn5kCz2_?Rs8E(sxJ>qO%G{-wsp1Rm zxGm(-h~vxZKoD~(9b;D4xS9bAZI+xNs<l!&Q?x8Vve>>OxqnI7T*!M3wJhJ3vLX&j zJBs%p!1Un<xHI$7nQIfh#UWO}0YpkTXTl$$Lj0BQ=Ap5_7*uw6#7rD8h<9Z0R!Exg zD={&9rtCg!8w98M#9^=AeG|}q7~Qh}AbVb%rgz^N=s6o2R}bu|<rEld47@k7zK}hr z?uNe4*-3oLAyflOSHDJ-UZ8at;$_AAYfPfQ0*YlT_t!%7*Xo<}{?f)Aff=fSQOgU^ zVdn&HlqG(S)l#;Y9WNn!m<oJ~8H4IoXV}%d7;W}GW!&K(I|NiKp<CwBrY5v0(P96i z71TNm9ZUvSyE=);IzTNMgC7os6Wd3Nvt!bW{ttKWA0K6L?T=@ZC0Sr$7l{xcg;iIL zCSWwEgbkPogs2oZ3E7}Ppe?nJD^-MDK@CZ86J>c=u-3M={;1X;RjbzCDn)HIAwU38 z5v#=?^;i8daj#0XLI7dE@AsK!Hyc2`_w%}cebLR%KF`dVGiT16IdkUBnWNw1+Txy& zglBdjCV$(m#zE2Qyv|9tfz3mo9I?V9yi{G~ePIzLd2d4xIDDDbQbsTvVwP7S_W<nq zI;gxP-rayzk`Bs(SebG-z?T!U?r1@be`G#Imr2HE#~>VmV9`2Y`v5CoJ1oQkC}}A+ z{t9XtUUrv9z4KC!K1PE(K}H!2BB9?@U~<h?9al+5qJa|hCyJXWu!YcjA4Rk(KkDxr zozaTl6q%fjD_X~ZJ{n$g@LIsTIth<)d2u4r7RP;+2zkHBo@T`s-8(Wl6dGfcB+DBs zfmv`lK#V&A#Nj$j?|nc>`IVEUZ%#C-QXnK2Do=?3in`Kjn1zS~A!w6Oq&#Ai_F!vx z(rpl#KxAGDN(%uj1Bm;N05R=1M<QbJpQZn763x&N;AqD&=W{OPYL{As-7Mx!w~!!^ zzx2}_c#i~d#qOUNAo#+}kaEsyb@+m#%Ml97y>fT5T$=W5#e3B3GFr#e9S#;`7;d?T z7~#-#6k(8pJ7v%qa4i{Hi3z^r8IT2g9@n<QLB^O1mNClkr(SJ1%!A3EBP^4;!K5E9 z$Rm5Az9M}6kL#<p>gzA{8NKyY{g3OL@xQ6>y{C2ievR!yzY*%KZ}*{ZZeQ>C9*#iC zsLsu?jF@=AEKNu~+){lY^boR|IlgRMx3NMG3Esty_|J>9tdw}^LbP#aIi<#_5`Ld7 z@jc@PbcZhV6Df3BdZFp0G=v8W4XBrEM<8I&!nV~d61vlYh`8Y_jD91U1Y`UfDS`CP z6-QL>YK16HnB`OH6>u4n0Rc&;uRi>|rNi>ab0g5PxgWP*IelM-{G|=Kq0`a%2oUTx z%V*)Mzivmg0a1|M_>KECPrpkTHQM0zU1<;ZFKuw@E0<Fl`uAoy2-jUsgcvn$oFto% zyDFf2#W`I&>uS{Jl`<U69^aQ?dgHKS427+CN)5h);ggNeQ?0&(sk_+pZ1qu4H=HU3 zZvOfb6h!H06R#rSJsk*lJl_iV+$UOv_U{%Mfg52;wy96GQ(THX^#4xN=Mfn3`Mx=% zEavS~nNh=dNasKY9*2i+UJZp)h`8FL!R+WHXIP|{uVnd>U?P|e1Qw+VpFoJch0TAX z77*k15A~I~TX3Qqu+qziP`>Cp%li*uu=9G1KIP8|CJYK$far!Bt`=tBfWm|0Ii6A= z(wn2>{Q*<9Cm+D>_%2{?-g-=Yt~72+O6lMLoc-s8J&$jsaTLmFGmOO?C%D>T7QO~) zrtGSedye&0HEzUPxLw$$t5Vh^W+kJ^4>pSP9JuJPtytO!d*^n-?47aLV*$imoq!oH z_<f@VQUswQZ_{kn3>SDHK-!t*)H->!q!Zh*C?%&sA3KMQ;kqvQPvAvfOe6u`rUCv+ z1045V09PCdaDyLLVD^IFp-gNHm+bOwl)D%y&7u{aXtgt1Z5=R8B4T}8{GuHLOl;Vw zH?V;Y3UpO^fK!HbF_T40SxBX|#<KsyCjpKHi1|)vZu3g|`qYT-9=Zr9;JOhk)tCGi zxx~ra3e29+C|uq#oW8WrBsayIA%$ca*BQj+EFb*oFoHXehHis0bnC=HP#vGUZv(`h z3+GlWf0v*tTx{7C6f|-*8jwp^LWBkpgU2-nFp2ZFqmzNb3B;f@i9z@{)*M95VE2Z3 z@GhIv8EL|G-$VGkMlf3Q7r_WBbk}@@jc1lV2njwU113pN?4m^db70$ymHU5=zsm~X z7dLCZ_{ELKm!L7-baSU$WnlxK#(G><1U1iEYncJBzZ$;Qmpy^03@_z&BO(R-2b<zA zAGMJ>b2>|4xR(p5uzHVXLe%M>lJ#GN7p?T@M{G>n;{Zr6Dy&ODq3Rlt$A(I1wtr|n zo0xBb!vYFnO#JFcKTqN3S{ugHF(0hKw($}y)M;Lb5Q!=#w1mpyYP*(s_%bo00ddCB z-cEe)!KV$Md+>Q2pUd#c$VvUPrBeULiOdwdEW4HLmwI$`B0Jfspd2p!_8_D<Mz*io zv4YOGNHZRbot`cO#qk2tr&*kAnLnK)HZ1QuK7-d7JE@7x9e`!#d7Gf0BV@ZXeYm=* zgZrIu=IJWWBZ0fhbNLnZ<6=2aSA`HA!#P@gjN_L{d7D0-H;Y93AC6}^kD<0a1$&-c z#cVHK<joJ~z<Cth$ITbSja}^VedTJs9m;d5;dQm%f<(~eS7$zUII#iVs?>Z-D-oR^ zlWnXr-ya=^={9<$L%nN?WWhBEn``S`Yq=}#tF*5eZsc}?B9G#y&_=0eWYf!>T-Zb( zuOi>UCIm-;r%cvMEBC+M55DWe4Mid{tgtTfq*Vl$Z^3GZ?Xt5P!Hq7gN^O8qX}2{Z z4CFhYG%gx-L!Buq%?=L~#KeuP$oEg|%H_M(-Vgjsuf*MmcOb#Ap%^1iXJF5<aA%EK z?Txh-Uz&}RK!~UFs2-6{-=XFrki~0OA+}C6z<bpMypsvj)m8^E(Wbo8D{<As1xS}9 zY&a#<;3&N^*VW3Kxxh-eUb{xwb(x3gv=+jZ50370kdka3BucjVUXMM?y3NnAd=!hH zYc1o#te%!Jt!zNJvJ}?{^}~f@@rmXOg)ddti^U-}vk^Uj(R+VPW-4%Lkv_wHa-=C2 zYajNHs*->^xVF_igqGx%`#NFU$Zfnoetv8%tMu&;on*dN_>b5fL-~`teND$D@59cW zuqxMvB8^`OtgoZi>>+b+$+l9M{lb^>AW?W$5?c6F#1a8b!-Fjm(uHgP@UP@kFk6vp z-SyB}x<{eazC)pS;peFD)1&I!-1rrU6yFh@=_vU$K1c&x(GPvs{4~2m^n*W0KL|}@ zm5m|8JQ(@->-yMZYz1x_T`agdak8E5Z5rM3*K;qyn@Qo^DkNt!$rs^%Rs6z*48sfG zsf{_$fZxF8*JZ)yAxAYhx{wuC&i1CvXg07JQ5*XutEj=Uj`S^9Bg6;3zReg4jg!pD zX>2Y0T1j?Y@I2TRPRj(^WcN)D_Y)2+d<PE;$h6&Wfih&&=s5CCjXF#*4%{$b&!6Ml z9Cq>tW>E}PD1-8y6lB)7Uax-iWKzEmm|;(S&{gtg9V*CEKYbWu7?eM143FmJAPo-X zyh-|ZWs}_+h<9`BUWX!jAQo+qvAc3IUnBJVa=yMk^?HzgZ4UO$Obz_T)Z5Sh(mU{d z2b)iYy*Qusj>g?3PLRw4YxTN6l2h8L5MUD^L6fqHQU84}2K_KnaXXq|?gkCPr9bt( z0~{6;ht^arQC*9z!EUtzS*n=j##ENeEJTL+0x2{_|D^0zRr+n=L0*A;J*K&mH@mCx z1>(b|7yKi+&a$!rMWC&@^EvW-GbI^DLoiXT+*lbvP6&UxT8E)_NE}R^YaeF^^kf0A z@x<$wDZE}>F9doH5;vo;$zch`fTKRvdX~l1qqb4z;cU3WVkH1_t?2>?M37(}oDpxV zQ48DHkIqT#rf7DuqwY`Dv{2UsS=}q4A4t8e)NieE+s!WFMb>MA$gv?%S68?1bKW#P zCTnA?th^pl2zTdxfo1>EHU1?9^NS~S=L^l}>N$a|7@tyK7r^jEr0)D`HCOmAw=aKD z$I|TgXgUyUVrfskU8moIFz&*4!0#S&G;R;m*M)K;giC1NxJvu!jO<49d~Ype=d}-7 zq8{D7_F-fJ*)67eF$H?O1-i*z_|6e*^>Qkc%fc?5`*)?@{`(0b0C}8e3gn23mMj*E z;C-x~z-4lX>=J}n6ETB@@+n=kraIX$zK%9gm*)5oj@<o7N=i^M>-ZW#M5D&q7rZF` z$=IM;>WNiY`f8+S;j&RU(|li$%4%CHzA%eLn{tzjCn|h^jmQG#Mexqv0#5FupXOyW z{U`pqDSbIg_a)E2=uUE=p{SR_Q|9<^S!t6y<ST8;51k|GvZZ>am)@T$z5UO9OXL2- zC~)D`hIt4B?dA1Q=g7!%n?06hOoE3bK50FCQ4nRCoXEprGdXNoPZ%bHTGe!a?})^a z$x4T>D>NAaOgV1Ae~s0u=msf^+fAG7AandaqCN_!L((I>EytE0uhf6^_=>j*Y8dc9 z58=_KK-KoEUxA|_qcwU#SFPH6ALy4<$I%v2l~Eh6M8;aE<ilhpvsCh%_ZvAwPQE;6 z$QAhf8J{uujK!x0-IR^*jHDKwi4&<u>$d+VPm&5Un&mJz24ahCIv&_+M|tbE@czOr zTm$o>T64b;EV*dhaCcvQI8Yy4YHX#H`vA*wHTEg)-j+!B>`NZlr!lz|b0{d}j!qWB zYd;OSUY0w;(QBR2YjfvEul6MCNltr5u5Tml0QUQz0oY8BR9UT}|3aO-Vd?RwIRM?? zswwOF^MS`?`geBOy^sf(`NNr)$VCNC4kMiQXuSda8oAz!E!E{nanBal7vMhPrYTTr zeTSgX9)dz!AG>w%-2ebO{iridS1l;~91JSD>LRZPy6T`lf}rhF*IM4mjkC%;I^bH% z3j@Jh2G1+T9(xzRpx)T-P06k1QZN+MQ+4O>guy8W)*)9QcGunbiUo3OYrxH_;a8fw zD?tQIRuI0YQ26RhmE3TD3+9CgZ7!ktk;$+Q@a$FwE@+*M7J78M(8wRua~<rhRk4j) zrIGezy~DmkK8W6Y=-o&mR~}lk?re<1_!$s+?u>8&+l>%ToF!e=>WzB@WlQp4=AYL< z$%cX)Ie*1ljGy0&grnw!zW65wuFl1%34ING#7kU5(Nm)NQ18iCVSo`?M7=%HbOvXE zI;a$Ditk4I;OP+p;ViAfwYCG#pgvFmXnqv{^F^n2wLXvMoJTtGZ4nStKl<c3{*kF4 zLKF9N#csSCS)d()8CS~!5)^f{UW<p2;dzDcn3IWCa%xIoH+-huoCbt$J(DHDFaILO zmYOp!iOlOnrZ1~tHdzkh)~Q_&2#xZzZUSQs?*AiYElmYhmpXOj-RZQ(93oa7^((8W z7TR`SN9cLHE9`*ngY>ixpm743W=$aChv~X$9k>J2h~sLRMm|`aGsMIst{oJjO<*$Y z_+#;y5!nI{k9%&$sKm{{5FF!0{y}N@DR?-tseqCa1|ZGswE&8I9+9k+lgKws@`*%6 zKIus+X9dT|I<jw83V)dPfJCi&M~stTA=jEcz)O^$@CP)Zgo^{QwRhtgw5Qyf)Urj! zh$={$ZqOuf#3O<$u=9Xk`DQIlIGCdEm64aiut`igz?DqA?=I<@0_685^DjkyivCeD zC5h-~%K#O`iWWz&Pg=#$0UmRTC$=1(84c8qK+AeHel3UzixJF8IOg0iuWO3f4FF*V zvUB?8R0Jt8Fo~B|2^jyN{HmNGEAY7=pPl&Jf_|&UXF5L3_;lctVRPtzm}4@n<p1?o zzchf^X=x^NECFxH_fP{ytc-2$#dsi|j-yMfy*8LF#$dWQlnTReDh_yXb2zweBgCH7 zm+B-EjCT$pYiKYI0Hqb?rLk6h_iV-d<yRkGKrx8@oA5|OKf$5ggi-bRP<ZvI=}2QD zVVMnUUh3;lg;^0@;J_H-eZX$c^2Xmpdy{onvYzDprJjGFC!x5$?C!wd9qJFaV>e5E zxIK|jJ0<xBldnqhB_=1rp~SB?F?p3FpJK9Al8-SNmE^rlUMa<HV{)iGjWJmz$s3p) z^b&zBL(&NKxP};+El}c~*oj3@$q)KGdxX!%;8|qTRJ9K#WWTClsl|tqr5<FCLks#m zyN}Ph@l1u_(&ATxS?5EN%wlQd>tyLWnDaT7?tOMEpZ$TQ*Gq*vx3T(iHCq5|#4q)z zH03W$E<yBMzj}npj~`+39wz@=lD}l~y(tjM%4BlbZ<(Qm$@pDNhMC+W$sm)PB{?5S zV|=QGYlzP%;@JDFmCthUjEM36bi`{UfQ6DA&E(~h9LnTmNjeDD`Ao9ujRdi2exGMI z=edTc$MH;=I|=jEtw=7A<aQ>1EXn7XoG8gBm~58hLrgA|<XuPtF=J1P&dXU@JuB;d z7UHuhtn6*!7lQ!)EXjFHZjfXRlQBt7N78tFZ?XZ4Sw4#}d!H@hv(FoJ^}UZ5@bPXu zR#X1Yb{*<MGEb6UF!?=6e$3<-uQ0<~NE$6)C99gv^0%RU+A}|&wf22BmCqJi)%O;k zz{i)c`l){=^d?p`LXu0Fyi$?|lMzYIWAZjh)-X9%lGB;|og~Yc?D`vloyp{yb|z0@ za^+?wM=|-)7AD<D8o940+fqzqcFZG*rlvhE;NvIpShYwEZ=kHIljKWGJ}k*iOg<;c zr<nY^Bp+k)a!KCH<lB<Gjmas3V~k0MAa(<j^Y91bAAgM}b|(?@5Q7pytUT>;9v|lu zu`U5yK>&A1@*F1rEy+SAv!5VX50j%Lc|4PkONIeVo-9ujKtyfF2?U&PWb&%#nCxb< zbrX|sGr0|a;2(j%#;g>MZX&a8t|ngZV+S8E$7406jHCTd0+=AlTbLXx$(xuwQId^J z{{Hu@;c6z=Nb)i!|0KydOs<!tpUGz=IgQB{Nlrx4c;wk6@xI1<p!UwujNkis4<EmS z$Lcpy%1!{ylH8A`s{17Q8Iuo5@?T6oCdu7QE|ug9NE)rF%03{}D4?c2+s$WT)^xKJ z`3;ItI4zN1YY6LCl3dB;9g@6;$$KPu1(TOaasiUY+*D;d2sodW^*(FoGY6g_;<`+2 z>YxaoHbN<WnPk0=P+Ak950A?l|6vckc4?nyiqAIUnVKX;rnB^a?PBRNChO(tnFMt6 zfh3@}SSUt7jj3n5{{yjkEuL|fS}6byb|Qy^0z_B8A35q-s`uI73292-XFK@p3_Mex z2$&}TMm0<FAts-Y<Xr^*I4ae^H?h!xOLX7&KK?5o{|k@RXF?o<0KSyuJSMB8c{NOa zU$>vhTO?VABz$#JY6El}#6yR@8eVF7iFfI*!2573lBa0#o0}Tg6`mz!_#Rr!iAE_@ zWh3KdEX291VEhh$;7D=j1q7c9Pe1H%(@$LBL4WCArM<?f%kbI0mrsx<^1j@05~@kT zXP*95bM^1E{CuMG&rRjW-P+b2C!yI`AR-=AhPfDFpm{bbkJv?s9r08h_h^G5G`c`+ zo*TiZejCHdC@Q^hJx}c>V>vfCP#f9osZ)tRi=t&|x}suHXLQQ>rE|r%({1LY>MLS> zx2Ec=*7eEl7`5tOYs6QD2BxI0#&5PKU>2`DOjBxeL8u~Dd2rG_fU&IBwSHB5qip^@ zj;{?T;~|{)V1LC|?8f@TiNvH&nDKPi`kR-pV8&l8#McHwLdJ*m*Q5Gtv=j@dH6n)5 zg`w=oax9+VYlizkD`>zMhYUZex(S~P@L7vbM%Fj{v+3uV-~Rd=-s;C0-&FWpOC9kt z(@b0oJX`Qtf)8;QyzO?o4WIwt{=@a;_@Bf`XQv%lBiPLWW(A!Xvf(@m$59OChiFd- z4Lh09nJ3w>XSi%|$PsBj0B5je136gbwsYKVjRM^x4kZ#ROZS3d;6#PthqZ3MYSnou zc|_aM(l|I-U%~%-eWkE3r`9qXZvJ;4|CB(zKHWHjW9w_Q0_&Aynf&tnmZi@DR|eRA z!1dTj&5bq{cU6w(4|T&5EZAV|2BSxpJEO~Uql=H>vUs%p4_h?<2%#wKf2<$&KX}P% z`yZBC|3mxVZ~7sQ(=~Hl>nm-m2d@rf;Zh|Veq`c1Gd4ZZp)$*B<5{%NDckDTS8rea zifjE`Z@*P@y*W%|BhinE93-;CZ>$=;dIsJGvR2Q+qnWl<flSM8MR`(d&c+Hq4^f`X zp>?q<@?y>laYYGmzs6xXv326kUf6T4rm%+j0ukctGR*TG=J%agUcT<-V{9xnHKZP! zLjza>$EJ?Nt<K#vW_~}z9BN+ch=oQ@Pz>Zkxm)G14GfMq7NV=_)X=4b0=Id9A7%~> z;wS<N*QtT>oMtyVKsjl#D_AR5BrzW88f{s^5c8r_io2$aNADrzqh|9BRqV^auhaeQ zr(zN?|7|u%qX!}yMBzntG&^gTZ#&Nwtr(uX$sQF>g)jMUeoL`l)rrerfY8&6lT?_a z8-d6u)u2Rd>d*<G#=%F?T2Kc;>cUPn7E;%0>P7ZcTTcaRX+r=mV#Y>#UQL}kNuIHt zUOG9^iKaXz?Syp&W-<$x!4@tAYB<cLcJl=Q$c=?YPl)WdFUf^XDKmUrq}z_u;E^qM zJX`wT@L!+eTA%G&Ke4bYd}d_7?V9mqEZ6$$Y<S>_?9aUBBr+EsWa5D<vOnvZ<M1HM zwf@4a!j6ufF_En{cp0~w7umDAalqsXyKhVQG&9S5A-Z%tEDgDZ9k@+<#DtpI6!drh zXY?$1k^QuR(WUlyR&*)j0M4S>DtT6B`dyl&@F!X7fxEP_n>*{xtsUKY9iO;Y&780* zQ0k8b%FL}bv8KF^Zb$v9nG;u4`qZZ>;tw;kLAx2n6L8Y!<K)vY=vJ#7Yc$=&D;D?I zAU>(E$NXqzamvtQNx=<M$sgzZDxE*d<t&Du23$~~)U|%*MA!O&uimx3X+p=xj)6U9 zWgfrxgM(uYk~|QbRcbFC=DLAS@VJ_&47UeVB(Vyym*G2xv(=N5&v1b??4b>2-ySXp zw-wz<(oF5dc&WkG2VGZVizb)hdc!5du^&Az!#5&a0)p|h%VwM{w=a!j$eg}<#Kd_S z;gOKg*Nk3$iEZLMTX+yI;JIeV>Wa*X(=tQ-EdzIaOl-zPJ0jS0+2PF*4LG_g?KCq+ zCwEmAQ}Cgy{OMhF#~m6UYdkTp%Kjyu!PPs%+Mu92&?TMRg%GnhHz)=HR%8V?D6%Bw zL~1|EQX$H(rxp8e_;qunsW>AvUks|&ZnNx<=GRNt;(XG>Y1<b0FkU0VxU=vbY+0Pn zvkH}tl0;z#%>JQa{%Ce=>X{R;jW(fLwL$Me#&{;Bd@-E&YR$nLHbJC;Q(@<h%{p@e zY~1IqCiyYun#S9*Blr^@XuhDf9YmO^_D~rfWP}IRsn;>TVG_Wj(;`joj3x(nP^UtM zu?O#n;`%N1+Bz|?a(@7}Je(fntCe^KxrhhwZn~sX|JD0DTW*Drz}x~$@LD=wr6>o* zn!&tUIR$Czot~l|{d9;^2-0%e0ShNrYkxehg^NX<a-+iJCWFwm*i1k>g-5mCY~Wx) zymd4>wbMXXZZYmNe|VQUxTGC}1iP8x{$1I^7AT7jLz5+nteH*oXDoNZ$^&*z5IN8B ztFTA93mWpF2hm-V&Fs?}y+v~K5w{s8G0&2L=0DY7Ox>VkrR+Vs)=jsFSig!y{29bL zh|){MI@N?nK}VgcL<Z@oa2A}t=Hqx#lF0e;<_IFEX*guJW9%P9dahb_Ds~PYT%|Xl z@r9OWM=R~J=Li27Hyo%zifGe#42V7!?NS-Eu(VrxzA(j?@!dl5UDn<}^ZW5Gq3JL+ zLij11qvbd@8Nl)2++vx(A@9HDzBetf$vquZ9$!sCcHT{(2>f@TG<lQu^k>k0wA=qk zCWn;WK4tGGws5FKq*&aK7bKT(!jAOX^CQ>8xf7AU@<3}(G`UTn-8-=Z0G;Bxo3QVT z&$*z=Gx*+tPk*E<@cAJ=KgVxqliFgQWp`xh)c^V4Ui*A@(j32I!)(w=-T1R~c|D6Z z`30DrA!aeCFiWei)^hcPO)p&Y0*cInT>U#_d}Pz?PTb%2JSOEmIKNvEyx6!8+DEV= zcoi0-ZXd~&i-DRfbGKCnAh5Zafdi>H&|A9GqH4G_I7^qmM#}G;2)Nk#;6;7jpx>|N zpM||ogp8{;?qDsM>aj^IT7(-(0#0~;pks=xb5_7~aB!|bGkEuAd<?w4lW2^v&<HNj z8E!@fsj&ey0^@)>8;f-yxd3viVSdSul6LhWMKqe5HWru+r~zEWvh^c^%aX0X8m&K0 z!;(pJs@_D1X6vJ9bIo$<>r<;`uLGK1c!)kSN#Yr|5Z!5%#uwOixUP@a^~-quGjqs4 z^Sx$;1A?}4B=L09k=<xT_TFa1o%&#jbi*}4A`&gN8nsxKz!Fj})e11J#Pb->P#&Xn z*c2%n4lYL7@9VPkp@m|LgY;ckykKD2Ac1hxFP<^729imDI$J)E%ynm6h<FWh9zCB1 zj&A?=`~Kbo4@(dk0Yma-;Zr`f@9zct4g8n~fr;QvG#U^w1u!b%zTHwM-cyg|sUN4f zFz{HSvqooMH<Q_O)3S5D|IPX5`~P?OpF1XeI|s}MGRYy{8`~%63kx&D=ze?Q`F;G2 zg<f=4c9_SRwxjbzCOLkD%X-4YjJww$n)!<T6x{ZE`4AkGXM6_Y8w+2-XvkG}|4KU~ zwTDL=y!=f+uQ2XL8hyF)T;T)DADW24XBjoS5sVNtgAcQLJmE&MZh>~?uZdQ<)tUn` z>893)?2iCy9^_Yl`k6lYu_vB|0}^<F={GdcuYRqc<0*oH0}vaBK+-sqrN&``LWiU& zjT`89s<LA;f8&HlIJ=}BIY_rWGR-}Lk&{FFWJb30s|)4y8O~89LPP!X+OPI%EKz)n z(E>UJbA!i2P&kct45(_A<Ckgy<9C4Tf&Si)F@U+c_Ua!_`B5N0%H2_$w3m2D1%_wx z0Bj<<b<JJ<q)UJ|I8dKIu3VEYKNo-&%Q;alrXJGBC2dIbRje#H5)iu@ZUvBh3Bk*b zgZSz{SlFOGwBRRV%hP>#Z7_t6+X`<BzS|of8syO{kFoq$E;MUF)8RyXP=KDpLAW?q zj1>z3VCVaj0x~v%MV-kN4^Q&u-$FsQuoF5X)XYRY-#Y#tL6A<j*%|ZOl0HEjF(prh zvuaNwJYSAP<|FB9`vqE#waXgs8YIX+=-j$`?5EE1j*o0YAG+F}!W&~V{|IX?muA>> zGg8YhBC`$?50Sxnii>C-e&I1rB^csp>{{c=Bm~XEq{Uyy3oZHpxiAIf*$WBeHUJ?A zAc7etVLX=ta}QF2OZXUIvMey*ipA*)d;DgNqlmZ-TLD4^R`>RIt9KI~nXTR({95CE zi(j{T-^Ew0d58D!_)cE2&c0`8sDhFNZc>GhFb7{F+*vM@jaa*HpR4s*c%4TkyIpNh zB2n6eZ~>1XVP0crh&uWw3?uh=aR2SknmF;GcYXW9X9Ry_?4}f05)6Y%zbvt+#D(q} zK@h|~5e-?ni4DMkU%Rg>JfI5*QJ%*!oX?s@_OTO3Xr<8c4A$rMy%Qpbe1KfX<`A?2 z2V#KJc)$8gHcp`+xmw=_TxhZ0Vra29{ZP1&kLlP7p7F9kG29sz^}c!puL5cyS|!W7 zxjckFp+;RQIjGvVu4dsy@CQ;~Dews_$M&|wic!Lhr1LyjchSy?m@bp;ggg7QD3#%R zyJ<G#8;DB7il_9V%7e{BbvA1pU!!(QZ%8Zh@Jfoz=D-_Yt#<Uj`x;;?eP1>{g7IB| z`+^^qgMEl$25-~5(HF)|$RNF<wyYM(98fEe2}^tL+?rUc_inuRtC3ir2Gk~(C|J06 z1Em{TTF!^EPt~eq>EB8wJ0!<1kOD%BK!L)oM0-Y!dKn8#v(?K9nloVm-p{Iz-RgZ1 z)j;?L{Oa>X><7xyDSR0$uU2J$?MWcd9mo?buTf+9b1Gip{M`vm!(s!=O102XU98#E z+|mt|oiSMR@xG{9ott{T6wib6x))>i(;C5s9-yO6xhZ|T{0EPKs2zMQQ8+wEaELhY z&0rk-T@OC=f<5z*7xTl%sBSm8Q`Sz6SH#wM|AQCRYSE*Jv2&}p07dv3rW;5Os5sE~ zTD@*Qh4dO~Zh=^n^+8Iu!QI4<J|ML~nX?~eR2Yii+!W|P0W@F|R^+c<FJNVa$D;@< z#(jzUtxOc=8flCc8tNHL1}itQ-Sl?{!qBF18bQv)K<@K8l{|CnDvX<sZd|Sc6XZ|} z>Z%#uA>^|HT)0w=3?tRw9+7A@Wd3qe?N)Cd@Idc+5Zhd6fBPSpLzp#y96>vnA(x}8 z$gi4v-%aGZ476=45@eX78r9PKnx{8V23OxagBsyS=iR}4b*d4TQ;8oE+2k(0!<&!V zU2A!q(mGE9-XT3$VFCO>deME790GYo4rHAcO8+f{7Ibe!xg$~fH2FGog+`}HAYzy| z<pC)~(#tS67rtQbTb*kwM!1>JY~in__$<8EAQ}PnklX~wT-cTMIe3VEdTq;qOZWNs zlj^-!rRnI~?s7i18lj%WW8IP`B!dGP#xO&Y-R@)t3H0*wREEPTW(UiodWpIM%jMPB z6E`vAg9>uda=rx1;Lwz_rtf3zp1u=kjhDHgirO3L9WPV8yli!$)+c1oYjMfmdQ2N$ zG%p_p*4&a$)yb<w7bE`~{Xitc@pp(2?!9$Go@T(mEEl>of)Lsxhsv=vw}%pjmJZ3N zPPtKQj<8Bh!NZ6T^A9=3oC2L+rU4V)k8C$om2EgZVnwS74={KPqI)R*)T^CCSqE%L zs0K1-H1_)^%dkZF@F6<<1knm!-_3n9eFS(A0IPj4T%b(6--dfNPe8|kzn33Tk>C1? zuQ)J=7^k5Y!8f>~n?jAmtx?<0=bV4v1I)*bROTIQoY9*%-VB521Ut?S(+Z>kG{u8v zx!qjuF!L}KV*CS9fWt8Y$TM`9r>@3twu**R3&XoQ8#V_mIV;RtCBg|afg0eJV(4$Y zIsRuqVIFF&?)WHUaH_5)vZ}(YoKYlgAsyjhxDjVE0=Rz`#GK&`k#8`JEfKPO6;%#v zzts)%ddc3BPZ96l)ynYbkqPJ?D)^;~p&p1YG1?;i<k9`)t*KMLTb|xcyO6zGG!)G3 zu;*106<9l`p=aK}J583x?#D@2oX<hX>K`DFUtLkbzh~di{1~?Ah7VKOujpRM>~p<E z6mhjA1A47q-E^5y0z9yoez4VcM6am*kk6o$tr%>4nu2g0ZU%<rFo%H#-dewTJ{Ke& z_5klPtXH4PAjuDyN}Y)I0A(H3veTgNu10!E@EQ>J-qQ&mOZNlI((`RtjC|^W7EFzx zGJ4A%wR`Vza+!k#5HLI$-C@VF;>&-_LZ_|05vvNmN4)RP<WXeP;!dOGw~iq}doTwK z;xsm3kE~k#X^PYc7}=({lyl{>IJFYi<2hiE=!S=UzepX9a_@|U+#Akp=tQ&~O#M&Y zE{h*7OY@@Hk!?1-kAiGi+^6>ML3xBGLHtZm3pB*~<pO)u+TV9D{x(;0)kxvsxYNYR z(`rQN#*x!p)1QanIHo@z$4^Z^PL_L2zc*TqJ5UOu)di-%C|X@)`irC0xG8LWv>G>s zO^8-cF#ToG>N3+`9<44n{ZpgWQ%!$Ww7Sal&xlsfF#Y~0Zc6jdidN6URj|?O*`|MP zw0f@TUl7IBH~xju>V;;x5v?$AUIi2fzOKFHb{qCL@vD13)R`2Ogw$ZG5kg^g=O=o7 z%MQR(IlPOe;fP4qe_Q<%ikrvtb&c|WDw$;pP6AB&m(DP=Q7z&NaZ##$N^!1~q(cmb z`sdhl_)W6n_w?j%qKe<c=Sbv%fSM_qS8sFy^arpBv~6>>K8<c=@FiEP44K6XX=c8k z4`GQwEas5C)Ezz<d%tMLNybu212TcZ)syIU;Mvbl6%N8WS%-UJu~XYNB0qTD%71HG z{^!#3bE1(WG?-7|m6~{sjOC6TK8)3WbE-Jcu_vo*(Z$7TwCI>Q8gvecP^1^>GU31} zSw}lFbJ$=yoS2IZHkjCPX3Bl442?58Z(i-5I3zr>byw)P)qdN=YFl`4q&+jzk=eQ{ z`~ftnexuqWyJ4~hTjYgjg4(BGKl5(s4g45ENt%pyR<CZx%nN}!htX2jrSPTlVf+$* zK)}aN5d!KvWBj%CiPtc8B!4uOUnpSZZ_@ea_coCHi9VI%;?XKk)bCAlk{-VtZ!)+l zbY!Kz`E!p7xYYMO0y6cw`Ut?j@4Zof!BO?4;Zqj%mw(&)sZoE`x4oYc_4~i={j8|} z2#aQ4{N_ge3%;%V!l)l(JpG?+^<mTM-{u>U!-?=9Y!#hvPT@H7ncO$(Z%*Ne%rq5Z zPK>KlMfEb&Fi48D>yAjuQ;a)x2frYD;W#48gAD;Sc$wrjReb=(2jYG;dEkgU)X)RM zMP?7~P9I`CKqis##+6O{Y=h?jwG=K;%Ui{R0n*y(+Y>&+r$YU)U#t-^IGT0FiX;+M z8VPN4=;Yz}$=Ef)>Dp)|0@URDb|bhJ#ept1AZWw=bhT>Z3hGq2j2;^wX0yZB6Y>NS z|A5%Rq3&S;y+NVAFM0)!bg+T?j+s6L<=}G4b`}~u4Y!qpc$49<WKPp$+zpzR)T$5b zl4LydSY*8MBpD~V7K@e}!<v@6LCZHo18ddQ*YE*p+12wurezV<S2zHcqUG*T|627A zjm@!W`Spo{iPhkAvf;QjD7V>B#}mXtV4<$MuCXW4Wrc=mhH9CM6B5UuWR~v#BPj`f zmhtN^*`*eUO}3BubqBXP929Gzvm?u~k#mMQos$3-Pq)lUl5~u5LQ<LpPcdYvoUKZ9 zL$J5e88A*xy)RHBZ%EDYuGX8u7G@6Y{ug6+*ltee1T<1Br^4t1BJF6kU;W~GVHUIA zfgNO1f=G?j>S~{CS6bPogYV#FlMCqB<jUihd9gb>(`{mV-kI70Y3j#KkIp2sy{o&G z`!OjVOU{?$WxgC2SzeG4D!|sZgCNVj7?(LRzamnR70jynG;8M@`pc!pRL*IXu0{-h zAd*L&ARU~Puoiq*>t6^EbF!=TQKVRptCiY5cKaM5PjIn@#JD;J?TUc(vPU4v><INC zlS4rwqUAAIjl-{Y{!!QzI1a|4M8V__C>kFF%jQ7yrTI}?Y>Ev>K}vI$o{-FNds+pH zbp`Y1SbH=c2zuDp%o^yP^|gTnB7NlYC`oWpS~D%=#_O`lW~M~oQS`*-B<bl!y%K-z zTj|-DRuRwpfeO!$=|fM>MX*x)B<|zcW_d9fYFy-6w>xyAY#gPLks<Z~V6_H7FEgsV ziFXZ&z1Q1uR=yvmRg_{6_>+X7aPGy4LF!ZBj|sXx9%;|`WAR5(ia$hvrZtHhaloi& zbe|@rXvai~U)ouL@XLCnST8K0Of|VZp_8;znzTV!hT{y7@6wQu#WJ&nW$t`5$udI> z!qvzL*PM7X*Lc(N2;*4QoU5xjnsMN;l+HK?589`--zwhoz3*&)FTMSm-n3Jh<uks6 z-eT$Q?O9V(Wz~1r=W2Zcc{RN|k%}z$gWfdbuY`*R>JE8~SMjTty@Hp6-s3dnW6}G^ zLhrFSt|L=k_yl8jsyyi}<v+_8N@zkJP5<;Vq`#DTI=u|Udur7Bk0Acbsrp3wBfd?# zY}%+jioa)D^ro4O(aDY;uW9`KUY{zA)x<Gd<sDT^FN>%6`$&4vPNO&K2EF&CfRn|8 z1|UB>O6c{?^#0q!z4ShiDlhbA`6gZdo9W$KM(E8l7p9j<r}yk5=>27?KA|_u4%TJA zjou3^dc!%!ET8)w^rq`m+Iad6>5{D;l-=;$v|5fqZwcNb@&pdJ;O_+)VK=!vJRq{1 zv_BP3&GLnuplEY8XS(6D38X?L_{M`!A->r$CmG+v&)$Jx2&J;si5d&(8)_A9I#6WF ztO-@EDFo*+J)&e83LTZ6NE!^=5w9>a5Kz{#TyYEse;glMuY3<Bd-QDV03qn&h4KK3 zMA&QaQc4Yijz>vMZX1#060Dq3i`*YRE`ZEo^+6lMjh(-+7rW*Gj1C46a9lSoN&*d1 zmF;rWt9?sEJ4pr@6`NmLH&_HXL08+i8&dpES)%2OL>~eD^>Uf=g=9X-s87~wh)8FP z(7DgUyA|{Bu~=S<^zFY-5@?8VX$r(Qi}c<+#9Ig7%vK9^HI_&pW}d%*f_x{I2-E-! zo?%XFv4z_ix=?zHkCG>On!mw0U@zJxzfGUIz?hrTr)Vf(`-e;WlXZx`%H=qb*UNFv zs*&Y+peHw+BF*kh=u`7GB%vf1>43CSLjonC5@K3M#QjhKf&zq3Q`dloQ4EgoXaq|n z3c(6lMxfM1x>SP{GY8|ig+H&lKCz3tZ#a72JcJ=>vt`HCt`{{8@Z+Lt*xM8ffsC}K zBsI{Z=;hJ$0!x5ibO`u1dR?DZ3D^0+_x54OqF1O%bo}L!<$%8gG_r%?NVqgI(eDNT zF4X|~kjYIl4N(_AV38?1ogAK{$gxk)dTHbk?KllttFF(E??qNqB)MLRR^*EkhTphs z57u1|j6HUEDM-Q*t;U5*<@utL_bO`;d&n>LgD%Rd3`B_TDtEL$hFE@<NF;o2iCLFc zdvV`vBfW|3z6x)1j(LH{w68=gs$}*Z+Q0I$E5t;pBdPkUu`egWLf!QRwm4vR;&y!& z0wf2l_@!7vAp`<8qEH=-Q^9PQPGRhR?!Vbwp6wnCJE|SGE6fuUk0YR_;+5bAhpY4m z5LW!FAnf4~6kG_q!-H^F!UuZ@3M+88ju%>EW?+qA4_}NcSuYac_3B-b43Lxv&`2Y% z`Ymk4h!3<DRbeZ{fvlcjoe|=YyNkSVkLG~cxza1*WeU&ATx?aiO-HEMykII+@8JPI zuRSE#f0_Yz*ZJ-i6pK&ttBn7!9NOMoEM?6L%KGMiROc^ee(bonfO?X@=~mQGmuCC& zt6SrI2U5A#h7v*=uKfF9T7tJuz-?x-wIO}e9h_mYMWC*Rr5^H1dpqHo^f+iLy(UIF z4mKwxhzDl+YK7ntEYRmj)Hmg~A^+lI<hT4^E>GXDTENOe?5mKN50{(E;8Gw6{{S=} zW0sdAj;Ed(v0kSuK7BzVS7|?sfcgnKmuzLHiE$gK1-VnL%j{yr%i*68@m%dMYL%X5 zl?L!+&|SENAy!H2e*pjt|2RjII1gKSSmR+9y;Y3&r0F7bu{$F~_ss&+ZPt_{2d?d^ z^K<>@jt@ssx#1ysDZqA3W^<2*>BIIDFcl!-vmsK?1VXvybhmaU036jLyb9Uh%=<0$ z*#kECmMe9GQ&$V~;R@>^ILBF!Efr0s_(ohMpb}kD7l!O#U@7HGbw?6*(|xG7kKam( z1*umVLTbYTP(%IlC+Yn)m;JR!qOdL&RxjCAT3v<axpDuR-~2>%O%}T41`y9nnhUz6 z-O)T3Xm9x`+p+*&MW5m(7VIRGlvN;QZne3_+k#3F(Y2SNa?L_9NrWA|<>kVMW{;3s zb<0mXIHd%po-@!a?s_y<gZGiYxW*5UlCN~LE$$%#(<}s#eUWAiJS?^z_L3k?wCV9- zoo~dModr0`h>eB;`(*zJ2M*fDA4tUh;J{Q=r#9UVXNYGOB5i*4)NnNC%lp9{v1i)T zp8%b%NPfSJ42)QPq$+uACWXL;e3VtgE=#Ascn$+^-j8i8Fz+M;4%K1~)iUnzV&U$N z9881;#%kTZ1Fkj))RD+?L=tMHl>l$TndUpSCQgm~jR@7N&G*3wHPu^%;SKX7H;~=F zEim%Ib>!je*i+7|w-H(EE}Z3xJ;_!{n}Y5y@2`zLNe}^b13(07)%85?g-uT2HybOg zI`zpo-a%B<O^YhTsvB32*Qr<Kp}U((OQ5<Q^wJNA^wL_56{4Js159+Xw;uNa_pSQN z`-5(93s}OcK8so502HWEJ!}lFSV4}d-l_hq=d0C|KcPkn^F!#A)R4+Uho6UuDzYgb zq1JvOt*BAY+{>Jlfd%s$y4sSx(|dHrX%*33q|dKhvoO7X%F+HA5yd^qDh`#|kZRX1 zaJ9Zc+AEu@jVs%_V7VXYLCSPDW3t4ZKd2R(?M>d;U&ulMwer_Ji8|Z@avCr~Q#}|> zqtP-*`M9eNO+|1MHRxLD984dUe??2k?mVX)PDM+;O2R1xoM5?(m4JHdcZA?BX-~@^ zOy+0D22_8YpF<JxvXP&oj?O;iw@K~E+o#dIa**(A$a0>Sfkc}-D1@7cpb1e#^WD4F zJJ<Rt16}KDogMEw25#ha<>8_5Tw3x<M7eqB$g%38fvcuCqc@S-v76Wv!9f~*v!_;A z&Hv^7$^%>gcs2+nj$1mGZKG9()gOO9;yj{dkNPpy0UUIxbmFW=Hl(3C3l1`z+Su8< zAvn$>?@gp*xC=9DHvLZ!Hi&+AUiI2k<b{JZCQ@)CL%iL(44pR935Sd<%A3xpi+Vo| zgQ=k_i47Cb*DCPCbp9BRVNeA?WoXRQIvj__Hm3&;8qU}v@nOoNffm0VzJG*=A_Vn3 z<Qora-eQo_6FLLf_X{6yb|5Gl_Rq?(Rfc$MfHBM5>3Y@{yV@43+Ie9u5y#Oo*G(s6 z!JX|N&0~XC8*8Y#h}B_XaFDutpiGN%;IW>nW1Llo>)GrJD}Da})I10j`diO-t*wBL z7^fzf2aLRto^iNZyvO5eE5~zOm6K@OrDJ1(=J^7E#gZVHQ#L$N&eck*IHv5w#jZ8g zC>=Rm>RMNY1a@P5D-Ztc*S{XI<fk%6O29zq(o-HeNIGF@>}pjIXTX3*!i)aMJA$EH zxmp=%kpd<-phlhicIq*`k$|#0vSlY6x7NIsdht7*e>U3^&xzS@kIk*zi6*R@q!lPG zz9xf$D{y~$fh$5dF=rH<atdq7+Q$EIo@Zh&M8B?z9?Y}hJ(mA`$zCqK=t0RMxIgIO zg9&qMq$7L7&%GDivadVq<&FcH=7EmS$7CIVQs4tSHk}Q|E7E&Ri7PnZ>=HUTHr*rL z=LZpr)Q6X2C_pE5Qek-=@PSr=+{Xm67%g~EeX)A?4QVUXcUS9^c(lqst`hWpi|BzO zbReJy^W<1rHfr{})^#J(%(lHvuGRVDTApuNm2aC_-nO^-->c_kAYC3GW+qlY-|}Ab zD(AS4cupk@aC_oUXOZ=CNw<F;!n6-hG2bWLAUj_pPtrr|Vwd~`G#;&C&0x7CQ~&M9 znyG`=Y3_^whakB#v%hd>FE#!h6l(MW-1(3I?8CoTTHv%ZrSSU=fEa&7j2*fPuKeP+ z8?;->gWwhM7;N^;9K25IzR>}NQY4L_DhE1pEy#VxH?R?X88oFIKlov!?EWR=G3fI$ zfrj+)KZ~mF0#S7rAzYp_76OUTM?8>+rDle!_0LE_U8^^@@EFTh?8ecX5mWlbO;e1I z@iKOWP4KN#Z(?Sn?n@VuVc5!s^d)I|;^v2#m3RaNfS~T*Kq!kS@7!%~HlGyiZ#;+w z*Qx7j=@r3U@MO8ut#Y-2IyDz>Ir$)m@87r%L|p;SV=s2571;kHt0KF2n%AjQPzp$J zO5=39L;b_bvBPM<7}2E8Q)7U8$u@%K{Y48>Zz_V<g8^(g!T`{~qE$|uEx<Vgxx>hc zm#zhE(jM^Ry_LE4P?799fY&w~8p}$ouE={&>fbnP3F2kwg*Hk!aLG-j#h$k$vvBJL zyJWIrMIN}J1XNhRM3@H3W_9CSNPiuot^n;U631-27tA0hS@6iq!v`1`yh+rJ^>5xF zmiw%LP0}lM%}3M^+_5Q%`bk(UHM?#)mm&lU4Dv%E)59^cTDhONck0MQi>r<Pa}uF@ zWbDF(nP@4?Yzg;ABhT1tYYClRUV%v6aWW+jT{y9YzBiQ3Mug8&D^Y_SJUX=jR~s0o z0FZQqHneX7ejxgqenND)_@K@_!)$`8fJHNQqx<2emlX@KkBD^tdi5jGsO-jhNiem_ z|6{Ns%sg=a2%l@rO1^+?$O3)_fCIOJ2p#m`@KQ|D;_@ak)I82Y2mv@V*HK#s|HH*% zK_K5{#d#XA!Kr)A>Oz#yj8e(Wi=H-*yOwCt7}VH(8iaS+5Z%CTM7$Y5Ltb)Ao|(;c zgqywNfpl@wF*cWva2?;@eBxH!+J0@$hRaYg?!+Wy&kmikA%tIsGubA;A?Bk&YOdX4 z(gtA415We|k@a6bWWi`@8&{3lg6d$&m4@Dq?&~MmGSVJUj<oF(N2c0(b0Yj$mz$S5 z_jWo${UZO$iT~8R&=H$jnrNAj5zfB23ih<GT<h`sL0j1WU}h*sTyNvkAG9Nh*)$_w z_MihvXaE`UGaqy#$pH{Q<v|aUP_{DSqaG|rlE)w8Zf}e0+1>lz9Q7uv%0$d?$cx<A zbQ>szm2qe+PGo1S8jU%mX*5oCBhICYVa<p}ds?<9%;$H#pS2HEz-D_ioY623U83&~ zabTeYp2pRPk%VnU&W77q*<v^mWSb?BTDie26$TYjEBKXo51@Ib!?pgjipZfHjG_Fd zoDFZW+yrQ7k@tHBzG`+wwmUAydFyDv+0>|`+B^Y?R<E}H5PS%Ei3s80^Dw@0H&mdc z@r3+A4!=Q33ugaqrgR?0$Pi#-FD(&%1S;T1y-eV_A}s%F)qPkQvXL+BdY?_4<xAi! zG+lM`Nhp};qm$9gFw$JK5S5F-l$nmv<16i?zs0d=*L;{{wlLl$`d$2Aa><vtW=3Dk zU5_#JQO;92C{y^NY^J~RZbu@^+>LI?+xH6Ax!IUC^32UF1l+I2Ve-qIdtw*cd@nZ+ zkQkb6^p&P+a4){~{=xBv>~E1m)#`yCP&_*0#~Xh~216b~seK28!`P&+4I&1;mVAW) z{1>D_uq$m^I%vlb9Q$~waBBswWEotYwHdRY8oiVgfs-tg%^rl0h8b|2m_IS*oH$_j zsu3`YHVwtLgqhvaXiH>-bE;@XZr%f8OG71mCF1MA?3APit|_mFl5z$d@=J#_79fTN zRGkx6+jDwp^fX3g#w+j7Z)n}Q0jUhvFWPx?i>TrpPl2{wp(*APZcCS$$CYf8s@irn zjTinVYf>D2&-cQLoYnTyy*uNX&P1zyu!ePOdxdX%<2#5q+bQLaQ1Ch8Bg^f>Lv%gl zdfWkCpFmC@2n{~ZwdO7$hdV$H^b3z#Z68;5sjHQ6%L=t0VA)uGPdr~i6}}po%b*Eg zj&Ikq?UfN#j59v#xCOD=Ij&_tvdl!fWk2#vlRVohefwheme|yaovw9f;gQe&i=F6W z*Bbhm;Kv^RSeJ(%;7VMd6DkHS%L);E$hieq)byOSA}i9qFj|otA6^x$aL0#4E1Yp> zw89b3iB{NgfZuk0<UqD-%|yu6_+T`bw94)xoin6C;X#!p?Y@2JLf5Sj;AMp&2U^wk zC%i9t6RBG}D`Np19P`m#dhRGhZRIv|tUg<xuVBL)8_P<Ym#>~N&So_lEp0T=%H|)r zp510O&uUns-)dCzbckl$aWNX`g$G>T?jDRL_QYM013BRVSXI7<lP<Bcb>~+`4mcWb z1JjJAWOn`WAokg6)U7LJ1aQ9~InvQx=?yUxpKr<;@-;r0n{$Tb;N!$+2tH}zTI}as zP5uYEFV-QQdQE!SEZo09HujiXF!?)a00IN!Y<KEBiMbndj{`+<M8%CIR-XEk1_AP( zB{o-}{JmNjK`ueJVo+&R=Rkey?3!*T#N<MpkKm*uuQqt`LVZ-r`yWK=PAK^l)A8`& z@Yq#0H5f;iI78!ngpMZw9K^JSlRf7*X+@I5<SO*@RPaj`Dy92~3rF_U4_Yjeh5RP& zZ0tF!v1$@`ZdX*8^AVE)6V!RROMhh0)?^gD3SBx^O`g{)iO(?xq~27B4><(N_YP6{ z%*Es~2+f6B@mFcAC4D2CytoG%i#w`tUo^0Kdvv}7E;opZFw;?ksQ{?Bt82=M(XXFc z2yFK4uQA+Gd#(B$XY|cZKq2k#BV~H&AI-6-sEvQDiv6nZXMUhYrnOmA4RCGa@UNwF zL5%*guNJ}O%3SEsMljc}9OAi0G~Yvh2UUq;z7ov>#T`O8s+k?8-HUyI{vt^TWknA3 zbtXV?ZUlT(vI|SuJ2zfvZsb$hpGjL^=oLnuXcf7FuO)x-wEQt=%Umn+XONaZ?}O-+ zKiQN&qbYx$0U0QNxX7UV;npW#LAX4L%#=Tm;yX?LP=>8`ju!cI3(_Kg=rN1YnJ#~> z!6S^$sUW{=4P_X982qtrE`C_@rv$hx8wdHbb35cu`=?iE>635!b`g~0T669(L{LlF z=yBl^AmLiqlWd3iqH9eYKe!%-U>W4w*W7>g)X}!evf>q=`(AXlzG&sV^k~^Nv}|n1 z)e36@7tEGqDA`3Zwy`o+Nil|LEjH`8g!zeU9cS5CJthqhFDb)De}@bsaYTlZFljOj zLMvT{IgXTJ{nKUGA(3G_;pvzX4C1AUsq6?DcGb3=A=ly4j87XrtMOTf&#m~7-^q8B zUr+RrUk_Z|SAONOq2DFHuKou3_3N?6kY9xO&GPFM)(_3C2pZh+!8{ch2e}1}&W_*x zAm_ZD0g;{<ZU{EB>e^n(#k~aD)ygf&HJp;`_u>Xg3F^>t(%V^YUQb1$U&NQYv|9UP zK8Oy1%vwDg(5zLA*Pxq+A#W;VodlV6d5_4f`AJab6iY(+FVzz2`lBV3IWreRYGubF zXm!=b8mXyXUCe+nUB{MB^P^b}T~q9&6V}>E@x=Z*N*-)YlLs4i0Jca5_HJMKVelPI z6u){Jh6WwKn(_nWvRm(z^LKpZOhJ(6>KyDpgZf$?S$WmVFy3>@(-m2N_55?$_tAgo zAv*;qPQiY(OwR+DCc-DewNe2QeIXcaSD@+f`-G-4iJ@~bbCz)qoQmZE=Bm)Jdh9H` zhi*=>yHLcOlN&jBR%5}+gE9|!Fu|9hK@-rR@%7kes8*kf3u`XS#iZcT?_<KV$@ioe zXo08;k)FJ8e=Ixf-EUI%_YAjw4FbGATSCMV4!BYPo-dCgcYGl855j)(K294D>pWmO zzf%+fD(u<jXwYGx@@z!k(joiINV7dJJPf`P7dvntp!x}1eWazK;qlAN;gOA*I5~#( zb@Fj|IH1@|N7HvY-XUFsgUqPHJQvetoq2^LvL&l!!r6f(Ifnf;_mFr$BLiQEcQqLd zcd-Mo1K63lnZH6X<Zg1#1Hc?QEo4SVH_*0|>{YGL{PH5qhtS{jO(01fhK4`8^fK)q zT~H0tnHl&NeMh~wSDKH2a^cZ2r<Yy;4zjaabudX63Em*r&QYrzq60Q;!(azraXPi; z$)qt2{i6e%WD_6M1JEbL>^Oyb0XE3MYIf|ATo)EL(c9YOPqPYP*oKD(LlDfA9e1?f z(HYsFCy$;H4v|OnN<V^~cj)+azr0ZE1Gw-j1ncWEOhme4ad94&^i^CY;`}*WU)7xC zyU+)CILmyEr#NSUN<|!bhcFN@@}!K6m<>gw$T=GRc$Am`?ZFYX%Yk=0cORVU!4M09 zAYr;CA2oJf|I!*e*k$8ArPRz$)|%O9Vdq>Lri!ttfr~D1|EE47DVfRaecv{UTRbit z)8Tw~biWDdZH;Yy0h0KO;E*0J3be2Mh`w$s-{)W77okD0Ozp)opdmIjBhiV?(Vw2C z`*Lq6bKh<*owR>O<prEyWaU+|_pCReph64B;K#imt~&E7`^paq5UX5w+ct?h!1YT; zd=C8GUF$Q=ZmxeLhiqZe#Eu);csmI!6yg4np5~@A&w4XnFsTIvnn#Dd!a}~SO`~G; zfXaZq49m`PUq|CtaYxJZiDwDe2K5`gln=wp05mX<aRGqJ01S$(RU<0Qb0LOY){89& z$I0N0)Js1Nj|xD@tePjIqX0QLmTZ~2d`n|-0*(a5u%Dip2oKZsM-JPX1_DOa1v6p8 z3GG>(xA&F9ovTL7yr2q(_rW*wxAm*}OIDeLX7z!^|5doZQH%y6PR0R~?;*U=8JMl) z&@O&w^LjW(XV)|yn-_CRt(ixPdySoV5UaPvoIb+=u}}jh^QfO!%dinsPkVTxF$jc_ z*I4~SPEklNmLrc;)`y7v!S)a0L!wTM1s!FLHKH^7TeZghd$U?xt-nTbJ^{oQAG#V= zpit(Ni(49f3E3BkP4y+reF%$}2)h8-)k_}SfgCR1l4;vwpO`TnqAK5<X3e!9)DT^o zSlrQRj_8UE6wJi6d06A3Cp|#N+#DSsBv|d<yX)}ARYNq1pW;vJNAs8Qhb>fFd|(R; zv3lHt^TZsnWW?8|@jjE<o_J#==uhJqj}_&>Dh52+0gqwPZJDuj2RJ)n{joYAUoIK- z)N^To@Tas9!z9VoLLMLC2+4Uu%iLb;<C)w7gIRCGQjjoy5?bdpCW4F=(lgcS?TdSL zmC4%5Rg>&DzdrOfNImtrUSsVI9S3atm4-8D=Bfp%>^BTMP$?Zxnkx%YRenop27*!c z*g^v;s(>y-(IDPvy}FIoRA5bB$EXqe5?5$`VIey%8bY@?VcGdKlm$y5K}ny$=p|j! zt6e1NdCs)-{Sn+%2Fq4tazBf9E6z$)@u^?B-B_4xWw4)meWvDIIjxyfvMuUZ1&NP) zlftJPMk-$gPW=v2kIE5U9I|QvRt{`TOvX&Y=Hq8x+qM<`_r1<aQ3{6-8Q&F)-$AQp z*zM&V`{4&?U-CKjE7}vwaRsEco}6o^iECB<kP2+=U%O{cbTB|U8<K%G--cu-{3ILU zr5!uIkdxcOnV7Jv?JEzky6_0u=ro5!4%nNI3z%2aMb3rJnco>XkQw?|+za8Tw5!RD zK-2kyv6EgguoIT4FXli$qHxtyHnnDFfU$Z8gC9qqB%N&TiD#N$0^nfd{uDtb#(xZH z;Epuo6q5@I2)M#(dOXJ>e7*W-Ot#p-5d*Yw66Uz_NV~l>d&Lank4acqedBn|3DOT( z=7z@^e@ecB^q{#1q(4he-{#`7c5vUTC#JY>PA5YCVKooN`XlbVhX@hR(t)IEW>+=< zWzgZt@{9pz(ZYt!a?^#`fOBf}XV_G=cEG-8Y)#dCd2ku3eMZg!=MqHc%4X@>@Sva# z`(eM3%FHcrdQSGvjvd|40JGkojL(ev&|!Pqb~R^3U;#$&@;onnuvgo-QsgO(TJwzy zp~x+9t#7Z0^!%W)U!>={rn*Q^1yh$cU4+eVL|yDD=Fie51QR_qbZ(@lAaquw=d{q+ zNKYX=YkP`9Cq;V3!k~qX^%0StGeVfkC!%k9CWQt>dd>^=6BdDV=qIxlYY*Qv2ZGNr zU&3O+LOBe$KmhmKFqC9N!#I>2ktTb72s&s3mOYcru9IPoZn?H!Rb=be<>9d)J-9K^ z<cU=yHg^kL#KXt8TnFQ<t7Rg+-P;+;*4Neep|5L2KQXIrpgG&u(=-(01HH65*S!i0 zd3%K~yKxU>x0wxA$;#T;(Ua+i8JMhr8>gjXEA2_2@Fa=RpLW<!Gs2F@gnnYgFf-D+ zL-Y;454ot`F>JyoZL;hjBcOBa(M(7vctb$qaBNZSJ2?UTV7#Qh?_>ptTb6`LddQ(L zdNbEk;MW8qiEQ{Z*9=N3b-I-dyy1qch`LrZI%g7dwaqKMi!t#JGJ_x9feagkQJ%~~ zWFRbaEyQ7Vq{;Ej6ymwj38)zgKW3|aZ;#r$@*`plLsax?oE-<&xaw|+T{M?;-XzV~ zWSFxrL{SH1)A?qm&lWCYFuvl5vV)714a=918`V3^3+)iw_HKoZvGm_PXekyk2%b;~ zB0;hwi9`4x7h%_$m)J4RmfL*?&3%oK9%g^jT^Bjb5XY?YxX5P`0T)q@4>QE^UWPbE z1mn{RHzUOHVF_`3K0+K{Zo>ml<gkP|J|7t_&%^^)<gkP|J|7{DFX$8Ecpf!6v#YSv z@-o%yk74Io_K5tFHzCHXRlK{iu0EhfK8jV$A~>AUt{M5<wtOP?y8~({9z&M+6R$pn z&S@@u9zT2?u64BQNQN(PYo^YCzgfFc^4cwsE5&f4w5j89rUPU^d@|`s4)~8CSj3g$ zpGbgA<IN%d`dV;hanM$c1<(ZbxQC39i#eNz&k(2s&Qy(33zmnOt~EblLBz5$RssjZ z1Jx^la`|dD@?^F1KePbxo2&F<ncG*#8xiE~rUr!_2y_+JvF^@5NkW~Z0mGVj7LcJT z;jOL@MC}LFh*ZN+Sy5r`LDX{4K3)A=E}6vkZR3k9f#wxNZG~WRBjZh6+}0Cx1Yj~O zP}?M*9S)5znf)?!00JUgudbS|)s1|b79nO%)+agn5_0~pr0gJd;m4wG0A0%@El?42 z=4uTW7@rfn-fqpGIDk6+YoLNiebwqbnq7xOrzj3g!$A^to|JI=RO4>+4BZ~N<L2gw z%SG0D^)^UVt9FxMdRv*-0%{7qscfnGJkYVcHE^Xn{BW|*15?y{@&o>kjqmo-1F763 z5RNy!KKo^vtpAE>Q^&X;!}uMc5$102-BbvaDuh?ZNP|cTkB8n+qCP?waAhBUTkkqr z6uMPYsNf?_A=yRaN-JhR6XUapQM}O%+Dr<l7LKP{=)wKcI6wrxLY92YH>)biMsQB? zfoeGR)d8TwOu--PGZ=$Z*N0L;H<*|VHw#-Y9^~Ad%4sBX-f89h0<Xvr)Cgj^r6^Ez z%}EAbsRgvLiYW{I%dIjDwH@g>0Y_)QpHcWy){CG(0m_1<i+l%`{s45D0cSA+1>)GC z?oXx1bys_QBm&c8k6gVwTn1S&`xavm?SmB{jHW{@R{JG31IT;^81bA3rQh&t1~G)U zQqhw80Txz1X#IIm|6!^XGg(om@pckxIJ{XXum1r3F--;^E_(N?%SMr+h^h?lYYoL- znuiNvr+WQ>n2Q=`=|Q9|!0e-1wNj8sZB6I}vR=<#GZEYf%y8B`+z&dNzAV%ofS^gd z5}XlfA7D(tAn~iQQ^BgxRTy<FKR8pKO7z=7>Nwzt7h=e{q!Sd%_t#@z$eVbD43UTU zM)>7H(8MCTw0|&-N^f4n9LyTWIR8*8{Mz^aQciu&0AL}yrt;zxFUJxD95m7I1+TPF zk>H0I#jXDmY@jpXlm<gN<-r7n9`>k9A3(`HAQgJBL9oEib?OX;_IJDt^)m<&Fm~eO zP$w6l1C;MG9P5;m6MhjH!7EVHNL`aSF44OYhc))$QBppjyUn)?--#S_EUPIz45<*a zPxftb-2ks^-Ud)~n#CEe)(^?;(>Qz0sL$F0aq{k1zQb~6#Q?_7eiZK^e4JTZSpIS5 z-b3#jbA{b}t?(5Nw(;6tiRPBek}T_>AEK^UJuo6U0t=vijaCmp#+{sS;R1OY6<lqT z0Zdf@YmkKwLHQUDuXAJXL0c$40#eyr(X%iO8Qgg=r195xA3_>=dFEw2rgENL$}5E! z2p@L=2#u{;*Sf>do4R4F%^-rljjkJM=QMX0zMTcw&t;U0n`quj*wg4cGz3`0a!31K zbKO9-x$VtsF2gOX7+k)0mf>3RnEhN3?BJ;>f^k`2_zv#5IMMt*<0ye_FG8PwsK_Fl zYwcsmk+r9=C;T>$%$tO2&Rd$D)sB&x*Y@VJ`-r);0N7-8`Z`@Vz$8pn17;i7x(Xm~ z?zWJ-@dmsxjssfKe0}tg-9PF*)|Lx@!Bd!^Apz4ImZTFpwS}0}k|XHxmkb`wh(BvE zn3twvMf_>w^R!=&=u@!0Wo|d#XPMOoDH4wWTfc-ahu09Ru<VKJ&%t;B%>#_KiA6;h znt);%C3{sNEX0&K5KuTrF$%dnW<BiM$l>R-pNA1is}DS@WCQd1lXWvNCQzhP+iL<E zzWW&PpNGY`7yb!=O+*kb2~#w{=Ykh=A+bLA9kpI}vX<lf*20-e{|l%$5TVYmW}OLU zgrKoQ(2Oyld0GU^5f%j9?|nz;&P4&La@J!LC>Vr)IK~VR@PZxktKmyuhCZjfxlhKK zhnuBo+9Kmw2c^CbihJuD5uBlWCnxw*)KuE1CU>%?CAy{p)Z_sMtPS=;@C>UvTdMOO zRbA5ldp7hz8esCVHhZ(S4*ew-LiR=QQge^72uy?XW0SSMLa{ss(Y^T;(l!L7?t5FB zpOo(o3fx?O9Y%XTfdF(t0LK#Moi5pM7GjdN-$8&BX6-KA6Nov-z=S?Y-aBy}$4B+b zUoLtGjHjF=pohTxW-(H|DmnTkdrZ$C=ZqJ5%>|7cDh8#HySgM%Lp_W8_Sazk6`4z$ z3j(p8C^0Xr_89HxT{P+Ce_Bm~MMqCS`2oyizY$Ub#n1%WGuoTZ$m%Ji{C1-aIoNHu zHkl#(KI^YhtIiW63miPn&45($seXKQ-^WRQ3t|@m{5dYY|1Z#}<si5$`d{O9B&RJY z?8|8<T3tU;1XPmK5HDTex2D0*4_<G<7v%?4y!O^Hnb~zj6}Tlrxa%JxYLZpxhFE{K zeeZ#@zR4an0JL6#>!U3*<UDW~x;t2HtRipqQ!~oG$ryDijt)wu3PegDq)tkqjNwL0 z)DshqVTq#41l6Wv8liG);g9_t_NN95YO;~2>?r#aEBRLY(}4ds`_lk*7or7&JZbhP zY$RrAGE9UyA95AJYh=w%gFp17dRzgaescXcTb*F8kdQh81e5$9d?dKGI*DqbX{=8< z3{ro6Ll0oFI?dPU$X0_`odOQT3@mN2tWIfWrX;zz9zN3EG@?1(-b6nq-Jr`6J%5n8 zNLQG&HwkUU-gF$!mp~*OVQ&(p3_kW^oxwPBtRB$1ZTV1+IM@1Zk@uR#3J@L8(7C$9 z`)*l#_#&*O;X?_roWQdh+v<(p_Oce3h%ry$i4+>+TEDB~z3j;Q=MCJxa(@djT$-~1 z^9<e-@P<r0u|V!AdpCR`R^yG2u0G#JNa6LX&(D;^qptN_!Pj8XzAf_Zd6D;A9q$rm z$9v9!8wYMhcmoHn75TkDq(#Vr*i*JAd@YOut~K?j5l~}G1hA{^68SB_U2QY?qb956 z{q~7Fp+Mmmsxh~?*1J(f<h`7Z_njT@9XD{hYrWrA?pj}NW6kep1CfC{*(&VXWVmiX zd^W~Rb&D9a5cs;R$JIvn+{od6t~I+b=F^e*yZpA0=#n2<Y_6;AY5u6OTNpwAPsga^ z{o^9<Wp%ulXJI7RIKK@&574^_Km@&hz4SR;_O+|+Q9%!GbtQs9FOANY-xhjMnt{88 z-YEHD*SHSmkD7iKt{M21M!k;r^CIurI^G+dj%$*X-;H>N-F3r@)Otu)ItG)j$#?>k zA6PJqj8)UY(<$3*OJO+=Wv;RbtCGVUu$8_?yV4}G$kLNw!EW4xJh_ZzoZa&Nn3nDB z-t(L-tA?zqun9LJC;D^gnUMooja!iOMCNq1yzgq+{_d(FR<ZLcTDG_JmLt!xoF`*x zIjrW5Yf<h@W<9Ru{hXHVdvrMfIS<8FRog0#4TcWU1e0N3S_{`m*BYGkO#oCmv*)$E zpVhLxM}q>~bWq<3nVk;nJ$iW$ItU;yCdkn(@7r3of2~0RemcniZ4K<5KI)idulT5t z`VsBcP;0#Yl255fP`AM+7ax!EW{I^EuFE0sRK#qz<GaeY51xOGIAGUozZ!Q5&a_vn zJMN|4X-5#dcp<#*usZHXL+u#9x<S8DL3~4K^8^<Czq&HmY($+`KX?&5G#v)5t)EZ^ zi&@{*dJu0*4X3`Asw6QbauAj=Zm0tRKiAMx5%tdC!o#>5Q>s4hw0Ar-tGQmI7I9q% zEaaW5>F>v5#Zj(yAx~tJSF8x|e5Qvgabk!gs8gQm05**a68`{uE+|RJCL99L|J3pT zN5)oU1b54Z9OLa~if2DJ!+y$5l{`@p0jUV5&R&~O>d~XG8fedeI^gT#4%p0dL><5> zLk^zEyFHPu4#xc>)raBeM7&<#n8KFHwGHuejfav=F}S4=KgFP3McR&HdBN;>t`1(s zGEgV!L6HG#TMNGiskdH{`3-n^tJOQYQ?c*HO;Fxy7lYGeo%+k!qLcttx}R{tnGa`( ztMM+NZnxe+AJj^#weg?Shs0y!m!}Co0YDkz3X_s~_~hc_RR`XH6=yfxF#TBY7OCei zVpw~J+2i}CtF;m{jqi}Fbuzxqi=8GmgXVgReVbja)@fjI)uD$(Ib-;audU$~H(a;m z!G;{Z1TQ9-nOsns{{+_Me)Tmv3@PZr<i%X<)ILlfQ!Kfw)lT669Ep?Wd(ix~cvq)3 z=;tVAH8HOfGwvuO2ka_@4rUuXTL5y#FkN6Z%3b;xCR$h9Z}A)oFvz>N!f6kcLR~?0 z>d~gV2KI#_38KxlAgpv}iCY+5QbrlMNyx?)l<%I2pA5hY?lSA0tIv0M?XLBEX!(zP zlsywxsF7qm9M8vi`<MvO`1-|2z2ch->i~10Ly@CKU6;zS)5-yx0p6BrGf|DYpb;m! z&E4v~1sEs=NlauQfs$qFp))}+1!@$RpsIXuZj<lx&~@nCa-R1dAU^)&`zdIc+mEAT z)1Q^?4LmAFt_dl2pI@Tc9cN~-V1ctg4rY{mienkk!8nxBeIcZtaaIz66p_K!UgdpR z2;B`$JYn#llkSKLt0N>&hLtCidG>*jlE-+RDXYK!xl_O-mvMR4`K*slfjbcWf+oR& z0^G)vkzhfiQOC`L3djGAEkd}A@NslaQupHsKFCfFpggXJi%<y0OfOlpfNSvri7`zh z^(RoI$e+lFF(T);xDv&tD}1yPuLf((9%BQ>YP~8i2BE>rH1>@N*2+_i+zr4Vtaf5L z>U#NE3tL%!;#Jh`LA^z+R(y7_oe>g2<-w`0uuFZ69t5_!)tzd0>Zi=W)=sG&z<Pc8 z+R44^OR|Z*x(1>|PPnO&*NNP7Vr7XbicwgcAQZkl`VX4CPgsJ~a+{>;PjrR6bI>I9 z>h*7_J>3`y6tq8J0QH0PPCsgeSjFwu_kArLQ)~{YQ3aSEFn(ZG_ABQFq^@jVp}Mib zON_r$R^G!tk7~kozbJhU!-%s+{Wm)pKqH$9*l)$ya?1*r>@9cZgvJINbYb#JvhXA6 zh5wjVm>oHR9a)_0$RD92S$Vx$Hm<iLN5ag`r|3uvpGyF;n+T$XFdg^yAuJO#<KyOp zY_yhq&>s2`EleI9M7~!%-#N_u=-v<Ebc*}p$S`yoL;L{5!zg#aUkkkj2g+%1E5lfY zhqyhsEbc+i1F(Azdyx^|GjM-YFCBtE)fi?cG5pI5hZ7LaFjK+P(JHC_E3Jej?Ac!) zLVMsO+%dw*xC}Qnp$=$qvafuSju|QKpCbDSVB|{xosb98;^pZSLPoAfH;mgm1>I1f z!*fYDN>6MCEb_lDHfKH*MJXucQ|19_$OP~=n(nSP9cbxPNZU-sYM@S(e!&C<?MeF7 zmw@JcpTwwZhhWtGJCFvnEN8c3s~|i_M@l_Y;<klO2aju4(b}3i-BGEz2a=yICTM*( zk3Jdq^UqQB%(v>{-RgdI_4{Ptiz+ce?Zym<-Jg?mJV+^bPa1xwTIFmSKN!+~F%P9K z#u&8wY=|`V*Hm>|(~9kRUN>tyo>AC<FkWsfFUM+7xC_@Sbl_b#PxynK=?g0s?Oa%@ zO0L1P9z5Z-0iebAbVPjO23EHEWUa0teg#ZW6aeZFdPC>W5x228HydHXQ{w}|s(IDw z(y>Slg%fo0hLLU9a246wJVsv?Aa!IX>o{H4QL;C#-5AJ^xi#vfgRIFuhYM%2k;Rf) zehoW8`&&WCn)}T!czWd#v=R2Km4|q>TzDYv*R90t=Daw5{mMg`d^8e|;3XqZUF!!A z?2uIC^UU}qD-ZET%<wsqgBLJ3alfpsvg3XCz>WIXO#FJ!VU=;MA2x8KRoWgOC4vlN zwnAdcfR>G83wyF?QNxaH$b|u%huy1J$O7$6IM(87<3d=3BSzo<N7?(pM_nF?|C?l! zEMZ|cutL<RQCCfyRHH-%gBk<^iozx_8&D8!sr_{I)V8}wHH6R&mE}Xwwzl=|YCW&E zXYaJ<wLOfjA~6cmT8p+?tktTu`ovX>)du{7`MqbJ&u+32z3)$7VRxUu^UO2PJoC&m zGtV+^wnf1`8gD5u;<G0w88WS4k3WJ%{x>C77OLQ)A|@bTfc$_P*n}0p#>%nvJanmj zfGvYb%0M=-@lZ}aX<xB6z|KI6o_}4L`vm8kjp1hb411q}jp2<8i_&Fz;{$<5brkO8 zm?KsSt>)dgMn-t9)dQ+f9jx$Ugt=PW;qrzsb$LUWqw_W})5RoaO3c{{0h-~XME4~+ zwMX+KwIfoaX^lY@agQ1vEKY{w<`&QisX)Xf>AxHp9t`s~`iFFx{>$Hn2mQ&3I64EU z{C<DmpqxOHlSv|Nb=msAjO^nm_N>^OG7H!q9hLJ!uoTzdOjYxvBgg9hWF5(y)sTi* z(k`9xtgyzV$S5^%)d+v`&{=AVyAvM?jHA!^H32z<ke1I{9$l3Rz(7}()#@&L>G}bm zkj=aP&<z)GfE|hU?Hwtv<eI25k#ws5z*e^&0EU{$bIlV6vX|XiLe^TFwL!APddD>b z2a2=v5lr_s4WgPBlEYK%zuyqV1aSe6{NkGT$}8*kmh8t^q-cKA+o@->)9fv-cJg&; z=~<D=4HBKx^mg}xrZ?BlwX9l8+(HSWAxtvYp(Ker5kQ0R7bcK&Z&|7_0b;FAfK<%P zI)5c=w_)fz(qJ-rrEQK-1*(wK=DwS2u5PqBqM#(;G3QEi+`Pt|4}=*Nn}FBc0%?xp z8pB&9;@71rjs5bb_j%axWwjxPV%B=W+ohL8*HF3C0pH-fN;rc!ML#IUP}wEo{`{aA zNM+}VfAoW5t)89rV<nK#gGcg9Dhcn%9{XcaM<zoLR(q+!FS3&!6p2X+$>Z!W*jl+( z6rWA;V@{rcT)czFnK*Xx8nX3PH?wP1RNL92TPP1DXHV#)(DWknHBQ308=6YXjCBli zhU7_|%naJUl#x_5?MaCwxEuu3#E8gq-g|N`fbC!_3pmd2<R7o*1ZtKlf$jHSd&Nj} zgWngZl#?1jSN|Ink>&Nj&-mnCNm8~;%Dg_mXrtuXP7_~{#FIq+1MfuR0`Kj=>>*KV zNI~OZBMx*9D^}9N%m>9I&R#OlQBc~<yyNu9DN9B+o0;H6?Eaop;Qh|q6!n14b~3sM zhGLwtGPnlQ5((CzMLORB?n#V_ToE;|zbhmjkc%M=1UDPa`E~3L>4%#Kt#G2`_HVSW z)O-KKx@XeR`BG!XW2|~}u2+Hm<L(d2EBErZn!o#5iQnKez~}EiEU$c#ztj2tHlKO^ z3am7y?}v&-y_^jcNnFyknr%vzW8*uJEsV-OfG$?1YTO!*a|K@%{%{1(Jl5+Dyvr_e z9}*5!SYEBwqzg<5i2D8=!cIuM3}SPIZXUSA9pL^_sMri2I+kCBsZb>{PYrBo^;Fqy z1Y|H3s}W2^2G3M(czVov$1dw|Vq(k;T*zb36-;_H0V;VIqgwRx=@%w0%+;QfuT7t; zsr|atMh;C(Y%^)8%?sdSwlJo4dA|1VmB&X0dB3cD_PW*On|{^vqCd;V{phAl0}UPX ztKosmlI_C-fuxw2`*+Ou6(x#jeq!5@sDpUu!(SDuv~PBZW+%!vK!JJDiMB_*M@YX= zlJD`eUXQ~AWl3I;f3($kc?`f$5~Czh@)3aj`Rd1d)n_kHeR}wzQ1ZA$v9mM}fkn<} zXa8W!5Yz(E`O%4jL2zEf?An6GL_t|-c6)_#)P%g<DD!t()!6xKVE$&a-@r=ep);uN z3u<JyrE;=hK{c{`qwe$M)Uy0kAJp_#sCS9*p(~@Y^k2(a@%7nBYQId1aF52O=TpI9 zLPQnqU?tY1O69|sKEO6~BK1b1chB|*DnnaK23`<(C=%MbsA%rMi{Xg__E$T<ULtl^ zKF?;%&7Q4w)OLpeUqy3mk-1qO_b!pbbF)V%8$qE_`Ks<tOx@;RFzAv!z!hnNi+YeH z6{u#Qj0KXo-lEbV442t7q}9-2a=b&Lx)kAOY6VtJ8~M!o<rfXrgtnevKNE~aS%$Cb z5uMGU>%t;1G{1>cUDwmuV}z+mkv1w#uOJFi%-o+Z`Y9<&Znc0E+AxU3K)Y2QpJ`zA zOgTcPxKUPd^C&a<fS_fXI?`Ses63ayllhB+&I84PN-Mv{r+N3)VO~1HPM}#@?yD}t z82VI%P`uTL{F}aU57e0`23=?lLz{Z!XKN>;tYXO=I`Wh<{bZOYBvZeZ`j@OI5sw-C zJP>4Z$8KwH@X8@M{{(_JyYD%XJse}*x4bq|6;=d=j}GpmAqoAOI-F<@ivt*loTt*2 zAn%!#mo#G~fd|!MzZ^EuoQSW81_U$heQ<CIjqUDnJ^<2o(|T0?l$@+%UDe3hHPQ;z z)|%re&4vBroY(CYZ1iZ^AGnxbJJAbTBpqE$<Onb;U%e$_?_;Mio_6<{O@mR~gShnv zAwhS(KMobw<TftVW(*HDCl|!bGy`0ZA|nzEZByl(UWt(QIB(3bm~hyUS5??QldGVI zYS@a8MctN5Tmot%EdU+teRj>!!-F-c1$_$<*p9e17}|Ev!;Cb|J2f*AEE&71OR78D z-QO5eWn%(ulW3L~bW0w>0wCy3k9<?3ZIM<dqYo<AU-A;NI7@^vp>sO|Y$x&7Hun$U zt<k)sdkH#&uKS_P;3kIJE82Iy7qb<L@!EwXR5E}nrnfyefGwl#q0W=$X6!Q9x+}U_ zdsi^OJ&3Np<RRm#!b8ZTI?yZZ%z>agfF&0O;)jVpwQ%8YhUm>B$4R(ecfEFrO6@Bo z3c-rp%-IRlU@s;<b(FvLM#U)4?bSC#p^3Zn!BKg~^BzfmMz{tdbr>er41b#mNF$KR zl%2g=fHFR>tk`CS%|+zf)4<^?bt$-;wFegLWo(P<9~Ma#m(rg{Me*kDI1Ym?-+c(t zJ}!MqeAli?F4N1WWGx@X7;}}9N5{2|V3kjK!qP|QKj%aK%YIe|D<v8z0l3wCkJj7o zHDgQ8lR~v0)6C&?=chXnnx)+9<st13vXbA?s5HnHvJVw<4@Vf%8f$FY%&d4@Hdfn~ zXG#tC`SpMC`7ZT!fVz2RE1m-21lZ1}V1s}S+ubr*gyYB8zvx4L6^|a(31@>$@jRAB z4615I1y~LR)W@==BsHKoc#XEy_GBL9jX;sSx~V0QigE%HC8ZpQBAsn9&k9QR<wt;r z;5gxIi>x=w)Y5Q-@;qaiqf#CPqm)d#Op5sq*Nr-d#3U!3Hme1glATa~7`7A#*k*In zLq)_n-EVH;Q{H>M(7gGSswZ5t9%1@YU#R!@v?kx1eaTZ1B2MO{H@Tzl`U>-V)wcSx zr%P@PvHUw8JXCsKt~zFa_Ne~f9uca{PD>PZ!s(XF``E2dOXFcU*@ZKR+9z=piQi$l z3D8vuM~RDYR;{Ofk;papaMQlE_4|5tVDwO&JW3?js=5!&J-XK*4u*PfCr5B3IbcTB zP+%(3+1e(W18r+9WlHwpn;6E5k8(KmMMm2#N|xW(LkYqU?E;2{QhVZN?KRfszHbKA zkyH55OhqDOFv8_ka}zWH?g;i!YInFW>*Wp_A|#(YhWr_}DsRoOuVh~u6;<>bT}k+F z+D(a=F85r1al(1|Y(13>s<0Z9Q$yH^ariLrE9c33@JfB^HYwtQG1GN4>b||gIEPcE zbclt5CtZUI;!Dx2O!;voIu~jWCf$$irboKD+3SY()t{Y5I4M{4pu%vkJv4}i)cAa@ z{N2%fD^LGuGWv3nyyoFNLdcF?$;;F!{K#vUg|_wRCcr|tz^!zkCEp}D4#wO$Rs$Ap zWyz7Mt5~Hoen;iEdGKwI3wK$66}I+FF%Y4>j))(Ie2l|)|4l6NF^T=#3x88vE??x> z<aea3Ovb&}>D7@`%Z=B|GxeXf^OWmG(@nfhQuF@(+KzdvLlW~lv8_?ipTHvhEjUPj zHqYFDSz&)N+L-OM^>>1eaqWxHE41KwD{*m}9vMj<f(H{0N#;W?Y4xr-Rk9LFA$FA9 zy6(5{I?;3(*RhdgBUMsI*xPCz8GeRJ46biMF^^XGWg?Wws(7}vwX@Cq%dZ8Dyzfp9 zG2W-Z3vT7A*Y8#kxJzhX>=Vvm9jD57ax*eAGU)m;MS>YhiPsHYeHoA9bv*85Q5c2Y za%9u%)jmkpPf#ID1!gVq+u?L_ql0WO!nA*A>SG$muD|w~g87$T^7Acug8!XsWQ5uy z`AYwe%`>wvEyTa3o6BR061yJ!wyY_-P!h+@hlIZ?LA52#2He&_n>i259nk6N>H6>Z z1o$LR;5*?U@Yy``y_MtOlXSCVNdbIX)?C(p5cmYK1oE&E7UGW9-bigvvw}T?u#-75 zGjrT#uCS6P$rUr>WCkWCzTj-9zeIQTGy2{G#N=9WB6GTxX?U693R|WtJ0Wqk{d#p` zO=6<C?B}Xl&_3g4P?wN+Cgo!%2nktVMNwFb->wa2RAYmaYR?tkgKiHKS%O?R0E8{x zn4w-#=9u6-B(l9Mh)U;1DA)EsXGr!r!bR{hZ<gC9Zf&D_Z^kewcyqqs)k6~8M`9YE zgCH5|{RY4Cuf0+7U-Bi_4y~8(KgcIkBqo^u4vLVDi)g@?Jlgr;n7j(}E%M^#Oil~# zwE}kbQ2S=09aW+tb8Wy}ZR<OttGAF>^tI^wbx&!I^~$tbLao<@%jQHA_?aRWl^PnO zXLVqHbvy*0OlMH`)1X^oXIn0A)Hea9Yqq8A%!?;Z2`-~(>91#(vs1)2a%8Jg8}w3U zjR4^`VQ4#&DWSJX?&MZ;h3zkcpQN~;+4I|X0_+DYft`M3<X{>8v}{mr{<)A^qtXim zm3&RWlO^xR&;!CkUH8l7j9tFVHuim8clr=PPXA8@k+C_>aN}kxF`{bmwqV;ZuP5^( zN;bvK-E@_2EvBszZ8Lc^T}E)6IP08|5xM&R(L!adNI#P}U5QX`{}pd+O6pkgY&@!7 zY&HCuBW*NS*)Iy$lj)n|kzbATVSW<lC@G*CUim*dQA+cmx@Li%9;zV6N4#U+5ei5| zpLmhwp!4@h<Ne?(1>=1HktsjkOO-2(9q$&vlksk)XIaw!$9VtyJO9^sZ{;lkU2Zit zKB`jX9KC*KyjR~-Fy3qAs*m$C<9&*GkqQ2c0`mW3yurfp{su87Ki+E=d(@hr-{%2O z#=C=_{~yNtHz@Oy=lAZj^W(h$cH^-ZN1Y@mnRWkNFy8I+^W*(1^CIItQvn$}UN&J_ z1nilr=|oa1lc*!n{Q|Lwe!OEXL{<&iHppw=b7bMbc&AjVrd%Eq=hTzAF2MH4e%s<t zUmD!&uJ)%F2k~<TNVab!r5ru^WdXA%mvLo2g%@w^4n5V4`Q5gFyny3(B{8U3c&4zC zhclJA{VV*(kKbP<Pxh}bd`TvvaDTOV=1)s?j`9#Wl5Wb*mDIdErDe_S=S$*2_E!-d zKvqL)vbj6SO?``4T7agH43-i1@BIXLB~ReJ_nMEwYx7L~cz7k<#1|I8t7Xkwiw**B z|E14<Jia7P`ak_3{o6cqSEn>O8V|vdbo2Crg8sFv`O?Aq2UW<ATB&lEE`mJjl^*){ z6vEeE{ilzISMmhj8?Kh_3+LD7nGfRQ;FWZ9d?CDA)(o5{MaRvrg;y(G_UJ+2h388q z4!uvdSk8yX4sYQg=Ecm71G4`7nKJH;%s0O*q#=u?+6;e{vb<cJ#7I-#c$;>$6cmxB zMw^S9Mhgr@2&(u8iqnqnp)5=}xP{wdo#wXf0#Q(H)x9Ov-&}~V{^f<g%`eZ#`khN; z4OIB;hmd>q-omSH;|-`_{wY~=!*e1<v1HghvPdoZy%(+q%^|b`M7iI&+In8$zPTZP z8f05pX6xQ5dWrCTtbZSuAMU##VhY3aqaJC71Air^=Jj#&X(_(F+=i>54<c5SjCw7p zJT8H*CPLr5C?H3O^H6;PtDGq#Na(YcNJ}D0ovH&7lc?(9b7UY>%m?R<0bE>K%z0yn zCMgBWmNpTbwO53J?|(^ww9DHOjZfVCV)%ew12KD{+j7@Hd4%+DEX05R9fiNO{e@!g z>CaSnJS|_DF9rE56@CkUB?Q9Ermsfy$W3IjjyM{&^7OAq>i$fmkUzJZZ=cI7qYDRr zcb4aH-shAL91uaN0VZ03Ond7?AO33Nw3fd4ywKitxZXExtZtB|HvMk+$&HZ)3=kwL z%4?VO`9HNngNn)CAC6;JBYS|{^Gx4Vjuvy$Y~KD}aDi2d`WIY40Nn%r?x@BccD6HQ zr-ylWe#AfQ!>`_{`;wJuL>()EZGyw)xIx$!if0VZ*iN*RH@d4a0RiHQO_5o{PvRDl z^@p}bX3d%SP}6U^UUnZPt2Di9r0!Ah5^Y)-NtHXlrH`x&LNONgP&!7Zsrb~>cB``o zxY|r&mH?CEX#K06`*?mMdBSg|U-40XWAn^rJx1hOd+aes(#_U$bOC$wr)e?M3d8sq zexsG%8axQU>A$%UzWxsie>1+(^QGhoykAIs6keNW{$wTUJQH>#-INu=t7XmY^FJ0| ztu*Ig@W$=2r|Nl5X%X{gnZ07*v4iAv(}TC5F5sYfBzwRz$5fMjL|7}#apd>|!EF7J z5)8G7{?3X=-1u2SlKgS=F9DT1WaY9j><ejL^#7eLVd{&<A#<`Pba?V{vN<kM!IEMN z8#6c1yF1zWx9R|~wGX=rjaG}AQ))+N*!JV*Wcy`jxwPqp>v?Rb4midvSXrOiP|Q5R z@IErX_CBQS13%X(*rA~94T`cn{hJZ<r7J-P(}y3fMyHX777u(;N6EF>=dAytI~nu! zeWXgbjKHj`1Ib!5lZviE-!4JkKL_OpF@GO)w0Ai*%E{2ZTJI^a{QA#a27{m6I@kP* z?Se20KfrEj#CaG3kTaQBrfoqE!sx6eK)ru|O@vYLaz0zQt#i$hg00u-+gT{0r#EB2 zrZZ;D|3m4%+G_M=d3Bf~+fjCam@}wfMms}Xlv7}}MD*u9b?KACpmxA{o(^b;)7%PA z`;)ucP^?ojA`&8l=4+tUC8{vrA^Is<qNK=WJ1F@6z`5xci{-vu?9arf!LMf#|BvIJ z;_gfWxyUvgdR{49ZhZIcfvw6pHQx7?Kxdpto^n5BZlzK1o+%N7p)xOM<7pidah(7> z+^=jZ>)pO)T4?L;HuK@ha<Pb-DOq+w%Z4}Bz1-Jz;)t*`;h0ipJHh<Ml;J7EbuSav zv~O;JC@F7rUzl%ij$D45pXAFPx1+pffu)B{Ek!MJY3^9<(#;h~y_)4V7y>$!mrDR* zWBG!XxlPY?-6Qy_TO%r_$O=>!mt35grMpf}>0!^ym%l6YsjMFVT)e1LU&ztnY1k=U z%P*ZiVMa_^4d>_@9==<tVihFPHKns;Pm4L*)@s_@^(&W)G`Zx=t-mt?M3g$G&cebp zj_HuFosn&FngPG8%qecUCdSOC=IE@T(V4M*R{2Va4nL}-vHISv`~5z5Zm@$(<}0H? z^tAy|>&c41*dIY`wO@He<_gpfF>~kT-e6LbGFOCk_*_{=2F>4C8VtuT4i5Tw$3$L; zGhfXW4{Z_kiaV9nl_E{8F|i{@0mx&K=BHG4_j2*b@jTSKM@q6xa0!_8dFf8X1ARV; zs8=Wn!**l1bvDHqF+yXg_YSF39y1%UdEsQ0DQk6?_|18F?L-R7j^IIHR(TDw*h^yb z%^vN*-(*6YS2Ap@$_TI3VNMp!$&I<C8OzKK6aQZoLX5E*#GKAOWp!(2ZqSrb6d*uc z73F=|BZx0&8_iB(E+#9madVqq63Ffubb46+ZRQQjOz<>Dwo@dI;f3<myZ_zC{6KkF z12*tkGviq<&%zQAL%3f+IAC{aza)V(G4^i|?SF$T<%ZTaWl5r|iOP*M_Uhl&Lr@Kj za!U+&^*B1~sAL5ilxllzBJZnJ@xIzxZU!LZ8V~<J6ATN-xFAp`5hfo0tMD|Pnp-4G zWb63>_(|Q<ZOq)&6HyxpV=^g4Ijp4nav3RZD_<eS-QUUDSf+Upb9bXVBJtk&omm>- zN|+vIe@^B~)X#)9B6B&Joh{}#trKQtJWdDUwz+1irubpQ-)H)2+~>^EOuXtcU>;0? ztdI^<eU>f;0YaxBW)dtir#Lswi8E9k2M7MzZPIf!u`D%?kA}z#dtCc8>d-{}&iSfO zmob8d%t<RUVexMr!(l1qmst}9ellXt1fMML6W!;{*H9tw^;maxz&+ARgCne3Gy>Dx zVZSpfgz*H6j&gIMpp-KDFa7h!%U6;o^2)uJ$sh~Qb2iV^>&bkKd?o27K1(X(&+A&& zyv5pLRC&=x`)53IRF@AV+fI9vmo~-8)A%Q}VY^U4ON21tJ4MJi%V%{OJVzSo<gQ`c z=j2{Cm}!aRG#Py@sE-mA#(yZ1&Ei$9=5R3T#%JPxcDXb)n|M$?#XL1PkM~zs@Fm{d zW?tpa*lk%DGmqCx*7>dGkPUoUP2_=EmfKnA-!OA!K)GJ<1B_R-(GL%KXSySq?%JI# zHOk_;XJ)!*XS!Eqy62hg(*@eXn~?t9pMY=46MQeY^rQH;dFFm)>0|IM>E@Nw3-GOF z&HAQ;<D2uoRyz8=gUGW?MBW}x4sbzP_(5#(!0AoXWIXDoqjM+!K&r&EtAd02hxRgF zN)yMdiu+~%P*2tV5xal==<n=bvU|%O#*${`!P~4b2=Bx6g23U#tdm4xc(URY$WCQ2 z?dDXjHH0sti00m*!&k=&DR~bgirMP_5$ltweu1js8;R)nSu~Wa(k9|&%^8XadMVpk zLhBOT$Ogxy6*;VDI()hrGM<i3dWg9a0d~6Me}RM2Q&ezX7cBR@BSa9it+tz!IWKsD z&AU&a@nhY&t8hfQPN9H@t(^p)2(QeXxPp)m*<Bo(R}6~SRImWNsJ(Kbk)fmX*;p|2 z@C9UrwIc~sy%R}aMvs`@O`sUu@#d})ud7h5tFDVncEImCEZ-4e(f_@#(6YBgGUebT zXQ540<%r?kYvpA;AI`hBuYRD^Z6#?z2=B(wzq`-8!A9goj<Zt^N%%GHYQT|Iy>m_j zF!)>_D#@euJTgj}T0zT0K``7>uDjr8taSZ>{~o+R^F^bm6m-@976|XO(ElgqU<}46 zKYE^$JXtT(SI7hx@+X^THqTR<$hY7~y4l(&sd@gSWlif$NgT(YRMQ~bG|VN(r=Sh) zL019)G`xxU2*u1VxB(`O<}z#Y3RMaoo$g-cOGRvl^KFM2ty}J{UL^_{)gNhK)u35L zD^?pd#1e`ilFMD{Pky7&bA@HG&;1u#guub!5gY^0VV8}<ljl9-;rZVgihzT{6ZEBm z=HW{P9%<5pCn)e7`4M<z{k!J~Mvkx;QQ2LU!g7au-YO=Yx2=#6?GOseOY<Ks&*j>f z@{kLMozh>*?hcNb1;V@v7Uax&@>m?dc*>YDO;;Qz_2Kxi`OzizWSc70yA|$_Tg@pK ztJIb|IC=<%zNEiz6TILc{mmHL-<QVrcc|@eie9WAW=@q3#fdvLxzpTvlS*^8>&1Th z-g;54Z=Fv|Qb(o<V120TbMASdob`LmN<df)T?KZ^67#h5W6JZ6w;X1wyz+miOQplW z&SsS&lxX^EUi|p=BYCoZ{;*6iSGay`o;iPxQed9`97#8;PgYcu3cmcB7BiKnO5(Wn z)BmT!{`<f8QUN?x9{u|3$fG4#=w1`)obg5+IaK|j%@)NIqwGF2JHguD!oBdI-9Sb{ z{LrgfiB41kSC5;weuQBaG$N4{596LaIFdYP{i1LWxbu8c5Qu|=>Fb;2G1zb_Y;Ii6 zEX~D}&Auh<wl_oLhb_~&k;F%+$^fy`q^EGJgVCig&Z;n9_qr0Ma5;u1Y&XHww|LhN z;VYio+01TQVljsy+ong?E>rkXTJEwPNHEjxDL6ixHF^!^KU0R0svDuLxVd?3-L75P z!#mA4*slra5;ilr0tM08Z!$V8>{Np0*m0S*tH%y3tzg@^lT^^&R?6UYzS0Y;i`<3P zyfPm5cTY_3^8Z2zEVHm$cu{xhIph=KHsXB^r{62;_LEjDPyXt+nshfoj!!17S>EiO z<?Ei{o=YV8%1o?A6N<VgX+moeR?ZV*HR~^}S=R%gK6fE+c|dWeb{1P&=@0&;fF3~i z82;|j=jnRMQAnRcSIF~ssr)^<={S;Zo<6aFKDDf|>vbG`3jM}xrOJB_E)R{uBeW~) z<v;WiqYxgO=bZ<}z$59Vr4Sx1YhKhv^ig<5`xD$qf2SX$KbvRn;^3we>+vr~(#_MK zDHy+&HDCIe{usYjs#LR|kHRB{DzZI`!b<jjyH)??QJ=(hmNY$%M6dyLwx5jY*fKm9 zAbEsxBzG8;#25|YpE1zkEv%$ftY=!Hmkc^rLwimwK;t#}W5|$`($a5AK?y2u{p;L0 z^W0`RvXzNgIr2hoFOebBHdmhH%U&X3emrMu;t7aVN;tpqc=!=1lmo|C<|zr+$xd3; zX?Ac~3&>pI{OM1q9_1ZszevB;vG$QCXhlRIIkxHgQDZqlN-O{e<}%jNIiB*ckk5F7 zGdyH*9AqCjTAbu`MIv0W`~pM@yOBT!EM(DdHD5ePfl_W(FABtCoMOMF*b>&)NE^tN z-?ZpU&-4>YWTBtxF<YI1Pa_OMTZ>s~>u`#FOrf<LpwNH43LKkhuj=_fs@{N6cQQgE z#z=ULK9K7*)#%9Emv&~#uw8k3Xx|9;ItwGMW+{c72gc-9n5W21KOEHp9Q6Zjt>zfq z&^*W8wO)W>LIF&}a;Ad~_UD#Jn)a-1;YfhylkU+E+)c9Tab~+AR`>JY6Pz;jsT%hw ztlfVCU*pFS+DvS&xhmI6*S1`ITn#tS08WZCGYLPiE*x0N0~&;}ZPufU(Cg09<$s@A zxsX4KmHt3}jP7qQ=f@Q>zx|tv(DYa&x@^&E1~Le%&~t{#M^PXz>Bho4#dh5Wj*<3< zc>rSqDD@9*d28R;V9<8Gs6AO`&O+^z@&S#0Tg^)&fO7~Nm%o(2^0Jg-=8c%H8Ks+i zc^;mSYMhrtz1{RIC*@vZzv`C_-{FhKyjxV?YW@j9A6JoAwin@BmGC*mY%%TTySED6 z)nw+1{no^Gcdz*?dIV@*$|NpoH>)Y2-<P&$=0?mHyq_8+kCdqC&=wjpb8Bf~Qu_KR zuRVBsExyZ%stzt-pJ-D)00p-Z`R{l9!t5CpXy(U~9z1iIY<E&i%soYJ>YjS0z?TdX z;yqb@=4Nn;UGW05(KbY&<$JSQo;}YD;&;k9j_#}7Mf0#Gl?_|$ui9nZ%dZX6fGk?K zeI6nuB`b1yN#o8HY@<?m|7zKZ{I24H-xC*mzoRj;<U;nWMYXM_MZUB*J3Z|cmBjPY zMPe0|v_44)h*y2*R)MR`+;C=Y_0GAv-(?of%gkMfgaOJxmACpmPGmn4^POg4e)Z<F zZ|oa=yg9MJCeKkLFnHp;K948b$D3<13!^)mB^ZfM-*DzFXG_8=A0iolF0sP4;O}dx zP2flWvsZ+c8T7h^xhtF9f73}<vq?e4Zc7AQFId#{^yn_)wnXjk?QiNaF>da)Uqry{ z-wyP)YaI}TIl6yIp6p-Os&c<@zqEPg_0yz}G5e*Yn`tL#&$KJ+$<eare?BdV<MyZi zs+T{$f60^n_o?AeVgEMITsgjfNjKj)zMy|CYfe5`|FT?*)O1_aScxU3?sld6OqpfA zV^E{`>A(3C;FUaqcfmp6wRz@#6|%?ROVZ6N#}&Y<WzBl7Qa*~W{h!dk<VpWKFOZsr z__BFs_W1rK-CSPSzm_#c2kT$$HxZk$E|OP(YR&bBd0N#Y5^YZ8uPlW!8_af+iEUDv zw`La56;=s-M+wP7pFGF0%qu>$kyQ{k|NgQXqowzkCFAM+$>fYPZ((^PC*$lb&8jJ8 z_ELDaJWUj7ZR=|xPQ-IDQ8*(zq^>3oNYl97-+o1!l-$<DRoNp(a|tK#1GV)N)g#%b zBvx5qCgotiIis+%5-Y{1V%F(md$|%FA-qNhL~3#7^s%NQmOkX@W>)`M_vf(7<6~T! zh`R=_Bk|~NO5Wv}ZQocA$IP3*EMcPj-o2`9NbQ|i`G4Wa9G1?24b<mGKXj+GU2&*~ z@ZE_eng_y#Z^C5$yitKhb|9RB1l?+0j(jAmKP-y4h_&<;e4H(>Mqd~8C6|c)Ekdwc zbI!ByNRD4(PsrON$6jDf>#iqRX6)JI?6|o^r_ayp2ONt4w<c4;u;fvjl^3ISqSwSV z7N$u#m=;->81~rLb`G%(*;kTszIuW{&z6-95Xh?q>S~GfJrC2*qq(JEbJ{D91k{=t z=gU~bkV`7i=Ug>(s}j)>n#%J6{#3;SLO(+rG`%#JUXuE<jJR4x9Qz{z(mme{s441K zme>iGDE_xo$D;i|<eOMPfZg>sXbG!)9PBhj7=CxM_b#Iu!O$=-oPkTBvdlzq&U@@a z9=vP)K$$e7J(-F01Lkm&YwIu)RuHj<CUZg_wf%09EP}bR2u`t!;Hbn!&O9Llh35_n z&s$$tcsRZey5~kzWBdKZNWXI=GQNN4@7H{g|Niu+KJYHp=^A~H2;1}Bg_nwzpeXJ} zUL>J0y{6WeJTcB0di7$VF(`A!2*VN;Pnd&m^E0edj2tE66m+7_C(z*XJYYYtfGr&b z%=5>-{7-WKsdL)Edn@8`wnO}GIci6!Bc5mYGfa}S3Q3c@VUFgaPmYL|c^L1mBA}>u z4@GlS%l%e$sv&WRbH^(Z*7(sUJSGs@G6ne~QQ_R8>GzDLzlX>njTEPry4MH2cW)lp z{P^U`Wa$Iq>EuqIv5Ua6Pj(;TuHz(JT~4@@=8|7GJ=FDgP8`*(9jzUXlylZ-(;KD< z?zx!_ZMjWO@B~Gd=9^PXLfde_ZF5#>u}icV*bZ%3;~n(fMTCn1nS;NUsYf&pZRQ$7 z{0Oc2)BC&ggPHFE-4oiNQ+~A5tgY@DEpiM+EL>5|dgBm*OFPua5AD28f>nIn^mchH zCA8&DmW9{ZV#N^bIJ9LCsSpRjnSRW%B&Rz&+&1pl#&4o=?8&xB7vU^#xFo`uqa~)X z49vX4rTqx*vyBo!B6Xpy_ztuYH=UzUX><sQCl+wOSk=Lea@2frp){xxUrInzG#jmW z<Y>j2WNGVshBk~q6f8F02wT(&v_|R^<j|08>p!OTpO1Vvf?0?u(=G(rTkfSudx!Cp zVoN?OC86q{QkD@&na3#8X-;;F@IN)@T`%KH-XtP7E%f(Oo(F{l%9wMHc5|&(RjhwQ z0OQUz5$5#~^OL`MwFoby!@5(;FQ7cv)^Pf}OJylV^0R*cj-d0`y{KcZS+YPe)3hhF z87uq|CwzZ^E6ZKyNoqim!SoY6Ri;jGigG5#fi}+lysl8jvH`e#&VIqmP4t~8Pka@R zf~{ZEv07F}|AV=OcvFY@V~ch=YaU+jeeB@Ets-qR1do)ep*c~%%`^{Dj%X?KeKBUS z)_mnwiT3nQdJq>xZ;(j8V=!#mrb@etq$?Q=*SV188(-xcv&Zh(UC9`#XD#(76KJB{ zneI}5|DkkN_lR19M6G>>=WiP~zx$11D!sobw4s{zF2LI3C3Rhnn`;$|O4j0!lpdMN zYd|BxWL<hBk~}^=G7ayIB-qHFjt-!WQ8m(!&%7{SM-KO_%AV>@blZtH27TL(no2?& zehxOgl@p;0;GNkF?6?q0kbs7@hmq32>{p{S$6@l{w7tMk12CW!jL60L(7)0Kc<&cH zaxeT5eZxG?lk5R<dgB27fL_0=B&Xs9@#QOCIsl@3pQQi2LiWR{LlbzA*~z_*$$h3r zCsz%)Xe}3Ce#&pDaelN$S_bo<qh%rcXMZJl%tw~*uNF*fecJE4z4@d_<&1{~8?q_a zdhFYYzA7Q$dMl+9Me*?r#VtXzAg@uqz6TUlNy=U)NJ-WY&%QEF+6gm}9P)<gLCd3P zkg$>WQH7@1kk^%Q+C^E5V9^%mJ=UK}ADnSRz4uXP#xVY-p{?^8BQeL^LgWiG5|#o= zQnyf`CH-Nf>-i3|=f!<Y6D*7O+D1#PlWr%vtyS)q!LFG~UuZ4j^5ndj+lbtJRIbBh z2c7*Z6$<;iG1pr6soK{|N(|WVXnG(&t)RII*U`T}>t}ISW2)5xM9dZGwX)aGcx=XY z^LsDX&TH;pD2TVF&~bIRjs)7~>2mHCx2y*gC7HTMWJ3C9ZTZX0eQyrDSL{ACV2&zz zsL#K>WV`!#-J_`!JYLdn{zqpP>~voyD=UT`VcTOl_Oh5&UDfA5v1Ips!kC)=kSx7V z{Qg5*eXTL)QIgutzl8+7EavVS@oL|cZ@JU9yl^GY>>a*+1-dWGN#r~U^GE*uy<e?J z!cMbN%PU#|YFWnvu`8Kuy#d1Z5RKhyDQ{<5r_N%MDSk)C{<Cz>u8>@y3Mtj#$ISUZ z@TMGR3DHwAllLvN@|Rv=#i$_iN;PCYff!JtOo&{fT?!J&osyV9uQ#&{Asw6JO=Gi# zQZ2c$JYFep&W}5;KGu&W0srjZja?rxnXu&|u&zRAnac6tVjze?0ehbj3b=5PH(UuC zuxrNftWbAilmEoo-Rq{zu2~zHU6J(9o|G!vI4>B^67C}yK5<U^-B{Nl_C=s}^TwmO z2|IEIPs^X)_0Wc0-QJ5pyhoMGU3bVOE5>yDRj*s1xRea&O=-tm=B4L|jn977C+>Js z&nq<=WKkZfAyRVsJ$b4oECyI&R}|X(HCA;`S9s(ieSy~A^N(x_HuStZD|F-MCG%ap zsO4pQ7Duq_uc2*$(6(!MRyETXT+FxP{I?SMwt4YAClRK5+cl+#uJxg93;mLM*W$g% z#C;bKVPazF2E8DEZ!(!>6fC#ZqyWF<IqDj60tKlPNv$TeVl<VMs;+<9v@i&KU7rWq zb(gkpS~{uc{f4f1&-=61wWi+-g|_VqZF_rMotf$FlY3^Km};PaurD0{eZKBv+()-f z=1bq4qPn+k+7yshCrhgnn)`xf3wVMudofytu&;kJwC_m@B3UsT5m8EqHIAr!tL+r) zjK(%Ma<}N9Bxzo2n{y@gxIYXErPpJ%jUD^|3(OsW8A>?u+QejMIc3_+<2#f*)bLv} zbL($-w>^JyBiF!YN>rr}E93@%KPFPtPVyM<MJWle5Rg%2%lqz#^6A?Y4C{PK6iuDa z_ene_{a%GPpFDamb9bIhLi*iP1h*K<53G_epuIS>EvB=3mzK!Q<5n7hCMe+Vi)8pH z?Yp_v&f~(e_RzMa6FNiN*694+zr;(|dHvoZ`PKF5O$#do&&LR!kJ!{aadt!3wAr)P zP0@MVt{^Rxl0*go%O63%U^ZGRkImx-A5>&>&<2%_t<KGg$)8sUwxc<0Uu@A0D?<3m zqkH8eif%by=QxAqcVGXl#kcO-;8e~p$P;IY^d}GI!NyWJwFd@!X8KZ7V&=4GbwAKm zDapb>c<7|>nxank%}r3#NvRqvQD@KTI&}6$>kiq}Qat<2<P?5Z@UyI^yX4HIzjqh@ z7$4Rh=<H}WJ04cRcnRgWp0j*?R~03j2+kw{JKD{E+B{y|O9jYG9^I0?)v1+pgY3@; zgehc(AFe@|OKL<^FASyNvDNhbQ318*Sb>z}fV%$M7vKX!t`LIvI(%U0Zv6E?nLm%R zdfR*c%E#Up#~=6XVQbvq%-AjgI6{~d$<DSzj)i=Q$cqLaITJRSf-_-#5qOKbO+a3Q zOd91(ILW!kh}7}(L632Uww#SHoIewOZ#4Y`(mAx%7pH1bD-_4fH5tT@=9m>)Z`NjR z4G39?2(o2AM@uR04{dmd*-cDyy0pl7qb)u~k#@7}Ap|WEjM=_WM1(fqK=Bmzi-F;y zp5)r~YxU99{%fe6%$+0jaNuZrpVlr#gx<1&_K=h1!ISQFRvzhFQ{?`k?g<*(_s7GZ zOuy8SeyE}i7mlJf=l94&ag!|<h_!l)t?usRb?=>`2+E$(Vcd<f@%cR{QWN&=xlfM4 z*;17QVy#3myinozcWp?AegJAgc&(M;2U5IHsF8V0SbZ2({F2a#k{eESgtna@o!aU& zYa=VP5iKI`8pvwuXlpmqh=L6eoUZP_U%(M?H-DD``Ge3q1Nr$|=e1p9U$ID3I`!K2 z6Qf0zOVuhTtm*fSrq7c;5lzE{RYrdyq^dG&Z=F;))Om*$5H}k~D@@H-X!TQL@@S2B zVTgI?;-fWQBwa?{EF*__W8TsKb7e9QI&$&Bk>%9EonQUQxsgBg%lyc>j2UhFz3ust zZ}8gg8K(gF!)TGuQp6IhRRFwRn(uajblX|wDFD(Oy6oV$oG5jyw&4ODh>Gzdw6~k{ z8$ago|1BDho6mGBb>$EL|AZ9XX%<YBwk4!Zlv8QF+y|wc^tx(a@)Qf(pA^rrQP{)} z#qF$41VQqIe@Jb?RPW6sr`Of^lArcYj#{rOSFih8cR@`;^vF-W<JBQ(6+LQrN*=vk z5>4=0nRAa;8(?aHN+Due$!-t0bNy{pkLSAVK2EdY1gWX+B8>7{<K`IwLf}b?{z=dx zr)yQxkv#4~Aa1Vvy`0D1fzOSe$1ck8*46OVbH5@u)9Y~B$)Cr*2I`@TTGm9A^cpUr zB_5<bmCb)Zh#-F|8x`231#0Eahj))ZACAjkA;({P6JXouM~Uh)Pd_?Ve!WmGomN@- z6|?z2Gh#dfWly@sD!oFzVmZ?{x7hN=cBg)b!_|&?(YhjYJ&|aT*LlzM_S0mXh}hk2 z#M7E8_5`v6bsDox1``kgmt=QZ!iU9wT1yAS481xLi<!5%AVbFI(N@z>c^=G|Z<g2= zdGGWmo``;{*Hoz8i3kk5f1m^@*N;jv_W9{Cpnd>P@Ic*7S?s9=)_<IugZ08fSZ5c) z8VAt;`?MAx1-4}r*ogvc+z+(3+ctsrE)Uwj=`04aK>M<QVHR6x?G0TOl35O+zt`-O zG&`cE4HxNf+MP!==MVwCB{<_*CUaI*_h<C1CI$z}wb5dPw)zi)^0#a0SBtdtTnaZ; zb^Xp`Tllx$udGD_g)T>E^o|AR{YFkHOO>*1n8k3XQ~R2*##^N&F`w7i8cV)5W`hiC zfi5Y)8+~k_Uvl}n1cb4M{y|J+p0YiMjY14vpFS0?vZviHYM)k|OU3lV=eL_rKgnrb z_rKSfQS^(_V#sY3*06<3Vw<-|^CnAPImRTc4c6xbR?HO?$xd{3YyO+O`~#(V%<Tn! zNlR4;z-V)}YmxtY4p7QnhZh$2&XCeI5Nx?~Cz;t&XS0_158I4r4j<Dp$Zy>Vwf{nO zxQirbjTA(E(xrVc;`SI!b-7k|B&}2SkH?4e3Zr&OWaE^r)0wB`Y5*nu@H`ZKm)l-& zR=5ppSGh|9)EDK`-4Yxb6ZD+IXb}C+Zq@&=1?2cmbz+foK1fZJJKtiR!g8L*=k6dZ zCj>phJZb<J4Wz1n{=_?3ELzp&3x^OcAXagu5_yooD?wj;o5%;L(rq$Fu$O8TR-GPt zLZfh{B`J|_FUAy8BDG-aA+n>>14!-W;t{1e?@&z{{G&TKe^18qH|Ld%OR|-f)_t0( zk-ZWp0AlqyS85Yg+Jq?EZ!Cv5t+*HgeC42M(};=c>pAN)V`VAWX;lpUyViXEL+M<F zp&i1(QbpoVGF6?9hs%20{mGIAIQYJ4l`J<>L`8B{vQ+DQ_h&Y4+_>+}lBWmWEAezK zM5lbwkB98jbx)+~mDJiz=`W-s_EFWfL=`(c0S|%}{ZhvdwJu;>)uM8FwCT6HZ1XCY zaBG{Va`{XS;O;|3<+47na(P+jiA`x;xi@}36xf`nndR>?IRR94P9Q7Tf9?P?j&zJ+ z4~Ac|N`HNWkOmE5&E%s@7Q=xr;4>`ZnDeq??M|sQSze-8+|M%RPEaT!>^!Wwo5&Sz zF8Y6eXS+#!hzE|DS0aQOp`T{I*uhQ_3n}L=t+7;V1SOIM0Gy`)$cbnafLFfe0dSL6 zI6(kt5go8YD4n22TePklW7S`;47`R);mML+Iul{2f1}pE?_R~YP|^Q^?FT<NFw!DS za$nb7c}!nttB)=@i&*bp7C_kA{D+k>#hm@3iu_rT`7(`x>e}=UPI_XuoIG1Df2-WZ z9}qRLF(LSYK$11R#NhLG#>cfUOe%SH?;-pBlxNdBg5r?BbA`8y{Mcp`#%0d|CHuWt zqPBB*^mjtgUy-9EjK=-7((k758I`HSdY?>A*%T`}qqQhCIla9&Jy6{HWa?#}<}M|o z@g7XFxSB3=e=YI+{vXRvP45iKV(+`wpZbOuJKn`bA$N~C20o3Chc3HSWf4%YR)XO( zJv^LdP5vZQbcv&!4p3fFvi9UG5lyfZxAD*Hy?MkMs!yVYKwPZ^1D6c;oK>pM``HrA zVfq&O)9+SX+a22ajpW6F%8}@|FXaPO;o@~LVXVI(_Dqp>gOhVy;y>Woko!%uJLM$` z%L_1ZT*eQlinWpmn66!NAXZ_O8I{Iz=Gr@b{2s{^;Z#|4i8xip%zuAhBuT%(CNqx_ zZm?Nuj44zCU@u)1sQf#Bzvi!r-#$P874cVGqV_XXJ%KX}*b2Gl%EzIxHZf}ybwVlD zR%@_eVckVC#e+K$bPJw9v;I4;Y(qcM62?XP4g3@*xl6-M&vEk$tH_pddlPV<3vHX6 zez)w}qY1#jeFb1Vf)=$I$IWEO>QI3{)VoEvuc8UpQ}W(+ef;~z$nH#e(<9kGvt;=x z+SNE<WPb&(J(F!FJ3wdC;7J`4$`KFJQ11~mghC?u(^*(Yq)x=n)P~*?B*#qEql#l` zG}L<-Mcu``*nxeMsxO1_1pH=IoeJslsFutFttX1Kd4coi;9wNa=aPpNbpCJT(s`)& zWGX5EXF>z^Q859a&3t#~7y$m6;vN7?03gohRZiy&E~YTl%(^P*UJ~d&*2)K+=DvCk zQZdseW0buo8JnLTj5J*p?0QKEO#r+Xw21p6Fz?nf9PngA?lgDlg<!yWnqDo<t>VTG z|L-s8j&A*)DA((idn{jWj+Xn=<zvdRp6izfDj(u+K7WVtw-5T7?WM^Y1tLF+TABNc z#6Oz(UwBCX167IYSHG{Q3>`x140ld=WVbE0`nf?%i^sX=$^%J9#^RP1Ma|_tJ+z1; zv-efb+cu)f;7$7=s%9F_{YChGs`op`E96txy9goJ0h_b+_)QeR(L<NDKXMlUj~f~u zC`vZ&8xR=Ta9GzXt*b?DC3l8Lo)rGU`&LXfD>3K)w{O5_>&%lnpfJDKB{ur$=Ct|` z#ZI+GZ?fz(%+W`qnThK@uNbygP15HmCjn}7SsW&DYEXYp>2eJ4jL)ve_%9(OfsAKs z`lyvx8D8*#!l`P=@1yiR_t;?69T;OEgLo5&^M=JC?m0qQhg-wxh{j1Ac|quljlQVw zOaAP%o-<16B4F8~L<r!n6hA#SrmGN5()%l}T@u>5arvdfAo~{bA&(T^&xsMJbAf2+ zsT_-6tl<WCa@3a>Q=wb4ns0JRbJY%AD7n(oz(j13?C&wnxFb`fo0Wmev-o_S&(H8V zme1vA!0J;^`-So=@v6IvWwdE>@2=zo@vZ9>RY^Mo7ak@Kf$%VYR`3VbS*QF$B@8u( zZul}KI~du_&oVMKi44P;HtVVkNIYjQp;&J$JHFcA;+m(+vRGM(GKo)9fpWiBi$Ynv zo8O|Nrj}r+Ppl1yH`M3v>8oE4Ti9MpkNDSX7vZ5@WXodLV&du(>U~aXgtRjh=9t1u z;-iu%-e{rT2l(poTMt6vb+>5Wvgh3RJ!$hGQ1)s?^C2b0?rSk(Q=l)>(|6@JUeD1M zvgsKvTn9i;2T(EXmiKuoaq=$bHyrC48i5-@M8W3t8xh9HLJoF4CL$#zCn{=6ENTc= z<HL@9I`Li}-Zx@B51DWaHGF3W^Skb{K;;{Jp3Ub<{+{#Fa&s-8c0IK4A?qRRmUZ4) zmi#;*uvxjaasoT=c$EzS|I}>hO%$r;3^t!ccQMC6j#Hv79(lsu%R-76jw2%+s1DIe z0S;7;b02&hg)zBO_*U92@{(nP$H_{Ku`R+%sLGOEm*Y313vSFR4V#s@{4xAUSMkU5 ztNt30YA(MQdX_7o3P#3*YD|93@IY1a7>OS}A^+kRH`DIGaoefEjhlo$4Q5Z15{J_M zY<>o0J!3zmB_vlOZEI)-$;eH#%%4<P|LWN+Q+dL@8GaXlM^1V`#Djf1)k3HA0qE4n z`x0fL-tY4j_!`~A@YMcusP}*QJv>mHoKBn7Qfzp@uMxL3_;=P%o7J2dl5pT~ssdm| zWgpF=<C;Z|sNxZT(%a?Px|(*JA-*2X&EevByV=Muxb^w;IFA`@rBnm#jD38!1SFU# zb_A=K8_p9l`jdabFxJ)WZhCLs@$Du1Tg*(`8g3FlWvn$ZtkY8*eC0SC1gg};i&u=I zl<TteOJOk?1dVFP)?pS%X@*OA`mRC-!ePzbLH5iIyF$I9IHhBr>EsI>@KDNnF~Z^< zt>&5UQXBB)xZ~;W2p&epcAK%3)CK^HQJ|H*5?PJuY35nGc5|RihE<h5fNy+1c;&s( zZ%T@vE2~<c4OtO4H;_gHLa+=)pZ@~Up<a@GZd<q$Og$-ATFs(cIfI={hAyuvR!|(f z50n}rUt_b^VJ?=oh=J~nm353^;YjkVv18)=YC(^=t*oiYXa{hGKSDF40di_WyLlZ0 zC%~ffsvKzUdEtpWMGBzFW(5mp;yY}uT$%imr%c#xUHF@d`+{872W^ZQ{pPv-Y?75C zcU)!Z>-@N5aHix24O7Q>=Qj4pk)C%;Q<K>0&h^XM&4jXt&HA!G6+(FsunBB&SqWnn zaVMOces@CXhD{)k?ck0tupQvX7Iv=*4*ifcxt1RizUm?cLDIC7oQ7b7eJn0?L8YWY z`JQ}d(-RxTYJ!8MsPui=FA9=f-@a!K-zByz$Nma0sYT0lLt)!LNakc_4vHspJq@xX zU0>=b9%l?&+N9SBcmh~~WMw~F6Z@@LbqP7icFz+>$%*n-&T%MknNc-AzA1Y-0z1Px zlE0<=y~OXQ_>=FsKgpL#prO2dKL_{`F?(6cr5!V@OwI1UTYswjDu}vVJ^tgJ?P`A^ z4+XPgstu}6)K4@9jbeivPEJYhuS`yYU8r3^djElxFp01%#|hr`bYL+3;fE-ey8T2m zL#IfPV%n;~fOx)M*do)wM8F!hI2;ztm$(f8EH2VWtI`KI<e-SA1!%<tePV}MfzAeU z%$5|Te72EkP#D%jo#wNeC8{$pKBzaC@+D7+_DjE*mzo{_W8)jtY%0M%Qw$(@))zX8 zG9Y=oR`_uhVc7z+P7n3I#BXM55^DwKAojCW?%zY(wqvv#y5SKrd1tEjN~laiugn!U zqlVTtCU3f|jYeb;^RD6>$dE$9`b;OOs6b>~`BWRYrM5LOf^q<vb8IGL5F)TZXQE7= z7Sb~Y+jzr~f(!(St{F{pgKJN87pZL0xE^doYaljWkO8QMw#10g&}9lnb*@7pEp4-0 z+eF2dgHJXFShOtCdcwNn=Vi@m@&(X(P`lVY5tZ+pV7yHZHDV9_fb=Gd>gSs}d_6DK zRM67OiYG4FDDfI(=v=<2xv1W>L}YWKquO>}TZ9$2nh^%X`?-2%)OR|%gXGue`eni! zBq&jRD!hJGwDD|~3-i?=Gurfz<dlvv_zCsalbgOi=%akty&};4`J6o=^3VxK(J?F( zMFa0}QxJr`P2YkrL6)#tp7v!1<YBu|?|yo?k7DcUuv}>x2;KN93A`#$4|L(?^dk|_ z4{3+HZbtzmc1rbZ09<^=&2Ki-ssz{5y$5}uNPTi#1xuk`y%n?bUf)V_>?vWl(2yV@ zGV2O$wEG;e8cq~(QF67wn1g!}Bm&$`9^7LldJQUao=K^X%x3^iR|LDZfw@RA{F7a= z%^V6$9!rNxr+PHN6hc>_-gj7Tz?&x%kPjQy+2gA_U`cqS>5GBNYZ8IV@9@bbTxAJ= zU*-EHe2!gmcD==aBKQ9@o)zh;MuN75c^R-V`A>1Pyjmp%MDMPZj`%e@jU372W*+H% z{^k<Q+<=w)wtI1B#Bemod{#AOleLVu-a0i(g;w)B3P?7fHw~t~&|x0BPZGRGf*IUk z93Qtg4)+8T8~KQha;8ifrn`S32mCa&ClH|^N_i?7bK}S0mGK4Uf3;o>E^WUD3sxnf zZBjI1zME^cdvV{|01eJ;kDG5wgD^50o!OC)GjdegjAoYX7jnnh?;6_9Ecifr%}kHa zMZ;z;@cP-)^?>LS9pAI%l?mL-PqjV7I!x31uxboZ395-y8AV_|RP!)o?yl=wOY|U@ zCZQPNoo^0MczO}Cux<X$!({kj#N<7YM5DaDAlkaxOi}7&LC@ow&(Wp(n7$PO(GR#& z+d$4Mq{kPe2ZQD=uZ8_xf9)_U`<WDx$V>;{-~k1=Q8Mt(zjrCnHk=GZ_j%dgFO3VX z^*)gGCibbGSkrxYXW}Z44nFu_y0Bg<sQ`pX56cF%9;lV5chNTXof;FB>dYAHCNoo+ zzbz)H=4td&y*G_ecPw%8ojUpbv7OEFm$FNn7GWL_2d)2bK|c8YR6f(z=V*Q8wE@?^ zAqF9i_g}XAYy7_$KN}r-mG&9W${AL4aXejFhZ>KMC^S$lwqa5E$38r5zo~ds#iC<3 z{i^>16k92I<*V8)gUUnZjbq>ldl2&0Wsc-xV-G}A+f<iCnSzzj_Alxv*vrCw*ZZ>~ zC{;@V;+3ZNBO(12KE&R&=S%Eef=HoGHl{D)48q`<rcV!D!it1aa2%TBBoREF-Hg$> ziHeSBqEL@qe4&t3q}_a3Kw&ko=BQd`g&Ij<$`t;ca+%{Bn&>rIL`<%(T$71J_9rrO ziAgYh$WV@&UbwPOb8jpM(Je#L?O15Dmw9=i-Ze~&dp1{+C}rqm;%_ob{3_|C4;+~~ ze3%A{l8w%fa($}KZKzRZ^FX!DFG)t6|H|k8LBNejqvHA&?J&RHNZ;^ZKR+v-pXLfC z<_x_FGtQizEy-Nv2gCI}YdL+LYqb#Ex10_UQwy+bWLTMaAX6q+Suz>ST`+y1l&3W2 zs!C(!B|9NW!4yS<7IQ)vQdw>Y7u_J-TkdlPoWW5Da?|k`zPIRW0F+~gJ*E#`3UHTS z6R7+le;NLs;%_Q{`>wX%<+uDvK9lV)?y7Q&#B!~&XH5~2g1JHPbYA1BoAZ1SNX_ay zb$v%&wPmiiPxr~GcOh|#hm*&v9hw^tmn@FBS7~5#ITpl~nIlh$Gt<KC+I9#qVi&9~ zY<}`W-KR5(C|TJwbs@MAPqav8v2d=18QykyqV5k8qV%djCLY;QR&?k3)F~xTHT|x; z-uWIVwInOX-3bSJ{jXM~*OfcUd>T~>T#Dqruy^}cKjqw!E1$Sr3wPVX^jkuC2pLmf zt$?7g;mNM)O#qU*8gQEV7EXQME68)UWp(eCyzl;vrCLv7`KH}HFBNSRS+xNf(jTqa zD7=@eXuQU1`Bp1SW)p2}3=4(GFCC=(YNX$cjmxT?W56)amz+qd-I#-eUboIYIq;o3 zbHlwqW`~;xeH{O@^SAX!Rvxa_8!TdJ1@a>;6S=s?J-Zz?8)?0hQ|VNQ^SJGFfG))! zYlFc?g%LLj|ELq|dhba8qDT_*g!;qva{1>RkGz+a!zd?&6%#EY8B4W~>oMZE*@;T5 z$(|s0nuJe{%MqXkuenD<O3gG9bxz3_Jj3agK~6HySWmu{Igsl(hm`!8mP5YeF>;QH znB%P?hZg2KXXIMY*Wt6GRXov|n@dbwn``!KwpotU3-wvyK)wT+IU&Q91=A82dAR{_ z54GU(oRpBtczo;mqveNwEOL2ykftKo>=IQq6)M?>1EE!Ai)hi_p$Z#frX|xO#a-2` zq15!AZWd%^dPi~k4T1^$0tCo|-ixe@V{RsDWF~52Jdv5i-RiXsg1rbaPIc`-n}NEw z=nDxoTI9Z!ESaAz7h3CUtf+gw<oyjJ>u%zR_F1PqPfRR8pR>&(`^v>iPXx18y+e5L zBWvb7N;n7doau~Q%~P~y?PyIQ^c5Euj2V8S_UXs75PMcdYm0;wYD8+Rb<2>T<b{jr zGnYpjP(>m_l?<S$?weZ#qN}jE7eNlMuq{;(XtvDC`=~KQ^6Cl+KdTUa7U~syXbEsx zBWK%26p4Z@kf%{}XSbPt2um>*+K6?WY}~Uq?CPp&LgEN*5PNr0n)y{7+JNhv{Hh15 z6=3xrf>msi`BzswbTY7!j_4<xJe>j0OYbiY^?9{sgZ3KLpv*(^hyz9x1A_PT=*K}J z`Bf@}vuCopXF;SVxlMh+voI-~^)1i#Ak_N;lR_h5&h7EGlAXjm7R4hXFqBuaLwW_c zXx*bFL*V7cy|fI~%>)Ia({^G7Gn`1Umip9hHZmHV1KzJyq^-~fAvou>e6`#7snz1+ zt9^tj8f^(jjB}MEC(h8C)gP%@$i%V(&We1MIU3LcFkj*D!wijr>Bz%YmeW6y18QJ= zA#l+^6>l$7qVec$>+PO=CX%x7Z016qbpyAJr|jCn*nQ?n6(NHt+r~yzwEEuF)K~iB zdD9tEzQV_rR?S}xf6-Y`2$xHL$TOL>i7OdJjRnw}m!rW$s^@~YJyq^LPk?xCwwH>S z80k#E|3PSjY+y}qbsgjUHQ&lQZRL;Z9vHE%)oC<=Guh3O$2hO$%XMqHpN=ob;Le9X z&veV%TG2Y_sfTgb##)7)&k!aun=`~=dJwiO{4Ltdehz||>Pwbm=)z@hg)nPKo`yvE zQ|7*nnStmF=V6LP5Bg#%m_NTY7MDe*2dg?+ZZmQ8CSkS&%0@t9LZy>q9N#GKP{7|k z*G{&W0ioNe8I&!gg7HqYKX<ZxL5?r|KAY3u^h;%^_Z9tez^ZQ);!y9ynpPU>{f>Tt zgNmJF`h7Iwz51m%xi0;FMe;gXLcq)>WOZgaxM#<h+Y^gSTs3HVm=_00C??9H7PN7` z{^uLL^@$VcY5B3t(Xo8Sj%DaIx}%d?cvfVGzf2s8YlnVJq7%*4aBwsCX{G(@%{pd= zr51fwxd%$#%&tzqe*n(_o;8GJl<d%UtKGBFUY##kCg2)WXnIxogRUs~Wv%^>x_#N% zik8%G9r2>Ji%0aL+Gp=a`a}b)HTTx-EBQx>VQ!mgS$F+uF-&AyO<14z6D99ta%W~f zEi(gpWUHIv<E;)W=O7Rt|DRSMCZBoKN%i(g>yLQ+_mzz`%9@JCXFMq~$V~Uzu=}XJ zZ#`~Aj?O6J;J4L$2KfuaXlKf5YkDoOf~+2FZ~8k{6pO=6zv5-OXUInTuO~3PS3-Jk z_zzU{=!s|datgXuv{>gL12>PPPMCRNbYbdfL9C2ZMigu9IAxdFg^?fpm4~GOyn4_+ zU9ab&|75H~t7uOMpGpgbfy|Z(SSY$cqSbML|CObkTy>U@T#U$}u94vMi6WsmdlciU z3&x=W)pDUNN4(!$wS<<HQt3QPe;zX(dZSeFJlmH%3Un{@g*F@_4B+Kl5yutac2Wv( z2&Ow1i%mJn@c3S?f`(FhJzrt7RQQfmfHAepQs`s}n~HJp+l!rrGRoOHUK#57a?i#K zmK~xRtQj-bW*MhoHo1&2RtQn)_c1=?%*N^U*Mhb-9(t#Nd96acQCLLofAb9`FFSI1 z8!k8Uw_*LNri;o_gb-+wgLT;^eU*Eo?A}j;ETP0)mF-m7G(|L&oqm<L<pI(f@#2kl zjL4Jp(nQ53s?uI$V+D$_4Ph|hoHVA9>uH3283kHrN5Y>sMp-K0aQ^G;;Px66noNKM zRnyisEeNhX7HdzrLPky7Vb)e~CloWUyo6ajEZD5ovhrwbBX<1P63BkmN~;BIwDJsf z&ZQ3EUMM6{Ef`-I`=25+L+L^;&{7NLrgub|RtCGC<e${#N)E|IXxPvGi_Cd|>EPs` z#A~{q*Cfcvb<Q3$xbMRfFh1Poh*^uGjinY%oG~OmDvqcHG*Mrt82S=vo!rtsSgynp z1%WUDi<r`!#Y^wmlwxK@BxwW$ZyQ!Hbi5V(D+^c(G_#=Rp(9O|-zNg|jP0^aL>N3@ zlr#)nwG|76MwZ%bWVvi3S1D0j5?P&t5ukUo6qH27J)9+e)NqU6&mD}2f4(|kDuLo) z?emI|b7p1(GV>75JW$slF=53O(vJ7rvMAO|b4+pSD3E%_b2$uFIydCX(Wm&R(1EbS z9Eq?NRL6R%)W_7;T`8Bi4K(TNKF7}Qz7pB~lE<Qz?J&GMnA7(rE1CHv{DxZkUyvT< zXxPv!mPQMNLK?ar)+RgiO@hKmXv>2%PDw%zz<W*{Z7|d;wlg&Po=n>EXfuRCGc_BY z4fP7EU^2pbc%qqF^H&>sO4h;8By&mdT!fm2l>d}n*-{+XUM!;g`9h3Q#D)kj@cz!+ zu9E>JgnIv-IzpKOa}6UH{<GpNJDK0nI>G-QB%PW3YCv%vi8Om-3T>XlgfR=V1;m-j z!_)5<cZqj%Sj73Is-9>Q^@OCzu{gDq6?viaRBj#|@h};Bf`7CTrt-)6ERkM^#8a`3 zp_cqHyG=Heq5mPl*_|&WXP+UI^0ML@nwA9D&H)gR$?Uu+j2>-}1h(xSE<>6S#XcCl zlMDt~$shr>8O(;qOp~}6%HoF5JL?{8WmY!ASttXc97TBuCe$lNXv$ae%V)#aNpi$1 zNeMBriZ?hXndh2SHe$!B<#+=%F1MJa9XUbFbeB}Qv0$t70cyK8=N<k{_|2VjwGwMk z1uC|%p<J`N$iJHXfxDn8=DaS&i_KTHxa@acaRFThk*Od}53IU~Z#vKws9fC>s61(1 zpmIfbpz>t?zO>e+<&MEt-_Y_M>n|R`&e(d0qlA%rwJG{)My=cdvej=Fd<q%giG&tq z(cBpzD)oGSc9LAby-=Kfv}VSxCk!*9ZyvO_waV5pQ@8^6Xd+ym#Fhy`o-a2#t$K_X z=5U;oqA`odGn};GdXo9(*@_i$*B6&{0?*3TPcsEo{Wrl>mJxlnJlhyI|4|}EQFC^m z5I2YM!@WREAF4;5h|y;a{v+^&xarYi%<H;muw`Nk+L-Tk&X714vlnua)_qO-L(v9B z-2Gh>g|5qlt~ve959_X*7=cOD0;CUni8y1c7tY_<W_GI}f)dF-Y)TVVOifK4iW;{v z)>g95e5g(rNPTt*ZWvy7Gm=ydYhkJ{)T^O9|1$@ZszZk4Y;4bbQ`OKWw1Eg8KIi6q zDOoi+l&w6Ap>vOrewY}M=IB4^q8>${BcXD}VY$Ab%A3!QtHPMAQ3yKwZ_u9e!+aBS za=i{=WJ<5-m8$9Wzdq80;KuC;Lo0Qlq!AC`3;eCtfMT|gMm;xa-&Th(P?uWa{ERNL z^<b{C)tU(9%q{YzzmP9|l5>9^pgiR)1t5!pBgX?HOmCv-zqz>(n$l^8Ns^Q))}^D# zxz&OGL*sEA|1E1D6(vj|C()+8DL-N0MS<MF0C=T`QN&`%i5sCh+H95xLjx)SFsANu zw~S+IHQHMJ7;RneJLG*1TEaNr^%srTPtjP=%P)})8RNoCLA*e$H#QZ`E+URWS?Vln zo_zZ7985M&);8w^N{Xc#B3FeCv)OkJ!8p$iCRRKC*SV;}R%Fk&Mf#7ZGMWBZN6AxM zwLj$-F<ONa9zERbFBWshNXbAlvQwzvx3d}1N<P$u-9qlwpR4udQ5>)SDO$f?B2<^W zMW}!8)vLR2)q{sMSllT}1KMlR_N?8ev=^uUBeg+^+ll$P05nM(EZ6qDz_8eAc+JLb zvvN#{I6t9H9V_qA{;PBslt;Sk6W7A@xr&dYZ<X|JKTmSAC+E#k^*&1aU#9)HkM_S% z`#;Byr%9vGpDO){VZ?NKHDsDwF35c!)gnJ>y(mQO;7S@R#T6rO?=Ep-Mk#_Kfqmk6 z?V}W9AH*^d>hhO(l%e);`^rQpN%@IxMwq!U)&LX<68Cih<s=$vs)7xJj?Tc+g~D)* zShC#2IzAl9mYNB~O_Q@*r<mbm={npUoW*+~b9jcL>G7_2+yxSmFUl5%$<5(TrLY^J z6z2}mlDG=aynmLiFR@S<T-kSye=Pj{d*Ar@c#@KbxM==Et!xY9BicMu{jzYNQ8le2 z>89oPlA3>SK+BpJ|Deoj4Dvu@fAGzZ?_cty{}T?<zs)n>Q;~d3|B`NY=+p4|{<W;R z?4bSEenS6}r{mWnTjBU^o~a(+zoeU%!v3|adGYCkjep)J^e=fj{)6;y^UU`+`4r$^ z(#?)13-GUH&1DDe|I$zBU-ESPs=6y2zs)n%<NKF%(^A;KmNhRvb+GYw753kMOW|)> zf-DxX3i3OWC-6)^2s}2=Y<_VZJ|x|2eWCy#TGq546rP`dLjRH{{eM@LL529Rc_ui% ze@Qo|751-X%@evv##vbP@BW1TB~QnHkp69+*{o-qG3!Cn&DPxo<JYpL^`QN~{t5j{ zo{nEtnuX)Hc_ui%e@Qo|751-X%@evv#*aVnw~yxslBeT8NdGp^Y*zVw%=jhUZ2fJ) z__eHQJ!t>YPv~Frbo{DqEgZkiGr{rwOS(C&uzxLUp3p@ye*Dd!(7)vA_z%**%`=-- zA2DY9l5Vy>UNC+wYg!N5|ME}hU-ESPDmWL8-{zU%`2Ho`oL1PsmNif4q8LB^HJ{MG z<mvbi(!b3!n^l`IX8e+Fw*IDI{94wu9<=|PKcRog)A6f3TR483XM*GVmvnPlVgFjz zJfVwX{P^!F?7#o9!ruk_P|6BC<p+Vs=9w-%RE)ugq?;c-R)7yJYvvpj9`gzPOP=(9 zgG$bY_^^5A1C{8<^e^e=_`?3RtQpWnG9DlPy&umHBu~eGkp69+=^Ed^q?;dUFwwkx zpk>XRgZ5wZ3H?i+j{j{zXW{s5p84R9k~L=hl5UPK>|e{80bL~H$3MHU|Nf=pekaHM zzG>X=?c;v$E&N?TPf}LKbMN0jIv$&6>c@?zpuV&%^{+iheVb=qf2I&0iB2c@7HX1+ zX}fW3Josfcd5-fNkzyyA#*;i5b}$$JU7jLXs5l>$#=Y|y@^@yA#kuN3f^qln#5#1J z={`IWaqb{=Sf?4hPQ9Mf`y;7D-QK3X>;4+|a(--cns%gG8C}HnX|$AN@r*a_Z028{ zMomrR9)02^ee;WmLyW>~GRDL+uJ>-Ox)102zoCQVDyN>Ib()P2YFFqn4plP}Vj-92 zO0O%kNra!O)xveQcV3Rg<?`kM4!ZJeZ2mtW3UDYUIP~^pdH+JHWP|<9@=@B~$cHF! zcv1L=v?7nsit6IFfiW#ec3eVSYH&7l!EHo$KnKUYP40jtPljHuKu~#I@eC9(_cAqz z^ZB3$d1#Q|FJykq*7Vr;C^5`xZ|44s_Y3EtYVex30TB{KVrvnU2qq_Um&a+GDBDg9 z$lJ}O5*p<EXp-=25@kYOGoSI8`;hr#MoxPdDi#P_Qj)5c_mN*Hk2y=J*J*00#~K6L zDjcOfFYq6H)tirXCE`8J39|bzIhYZ_5_j&_7)IiIHJA^F)9y!Al^`8hd&^h8ruSz- ziSBVt*nNhIQH?!UD=OMrH7s%87gJjEuLp#nK~+kuH?eP8CgwyZxT~xAr~%z#X<I|B zYMGj9j+pIYFRoU71RW=dJ8Lz^sB%wsyZ!559l^{X8+F(C(<4QxX)}hYUprhBNS@kh zx;sSE=||fl%Dz+5BOjz*bkCAb(mQyDLxK-hxu>NjcA5*llEu6UGE&M->XnM(zBP&! zFS-N(U+g{vz}u6xSWaAHGr|0plSj}UNqoz8bJ1w(;iRT_mZV1x58ZG-^B&rIL-=3B z9dg6oe^&c_?A}CUBla-WxIxn9`4&AxqV~d{XRY^BEFk&WeUBn<XubV;+fVdoHpPgl z+?nP!N@pFxU#t7RK^G@fh%!&EG<?}5UMz|GuJvX*wB<UA(6@wdSS&G2VwihuS|K>& zj0`Qmk*_SSNVPcD#DF63WobAlVRJ*hr%NxW1$@bAUi-^N+sAl!G#Kr&LHzcvWZ>`L z5~!@^vz@;d{_6NUgTEj1=PNHSFDfo6DfjcGn7?wa3-qJ3OqP+g*IC^o_T608&UF9i z&JC;6E{fLVQRy`RBK}m3n2*U#Z4E>hMWcdRE0PUL21AMnJ~ox~ZpZuQdQ?d<6r&9i z6JgQteBNeh+^{Ppv_HE;6kpB8=<!KdL+_wy;~vvh^ySrgG~P`rw4sYa%{-*NoX3V- z-Z0}mw=&~%X(V}QM@;-j{+)EibLwHCtF**kM43z`P%h-<o!^?<^c*khiraHV0PV;z zpj|KunuOew@wpd^iCKevu;f!Vz!Lq*wHPghdgVnh;guWC6PlGUT|+1FjlO3~b|c?o zPQMOu<USdq+^F1m1j)dl_J~!3n42H_y3!ubAg75l$jNwvGQ7U(o5-8~ChZCS+FP;j zy$=lw+Cf^`@CQo|I@p+Vi+1uawv&P-Cdkl{0u&8_6!W>9L4kFflaWGpXs^rp;1+r| zQ&*g<c5c>2pGta@v#w?oYLC<1m&*%nc?UXBoIw-J%(1Z7>elvnB9OmCe3BCCr;C4p zER{y_@nE1(kywt2&N|$^6d1*0B5uxngHra6##(()rGY1)OC?<}5?5y0X++tiNFksG zO>qkq788qxX6xEf)peJ2remtoKp<_-W*ylT8mI*(+;s*Obw<~-?9tFyw*mPC5Aviq zRE!d2%t>nP&uDFNTJmP{4fxSv-wRZ3{ntR{7a-9FJ}2=fX}aD-WogRRvfe~BS8bmT zjt-aiaDf&~R#^Ae=Bg}=)15y2P;(NM8>U2ygTsSdq7au!ZqhtE&t1t2had7MPa9^m z#r=W5YxvR+0F2^91(pCn?au4`?l8R?lms2$x})uj$jb&>y#g<5fzN3H#^3#CFjeiI zAx}GZzb4Zz7bVy9-4T`fLHjpF=e@%WeA%Ok?z>rjpQ9)<Qm-C~auX?cg|%$-3E#+* zeT$0a&I4mmAzq)m+w`hRN$<+8WGV0@^c33{UZVesFmRLtr*XmdD13ukr8nj&w53Uw zmu^ZzpmvlpnH}c)qlKnXh>_YUW21{p7=OYGP>=Dcoqn{fb;d4W*{_S9fN|`d<VRR3 zrT5*0l(w%(RG}0PGYi|9g>$O(h6<;1*-RslHwiO#nXR@3HgJ-?_gYcUPpAuw5q)I( zA9E*#KNqRgTQu=m<h|q}MR9t&l^3PH7jY%MKZrAmf5ZJiGML`}PV9E68Z+-2#k&>C z`mYgs+Ik(4U8tGyN3{^Q@S>GJ4xAG|&y>IJ%~aRaTq8fXjievGX3*)mjbJPOM3CVG z9qFyrJYugzXroN^!?KN2l=nV#Z-~H5i7m#`M97%_v!dQh0?9DK1Ibr-$*C-KDxCA! zPIJQ=eKv*Gn1oD;IpKQwjl6R4p!Yy9nrRz}Mr;Jwf5fU}ilR7Hv?<VxU+KGb58)nR z_2r8sr(N!XYFf>C*Olb2aaAtiJ)I7(zf>{e3+y0fUOtafa3iQW6B7Rtx@ITDkd(KA zD?H+6KP{Y}DXr%ESD|a2G^#R7O=j(i4R5T)Co+3P`ap2)1h?^S!C5xc*YQqUtGSr+ zjLqFU%(VoOO0jQ$h#;W3LF~lsW2%7EPQdvMx9Bwjc)^Hw!wL(QU7mJ!AA3xvlMU-o zoh9>6FDteDKq!G!6)l--t|We!d&)hTbq|s3HdCXZ`17)*(jQ$@(Y~(+1^V4^rV_-+ z^-U?S5$F$z6T**x{*VAR{IJDX8~kVv=KKjPy*H1ZFBuw-8pxw6{!DAcja6j`;2x{a zv{t*ZnoMhr8;fRIqi(D=(^~7s>NBnNZtT*`|3}=rfJa$f3;(%HF2KM{aD;$CqmDL8 z)Mz+0m}rAyjEXpukO?XRwN_t8w6xB6=?NipLS-1Dw#U<}wR*HxPp$Q|mIEyc7$jb> z;-!kkyH<CcYVpQZ$^W<3erF~@EcpMv=lS#r^S=At*R|JPd+oK?B|JA3nw1RCN`-2Y z;hI!vQZhU#6{<^y>r$bHWVj&}YD|V3Q=zHJ@YGbOIT>zFg{CFL(^8=s$?%L+Xl61z zGZk`@VJFpiadOJV8R)t3dqL9Un2v(jQ84a68x6LL6ZS~aBzHr+&#>><XV{0#9R=eN z7sVp~<+vx~@+U(Y(TMn+yp>A`PUvN_xh5H!)NA39%`eum<gZFLSG!#rTA!#b@m;l) zlFf~_zNxmp=45D^)~EM5$tl*~pIcryFGAxv$<Uy&%KS#!ox`D7j+f0KI?pWV!u)Cr z&cWAt>$k-&jLyRtZ1NBFa8aHt#_EFlDiV(t5DJ+mQT(azi;X58?`4W-L_g(y0(LQ- zLe2xc92_#&W<HWRj;-HMgk^QZEM)?;mnS<blAV>w&LF|slbzMc&bi6XSxE`h?j$>F zlAV*1Zs_(#LboS7o0FZ>lASY>oik+>44S{8<N58v!Q(+OmhoKn107FAW<2GLf?GLm zyz=Pw|9OXqK<hCvWgQ`^@logx=qbX+mCCrN5#aM*tKR8xNJlG9JiPaAJHsQJh%ndw zNbDfomWg}5Hq#pw2orjbco_dnS0Qc^HT*CR;?>MuoB6Ly23SkccP-q6Yxq>}1--ae zThsYbc0Z2Qu1McD>Rs#euE_OyclnybHM+o9IoE4-t=a10XBTcFnn`NpKOkE@o)dh_ z{cGR#EDa1_!l90M0?`6teiE<wmU>HD+EAl9!i>ok9@SL13BUH&yPe@jtXQ%W=IZ~) zm=e3w%Jp`o^-@{W9_BPJ_I~Pef?o+JBpM5HH4Gb_XC_>ph03zK_@Ii(<y{@c1H<D* z&FeiiTvqzJ#VL%WjU1GAEorrzC3TkX=HA+8V5fq>>FA~26T}mF5uV6916@15E>D+q z;+=d-2M*?&7M7e^zp>+QX#z9AmP!M@WyeqzOmIbB>iyWbu2X90q}=KgrW^B(ns{-~ zl?8-=oY*TWF4B|hiq1?twtI?i@sYg!RQ9Q-clCJc>sc`HL6w~$J<s(_niD@z!wWh! z%t*w%-l3Pv#5qGl1}OQRduhaeWYZqqDW8=geU)^M*22(E63&V!Pn$b0Q2$l6Tk#}% zY)|t>d?s9jH<ENkPxCJmJBqF;N|<)`q|oZb&LZFSVyT=kCklb-3HXHS6h6MRY|R^< z;Tv)OU$CUCW5pSXM+)k9b=)V7(BYtHor&Q?IYBQe&6`lGYTP`UYm@*e?)DJUdB72_ zUOVmxreb_G(iFnrQwEYk*te|<l-lOlWQ`7IONeq-dV{@n7r;cPq#trtXDbv9@APkJ zS?sdK+CG_|3}>yW2CMS#ef_0M+PII8A4y*%Y|q6kzL06UG>c}7@qfhP8?v@otAQ_C zUyrZtKcw*S%O5*jy%^@!*GHGQRTk*_Is*@{ftu9FEv&J^_4`_1%X5YIwZ7!6ZPw3M zk|*0sxz)HrrdGSPEew`a@K?!S&}__&a@l*JCjK?V<6)qyqsm=QRl1xm7bGUlE+?DT zPFn3VlFD*=IJL7UG$8AhfLpAnqyP1aI&1MW3v(+9Hz~_R-FIT&=hllT{ASlnE$c<X z@>F!5?XH*Ete5{1L}=Fa@;}$v^&-2k-?=OMp~YPKUHKws19kSm^wr2R0SM)~RA$4h zx%Na~a<v5Zv0Cnuw&-r9td9yB4Y;etYMfW$6~LUCncRF|&jML38!}zDtL0Kw%U{b` zEgVZ&EiL9z9ZuHrJ<zK`4iyTHyIStfRH3V7W#&yIrn6dvR$xpm>wHeKhBeciT`_wE zFe01s7tUM27;BLY534LHOV9c4vER(?%T+>={iN%S@45T&hL5cLecRt8=g|8I`_0VT zTmAaYOxaugEB*nFnCGv^$#=VhhNM(?@MHN|7TnHHTk2kYjj(fJP%cx!IS#t5G6fE@ ze^=ufVvfbfi54Wqq!J>&?7qsAw`iR-(%ahZNJq@D-*d3RWZfg~%#MPM(D9oO|3}U{ zl8n=d(IiKU?Fqu%UCrd3i^>j8D$PNECtJHGd8!BP8eB38QohCBhDCQ@9*UyGzgfA9 z?4{aRY7<(b$#JG_Ev4|cdKOjSaJz^hH1rjWknCqk?dS)UCDxTE3(TKUc+ppB0sgHN zv+_J&x2iNN9&Y5|+3e}dm$u@S;{6TWBJklRa}&S#Yvx}jC)L{@qg#&b49+sfO?>OC zb%Dv!fnrwL?MOZmDqPkfczTQm$P4t3rYJl_^3+m}oqlv+-&(<-=Hb%eflPgECQs{= zJy7Z^asJ3B%*1i3<8)DL*nI6Q5!%3!^HEIG(mxOwFfQ<xne?}`gSZBHmUv>uuTE>& zblj#(oh4UJj0TzEjitC)fUr|z&&|O#(!4NSEdvNx87HlaD5}yC9W)(i^wP{|<{YS( zI{j10-_spjL5`k5=gq{bpqFu~9%bwTY&Q=1Ia2}26(ia1;5t5`oVXEvj5DMj6=v)p z@%EYYg)qhZdr9iRx%?!%gOBoI#dxW0Sx^YTCCQtE8|78@rM#YH!Buo3jFvZpki23m z^1GkOCB}>M<=@tbv?13L-J-+pc2|cQGMD@kwip}<13hsiH>g5spu+s8)B#Abj{F-I z=8zd+A~Fnrn;fGnu-4FzBdysGA8Q$?2&w%{a8;=Aafxs=DP%g-07?!~;=oZnQ~yaN zIU@0?pbp{@_G1#LOD1BjWGN}0BOj7gCHmp(0`8&}%OO@^2YZ>j0--1?UIPr~?aKzQ z_m@awy^DEEn?x8b7Y}5C+5!B+j|B2<nYq6oxVUpKHymUV@o<?VY?(Xr{r|-?uoH11 zQ=J;foXa1U+>=)YxA0x(x|VoWjL>W6TB^2l{hQOXb1gBH_Bz+H1~PLkNF{SE_Z8BH zPR-qvbmv;~%3SwyiX#5_mGbYU>XSj|S{&QD{dMR1yQ-@=xE|y`QVi&0y*AM`c?VA( zp=v~{sS!H6I26&TH1}lY*w=lB<Y+A|<S+?bB}gwkU&!=jCK<XSIV>h%^-_k5B5B7@ zkCTPa*mAQAIdaCqN11af-BnOKw^ERJeY$SR=#>+PXqNf~-~3$C{_p`PhIoX5C?D)J zXA6qWjq@1)KyDr?Q(UE2h;V)Y4R?`g4EHu*kxUj9%t<{Wh*W!}Ad=wEpe+iN%kED| z?P&MEbIMELn@q8s&Ah0rb9R<p(AwqHZjCTqK{F98rHo7MLmi2(WKro`j;vDpINtVA zwd;FRC5gHbzQs552}R84h>%h`v-$~F&=X(4MqwR$e>hRbhVzjkh?BV1uy9kp#;tm_ zUx%Nb#D>mw9zNZL*vYyR7yc~X*3|hT`{~oeDKe)EkaU#DbS2NRyH>kN+dD0FsnY8d zWZMznbeSQv(~b_k-K^5=2)o%O1&q>)z=)Xx<%D8*MN9P&-9+FeK6l<7!f)HNEb#;` z$S}vg|6BZaB3tDUe*5G7;<uY}h4;m83kP8$-`w|kRw5czu^|alE9Y6Pyz<OBv$6+` zWw-G`&$BS#L(j9{=gXewS#gK@f9X8?6{^w=Gk2a<zG$E4*-8p#`ExnX3Wr;n<<I3j zdyAmaoosOtQ+DNG{`|J=2jsE(MfvkrNR~s2oHD7*9%a8QfBtJKv8UO6^XGe<W&^QK za5#IC{q6bL`RTa`oOae{x@~#$Z?eEAk7OrcUfEJYruthl$SiMO-s{M2tPsfX=E5pz zg7W5KZe>63*GU#1(^ojFfM;})Su<~tuq!?x^I?kfTk51^w|SL3sAuEkDdvM2*wi+8 zkkP$|k<gn{gf@B*?2+)2O2LqY1(Ka2nZqohsWRCVOg2>|o2t=auVJS1MDQk;Qes4V zg_DquYfp-LnriSoXkPoKj2+Hl;kj_0Y^}&mm(eKAWL@Q~vdw1YtS|kSQaL<^li!!< zEYFitZ(pHMBz}&4$O-&bRMV_^`|H-9NnNT?Z>90Tij5HXBC?qBlgNUOONmBjj~`$j zW#Z%}g23WUXZP1K6ew16s!;HYyPRUSpXzim&L%h#vH3I$f#;a@gQ)@`ScLfS71OD* zUwAi4ia!^>&4celiE`Fp+FE6p!l@2lajxVQwIIm{U96EZ6F0&lk#!P#mAJ#H4)shg z4V&LSlPedJa)K>VW+FQwe!Z%QpFy^_kC1KurbFf5KXnVl2z1X4Z`>#2{S{?awDV8; ze2LLQyarFanxlm{!1Q-&mg^<UY{_yW`wsj4bZ$oOkL#|J9yN5jb^kVhI7RV;Hd<DE zlY$``CnKuRIS)CaFaeG=3<voO8R1m1bu;fZN-0q-85|wH&y|O|x1iNx3+7KAz#M6) zdGJc^<5dK1^;?SPVjqJyb+MK<mz@kqkXbP3)OKn<HdV~6A>V{0!M7|Ot1y96(J){U zQga2qcl0JFFeN!kbb<yu1+(^Pcg<0HT`t&6)KZyDzZ?rInH{e%AOT5&Tk6sA;9TXp zk`<RQ;`Bk{!!B<!_hzx8o>OD#5j>X0f-9n=vH+iBWrmy^<OTl^!*u;2|HMp3y$~Tj z%`beMJ_hg-RFEu4j?yoBQnvrBnDOxteZm#pL*JQ!EWhGNUSU~&t?GJ1&(rpssrZ8; zSeE0_GN$PcU6rI#pU2i?UcXBc_t5Vf(w_81+B<PC?b&bUUf6gUY-UJOf5<jECAgRR zS8QiP&gR~*L9IfZyJ@K1ymqOpaVJ!3tzKp&J4=((y~*kR<a9hlmG?DOcz|_sdQEcr zq~!Fv<f!EI>g4pQ<n&;2dS!BY!;rfz>62bhdQ;a_3cI9~F-xkxeVI#i9Q)9BhL^hY z`p&4dKLPpKL!7@M)ikNKXZ9p$UWvAKf!q+6rozFtc1+}J3Y+SBuB_oI@8cG(39X;I z&eo&q6ZLtWU&-%;ei09_aC)6Ah*0X(AWP`+T+W5h<77x}${>zHO8h<38^Wz^>X1_| zT)3m@YpRoef#+nk^GRmhRWyWqB6x3@UK3Vb6ggs#iu&5kSz+1IN>MsXbWXw{F4dMM z$5=qgY$uBc15M^H)rh2=D?t{Br~h(_XC{~5&wc;*)*;_N4{y1_4fLG$$;mg;ZQu3V z<=^F98&<2H*1h~tWkrf<<}T24!JK3ysQtk*i4;C1OH+{`=^=Y@NxGY#`$ElMoy{+l zTJu-$ng4=hQ$uDdQ`6;st%5AW-I9rgIK-QkIHe#SNHtYOi=#y$bBA)Ya<DxuLHv&c zQq!xW#o>0dOKBVFozoJh6vq#es%Vy&PeD}a!sc?|kyz))lD1c%zu{bkzPeZHO)U&! z-SttX2>J2%nah6!z_{a~(y~AE_bh*D{t8JufWIF8te%!CYyCg|2Mscht1ni{e43{7 zRsJj|130jtoCZ1C0+xWXLm@W6fC+=>i6PE*z$fcZu~^D;s_5|qIbSQQ6*h-ze(<>S z03ha1d4ox@V6=D1!(GZ{%dbE03)}xO{j=>qtqWm~8v<MY`%*sF{!b_qHn(g3eY793 z{GJf7Xrnp!8^WPM581ZHwXYTmV#Xs6!Duf&GGYcUR*EAQd%&hNIlr>6QC$P}H7c=j z(Q(jnbK&#$Om=Qj0&HtX?MWD#c^m-W^DSE{&mF;lV6d;dgSUvKb;D*u>@E}_rHWf& z8vJwxMJtc*dO4D#FL!M(E3c_CT7ZbjELWKgNbT#E;FA5~5-v487%c$d#XpD}Y`}Np zPHGXf{scYBc5@uKD@#rWj5;Hik+bL6HX{`+ZEWSY{u^@sNBCUdRLb3P=U8VQfO6iY z7Nz;-x91B)ywGG2CXkw5o{FH7Do#X^REEs4uy$~m$tweW5+o!qy+8zl)BS~LQJfK! zgXgky=)xxHz-HeK7olr%)NFsOD1Wv$-O|@&>3Oki8R^qtIqMCbe1wVSyd0E`ZF;VB z=V3?9X7va1(Kq3*a$=e}EAA^6fuHDMO7x6Wu|V+q4?!9P2wRAi0)!c~3+l`-dLt7a zM(2{htNGi=-*CV!^9ll&rXH3^!PY-SM&7hukJ1cigrz$f4jAwXCC`TuuK`M_QLK-! z8S@*CCc*|fugMl|?wTuLl-m;6>UhEIUcGfrHi^KlJULbhj<Iq*<bD6mK$>uSuCu0E z))Q4mkPCz|2myz-FHAe^`iU1Q9`j9j6MtWmVy_5P**-xXcu)CP#-Jv&5WO=ZsS_>J zPx)<M&y-h+v6u3xv9qy<x7n;zU2B|!jq%WUX_miR-=^zdIAp}`-VCs&i}5hDhaE&b z3JK=$MtBVm+@7ZeC6;g`Izk-8$SOw}Bm>{&_W<8CLvZ2SG$#XJgmB{FK-oAMTZIL3 za1fBIK&&_wXnYHAVlr}RVLYT?sbNVUnrDO~nkb~KvhdODCM2JMyB*Kg89JWwwv^)+ z<SPW6i3NU^xSUDQxq|hSnU9v6-^>=0WA4NRiS-g<HOSTIb{6iG=}K>LC(8weNYUi} zLJp(i5=0K4PUE`LGG`5#*={DGvF3Ei`)mAz{v_{etX>UL)iBeI${-68O%2Q83yb{d zZ~<KvpgWZea`{*lLFodyGg!wK5Ro0A()lS(wX^z@vr)rPOfgN64=DoRQTl>p;Pa9| z8trCev-FuOmDsR|*{D$GY>fv8%@d94sGY~9^BegGru#P<oQ}v9nqxz|ISD~+$OPGU z-AfyE2md4mJ{5pXah|s2uF8}n5+Ss>HG(FsPsjmBiPRRZN$`I)!BV~e))faiYqE7* znW^JATZeiy8WAz`p$GVnpc3NgouR;=4NV+^uy(&0)2j0;`uw$<Lx3}Y?D|ku|CbA* z8%8qUmOgN1Li5$B(Lk)fROrZ>D{l>}(!cps;z;^i%mZUNmu(>)^Jp3UkFM5}2&?s! zRAVzgCo*qdalTZ5`sGH8@8g*!FJ=eB&eX|3m@x-jVlLAEp4h(Iw^&eR(eB$JfD3D4 zUrFrt;I3tNW6ZZ`_idyRI<f8(%siT$B|Cj(>909m1N_uEHIjJzqTQl?9SbhnEf;37 zX}Wo#H2Gfo5U2Sr0`8grU@T&=K<v*dir_zA2Pc=0<>AvzKtm*Z>Nok8?SLZYbZtv} zopR0JV)MIa%*-(chkZ+n@s)PCdtcvhSggXgd`-x7snLc=DGnksdlS0p#Lt`E>wBmv zA6IYNHXXF)@U?8qgLRFB45GKAN_BnQ4)k0c%*)VgNO-JnpnltT4qjTEZKERF#u(ho zPOsl~)f>`A&-8)%r(&Owl<LdS^$dws+!L8bK)eLhhs?yO%my2p2UW=_UG;gXk78eG z_bopK#J*mR?=k}HDZ+o$mnFqb;z#t=Ip_yt2oyW8&AfXW71(>pc&S1M4I$?uropa& zQgf}{bgAgIWO;JFN4B1T#CtTiKBzld2HNiVf^Zvt^&7w;_N%E;P&AxZ4nvJm;PEfx z4bJY>_=La}nS%|hhr@tpeE+$Y_?v1*Wa(Wot}E$;zsDO4i<rICT&#-$Va$SJQ8o4U z5-QfOb~W5*<&K*!f3*Hw$}73?N)>XnFLl>bwu;hT4rrJnJ#NRy#x3+#<y#rI4|6WC z`%*@jb*_Dnm?rzc<bhv_odX;P6d{PWm{msIn7~~k*QjjmnZ)(@B5f+De|X_(s9iNG z);{tFmBFx!92e<1w}1n~AF?SEMAPa-o3q9I+@=d=;=pA#JD=dr3J=_jd4Brf`>;Hc zFbsMi7~r8jwMu`@59dpq*^0Bk25wd4s#`)}r<MgJJJ%xt_RK}=q`F>w90gcSsVz&p zgFzC24HA&k9LWhQCULhe2CD$P5T~`!1$$`|F(biNn~h@-wB%&XCTis`_Y2*}kLoC= znUP1#=%nJ-;7Y%Cx?5@I{8o3pg2ih(MNip(mW_YuE$G@YJYMo=VJOn*YKc+`)xQJw z`mE%JcssUp-J7A61<q7$?kby>>0E%$ZKSh0hJ`=n_Ll#l*{kS6#9RWkZZkJc0S3!l z2net;0haqA*Dk15lminJIcG5Z1?-~H_CT<Tr_|r@{#*NAs#o-5gu?YS=P&g)c0Ys4 zvWOfjmdpr_UQZ<Ld~+kHNDATEGEk`k)JF*gu!jiW4ev8--IAUsJXTQcl^XKnBX>^? zj>cEa0sSKSZ7A?{zs@gifJVb2{ESD`T()*rK=gxWF7+JW007m#F70Ume$(+A)UQ5+ zVy8(*M0h%iMhI|kZc%HIQu7=;bjZ8{TwLry%Z_>lY|i(1XfxkaX!_G*^(r9?`8Kly zFal<VU(P=66CI2y+$g_clWC_iH`=hNXPz>ny>T>5Hg*nn4w!%oz|(mx0(=3xh!Kgx zVYaK0h1Fn5Ka-)P_7^JRVJ_NJFM=Sahs;Z-WJeGuys4OF^olq4)F-i{gnlVyeQnVo z%DU}$LnteR^*u=ONv-AwQk6@Y|7a=mkvD1i+Xk2a-_Mob?1-y8OMSg&=Zx$b(Z;@X z8Xw1x`?1N{9@kz$g!J1s&0$9pL8(xw+<!yp)$bxh>D4bY?+`uKUF8#{oDI$=q#6r4 zViwu2Lw6vnzh6O2F;0lFs{vo7V1j7fi?P}jSaQ3w6F)e*Aj3mFE2uEi97k{wj%RW? zh}a6IuN_mI^EoeOR@dxPB|}BT6oD)fZu=NuNM};p>UYKaGu9X?@uF3ccvZ@=?0*kb zp<?!XZuszb=iewC&Q#WIj=vLUx|zO-?je2qkB_u(a$aCimcKhraLuZr+Q1AN0tvYd zY6~C9q0SNoRAYVxvPR6g<Zn0Eoh&s?vaFn1>3D_nuWWZZl+sM@rdDB+-I`@Pm9r`3 zLFabIkzCYSMn0t8bEKl|q}q5Y#b;W7!{s3E4t(qMO|>Bdw)Qsqx;HSOZM}J2$juh7 z;kkBA{T5%hNYf@a`F-8r=Rt`GLMThDS@tzyC{G1Pji@(syje)MM0OIy<D&Va+|p0? zvoxXFlxhe?M@kq_PEZRywF7!B>6HQmggpfPNaj)Iw}q2Nw82iHxT6l#e}cg$B6pZ? zT!-V#+)jh#(4VJg%*3z{btYVQa~dxx*owv3@p|!&t&|?^v<CJ!A*N<4O47GC9v3L9 zU6<?*`biQz-BG*Qt`#|UfuQ`Ao6G+|*M!~S7SUh-QGC2&BP2vhK|YRQt6a2BYVFOC z9U{(|b&80(pUDxw%`&KCeaj(FVbe-vWU73KWs626_w2I!aNST@`(6*Sfz%V-Ykb{u zM}JepNMHAEJ~j;Zb#LXjCo-T4wsNmY+~S#kC0y%CzQs@R`Vj5ptuM?oGi6b2H@C}= z={Y-JeH1p-$7|(dz5UqDPh09yQ!UaLARiK*row#2XrZli<LvyNcwzdx4OQ{0MX&Lp zVk%Ex-f&d>Qn}+uf4$-4_=Q9bwk^K>v9@?zrp5HBG<UQPPulFWpZ$DRUXaPTnCDDG z=|IC_@gF@@BrOc%u}JG(dRqQzfMK!vH{V?lZ%yr3I*d4<6S{UB7OV3ue=Kagof*11 zeCfIQXJEDSCP8WLp*0y=m?P$(p&iE1(jmgu`yQ&>_Ub_chi^|m$Dt$M=+=9f@&i)& zcYMp&5}X;EIpzpTH@Na?G89Njh`sDKo*4s3URnRQ*aVU*6a`WbvjTb*jRgU2%wy>T zw16;2a=)N<H=xdkXJ=7oNVk55d?)cN_O$%%;II6-(y}mr|Kxc^15h$wJw1oNa=VNt zQd)0jv@=_oN72=oEB?7<iOt{$DD*^xlxk7?pxNdxg94Oq<o6!o!K`B2DqbHF=H?!W zX~QgtZRy<*2nR%zxQBE3W$g!}VDQaP=_+M8A82<y+OK0w2Q#L`x`y7`$6Wc-R4>6E z8-_3NcxuuGo)eewJ|(fEvg7TDb2kmPFPRm@zZsD=oh9;W&gPNhN_CqvPv7h1(_DRA zbCObt<`y&N12hZ80shR8GgZF@$d*{w7>PI)`tIRfd>__@9ls`g)TxC<)F39Qlh}be z2+L?TgC$T+5lz-YPNhs$IO61Kp@%5c=Df94I`(^>BhE&BzDu9))#sn_>@3m88+o*y zn5XXxd1p?7v{{MF8i`}O`8iaHu1`Zg7;$E5wwYS2A>-tGZesgb7}93GrB6+49}}-$ z)DgT`s5Gf{l8VyXjQ^3Qz|M}6KUYgy`JXH0r|e`=6^#%7v!AyIJ^bUs*?hPl+s}7+ zjI=phnCo`)H(uyuLyNOX-yi2av91Q5#MkOPs!9K=NnVPq(Dz?U`G|9qzWhwea}f<t zJER_2;gi^&+RgpywurkdU-u?%H6qT(W94LinXOF_*0NwqpUqp%7IOw|#yr~ntLaoL zuj=yz0Rtp66E8@W(JN9<+IUU`Hi{qV{2nyb&Ds&F=sd?i>=JLLWmo}gH%o9Y*_ANZ zXB|{5+m04)t5QA~8{e`d5X6)}|9%Dr<wrfi*BvJfgF_K<MR{C#EoD-D==1%{^J%(B z&!<$nxC!d)%#)Vx0eN-mQ0pa;TP9Ad-6cGN75*@T*@k}=XX8^?*s~w*{5{=ZvxU+~ zN1kAGZKmyaI{j(~E+($g{5BKTw9?e0EPTH?Kz3kJQmA#F$pS=VS{Z;m^Dg+%=qtwb z=f^a`-fS1L?z9S$HCw1+yL6RNYh;TvKsa=isqatI1OSiTv~=7_<KyEw8I4|gUj9kv z=f_83Af0%)pnEg&4}AR|^jPA>0gU)MSJp^@{e@R-x+A78b{hXWsMi(r8fCN=r;6%u zHtT(lQ3$9a=4qCMJD~NtI%)<D$Y!~Zbj4N94j|}p*ucvS`vFtHc{kgjthN5<glf;y zfJ=B+ZZjYL7G@1&(#LD%EO#ew6jU`gbPZrmEGVaG%cX<TZOfCSbDOg*2vYXf%j;v= zG+`|JXVa>kdXq0jdb6K}C+;uhb){Dz+2_*N{lmZ5RVzP+qNV!w6JKMeIiF@*7TuE! z*4$!%;B-$o1OH_#E4RO4)(hg=J%CR95m`qwaI)HF9(q?$UoIS4og!HfA~UrP@!e(G zK>aM!&sFj<$n6NButh}3n(5LoErN~_g>)(gQ;-#Y&K;)sl-z#V9rThU8vGUf!uG8S zR`P%;@oU1q$dajZ>av|v8X_174f*9eZs(8&r<Q3wY<Ux>$~G?T^h!i3Tx`hZsw-&s zeNsS)$|kCSWxw|~0E0swk!gGyUxH99vZhw@dF3rk?EX$ry)z}-N1Y(IkGtNcfwOZH zl<s#YC}Qr{-c+Tpa~I5QygPC((-SoM5y$KB5Re=$s=Jk_+4r1~$%2YexZOOcSycX_ z4j+E;aO&aoM5iI!mA}ZuxLuh~SKOxlO`B$p0GoiF>uXV=-2z>ALFZ1Im0w31#Gmbl zu;iTZo1()lSk0}CYy-$|g%o1U-i4sBq$hAn{o~ghh9K`q=N7?_J3j@b{w&>C&Ogjr zzgj8>>>UaBl^pVu1;WqBH7r4RcKf<T!Di_&-$QE?YgXeS>6$5M5Olq&8U*wBnPaWS zb)Vv%g=n#Tg^d&$lCWk-f+GSY+ZVkYuzgtq3x-5wLY|pHry%zgVdob53n4pAvA8nR zOIqj}QXxFy)>nwvOLt26`#aC&{N{P`J%j!$kmtfd3jk_|$u%OySe43A;)gm1$Yd#$ zR9EnRngL3^Z|UTt#t})~e<z*CffT`2%Cnj8BcJ1D{!u0~!sltri<)}8OOmz_4IPac zH-_EV25_$E%Y&&JKs{A{=u99vr8F7#TFA-CS@cEx7@^1~TVzNMIhG{`#5liqsQ!Fv z`-;#`f7u-YOwVh#)?e$1k4X_!AY^)P6+QySJ2vii`PhUJz2-{nKK?r|*l^9Mk@6)q z1(yKXld=Vx%0EE5GZpE)tk|QV9UvWX3I*wWf^>4X<}LiN{x5OCyThCl;Rpud-2)b) z-+t4DD4H4?qXM1slV4Y5I|$$*PJN~nmqu=pQ*uRI2wDBLrpZ=6(c9Ku`<|GXapkAc z+|E-4$_m^{;DxEPA~n!ecT%i$N+XVPKS__o4?rqC@t=k7V>`Mf^%wIyHW%?%G|4$7 zi=7Y4wEmCn@#;4|8)$W&vk3WnT{e|+<Bq}YdA&rNA(og(Au45tuEUXVe0*0!ZC)(k zoSCieL2BwB3DQswsm*!4MFaSEN^CFjUH=51Pz-2%OI30z6LkZWoRKa0M=AL%uRSxl zF?cfdg4v>41D^gj_yPqe4{<gQ=$Gg17a^SYQ-bNJOq?_j`^p#K_B*fZOk{_WTB-=X zBY=<fp$MMd&@(kz)Z_Wyl%(bnYNH5RihhvmNE)3AIwS+sIbw_&ghc|e_|w$_pX_^C zI4#!tk|3Y+qJ=GKpZk~>m17zvF6XH>y?9BuH`_yC8*r}6!sa&G>ldr-Xpysl>1j7F z|J=oL(4H14*f&L0J+giBIJfMOoPQXUldee4Q`O8Uo3qe)RO?I*$_e?GoQ+<P)Y3T_ zXNj{$bIuu*Guyfd12T0wi?e<2B{_p&vtQd|A_l(t23NxT?d0#UH%rTE`77eDjK6mN zT>hUJVseS4@+(t?&4BLHK_{6ZPpl!KW)QNSuWB1vagbQXuNJ2*z$w@>1zeoqyM8&t zg2q2*l*T{6kMOwTN$vVtp0B%%2kXOL>7)?vO!Ysv)kn<lf2(YKww=Uh`LP=3=a~*^ z7`sfNOEQHP>`|x(R*Ky>&?4s$TFDdEL4HNJZ{`q8#j+2J7fQWy=V|GT(Bb|(dTCo# zr~KMg;UhAwZh1u^5iuouwAzm9%pD=E8&ya-om5KA_hqXWa?~$3v$py_W<RK%v<v7T zWU9aW-l34d#L#pPNZTmoX!UCa8&+m(5lrqsHCz4K?1#03dVfNu`ZM>a-jo9&t(fKe zNTw`7RkzSebf7(C+DFSB6I%co9vhV5DKdx>28fWvr+viJVjA8Nf~=jakWT(3ligV% zo%{u9z#v}oU_M++dN|<$<Nx-c@JwNI{1U`jL~8D7^3di1;{*s|lXs(V>P~;AB046< z&CZ*d1YHc7IhyveJ4fF@<%W)A(aD@JHZ#g&oR2eQb7+1*rr^<g6ij?p82<*Wg%@`1 z2FR--5Y%K>rVi)#GO}L&0RmW5T8MZ>4^k*n5JOK`g<xTP6kif^y<6m`*(*2a!8vF^ zb7>$49svucl?>eg4#1s$Eb*Bqew-~^6>>JdhMS-KXmz`}G*LhXQ62iTGfbA2qN-S^ zaj);oCj5?s3|uC?<ih1_)QJYe#i_{VUpFYf$L4Q$Ub4H_$BI2f!XB|ldHAT|e=jZT z;_tk7O3NN&H+q%lH{UKTJB7b*LkjZp3(!AA1v0;+$hxj8Dk>=|E-opO-$Be3k1IAZ zx8|<n)t}wH!Pj_;uwTllLhJ`Qir4Yi!1h%aa^}7+5UJf9tq!L?M7mtXUo|U!COPwx zx2S!YIq7>Yuwn=F6+g@edlp)>PFfO<sWGwL9~+n0UKSJeD;4~q5d5slu}ag8(7OZX z^cAn6q+Un41rwj0&>`uv%??gyR+}Sj5@g^5>SvaOvc^)0CkH0uo-ZDld`s{pKEx${ z>;-OJO0kGnayN8%djwKdWA2n^HjUb?U;+Z;Dn?x?HN?IyCX|ze$~B0&UzJ>{)`U%> zOj|?3yF|DLMiQ9F_Efl&>Vk5uE0hqFRqLH}N#eCiYLxg2VoOsYH!8P}RJ0?kK(}@g zq4lJ$p4bC*a)2pB5qV4tgbtT1<{EOIPQMcG2kP(Dyo649+4+Rp6&2gfBa^u_<5(tY zetH(GeQ&bODHj2qrx8tKmdb}yO&_PGZ$aBF)wCTU7h^#f`i>n-qVrSY>@pJn`hvUx zPJ*W=h^u9*=~ypa7f+@q(0}5C5|x!{EMgktC4Z`<C)|m^FRQ<=phn51;u~zmd{7x8 zB{fX@8JsxV6`+i7R&c6$URCWyKTlMYT`jr~PSV>u1bM?+&0F?`uW~@oOeFX#yo`DK zSi#>&?bddt4og?L>oDP8a*{N1!(9KqulpnNQ94+^-q+nF&&WyZ|KjW3%roL{4`whT zD=Mw$I3=2T?dE@OktGai?GzR5YPRp1({7Ruw2H&jJNSxD2qjW~HOs9*q40Cp+q%oC zbN<hD4}p`9<FD-^TOIz|{w$mTRaPc;mBmK_2S1{P1PGWO0fLEj_*VrRt>~`fWV8KO z7%Ew?)U=wDKn6O`Arhy#^e$GB6o-?zMJi2A@g&9K2YSYQ9H`CkMjn(3{|gk6;c%Dj z-2cN;#Ab5=kWkkFz1^-NqT!V%D7}?A5GaFBdmJxZf2&s?qw-9(yoewcW(;21Rld^P zBUdt8sKcwIJ2u|NPZydQQrZoZbKna~9-+m9jZuUi2^V3;*!qJ|+|eSBMa0e_N;->} zuUD|v6E<aZR;Gi-OHm9J<<<m|r^qmf#F4>svRHA(N=_awbfD-6@z<IOVSoQ;SeLA* z-kr5EkyyBS=10|o<t<$#ZS4*&;iqy%jJ)xp74!Is7IVCsc$ka?-!8?zWpc!1F)!n% z&FSJ_`5pvMo*;(}@6<Cd=xOiTAr}0zs3LuAs`m)V+0cc{vJfeZ&8ua@rt(s$+MjOP z+S?c#=S-Ea09wDcm;(1}Rbt@a&T&qid<EvVUGtVY(eS5-yYY2BDbwcM&1fU$9_wG@ zLhe4ssz5{9N0@Q=2_npp@%N^d1#P18!)93Si?uhqdZLGGR>b;^k`3Gxw*f-nf}KL* zYMkl;QM-NWP(?6NP{PJZE-fT%T3u^fkJlf;LyFjniN<L)%BL0eYki4NJOD5jY@7@? z=}WvLZ`-L)<KAf$sA_9*tz=8-_NODr1K|rmN9wva`<ATZq7THEyYi_M|2grbqvi#h z3p;|-+MOVMikRPgQ|F7NdP6(pIkD?dqV9n2bT7oEnB&!4i#1muEjv`GjYwiZH)6h} zsjMg84F^${Vl%jy3aWD4REi6os8Rn5iuu0oPh@AHV_SPGt!gT*NYC)B)6+0q{X)w2 zGu8b4kZiAn*Cd-bBx$aH)OTY!1EQDli=nx5N%YHI7?sXslrsQe-5D~}*3_dDhqo0H zCQ<z!H(-4Rt^`{m1}ku|h>L4q_e)$+B662XV#W1SgVo<zM=>s$n1evS+zV*^FV^?@ z60_uOUNCezeVIuMGsG7y0Y0}+%x^1X%cu5=P%HH#(6;qUSzq@;+L*Y#@Kvg>`;NMY z?3dFBTvb(G>=^O{^2vwFrrgd&%s&p!4qS}5wSDQ#%ND-D+RcgW2l%@01r-o%VS%p? zW6<K!hw+30(}&T%?j`!*r3?Bn*4KTtKH!k)3VkT{Ext?I0RD`nqVQeOqZiL76+%(! z!e;f8u5=^z6*?&Hl<{wu>0swX3f3^-agR%`(*6Rv7#-mlMU7x4o9{-E!-K???pSJ& zx{M_L=o4xcix@`ucU=5R;zK1mWKCoe=Ohb+J5}319G%6dkyG%XqOe~=30GLVk)S!_ zQDI!5DT@ad1fpJNlXl_u2`(r*7qvUjY0^U%X_7MVkUU?vMB)}5{ly|`{DRt#`YE-e z66a;>oFv-S<H$St!aUy%y99a*O2OFjR9l{CDt1;Z^-ON4yvo}!JXYE;k|<fj;*AZR z*ECG2f4t+ZED(z`UGv@W2Iwf^?%2VE3HnDxZvOewFEULKd?sAr*#P%Z9Y$X+lb9XR zm(HtPeK_U>BSO#EkYj!#)3xF2+4`;}>lyV6@;WxBPtW38N3N=wd}mjQm5?XZ*IDTH z3aU=Ox^qjthJ31C*Jeh^T2z<TljtXk;_>oq&4=Y`-p!K8U~=JFIZ!B#jE~S&;Oo8! z%sGnHBumiuJs<len`b3ZR=nx&lNBW%l11`LJwk*k3QZeGT7ix-#4>0+Kgyy&Y<?Eb zw;q%oJs#l)7A^G1)~B5mFM1KPAeZ4hG7xU{kj}$#H3106XF!;oo2}&E$a7l#AssJE zJikNH9TZo4=@KSpl}^mDx$1_KwcWfY3vHdJ|80To_Tj$8x5*HOE;uYSSaU(M_CNPF zgw5l#t^Y4v6+_T%Ti|Sm@TXjcACW<Z;JaZKo4@66&lN{v<62yFcyLa(w#&$@V^Me0 z(NWI5457b{f|C);`EIDC%NFx|-CyB3JF#cx8a#qJWI_aOitD#yEz<|OkW$W0AO424 z<?r7KB(gK&%@sDn7g1QYkM-nX37|t3G5zDTk03+9x44%~{dY?Zqn)29j32k3rPN(6 zrU28t{-5#^aym56^Ru;z+O7T9lgf{{3s!xa{_pZMlphkC60hr<LWFv<QB=S{9je#e zL%1ikXB1*7o0b=cE?N>t?Ls)=aNpO!HiL^WK(32A4+4KX#NVeUl`kP4%QST92nk)9 zuRI0ny2_@d3XzcS<kU5gzrfm`cGY#o$JTCb?8}!0ku0P}Z?a}iPgDNv-sJI1{l4Xo zcfHY-czq!%qp`}w4$n1@o?E}81ApCDBR>}BjBl5oIpV{{#gAR{A#MskSj1coEWGB9 zY)#sJMs9AqxIQnhQU2&0OLK@n6qrjbu=tq;9uCH`qj?iM4(S-R__5C6se!dSN@!`} zc2>5hAYPPMQ<x4kCU!3D9F=+;@>sfdN2z{aDV>=3c>UT1e=2-<5QEC-JVY!_>^zi^ zaMybB@UGrmPSs-*I|@3EPn9CBk00HIB$dx=3y^Wh*VtiOAI^^rTm0C9aq<vAu#0s% z99b_<U$ajZ${YHBPQ!!dU!;(#o<}Is1rtzu7NB3)n|fqV{r%K-RpkpzK85g#P0VTh zqSS0|{o>`$wM+~OKhAt*^3Iwl=L&Cntn*#cHL>U1d~_r8tL1|qWlahn;Vj5}MFu2< zjZ=W{2|?RHa(3x#F#x@=H+c%jlhN(yR|S!nO6Z4m-u0fbd3@IKT&ULtNPMU=#&yJB zXaWeTl@w%$rm!HF8!}NG@?&6=EY3`{3j=${COwb(&5cLrLYN%v+&ZX(-?JUO@^S4T zfTd0kkxaN3YQ~Rj?pTz$Z#l&F$+xx1>yLBVnxupG!2jEaOgA$5>umnfn%|omh5X`a z6kp*h_NXYW;H9EB>_es^cRa#!>U?@rzSP=@h4E|fPlT@ZHTXL4eCNQMQpNQJ@zIHX zPvT(@F(*j8>K`D`X};yfzU4<xd?bE+Vn_bflYGmY@_oyr`6RHU3a&n!gaQ%@NFZ!{ z;nkx_DD*8qt8n7lwc8I#JerT*@0!`1A>zgOZJT(SXO7j`ToD9vCUQvb{KU@2WFSww z6QDyk%A+Gg=JfM96(L6mI~8o(5Fk=p%yFcWqY~Hrl2>>#XPHcu$GioqP+$g%rW{qS zJwk2|f~+I={C}{XM={zHJ@Z(wx?NOF?w~8a<)x{oxq^G6GV%H$i{4p7lEm5$u!Q4? zHxQbm?2MI0?PJ}~Tz9C@k7p8ZEL{6~$%w}r6YuB8E?R^h%0S-2^OyR&pSkvRAuq3& zkYmKtjj6}UkS?SWImQrsm{GDo<v250js@+h=Viy1OCNI}R2T#WYs*-Ga`+E`=|^)e zU}cEynXa4Yzem5rve*s-z_Q>3zM_jydJG5uD)9$}Tw~&T*zcOjC7p*l|B)%E4iB~L zDqD8Z6H=1CRL)5rKO28fBYN#=o=)NigW3XWcP`|>pL#@%C|;{v^u`)Wjd(b*>yXHT z;azVYGJMmLaZ}O_-b0q;PvNNeEN)aw*Y1SkJ+p9oJI*K8bWZ4*KhV7N*{(MhE(w&@ zua6aXJ>JFB+Fdy3UHEq4Q*%V(EMc$xv)AW$O}Q{xYBixDkqbvIDWfC)*`yA~P4Al2 zhe|PbLov55+`e>E*Arbdk34Tp=ZI#hbSKMx;U`k2@Gm%Nq|gS%|I`Sbb$@&66pZ`> zEj?HIdz#AI*pm@5D}`zDVz4nvf{!*ZLaXLZM00;k(@xH&O*|!^SfhBdJqU*#n-}O; zA+2tSPVb@d!sP67DuU6GWF<=$^>sxG_Mzt#$NxQq2+2B_;7#J$a1_)mjFH8^tDIA0 z`-NQI;`b$ahBsq*PYpxp(?5?;(n{XFQm2iNWT=w}tkj8;^ol*ezIo+m&|V`Ql>Q*` zk^ar;jhG&gTLq?LaSYwaiymCXXY=6}V^Lj4L45t}jFH~$l^-3z$^MV4q-pRuKHjk@ zhtnBn%hm(RxSJWP9aH}s?)}$6x<1QOr7~ZY*dMgA<}39upE-Y3*aK_rR#ae*6g~^# zE2}^RtX+%)6e>?_uk0vUEp{{M`62V|Z`n1)YKWJt=6V-@FKol*g>eaVkCZO;WZ1lv zl1vhC0{r*)vglklI3vstgy9om@eDyvmgc`lFK={~l$9~Qc#w_7p0MIyTRnxkRj#66 z+ts9<bsAcy@TZ2s&RyPxU;r9g<o;ON6nv$HfT$Fna~yzxD6IGRWJIDA$8k6SF-0p$ ze9Chu+`+6%ek#FQv{M#qc`_n`JMj)9U#Ou9Yh?GVsBl)~;~#t9{`@%6Ke3ot1SX!> zD{wDQ>?*WT0$3SuF4f7tfNyQAn^w6~^TEym_9}WMB#jo&!5s$^L`i>a7~)Ee>rkXf zPq%_Ct?jOpygNY`#c}#qEr#dcKqN~7lap9iiCm%_7i+lW_?*124%nI_>93HYX^GDQ zC`@!pD1#Yu`tly(BYZ((U7cJUOcfKr;#3XG%V(Yy6k+y!-C_(1M5d+6L?@D4c4-U( zC-^kia;oO9Iw|6}Mw~g%?90D|n)`(ff%*5xd<<r0U%}my_$&UoyE1l(R0$MBa6JR} z*lbp$2wZAN3DH2M00yy>ToqK;@5FBsN@Dm;dW!T(_OQnJmf8R(3q=$~WG9@N^rxrt zTi!3Xlv2BhX1>q!<l>H!RHv-Y^PPU)GstKT%^{=Q&(nRuNbv4JiZ=rk&*U002*%fz zpq^`Q56qNLf*ZN(a3LgeJ2rz}cqN!tFCtFf=dSmZ=&!{@Z+Z-Ph=zt@;<qS9o|zd; z!~};|k@_~1p&)s@!btE?+#1vgsj=%lGS=#Ql(W*2#&^Jrb)X+(9hsNczZ#d0iy$9b zbs9s-tQ78DYTtt;%8#9&nqDz+6sM!#pi2r-()-fbS@2V;cn{_Ab;~s@{u+}LfdGSC zdzc-hESFZ1YGW^bA!gt7Uba%OM7B~c{&1?*xty+76LxC0zb8`Kl8OYTglVw_H(wJU zmBURWWRN7tfl&OI(ZD$=U*VI2Qswv;Dwc&WJZKI6sLs_D8VdJ#jt-f5NJasrj3Hi% zhn9(>@~4*<9>?kn_8$&?Wd}m$gQ>anZnYf?uqd}f*v(Aa?z#|h*K_e0B^#p3;nkHa zy5psC@Dztn3<Vn<L<k}~&olSv%HSK+MS4Eo(ThnXY|f43fOP%mY9(FF9BL66+9AIb z^W3pwXVwSN?Sr1>yQMEzAL!B-^f_i6P=;V(BoS3Co=@!REXwO?DvC|Obtk?B;B4<= zdDC@d^WLtL@_gOHm<y#!E2mL7wSGT!2IHew47@Nfpxx8ygqW<H`Xy_CPVG@coz~#W zllH$Wd6jv2L%UM*WxC=ThCDj7GuZdY6pq0jN3g<~e^ef^7NZh5$Lrk2)}*dnO~hWG zKvj;ry&O$29@Gpt&@0|$ut!?#B4|f{NHc`YM~gHGlo&GKHmcGIn-g#EPMj=N<;A~h zL#LduPzreNaO<yh<Oa=|#TYrjEwX4d{Xs<|wQm#7!jHcmWg>(#Xmz$_O9af}6EeKa zq0WwMdbTEytx1iOdJ})iPtNxz>!1$QmeIcZLw<Ths@b1-J%7Ysh$IQt!^ID<DWVD? zTa<m4#aNLHc~R;1Wyb!F4h3boJ-IcD?^_%FoTj1Tp8f>~ZyOi_AB*qbAMN5hi%c0m z;qbUq6>?Y+GC0*0P_fodpf21=d*j82kCc@|P#7G~Nkp}B6%*-NRok}&26c&b73m{V zHX}KxEU@VH;wqFgWN>PB*Rf5qv5XhmeLPh>bO&{(pV*aorNhcXeMLHlz}I{)p%Xr2 zG}v=<mf9|Q@!T$o8;MF9Re_L5qF(){jKj+|8~2*SteU^_v5=i8$|iF*s(jq8JzFuw zt$#fcUc`<RFMG|U;){i9>$faGo-O0{Lj+omR0;vf>5aBI*9sn8;mB<%<f!=1ibo<} z5h63_zZK0gmg2I(=SkT;WgnZV))O<t7^Q~UldI!d?QFg(&MyxOL9C=Szcn&xY|quE z12H^AyaE}Pd94dEo2apEhnhBsKb?ozE(*6t{kYmQ1q6{xtgFT_(Gi;|VHC%;ihJ;t z`a!nzgCpis1)0n3F>6yfo&F7Komkh5gDzaaQkk}wpFFsQz6H&9KO|b(RIW7Xb~W*j z+)j`Q?_^Vh(?X_>UPPk)HuKNFaA&Yg?-SWxg@?^pTwmihv0+7xz~^nB(u+x00VbY8 zB#Jz(&L2N#@=Q;x*-i;fH>N}i?REV+@<f_?7Y@)iPD@a5092J%NQJ+mllCakL|UDk zq@7jrk2`O|t}t)YSL(b08n}-S6fWYILGJ7Ai`YK0>DCDQRwY}2j5=V2*bU}u3jypV zFpe^}37U|j1|X_;NcvhMPP7A7UOdVC07wbisu{_Z&;@eVOcdE9br-JP%5>)o8pKDa zYWJ<8+C5s>Q#^NkGp*y{GfT<WT_dHrcVinK(Q0Pug^nj#qM<pb)%SHG*QIip9A9^( zWQ~-D2vv2{;flfiBT34jC~XV%QTZr0;ZeUjSCFNwSSa#(bNAEYdxXUf)fgK+*ST46 z|H|k>060=jwF9y!Y>k%Qj2UJ5C%>N0Va=sxkgv_WBq+hbq#Q1>B09&`H9y)(U2APb zI#+Ks61_-2wwrs#!o^v*;S}{7w#XDMa)T`b`=+|CZaaVs-FZ=hF;_@)EDmXK4IG~c zIdJjAQ;l+cdvFhyo~Hal0|c4H8#q`Nz_)yPrVHbv*SQdImRKw*wY^XvAPt67WL}C> zCjzcxO<IW+j}sh0x=imo81P1oUZ;xj;vT0Ud7|(}3Nzg6v=01L_(lTB#z!gJV~fsD zf5rJ>rXu`fjnQoh#1Q95^;V>!6Er0%ZOpT6P<@fyfgBJq!!f!M+DR9!=cNm+^E!l& zjF>x7ZI?tl9ue6fjbc2fFlEP^gVZRAM>k%8ZA<;=(%ff%)CDD4^b(e~AbAQN!F#R| zR?`<UuQHP~-B(Qig+H)_8&5n<bEQw-q(nrjwBCHQ-uan&e>JFH2{c-w>YeFDvOb59 zTxt~x&O$6r<q>-bzC)I*U+_3|tzCeAosB0mK#X3gu>$D**K8{}Y=&R_7-S#R0`;rb z2n~1~`6l-4+pdxB5B1k+znOV+bY$5Yw2b)?mg4||ROzp+#~j}(i5W*X?gF*zY5j2a z?{>`xIa9faX`v3mNp`{b_-MrO2b8mUfnhO}*aJEd_M|4e?+P(0MQh3fea4%&C5|UY zXYEn0!IsmeBIec>?Gl}o8RU%eWWRP?=9k!s=*WTyMXRZqvogy(Y-SnBAe)OPdQtkn z&;c`-VdD&msidpz9J`2AX^N4rk}HiQ^@*FMqg3CS0{u!uZp+;&_>y``qVxLOp;+#R z5p>BVSey?^!%>_gjeSh&P(L?tGnaiT!xJrs?$ape3a8v-g2XQnY6j2_u?y0LoA{gp zZVhUNh`T9dTM*j}X%r?v9HB?d<;p9`xx^!Q5;5PUJ{p%2%-M>Yn1<|Z>-^^MMZO8X z^u+~8L-ECaGYuCi{IWGTl5Q?JN5P)K7tL$(!;-iszTEpS+Lv$A{uz5|-+nWzX6@0w zq?@;=4QXHVnnj_#v@gCn9QlsJtNSVCVyLfMf^5ONHM~O_TPEAAy_n|=E63`YNErL_ zh0V!gl=C8QPWgdlDAE6_%#t|?0BoJ1Ff--J`V2z-5xZ_dC`4c1{h^Ccz8gdtTV^qf z|7h5vs#*82i~qjvA4?9-$cqO$55WlN*0*(>dgT-AM74HgCTncI#rDo)7YztE5j)a+ z8^={ijW0NZji;#H+{CS@qG6LaWZvW}b8OD$S0X*fj*FgduCzIlr{|eBJ5h=|U3l&> zi8Z*?6__E<%t}{l9X}A$;d5RQEkCgHR!sTaoP{j^HuKqbX~m7v+nYMa6X_F0Y3!RU zOOG>(M~1i<S#hs?y}CHZk9G&|CMjjZp}?)J;Y~fPtkOr(aS|PqatvR#n%`c^XzcW% ze0-_x-n{;&rK^gmtIirU=l78e$Xj8}0_HmiRhcvu3+9`*7LX5q3T0=R(Qb0Kn_nW% z71UT0YiKt=<Ryd#Yej4<a|k!GEGPn}uz75}%(XvV-g9&Ceo|V@^*0INAr`(HB2=W? zn0W(Z8V$Z7c_9Bh!=1Ian8(ogNmzxVD(T=<_Mv7q1E_2<6_>fVvEXPYK|wph?>N8a znF*MH86?%$a2|a}YANskJ0A!f^Bg||@nh(uJkcDD1*0V`=5n<wgBmULo2Mw<*R44O zhipIpTPyM;b{!EP*=`!XvP(da+RnwyQ%EGkW;`dT)Xl+76kw7z$`40`_7>9QMb`86 zNKEL9@Cvb$&5K)Ij61<}c4Uz3NauDkoA-M0NQCyv>4Y`~>14`?7o->GbP-!+(Yntd zojc~E)OIl7W=^rF+stCx0OAD64Wx2NHwWQ_bp8?0NGh@%zgf!ewP>9nUa#zTy6ejZ z9c6y(=}P3SO7Qpa-nwCfy_c@0SSi;&Q<!6dl;aP5yq?zrsYlTng<oqF4a!iR5D9zT zogttr)<8cpFVJTy%F$!_Ch$9PzVv%2J+|M>y=*-UG+Tos>E`(}bf6h}ta;71&z8hJ z=&`h?cc#b@aTXA;JMi)cT`bc}6yf@U93f6H_r(Ut6`P)%S=s{=vxAwID>?37yk~BE z5nJxpKMp0<`swn`YjpyszEaQua7xwO(6Ik~BA;YB(XWC9E3y2Ydj&m|UD`ll5duh@ z*AhAGkH&bg*-P-LogTbWFlF3Ij7aSC$4~6T{0!V<-f$B)CUvGKb!I6JdqZA=SP|hw zWXtle8$Om;vU<$U=t;Qj%!d98klbZnWWN-WZ{CLTE6sT^THR`zFXc1{XM^ECGRS$b z-n-J1aq8F8nP2-Jj{OjXSbkp}|6M;>$bk@z1F<deEyoc_*nB6G7=NE0m$xA>9<8?> z_F`a7Y?Vmf<^IvPyf9==%VdvnPkeU%X&9GeQsVFXmPZDrx0pjRDY5bOANjiBCAn;E z8kin3MVT-0x0_P$E3ZB=-E&U9^AflcHvPl1;%{H~6pFRs7TO~cQOH{Ag^ACG)_YFK zGcD>7(Vx6FC+&r2A&*$M9KmiH=qrY09n%+!q{E%o!8?m9gM12<;b=`jpWrBs_ zf=q&X-*ctB1E9{MQv+yz%R2_5aLFx3;?sfN0B;N`-V1F`RJ=D?QPZ4W7)u$24IAb* zP;ML0t2O8T@?rQC9mhZ0Wo1kYiS<Noz0iM+H^)j3o8PI}FZYr8??3y+z2L+11BH23 zPTU@y;dsWBm9=uKwx$lmUQ@tWLgwaSxkF(Eos>M$Dbe}SVdlDfbo_dBw*kIgv+%I_ z%OrPcbRG;^c<Eeu3zG78HtN=-_eS~ZNG)P&N9b9_ttE@GE9MHmewF@Z{1+j#p`MGG z9fvySwWe+fc9BO;z8#zfR|Rk44GY=bvXMf;<s<uP5E?1xNA^a!fGH<QqN4`D4^{u~ ztg`xGo<Ah&isQsQCW6INSL^10rj@_bLm_`t{kD#mY26>4+2hS~DgZ**Tvuv&C6b{5 zlcMKqI>7lBz?p?^7Rb@B>@M010=6sl%c<^{wRDO@A5OjQe~QhnX>Q2;`mex8lt=aL zMVyHwEPvfi-o*NABPPC?98(#TrA1X30=I?HHGS}S0k~*Z!-RFB71<f0?(&H*Pkdi) zR8j*y4acTDhoqVVVe>&89LKOjCWZKCG)`@mNHxYZ3Xy&W87AAdD1ppF2{-<T3tFv5 z$0`Su4)6j5VQa09He&C40%$TV7^6}-Ew~%fjzXzwt`PMVAr7PFlFxGU*&Uol5)(B; zewGDi@*|UaF~8!qKz?Of=gY6mTw=}KR&nlA-gi3SptftD7XYz7J7-504crffdr1C4 z+iqJ#?u{!%v`{4jtxBx9He{Ck&7z-3O~o2ulE_;nut<%Jd#4~LB8>dg^SElQo47l% zuBz~r#RCiPobC3GYe}SbK?b#GoeU?tS;_e1Y-YayDbdi`DzGpCn^Z)Bc*Gl<pw4?U zSa2oy(Quc=kJl-dYDDsMK}>N@W-zh+;;V+OxR@{UrV&GOSXWq_TaXi!*~p-sRQvZ| z*=m<km=U7laK^PPyn{g-OMYUEJzztdhQ*^`c}rWn84w&0teS;;VwOy@FkJWux6ogC zTGK;<llce8`MxpS(>^!SV%|g96>;5#7eLVtrKlX>&~3y%=1GdM)MzbPAZKXV%zDlM zxz7i=6MfgVn?qlb&PXsEgn^Sv?D8k)9CbP1Qh*iHC}+O9D~B)KVA4>ChD6PLR%`8M z@%*I1T*BBeaiE5%?9_49D%Y)|=`Zfhs)-E$6*KR0brI?3<>2V$&YhNw#Q@pw@3bK6 zEmU~>&GBPlnN58fn`@Fl4;8^y3f9zRunMn6RNcVeBy*@wu5MX(zV6wepY>NFt8e8` zXeG5?>5IKDI_X*b$At1v3XA_3DD2vTlb#j-xvu}5`d(kR0bnb;wcvi2c|gj{|1xFb zb*uBLO3OrByL&jQj6l?nN65D?u~WlPenF}^a*PX##nq6@{@X}fdGVKOXUyuF<E0%B z%Chv586+}d`bR5ge5qQ-t!}*3LoKDg?zh1UX2RbV?&q*RuyU$abklyqDt_APy!&iT zi{;KJd0{YlVWoNHKZSoU75M*(UiQqFElc8@R>lN<L-{x1iuR-@;yd~`@V;`=m+8E3 zvDg)^p1Zh61`wNLLC}8_9Kq_!uefvY{oJUo;X_Z{lfKsN+o`#}$$jXczCnVdZx+97 z|I){~rM$UP&q}u3h<+lKXf#e4&_u#>5APJCEIFg)p$Pj){Vrek5xk)BP~}_vvGfdJ zfcaC|F5WswkX@uy3uQfkH;u9|R7IznyKM|WTFgJ`nXU+~=Vb?GQ;;upEwW4_)LR{s zSRd6P^H<iI-QyOEwXT{frbiFFpv20z_*O~NTR>f~Bcrll^KaJ$Tc3^%YctOspeF>W z)3>;WUL!v63paMqHzk*FV~2=;QuwiPq!5pU0<d78UM!!vdg}OleMhiCZrN9Ak_WBm zf5@1jlRc-S%WOUvpBeHphFg(rlK};jr&kJrk#%1Gkx;T|L57kA>U(92JTIG2VH28d zf>2liN2P2(b<h{R0T6G?41zzgmaXB>QkUN08S1k5ZjOB>!NzgKfRLQ+^L&drvksWo zZu?AZ9pXNgS$sH17B8B7VK63_3oJHMruyb8(2<B<weK<6)iT-rD|uxAelnKZF8(Ti zk3rm=O>hU1a1$WI*7*}#Vj0_BV%@YM`{A9CLUZ*eIr`llyp5z3Vi5U3{=tvz_i{3k z{eB(4;`?_Mzq0SkFZd#MUlsH?K!@|#GitEM-LZ>_9IrxThK0m`3d6B9{oBzvDDuj! ziX#0d3qqWsLmw@V=LUs;kn0)|^rX%e)tpLRZ;)lJ(rPh$u{AB!nr?P$l1uGWySJt1 zTYi(L?f(o3u83$v*Lk=zhjRVbK~aYKZ%Iw}PJFm$Mssk{&OF9*^;l;Ww8QykrWNz? z)~(>7x2Ic0EYabi^;SScyb~eI)4grs9vgkPwZ&W`N$@7%W{t2ln7UcvM2jQzG-Qs{ zg;$-n{2>8vX*1R64a4`f3AR<VM&NWdRtidSkI`9~`Wi=9(W3Hm_-Q`cMfA>60XTgW z#f+e{jEAr}ziQh6&8gr*#?oS%NpUBV8f*{(Ws&lC7Q!M424qnpV$R?FDYN$6`=4fH zmGN=WumyEV^eQIps9)%$xgz1xcJ73t(TKSyO$it_x-Sc_Ql-N$Z{z9{-=9ak^C{p9 ze(rk0#;fA;3lHn!VO;1pZZjcwYH`ZC=k9I`)p-f<ZeA@BK9zW<2%6i>p(uljBr#s} zVAohSa0r1A6*(tWw5C4V_Db79Tf>RBJ&=?!WK}{J|C%<FZ3RSasb9Zfdc>JV6{e(s z2G+nQ7tG{1%0P%kMe!G2lHzhtwl*4bCXq9GMf74oaqum4K?tO{n0S4p^sbUi?+Y%> z-oo&;luO+0;*oj-1=Cnk9L)0?dG@V-fFJDOVnwU(=7}}#Rgay{Pk4)%-@Wyz^)`+& z=N*}6*U;`icn6}{hFpG3Mqk?2Zfn^@Ev@D<a>|5g8h!-N%hn`O7Fx}j^1YY32EiXd zmNN&YXWD}NMLPtI7EY^O0|!4@gg2Ev-ifY$4aPY&Yv1+wmjAGl#+H=%9tzYX-tcAK z!}*OcPxXBrFU;<ldU{@A@A|yq>l^b$bI_t3_J+Fz-!A?~4&N%&s@TH0Bzg&OUjDPe zD90MGDECjJC|AQwRWrgW+2Mk+euA*LEhg_Mp;X(=-3qE|MZOg;F&6XvEraRZCX!M& zV}r%dvfw}Dr#rZXA0c~^+Lk(6D4u-bvQ4D7eXK-QTV8xZMiY&aQV&%2H(O;@Njtst zQ=yKjr>}=PDG@TmknE+0_uQ<nE#ie(q@gD`;tj+O+KEOP^xB{5pjEb$tNol@?OZVR zEDPQ%tKP=V-p*r-#B4P2LvR|MD#jnao+v<FU$-1_dmz%{Dmh@D-2mzqx6_ULr4;fA zzSV?H8kvL$o5Yv-Nr2MdBGLlg`l?#PW}X~D_#EJ~+S#%}`dbP&QMi)NJsi$hp~L}@ zW1V@0g9+o7ecEE5S%nHBoqm9nXe03<RgqCD6QQ;k#)&kvyl|r{E=!MhgweKO`KE&9 zzklN50x*%uanG>-#uny6-CYX$L#^T;J@r9*st%7-T08gpVN;6`RtS3aS8KN}ey{Vq zjJ{Y&LrsUbVe-OK-$R=c>6-Mx4O4h;a^Fu(k81dOM?=FU3+wcId+IOSo<@Tywf?7t zkFj7ls1-i;%$rYdFMPPEwET?vPde_CaV16B!&O#t8rdD}fG&-GlX-se$2uS@#LE)m z%=xMdNSWu~%i-%(+?sZ)5Jk{aXuj;qH}fkvD#8`!0^@%Uw8HtQHY?~_Q6d$+_Yl*^ zTK5d%M}^)-N6`80&UPU?2oS1G@J%5vn86dxS?n3wTZu<u)37F9Ea%o}v9m?V)b=;r zyv6aj8XjfID<%a4ox%3Dh<VQDsqc%oWDW7wWXk2oPj;@#K*h<cq@(NDZ!-$p5xQSK zg%;T+0{Xe##L%p4H@9xrU0J~H{70sO77QnbnZ%EBXd*yz(PY#|f+k%g^a8y*`K^6V z)&rIhUl;y!(XKo=n1|#a<P#FQt}0UaR}oOCB61y06|O@tDTGEA!DB1}Fg?sQ%7?Ej zF+!~3#q@nKmw^NMY)KPeDSUtN=7qn8Y*tW<D$LYS%T;Tsg=rx>8~lMGNc{cOAf?IW zTkNO2JJuzYGS=U3+d2>(=DejKU#wYCpdaR2yj!?KuAb>gupJrGWo|W0)0=$CPE**X zi)VwyXvj$GvK#`1Yx_6xY7uV5O)NKaNjisb_&*>Cl#>GqYfdeVZw}tZn|m!L&dcBc z>&PP~+}h1xkjU>QK`E>GAWU+QKXG7QY5w-2P<pVl!aOC9#yrXo*#aU)9$S=`Cr5gp z{Bq1I;n&&CG(j|O<0ss{<d)!Fw4(49X!ZJT5G7c5{dTSL+`?Ps!lH!9zwU$Rh{hiJ zN{Zt4`fiU*`S6w{w|K<Bz#Mt5QURFLnx5{UT<{D&auFA)xTky4ucWx3ddO_WySmO; z?6{%5GT(5a-s`(jMBz?v1|7MsM|)b%I~6^VVF=#OW4L-W!yD8y*<4flKR}9sE7_i= zogoJM8yaN~`^Ro1RcCk{xol`#GOK1Ma^G^T06_*7yfml+5rZ(P<*9Q#wsUsmEukgj z%(~YE>H@Eid^d>KtSr1HW#IKb@M>D$t?$E|mfWHbU8{of9dGZl<a?%_GAxXL-c9ZZ zVsoOyGVm3|Y%za5Cj+21x)A}Ww^1%s_!RLCWhiZ;T@|$5>(;%i@cGb^ij%^HyG^Cr zM-FPf8@~Y%)8m}?290kc&ya#jKp_%YNC9w-fK=tCDAOZAqK>7MNt@Cy(h+W4myGA& zS?OE+HHy-Hd8U2sTiE>i)j`0SNS>}${~9WZ-BV)1dk3W}dxGGZX)XwS-LLYQyuKTs zmoCeCL&)1Rt#}x|uujNyITm4pu>r${MrOjyCnBH}+3^{kp1>%kZAnEzJ|{r!IAf`b zpOAv?^tg+n#k}=OZU{G?EU=3@>NU;<#Laf(6`2VMvy9}P+x&)tx{Nv}3;o+;{WP*- zbpBZ|vJG&(`3S4qpL$;wEVr^A8Ig2_xXdp9XvG!LVK4!9_LXK4*!k=XTo&&XaM(f- z#vn@(EtsF?GKi`JYj4>k`J`(vY`&ZOEQTI%7!56^8jVGO1gru?eWpr$AR&E3Ual5R zXt^yYbLv<acE`QAKSfbiSs|Q;?2}<3?NdW$#-EgNA^Rxj<Xraj9GNvHN48Oa>_VLr z+=9lSc5IW$F)0u_2BjM#2nnVU7Y`w9I9Xr{KHSR1@TVVaC9uX;{sqX&0i-W=j>|T1 z2?vQ`=7k$|uc9f`b#^}YDdj%qUui6C-sOq1>0{C7)lV<VCmE@EiYMn!xfP<7E!D~@ zF~764+THjL{D*9OLfwb37;-IBntBB9Em`@L@B@s-4@dB5YJEFSJ2T;Y<b+oL^qh_& zuDUMlo%m?slc}|-jjc<^pLDS6bNl@KlV*#|^x=ZUdh2uh8Dyr<B>pyV!QyA)k2ZJJ zRmLBlJ@JtXGo28r0`V{2DujFaAl2u}2eAa-L;l+R%pmzIl+WI3i^0I1<zK?&z_(cF z|H@@jrcdzQ$|LvLUhJloU0P;8^ZUBd8zR6UW!lY8*j<(2`)<JT4o>&cy$eL$i$-5J zwyt@JYiA+hm8czxBQmboml;?597poEo9bL!M7n^f=lsdZ`B#@^oBJKfwU1417S&G= zk;zgYaIQrRHhPWRREiQ8jnCD=a(}#^<Bd;R8TvB)^>sJUQ7b?1+y6GKpngB|TQC1B z>vSmlS%z^0zuY)toaXEW!k57(+8KNguuuH+b$g|qZV_mI33z?UHtt4m#vRN4!>i)U z!E36tQL1zDCDtGC`jYLugb?;ikHz!l#&WH+q5b+2bMhtI2+)RVm%9A97lzoZe|0c_ zUP=<YcR+rY1<U2<=3tN??ho(P2R5%Na!evk4vE$Lk~E2cr=0mI(?EhmWmy%hluv9f zB5);(xbPESV8Qw=vC|^vzBfgp+x$z}u1X~t(m|Z(ZI`HUUq!r^u*2BB_S@0R*xPn3 z(Y>wzMYgHhHK8`SGmxUPGau^A%jO=bxu3MTg{SNPwQOwPAwyzKKx+({`wXW-WVsj^ zAWe>C3s2F)H@Qt+NkLeF>XtU@nWPO8gaQshbX*SPBYPgvq=_8Fp#}D%oO<ZHcxI{$ ziKiFHa2R<eOq3Xs5-P<_8`vmEQXEY$oZu|VHvTPb`~bIc@meX|NYBk$Z|dE231F=Q ztoG`8#4Ck)FTVeBMG%h~-*N;t{zRu&LPb9S@;RwYwdQ-T*|ROmlk{-|+g8}zrv*e# zenXOs$bW7QzQh-L*xu8vI&oYiTssosPsALmTEHs$nMG!Ip!NL(ZG2kC*kX<yE!PO8 zuri2d+1!bTVdbx1AP@g(ws&v6nvsVK^sGEw8FMonxS^j#a~q}4E%d93ENnt^`2x>1 zBWxmYTXg*`={ny<ZiT3fZx=_z%%_q3dFFT&B)Pi=#Y7GjP&rhMNU53;G+nIx8fPHl z9D&?Scc7(EJqb<?n-|plh;y|D67o}-%Pmev*@`_5B|3jz>@1lkESakWHPRA;Of*dM z5bVp4gg>1m0>w$K^iYN-$_H1d8B75DrRjxo1hBPR*o%h6X1@x!Wb7D^m<{qeBREZk z^DX8<dF|$w9@G{z3z^@Ll0de+8Skl_Ou&ktlG18=-?7v0E@&EZ8M$e12qPzCKzJyt zOUDHIt?`1O_}8gjg2MW`#nG=s>N=NSoIE`ThDFQ?jhQ3b1ZRhIM2`rUM=xi!p0ik2 ztJ*6h){p2qWm5bjBCb})--`}wazua~F&};{SKcFQRLe)T{K!G&2^2d#hM$JmNC`ko zOvaBTbn66XShmc3E%Rb`uFdH1CP$>!5wmPiE2FX{F4Gdf9#kT+et2qq>(Ya}c1`Ih z>e_XFr>|?*F@(r^qN~5AYsau_3Y*ezga}1zF4~P|LCKPXng1rF4}Mf4=**GXs=uRE zPa9M<ihqed37zdlyz>W;m!%?}HRf#FG`n|@j|W#&r$59){=3MtZ~m)2k9oMQs&HDf zt&~K+4Vd3nTfU4|efA3FkY|+XuLku*UqWN{*=T*A(7K4SUw%>!168?ul!*Cnq}%w{ z8PeV_2emhk_O9N0d%t`73)_3ows*yz?b&!=O)uv59})bpWI^7k^m~R}KunWU#SB5s zS*#Qh&0j2bd_i6~m#~77K|`N`Y`I)DXEvG&o<+?^C2a)8HQ%Ba38ZXmVlC-nS6>6s z5)p|W!HS&u`xf!5-eOCT)o*?vPkMy9o+nzVlH1#$9Pm^#q=p(NXpPXs_;Pdm^|>3` zxWCPLjn#q9`&o*@;$Z?CDn=zy#5O^+6GRcCdOvke;(|Q^A0zt+I6?nTC1a&bo1Q1N zxke(g-GFw#9l)V{tdZW4F_=6$na_eRNY-nhJvK8R2k97YZp?-^W!a1CUF<kk+ZRxX z8}#41U!Z^43*APyUpWknn4ck44VeJ`6hz)*@$a1MGB1fb;KL<qJe<M5?0w2FpHh5i zpmmv3OaA0OWl|{fS|hJDdcE>(_ipdZCj=+!EKUl97@{~wP<wXKz;%SBc523!mYFM5 z2WOC0^FH#w{C5H1(EP6cq-e0q|Dmw0KP2_Pto{MSk&ycz_5Z8<IEbYFedU)UgroH@ z*suC?`LEbZ{hx==#d6my`ZwmBQLsCEjQ3yVfAFpSfsfW7lKLO~WPiq+%TH9P&%x*O z{Sg+}S##ZpGSh=I<9+u(m;bXj_ox4w|23)qGYxULuldU5e~(qV=lp)Y|8lH!DklS< zC%yaA|6Kl)_pAS!zftNxdB6If%YV$j=)Wft!mgsl^dAVb!crGAKH_F`k+2O0P<D$s z0nz>w2PD=NpGbAMY8xpRgKuuz$u|!Mi9<{V2d&3U{r8|(GqnC6yY&wo@Wu5fzOa5F zf#uK#6!c-EgvAO7QE^`(7osEK%tevRjDpM$nZ6Aa`4Z*dSM#Ak=pyAmKmY#_{Oytk zpB%nF^PkIq^6UG9zncFxssCiP!yeQj`ty1El*@n2o&(rx|38)f&mRqbjoh#P=khOj zZGZZ&`ST8-{srnpU|;>u<-bDx^bF0Pfqw?SjyhmZ{JLg@#ou3+eKCIBG1uzhejb1K zi62vSxuafa?%VSJ2fuRVZ%|92LBrcSeknZW3jD4>{dnK>F_-`4SN3~;wn+UitNVgM z9oj2?Y5ki2N%rs|3v3X6W#;FeF?-I>3&ZUE4EVlyehM*u`q%U&#~+lA1AiN3LeAlq zdf)KL<$v(y{eh3>pDXo0sOPtR!6%phw|m*|_r%}JI06o(kK0Nud|n;(#qc>`if~Q; zivH%{Q!eny>n<uY$Ef1iP<|-WpS|V(#Y_7GAFY3*)c*_RkM{+iT>hTD@Dux7f1;M_ z%)g%Ij@`4l{i5%=@}u@_{$H%WP=NJe{Tc5Ie!4z1|Am|P2Y#CWHL3r?e|&yDeV)GO z@}IL8ejqcSnf3R1`uO8wi(d=9UyNUWIOU7*>+}5)(Y^E9-&r5O&{OWd=0BIeXU`3K zuk=Q46P(xHrv8)ntNvX6WA;*i20l4_S9so52K+~Ixv_8hk;}i}#r>XNzwECI-reu{ z)%;iNx!>Qu1}{SROU2AV4rk(T(Wd<2DomNnKUIH=zvdZ!PEIj{=y7hmmj6U2-Av%1 zzwhzp^7m}opYdA$Q|j+g{|5WQhg|->@duxuFS(X*#IC_y$iZ~q{m<op@`e5Bzvizz ziu#{a_Y3>#e=h%ndol!jh5z;m^#7(~s9)~H_uc<o{*n9Df6aft)IV~+`k%}H*`E8q z^{4wI0){dYQ8yMTh3mVj#mZb&=fAwA4?zs0`TuBp_rRvh>+wHrLmOxysZ@wsA!5WT zRjWk=3fgjM@djy26BQ`9F^!#5)C5pV0aGUNO{Ux2efy|$7w4SQT^O6rQHxZkbKZw@ z^ENl1+UZbdxhUlKI_LdPnsV9p{o{w`o#y@A&vTyhoadbLoFf(%74mJ$bgvXQDsCk1 zJ(gRFdm<uKkz1o)sjxYWE100{e&Qtc$o7_)cN|ibk?ofwWpG`if;~zR-Q~mQY{ABM zZV%<%c--Pf3Tg(>Rc7xGc7;SRinhYTmzcN(_!dQmXh-z|VURyK_nUQh+Z(T3QJRA{ z9hInJBQ_j~PenNMCyXprgZ}mB1!=^{a)RwTFC=}8wXdd+i&qdj+>BAT1_3VkoGV5I z<ycW2k3E^3p+44&#mM~QZ$!-_+?R|J1A9!5)F|yfg(rj2L>fQ_gbwvR2(xVJxb@s_ zZ3_A6s3W!g>Qf@MmB9|mCPYL55Zw}S$JAgBB5;&Tz7=*TDD7rR`}K75mscw&)#jS> z5_9OMq&KQY)>{xVNLRQ1T1bBRkOLjL4qktogdV%bfM3`}Q{=zxhlBYqeBt2y2k$4E zKPdHIsPdctw*Ch5&pePJIAs6VN&l<I4u}5zPyHXvpH@^DI^Ki(uld7Le_G`$|E>Rn z`PUq{|8Ma!<z~#beEb%~2EPS6R6|$I9}!(qT_M43(Zk8Ru=Qu8rUCQyGjU)5YN#x) zeRWLn;yN5Y4L9HUoP!sAr$9*&Bwm2;g(}Ks60;(NN|Qgi!=v)i2k#PEg)_I^CbAXb zWpCdA%Nzi6tC1`6g3yvS-A?;6X$TIMp(hK-5gij_Rz}cK9L;?O<=AK~%X_GbzHiFB zD1k<BG|Ni6i3;qlUaejI;7VC(fBBsv5G!qM8c{CFvHL=k>7;eL_ElVN@n36{TNKaU z%Ej&-tmUc6ZNb{zI9z=kk?M_@K}t`}m$WAJo3c-O|8S_1dR#4Wkv$>~zUdCkl}6aZ zizu4ltazuH^a#M*4lr4tLRp;kIq<k@Rd{ij_4#G7y2-82w{wFlX<x%U9LeBVdd~U` z(Ssl@S7_{>3XyJ9h_ItVgdH;+395O6P6@z=6K#wU=H#aeZi@J&h+m5MrHCJDt@^0u zn&-^-bwC7a*dkbDHh1Uam!KT@CG?U(R>+qPU7@BSehM|sBAuU{@=lOWCPHrRmWu}1 z97hC=!=T+nWnUO>pP-4V(-KDusJX*>FCr@$)(5{;9Fth3;ANYGM*$m;LJl77`-6i= z0Ti#`k^Nrq$WgQ&j7Rsj3m)B0?GP^TXi-|OcL5&<cR-!?jJZ7x@)(e3h9J)lK^}~5 z&;H0ko>nc64`yH2Ss3b2oQpT+G<5B);7G~CHja25@Hsg09J>_J!2!}Bj@a;@vi1K5 z_}|4{@x#FX2Uld5{lW16Jv@oP|JsND2l%gf>i-%3C)0MslvDeEf`9p@L&5)%4;}cw z_>dGo5dMGsmf+@2bMtQw3IFED4u(HSclh;EkXtVam7}p<WEHZa4ljSi2}=R$9XD8< zL^1H+^0Ov2{|lhb|C--L{o-Hyf63n@PGQK;t#i%4MV7PK{@Z+f6EemsmaPMXmBp;v zimYa__K@$^2=N-&H6h`Zst{w9Pp)}IwCPoHLwYhFxsWZU+LdOk?s~%c1@KWxozeno zuxGh@y?&eYK%>^nz4;1AMbNR08?@*7ulJ`DEkZ4%d9j07^=nX7cu27T7n6{PSvUz4 z=#cyAM7qO3-(UMNp%zN)+mAQz6ZChdPD4#hQU2@`jk;sjXPYkl*Dm-r$R!k6`L>3z z#ccf*Z9;dva<lgDB(}CFnUZ^>^mKAl<|SB4QU95_Pe`-eQePWvPsC=}{N#;n1YT}t zN6mI>Vs-S%B|I^~tKyRWa~lgGvOCSan&y|Gt|u9L{geO0P`~|2Zm4%{(V_OwbIc0s zUy|QkhVGmJMiaiL#XN#L73qIZ{G@3YEso1RRBpLs_o!4*gGi-+k*<kNj~_c?KjB}} z^uiv(NCH+2H|KsviHp?PWM=fLdR6YIN=%`B|Kg`inmJw)Hif2w45S6A(xH;~u@^Z= z0)M+@F}0g94-Mig{>P~yPM=nbuJ}sP6=MP&53L}0f}qq2aMKT3iQYGoTwUo(gt;4u zS^y|BieNi;eP8^D-5BMrG)*sVqY>Qew&E|9`I*xkduArg=QDp6XiS!V(c(oQu%Esq zw=M2rwXBmOO<^fweuWs9TDo|Z+*aX?<1J{q<P|P`@ShX^;5T}nD#w3Bgq0<xm-I|M z)T_QZDBin+R41pYO6NNy-{v8exXaoa#z{z{35fNwC#toGgT{cl94=cB5zS5Kr_2){ zV&aU0zIc?;Vk;0aWB14miI<vb80uK{Q~B#Ond@flMI`f#oq7z=403XrX5mOu&L{Kt z+Sqhf|HO!?w|~?O#J15f2Lsej1tgfGmyzY5fmfWf9#hS_KWt9nFZv}4Xz4ujyHEx- z<=6T18<yEz=FH|YTD~B;dWI|BptHE#o<+aRqVM0#VuRP3hqK=7e>#Jc@y>dLie{KS zpc7{97XD7=W1$3Wx(K(@Pt|NS_0Fro>3ItMcaQ47e_^w0Zaq%@H8;Q#ynv$r);M}u z{ddm(;*JL>gxx?Ev-EUz3tNZmr=Pk{*t7$$urej~`R%&j+YQS3ZG7y#!3JYuaZZ~b zT&l~;VG-pRE_dq#2eF9aRB^k*L%sLoJl0T0Y2)AaUn%|t>8$PQs;N09LODo{64ju6 zZ#@qQ^+?Ze8wsbpDl5Y|+Jl4O6;-)Y?$B?RQOzv{(+e@^-ii@+eZlluV$j`Ph)p-X zrUsp0P{6Cg0PG*AAlMvEl$i8QA7}c9nJIiJK?fMe#704zv*;zn24MVsS(e6ln#_(z zmBwK3@HBscUODW-zRCQ)Tjq1l&j#mneC(K9jU}-!*foCHu2I3O%LIhtR`OH#A7V<O zz&fS3!mA!IrPc`F=7NZC^ECza#2qW$?)>G?{S~M$-JTke^BSfuTD%AVqV3CLad115 zUR<3q!?rRc*-BV_b2bdD9BaL2+ppYGy3td2e)8Rd#7EFQKmMnqW}|y=21*!=ri#o{ z-2wrBvep$R;sEz#)gF9Nk9zcFy}@gH)FZBkHm^PL7SFmp#fd7igLEQ{(mu4WQdge9 zdCgJ>>6Y~L76CL@|7q*?lqCL@tSz7b@)M`P>TH1v@(Ymcs#`a;Fh1UPs3qfLyZbz^ zsr$IWtiH|jN|IYk>Hu7|fbD7D<`o5X-T(0C{tA@7pE`qV1$CN4n&zsuGo@D$t;*H? zdZ4r$v?@;(*v4#D;mqci`ZHFY6mOM3PLGeAIj5!N^hB_?M8+bczSQ=Pt36xQe~zS| z5kD^W1j#li;@R$A+oqss<9;^4a4IOky>3q~Zw?9#PF{^+mT=k5zx2+6ZN%B|3tfL+ z;@`Ade~u)3O2od&U-NEvf04Pq0p#Cpj(AVVHkM}M{rGc`?<>-cm~sl0wmvl5^Z+NO zL-W&(ju-88qTJk<dp{-J$Xa%?e<k;NJT4%KW|D4HD=FMW-H=W4ZIJtGklyl`*n8T; zug5Jl_FqeM>~sYG8CT3!%^W?#8^(-(ONs=e!Nlksui6B#0cyAkPfvPj1wHV$G(W<9 zNaD$4n~HzKT(^HuCe?@)Z#->&SPBA*PtTjIMz2+BMax^mR$~D2Y3}=Y5B0N^6D5;_ zR;zi1yfi4?#8Tni4}@L%(=7GoCZtRp5~+C;(V(CNJvO{w`k4)Hp#5_CvnBYWPxknt z-R~B4_q)xWmuY>s`R+f}a}dzB-J(d7#{viQ#6Ib%c3~vHeVfOm=Ywvi3ktrJTi@Bg z0;MlC*Q@&~bDK-L${hK+USRm?1%4r`Oy5Ulm>v%_Nt~*(DuXWH23Z*CM!hSIUBidw zHD%g0m$=qTN7elb;+E~%gm`CqfjSvMVDVt?C74nvyfL%;?cB?S>8M6arnm%!)Q-i^ zNiPWGI<+GAy3zsf{PzXCyI%xA_PIyFn~OB$>4|+|5L067=_AN;?xH+od6=>?U2H5i z3sK69@nR51@-|=o)cZsct0vlNE|sa@TJnwLn<YhDE{?QzXNt@wU~2V#W74C~3Uy3h za295Kon@A}rR<jCjbk<zG@L86@%@5Y8G%*AmF@CLyLgULA!+AR!UK2<YG~eO%wQi{ zxR$whkL`wapr<5psWl(N+rROOe$Kp;K_%uB5C(r5_A8k7vxSVh;zwHz1ReZ!?)8Zl zgh40_G0o<~{N9mQ$J!B2;u(v2ViUx^QfW@7%DI5r=t~r8ESw=6;}$pVn=uc7zYVrO zuW~G*8|;dSf91Qim>JL>pUz7w;unj^aubpqIpFQE8vNnzkBiJm$+J62Jm+oR?u-~R zm%HNr-nlLzk4%ym#|jts*uT%P<_DV0D|_-P>fT)hOt><8t8mO#q^j9GbcpocwQ;L~ zt7vx|GVLP5;53=!A=749kx;X_{E%rutD!QC|KEfA)9d>}9mFA4p9j_?9R#coU!-7l z9NK67w{5>4csBaEf6RTk-GF3)KL;$vC_z;M<_$@Rmdnm+nRa*bF<*1{KDS|>xH0Ir zYQp3Snuo}hD{Ji#P9~zDeiO1`^*ESXk-k9um3AIU8SgCxw~X0Xys->iy%NW1iGP8s zfr4>NMujUe*IH1~+GM?IK7d46(I8?ayj0L)2+Mr#TGH1_#F$7ENv$FkzEM`^RBHhN zl+DBZ!suPYn~CdG2x?0tY`tto>oC28UESHezX(TemR96%2fx?JpN%4eTdB2F&?B!4 zKc));k*5A)D_SABE|FZN?1HI+RJ}V@?@85rAttGMf2zJbSrlj+g1}n>g1?cUa6b>` z(j8WVRr3S2l6G^Ctpg2$kScGJc|%{ysbszoa>j&u$WB`Md6`8?sv)VGq^fMvqFj>5 zWP)}qTKq+~WZx$WYX+zV71CCHB{$SKTRW@F)^BaTPxlAE?#EXmcZE*l1Bkh74I>_` zM${}DnYa<EG{07x4mz_o6qB0=_CmfP)@5Vdc?gTyu@vLzvj&Le93>GULh1UF<h%ZE zQ^Zc{$L(uzdQM$c|G4xVS6zRA-^7b`_xmF0Ykb}Bxzm$3r{^@d+iJ~qqhkAV4c*xP zm1c^Mk^VGW&zgJH1joa|mDZ%s_=Df01m1a<Phq#nY0_-}asGKLBt*Bm-A~zya4Sr{ zY}PJw*PX)M;=;inKgH(3m15l(+dwKy>(W+-V#%%65GSk;9u(?Y+0!E63kdl906x?X zd$Kq*4;Th{FSjKECZUEG0>kp9i{O%+8Xj<JV9f>6vr7P!Qm9CLG~abD;1vg6<I{2A zb(H;TSbBxKe`NZ6Uw5B7?M<cQ_3riiUEEV$SrZ$Z-JD|U=yJB-KU%2$Zp&}@ET`ev z(b*yqv;G%39vnmeifjVj!yN!Dvn%TVY$V#srREBA^&JYa+U+=kJT8|%2e4`<{~7c= z;6m+(Q#FASmW$7uzX6f{GT?ygMP(A6G<D1@^g>L;qvpe33S%!v{mGzzIlW&3$k(zl z2*`6&Oq!#Qf*6cfek)H~s`^4Zy@2$LF7pG^S(f;3vRO4b+PQHKljS#i?Dg{bAF*EG zFKV{x`9%!yMWySv3dC1YJaLS5O?j*6XUw+|jr`g*K?EaiVR8E>s{e>4phF%Vd@J$@ zjd&h#eUG=G2LrZth(r66$!6mLPK2l=Au$N;MT0X8kYEhIb<vDWxA^cQlrH~Ldd@7l zR31#PK<Vo1lB2tbFA^u&o?rxrBj)=*6KH~ezOL<(K_o^cV7}hmkvg}#iu;SUyGn32 zR9Gh-hwR73c?ETK*0bI3csBa=+s}7*UtpsEwfyj@bsGb9)|1_R9!_u8^WE=gvHk#W z*UMcZh6eZm8G}!h0rN_0b-Afip|iVRNJpi01Kix%_PSR5A<!;sy`b7Q=9je(QzOo! z<j)*F*!;swKUDhW#o`y_@-{P4jLul&r*M*W4%!_;alI`fK~ra0pZd-x=&E;^8-A`Q z%B8ihE=mm3+r2cx9bdZ%!4HN`V56|PjXjvD8*H2`xpZ)7#UawS`~n8YOrd{+`uhiX zW#Jx;FVO2g^=>91r2Z^)C0LUYAy-fqoE(nKdG=m1jo;jwh68ZCS8+kYo9@z!Z{f`I zkcjLhxF>$jn0IhU#;r;)_9!K63LdkgPYpL4!%86fP9}-wpQ0bJ$M`$l>d~Cd=CTI{ zNkcH!o2#NeTg6<binl>vkx~Zf$u<BUZlN0@)n(^>gQbzQk2YInIh2np`jG4Y4a8;k z5Fs|X&vRYScJQHecTKkLz6Eyo<f@-~aC(6Hn$k;|1ElX2rtinHrLs*no3<}#RzY*I zl(8O5ZrvT0jabhZRosL7i+$lra@0x=uu#d5eHX5>$$XsMM}1vF8%gw=u~>=d$=cWT zB5muT+4c{`4b8OU5h^U5Np*#OOAfxe`MQkn$N1jZ73$^7oTEL(!AscuBAx5$&q)GG z_wm&Z&j0>pVC{6=xsEd#mi>6`I3g%t*G=SPiAYeq@}{Eag`~nL&dPQ?{u%A`r!Ys+ zPRFO%r~K1m@8l-#Gg;tnny>xnKRvGp^XLJ1t$r(RS9Gws40!+F>gFr7FF@<CwN+dS zg4D_W&MK{N$$@z)*up!@_Js(D1FTeWG2DHxh`MD3<kpNGziZ<62G@gJfD#X!+^1oX z;{Dd!E{z46gaH-(iFoz2x9s=6?rhnCcvY;hD2v%0y8p3d-+!Tw4&M&wZRkK99e`Wx z@oiohI?}h9YJ8h72#x7}(^LAWyc^s7hQGAC`^`Y<Gm+@}z2n~h<pc4u*oGX~;_41V z3Z5hdE2YfIzRew>(|nubp_=a3J>75mOCOgERi(d|)KhYGpDIb(%IV#22TFHKrs`bk z8FIS*KqNpr?d^P3&H9WB=4I6+$v8=6J@GTJFgP{#)m(qBw?jw`H;-MQ1C@J-&QM#~ zvSg?&t+5dRCS7%wuH{zq&HKPF$bsAmu8w(gK&#IJ?RvYeCF=IysjbARji15R7SVtO z%{5=McmKzbAF1mUUA8&cpFuS+`c*9XesTJwO8FqT8h}6lqxn#YJ)X~6Tg;zc8sG+J z!TofM+gfyuwxPUC*sb^2qZp*`TfrVPaMvKdbg4&8=;t<4lzzUzAEL;UZ$TMZAJH(x zvkGLY6itcje8Q;n9puYpKI*j5_+52VQ!Y%SRV+Juz*<R&QQ?P8_fDZ-?%&An)gRPt zT>@#5L9r9&{v5UT_xwiob$Itx>3JpHeMPv)q(q`Py?A(C|H$N4U$<f3UYA~co;%s& zUoAS<asU-9dXnyO=Q>ehb@$!C99t5*YeuX(J4H?A)q9<7JaK&NjO=R|v=sdS-G6tU zVgdVA-*n2SinqJQvAtEYpT95r`7h=1KwTXyK>jCrPCQXeN@2g7XTkP599wKH<WGkQ zNY5+4m*Km<uWTg@dVRh1jIaYu`{moeu_@DS0vijmG1UDV>&athDYKrbmn>!Vnk8Ld za0sqIxP$=m%#9u<C;%%muH7FoADt{C5lPS&<SrgbIBxe#4kiOl02fR@<s3^eNjTT0 z<Z`=Sl-mUBDu61B49Yf}$UM_8A+fOtDM;G^R&4VdbN_uZrDEw;9c#(KGnR$t)#qxo zmO4-v`g)V1hyYi4EV?AL{~20o<}6|FcXGZ~BtZJ(>k{-x?n82n<ADFPG3c)LFqyfZ zl-wRLV=-5e9Swgyi<Q1oTYMf($WGc$Uw-gBc+j)EMM6KS?xGIg<ppb{gX|Do@dgNB zy+2&^v@k%En@wn)B*FkDjvxUK#n<VTMmNLh7hN2Y7%#Qo0H|^c-hsvAknIuQ7qTr2 z5BnLO_`m%>=lm!-jj&*_9Cf^^IL+}|O>%JFDUA+v%%;{nUTfgXHm@~G@!7AuRxq|I zHv=nU>M(D(dACuzE%5;_?#XAv2I;{j_}koWg1qB<2mJoU0l%L*;P+bx{QmdQ-{{A> zSc!3NXGYA@<-*s4m3DZ0G$uuS;Pe_U1t{0B3duBGGs!f(;$$c!{stKshZ#9<Uq&?) zS%rxD9~J$dTr@kyoI+!`93A*{wjpsHw5Uf~iAY0#U8eOUcNZl7A)Kptf<4vj+Nh<r zW=qA7lmgLq8on=AAU?tlE=xNDgOOnIU;87}>8ML_TYF*5JsyokJ!<Vzb8UlyUKB(v z);Kvb`%$4-^U%PVua1y3%(3Gqas&9D8<jAoiUjAsBPdG4qocO1J+EXgtyY(HgC7aD z)!+;*zLH-{a=&8MY{U`bY4Y6DvpE*BZ3K9K#dGU8KoMjKHRq&U>XcUVD%WGJ-PChr zqgZ6^FyHx$bPP^69x!)3$p!?i2xFc4_p7B&LI2W-S$&UMoz@H>F95Uhum}99qO<0! z-x}Os*gRyCCZlKthr{@j+i@)wms(BUC}ijry+P&|ONDA06zc^R=rFZNr#;+>Z^uzY z&cmY!c>FNKx5uTUlA$ePN`A=BHyV#%geVGg1DHDCwXV@D5T|%81cIH*J}8?jaz&39 z*5gFs4<-sba)K}%q3*XmrMu;^M;?2%)8?0yVU<o5woF2jvb9cT4^3{X8Zvs$FPv=v znmgHDrJ<OUk5)yjGipyy9Fa7<bSEEmCwIHA`=_9VZ*w7Pfl1pF6MUOzp&_`YfWOD^ zH?OZL<ZpC?vx<D1&n=qN-MxE!^6>%<iYKG2&mP&J3;H`7m06a8M*@CgGj$s>2ymQO zwe3jdZ{k;STR?l2UJy=4I9r_SvW~7j%63vUq<@B012%5hCa5=MT0^yOgGNgqJ8c$! z3af3+ud=!)&BD9-o${->(pp)W+~dBs+$yduWVC%cRDy-<VYK+IywSJ0*tdE5q~65o z$vp)tuOxO4L%yMa7s2G7!j+47!MJZI<b^M}r)cGQykPL>*@IuIqxWq-3ZPBu$wKVn z0{(U&cCoxa2x5I_a)=}pPZmpM(R-3>5mOc?*Aj7fjCfLxe#=>FYf8knIYZzcp(yxC zk!+o08!Lf(t8>{rZB9M}!9bzGpSS`SB-SeLe}cfAp%6IpKnR2mguv(_5I~Vwu#|94 zZA<e}&X$)>{CfU+E0^9Q*^HRZZ|cBct>!!q0?+r;OEJQitqt!Y3v?v}+E~^;5Vstx zZewQxOTf)JA)tRjh&fppDu6RD?e=Z<hUAY&^_NrN6sLf*qd4pTYx(`D#EQNHzXk*7 zp8xp`;wMY<<~f2Lu`0{k(a3M!rL;0)PU*FGZglg7YJx5+ywzIkv5+deRT@Fk*D#{D z7yooQoT~c+R4}*YULP;V2_6eWEUh`A<76N~=Y-%X-6?;)&xVVs$zLeLNG7we9hQ0V zck<V@?k~htY$0^O>uzZls@+)wH4kWfg-DBenb+2CI#`Dq(tJw=VM29|Y-un*v5OE+ z;3b#=*@}dGWSvnv@(%JIVF|<Qwd%wHlDluf+7HsoJj?oKdJ1|h**XZemOuGUdL&BO zIa<Tn)DSkmqPTDl7^B2bWpsW#QQZAU=_R{wGP6HEE}6;1&*v~y9a{+R7YoX^74IKi zGw?gX|JWtDmkIk+Q)=!$N2kcv;;wv2At4^Rm-_C2l*PpJi(Soi{SGSVm)-w(VExpu zlLJ>k64R#fOaZZst9Z*as7DX-!!N6nc;=Jv-PjlG&%{Tq-+v4YO}uzZtz@xEe&li$ zatu(9AU!8!GDLqY0Z23NkctCR#It_?(G*GiVONRERp5%hK=PL9QaaZqTfaMSdlB0m zq;VH=g(AY)LLmSR8#RLD)|z+4Cvkc0U)9D~^e6*`GG2s?!kp2ZtKTg)f^1^AAiX%O z+hKBdVSLmhQ%RJhK5@lq71cf#pQKX~x`in*GU#{XN3CDua-eY`0*h&rv(WH8BGAY( zfc;k>FZj|RSbQ7qCRKV27<`Y+$j^GV^{4f3Do8k;0rODUoS}VoPou}aO%gBz|4(=C z&xn|{g3b2ROtcJXCt#?gQ>f$be8I-=fp|@Fe=Ty-{WB8BAeF#(kvjtx$?sC4V&Fdh zk(pFTJHn<F3x*LTZ##IcP_$>{80l#NTI$b%QA2xs+aoe5xpA(SF0`0uzYB=uEQj>6 zshKXWD*$D8SVa~T;@|TH$bNvFSk!6;o+m|Ai!|@I!hvS9ZKF<tW%>(i-nB)^u;bZP z;M*{UP6$mG*fhvlw%n9aJyq21^lgFx%k*KWn9=#`dzZf)jM)Xxq9{@XE(tQT`QneW zP{IS;8KoC=xXA&j-<E;r_8O@|ib&q&GM3#EfaIGl#U-f7Y3#p{#BcB-_OIOfDN1hj z3#<C(R|X^?$!9ft5DN0bkc&1>|7hQ%Z6NP#a7V3a_!`9w;)H8;c3EM5Yk?Q454A6F zlswt3P-~#91a@rla;(>ivOnB?&mwP>{%g9J=;zYqhr92={B%!#y8LkWebGr*kV*aS zzWH>)>3FvP4oL0vM-H2AH#zFRq<0>auJ!@k1t31~k{)a?TWel10rVJ5JToxoww6|N z6hEQgXED@}HJ?q!yp7};WCMCfDhJ)*1*DJKdNVNY$ky5Bh5cGb?T(J$3Oh*U$`|JR zjAlo<WgVDqK7U*Oe%K-RA~<qjC5@EjcK#qZB_g58f|epR<S;SaOjt{|)D&564fvsJ zvB#y1Ns++HmBYebk#fux^@Sgq#BU|NzkHhQLfO|<KpEuG-{x)2R_-L6Ub`EoUklt~ zI}|X_eG8@;fdG(bja|tG5HY8zR?EA6&Z!w!--}ZB=nI=u_l54H2KJ@Ne5%Z!_c_p8 zd#vb7z9-pM5dz>Q>Z7hc@ry3}KH#jhN`dCDDFB%n)6DSZn9nX0^p|a&YpGYMXxc6H z0_+O>guoHhiK*rb1QKJ17GV~cQ)NBMAwccDbMZQ`QE*$8>-V`_ewXjo->`lNNqP(} zWUuigI;<Dh<F?GT?)qWpC4c|Pti)$)o~wBRAiP6mK|UH$mmq|hbu+46I4F5M`9@Li zoK33EsjGdg!?3ObrC2*^G(!Fe#*biTLVRpZ0!K$;DrGC<m<2Uc@67#2>G_l)h4_f3 zOWaHatljhgAy8*X+e&t9LZf%YE#B&)Kdsvnymr{SJ)J9yl8+V@_0sxZn9%B?=W&rY z$6pAg^$YZ?eYfsq9_W~a_#8(}KC^aB4ik1dN!B&)qFw#vwOu;xzFP}`3piY!o;;li zscP9?d|J36VuszV3b{E&A8s$6DFp2X50GxCd4e9!vbvM6qe$(dho}2CyQihYuP67m zt(>sEc(L_NL-$_y_TtsV+_>dSGr*dLjbj>;ulsIUCqFh8H`Leuq2m!cIT;^lpjV|; z)*usKWxh+?4aOz$hlS)4c2dx<yzf{1(SBnrOmW+EF3#ck%(Dbb%A;m+hhiJ|ZqBo9 z0(1HLy|FhLv=-#ZEu}J3AhOJomYk3)>6doc$FS@!l3vMG$xRe>#514$vWREa@d7qM z=y8gDh(H2~<J%X+I_MU)cT)RZ)UGveBm<)mVQ~*+qrpr3OU+kc$7nUHzRJ>?@5R;u z$_reRH(>npDSF|x9wqE&WP5?j%;u&xR{Bq|<J-$&R>b@Zoo<$Is}V!-r%8=)EHD0p zy=Y!pq(Lx*yA%gs<;~Ra=VjTW`KYLQ*WL#0u8E@^CS5kk9DgaU1l@gKU7yciwnXs7 zNv1K%LfR}^oE(hN+R1)8Ak&7BVA*5zVrwC^C%L<5RYxYYVdJgC%OVefVlMOPr=*M6 zX<0oOEG2nm!zA86N2k^PbzT1yt7N7!Kcm!8*?#TsAD`S^kr)*dvo-tGwal+X2e*GE zVz==(lTdM{PC~?dh_E2no|QR+o`m>};Zw*bOMk7A<@-jLSp^CMwxHT)Snc(45{KY? zApD{9evm)BOR^9C)cyPJym!nB5{w@d%0!9p!|zkt+<X;^_XcY8b$x~3y~Tcc`^8CQ zf<2Is!^y24*6VApf>{x{-HgBPH*dDlEdCku_Fe)KNI0ta#Rx#J-{q|8`1#CUpk^SP zTIDuBN0tg%EhiplsZ}pjn*oeA_fgauothPZO{x>?$gwaRXXR=bo|9BX&3YP)n2!sT zGq7b@%AcryUl$i$tbh}ue>n&U{s>DDfY!PDzA(q-%0kxu1`FYaIGV7hxci=N{Lkra z2bZT9ZFsD*aPm?3xNnmK1QWN1yLQkE(!@`tsI<Ldeh{+?nQ3!2`^a-8dwDMVf6M>Z z^ZwuR&pfbxJ<5ue^_1i}kVorG!3_>YClaV9KEWcyO*?^bN&pD<Ln@rZASRO-DPdFb zM)|tEGRKCkS)9{;3T>D5?ok=TFl(i!KWNQ|+g&-}?6L7bS`mbL%_gpIVApBuq2$^A z#Aez4=6L|S*PM6~m=<w|twPy9xjO4IZ~a^O<srPN%$Uq4SmM*AK3s`GUq_Z045pW9 zdZ{HFkGt=3!W6Sqq`WO}m9rCuuWS7p)hs8Rvvv~)x3M7hb%-YNw=Y5k8J*nJAJ=}d zzD3uvp0&Y3ZaG~SvW<rl?d5}u<pqqvnoxV2oq1(8^F%U7Oz_LXVW13^bF_?<%blXy z2%3L<&vsC<|4Wj?udJAj!nVA<_-5i6s|YrNY^>G1ME>>_1fY?gMosT+ggUu~_yO*7 zoWB2(H%acu?f~3XNJHg1lfS8z#scOW6pnK4KOIv+<gwbMXlNmP7xzTW4ZLVEah{m2 zOZ|-bCVR|Ft7V9C;fE2}77@0j?jIf`bq$r>W+V_uzFv@9eotwyy^&VyeHd3Cx4oez zbzHc~0@f|UglGhsG>gkEN)<X!fL70ut1dgx4fgjtyli|_q|qE}XR6)Z@e1*EvOkut zIW_i6x)^(1x?7Y!p92W`jFiBjJhlSI91(M!O;dE3J@z|#v?Twn;D_?twz%ZM53?OQ z8EE~SU)F_{FxqfLQT#GLOWlyLa-<|T+c|A1NtTzkS!oev=`F2tw!_n~qGz>G%9C}6 zD%8MgDj%3dL}J_NTvMukxmAz&D|JmQb^VocH;K5zS%?Y=X%Rx=w=QA@UMR;xrj|UZ z0wkXCpluXt1Hw6pU9?dFVeb^qI*_r-KNY89pD6LN+k%J=qMZH%d_>9ar}oUWt2*MN zcp*yDiejMLUxR5ba*%FQ%v8rd0p_f-fXSpBIe@K0m3_&YUv87$ifLDceP58B)@oRY zK;ko4dy+`E2kOiH*6zf_U5%B<1zhoCF<kC#SU!Q$sjHTyI%ApV6=aw_P#P|%++}BW z4`!}BICCqRqvon%;3X6Vyh`rL#E*yZJOUt{f_XC#560)BNa;V8H#2DR1R2{=*`$+6 zil0EzaU_YZn0_75q4#+!zy}=3)d5%MTtSVR=ZL#_$D_j8JVWbB5#pm5D+3M2CrGW% z5RX2%*IdCDg<<EJ1C5oz#A#L|YUWJ*MA<xGr3<D3=FX#R03CH;>G)@?#>#tw33rBE zKXM6pW>}3OsbC@nz1e~j4=Pw?$B*<<P-mSCu735^EOR)wmZ{q`7m<P@klI*grS;&C zvI>{o1Uufau%(sF`-YuNtw@S6OczO#Z{v?-+UGCCiuWqgm`%viyYUeNvnvTPvzEkN zvn!>)zAm|^)M5-?U|WcD^bFq;3pohp$qcy6)2C6>?gaofnJHK^lK0-(yzhI6hw_u= zK62D)A#)dh(iq{P0`bAD!iS|BGvQWKP)+()54Mb)^vs7+^*qsiR6>DkM<hmMYwusy zYUXyq?8u<xEc<t=z+PX<BN8!vXP|vEEvha<z%w!-aVN`ZAgs=4ge?+aYEPqP5`w-~ z^CD0B20A067e6uLgaJef3YN`Zo{B6>wZ(Ml3sWXsrRv}2FKjYL{|opE4BWN*I_FrC zg(#uM$h*1=bfLs2p+G$0D2LL-k4^3_i_cFrEO#nrP33Bi&s<QuZ|%d`iAtfe%Vcj* z0fe5|M9!c#QLQJIT&ZbOwS0MR!}2n^<e2=b-z6m`Jgj0xf&}3((`_EhWTjlbusLp% zkRf+3b#kE3a8f%7eq$8s#Ha+%jJR<`fDaEQBWzj;=fqBfV&30ayRYMA<eMAbUE;f) zjWgRpn<8Sr-C`}p5yy&3;b6{eF*hg&2$Qh3(puobqMRMGw{iK|G@4ov>up>n&1ard zSaGLRW!epLo<9ry0{Taw7uD7|rK~;Pih5Xub`|GH713N3LYOJ`Tb4gxwcH-COMfF* z`o#Rwb%!eL>k`qOeP2rL$aNK2R|TV1Cqa2m#UHCo^zJoF(%%bFfvh6{Hj(!bDuj!( z(2mjLzb_Yf5n;W+*VRQfkuwURNOj6|GhY?F%)Ds#_-ZO?YBbLhLQ*U5xR<(i&BCOL zW8NZq5H`QG)220qJEoFb)UrR5h?Bbs;Abk;kWWB%D(Htkrdjhx&3NSY;7xBsSh|{< zDE@%5yL9Sg^79Sm9sZy_W4#=0F<0T<&EX6>LhQn3iTZm}7W7&+;j^d6Qrm)P2NGcI z;B5B_s=-z>C9m8Bgk<J~!E)0ht)^JZt+UHfYAd!+rEJ6F+Loke7cA;wD5HVmzozS| z#9jF@TbI-=>ajH*S=83=<c)F)XA@0!hFtMooLZn6W2{*o;xR2#HvqD|zZQ+8S6^a1 zX^zbzW4to*J26n>-SFJIa%+CbYC%|RzJl)%ot#bteM@_+hLCkWvDnQT-q+Z;%BHf^ zdNj)iWIM%jaWe^O$bW?gtXbA<cE9sUW}eP$yr7ZkgeZT+E2vBWR>RuS++vR0Blsc` z!lU$c!9BsaFZp-{SDm0;OP8bqa-~PG<j0h>QE;KiuWWkr1APe{he4Z;+@1_!bE*3F zmEo(g4Y7H-VSnFlX^5A;t|U`W@#aPo&DPoR02|}3`f?;hQ2%wB!P^X9cBY*J5$9F* zjit#>i@RH+=5ci*ON;-~rlrLrbsugjCtTe0Y>V-U6b;WdeSP)_c69uL%}XQ-fuzTq zH%=G?d6}A)^tdHQ7Pj&owf02K52;}u8~RWAmaENQ)87$u2j9G&r~L`aA+BzSa+C6U z-k=h(?iLey5jjGexr<rQ8c9@Hv*~@jBY92%Hsou$zaC$~Y>l<Y)wXNL61?YwhzKbA zeUj;7OOM&-Ti4;{flc&W;ha5mgBbu=HMhY!57(cb<Wx6csdKXt^=b!o5@aiZkA9Im zHae>vPq!`MOh*&vyPIm>H4obf)b)0MiRjlkvRf@~?%n*16bMeEJB$+GE1C@w01aQ@ z7JCL>u!8>Z3kR>@u@K}pm@Do2V2%GI5XXk2X|9PnFHOgtPV0OrcL9xXzMV;+keuHe z@kMm8Otj3Kx7!SZ^IX&uk*<ueE2ArCNq?grOreVPor0hY5MVyLP2C6xu*a|~G&Pv# zHNrBYypE@I56GjzPSg4&QMMW??(rvtUGc{~_qgL;k(=G)iL+9XPc;N(_ikn3w9JV% z1Hl{Yis{dJ(x2ILV0TyYPS#ly*ZK^HU0^RVumJbz_^P$WTBvfLRrL$gm^hhI;kl;T z>7wcQwY5^>%MOzxc*($=kUyC4$?i-0Xh(qSaomSdz~v4K&LGsDf*oq0t{fW`<m`#i zu13Fd+Q)D&&E_R#XOZ)a0NC+-Ey6j~b94XoHla;I?ki=e$?N?dIll-=r~Qai$5^Su zrd08Vv!|PEyp5X7w9XFShJTVr&JOd+t#Am!#D&-N{KZY_$VJU&_Nl_LloRmu#MrAG zGaR-f_C?CTdAxO;9=EfchYVfh5=+yo3w6VC|HDRTuEu>{TG4GXLud&`wX3d@oy`@8 zw^#nEK{mvb^ZNUMRMBX*YIb(pj;+}NBzNymj1@RVIf+nel9UoiiD=T^G^OS-%3Kx7 zX~pIWd|eka%h_7;5X#oyPQlcTX_LtxW%*eYsd9<n?(Q#7yHS09_Dd?=wheK%iG0Z$ zA#3A6owqJgZ>?}A_m4%l%VA!om&<CXcRrjTvsBJiFHcW$f8fC6+fN)!9$IkvNrNdl z`O0YYcRv+~3py4nX7$L?n41!<P@J!7glM5SXR+CST_b9I@LF!~j-P|RK3hDFO<XZT z^43PPREv24@Ds5az|EfH&$eI11Q!K$f<-v8q$gILOTAK4|IXDOMrWtCq?cwkywXuA z`;q9swE63#`Q03{r~h2;@ZP>z3Ivk<1=s&Y7KogUM<AT6AQccH56}$Adv$O*y_YR- z`D&sF$4U%0xu((;@ojh;WCv>H$<9g?!V;P(xhBMpb-(-tBjBi!iiH`#&`r64=D)}? z7m9OS?9%LTY=O`fjCZs>A{p+*2ta;!iD2y?%s<ttRiHjTc3HL*Adn)jj~fI6k{X+z z_=9slPl`;4wP%aiW)D*8-XW!|3qxEvh2uCLhe6ssT+dydD<!<6wiO>*3Y|N9)7eaR z=_aRK=P34?eai7MNNP#sYLT5@YdLjDEiGohSP|$=r$+X`_JS7EF<v$dD)4np=9MKN zgl+i#;A^>)E*zGZ?dAT#*Ln?jl+{GMZS(fv>wgIt=Z3`oF|58>i057<O~9l3x}GIf zcFfJJV|&Lui9r~CA@yuAO9ylQP;xe!w4D)*{gXAyx}sc={~H>)R*=8R66RBWLm2Vu ziH;DOiDw}*OyMH(q45zj)z-Ig%oL&@rlHG#gN++!vMlD=71GFqQV&9kv7l^-ygqSK zbkscQtkB;h5z!%hyI8zQVMesoR+hwmo&`LL9+~ki6^bW_{f4)gZ`qAgPBAUEIGfoP z>Ph~Mc77*AG@AiW2$I^KpDOa#L&>v=tT4>@Q5&)5hVW1H)SY~1ol4(Vd<}srR4&=K zPNnUxuk%~>_qye|GW=F~K0+{kXQwaAPbYuufZq!b{0-m>dH}e)uNJzHM}O`5t~?<B ziUWRk<bDsz?@*`}Tl?9CV^K5aZN(qifr7E>;aN&{y{!N&HB*kUSE_7NVdMFSoqM%A zlNc8<FFQXeToRi~;r{Nhc?+Qe7%8L~aq~!MyhgZ@U7tXvQ(E%co11IT@xM`OwjVv% zp6t=ARoon@R4P%FS}nEMzqxQ-lv+_SxG_ay3$xYfT@rKS4TDne@v%rY5h1WTjwv;l z*lo$s?As^U>5bVWqCf9}#<aj);f;+)YF?nXF7&`xhUY7%NN-U9TMhG2;fb>{^~K~) zwatT1;CI=ywvGgjnEw751wg8;+-kUp_gr}X?gU{N$a)dGw`5hJZrI$StI3mUTbO=i z9jiDR0X4sJ`v4jMx|k~Asu>m!*$EbW<WQveS^XY2*z<nZT?Q>-(F#Nbk5PIMG}nBC z*VJU!VB^z8+3M`^)(v{WBHa@<Q`)urij~<GNYGaAC2bHvv-}#X{RsTya;%pg$T%Cy zVL9kYYCeDD3XtmMt+EPsc$06cokvzEqxv4b82X^V!YqC(50egoxgCK)Ov3-w-|XCi zx#Q8wj2kTNpzhYNImylh%G$`9;`C34?Zt5jWIZac2?g!{gs9Gl6<ug&Ch__P+Zi7_ zL^}_T)uAYtEL5eA_2A(DAgiqKraoW9Tm%0dF*jZ>M9h-~@s<k!oB90b^6g*d0rZ8! z9xSwoW_+ROnD8#-i6r-qP0UO;eU#i=ylR3aF4=-s*v(hyGR(S@TSr{R-<9cj=;UPI zi2i9pZyEnQtXA*2PS(!_J?W+olY2+3`umW=T2`z`q-a&L&wGnMx^C|!@mcHko)VwA zZttY{R1A<iFl4wTTu>+W40XxA!uX_hQ%_AytUDJ;8|D_b_}A^N?ijmn@3gf?G}fJ) z%oKH)e$V#e>IVCB$@Yc<*M=t&HjCwStIX-vE&i5`3qzx6G~s6z?J4kW*ubvbC#FBr z{&0HY+pvOH$vwk-8!qRMTjmw4+f(h^w1~gg?V0AgwOL+XRJiVAUec6n-N(F~DKEoC zbj`Qvba}a#mlFN(mOA$g-pSrSgI7mNT1RN~DZWRZ;L^MAkq^_}`MyV<OMA~vd(ZPd z@{HVs?>evgrc5SLxNC=Xp#%ggXOqDXMW~MNp!In78}3PuHy1ro^n}>a2b+5_NumE@ z#;4L{^Pqh@T=<0V^FF!8JvI^XJ%T*a_s9jIlhW>W=}q-J<&d`Lj5S5c?&XqJ$4xHz zu1|M`HEp+~ZCzgbc*ljE0d`%Ry>tM&^%`fM=@pzpCGjKu)5~xj_Fv;SOI2Ke$s)`u zry{-Cc#$v#V9}?XmpS6VA3}d<T<*Aw5O2+gdiESbKiq=K*j&HQxlCj+K@K!gD;%?C zRhBmRe<ZS*cw>w5{r{&i*oE~u*^x&I|6>Pc$IRn3^n1{_W8rDyc20PjztV-k(p~|z zYY}c}MD>c)mIG;F9A^d|HP9%<f{%0i7jz1QXRcg3Q7i(4VHyM5p2#Km))Wsk#tZS% z0jHJp6vp0mXSd(t^!Z*<{KY=U7KYK492inZOPhlbvCm(duh8=s4pFR1tFZ#Ngx1UG zM!okGVsChURw9)cdC#(VNQHn<gr0lqFhhB9*K-@9!NjQC+i9yR6Ca4eTu5*b#`@?# z3W$+TH9eC(0Qd$PD}sr#Tp3W#3zS{XNj%|M4_(LB6lsACmm=UIb>cA2+>rB9G;wVR zNx`fvOfJnOj07gLfyuBW_0%!l0g%fZZi?bl=@s;+G6U>b_qcssr*bSsrX$z2{LOL? z^BDDjFCZ6(#D41!yPn<fxUZ|2e5FSEwT_N5G;zM?ZA+ajZa4C-yxXFM!WO3TBALop zq}zV041d(!dc%{N6BXR}YzX!?EFVc-gNJ0f7q_UV^QfF00%k*#ZBYc$Wf?7}WA1Io z2P>0Pe3;4z{ieAcQNC8T<|tduLGp+pZN+cbg_zs-vlwCH!w)VO{krT0h-4NbMGc0< zQqJ5jQ6lFroM)NVrc}c+)L9kgUU?U(w05+#L`2{rhj_R3alddZyXtHqdWrRM-!|IE zvG>uoh=rJAE>XNlG+$P$0`WpokD*hf1$1N0Qtxh(Q88`$qh!BonOyWptg8JOv6n4u zsADZ&-eNwlsO4tkkt4>j3XWo@1-2Wh1S)nbZ~DcRYU6a-k$JavoZXue$&0XpyrR{j z$@sYt0kJN|y#1md%EsyLZS;bYE^`!GA;vg|3uvjfE1hCmUA#K0I@;JMc=cM}>GCDA zBQx5r1beE-?9nRxvqR5<U->2RrEt6I6!2driV8F4GUh|9x*!%+)~a%hOXcI|6P&ix zgKvu`$YzTVuHc+fYPR`wv+r$OUQdeBN?=^kGi~X@_^8-(x!kk*pFy8vD+sG!60;?E zM_*U-FpwO%VAwoFOi>4ZGv#H}6NBk-+QPyS(*op+S3qGJy%3n*#;^bh{&Q;Bob!ST zp_rCXZ4Yv+cX9>Atz4-YpX;Qk&yr7P`qHxK8&SB-d7jyiF2n`*g&By*T=}^&$fB+N z$l3vEs_<<>wCcJ|>@8Z5C(49+MQ<8Ja=zgkBtcUJ{nmjYXstpm?0l1>O_}E$eTr{W zIc@oFy-Zr9KD|S<T*T9rQB(Yyk}5i0%}me78691EkZ7k4BxXw?LSNfnVI1RvZnd)b z_;Mw-b2x_YWcZoJFjZbK7ueT+<YO>cmI-1lKy$ea&@#sKiVURw)BI@1U%d?Hhk7Ck zWQWrw{DF4iRGkc1NjQ!X@-lB+jGz8ig6LoPnGB!4bFzL|9SsZmZ}>WITa2{=k%O4? zE?C$CHT7zZex{97SKnWFfHSlB!fBeA3Pu;Ag)|?rlQDKG4J`p8oItKqXyiF|JA;Z@ zB^w6Tj!dpyj$D>{=%P!m;V9~9k4&kZt#5!;qz-!e-hqW6t&;plkUzCFmRhxpA#&<d zCl)VXtrd&Tku6TDWSv&ZG~z4O*L4XX?LSe$bL%q-(9D7`*Bi<&RMZjVGsW6jG-NnG ztmtT98(8=k-I{Ar^|!D&Opb;#&*m^=FMW##fl@WYhjRalxTem`dysI=m0H&P#@c1t zM8&ha(AV`mB~;lcw@I>?=XWJ$qS5vjbWUM>GUxN?jej2UkOVyit3qr$GosD5`HzGb z-?WyB*3Q>bYk$vIIoSL#L$(jX+@4%e8EJ`%$W;U&E9f7%GuH0k+|<>W7NU<`KAI8$ zON|8jmkFjenJ-<%#6!=RqgvBB!TM;@&PngxCi82elow|bQ_bhd#7L9x6(s(yAbnV? zcBdM{eO%S$%s7oUmd1SF-a0S&`Vm-<rW%(=FGR6=^|C|G&ciafyUh0iw{2jF%MW?+ z!mHUA-{ggvi$=yyw<Mj_0n)7_Sdta3iVm*XF2Yrai!zazM-i8&S1prkal4)r>=Zs= zB1P#DhUZPDjIM(;sYape)iSvl;^R|DtEdnISvMEqhneAAGLTeI*VpAGRl!a;_ox`f ztc#agjWePm$HsbAvY<}N^nJj?hU@gt?a#!nW7@NZ0Ycg4>V@C{Q<0@?Kc_(KHRh#n zFI#tx-fs!=%1l|N{MTe^3|UPvWy9u#=HOr*3a>8G9cmxo8~ebgm9ENC7Y|9CX)gf1 zh!PH^Jccy>tWv|QFnScY{SX+gm+CYk^gL67P*p};Ui(o;n8V%$wI3xWBOa?3216Wh zHhIG$xtlCTd6S#WE{y{!@SOl`DqU+!_^NVs%GDlK6<V)x9ILS21BZfOsz?YfXlQ~= zmzx{^pnVk+@dzuGR#uZ^s`zpcGU8pSi<^q-K+X#Gw>cCJ#*$esHZ?9)NNTvfI6WI~ zHg#G!HNt!qX9v_0#wUdcGLZ|Ko`hD^E8D)%<_jn^xhWcHM#FrfYQJ$XUbA)mzO6uP ziSIjGp-DmR?{5_NZ*JopvbF<nE#%lHuX@B2=~ymRD(7g1QLSQFVg#p-Y!+4%7e*tp zAwzHM0iC~4a=Njzprl)FCRL;!4s}tboLEg2`?`Z{oue4SMIfyCA^J_M6*-pRZ|7aX zWpPsHw30&={lm6TE2h7IE7$@{ASfb?fG`AJJ{9I3q6^^&(we`z+1jm#J|HVosgas0 zWJp!=Gsrc<4#9WA$8SwESdlqVI5_3GV6lYQ;~YLQMecd4vsm>Ms(#(nyJ!W)XHq=2 zj>y1KGeIdu$SwscVWTBznTlM=pXI6fahcatWHrA6s#XszP5Esmlu7Ja3hyi5Lx=15 zR~WNI_#d@Wg(_LAmW3fUoWq#9V~8GYEw~bp&Es6}wqEYPpmyh)BLHgy+uKNuEsbIx zJN4+oaI^X3_hd(FTiF5?Wlamec#O3m7!CI}E<cV6?QKAJ79X^}RTR~t9)umN5bcL= z!#Bx=^0P2LVPJMuA-7zzCN;-Papf<x_#Z(uj%Mq~k+qmXp6;@Vz2^9dox_vBGUrN_ zx4@ECNN?0c2P2LA?ucdBz}$*L;_+l#JZWf);^T=H>wFt_kN}-bUA<!HxpFQxU2=#z zQ)6?%7NBycG8w#2>(XrwOFO{3M6}6^zpcElZsHgBbdJdlrBt#5K<bD;i_pia7y7W6 zv+2u<!9(hnsmhudP0Q8o8dCR~pqyjT(`A9>9c;nZ^;u{~Z{rGH!NYuQo3n^mUC?yS zsLlk+;?F$Wf1bGQoK+si(#89@;J56R0UNID4!J4D={*&YtKnMR_JDpM2V2DcgR{vE zNnq<*Lf;X!HgYK#gmZv01Y>Rgc$ZybpP$f`FN<>4TUe73TFxaSU7)KT2MOhzk-93D z>f{I!Pj#-|HCK)P;yx^{?PCGHBQrHPxUXg<vy20+wY_nPA3=CAHm=cw%hLRVqc7}= z^2fc7eH=4rMJ9(MsfHEKq83{VBBT&bCw{WkFqz}pGxh<C_oAY*=1(P@0np*pB_i`{ zlbJ$vES!w3hN-R6Xf{P6F!-Cy0(iL=bFOfdob_v7kr6q>s5Y`XK7M`Y>b2{HAD<#T z+VOG}jrKMyFQP35fDvdg(vtnHt%}S5Mb0ibz83So@_inRzk3^W;`Nv~c$GonuJ$B| z36N&q<4%+~huSFS2xZp!@YtW=3SWBdUeNDP-Ux+vER7fS)MOBIY{+zsww_E~x6I6j z@d8UmHPr6ve7DV32w?FfWGSB}2?EIAp}cxN_NN-KGGbzJX>)d}&7I<!P@6y17EZMV zQf(I?bx*Y|Pqi&hwTa=GoEO_xq}t-Cw$%vgQ*9mT`vH(EHJAV0=8g;bQ{?<;F4yO2 z8sy*#Q?XMoxFV6%i{}J1nPo-gCgW<fA=Uy&Y|x5Ml{tva<NS3@ta@}=nR&7q6ETkB z$X`@xLU517=-4-?y{`<EPR{d}p<U>Ij_SOKekeFB)lk`A(%VqE4DE#dI$*yJ$?H({ zKeMkzBSG$<ybiv8Zh@1VuqN`lLS9$6exA)8v|m@r>#7I3v#&WCO780ZqEuV8-CU*p zYO>^<eA{ocIjii~Q|0y4*YC={uC`y-$?LjjjPrW!Wa=80>YO95=iK?u@Um7EAH5AT zmVI}4nRyYdj!hQu0+aQTAA8|on0M%P-SUX}^gnc8c7UH-^NzgSc7S6Q3o4*pz(#^w zA3O0?VT}RzQq!{vrsPyt;%HpNY>=c;Y=bZ`Zh7gLnfNhY?ei-!vTfX@LJ7cbo5A6^ ze1#mj{Ixsd6F6T_cjzEI+-S?ky}xF2qtsj?jjo`~hJiNRROK0AQ5bP$_WoFMtDG6# zeLq;7y%2I>x_!Uw^SN}VKe#8rKY~#FTJg+i_h@3+{AAi-kH$)m{M=zNZ%^i}{E%*) zG1x0H?aM*Z{v%s|W48XY^M;He>;-uZ9A!5!3)$j^{1&dw8~A}u95_DPKf~s8v*SNt zK4of-WWHXkVFY>e6@T4wwJGRoiD8{Lh6C&OXr_im+4>KjPp<<#=JV>QgV59Y^fsFx zOUw3rVrX^Hd>&k%2(29a7=K`W(AGtR^`W~ss6J(~ydtzL$A9dj5KoQ-<-!U4tlK#R zb9Q7d%Q<)clvk-0<#z4{bDQSyVnX(+HFjz5EWJOg6gjIs68ph?e1@39J!5nhAIJTo zvj#`+6T3R|(=&9<ab4~ZJspBC&ic^$&Z0V;k59;}ZlqO$J*HFJS^1UO^CkW`{2YCB zvaT4JH=_s6rvyH7_pQ7*JD&%p+w0}B#%%gs0q&E9%~w8jPHe>Mwciwd@<}H4_5B*J zcNbS_leu`ktWWh1qAktX`bj=|seF)h@l$3ywb?L$e&y*5R_4~!s2NFiYexg?toFk- zL3q{x7C;_(>B8(Tqc%3OYDYHIe%SGr++DzzD<<SQzfW2H-w7O{&F_9kK{h+7uDkPy z4Nr88YO+Q(nP2gqeWp#k*Br2bMR($f$gO}cv1#ETi~EmK3r9hzWxMYSH}D=0Xe;qF zyGGn4jCh1&I%5r*uw>i;S?-<d7H*5US&dM(BhvFTO;IyTQez(4?H4wo+-mn+NbyO$ zM!M#yjd|7_#h{Pm-B{jb=AmKq00|Ex?Pr>BG>zs%l#KaZ9<tu?>xGT=6LbhH#qBbt zZ)@EfGHVLqAb62!{jGE>b(K3Y5t8hw89<a*-rt<&`b3NQt`u7#{o`zc*c(~%RMb6U zCsdwZkil?eT`ot_NBw0r1N|du?X$U;+>{yc-To-YL_Jf7O?5Mj6>OsT7^#l7wxkjs zQ-y<f-MA7b#75Ga*aH*wLi0872hZ&JgsT*PZj$XIuteNjV-zSNr1<GA=EL98J(FHl zAjA4-&3H#&C9rKV{~$3_mjl>G9fslutXzA&DZHZ0%8B+)7auQ(vQoov_$!1h_HgNZ ztM4n_sbXZ^-952oxn9n0zm8s>OfNZi!B`3IIQI|blqE_=Dh+@u04*UWqzzx>ouCws z5IZOBdQ5e1$6G~V^Y76(7Q&BDvd7(GE}tQEBCurFj-|(J#Yz|h_JK9r8q9YzhBeap zc<yL2BTjKn1c_lw#PA`xkBd;reftx#R7MgJ9rIpBk(%XB&n?m%)@*kw=H^d_yA(M> zmMI*hANHl=!QXZ2+K1mBo2Ft>6*V(~vmF1qL%F6HA6P6t@MFB?L*Jn@%M$7ITVo-v z_HQ{xxoe*2$F5$DVXT7rwcFPgG8!gUP|K?KM5x&PX|*`n?mnCQ@HXq96DIBBk8h+N zSg5O59bJhjkf-kfP7S&FEVj-D=%vP500g)#A3ukperg^eqD?*KN#H|?u_D3T%CWJG znzJ<xf|3{mO1Nv!7I(K7Qv*n*6U^HZG14teoh_F*dsP1#Hk%Q%30^ydOndVjbxFLY z5z+w!ZQMVBoMSARQW1rmGjov_rE7E`Vt%V>(t(i?^Sb(!VXsibkRUx3C7p*L$DB$> z19`Dke@HXsf*kAIaLpxZzKeN;ObvLKI3;#s4r^D%<ZJ}uUc;5$Xl&=*{xTSX<%-2Y z9VCt9dM5XE=o$^;{YD$S<X<w@fIWO2KZ(CAwHrg`NVMi@xyC-%el0DP=;dHLycp*` zrFK-Sp}x>ka(<WVXEK_71PL0foEfM2oIM&^MjKAZQoA^TsmPB83l9Y!@jojye(OS+ zy&QZFSKl@|@E_~D+o|vTgX**QH{IRZh&XN2mFzRi9}Ht{*lyd(liLffM-#ygXHF%* z>=3fMohW4CHrDJ(^0H3WEP8lUcZnl8#|zEWP43kti^Nc1X^-x42l1QP{qDGkd3Fo+ z<aRrpa&&l+a6QRes?P3pdHL@;Wd7P;4ax7^=Mjet?_$C#I+)l~Lb7KQK)lqszneYM zSqXMV*5D6+Lr-K0OpBOWX$9S@3_7<PF)Lhl-P+Ge5omCrpDb6deVenJ!?f4~xt8j+ zCAqK5ypk0o$cdDcavH+vN7`d2B2Q0p4Gy=8h(IpVjRP)!*!bn}Cm31ndij_q*1sW& z`g2qB+)5qu_g0xx0P4n!#__h~fy=7%Sm$~OwrJL$sDya%uD|A=Lw@0ZYMz)j&+WUT zn=M4%XaCu>6!KJTodv8a&H3-x<bn_lFXRpRa{zZMLVAX*YgG0b8T?Gyu6q0TAz!%k zNY)@S$-z;i#HD`d+|+!x-Ou^j&zC1kKSfYDmUi8>XJM6R-s)2bF0!dy1}b-sP`R@f z3E1*_Ooh;A^H@p#dVe(6(a*JCNk_-p9d!toNY#ajcL>)AS-HEDC@(Sz8ZM>pOr1kc zlph@Q=kR|Jxh$mYZ|chP=WvL0vF|Ixdx5S;?j0Ujen|TMgVUL>!S>rO%D3H<9?1M# zWw?TXt#S9AdhtQ&(0J`5=!Cz6rsP%-yO(CzBZp#!GajeCkk)rUJDB}G`^=74uMhN% zLSvmxamqXJu+#q!)csHCR~=lx1CNlx>yiJG{`A4=2aPurHh&`9|1{qHk%Ri{z}JSy z)6s*{1zze_!riwHlC1EVWuHoSB8bcXeH&<*|9gexm-?G*%gkpE_`Oqp%Xo73mdQuC zw=?|kqtX2-*Pm)eBlRb{#qEW=&rk3B&PP#}Hzmp+aywD>11>n}Il|r#i1BX5ky)jC zwY%0FXYU8ths#Sj?)c#mW!>m;XO|pzWG9eom!guk7pcR4VifpF;yAsH5PM6>vmFqi z)ZECL5F(;HpH-vux#X7)eLjxiBUu|e3mU`{<*X2&f&u-_n9k{Tl&G~m;AoXjaEMY< zX;(>RxTS~c^GNZypGiSTu`rktp0F@gqf+J^Mal7N$2<J@F+$J={vmffZo^?6&BAy) zth*AYJYe#tZQrwfw(5@v4OKHx^9oXQPwn=EM_Q$P4@XHh9P5vec0b1*R9o?8i-X)c z4@B%rREzlD4M$r=Mf+|wC;-zWM%pLD<i>&xzLB=W>QXa9Z|rh|GFv(KnpwL3{<Em5 zQh4uEqh{3vyB5{Jih2dG;-)cT+K$tO!Fi%fm@owBeshaVFN`SOn3&nCQx^mE#F&V= ziAn@^OB^;`Mq>UTk-)iN5pSfagaow0U4mSW3^jp1|0)pJ>rE~~@6f9VRvWk2FEM=( zwr-vWW2;~NG&`Sn#V*Q?u|7M-i?|8gVy>mBi1|c&TroJ_q2O0~jbAet7EE>aD!k-@ zPcpLEc{np2u-Q@8;WupgqPUewjItWw=tGoZwEZ45@(mQ-%9y;hkFVLGd3;UkcE+cf z;9V%<Y)TAD?5}NCiEL^4=YiWGy9eyAlT7J3&i)#V?UHTFLFE*GvvV!!mu?K*Vygrr zm%k-j?0(K2f-S%{)MW3j!nLnbt{p?M{2ldY93~jif7ww7`SlMR7TV_5$K<AEl^ue( z)O2%2Hpj33Lh<lF@#}@`v%&!1`?q|SI?L}}nFsrO?msl_=V_iY8}?t;OgQ-A=(dtR z#!rSn%jn)c4X&J!s4H__zQK<1TWUt>tzMh)C-N7o9{x5p^FPhND|)-to&kp>=mh-j zO(6+uIA{sBGXX(+0*JF4F#}4XWdcS;%rxqkh2yXvq8|JQlwDvkPLsS@W&?Z_f=7kw zzbXHGvHYO(fG0{t-*GB>afYt6yo#K4A@tX48{7)jDQ|5-UM2gA9FlPgktlH_?wruq z`Z0Ym?_jPWX<Qe13lcg$Y63se`QYSy1cIeefNYGu5#V!hNbcLWcC1cKr7oSm`!u^) z7~RcK@GJu*i<l!A0lNjwL3%qquEgICl=VxOW&Oa<eY8(@0H6ll8*dxL>B9J&eFdb{ z%+VXS|LF+#C03hk8l2*Vud8`OapOP;9S+{{gU)jb?^6JdOx$N`4+n2SXm8Cc^xO9J zps<(22?ywNeyAkW+TCAh?W0>IHW|ZLFQGryj*pKa$VYsHcy_B!UsTyY>7mo10{x+f z#B8hoSakyzFB^v4rr1KQ@;(%n_ro57Ddd_fY+{p{X*;onc@lGp^HrHC=8m6Hfq+nA zIrZbWVfNbcxP%JBhIjYq#Dw)v$|<A&X!;TNIsWE&hmlBsG2iIt83DWLPu3_D>9@G8 zW4<Eob7QU(Id7Gl2OBUN*;(@h$W!}%yh>&=H40uI4W4N2aHd^{m@_`szH-Cb03vJV zsgDj_8p_va>A|s}k}wufalVS}G7)p3oqzBI0D`#@(NG&A<~kW*vG6*X*PYYS&~)Kd z4wtSXU(}ojWpP%L{gtZ^g^>D><9;%mhEpki8iwR{_;cM!8H#%UwY!(iIanX*n2BV& zcgXb6A=2kCev#LDtRo`U>DKm1g_zL1R}eo&9wLdD<rYN>heC-D=kB}lM=XnGV8&}o zDVyEMJEz}~s2#9b=X9R=>l~d^Aqcg*Y{hph{2B_rt{><k$BSQWZ+vBMG1%iW3x15g zqQS$Pi&CBbRA;$4rCKzuUfxVkH_Qk}+TE$nK&rDM)fr56hEkoCsm`iYXLYJ`a;kHx zxuea|8YYO1O2o>gl!gZ2(hd8~d$d9DJZz%&-w|^*D3>LzXtC!=FNU5Ev-pHTln^8d z|AoG+K`C;??4PUU<!*N&9K(F<gI)<cX>VrJhRmqS-$nfX2u;QI%0od_nw~oc38Yy( zQ)&c>e7Am^#1?Cb2VdwJ^TH3c`$$mE6F(y_@)H?jgNU=4ROVh$(?;_{qkc2}X=yZ; zRwQ?tx3smG3#Fb5-LVy~4=*F$;JtXkX`RvB+U_=^fu%JUli|Qpxr>Y`SlMX`%~s>F zN2YRmM}C5?z$4C<Pm%htaRR7x^>_<@#hm1{c#+4~wT?02WVu*hi8F)O^49;XJY0!K zQP+2JTh5c}^nwi5B6sa;+=v$MT2viBEp-*)J%rT%=KBH}fkKHR5@Gxxj4XY=a!bD% zRHQ5l$9%DguAhRWDL}?-3KF&8b?nEo@$0M<qkt9P(A#TuR(e<jv3qi<+^JEM;(MG_ zndrg#%A`K=Ag@bg8)D7u61r#3{!DhAZwXSJdFiad`&wOULu+-Zd)t&dBz-$g9sv$V z)+SBm^2`Zmix*WX-2;`z-Bu{ZdW^|wpkHE-PEL1)!~#2YyZyz*E$K)r8Qn;RUtkG1 zrt}?G!+#Sa(+(h?P868S6{Jkh8gYtx1-~E>n6!E(vEmcwB>M{DNAgIVz-YZ(8N;k` z`S-CP88!HOGQV|J68=mPGhUvpvg0Rh3_|*ip*`bRGBY<0h2I>#|Kr5o3FBJj&${os zm)ZwH*%hP}I}W0x!`92Z3cn#rdOQ_I&F1eZPEf{)|1-t8AFu3bfJ;EKo`ga0I6RDA zHkN&~AkOYq$o;xjv%;xGZZL!AubKt=Lg3QLJ^m(su?CBAFbrgTiFTQ!a+!7P+1(Hd zOg}FC9$*=X%Mp%MKxrI5$;@suQ`;g8M5EjGf&KGuk@E<lBPZudkLR6ckB`9x_Oo{@ z3BU#RP1)PgixlItu^w~yr{2Zgebtz=Iq*V8fXS%Y|8s&NZ}a3y0u^7K{9(y2`{7}J z-*(1eeX07%io*7JbqoOpXvr&gQmUh|>A59RN|dkRQ(4ypu(dihI;waCFV+JFfacyW z(^aA)!wN7qBd_EL^T)Gf*-3Pq;mLi4z72At7h+ByE3E6WrTE=<ZHVk%)5e;|5zQmK z;7BMidjdCQ=LYyXR*!RISrQu2t+KflQ*sqMbR3zOKsh{Vtjt!_@vHvPQav<+;K_R0 zCN{2c(-pn5;AX@)D<LK+&QTm&TrA^p#(%yW39IE26c{5YFlh)C>Gt;f4na7s*71pS zS!YC>lS$0`r~G$Ry<&@$MG-s_`&1509&-abhH~SujN@X<b1C)h9UK4`|5ZRlI9gd5 zvG!al6QlM}=Ce}<I2L~-Ed656A+z0()LxbERfrFdqs+;iMIxsBoPkX2+FbF^^jC@l z9y3#85DP+2j2M^ZeCKR(uFB=KyYb>*q#G4Anb?iFl+yMQ=G`-OhTCAP?e%@=@!p&( z<T1C*$RBSimr~!phVfph4Q0oBYc7@X_7=m2a;eE}R?%w26bu>j^K_mb+GCy~$08Gy zk$g2*MRv^R-XUXg#_ZLc1I$6}Te+NeSKfFfJLWrbDKh3glk>)G+atboy4oW~&4nOh zY=2&MaTyyl+bN<;2>VbhzOB{7`~@#3o8NMtkja<33F#h&7n4CcECp?)rC^-RKqM+$ zh-x+G>)eV#@mR1LgOl@gIF5P&K201>2^EX$1}3htkoXRpw?ETAg0^w9+h?CgW8S=$ zhMVK1B?+44bPd02!NJb0IXNcQx`Q42cMaJYTG;#^p*I7_t|_mm#Dj7>LUr_=9b&uM z<VNB81{oQ7Y;3NgqI4r0aM+wEZ7&X0!5H259jQ$iUG-{M*MK|4ATTUvWuF;4Dpyn{ zVg-GOnxh$xUd3-QnY(nx2D?I~{@C~-g=#5eA45682)ObVD}UPbu(+E2hOM)c<q?~d zSAIBdBKMpDvQ+229AW;!D^Axln5wC4(A<G*FN~Nw!L8)BYNqOlR&%!wOhu1Nz&@EJ zZ{93%<cHsdFJ+c=T4(Et-rW+LlGoC3(;+PtTYnT3Dg=c><_7NHJLlXr6Jyiza*r_c z$=zxywdrzu(~-7oUYQ19)}9zUcS!Caxd9FN*xDtZ_>;m|08b=MZVcyw)PsGT?eW#- zuhKYkX96#yBpdF(zLlN45wja>X`*9m|F>eZhcxog>9TecC|K35z15tjB&cGrcS9z` zo{yEM>U@aU6n^w}1{_C#Y5=uA+)AiAbEXO{Y=49z;1q7+f<uA$6L_~Qh+m(stbVLB z*TMFfSk*v={{ANiso~ia6d>e`Y<(57L5LwfQJL<eKDZbAvb4^t&g2HW>cQ6{a<=C^ zqT$`jTcUcKQ%<a-sj31Gc-hO_4tn?nJw{4fWi4io^t-slR5^XVE!StEjI0s*?J{lE zV8<x-*7gE!#{R*yiGzHRfe^pQ*Y$a_h-VudOT1=g>s*Pe$7^+dxrSB8E6ME<&u@#> zLhKJ;!h<sLW4<hyOkWdog%?8Fi1%f*@M54YZ;#X}nrEALzbSBY!{glBkEOXV3>DE- zfoc7>RN$tg8V)EXQ7{IH$q!GX+l;|RJ_S=23H1D?UV3Z}%o`MV%W1*3Ltqurb_Cs4 z0}NW&%s6X5r?9VjB$xQDpjy&+zyXKx$)K6WR!XL8>`X%mz#;RWi1}jJ)E_3leg4*9 zl-}O@YKXs!Ye7zHjxP55Q>2F9xushb`7P3(bACTu(RMBRf=bN;J?2RU2vnIvhK`o^ z#|zatWwuUvOR_U&e-qpkU2!9UWBuZjD{Q6@>BJ$%EApa`CQ8<&PNUh$;5*mf?0D4( zF@L<U%}tzcr2HR?{^NKLUGyF3IsR!}Qk3!bi+nt9ybrbf&*NQzm0;MMH>49XUab!O zxB_<4zeS>z+XnK|FV*x{1`d~Aujw~_c)0ZA?DUTgmtMxm!sf?^E&sm4aM5Age^%2! z#x(5E{eRF-KkWF9+gQL%PdaS-1)BcKVf+6ETwU1Qc-Z#4?exR8Uv`3y|FGrX4@vr> z!?ypdrhokYVaIQ$A9j3SylyY`PdaS-*J%1HhwcBRn%;l7_G2rK@RY@N*1OBhS=xrW z$jQU6<Fx#ZhpRv48to}FpA7B3(lZBtpS@Q4|1n-b4m1CD`eDa+m!>~-xbpe^*E|RI z|57dgt;5xC_y4}3;K}QM%yqxJEav(N@ENO_4yZpCB;9;6wEFz=%Yctv{!fSMUu>tq z@8QFjA8bFWCS-?f|DQv_bLjTR9<sc)f8XKDhs){zvh*;<f5`s7PP+Nz@bFu<VVG0? zPls%O#m!Xx@Zrl3wjWh1w*$wo?f+A&&XLC<<IlA}_K@YZ{re6sj{r9E1!V`|9FW@E z)(zMQYGm?eH4T!j{0+StGSt1Bw4di6i_K1Q{;FCi#Wnk7B^+?W@sRnyHcj%^|Ihg^ zhv`6m`akC{(cSZnegA8JR&@y_eef{(o&7528Uw!6@i1?{D>WZDUqMNF>R@;uT>kQZ z9=7}^TJ<64yL#+!e4g<zmmjkIuq0h@i1v|4ByJzH&$7)UMV%JYB1cg~bZVE57o^Z& zBw238)(6`3F80h!#`jM}wL|uA#SGwc=faXQ(|gGA`Ju<=zQdQlvn*Tw=0lbr9RG=G zBX%JCbubTW(V_j5@qhX7<4;jU$3O0W82{o!)bGG&aQrvp^5J0o(D7FszWm_$8;6uf zG&|dO^OxakiC}f*$HU9ER8|uMeT!S4Z=EK8Z_(%N`dp#Uus)~iGoVkGKFz6;e}_Kr z(dTM?hV@yg&wxH%`h4aT$$yVN*XeV)KEwK)s!xwTO_k)_s?T-$T&&MI`mEBYN1r<< zX-<9KuFvKAoT1MOeg6Ao$+JzLcj|M6KBww4q))#-cb+6UAJ*rc`s~tYSf5q;{G?Ly z?9k`K`n+AASL!pY&q{r|^tl6-Dy{4DK7D>&pI7Sh0)1A=GaL)>)xJCy{B(JlX}d&@ zU;Zufqvy75dxn>VnXljT{S2R%`22;>n|utP_xSvqk8AJnvb}s4^X=tx1fKw(aeP92 zPUch1X9}Mgd}i^P$7epDOZZ&L=UP6i`E>EQh0kq#zRKs@e7?))9zMU|vyjg+KKJvv zjL&cQY~{0^&r^J!<FkX$t9;(#^A4X*K0Emg@cD#KA!CwpdH9UtQ_kmTK0!Vc`Bd>a zgU?hxXY-lE=R7`gjFGi+*8`c+WvP+!?76E8P_YjctDphrnUgl@36{GpN`%-yP*<%{ z5B$45Yf97Zy0rVTEmAbOb$3{chfT2-k`i`&>Fvj=JiQ`459e(qtA@>!qfE*j%C=U5 zSV3N;%R_8mo?E3!g2ZLwZ_}<M<W5|6eJiO?PQsyd1FC;2<h%cPtqtQc(Wf1QgwTyU zp@+Yat4pq%h#X`>?8h8QW8Y@E5;ri--v~I|$cWi2QM^lYoalq8GgOGJzjMty;~A(x zzA5r$QGbS#f7_p)n~5Z!ER5QnS(E9nvO9Anw=?nSo%~~_e>^?%)1#AfJxaJsclUeJ zs|l%`Nz99N=Xw<|iHS%6kb_F>s}o|6=2Gfo8|?lr<eoA8&5HH{J-rQXIcfKw!u=sP zcYRJsW;|=W>B(!;lRuK_=`YtFrK7un@MX6sRIHr?4emnj;fiv(uu`O5BFvbI|0ADd zz*Iq`86#p(Q*+-9VgiC$g$QhMBZCL{(jN5PU_@Q&)YN>g0dqN7BrA#f?7RkJ>+WEa zx%_6W?QRFRM#Nr~`c4)DDCDIZwJ+MvoAUk$-sh<h@+O~Y$m*|y^yL5J>`efptggoI zECU%}U<Mpv)F2U~Mu`{&D-cB11UHx@W=2IoTg9j2hB^bNEWrs%c!<*0rS@-It=3m- zTeT`Lv@T#Upkm#srPV66YHvC&SX)3*^Zm}b&rBu}eetUuGIRHP?z!ild+u58EleJ8 zuMD3s17^w*I{cU!XTNwV5wZ9ak1_iv#kyYnRkzlB4t5N8dsDeoD@(kz-nLF_?DKl_ z8K7tC>Gnwaqr%h+Iu)m?lPzW*uxQ<KqD;gZy~ub1HVD^wKSj_XLAV0DL=2SPUZgSS zyKqOo0WArZa=z%pwAK`hs+`Zh5iqQAQC`M>ukZkemyQs5;|w1*L~BWln)z=Dq%f#X zo{8{>I1V@3qP%@?Q~xGor2f^p`bSFr-aI2M)au9Pst?DguGZA$YX24ED|B-Uu*{p~ z`IY|~b1a3w>Pazr7#F5-yn-O++&~LvC~GHk-(8$~+d}13p8fX%m6&;3A1L&lb1+a5 zE|wUFvCjR44$+2q?!AFBr1K^V6+l6QBJ$|l`F0Md+PPbEKF~W<jAwhx>lnTlyaurW zjv{KmPTy2%(vInW@k+3lF=f{$z3BXcq!?C;9*GYZc+zJFI=7t)r7mJbg>{PxI9hVU z@%)Fp77_m;phkGq>&W;7`NYzqWR65T!QHs|<)N~m!@^d;h(>9!c?{b(mMBhKOgy=e zEHsoOcmqy$<t4I|huq+bduXPSDezz1)XxMqkO&-7B)<b0vhn2IX(9I1E$_%Oh*WS) zY>M$CSjg5Y^=k3Jl6uA5u;ug4!#eTAk=}iA>ev;pFFo31o<e5@QT1$Vtg#iL0id_K z!@+>=W5yG}lI^TE=N1O!yeNdUPvSDD=o4y@8_ql>@4k3xikmlZ&LN`|t;qwOU*^j9 z*YY=b<$uH?6R8Y+So8WnyrBo1h2Q}CK*!~LaekAld%o7Kw{<(tlT1+$wF4>A%;UYx zsbqF7j;xnFdYbPH`9IdD*Kk>%WrOy<K1V2Z{6E&`sfk~|KJR5Gsq3@o=&toy?bWjD z^C48e$NHSg%<|S}Jau#Hb6MXW>+@0$EPWF5S)YTk%;nU`Tc5{pwAQsg+jHgnYxxhK zwB_^GXGC`BJ=e$N>YlH4e`o93_1TomEYi%Iz09wykKh(j@I-H+?`&Osba=#yAP{qQ z^a&2EH_sl<qIeip=6uoBu+z+UCOOu&Ee{NBIJS}hV#ar%Ra88!kIo2X!$X{6_Lhge z*}7jmq1pO6(bf>>X@5joQiL4O)OZKHw~!)w5_W?P62Wr>pPO~245wlwPIDKarpbGq z7}idf?YPU!h)*$ZT&vCTAn>R&{{-=4boO<U;<v9%di%%4FUlz5`-O03#i_=ad2a#F z4(8wk#paT?4ED7Ov_sJh@dd~e8i|zoNlWJ39lPE<Xy>js*>d|QF0(Uq5*Nt&+v$l) zm}q|;C~(!+0C<9HZDr30MyW2;506x)LMioL&11H%yQ4e(i`k&Np<|&5e)HR*IW{I4 zHfxGNUHou~qT@}&^psUa$EoFhxEB_$pk;o*GF>@}3J~NyppcRJ-M((0>WvG$a2N-v zZlMraf7ZFzNw!gRAb`*Sr))xB4(-pH6~6eZwz*xpl0q1yea>Te2;mwBI1@{xPP?s> zZFdL*2k<fT=D|AZye8~>+<SwRzYPgHC}g4eX;7<aOhK^uF}^goTL{9;;T4FlSyec` zI_YoT5L}@uL!XY=(>ke;{j6`g!R8Vn_oovH2>%C7+9`+^bsOcq_#qMy20aC`w4Pb$ z*;8j@r?wHeMc&QutyFIc2yem(%7g|=V>M=;Z43RhN8nn^Xb*eeY+7)&@WAOMsBMPK z?cit2G+<#}_c$G7Il7twv;CmlY6hF{C4>IToiZQ>8)&Xw!rSnNq_)m1)Eanf^_yQ) zhcil+J=lD`^n<E%a#5U+K!u|K+TeEI5D7ugF4?$LCM^1<HDF(efreKNoCMfH%`XR6 zw1J)+I*K0pBIdlC8``AA`5^bCKWKdlc~6V1m+Iy48ktRsnu9<|*0MW}yr#R7s3c#M zYHn8rXKSvP%e9x+v6a+|f_;`-SHOyy_d@ylZl6=dZPu5)nEQzSjk}MPi#Jy+O2p~I zXqW<32VjdHAd2wr>T;=t{@75CrsbQY)wTxr_HuC=3VKwe_wdBpy1HC!4pIHN7_eO2 z@<_Q5UDV_%X|L>sp}~Qf5$QcB7F`7|*4kXYP6|uGsakl06h6%s7Fyb9zWj0zT63r} zPqqfgy3i$w3xVb*Sh>n-e30zZXa;xg5unXxn0^Mty36Y<qrGf!ZnW;QK#b{Cn)?<) zkO)3SuM*Y1j9!T+40eFHVDoP>gEM_R>?Qsn{{5I{#A}t;ROr}d3VReb-=sdhVIXg> z&oX9hDcIb|t10tM%~Pa07a9?=x>`Dqeu-XyW~w=B5NJEY&*S)1+P+`W9#e$HVR<I4 zH)l&{yWP2B(3|mz<19zqty-k-m*{N{pgt%}-s^bB0_7Du2NMN$n!k?yl{lu}ses<m z_=hLc)-)drbS@P2!SiGrR?yWX&_SjsM3<m*J~ki?iA}qCjwk8N5aE~b!<?T{j~;{F z#KluGE1ku8W9nm83}jC7>^wQd0*~ie6Xm5BmkEp`a&H#OPT+9$-dtxEE>_^PAY~d? zRF}k&c&^!5_BEquky)l6(}99R&$4WeDk^!<>|=tq4BV<!T?5`gbu>^O4S<>d3>^Wh zjF&3~?ibexaAmnVQ*#`Vnb{uw=0`)A0XaDS3N~|d5~K<d9bzu}gIJ=Php+Y!CN<J( zB6*|eYg$60=F)J$&Q7okjcBfn4eax=bA3ySsqWmB>qV4eW>K1X(YojeO$RO&92pT_ z{cF@&qB(^jg4^OS@-mv~z>{XDb9}CiNgY`7bUHWZC7_Zegc!KDNOUtsp<ZH9u<LkU z$_meJr#WA@(!FXX9q!=p)u-E-d%3(x<6eh20jidPqDFCQn)!%0@I+tdFkwJ)%%^&p zKS&zqrKfu&0)dDcg4rG}Ow41m*4Q58TxWuzXg&U;R0D)7PdD~g&%4A7CwiPj*uHVF zz@|$$OHtg=!@J;aB-nftkQMpLmxT+9+;-g8$ITO0WDgenkEtt(D|&jpSg~_~ziIIa zodu~vaVv{m%Ykk&G(GGc#}`>bV55+7t+<TtP}VgKUqFg1TbH~`Oc6^>2()dXZi?{H z=YuW)MS4ZJagSTffw5*$7Dcdinj-krua5W;*~EeFe)VR&{>%nFrFIYg0tMQSM|FxW zzX(>`nsQOowi@}Ou#cZHZV;X5T@Q2~e7pph-S6$CrRDB|3b!{oA#Y|s@Ny<_wvdd5 z`2z}H&KfknB?-5ox7#F72^`;RntEL}HB9Gu-ZWSbYgjMqm8ddv!b}n%fd$DCi7H`i z4<bgaqrtbeOsN@18K{6|vyQe6E7+bvqqAjth)6IkgoEM#ffn4_{t@qMW+#WMwG&W& ziq;Q6-)+03*5Cx|pZklB(%<=)o!lLxtiF8Q{R?$YK%;Xg@egGscf0K@S3dQ|Cnolv zCbLJ$x48U3@l-v_3C+cG4@d&cuF+nUJhm*6w4#<sE|RGy|H<-YGjnAT0R8auJ=itU zDV&CQgAr#imcL_5`1?e~iSMqbnsB|I?6drtCRUs2D>meB5%#4xBK7Th>5#qTT6t-D zV}xTA`(YG_D33jHss29Ky80IhnMe)->FMDj0dzEPhbep|WLau}sRB1!YRXwDc><b> zm}7>-99^GM47QATcW8U@(c@t3N2)waIEQKF;LrdMJNsLzDH5e{^;@aHtd=F^);f1~ zo7upAX_4Zo-eUDQyN!shr!7$G$GJQ%Q;fU_mBW)sikgRUCZ0vLv2?<IE3*S*O@?83 zG04_L`1IWJ)58MKIkU1|#mt|6B~LCslBA<98YHk4+SlNoSs?~^Jad|rRuZHdvtP|G zG)~X_=@qi1Ep>Rj(enJB<i$kL-xDiZr{g9U$(%l+V)Q_KXk`U^V6U!c0Hx~w=}&!0 zfBMr<((@cakgE!9p*0$*PjA5JdeB}Qu>Nu1>)plwaf~sDQmKp++^Gn)%#do1eqnx6 zgM`<EqlI-E-Ct;Fn2VTCjLt%-cib5jt#y&~#&CU|yM<UY0rN9^VqkuPvGi6`=vC<g zr^*ur2RV=W$o+Ix;W#*nX4FMjO)4BW8K>syjYa9Fikdg1-ob|IpbhD5Ia>{BhM|fo z*g%Dw-|h2l>)&}dqEJCMnO($b3ilmo7G175b(dt3+K3%J?EY~JEkcQfLUN+ki-T0J zUzy_&AUZFYi%=4EXI9jiD_}O_=3-?z{O<nJ7?+^auF%afcaH5iYFwLOcMD-u`%A%f zy+B8n6|we3v=1VtH}q00lzFCi_d+u6o49eiuh+RSZoFLViE4ZJ`_tlG0XEhNgJF92 z()-=$7M?8ZtdfVf2FmNOZ_-_$ZxvxXNLb1e+X%X@ZO%j>0;TQ+CIlSmEovf2-B@|a z-kNQ0fU_nfH&44C{hND9H*{^iJasL&XaC`|?+>9-FIWFH)w^}FNEO{F6>xYVcZv-( z+OIZrFX-G758<4&kKLJ+YK#Tf?nu8^D6VXgf0w9>u}o;x2V)x|$^EMTo$56<9!d3e zPmQ$9j8y+CHDGK*X*Ru7(o0)rmXba&{Y>ZBQ_H-pnPrky)-tn<ECR%YHIR$Hg#h5E z2GSRXzi63B_!AjT80V>dYQwhW^5k&aV>#UKso2PyQr+tyQ?U6BS;G&w)izY5#}y<+ zWM1OdR*bEZD7+O2d%+jKp1pNue@K%XuV9~S=1!o@WT`8s$5C3qnLj{)`vABCZs7)# z`bep1;%X>Kse1|sBOZLv+oZ3n2?>8Zoe}l6V(k1t>PT<~!~Bp)32G}^qao-41f@tB zEJm9A4mA&8y94@)^dj7!9j&!zR*bzooD!D}rEWBWC8c<<T5V-1Yzw~)y?Yi>u5*i{ z^oaKXWEuoP;pxAQCj>m|hKx_8GZ>FyFq}tDx2}61&LA&=-c;X_Y55$<69LYU%S1@n z?S0<MGpl2g)pbB=x><|jHJgTZY0qoN)SV)UU0XwuQfZ_+0PGG$>m2_mJiuO6DvXp| zf=cV7P7`A=*Bz`&0?;GfMxT|(-c!hXp6$AtuI1eE=|dhuV<cD=G)rv7d5PiX984<N zJCISeVY(P~S~0*`ahdLN(B_8Uviw*xrAdJcSt!@K^)fEEUFqXK#(V0|#Kjv~DI?EJ zS}(Jpfs+gNHD1&xq4MdCK2Z9ZGLQNv&%o;G^-Fc6)!VFpdO;iO4)LruUL$p;37zQ` z2tGA_z0VESJ7vs(w{8Bda{>a6-lk5C&c*S0NI{2x%;~y9w5Ra#=)1_bMvFaq@;E(l zdHlhD+kJ9A3-<13*D6fdji_loK*kzKw+GaK{ZDfR4EalD<y|{Fiwfe2Vl(nB7K=-q zkBh&!#VAcAopX=Z#kzpSdf+~9vE~Zi*Z@D}F=8~oc1doz<eG_u^G~E`2!V12%ZR8z zn_@TGyi)e_GGD8>lIA_k@BVq!0pkuNXxHl;a%UBeJG(G7z&qq#=a73Q)9avT(tnYt zYbUrb?BjaLBVveIvoC*|8H@%sKqZt_z1ez?z)3`DBjHvEKnoa8XVJ=I(@e<DqS^#k zkK>Xc+zh6enEuFY6HD_U@ymOe9-@P&IrU9hqX-4D+?0aq_{EmJ3?c1sbCr~ZaAI>; zQl|@FuL~c|F8rD70nlq=o%!-_(%9&(#yoqC*q24TkK+y8FJUJR;fCrL;B~$z42cAC zy;)p6+S~WyOYn^{Ba$d+=zPf$lN)!pvzRrEn;pb$V6Sng2%glip#vh+2@y5BL0z$9 zR$Ivkbi2a;i`NJB)yLq70?v(5UWF$Z=TU$|XW~)nQ0G;;&<+S`DFQ)ed_BgCbR>c> zfk@08uJcl-Q<Bhi{Mq;4n0XXu?VugYHQd>rZP2>Y5p<!=QMOH*)ToWh5!c1sEuQ_Q zf0o7Sn0o^II$D^Oqw;dq=Za~GKF*H;LCmaG5ssk6vB9-9ebVjRP+l9Y_j5oJb~}S> zXB5`dnWwU8sSjID@UEEBHRB!Sw#Vt9hrE`4d{>kve9o`6pBcG+{ONXI>!QNUNFCOi zym9rqVoIWybGMd1I9L9dbbBv?a0l1o1Z8}76v;u}xQ@!Eq&@^MTSoE1tHa7c)bbOD ze_kZ=7tD|Az!hK%&-24S+Le`;yJDy<%kM+3@Z6OoV>cCRDKsC+cMyUNLIG`)pZHr6 zJ4JDk4vhNCDXadL+=9;S&T5g32zogpUU1aY_;7QbTGK++<r>tZJ`xt1@f->`Kki;% zEGSv*ny&g>3|73HJcuD;)6W<Lb^BvEiI7T1(YZYzowkCq-OI~X|Az7%&tcGzgWlGy z9kaUs*71Y>n<s`JEDR6ivfZsadtdSHhhkyLyJrh_7?2yT<^or4i!FH=-*M4#-TT`^ zoW{KV^ZMJcxBm2g4nz2<`&YP>LlR3Y@UIo%-)e!^N3DQynItBaSS_7}S8{JlqkFPk zO6r2?H?PjCYT=4mqE^zd+|9(qDrh=sA`BaoBB%gY*$Kx;j97mLPZ^&ap*vQj&B^a$ zuY93*0xUg;U~UoyfKYA$s=M2`%oZHq7wPoGi=>QSe6<c^+2xI!rc3J@kxhi*qc|@- zhXMAn0`k^i?w_P*pjcqySVevFSZeeA?0gSk?0~HjiW7Gp0TrX>@bx;HsP(q#GdnFl zF&rX`Gp$DRpLtrsn=p|DAPJnDRbb1R>1!hJeCcc8{EomaB4G=*F&Bot;&hG$s&Fld zg&JgrzU;U};%UJu^eQ{FrN59~vS4+jYdiQ0vn9@<M59@NlSXf_MdoB3Y`HhIJlv44 z_PnmyT?9`A0K+k42XIU~Ib0)VSR0UFtbjOml(S!UYvDFG$)@`FPP)qaAALuWq^#os zh6L~`M3Oy_)sUz&VOIKl7>5j^XNgY&Y&8cFGy?9Q$Vyqk9#+J%kakK*?PN8bP<V8m zvw@Ys(djj|qs+-1E-$<Wec|8`*5W|tuw2ziTD6X<04p<$4$BEkvrx8CDULg1Ekn%I z--`5HG&e#Grk0pbaq|+b$z0V5Ww==7iBwe&Jfz!wii3bwTrZn<MBe(AyTep-A7zn; zGDvZhSXw9VrDdFM=1yhFQNdz)fhID{w>IcxB3y^%EEKO1(K_M*ar0FWi12n~Vy<2H zCRtqZ&k3lny91A2&Td@2dJd#~=1SdR72UnDNxWt|zNy*q{Xf1izQeydzPhy*sm*Sc zT-bp^VT9PkL@-ib&(|{Z7ked<c__ax_Xl4CYuYrTkN|NOJ&I;=b5zeA2cECZ%7eJ< zNCZX^QmlCwHR1UQrue9c4q0@Ge0`h%j3EXRqV6^8etp)!|Iw`k-KaIseNUPb{~eF! zl)l=mTAQp0EsERtXOg|#!t{o6S<j9$*;QFI@18GSB|{x}q0i;p^R4E;@I%7<f*x6B z2-&j_A&W@+gsi9+OwPZ0^Qo?Dh!G#g=;i+A=OVBl5n-e=C-j&fms>l`FO(vL#QSlc z!vfF#`9FG|h9v3{4>LoK1d#Gt10ZMv5J?DJf;8TsD^s3#MA-Vbbg%#Cim$1U@;1Qx zYW-OE`nO7b)*CqI!IBY01eqiCGE77zn3&O8H*>tLc09eiw^zHj_5`oGxA&lqZg1_a z{iGXwb{+9G^TT4R=lst7&ez{}B~MoHh;wD9cfar2JaaoXa1iGl#2raD?HCcVSuOti zG!6g#>eDLkELM6d&ZW%Ge-{<pIq{hAz)_pPxHACa`HEhSIF=9ac>mvXvzufTbYU02 z1jdmByJ{S&|9UruauQ~Y_@3}vcoca`tCaIb|2%7Tj-Z`Bu?9XB1HUu95jUF8zRPZt zH``M0Y-R#njxU6aoOHYN3L7<>w__y0vSD|c@8`xc9{)8B`kSM(7L_`fqf{|wsdDuj z^tf(B(7u#c*3omJNHykYtt%lGK=WCcLAR-(xzXIsw$+IA&SL5RQtkgqF_^9Oi%IN| zsNP)a^yX5Zy}A4hfo6Ks82h}gGm=dyv43K22|eQwDL&CTbBvtHSM2$3j%W@|oT;f? z8E&=|^9;I@lTzYs5D#Les1BOT5W~7dSl)KuVDWo2mw*91JTU7GnB(Mt#5~*LMZD?{ zH@$3gQaqLzY+^53-dFT^4)6ZL6~*7?2`?xT0lY(F=4#4<JBgGxLT&HSpX3cs29l*$ z>&6TItld#m!1DWAd_of@qEOwN$G}bF+f-jR;Y%DPJJNX(j;;=jikNpF*7g8VZ=7;a z@XmXY5At)1vgJ|pr}LzM${`<(Y9{_O=h!rgXS=ujCmOHik4m0gpbEt~yRYMWmS{2@ zu}9*E%`I_+Rm_aVZWbaum|#sXuVC@iF*0k<^NRJ>Bwj`Q#FnI@eO9r|SCZ9q?xhjc z{sY#x-KKM~9=)W$ofCb9NpTF}>sZ2~cMX<NTl#(7M{=J<A}+2TzyF9g^kjeR&6PsP zJbH1lK?sU`z`Bp+M3Rd@=gXKvBjOf{8<5bVeTgjtagefoxS~k9pL8|d&Zp!SWGdQ5 zAq@^mP6D3QlD#(<03Kl><$mM+vdpt!R~gt`;+{~0$9?f4ZvJ(S4i_goOOPM2|2jxu z{}CbN=enwaYTCukrk;|ivFz+>_apY+L)nUppM_@@Ukat5W4}f-U40SxT6#Ac?#Z%H zoR_oOTB_WSGOyB1DZ@IFq|HLmJB6$FhShs>i8pd7;*GrPtd$wdeAPc<K;T^#PrnyL zd7U@l<P4tZL~ZA&Uo&@@GIs6aap^C8DgWHonlEGka5sI|Nd$!s5hJ9(?3Jp-*#&R; zx1KE^@Y`?+=ta+-j?2R@i-XOgKT5e^vuGfJKEgZVFtWkyzr*qm!Z8hW>V)%CJX%A! z%+>Tf!nXX=S@Kr3`3AOYBPV>l`85gYO_A<hEy2Zj*le6F&tC|I8S$Li>Y0}*!IDhh z%kb9Cqo<uv=n$Oeh1ve2*4O87^Xe_qji-K}kFegpL}@`a-!C~+7ymB1TT_w5={gVS zwZl%h(Y7MjUf~n)_j8s4iXr+Eb(ueX<#p0~|4dKlOjcWYShl~xw!bgp`TZq{Ol=a` zHk13M+s9Bf^_(Z5NSvN2O4Q{K=*ydRT6rP@7DSwqP4k#|2qNdsFMy4$HZPH29-F(W zIscQ(8)F{$?|*@kNKZ;F1&}pl?o#JRU3KE_?)3wx_Q@{+1FxpO!f1=%{4R^y`QY8E z^K}YFh&aED1qH1(_Y&w*U*1X-f91v~>Qw4}*Is)-=1{VKgE>c`A@ris5rwHnXZMeT z2ztV3l{T0On#;CM@gBoiV`lZ=^|@L(-?D7o;0+>+)b~<#?vfnbt*tGG$+$w9K`T0! z4sb?q3(?LanuhN?^Dj_Bf@=`|g!A{Al!Tl(-1d@@Tcrd680`HPnfe*G$@r4CP21f7 z=lv2%{Ajxl4la6y#k1<&!PN=2xY7e9V630-Fhb%LoLGR@%7y17r?B(K^P{jJ6;u5T z9eQ0d>^#VX>rFp8Qv47G%DG+Bc9rL)3AWbw6P<ND8&34s@!WN0yHM0{8?6=>Bt7*^ z%5;@jTcHqPeJnq@wxbB4uTZr3s1IU9wGl-z^@L$&$;C$QeAQp1hBA85wvy-GQXFg_ z!_)wp>|R(nA?xaCoN$c(hU({&2XH!x=ZhlYwGb1SVfwfc!q+lI!V-rx5^dC2#^R$n zHH>B}Xugt=;_}sStV{c-w%HD9g-njLfjh<UK&bzfR45a+xk>>Sbv6N_I`gMPb?0Qx zbZg5gbu8jk;(dxox&Q>dH<d$~@gmaoF30J&@e9F4=``h$LzyzSwvu`h{ZKE@^>wye zt|2L(MDX@xB9+i8+9(s;QGJP1|08?M2iwK(h>Ae&#r&5tk^HH|MgBmdL`BNZPY}eD z{~6@@91`KUsgB7+*dWX7;XaphlEKR^Dw7qHGcOYL@co^S1-G{i*SV*k_BF&=M^$Vz zpEPFM2@wZLF^Z<v$VnvaaijXXmhhtq@<Fn++XlK`8)WLi8}4JH5g+|FRe~BuXqLD+ z`De09<gQ!yZfIbt*E-q9QRhK^#LQ`06_T^`3Kpuob+)g8puA><1v9`rSbO5Kt=oPm z#d%~wu9@CXkT{Yk^!C;(Z^+(~hK^*+@}yr@D-kur<^Vf0*=r*~$h_I{6%I1*HfZ0^ zV!~b*f11;8@&cmhjgxi*1dM?Oyp51R%wB)>SLrw#5QTgn4=4DdL`&uaV2=*bz1-M6 zu}E?b1q3Zg{(&Tea1x57HZjZD4q_$(=BOPxKAI@G;>!}{s($8S)>)LRlBG6;u{fu^ z)USF~V;W@X<ZdtpE?JwIl=wb0`>h*wq2WSsApG*jig<84NcW!heyFzSI{SlNB)kWI zboH%2w2l#gOevH7M^H*cGGlo2VK9i-ueP<>-S&6F`|SmAo@IZ=OuhY*|2RdHO45@3 zK|}v^kh9}4wzT}1C_f(HM_%9ZwP*R&6w%>&rw-u75hxOtRFPZ_Sje*<v8Ky1>R`-V z6a6&180bIz6m-o(>?$Dk8#VSLoa0T$h^Imo|8+ahzS{n(JG-@iP`CDfmDm0v+CM$p z{^+l1-;;m5WBKP0pio77j`5+++FWB27G$_7u#G7nP5d)jY?^R1l*^y;*Qm!nyjzo0 zl{#ouP2u=ON#FQ0Q#_g#L05%GIIr&0&P+c@uOCO;<qhhYktIC0X?#^d>TH=PxZ+pu zg|s7}eDdc^6=_sG;*={#N(JHf4tBQX26llC?7~*XJ9)Y|OX63RET7>M4QUaMDS1N2 zW)$_E=W`X$*NP*xV#HR|mDgd2c`MZm+G2A5zKSK!3Mj22mfE7lCGHW*in=M^{ZNp- zhb_J|sMr30yAW&$HZMZ=V7;K7+rE$Qj%Zm*owBjt@_jnke2&yB)q4BfSB2Dxe7idT z0Z{A1-+p{z_^>|o?fP0Nb!4Z03;0czI{t4zzP?h=_wB~_8aT6lesS>IjPDmxr{LR; zFL~+u&mrIY42R?dM>d2dJr3fS;pVti9Btnuj2Wn#qe>qH*%qO>n;B|Bf$j`_G$p05 zvnxgSkJ4*svuvC@RB$ZkM1@?tV?MX{Uf-+lRkPVrxm9o`2U-ffE_DC6A2&_l-6Yf7 z-e>e3Gl>m^oMRi3eQU@~{Y$FK7whA!+j}kI@T$)0FO$b)>l4~;bgurunblvWGQlT$ zi+<SLL(z|}-j(#V*A^D!r|Hb>KYHJf$pu2a!*OenjV&=G<Bqt!Y@NEGP@x<(FBuM2 zdl80a-H`+TBrFhzn}=6gnk8{a+VD^K%8H#!E9JeoXru83*EVfsc~=(lGrc|N{hYM2 za8i5WxJi?7Ri1i{2dp{mlR66s3N1}|W3=>q!JD2uMCthNb6sDQxSX!X*shgYc7NP< zMBD47-QEO3GJ!1+UD00UCNk9dAlK3)ZRtZb+_u^_z+ZxXe(81un|}>FEWB3@t8Lmd zF4!#B{#7NlE8#{kZfgEHKZ9#OiJ8N~*`@3kGvg=gk5$`(Yf-_E8GnA}Fq@h2t)h)p z&oy;aHGSG=p>Ne+GX3S(c}<`8T9|5TyKmJNFU!9YiR!A2nZT+SoBnlP(`UUF#(ejI zV4)5F@b%rca(2PArjv*Tel`pT=q;?gZ$w8+g=pJs<k)bY%T0E^PPUNAQV<=DT>u7N zFsnx+ZPuB$Np$|5t8=;5d0vh8awXySkS4|4r{b;i3-x~Jz2Cz^21c~IJ7V>5^W8}T z1-TXPzsffORn5Tok=Zce685c|f>*~ybeo5t4AAH4n;$Ym*|aQXbm4DAn03{EEmfu- z?0b4wTR{_=&%>)fTrhamz~+~ep`C4^WUr>rMkaetpH$tx@Lxpa@$pP-sz1c>xMkg7 zBuC37ZB@yt0gSU_+{WZk0rsS(&kk5v<SSeClJ~v1X=B;Ajj1iQHR%ruQ!nPRe6pW( zJStBLtANaX-fho~XV+fGvzhU1W;`A44mNCdJS;@1`zkW0E5dG3bzy2y`a_hjed(us zq+R(w4B1RJRB-Ls5t~!TBC}dBF}QXzd+e%063WtF7A-i21PWYLL_!b|)PjRaC=RYY zxp>6Jjk|}TZAVnp4Mas{3bWj&SdH$#?Rg(^cUAM^m$X5&b5kU;#)63Ze5-HRi07uy zXc}KQF*&?x%*5o-6+0Jx#7-@8ccHQ0z!Up>upIFCv$=_3lJ0IE(H?CL99$P|4Ueoh zIAfAb@Z&ixkhl8T_uK`4MSko%A<NB;g?eA95@h_S@{~oaAw*$#y0Yyg-<3o#Gth_z zOs0Oshs9jx7-p<dF12P$wxA87i*#Hr-l3*3BQaJ2->RQZE<qF)@h8h$<As?+;hDoM zLBi)$aIQ6&OZ9~Ughq-_aoGZ`(+jIRQoWkS90g~;g$9nx>c13@ue!oFe(ZwM@ss#_ z_JZ*E^Z0x9g24ErlOnL)Z~Vwqa8mX2saN%s;3AHHR_iKM0Ab&=7yL!uvk4|8TCA;e zM42^E{blgFw;?<7D7k7{!T6(67rAW&!o^Po;WvVeD$=xgaN$TCWuhXso{cQ>p%4^8 zq?J3{{J|B!w`l>=<ei&2m->=&4Q;-IpDUgTHp_c03xnJy*u0wWax=&MN9McUEJEI_ z{LFIX_^}I*+Syi^ERzKmeV-v7$Qn&G5Av1<6sMo_r~mO;ri^*BCwryFbWSY~{6U77 z0Vb&<X(3gfe$H1j4J#E1I@Kwq1~K+P(PDAeElOtsrJNJ*e1s9?3=2K*<hc-{2)2X^ z`cScy6;2KS9sfr$P7d<Hvc+OtnH$aT^mG>yC+F9zBVLTPCdYM3bLA|qySr}07w)U( z5=9-n0Z>T0l>&Zuil4>#z;5=B1%3xIAGe=CO{6?4UJl-H4->3z@C8>0hmrnlaB2c8 zR9a8O+-RrBK)A?ad>FjpFJwc5%H<dq_TJr()_HwD^cj_X%@sqBr|G@=kHHnck^Dcq zf8<n#MwE)ar(05uEt}{Xr8|^RZ1$n*f2H9uqij{txRTW3^rwXj_Fpx*a9nL+>az5w zMGO3^PAM8Uvncgls~UYRH<~a(x$4;_-fQ@hE&(!Q29jaM-H<=-r4m(`F(>6JA+?iR zbhyN%(ud!h-`2~sdKT6za`uQ{7h<U9me=%sv`lq2%46<dM(tewkIrSC1g=h&SMm{m z5UB&%|COSj&fmyj`#1F9Nqq-q>O~RbM9J<iGykG+L6A{a$c~oqHBDVrcD5BI`%*9z z#aKEcEr!mW%s06yM&zm}Dci}b{xCI2+Q`?Ha}BdAkHr!Qvf6I6ayyj#g3Y&4QHB~Z z?@y6K3RZ6E96b+p`f>9v$<!SK-j4OBs`xsZoC@(rD*#i)ga%YCo~L^htN_VfV4B?0 z#4*BtY!O6NYi!$4zwqM!iJN1QAxl>~lYKRe0GlEt&bKQIl1ungT9E7|yYX_Hl%T)z zdh<D&o2qwOW#c7ZZ+n63TRdIxhu7P)(qfhOqwB~)>5^)rWsGI@I==L?orW-V%u!^w z;)1+V&iMaIX-3O^cFALMq{|kS2Wi<8yqw_trS?lN-YgR$Sh1)Giv5OvV)HYpPe(jO zZ4R)UDV=OrdJRNzq^)szE6q!mY|ok7*279KQtdGq$;aks_~owW$FJ$XdSCh%y%5wy zaW9QanKQnw^Zz$4+xe4U=^P5dJcQ18Vc=v&fQ<L&M2P^k6lwBjT)A0hkFBx$;ksA! zy)<AI6{MiP<{@|p@Xm}Rug;vgO(-fFNWP?=gdu$b_buNe^kv}~dhsv+OuvhKHL(0s z{jRde6ZPx<D-T{-Q@k=(xN=639zD8Z>`S|F9#Iui3WN7CmS$i2;_hclds|--VBIub zzY<}Ps%F$~{JXE|vpx&`!L=LGrYbYs<C}VUDJNt?Ikxq2Efepz1x$F-eQEB-fBEOE zY%ExLy1gjnn@@?n3OoH`gz!RX1D;OKbrZ9@Y$4+-<&~kC6nvAf8o&;7Uu%9Qd4%QH zn?4<v3^#pRnG804Ix^XJ)hUIO!MBc#e{vHx7DevAn<k9FiOw^fH3)m25dlBYiX=MO z9gWCCW`o!1O~Ok@cy$QcZqeOo1;Z`S@^p6uWcIvne@W??#M8j1Mihhguz7ovP(&Xb zNVvL<N4`VY=AP)RqaWYhEtr7sUR9`6Snd>Wv5;%V_qS1(#`g_2yCk^JOZ1je;xOaN z@s+8|TEAboasXyTcYiEuQP!#xTp@~egL&{@GI)ZKwJt5pOdCHA%hVShM<i0v-n+nD zNd=AEc)sKwL0gBqFG$AOnn5CAJ7$7$A+Ej+=6u^0g0LEK=5PVWG9f+K$S;^9wQCgW zzMGrTC7JO~H1F3)2d&P6Oqp|%{5gOV2G3v(nL27`c==?5OmHsFmA^P~3AeiMUd@U^ zBiS4ErtuA~Za_|71)^r~WLbYXh817&R4*-xi0!csriGRlx%Fn4R|~LPisWxgFY^sf zU6fviQ-%u&DV#i4qNnetR!io=YQ-w?-H@CnqJ#lF{9iOl64jB~Xpx+o1KV^RDHDpy z^ZaMywE%MnV`*Sc{X~H7vqEOjR<We(&LZ?M<ksToBqX<clsVX(+(i%N!6yA_XR3c^ zZKS2v+G);htKO1&odj)TZW{;r(#rJiz_QJ<yPL-MEl52ct8X1W#<VN%;+w;u?oZc- ztUdy5Q>=J17S>8)M842UuHEe(jkNdc!7nJj`WtxpZ)|iP0!O0qN@f1GQm_PyQ2n=5 zZvi$|D8_%H!ih6(S}fjZe}lVB{)rz+PT<7f(EzcN7WmQ=dZ$7JjzRG(WSU^R7{h>u zY36AKny=a{esV5htlI0r?5Vtk;&Xv6JldoCNzP=m;E$d@XDAkDZ&o#OOk#CI&f+FJ zK-5nck4E1BOPJdh%lY*R+yg^#cWc+ZY}e;BP}fZFs<Y$;p&w#VGs=#LNgYia$J<3s zk11sMi|p_>as)8^2u3Zvz2R?L{0hTXjmon;LeOpW(1S7=<=W@-^{0e`g30+9r1jM~ z1*c*#SCAMNWlj|`C;nEly+n*J%uazh^I*{`mJ3oyj44a8jQl4D1V=C~d%&kM4(!x0 zIr2ln=I5v}SL|WDl8<{Op`NAbJ)z`3r1SLd;$?qLMR0(1Vt&~lcx6?s6}fYH^`2yD zeu4R30rLJIdAFjNFek3$hWDJm7ZvE~HKL8n-2~kEn#*`*V;H0963!=5y(M|7`_hOP z>s!z8g+_eL`($q-DEx|gEL7G3n>Xy<*<srgQ{JP(EfSw9(n5e+jVQ>Ein+6}6V>fu z{`9g1Ngnd>)yk`ZZ$X0i_5+lhhmcFe&A*S;jT$w#v93-*L*Ie&8uggsc9-B=`Fn}j zHfl<zIu&zwBrxB3^$pN&w_A*v9Qq#dYzuLB8}WS56ceRM^s}_FO1NGdEK$Y-pBzYx z!(YKx8LnUA)kwVDfO%Ot44(+@(%Z2?l7i*~b&BC7O2ATUe>?BFe0);TN10**C+gt2 z$^&K1ZXf3;0(sh`&yT3)^*IFO3z#{!PsZ@9E?s7SHN#zKdnNf{r4IsWVOhkQCd^A_ zEzulE6OD3J**nYYgZbI<wLkln@s-A91ef$2!5cZ!H04RT3V0*<?@nDDMo{^rQh=$1 zLveS&b(F@H3yPWH^F2$YR4MU4Y_t@S?J_ViH-7p>J8ynQggqwdcV1FHhO8@>9X7bz zc*|tbE8~e{8qDKlh|E*`c?_I8i^j@m==<7Gx!98j9=Fe&!iFy!A?Hw_cz3L>y`%tt z(Uvr!ZJunXZ9StjfRN&IATD^;{Hk1tL=*62?AE85^HILk`Hd^yBQwN}pP7h%4k^Q% zr6~7hd(S|u(<s3bPn1S7z0uE8%}p_`sHE7at)n)WcCXN#i;BXij-(PE$ws@!ru+lj zP-l%V4DB(0R-0ngA6-{9?d$bTB~SEC|Mz%RDHA%)zEuCxj?FWbLnSLu-&E2~tiPn@ z^i8#_`8XtrJ@rkK-_XD0N&hG8rGJ}eeqGw5e@Qp51-kXGWzFS#?SE>`*Uw+_bpE5I zx$gS5HqTV{>|fGNtb6}j)_fe?>-@i=|D@Od347_^=HY*;=lrGr*ZOszzqDg6-&_Bz zrw`qN`o0657x~95UadHoJCZFu1#ORpK5=VI9!7AMAbe7>>Ni=L3NItI5<TyM>!dQm zgEq9!te6)ZReuxdPyGuAbe6Z4ozYh!g9looKFomJ&M?3KuTTE|&9;Yp1D^o+r@^U# ze_=mbUL-9~^dU@>I7XN9>;L*lyNbu=p1uk%PTZV-daRV_%O~TU<l79d>b)H0AY(@* zWzu5{vThZC2g;FkK6g-y9AUDTB@!zsEukKqVP5?$oiPy|{fs^YHi(a!B`%SBZ1r)$ z6=FY={?Z@3{#w3tmOuKZM&{Wg$m@5|{~*Y#MtIFeuoQouJ<~@15~|aqTwj=vo@q7L zezm<p!s~76oYS@@!3dUmpBR6C$VdK4+C6-J&&SS=^Ficc=AKPm=R>nP3UgOy!)8V( z&=M$j{SB;S@Op_-#%i8(X5WD@8oqkx_FD97*YJ;d@o&oFaqU_09+luuX(b@vwi-Es zmT!{I+MuSOv{q}TT4pmu8oo;tl9I3%G(odUo3C@Wji%{oZ{nruu5Rh`rOTrw-R+is zv83-$ddGa2HnQ|(lE%as=;%?|AvVt@S9{hh=X|PljFlSGK^UKVmOnKixONJ%`BM?t zHxx#LYm3p7(c3=N%C*%xvsk@>mF6{crZlue7Wbv}xKMC~h-|rbwhM<m>H}J##lnr- z{rxsZoiiv)_oazm_2xKQ0yG#&gwkzAIN(rw<5i)F%`c}u6`P<D8{Lm*u9{g`%Y}Kj zyJcfX5ekc2(tj`h<nHtrCCR~3X6C9|@;9V*&%3iA5*#?MrDR(A3;*I4u3J5acsfJ0 zOEH~MI67<*{fjFv0f|l!eZ2EA7m)Lh`ek*_7|NP|zAjLVbVvwsceN_c37z7kGjDFm zt@E1kvAzRu=JOjqSMu4;r<u>wd<Mn&fI}*elGvS~)<a-N44?MX&t?a)Ii2y-g)V-I zV;!j09Pie}jt)5G<kXqBdgQP-9X~ns=II_eM829X=2?L{=W}LIZ|>Ftfn1|`1^%N2 z(qCWTeJ$|a9tDzgzMY(ynNAJ_*BMrPEqpGF!~Z@cbT^XMS$d4mo$pT_jhQU?5Cg+% z3hRPv2Z-Pib2ev-cG0Q6igNYRV?wx|Kz`SttA)Ln^=0%2KPcwCZ_ozq6>j{yzu&WU z&L*0Pn{`?YqxzzBrZDw4RWOU2<NjB{Ix9CSf%vbf5H;7^c5^v0HCcH0MRG8&sEe8X zzAJMIWy}1SwS13H$yt2|{*J#V^LHzMEBKq_Q_h+S&Ec9A7g73CLNzB8Ca+Pwt6;O- zP`OE>WO>w8-WFXvSAvK|%~hHpl>5r4x%fp;4#B4Icjw1&H{EY!_VRm#$iL9F>q83C zmVZ}D2CpZ{VX<2C&e2*7QPJOG=6~!D>-J(!n}bPffpZ3kgKqFOh&mR2Uka-|c$;%n zE_117o}HhmuGX~XGR-_OFH=dZ><cS(5+$x+^OrJjZm|;cR1uoT4KZy<^&fj?z{;37 zI?*BcN4bDO#Z#F8k<`(4tqWm9EH7eVxpPNN=yD4SguII%^wyu<5k^jS*d=6{Ml%~4 z7$qL89G@W-LSx@5N}geS*-WHRqxs1O<tS#r701lq;Pb^b78k>**w*3Bj*!5cO8`NE zxpRa-Mb<%#$ilHiRUPnm=^-m=zE;Q#9;VxzRXLzd${gsV^L_=KOLM=LB(4V9eH?{$ z+{~x*2J@?*%3$S%g9D_^$~zO)jpnH*VEtKnG@Vkt)VZ!X2H%A(wIWCP2s$4%Z^4Jk z(CS)ah4rRx4Zmgzdw||+8mAIh<2#|fVZ?tm%%b}yBh^I*-#6z}6jMHwD8*HTc^e%E zo=e+(qmXx?(LhsTb3W@C%1V29pc`8>YfkXyZvLgLy|YLev3z>#NseiO=1D+P6o`Me z(E>~6aI!Opqf|#={aCM&Eil}ChFxEyGheW=$b6vqR2DaPOH(RG6IZP5v}0i;H(95U zn;JLhbCC&(a0uB;@_7o2z@Bw(xyom5?p7gt`14n#xYkZ<<55hKGekDmhNXuK<il&Y zQmrRFj!D)_+(H}N-8JUNBrt!Bvi?4sdl*YKtK%JZn`n&W6h*u~<bI72W@?xt8hmz> zEmp%~rW#ZeMp5su(&RV;AL8zjp36A4g4drzozC*#RGr&*pqVU}T=Ckr-Pw|BYErhT zO&8cLE0PwTv}2}CH6w)oJ=)opE59&X{wB)DvNpfhD+ZRS*cW_iIc7Ff!9fEXrlKI0 zEHU#Csb+ea2X@#!DJYlviz7^qoza49vnS>^Tje$T2n#C+5M_<t&>OxeU)<(=n60ly zWgSbU7~&*|tBvQ(;DakJgC%kPn=APv3T5J$h>iM*vcwksk97aodX{~^88}J!g%Quy zp%EFpP0G+&a7Bf1Hi*5QqAb!SCJ{sVvs}Y!H*vQ`!G&sK8%9MP)!M)QTPHnR<xXuk z&h0yJt@rtozYZVyD``XdygH|gw-gj$-iSly^Hi}&?(9RIp}GDSCsN=*KiijTfhn&S zGh>vGl%?ydB(g)iG&sW7#Y|}~uVh_sfyDwx7{Qn+&dZ>Sg3N5^CiYOw{0q^LlC4yU zJ_cl_I%_oJrM!$1sWHM?sTu3?GDO&s8RRV1jGyN+4v~ctGAhp#p}6Sdi&d@Zugfbg z6m3LWJsMIv(c#|{jN5^YHT!yh#r!gzwYO939~zQ(F5y+gDzZ*2#zcO^ailjJD<9su z4*e@L|48=S4xTwV3{z!JVRkLCQj`Z!fcx9;>aJi<ASY(|BaLcE^5?@P86*zgAj>Wy zS0rjLk&4*3#^)@0GXxj#kaBq(ps7==GW3-7KL!l@sO^a_t8<X7KX3Z(Rx$0#{4C2z zgnQobVvRfwnC%KIQRuH^x_AvW6EOZ@t$5lQZHFjI?&k^Wa=8`7DNo-PYXszj&{H5F zbg;|eP@_4!f@z3->M*A!4<ZtU7Kq%gc8Y4EDyWG$yTrV2*M1csaz%j(M!L?^(gy6w zDFAF@K1I=bbMs$iNdz|IENn(8Y~0R$g-&raGgCk<x0|S`(dGo>XWQmt>+b;6+>`gU zy~Bt_9XB_qpirpGcN9X6W--vvlLEqsvqlaCpdT0LgBs)r^#25L-*l*!lT(ARv1>87 z0YSt`)E<z}GrbiIwfMJSE%JY}Ll9;gk7+(A#Zc$YE@&qf0P17ab{9~q*Ebc1Vn$%j zwrz97oCHdgf_&n-;0#j1_XfgC7*rMLT^{)klZ}P%!^0UJCd$LKs#pU*FUSRp!10Fy zHd|1qTW4C2@TP0uMm%|#I9`!(v#?LTj-R}iuY_;sbI+sfCmcS!d6P)}WNV1yueh_F zMSv%q&uqSjK{DXdtt4R7t5cnMpVojc5^#V%AZFgD1?t;kbk{OiaW=Qd*G&fx&3EXp z%YJ*R9Fk`UfX-R}IX$|Y_i@!>#IXJrFNVjnN1*gbwofac$~7$h2a!omZ(~k<Wlo4p z#fe2l;)?8?u4GO(s)4TZxn8|tUOi#a<*0#04>pU^KR#rcV4txy{^U{?rbO7$aK;a| z%D0Gng@CL?!x&`dvW7Rk18xi!0X463HGVFS5%D(t(=`G`F&H_W9@Qu|gu24KA9@EB zc5kip<_$7aDlCOJwC3M?Q@YybUV)pC;b!Y>U6#1H@<$%vDSnzt!5h2^IoQh=m6wIo z*!u`Z9`z%>T=^#m%npXi3GJM@Jv7ktejcf?ng67!VRDsYykXi6*NNKkGq9<^S{{zA z)zcA}cTE(Xpp$5bnU><7A?A!fnVa(CTcx2RyoRV@rEXnAvhw-EAJ+Fi^le0KDT=IM zNWpQh%ZneMQa<H;%FM7sWU@-84q&s%eTPw1q5ZNyIlO;ZZ*wvQ^lm-*!MK6ADtj4M zWzoWMb>gaQLlNG}U=r}hiK{Yk$jQpqG8MYr52w%8<;?nX8UMc1v!qlm%3QKu&W?Rn z8xO8nFSu3ff0%xgRodr1;(n^=;UcJ2RsA&MFH^9HAG8mkR--;(S5#I%9c*4Bw0yp= z`oF>EBww2rm+x1QT+HPOd#g6=6j{aUrxzc@4Sj#SYp{(`6vU?6|CIdDtCv(MN}W6w zRyZ}q`K6%dRN#`hremT|J7r8XVNqfs*f;^}U(hAz8fT<#urhm>fqJyzGp@HZhUP1N z<Ex<;gXMzu-otWH5cl=v=Cfb!A?1vl1)arzOlkEONmL-&8KM(tyT3X!-@J?^KiaAP zO<qoek>v5_Ji!4W$7R)jOHMU|<mFv1A7eS&-yJF-f<`4rfH9HHCBoOV;3t9hfudgM z=E^f3k9h;2SfVZzZgc*S>v59K&&IP8RnADg87PCsEDe3-8};5*T4z4so6;ex2!MB4 z?z*BEAnkPwW5~*y*jZeqZT3~`XU~*bdhOaAd|USh;Lb~;!yJF)NS@07Rmk66{%`Y4 zC5|f@P_6~7V`Bf2J8$m&L(7_vcS&N8_YeBh=e$r{?e?Oc-QETNLJlG?z1*tNS~w;V zaD1mIf6D5)L0I@SoIbNbzo8&ml_>JeaKE@)gf0P1JuuPF+06`M=AWc;rvxicx3#j8 z2|d4Lz7mz-p=T9Gb5l_`>H8)4yF{;t0r!;A%qx8roeolcx9Y;={^^YYNlAUe&GFaI zXd^slPU6D+=AAMedB@EDZ{60@z8>C^C-AP-M~&|Awt42Uq8{*;bn~7@{msE!%bMjH zNxKKU*M(01`u-(P`rmw@ZVnkW>to-$Y@Qk4vwul9^Sbx1WliDU`j@+Bz?$Vx`aUqV zY<?s<(VCprIa6t`-dtc<v1tfLcA8ZO$<{*qZs|D<@ip%0KEyBAkp?*)BHa5=wy+O* z33RtH)~W^%jVfuT&KyiL=xeN3kpkIMIYh4h3*Bnelqzj`H0;iO+(z{()J+#l)=b~S z-6=jK%rclS4)jilrK5zgBEH3`GM=3z%Xk{=&2y_2c2I%{)uJ`#SzCo(Ua@ql4GJbZ zR*^#G8K^9w3fnvfk~bE<E7*L75Z0;XFpt6J>3kR7rBt*Y26R);+@0>6xbzTblTeX! zn6Qm<v=l<QzgqcbeZILViB5Kmqigkhf-ieKn6=|@dy67b+dSQ!(&H+jT`4*GB5btJ z^mZhqZMgGdt|#%PpOBvJS8LgvOEX2sxO9P_1im#nQHCu-wNi%8d6(0F+%3E?Ad0gl z?JbJc^f8bi8QceMj(GGmHQxDqwo^Do>2WMQI?_*r`PnC5pnJf~W9CPE<&}8O+|AP{ zUr?aZEg_`%O>5cD69qa?<l4GO+xp-P=_jm(b&E1kY#l+XyV`|m5t_aeACw<t>p5xp z*2F)I<N;e-L?Qr7BK(@I+_~hvd+I8kk?>bto1Y$HTu!$!TW<yMItsz%fSh`P2Y%kZ zy{49XO?_&CqfI%VWe36~bh#bHk&Gf{UeQt-wm~Q2{Uh^{>HO(wrAu%k2U{an#TS`O zVhJ;OS51Q9zQtLLzXM$Gj8bI06?x;W^u~J=&lUol4TK_raRbou-Uqh_vs|I~PE<M^ zHD{HcSh{6&vy^UP+MdeyM8880N^{+P+;_Ngh)1K%oCu^9u-k4NlHF}5At(C*zmRf> zB$5dg>x4x7T$w<826q{Wn&0Z3OA?R6!AjItXXkB{QFF_}Do8DOyHDQKD-wvJXLn^R zV7RVn#@EwJ$rE~c>;7M*mp0D?G{|+{`6%h;I~q_rN3XT4d5K*ENV}oS)^(e{p?}Gf z{)g<Pf177kqkz%ve3o>xR-+>4`q#3iZm<29&+In;bx!x+0$4#<5Wwe1o{Z=E@K@ns z^UUXadW=WX&Eeh0qh-xT;$(jn9>4yE{v}WPFWF1~HqR{X*}tTldo;jx4jx+8OxkPz zJHDZR$<z6(uYvC8x6L!3f7WCEl5P&~-oKVL8#Q!y4}7rldiDEtc{sZ}PGEOj$uDnf z7?FZ=BSlp|c^H-+)Ay5tvRA9w72|9*cEvMuvxlD3#3ADZq8uS&^<sn24mU5%%xw%p z?U{*#zwERx4^k2Wq=&$8bFUUdDAzp{gi;_O3igbPxmEfy^#UE>fVs{uXIi};*Ky}e z8f-L|;qOGBq;Am>qwHO{?tKDTEzA0V5Kj<sXSx=iEQMzfO0CmeXp6%lT!;t>t)qE% z#_0QY;%!tsv^1Ju{6Bq<LzEJ7CTa_7Y)a;k2Ixt{27tzyCE81|hDLKGnGNRo2UTrJ z232bcv{fH(T({{PU!$2}TVMl3;P(J9p5R5@!<$#ssnCvYeM`EwrZ)M+S?G(rEt>1@ z7JbiHTz8O(ba*E;qDRajumzXZk;{>J9w8^^sz%ux=#0#+T4HL4*nT^T%zrUd$GiqV z5y58Bx|RWnR`#VnRm>hc$iti94bMt0ELcOG8AWRDhTFujx#5bv!an*_ADKANpr)aN zv*G1b@`=yRKek>~NSrs7n!kY5T;=fV*KjDf?fZWJy#$_-!z=9Qe%bj?*+l~Isd#+i z8KJBo+0PAao{V2O<jH+p|K>@)0|n8#55NtLU<malwp>qVm>sn#axTjOa#Dw=p|78B z0kF^V!QhIpfKvIa!FG)Gj4^x4|4i7aTD%xMFVCx%GqOf!yvJ!USP?oj%XL>!+6?9# zQ`PSVJSQBW8<s~%%<n|x3)?iMURUxmTUEq}-+@b05Ls8b8YQ<6u9<@?bVEDY30j|i z&2+?Z{L!hpzrl~NrQPQAe<{tijH(b{Czh+Jf+Mfyqts+VU+)R<CN*BI%G~A5%{3r= zW#)0|&0biAwDHT=7{z7$UBMhy3fB<tk`H6mXl^D~8Gdu>JSi7A`fds(>(ZuBDM+%S zbxIL>Tr3;>#T!rtxg)+X8TQb+Qo8$A*@9)6aShJxTBukG)%sc+io`ifqZNr}4w4zw z`7K#$aMoziZLjP0WvGGZH1pX29jHh{<{}lG+x^NwA-`}kdZ`V>-7z}62B)A-Ms@=& z(E~#p-8Hm6c4#|GLhJrRe>l8(hd=f{gr-V^^M;P1Ug|FMLq{NL{p02-<;x}ZVVl>- z7A<#_juzpqUNDrZ=$Zf2J2|F2*xUfMV5kv+{E>D-Am9x@6eNb20r5jg&C!EWM*r>T zK`FKaJUIMR^)NYlg3VXZc1v-G2-cj4LgPV|14-rzVMNDH!PlJG!%DYIvAl#CAY-=j zV(uz3xG54za-qg4)>ic)TyVksPGvz#8iUOe;g3hWOP5-TB)(_t{i+8+5ONSTwM zWEQbDPJpr1nQ+(G#z?=lek^^1D?X(sHeh%nb367fww%2o1e-sW4CpMlbmV8GLsap> zyW1?LkUfddO<#kIz;6z;6LcHop!!WeK_;Ea2HQde6uVXDhqXX(^`)}P)okN-vYq_} zczR5WZH%Mr`*2e+T^b2Hvdj%;)q8ncxXsxv1@*kXG+TamElc}N0SNwliZoc2`HjZ= zw6&*Z*4WF3b}#XmGY?pw6q<0oB>c>gKzX+Oq>kC_4rf3%L1Wr=plTw{%ewT#Wxv?{ zuaID!mR_QfwIgwBPiV36W^&n875Tdf=uX(io*05$=iLdpo&NhD$v#1Wpn`o8U<1Vs z8;tpgFixO5*7k%g#xK|;J+A%M9&P9C`u^Ad^G-~V+4k7Z4|haf@6An}W<o%JTceQY z0>~PRA1x%z7|;C^Ns>MZAaD%fprTCuK-;>*vvseqbvwi;S!^lG_(aU@eWgV~*BeAJ z1|dTQxP-;G`5`&Vpro(ygAY$g?v=a>1e+h`>-s9)qHFf`yzb96OBSo3Lp*RbO_-QE zrv^*m*>~8H^OhWJZX-udn|gT2M*v~Gk<;jYN(c?wsj5=eZCTu;02SjbbMCmJFS}<R zKY@sSHx$r_#=sAt+@5ZEu=#%4R)jT2@l2W9<G&!eWr8de+j5OxTG7oRM*{p}h=-hT zjkP?zqK`sK;yV77O`^wT+`P}$k#(RRz3Z|#zm~poSek|Zzo%02R6qOBE#9kJlb6^g z?1GN{1&`Nd+eloRdEAN-bW=^rHg^}z0hf+{GM1S6C6D^f)44jiQcJW{q+_Fu_>OG8 zbDey<mVdyhv;VJgjrGO_57W677xuAKP`vRsm^*$ZOQYWSFF+_J7>@-(Y8Xzw9y|lq z{ub%wcH7H;rs!}*bkP_S{x|&(si7YFO)AKR;wjr2#@Afr#bJNU+-RwlCV70Uy}!5L zrtd4*|Bd=U45<R<oy{PUFgjg^R3b_Zj~$sTQO%>X+7O%nwnW!Zu>I$ZE7NNYWg?hZ z{gMpqkeH3ws|C%YC@9+)!^<d_K5=#Zz<~u%tmNNhoxG9la~zm{+0Zx7WFi^{CgK(m z2nPArM7@~7QkH2Dm;<re3fkcb9X=l<5XppW8OxcO<+35cR6#YwdDak$1n<71q^fm# zQJrNbqRv*<Ag+f0=DJseqbT*}kvt{#giJ`^n`%DiwYX-I(r^Ydoa+dIX*2c~gMP~m zQWH}>D8h^OyUYk6Jw1n_gVn8N+&pTtvMO+%O5)GEr^*t_czLIriWaviOdgarML35z z8HKsz;5u_7e)U;GC6R5LC&^XCx)17-QLLNT&`mx-OI`8+$&>r=LVYCYejm1Z=6${S z=E+AS-3(SSeeOQ4Wz9oxDNwrlmhrFq@i+7@dD8!`VmaTt_iyve#Xb9%baTt=I&qIb zb+oKGcCY<!`G)=_Pv^gv{%xLlUm5Pa`AfPP+`WG-YaSxnHA~-P{_lK4|B|QkSD}6P z`P)2manJrG-Q4omZu8f&=GeXU9}^Gc|19>l@zRr3zMp=&DC_S@cY$@n8aFq-xJMk6 zZ=pC=Rp-3|4HWJi|Br-CLp1SoZKo2^#1@OWgmV>dlV;w{+>Z%D3Mb@#rcL6R+u0!- z%8a8?cNW3h(bfb$Vf(hD?`v?2tuu=1v_j0;CdE0;%S;JXJndmLu`75WPhmjdjpb@r zc34$jGlFN?{|Rp&aQms+ok-;+5>AQxXLE*h4uiKe?DckjqYUn+FGyn{IkIy((={iZ z%?WkojMkj*+Z=Za8Uc79jQ+liWOJADFn)<bl543z%a8S1!tLX6GK6K7(%rJd)7OLw zmX)Qi2@s-Jsx8Y7Z5tlg;-<(}^JG9-y+WY}%8%_=lq1c{SpwzB)ZI|22dDZ~z?~zX zyTYzQDB(7@A2ap9F^#hc=z9}bBNKQVwixu4u_cFkKx)znEc&CYpg(3FP{FZ%{+woh zK&x_q7_mOj@@WEdWlqFcBz;n0aD_OG7pl`hi0`QR{AR`67IBxFDxQT420_po+Z4=Y z75Fz@h8y>fdIsj{rj2!&zSo<nlVx<GI58GP9PD+yWATeH%3|7ihPF$iONOacbkg=S zXV&IgC5vj>%nd*Dt~b=V))G3;HG`s%Juh$hp_TXGj|u1eeVluNgV@8WjW1WSVY@^Z zLo`AT;>rigm74uf^OEQ0VDnVYppO5@tZRMie@xAN<oSXt<SuW1MSKFaygOd*0H{CU zNO#^XIkqo#guWu>aSQ@!_>!lpWjW;PF0Qqaq>EN8>fon5shr_9^8;yQWXxKEn+CcO zfZ}OQ@CW^38)Kd|NH&^B`7xb??r}{Fq!)n{WsbOUu^rzj-@J}bwjF0q^ccVhr(N<? zWn^sOJMs#b+QKUL6CF16D;1Ib__`Y4+)?UB61c^tbj?K1oL{_ZF-NT7H&B1@W|{@a zgIlha=Q{g>bXMEu0)SZH;ufOC@#Rt}U>^_c`mSB$$@BCynNG_&ft)a5FgXb1Vk*PA zUkzN8;r|y|L{Pqu6mH%Ss%Rq)1D>_7Dey=)ih{!8Q_w<Lzr|k2_gOxbI*P@vYi;z^ zn^RQ1Mz+WI^k8emwT8^x(+EGSZT(}m@o%NyGQ{F(#9Smg<I`w9d8dd$WU5o_Og9oY zTJ|&2DwHy~28v&w9_Hho|L6rbTKJ9Xlp7Qq;$83r(oHz+VDmH<0O(YRx8727k!@92 z$i9++|01YT1y;)EX$}raiBVqXMt$`SX6cVW(d?ByLUE|UDUhldde`P9GKGS%#lDb5 zqC4(#{nQMF`2?HSN-8A3LoT~Q`l1bW=Kfb{5@{=Lpo7iA@tdn)eHkmSP}Wh7`y$W6 zoAxN*CTS}uq>yJ`N57K0{3Pc~k6e3h%N9*W9mPyPg#euTX*iXB2_@zOEsuiHmPfY= z^;=wO&eM@1o(`^-H(O~9wB#TRv}t$oOmF=gGZ((53vOLj$khN@zFa}r<!|6SA-yTw zXr{>fr`$ZvdilmR(AkjgJFwoY(k&~>fndBeo;@1#=-b*>5C4^$n2xEpC-mehtZw<d zPUSI<PA{~bcI>e$TPCDX&iw+@s<6=A@e|3EA&CUE46bfDdAd)^*%9t#{%8Zc<#s(~ z1ok(cN`>I+|KZ>Di!DZf3wd_1^;C)N`Ne(Mx$R*j>yzK^ejRLW@WWR;F7-vrXZ<4( zYPWr#@8`kRDPnoPMCxB7_0Rlv{Rdi44Ke-`sh^p!{`_w}{}Wmp0-)_sRZf@P{9Sgk zU|U&DRGuZwC-}RT-OTmd0oy<a)fIKxfVYz6L_*(MS>Bb$bKZWFyy?O*f^=1mU`vB} zM$tV-j=G`O);oW#aZzwEL=?M%wy3$tjw8LHk0K%?1Y4Gf105ngE*aPwkUd#2VoR&9 zb$Us7V4J(Yw2<Dgi$nh;t=o;G_TH-E?uk-t)XqOhB{Vzn=hP=NC~iLA4bo{Ilc!U{ zetZ`nP$;BkO4DEVS>kisGW)gG>|*Wyo>!Dt>oA@J_nBTNd)K7fN;B74M_1x%L*rR+ z-w_tU#8z2-#@6YbV*cA}I+w||7J^rM&?%v`B(;Xi(XRNhB`E3LoymVPWXZ?@)wb80 z_Jp&o6!yIWhj*>hI%DbQisIM}F6`C1q%%{gO$){0;OIrjkjyYNG4X0+#^qX1`TFh7 z_*)nC5tWalo!1zt^F|EnQfgNGsLKMVuk&YeI{wW+n```_OF?GTicUbdGczLH*=Nb1 z*3m+L3r6f}9sQ_)KNHr@TjRT!jJrz-sk>umjlT#}s~Mp>bHvTG9>Z<U!F=H)0|_SL zuX-^{bz1rKI*G4*20w)RTpB89sR<{q1fwq_m;fb5Q)Ybn?ZSSqwD9|k^64!jTWWkQ zGXgEKh)kq93)G=D1jp6?QN+J13u<SV%-{$J_xAs49{{Mt5t@-1#JX9&L16CulQavE zNsb6m*&3G|mu0Gyn3lH5#R8R+<dH}<?k!9XCxrL@gszR6DK|048Ia>~d|@UrbF6;J zS1w~!b+ECxQ}sj9-+$90_!Ci}_@r!@HLWvt!=jIHd(-$~+IS2fKkv!%)DZOgZ+xL~ zO4V^5%6DJ7y)^w%VXD1FvA%~oi>JTQe!b!&4_xCh@r{~$PLpZ*!AO8n1g|*%$bx}{ zJqmy`7(s#)b>`nHWDeWF?m0GqmsXbMNM5d%_Q7y3xOQMmj6mLnOZ%e&99%nHEHC@a z2rQo$Sk?rDOE%Z&7gxBpIid`C7ONVs=TW#`SA*7Y%S)WxsHwBdgJ~!+k!SepYO!zA zr4*yZObL(Y47NWQ06-pnUmp(C;Ze&cdU3IwJfbrGyD)AZp2$R7YNuk|U=$-z)>?X4 z%&nbD44wB#i6bnP_yO+BsdZD#CM^@H-nRH}-E6qr$rWN_T$Jp+b8@9GIgw@Qi@Pv< z2;<ihY}m2<y@_Q71<Svbf9F8<idn@rmaw;Snr*~>5A2*gx`f}oBnP^e+uQO*rb8e1 z;x%pO<f<YhJlMAuB!?JKTfF=9OYiQL8cqwo6b_u*zz7-0%H$_B%(u}^$qp<2@mlTP z-oUQ*M(w>l+sZ`Rvn}7dukHPVLnS-Dqjh{o$oO*Y5oSn-dT-KDOa@(+e6!n7b;LT} zQz~|Dv;goWCtCo7&9%0J;{*W5&_Pk=u$>$I$wBVq(f5|6`ZaI3Y6w<9;8-thb?3&S zq@P~E=X@A{efz`z|FvJ%y?r}cu_*PM7r6<5ET%~I%%L0Qy}|!bQS<bQq`!H3r8<rK z3IJ^VK2pD94fT5#$j_fozUsTWGXPjoa)4V?dEZH_YpVL*4apM(hR3CsR!vNyag|sa zGuy|@#^9E^ILx!xaVN^omq^)~mMqb(#Nlzi2AsB!P+BZF+T7kMPGS9qx~Gl-sRwhO zJgb6OVLAM>)*Z|OP)=h-3`4|y;v(I#QL|~Rvaq()FfA3w?-uvAN-=_I{8-DeC5K}C z64zgT+4*72T*lZ;#7zINMtA72LvlZ9Fi)5-JDJL^4t)=#@waf(WLx*}-=3GRU2FYw zSBPguJtAv5Gl$wEQq09RBoBhpNyMj8-S--|%`a!~?oMLv>OEIZMn~LSs6_^6!FiQ> z7U*MAsrWK0Z#mAwFz>{+`XVv<C+6?2+6uXi23OnzRS?^T*IR3&ke`LWQvutC+2Bji zg=c^5M1d9*D&<ShteDu)kch|4$JJzW846W@l00SX!AZ#qL4T{;l1D6G<SU}(<RH=q zM9nQ)-`7%Gmf3Il%!(#P-7>cf>RVd|dhp)y=rUP$X`!&8!MT-v6E{D|Yya$>wH2Y% zaIrv-n|rf3vSc6$tk134gvBLZ>uzsGLB~V09hXaIm~2aDD-S~Sv&l!%0w42kNHoMv zIi1N=+LEKjMwSlKqoYsD%t|>r!YJhg*VY$qeB0merIvVQrnqHpB||NWnoF$WGHooy z7`w{+jgcr!9v7)j>ugMGgUwI!mEyiw?pm_*LuD-_*iQA9VCxzwdv`hi7Vxy+L1xt4 zHBDACaN;8*E~`$CK6*J{(!2XEJRJ`Vk=y$YOwX(;%uM9pqRcq{^<_r)xvVO43|~W; zBl&k?=FmQKt1<_lNN~}DWaz{jSmRV^`OGR=@(h5gYNACvrG{c=UbpeAUI>^pj$_Qc zVNqXCty=Cg9M7Y63ZUAP2al~<+Rr;<<D&t}LPk&#HD}>inu+1|l?%*PD)8;>cuVaV z^CUm`GTz+su56HUnB3d-8-lksd|q?pgJMUzwd4EDtss+^ZZB<rx3)r0fLabYfB%9q z5U93-hCzq#OBZaH@;c`yf;cU;(@i63=}l!VwWsm)IshUSlBggS^UNYdVe$qTHWLU1 z3;UK`2N4B6UVvDNo6lX6wIgQkuM)DfzrMSLPCQG1Sj;rBKgXtvX|h+pL;N5u^^rb` zNhByS+ndtGwQ%87uB9Fq_qs{RE*H?p%^yz48^Yr21Swe`?%i{NMw|R(PCZh&2ORj5 zz5~nnRPs5T&k20a&HEhdeV4x;>Cr#RAMUErPEu7)4UJotvN+Ml%v=r|_eaB{c&9Tx zFQ>0Lo*dxmzBZ?06*i1rEn0i6xY@*cD>pnK0s(C2mwYoHyyLB^IItfIcp=7rGz;l~ zyY_tfQ#&4544}^N&$5d>O6U?hGa24lQ&E&0zO$yXDOEam-4R+}(*}?xkp<OVV7^oQ z9`kFaO4s}@Yts4crYHMks<(^cL|@ZLj?8Z=J{2Lc*|R5Vwp#0IN%ZyO$l-1%@ykPX zqc*tFKrE_Z$+1M|u6S7PuIPqa&wyk0u8dkdS2F+p*eO;jqWc#Ou-Islc&&ATck8+r z<6r+iCVBEc6G!2XJt>@<oar>_b8Md3%ApS#$uV`BZgy_aElMioy|U&9n<TN@ZI=6D z!I@v*zvM~(e@0`lXa6?OoYu2{NjD3+_pfEmz`gc=J}YSMxhCHp^IQh)a9n|Ji{kEM z<xLccvFStuq7<QC1i{!%9o_-H>{xbxm@`hq-pJ-wjOVX;HM2)V4&oy2T+A`IEEjqC z`S{bK%?QpVE}*)cpx6}8@DYE@B-aXdszHUgLTQZBU&Kt1V%zX)3i+v&;Jr&q)f*2+ zK4Hui<i4J>S9nogljav@6WX0L?X)fq^>WGpN!<LR8RX<R6-B)n;v}*hy_6F#;UeIa zQh@g<zS9PAhs-?rih#*navhb<D4$s0a;0yY`MFrVEao=4sZ!pYp-G(`U&2O;;M=ka z(iOrw(WHZ8IHp{Qkpd`1G(sfY@=zZ)?*SfA0SIxe^k8&%lLw>I%IAwM0XE%R&5d4S z4rA?m+s><s3e4qTH&BvW(IM)8K_^P@qI*Q|4;||9D*(&WeZfd3cSgSaPj3Z-H^^1L zOP^2VcU3IOMhYl8<3#eXC#;BErKm$#VNfKDLyy+?bRr@)74v&wmZ&D)_SG^K&YEEJ zT{O)EE8QI<uJlc0xTS6b4>oFSiaBzH^yN<TiEZplPvlVGMQS;sc+)zgP-lfdm}^;y z-Lib0$hsQv0unbTaULZK;_bc@3d}2dHiR|6XmUFDKUr?hAO<>GMPd=N-40enVxlu5 zQxGr<cpO1G?MZDKGgF+$NXQ&-ZFh847iQsl)^Lomv#v8v!!SN>YUqsfHgk~GW%01U zTZbblPai-b?40|vzFe*Ushh`Je(659yxI4DwDnnm2M$n*q1PO*j4<S3*_j&3BP_;u z)Ag~g!P$P6VDWRr4S-ev`x|6Vgt^83_HJ!Q)<fTHvN8591I-1Zloj!^TIHSSwe}}% zZArGZrH<8$JWZdfS=y!XT&TW^Y%@!zs3YSkUK5+NiE+6m4wIL;nE8HoG|6zTiFYsd zMzT!(d5cSaWv#Q%o;d)qXx1K4`^cIjzV?te>1Fobf)oQrufTR>B^cf%XYciI*=zl( z$QPZXUbcw*^QYzzj%4fBj#Ht<xzXhO$tTO)A+jn2NJexaH2ZrlBA4Dkx3I+RjgNSi z-|rUod~US%YiO3E8`9gYMvz%zIz%yfx4irbv2=Sk!l^xdkgT9QIF1JY2a3|k*lG#< zx42O`0Y@Zq&ieoyOP+a&Bg`Yi6zMF5X)7E_jiMIZ%nQQjq1)DuY8uF!&)(s);K8rJ zHz8WGPoOv<5E2x!5bC&}(dV_N_^L-q#9ELxIH9uzPY=yD8N5NB&6sWk{pc>AVQDqE zQao0*Yb*j08V&u23<Q$5^vc%oK@bosL9xyLqyynH#fmz|FI_;ko_Iit^J=_whPxlA zH)pW75tdHyh<@coQbO>#657vRx#)Kuo3!*Gmp*IFuin-!5klPr@I0*a;L7>!&{ZBl zfnS$?jpPX~4Eeis+ns-~d1mz%UD#X;j-;El>m)U&U!!GB-D5iVTv3Jcy2@GI`d@cW z_ur1>n|a;aleDNQ+-rOHvKZ!;E4%oC=JLB`eVWVVrqtlxu76_<kn#W*c^jWs7Nj9A z`cXXCwGccP{0)j1y^9lw@wbFQXsp6H#4F?wU&n9qDkUK7=xFQe@|Cn)XMV66|4P`u zP@TsHZvPL@byt^*av(tU&ynM>iF0rHCK+ND3idtsy(>5m&jSZqRH9j$xW-w;961Xm zE*59uFH60%&_+`gt!wdn@<$Ee%jknQETJI$gdh>GhEI#}iabQ7m!izs{8t%-RZ@OI z8pIy+d-zgDl$j`~=V>ygj+H~WUFk%0{Xz0F3-*uJ>N3KBS4LaL@E*-X@aA#mTZ*g| zh#gPY0R#{`UPqqixSKOE<m|Xd9`hb&PF5VzeLk<MX>6%QLpvv}f&5)+s40NfxHJoa zyQs0(C~<_vh2PfNb>?)btxSFQ+80P|#P2mecR;;UHVXW4BK%wD1o$`6+e|%J06Zo; zpd1BQH|Csf`02=R^V*}`@LSUG|GIuJ_-%>m05C;jF<&f|*SB(Z*Z9C7Tn;&BNYXu$ z#7irCJzto`C@g-o&qp3)yPieYva&vyS)@v-p^5oUGi`t?KeV`Vl^O(FPbd1^R2mnD z?7w(Z>44yhD93vI5|&7}kpaG2-xC`^yM1>5kSdWyk7laZ->cR3{rxEwlSL!;7B}e* zBEKjJOJ0pD_&tBK<ce4PbA`!~JL6Im+ZTxr;+4u2>wKMCnM8KV*BzkSBXeS6u?0pV zn{zQa9NTPPH@Me@KUH^DmGq+kMnB?zbse)#iTIo60%qO(+1>DA-6P$9JCbkKKHLpI zB#rk0+irH}TNHDozPYY@c}a_!L-tnQ>W{Cz)O-Jyk{l~F)YlhqR6atY5>sqh+)A;( zxbKbJ!oLa30DL7nRd<o99+6NF+D$9<rmwn)7a<;kSzptlJ_Ni;Z|IvD$*+Xpd0z+h zu6l)+^Kyl7m|9RMjGTe#HhHm>iw_%B0fFD1GIQVWgddPouQQntEN2Aei9+x{Qtu9t z^X1lubDXoNKG*=m^`NB&82*l1%nA7q4QtFnmpoi%z+pPgyzn}6fS;soxz7v-U)aFB z6U$*mMo1mAIWIDDwuk7~LrTw9tKD#>Tos}<)A|AV|0sJC_$aIE|3AwBBaF--BSwu9 zH7W`siVF}IkkzU%Nz6oxfL3dtMvJI3xIsV@tm6=Ct8MLGyV&;I%`Pe~ZNVVXuei~= zP;9lWwKt7c`mF+5HUIbL+~=80&~N|WpT0u!JkMRuJ@?#m&pq1>zfTLl$J78~$4Hx^ zX7@Q;^Z17GMibiVR{J-eXQ)f2l<~#LmljuKPVHigm$*>qk9YLP^9`g49Y)H~p~-u* zLr6$FCq~ZD`PEH4R_W2F5QR^~tmgXfsphz@xo=|?>*%k`pEa5LAIGSmRE<wJS^n8( zcZZd;{Gk2A^235SnPdBgcl0N9UgPg(H`K#0x1&F`;#W~}3QHE+>^^F>QI$Y4s9#E) z&;KErnw+1xF`QG}PnX)tK*up`-6$(<uFOe!-`^H}Tk#6^#D=-4_F?Oewlc*9iQ;n9 zCb28VaDE=sFe?9Q2j(a4-P;u7E%)x>6MgfjX=CzF5|GJVT8)*{vX%J_+?v2$S~IGq z&8f=&GSc!7;P;yN&HE7a=kL%fRuuPW*wDVu_zl(DbtmD-)$RRuDWV4f9dLfFo#`Y@ zFX?#s=xCs{XZjGS3p8uj#M`E4-Iz-`m`!gjI+x%ttt==(i4sYVdHlj|l9QdV`jm-y z{hZAKO$wT-Qun)*!PNJ~N*Y2He}%OG;g+#~<o4w<w4U+LH9Vbn8Oq*niRC33Z|%xg z&cr|KaU^dDX35SM7Vpo+buS-XF7RsnSSrm8wzar2&OH|{xTJJkmCj)G)s;u*SFXOg z>gfDc*{)^Px+h?ER0MDRqqFXW(qoFSt4vAh@Ni$%_)UPa$KoaHj;E<b-K$UKTDjs` z6(IMZMzFi7HPaWLI-5IQ1pF@x>RG_YNQ2N#Ee&%~cT_vtzlOGnUm+uN-$+aGpT*z1 zG)hFVg!S$FGNf7`jg}2`A$+szu`Da;7C75$&qw9XC;u&bUW#CmzwuIN52a;Y#jZfc zTa|`|BTG%klwt5NJhI%UOhX*&8;)(K@q4z<n0sln``40x_qWV-YpwkR(((70DlZ+E zjK$%4F2+yq;PTKpq|ILUGg2GRBOBtiG506h=3MlVn65wNW$*dex3Kc^1|d=RjWLVe zr5C56Xwi#xlR;7Utu%B!KR@T^%JBD{{MLEH9}tT}Eh|Sb0bY>N1+eaJscPnPeJ5|Y z>W4R9w>A;GN{7wju$C-LAIbLT&qbJPD<;Vtp=UhtM*{;(aI)Q_J<puiPUGew0s&sn z53#$F8fkb4tkk9l$CRL|Z%D^3NQ$%g9JkOni+KA3?uE;bT--H#A~V147@K$<vg!MT zQr~mPi$g%{@q;?Av(6v4&L2^CU$AjN4cL3>X|$y6Id1#2HUheOfaR}FCRr!tEXv!f z?)rr7hdOUUmBAC}nn|8}K3Wn~TS!$pA6?Z2X3-v{Vl;xIN!mS4uiD5YNnj}Qx8R5i zy5;*)Q@XZ}_xp3xh+FzRO=a9uHNpzsq_HvVa_Rgh)ubbPg)(rRO+wukcT!o+{3ZaZ zEzX&zUHA|`7yvn<IDZ}+@WJ*X&M9x6Z(wvWJCAHw@BGe>+O2p#y7(<F2OV3G>}-P- zu<IU$7|NJ7i)rBerf=F`Tg~Gs+Mm4s*MD=H9}r6~)Bozd+wot6<QFUJKKm2n{$-sp z5$h65{`da%P5nQQgWkaY===BI+?l)gulH{G;Qp<w8}(uRm+6y2t<4=YkaeBkgxX2R zMQU;>lX81-G|p^)j|=95wN~Il3V=-G2E_L*<lLa>|K=cPpJ%B)LL*vtr*y7ixnEHZ zispU*HfEZwg%|T{Z_mG)gY&KOFl!s-TxnUBNOoNc!=Kx6QTh2a!7I+EX@0d7FM+wd zt;4BE6<Vyg-_d6Akx*X$Kl@^TjjB_J<yzWWg3UA#e1&I=&_V=iRqXA53Qap<l;mk$ z?Y)R2tl;DD+6@!u3IHCusVt}Uu}7;|yf93wXg=$zZJ~A6wlwPLb;a#9bD?LfIAW0a z-FN%_tB=*V{*MD9PbWCRZ6`Of?PGpK8e!iTVC>(=*TmL%a?NAd-`WEI{i}TMy%I)t z|4q<z@ezNY^8YR0KyuA0TAJKH^_2WUuIAbIEI2GblJtv0X4{P3{b^S-Bz7T<a4gu! z2NKu!ggat#&7bw@j5tTXct$53x4ILqf-5h+;xyIno4UN0yBpB7k%Legw&`(yd{sAH zXOF5xuYAp?yyjTxHl`Lw7Osg?T5dP<;??mcILW%Jq^grFQkmj6iSkn|n_{CX++|Cp z)=l-k2b3-D0-lOPeVC~qMbC65lg>wm)8((>a8nfH_+gV49hUdO@Y=EQxZY`koWTzX z9<sqdx~VjH87aAFwPXE|U^^K$GOqbbTW_LlnB^3oC&$33i-={tf^a{KEPEfOHJ=ZW zQ6_>4z(yHEMoRaiEDI8xqS#;6z{WxIZMcce=CzST{z=f9;7a%NjH}{A-Sq}T4x|k7 z6HwQyU~cec$p2pSzU%BGg#35$H`n1s$iF8-z7XGH=a)v;usqU}j-w5-b5v}KRaNvV zUdN;6mxh`jKT<-C97a8A1|+ZI$ng(@ns{*(!EruqpHaZ9R3);+Rb@b2qJROhP*Fj1 zywRwj<KZDqjqdJzL<iubL<*t=*|mP6k^L?j9_JxN3cw6LqA<gmaZDe@(Oi#VN)f3> znn-XvG<b|c17sqYJds%T>8GOBeEf0P;M)Yw{zvk80s4Zw$m-6?@r$zZj%jiaa~~-p zhY#=Qy<TtE8c$rZD7unt#>FKL6fx9wHNfERTEfU@)z?ceHW{}$HhtOo_(}6q>+Y3) z#kH{O>wUfZ!V@8RByafx^${s==M9#+nF<Mon{^%nP23z`{r2=+(&C{z_u>VQ`8=qf zG(FR(_-OpcFQj3}!$OAc;SK3O-4tt`Bk9U<5J{>DAB5w5huj9Ht43<r^#AoXHKoUy zjS}Z^fS<%6_a|yj9<nruW5|gjOyCc1c#LYh`>1QuSuQ)bg#p#MM>ZRI%QydMQ6Bac z8dxK1Ng&8QNBpuLwGlAw%@+Ke?tMk?{;hvBxq;5#eN+D9^zCa=y0yK^Q5`5Rfv;(g zVdFa#Ui+Uo$g>a~B+z$G*8Lvyk_O3uPW}oEB{%G3qJ1m!d$Zz31vMq$zahx>b=z<+ zV5QW<M9vAg$S+*QGoo=_XEC*Q%YtqD?&b=kD=;iM08X^^2~TLeph?k<!m{c!Zu(R9 zp>JP~4uxZp=*hefzeyELY*bk@e{%kK5@I1oDbu9$9Vd>GP$Yey{A-UgkI_9cu3;z& z4I-t@?{sAFa<}|u@1g-JXWbKlICPnht=I27cb?I6jasWA<q$N3J&j?f+<0Hryb#Ql zE7k3<+1T>m)~1D|N2?>W_mkl_hONQEaA9-y5bM43$ankAUdQP74;`}1$uHxEVmT6v z0knd@L^c|r*GHb<;o}$@OxKEQh6qz`x<Mdqbmx6SR^6{j`~Slpqs+qWm||-*iOp`G zs9^i01ZnTf6P?wO)H>tN#LHC60`kq}8F`a?z-Na&`R^i%5gq8c^V3Op(|1U5wsLjs z?^l-aaYWIQH{MVFX)PdfrILvJhmTqRGJmjN>o%hb(h?)RUq5f0_7S~g#o+e!Sp*mc zY$*nsU9}hj%gC1Es+wX;%;v7i{oR&Yyl1w~5f$b@Uv^+zm*Axvv#^Rgg94q#gEv`L zlV5L3!+f~^^CGqr9V{B&%Ey(@ia)!XyXM4uDg*>GoNh5)ao6Hh@L7PxS$t^>CuDu? zsn)-(g{!8!&!<`BY<nq0iD?~A_D{uhhjNYMh+Kgf7E1g*THNAZ&nUL#_Gos0BGQZT zd6^W4e|q*wkM@{4JC?(9CAW9vmUnN)Rhy}at05C$wXxZ8gb1<vCHlhxF3#3=ZmSy( zC<27b-vvc-&2oT@(p_37+JJSFBTgM^f<YnzByYKza$!3`ACueaelt31D&d<NPm#Vc z*bm=A8Y`<xIaOsnWP;bMYA3HEJx$VA{vVE2y>Idl#FcJtbfcmXB-i{=pSJLi-De%| zST(&OKQT~zoK07ooSi;)-dp|dD9Qw{mAxPCKEivs0?nN+V<?oQ_;%eG#<=Wg!$Xyr z2Wz(X<ilBG<^Kh%H?Szau+fN;`rhC3)pPv*rS)D9W@AmP__TahYH23nPVj4cVA0oh zbDnv5lMy;AejwmN=OKyPW+3W!Kei%Lvz%rYN_mA4x^@?@MTYUIOJjEFc&+5d7&64# z!%U=y7;11*XqxLT@hz}^Hp1(0_vj8|M*OJ2ZEWX^gxs-&3e=wYmL0>YbD3gmqB+}y zF5t)#2uA^1O>r(>QSMM);z)X+^(MZ&4_d;;Iqtnj{A%64;&}{aT<2Sgb`>M$K!!-x zYsvoO(&X6`l%scZYg;}@osWo~aF<`;MK@iSUbV#TPe@4zWn48~7+bh376#YCYfhK- z)Xg_zKrG@l*v|3`3+-{@Mr49W`N`Y*u)#<W2N&{Ebt)={**2lZbC|+9-cFX~jdVOk z_#cUxy^HZk#=KutG>>=R6Cd;ZUl$-OL9dvr?w=iJOTp0XIj-#|Y#tf+@Y|Z1*p8vG zJV{LB!K5qYigBK2cExPM95S2S8NA54ytSLan~q5_n!rMz=bV-wwgmm<`rKX_Hwyon zP%n?3a$)!6{%qTY!2}^M<&HZ)WK<00V7H0sf)h}kyFvH$Fta^lzn|ctTFg<An~>N_ zH7(q?N-$x6Zb+d$);FR!qA)+!!vcmYZ6h?IIi^6EO=MD?X)JVMH(@&Zs(0nOPEBlR z|7sb~?;tDG6qih&{Cd`uIFEPRYyjGLSa}M@&>ylups5XwiYG7$0uGAThJ7w~ecl$; zOWq=H9Tk>85O1-Cp~Z5inHeo%w2<t)UuE`baua;E-SF+V^>!FX(Am3SGg?pxb7vN- zL2v+9*r(%9DKeJ2tHgxF^(EBls&8F%8}Ar7v@l=!VbG5aF`9yY^5`z&6lbP;8z|W^ zvQlb@`3a5zFK@8*uKiVR(LHkweJqSx)JEN&DkHxx;X->|?+*11$|B_SiuVmH8IRwK z&kpso-ZiH<=gp2y+e<gC2fk^T$l14|e}t7@%o}z@OvlhZF+hMTkJbZ(V+;i#GG~fc zt?aoGC{)E_ynhJi3oCwU2Y`HSak&I0g&^3?B2A8HJsMQq5z>2U7)+VxK4n|24Fcq# z@7&=w8g9hsj$rmscXsoFiK!J1t*shm=$_-g;tQfweBN5#Er5U#h|Gr+6|W=b_H4(W zx%{03Hu$_plbD;NVoWgGwGvHAQW_aUA>IgOyK4*|+7S25x|3`y=G7B+H-LNn<?;V& zQ&q*zneU2=!nliXC)X%`t2k^&1=lyU>(6D0td!sG#q~z+Q|HD>-GEwgvwvQ*e$~iO z-LwdEI{PqAitG8NtC^eKt9D?JX|G08qzy5XWm6wn!p>6ApMZ>3`1VMO@W4QO@`}oT z6O<4aT*2bb=>Cy!>4fHq8hp?q`<{+ArwJF0t$0|>iMvmk(=ND3u31E1SvSFuL%=(- zkLJ?HLl(CdXTE9k`0j7Q<=j5W=jS@(O(t^(Z(CZ6k2*BF;dCBXY<`pJ-0aIUozE6$ z?t)}SBSqSh{2v>$sA!Lfh`Rj-Rz3stzct(OME}m2wuiMAuZ!hQ!dgVL8eFX7AC*^6 zz<iX`3*_PWj>_uX7!XnUNz@D@7roWb$DO|t&<V<3^Sk18Z+7&-*(aB`FrGrk8l*m4 zywt!G2orp}cc1}=p>5<)Q;v_dJc~mi#mWFqLEzX|P5OxS%=8=+0&J+s7pW7Oi`G{S zVxe9hy)k3_Qw9YD7wCG!%duiEzN>3iTz5c!giX0?NkaJoM76F}XDl(XgZju1;?{Y- zBk5zm;%K;4tAQ(SrEBmkvJhGF(t3g@x-LtIEn_yUEDnoSzR$kYb#)B;AJ=n1f#P9u zFD%YYb@Zg<%2NI7XyVT=CSfsph9>Kbt4__v@>9LAI?~-wf&uR)d4qws?*MpvQwD(V zdq`~oAE`~DI$U{Xx^ElIWCvLBO_qSgcu#LIp)HkMd$CH*s;_S#(U@2cB4q`~ItFEQ z&8zTwS$kPdKYsllwgCLP>AnlrqW2F!m(*86IoFJYD8DqmOX))Pi3+wKfxpqdJZ0Q( zE%|G--RKyOFVR12AOu0Lc)nT4<ZXr9>R-a@0`RG2+w7j@9s3qO&S(+7|CV2wTqm4g zfJ|`(_PgRJ@i9L3F}IA2$z7$_mL@k{$Z!DB$)$J};vu5tJ>VF&S=`>YSI2^M)c`Bd za5`3{D)I^UGiInTR}1XrVrvSrnEqgh_FTO<(41!DSVu-<NUmJ~ng^OH@qluCHWv?U zF)LI@cM9ROwS8`}I>UVr0w;#2QUZoTkJGeXbs$V;i;uheJX7KQ!FuG%B$dXPoF6%x zb{dw(R@`sg7hjHU)JcdcQJ+k3tf<RNM((JH=k_q6eag9S^+yFt`C#M{%`$0*yv8xk z;sUb#J|PM0_af92CvO9(Q<ucrPmT`$Th8@*hw$KEcZv@FKQ<~4r9rd<y5A8{XLf8# zH7tp(Aay^EVuB`A6s!!(BYAx5oVW1Q{VM-TiizO!{?vD!>GcJ&V*isNjpIz-2*K27 z?<`DlcRgT>tLS!al43R&pS(?;B7J*wwN#=QNELt22hf=t%0a${RXn>=tCW}QNcOUp zmuFRio?2P`SoTV;!LHxkweo#wpwKX`mBJl*oIu{m*>u<j2W^Ap7oHU3zs&+AY~c^3 zCqe*sZqPwBHyk)QLUPdCTaM<s;pS>3veav>!!_I5Yj<p@%MUq2Aaj!@d?+`(p?l>} zKumGwd!zE20+gR-zH_xW4J6knCj(wEYn0KGwc9mwsDT>1M03GB3Ai<`xdj3Dg~=c@ z(eRSb9vb{r19)r0t1&B-EnJs&6DUTJLUrM~SmC;O;krcOx>Q3?esr@N)oQYP!~xUY z_~g0Gs3?mK)M%>+q_HSm5_4CZvdgl{f6541$KOtcbrbE&;db7?Y_aL(p9O&;6&MfC zYo(^{^KN&%o|J)Ey54mV-1e-S!KH@&(l{GZb=Uk9ndb0W7&l*l)fG-OWeH(Twp1Vs zl1b(FCO)Q)OKf0l`9s1_ef#NUe#q&}FAk|N&K2>74J%`!0lMWTulyb=3Nb`Q=kcw! z_$l-c6m=BE-M0hAUzse-7c<2*p8GYKpe4!MvE3H-Ti6v_BWmn`X2`!6iA7+~<|bN? z-k$s1>0nW;cNTe<JQJ;(yiIrYP2zN%F4QPLaScDUg|XZ(+}}T)HPNwa*j3{Rev54x zK8j|Q(15qy{`ON|=o-HASMVr>CI;>%*hfQm`x0m;KMC&*+LPHZw)2H0`;&R|<@Xj% zx0ZZ`{8MU6L$Q}AArzf@yAA+S1ULK}@c=|{)*Xio_M%B4+A2qre<~7w{GJ)dsi!KB zn&$a?ZF#a24`qn8g=4hwbxf<s)!@%dM;Z55D?u|hh;|<`>~R<G-shR&qkhTHrTpyV zry=|~p5F)a6X90BX+K6FtPCZZ<`E4uVk?It4OCb9&~Dx%L~~91j_K(tu7ID;9yr}B z$G(-)_sNe<#n3c8mi+t%cn&OU1ovn8aa3>TBo{I$MiN`I#ng&OhV)LaxgkKX{dB2J zc!rQ-y?ayBIw-Y|M-P|Hn?IGoqi0Ot7SQGHojYJZg$^MR*YPV<mY3Ea$GWRH@30}b zw#}-a!a?MRw<*RVaGXDz8%4D6yE^XMF#_XMrO3ssJAM~u;j`;!L7ib?l9Oy-Ri)dX zfAGn-Sx#IE^$MJW>8@+T2X@vC-1ZHl#XNk?PA;8jbxpbVU~>t9ab|r6^DvZ+)wJs@ z8Gh;_ejVwD@rwr$>;R8985haAhy5QB;yk)-{K4J7)!uPA>s|yMe(}G&zWA;=p8s<s z;WXGP$K*7)P0M9D#Z~}^mLVkN_B2OoJK-#0e-FL-#WdHR0=H`B+VqQ)_m1GFx$<IC zAzVD-nQZdD|4H8WT*vzN$#vWCbaKsT3bwdkFk?l>vQIU<!L`V&hl?9_CU4YDr+s^o zrNf7-TE0!DC3SJf`&G#sHmI0ye`eVJhU9&_X!!a~@AvbqqrWnF!&j`a_miJiy69jl z3n17I>c{VF8;3+u@9tPo(oG~gmr@1?jg1zi0dXZe&r+>FQ7d`h8&;A0W7H5A2j|Jo zDSU515p(@VLE6ZR(NWwyijUQQm~m5fXy=yXn)j&-B;%7e>`771=tgwak6w%lBzbS; zmo~gyLynIblV2|^P4T?P(iE>!d(25E@0}4o#d(?$Jw|_jDfyj;Yxc;dXVAbNbErC_ za)#cecxMd^yo%c^S_xnA$lsu@v66pgRL!^;55S8@Je|Dn;p=;z1#?^pcX7k6E0!eh zd%7^cX8f+|{|4GxMiIN>jGHTOnsXptbu$>?SgNZD+TjlSi$^@1yl;I+&%4ykA3__2 z`E}H*znGo4rXu<2Q(&2Whi2Vj86#45BBs*FvBmxQ9wWy{EM2sCAuEnE(K~Wb7Vnnu z&Ks6aVYm^SDAvo%J7yZaCNk7EC5DUH{K<B3iwul*EUY!@xvpzbtmBbXNKmwF8R{|p z{)wO$TjmqYb0ZVnae=%tZ*DKSa&+2@Yk0wOT-`pjBDp3;<G~7hf5AY(z+Pl{k-Tqy z0!MM~ZB1deTgoaA-9pZ`B1ciAI44b381ylUPwm(^D=aYG3M8zJIasq&7sIzw!8okn z=&x5Avij1@PjOBS3I#Qvq<J__*uVs9;BiXc%yi8kOA{x>@^e?eU70^&9SNh^1{PNn zcptpEkDC0JHJJ)4*I4CSc$d6yPJMBHU8b?`xYci06RNr&tgo*-dGBM%d!KG>3SM9- z^{uyREkVMnwOX}otT;3TZ29#JGiRx5*jel6G_vl}?tBY*;WV;xWSFDzK!d@UPLrDv zeNL{;LO0r-Y?~aUvT-B!Lc)RVYh%bjA0V>H-D|Er+GboIj-`CJZ&G@V|ANHml7o_a zobMUea-#{?-J9KmdiIpJy`Yza8Km{#zTg`b<s?)%p?JN@O)6d<yas)Ged|#2;S4o( z>&Z{R3|5`RHB)YHGI?C}5d@6wTZfP8nuE~}jaG36J`Va5?46eASRdz46vNZQw<>^B zwBD*f+RC217c-JO676xvDY4u=-tO=aGvUqX*VAL$MECQ*8*#|-)mo%+`nj6ESMqZc zKM(SA8$Vy?$L|L0?|^>OkTTGZ%Z=}FWAL-R>KH)3>G$|A8q^`gA+&xdu@K5`58*+9 z%w@p<WH)%oY9h!&z`F7KpG?Ek_*uly41VVEBbW@IPUq{z?0410-80D8_f|JsGNUdB z58Zj83yRlf+@<nGks=1+=oR!j?!iCX;0h;xxWh7&i>~|xQxi#$i6I7dBdf&8#97?n z<q3{(Txe8kb|K7;lr@+@=rWmcQ-5Z(<sA`>g7Lm4_+W%f^2M^`?O8mbV}7D8{1}`W zp(*k*pXlCnrP+(7#(s<RZ=R8;Ct<{TuPT2B9~q7Tjc&%wchCcz@jgor_6Z^L?rX;g zmNNOv^Ur(PtVQ#jI530366K9mc`S@qPWA57ViWGOv_$^0k9jSBEyz76Xp0~<&-k_+ zboLPssjjj<x7(exT2(hq6>IfauW3a@x-9FiI6))Qv<#I6h@?w)tBI(Cdmz<Pg>Q+O z+JpGGV^uunn;k$w$p23^`0)lVgMS8N_3-yp31$X3E{Gf7J8X)Fr<S%`Wg3&%c6HYM z@p#^!O(e9de}l{_?)@3>&}mIWPp*mDh-rJ;>()P1B7?<w&5fP=(N@^(Qz!an(aYz5 z5ZqM4O^4|GN=7vCZ#Ij55SkS_L!<9b@YlyJ0Sf~|v%gCGqna@=e%2nQAW~l+9NblE z{|?#@R{O>D_^TyC(Zal3gr4XdD(0|BaGC1Zli&0oqi_+CzD7P0vTb3n;tsdagp(Uv z9K*r;p&zI@<e+@oRj5p>+uCVtQG@7K0OcT%We|&dty!Z_N-Kzu6U2x7FA(qRA-3C? zif5I9%wjW;hxkupnk`S(k^cpfIjM=7*0&#vTQm1T^A0F+=fjpYPZouZcSeaICgBV; z*S%@u&|OGRwz%&_%Q<(<lEOK$g^PQ@U6?9-QFriU39&!rt%Z^^cUSz?&)q_UCYmPk z2NNr}^xgG`Tmbt+du{M?)C}g|N)Fns?xj;C_N0rO29Q>o-$N=&^Lv7y-+x8*Jsa-? z7QpCxWzhWEEl$a<WwCIIrK2mG;zd6knBqST(-dE_YWFGL`n`cE{*}tKx*a$CZ&R%C zaz8oj)$q^3P8`VNk2Igg!O983mmjlR`D}0?>(F+BwxLur=O?Zu%{Ka$+&w3Um>Nu7 zn>SnNEK$XTE57dDfFl8hDC~IQtp0zYu>1bvr_R$6tKu5P4rx`i$2xjs&$TFP?nB?F zxe48Ik6}dQb$)RelD(cyZ>)85GA<G$TufBRt@62MnW6Cax+_Ft?l^Yl;Kb7KsyiM= zjnd@)a*`j>u*^*N3E#eS#|usKMZ&qmmFf47o{o7LT}?J<y#4Q$#yiE2_rqzV=g+&1 zH>8rQMI{<C-iNyl`F95Yz>xL4+mJ`Ggvy6}Cs*4VYw$yEE)98T$HNH?nahZc+%@E! zZ@+xVtB=u;`#gh*hOG6FzzF!t*YLULgelvL+vgiv%sOSF^!Pg_A53zRm;a$9!##;* z1ZVYezUSzC!2|5cbEZ%NQNeHAoY&*M`@U7?L%~6N4^9mDldfQ0gj>`p>bcdO4-A~w z3*6OWz3296b(hk+_m4W*F1-~{N4rf3V3hm~YYU77WDg06dq!}#U$)2n$xn$fP2>Y5 zDj4OIBdM5VC~JJp4@x0r<N56U(Rk?d;Gi?=#NW&DGvCkVm#rUllW}7KF&tBVY(Q*H z397L4*9S^VF`ck`&`~1X_<ao|_Catqx4JLmfR=If*A1|drfl2Z?k{hVIixVmjR=he zvcaC<_nC3DX8X(tFXk+kH^PSrIY|#rv4{KsA%pe&<6f_?XWZ}`-K#dz{bd@Q4QABa zb_^rFI#HKPp{=m{+s`q{BHryz<qs<}hcdoF`7R_pktu0F@!x$TvhItXJ(<9`KR($e zgRE-140gNXB|mR0Nc<5HhOc{v7wh}Pb`am2k%7PSS7c!J!G(AM{9zntqcK_c><RoH z$^Fd>_&t>SnCD4T$@0pLWS@9`q8i0@0N06a`6J1fafDu&6_eYsZq=@1QnEDQ2F6=| zECb_2Iy{-57JfSTna$5x{Ah$;9(wgS{KeRb6L_Lti#9lN%ZM$JHFsE6YK!Y>d&hL} zb{#mb2`X(B?0Iy!?Ab=f20w@ZY5Qc`Qjl?(heFO7w9_m>QG!!7_s6g-0%`n}Wndhm zks2(xf%>c;E!eZ`r@%@%C7r=tlf_f<_U`yZ;-!U{j2hiI%la9!L&B<=xf8>q(Nu8j zUIn+3L0jAv#|edT;=(Mx8{0nl*t>`-(*oB^qQ%%TEBMQ2DH*_^VE@G*41*!;w?0V2 zxACLjkMMI>`1iWipBxl_vToyU&$HSFf4^zB=gotkISa(9^V30boC_t3bGR2;TDl?l zGce)BIq1Um{MM<q;5yn*s^AW&P4!tf+O8z>8!FdIXk=Ow>(*W}xc{ejdrn_E`1|*F zdwy-V=UJZ`T>kFep5NT<`OKw*%ilWq*~Y8U7V&T5*y@Kj=1LoGX%v1f8oj<Yxc<6H zmkn<Jroqn<BI!Z)xcb(v_8Qg?0R(N8=vO}HcZ8lfY4GLmeo?ZlYP>?`$fE>Q5C4V1 z(y<9;c)Pz_)Zp^F$hwCH_qXoqWrN|leYfY#<-2_!{49J_<*)D<DaNx{Os0{(u>{S# zmxqL4js+R_nol5DTuvrGBE{T!xQRe0KJur#<LxS9sL{gISsSV|MoD%v?mHhxhnY=r zpSQ^wiLk=vbrY@_4BwA-d#<^1@b_iAJ+IyE`HtLf<@1A{HBg{hf=oPxzfm&m0R30Z zWm~UdJ>UIzsXCP1wwbN3LkElY(RMk|h3452#|sYjUgHlJ&!N&s8XaePF%@;uA>C6F zdV&jSa4kQ%@b|jSgW*~C?rzT$mJfn=-Ll=DAKmTwmEE3ep(}Ue(RSXPP`zIN7a!g5 zcFj#n>hyH+(VJ$~A8kx{!`tx<@1)p%68xmVMLk6(A}x=*>FoNW3bA@#)nR>_5Ujmw z)F`uD!04o5kIN<{b8Eeb82dun<vYY5#(8~1abAMrvEHXi`w4TDqR4i+y4MFkuh)0k zqZ<=666;No9IyO&lAg6xr5;22Zgl^!M55*jx$_0vg88n9<T6bcPl+a9e91o~mxU>j z{f_+~%OAb{|E>IIKD2#eWBvHo^O^p5t}%S9CmX8AM~&elMN;JQ=ezaY@KIy<s89~U zvgbNI58$Jw(fyGc5UCU^|G)U4_yQ*2|BMgHk42mC|5AR{hqhlD|J|B@;71>|rf)zW zHOEU~-}-teg&jyt^SlI+T^;8qUa~vI;vE~}h2bF=Y&$dfJ_L#C$$~E?x@(@Zol_!Z z=$|ZlAwLavP5k9|7|ZpuKj=H0P2aJEu|t=AS72I#d5N2v70qc7t3g+J_X{{OcU>fm z41_<(UiF{Kzc=lJ<&B;tfB65E{y^<Nt@htLL*?ruXa?YoN=tKAR{r(o-O9VKz>GvR zruGF3*FC3|SsI_a&VMfrFkR9QZ+KZHche8MGj=a;y{i(6p^SUTQY8%_L>?LF&Q0sF z{S91m@nLa)7oz{n6M*2w-#;cFm+t4>SYH*V*<Ls+=&l251E!8UAGt%8_`$ylpgJkm zO9*ifs&v`-l;5jteCy&k4Y?bS9I%&m*2j27GT$92^|_5Yzn7bf6iNQNLj_Q*==zS@ z(OI9SP-X5Q_roLg?H;}f<wa*gVvD=zU?Z}=s$w7K>;2jm1nZ3m+b%(N+iBO&rF(w? zI}DUB6?<fgjiLWQFRh~2YCqP;^C>ZFiu3q)#u_%r#=6YcK+#5qye9@~tomK6`w5SL zc=B*0*F2tn{C|0?d*L9x)#iHKnjI@9m4MGQx40E{{~CKy{xq&B6pVHQxq+GSU@|}P zhCYQ$Ty}spUtC+C0BDq)M4q|L>>bx{6dJot?a}w!0clA2)86J>GL~a$)geA7`;pd2 zy!bu>L9F3l`M+{FYIVQlE0CAYNl_c34&s1jA0^%IQ?IKKg3{i(v6lD91N<4#*!C&# z`i(96uFO8&C}p$mC46ek=>YXWHOFd*Fs%a<iq9CTEoF#5$@+~il*(2_WBR@p_v{4q zw<PLsU;5J#)Ax6)`ddzaM@RiFvU>xhs~X?pw!RuFlgQyViK)NZPyMR43#sz%GX|pR zLt3%Ro>T^+t~nBnwSp1d{`mxCL`V3Mh=VO|=@E83z^aFP2N__M-@rgGU4k6qYj1=9 z8?S}<+7I}Z+s4EHS;2n|z+C2m5xz9;8Yp!<{_AD%kJ}yolYA8%G(0+4TITMWbxqR+ z8&uZ*=T`g;F2wsL!ac_{N~4F?z)(hi8cwQ}^aqkOY<F83=E5b5`~<993vh17VdQfn zk9am~D}$SS-*FF*f#hzlznkyE5k&YS{%p!94cUYyH~C59Y!Gr?pu52RP%Tl`mng?* zuYcN5-?yAL6G7$}<q$ggKGm|MH7v9Qp&ySgH#v?*6HRXZdVNNMTXm8uW!zD}e4m@^ zqUPH!3VhoztwU&?`(8*4kqKVZQm=9;TR-FahS<7L`;G3kd#pu~+w~hY))J@k6z}6T zcN{8zRGic%Z^Md?@+NdpP{d|p>Wcc~@{_^AIPzz|Vwgm8ADcQQf8bzRyY(p>usQT; z6JoB$!6wfg1qQcg-Op|_>R@n(1gAtpvH(Yaam+-wz&Fr)tPaBNdMhuL+9VWO9XyG_ zfT&4L>@x1)y@j~ish8H*<tk@p=ekB;9u@V|SvQLZG%}OGX2T0OvvWfT;7rOiwz@B2 z@q{B+zmRnYhE-lbxo&O>#*pM%7=iSVh4-a<?K0}~>ZkAMuFEguzD>3annp}Y@9eIq zgZptq_pJyG{$)*;R4E%ir|}B@Qz66SJbz^*_wyd&tZniX`l!3w0->N}?+d|DZuC_d z%2QOO(|CS?np|3Ha(ZZgr@c?Ay%(C@L1>N`7hXi9Y&je1wa$~byuxs3^Vm|GkE>0P zGX*6sR`1>#gY#r*F!HmZyLya3ZPl$VRZGKXl2WhH&8}A&iG_ffKP<R9nm@!G#r;F> zpL;?@(!B~o76}!57~cfa^*#1FE0fqbUCFjkD{^}AJ@+R5Sq5Kj-VWvlcVdn2md{2g zJ91!r1zzGfbi+Oxk=FZ17|lh#BpCVwg1+5s%p6Z)&pCZ6K;~x_-!p&pR`(905a&I3 zAGPiGfr$;d`YHLp^c@xyN(1>+G?2$O+d%q$+Tv~rHz1~2=28+(p=KuE{_VagUfWw~ zV!3~&^tJ}S)=&xqsFM6|yt3ovUkkkzibGjtd<h@S_K}oJpaESuU4z6t9qmVv7Aig8 z=9A-aO+|5+nPnGsH;ZSvb8n51HohpwCp{B7t@YaM-bI0CSj+9rO$ZZxQTZ<~UMMY; z)~GH79Fk#;LX*w7S#51(K2d*dcW+o_?g=4I<{Rs&v8ZcSMadP{K=l5u_a5Z+Wq628 z-qC^_lj5h=y>uw8;)E9yJ85`7w`Xy-4j;uvogWegp&M@+D6J%XMP(8_pT+NYu$66B zKv&Zqx9KpIKJ?Yy?5~5q@H644leai14zikL_vy+Q+3H&ODxS0Q(04?_6Id4w8}gS% zq|$*8N3F=SxrsgT4l`##S*xx~uDzGW`erK67^$BYA8ykD$sYr>6PTd2yrD||7~x35 z<8@Yqdk^zxtm$tbI`uq=?>H7$jl|6G>gxM$F<6x-_&ljfiLS259Z!{GtoV30hcTkT zw-W?`py_Ukq$+ZMThqVF1sx@XEbB`K+>9FTHJw0e7^?Yi!;m)tsCGm={08ipJT^0~ ziPJDK_XxD(3>@hLuDcbH><Au(tHyd6YZLOiY@wPoZAzV9FaPsHj}#)Lte++_;WIun zSvUVE+9XsME`Q-9VZ`I)L|!8p1N})1q^=@=s=Ejn$tL*YE{_TFQwH}B9?9j*_58<d zB*-OF7xT+7f=c)2QQ5X-Z7O)^pn@Md-j5v;jdzN5s_~w!@lNGY<GtXJaJ<!dsTD*I zWU$D(FU_DL<L4N7%h3aax`EezP?H(RD{G^H{5W_z0?wxjxl8jh(cSRqhmWNUSpE#< zr)SBgkNjtLHssBHke{}dTD3fq%V_dw-{fxc)7BRwRvMf70r~0O9)rT<r=1L{0wr@U zDF>E$iJloXaKDPaJ-xF`&vfN((9l!j(#(H;jPaZNVF+qmOr1ZlYi8v_iB`BJiz@m} zu_UU9>9xeL7ymXOh7rW*<*;#0E@nQ}kqD;v0X~K@a5+ZQb1DqeXl}(uSyY4Al@!T0 zHh3#SN?Xvj3XB}!hZhozW=*i^a5nSF_e@@B!#**0Zw`8`uFeTj^?-X=@P4VGPgq00 z+hlm+vV#YJ)VtGj^?`*xxbF?T3Z|iV^Rk}ORQc=GC%Vu3>g6{D`B4Sa2bBlxi7qHB zj6LqJ8X$+0BLF|~10B!u2iu_+DJSdtBIcy%wXgr)rrLyIe}15j4pT$im1pAhnsE~j zU<SPzE?>3Sf^5?}x~Jzy=zQ`Sqm(!ji#j<({mJ7!>uxM{g3V>B?}P~0#obD^S<X%@ zK3fLg+Tbk>-wv7WZPzlY&pl!oRNO52o3@67lE1o-ZzBZFecfyj5+UT1;A4R6O5knZ zrqKyJcB6bf>oEm*tVmKo^Fh^;S@&g{W=oM9!4iXS&>2p=&V53?+uga!tV%qX=}M8r zlATJqVIXlZfWg&k{5;oj8Xjc=r6R6I2KSf5f(!eWb5yBqVWZuClSW80?T4@h{0~pm zYIrGxEq7YW9QTAT!Up??a9FKw-$BFLTl|t<*`!j@uyO~>{)HAHc%szr3`^4sUZ+`n za@vRYe(ePtd`Rz*n73D*upja}D<^H*jr!|feg6%@Zl7E~-RDza%!<G8SxD{N<-;8` z@YXCC5aV_mAOh{y>S}JVnL2L%RvY8r4CSoz+|iWgpy2*G8Z;u)rQr+{0<)qUDO?zQ zn|eUq*=^L&>iV89gBZ(`Scl6tQ2hnra$D}j;%LI<P}TftUsaL+`8axd#7eff;tAmv zoKtT9arBQG0*#s{h}>xWX?za_3#k=DV^|zjj@{E{%XZRa=auZc9?6)u{t{t1up~So z$j>}%Alu$k@*|=xi+ISmE3~p0a*QF54URAIj~RGdO?0>W$`K<%-jQhb>l@i>pfpc4 zhof(YI`8LYGq$%2CTL`mAkRQFyN$OLgK}OBDW}D~WV0PDh>S2I%4u=Wp=9z4qM^kV zo-4y}cfe6LWKac7g@D^>5qVtlx_D60kjs^`-_3W<i>Hxg553=@VJ++z_&2xFM)36T z^e8Ch)7GAO!C4@Fn|qdXVa6>uPr5F0RIo<!`?oa*Yi~3~=;u96Ec0N%B-{4(*DAZ$ znMtYI8smj3+mzxxGwg~;Wgt5L0jyGE++(Ic#aWyJW<s9wqMzAaV{)&x&GVgH8m#f1 zj3{+t<FftLWtn}igdWVzkdNjhaE0l2={4bi+s`Jrn{)YSUJzU>?N2PfXU8c+Rvy_i zbO?R)9o&IEj5o2BH9bQ)Ggb7ZBr}cZIHh{!(4L|2nhL`I@tIoR>8EtpiXZ7pM|$~* ze**_OKJuTQpHlt@dyoHBrJ5O{X4I7oQghukrDnE}wSWwG?!;{&0`}%Uzw%zwx(M;~ zQYU8+k2pt{8qeVseq9>P)XF^hI0b2iAXW9z9_YRi^so1}hPYmHu6w^D8o_-Xr&KNx zT>4nHBZL8!JsqwhH_Lme{gx6oDVEX7Cw`vjuC#F5v^Pv4VjvzTGF|xoxO4v~`qeH* z{&A^o>{}Bay&3nlKZM_Mn+m5y#;bCIWldPTVE$08RMyfk(&-fUDx`R1!{8o;)1j_d z7%qw_v(l21(OYf^p9*o4FbA$tEVY-=R~qmAFKwDsOW-*SZ;JJryoDF5fl)lI4oQmm znU5AvKZjq<I@QOU+J<EMpJ9b|?0P?cU?7ZoGF=(`7uaD*Ui52W7S$oiA66Y0m>ayU zmdm0Nr<F>05dEkb7XHfv3V5S$`BfYOt7h$WuqbLjuqbx?D(nsX+Tuhs;D%ZjgV%>+ z%rJ+rKfdrE8u?k+$hJP^qh`8dlehI%7tcv6g!XsWTTLi?Iw7>r@np)lj#Zp=>fo3o z++LzVd3+sRT%aT8w^pl$CSq?QYj5}UVSnpGw$$P>{@uW42MTPw^0iR{xD$fj5@xHr z=He%YKk^t1xpV3~W5ry(t=SB~_~)-MO;}-0UCC?UH)B1&Y8T-R;8&Rj;ux9_g%~uo z!^l4cNhzE@#bcemlaXqapBJ4abxxuNBsIO1pvlXEny;w6glfr<*eVH&YNZ!9>V=V% zj~}{tFMr=4QAsG}ls_%uPJ6yIHwS%Sg7>zd-t-b0v4m5&t8xNQH|)&sG4L)+oJ67t zqBixOJIE%0iA>(|8_+2Ep}xiQi!ppE&0liON`02U;Hq$vlefsTM(6F8X4lJGG{nSI z6I&v@C15p3;Flvc^d&XUQ4E}T<Zqf7p&3s#&vxJPjgi^l!M;X0I}Mu5IX0R9NHdvp z2PSi5lT9Z6LD%}poJ;t8=mPRT2iRoxv+fI5)r#<vYc>KU>ZJ*(<eK~WQ%7<oX*hgf z9N*$K$Cg9wjXA(hlxu(nGcc0xu@4U#$#Z^VW+Z8AbGG|kyP<~B{Oo@nP2Fyzncf(V zX4nTuQ$J`lp+2D&Uxm2}9;<a1h5eCW?sVifGStkf#~})qQ^uSjX}uOtGk(`tXM9m? za!9eUw!|cPh}(mN5!hm?Pzu`c`3jy(TD}6tiXVs%R<13^@g1r6(A-6i+>E;$^=-!8 zJQ-(k<fKGHU$XOdC<kxC<A^tYS)81%SAMj)+1>LUOs&Y8(uD6%B9ONJ)+UvD&q@JC z`;Z5zitPUQ21AlgpTRx63T2A6PryXSBBg+u3B4&k7>?%Xb~+10?mMK_t$LO3bLtRp zThNBrA#yJw&=t*`XkNj`+H8<0+eWm-+xnZ_XKoF@t{NWv3NfnpyOeQnvp*@}i)lt1 z-H{jKx#v|%YaUB>%EwDu<<U+A!1$84ND@I!okmUF>dvqpdEb6Hb5WOZZTmsfNOHk{ zOHdQfM;@+`r>C49q;)yhDs#3-mg*i)T_COWkP?6TnF!KTgDp`zq<Phu6vPZ&Ctwt= z8~RJVwXZseai96$j7~jI1zt>Hy}S}YAfuk;FRSURuW2pm`VixBC^I7iZL=6~qT})Y zj`q3=5dbPR4wE{sS>`Xl@!!Y`^STC>Ysm%xEK3%T=*9z30t_iq^IJqJtDexm=N=Oh z4BJF}5j0GoFkn6W3SedHKw?YRoRh%DGv6-FogDVtDvQs#mAgb$;$fXqhq*<_3kYBG z0#P>7_6uyTU?Ae-AJ;rxBASqPl&N^hqkYY`Rij%Ol6#47v<3{^S<qcvp2oVb*fa7) zG7~zmBq)1eFbv7b57ZJm8Z;B#XYaLvwz@k8HRJb{=wFXNHf;28%bv0Bv}GUg0ggV? zx90sOmDkFS%s@3iKK0yqZiqWgj-uI^`SfS6wU!{VX>831d@Z~{pY%ky=5j}H&`O{V z{@M@~jAJH#L4MbBU9GQ)9v!E8jhcewru+O*Yfwtp0o%65u<m@JdDDmi`}M5)^DH`W znJ8mfE2|`ps4H|<pw7y=o4wKjv&1Rf2>xE%WVg%omAV{hsiq4yAb;w*;G_txZC3<3 zr$am^TTo-V_q$r)+~Lj2s6j<NCmI-8OZY;cDNXq#eXr&I3P?wDB}>zss8OG2H*EK> zzf_5IuZ%vVO6asy3AEBMELRsSh^k=T3d`RUmOnsntcugu1YMx8_pQZI4g2Je)%^)Q zc7;NCf5PmW_n9^-zaMhr@@Y4>R!(cI<ix=J2}j*Lw`$sqs@$PLOVmkVG!*u8mhWfs zHnY_m3+xq#p+l~Mf9gTFX0}du1Uc6Pvl8ym#w0t%a$4ORw`qm28rm;wfvZ&pyM#r| zg!dN1rPB@%DLz+dKgrEBYmxSanc^)X_AxkSYiN^T0oc!P_avW&<m-Y@ekizK|AnD( z^0rp@ubZuJ59k+|d05IafPsfVR@m*+DFt4iKX`iz^%u+cz#j}@t1DKYk>eJ5D4??K z|5lU83%Z33)j_&GYknQXf(GBCK*l|Z+$7f3h_Pa?y~W~cP*{}?@6fA1pG@9?ZvFtb z<Qn;?E9uwuR7W56>+Z0J+?DQFdNU8^y%0t&%DU4iEcipqb1J*@kNfZFc(r;yTDB7& zwdDbp)~XiUA~fvXgvMVJMvT-HM{=@zD6f)|c}h2Ww7TctF<e>G5n~8{XI&d@XWVfU zBFMzWy^9$#)lo7Zz>G^rf^2K>Luk?+XSLoR4>af=e2+D4{q~V~6hs7D5XsJAln#zy zHeIDv*+!Lt;`-3)dIpNW0HT7URD27n){Oh=pyK)fzZ)nnS`C!$!+qO|f2veG4KVt^ z{l8K1TsyS+>u;+xX6z7(HoZeLQsMq-<%GIyu$mXGzdls2e_wiiDp!KI$4ifsRCBC~ zU}O(lt8E(>R{M78U1=gd4F5j=m9n-dF6v3MJ^e3-sypuviJ$Y3F=&4tTFiN<-)+np zg|HN7lJ9F1Po~6fcq>Qv_ElbE1xwV;Jml$`&8|qY$8Y>DB9=*HO1<7U0c-wMuz_Lu z9jAl8+Af7P9_+ghPe&nZ{hBFZ#ac(3h$@}w*g!TdtBtuxRsZ%=gFLF*pP}~T7Ps2K zN{5-NcD^9a@9lff4e|QLI+-KKA@hI!GRfb}P5uz?{UA9exJj^GOb0jm4t!b-60xvC z>Ra8@G6Zjzbx=$2Y0dkmwn%TZ&qqqZ5XsIi-YWp5*}eQ}5~`T<gPn|rcg>FLgts;R zR)0`ODL<s@t}~Qp#XZdHuDSJ@!ew=ZCAF>tCDG*dTp@<lV+yWQ72IQ;tLf3!ZAy<& zQ)3IMZ>Ud7f*_h{ZgS&Lo`$QXhHd~JKc@Ulc9|N~cJIsx7fkY&cWBGlkGp517RP7E zbQIYt(!sO{M5Er`4JzCk=Nxp?Bj7=5@p)X%@w)rc6`Bo6h>ey%DuvfB_U_N|8p#!g zTCZr*Uy#)T2@TJaso1_0CU9q5_N%(ky&<L6X1g=3F>+n6xQFxH1PQou0(Qqm@ADsb z^Kdz|llY;ivH!i%vrv>IY^-};E?7i0r?j|9=9(A_J|7Ll?t+}?zW-w*A4K=0`_a=( zV5=K)rkJIYIU+EyvC6Gz3d=QCA(=Lx!c*;e_w+x6S8X{PA)_hR|5bVsGFH@*8A!9T zDxox1f4>q2Iu~^0ZnUXGy3L<%QUx1B4dp7_Fx0=HDwe1fZ}I)b+qUM5jv=Rmiaq0_ zn%q;ig77;ab+`1tbY)GhCfs`x^~SY2!kIlx$<7H<5{g)+lkR9#tE==TE6J9l_{2GK zN>zRg0~<$3+pHezP9I+sXOWpR7ogpkRb0RZ&3xTtWCGQxjIK5zzR~ZIytw5zyePJw zq{BzFO*gq@r|Q)7$!Ic(xzBdZJt-racHg~2UpN<Wx=>BlP)B=O`Ai>VV#$7C4)Mv( z3?HTMyG%30@=SIrWrSCJYg)KpQV1McRW83>)M8TG<kvIYba5%((sR8oY3kCt{4oKk ze?rzHA;V{>pXk2xL!$v$=pqn#5&Qdbga&tP3?!hMnAY0lzR@itF_p>A2bk)qOHbm8 z)(XV-O|O-(ekUKezZpJYq_HBWyD7+IGZj%TuEZ&mB-z!nzJISCt+7v0hiMK!i+N>T zx3wS)b<XEAdqLaKwqv;uzV!Z<6RfKvaTK$zlAVY0qSuzV&W*{=TNognB?SMZqEqj< z#hpIT@tYJNmjm}XPJOpOSQcT%UoQRG;T-Hr!t52%$0)P^M7Qj}3}?MEIsks6G`dtH zzILY-N>eN^GL5hAays+TaN>ZCZa&=tJNo&sFPY+o1tia@==+=wOF(Rra4n+8<;SbA z*79Ki_hpBZs4RccB);?m`H*cT<V;kzpJ0NHl$GwUf7E)mJ5Rt-D1NT@WC4-mn^}Fm zfx_fp3bm$mDS$g>s3(CknMPWrc(K|%5LUw^f&Rl)l+C~bg-(8*-E<~A0`21KXcq&! zb!z#itR^h-a4>Z>PxQ;FE{@!HBvv$-#i3jtwZIo+$K0yx6B@;jdQLN8()hf&6bwGm zw7O}(Vu2{t0Xd1uhe>iY;`e4sP!yHy$d7Dwhf{<HvpBZx>!zTYEetDM6~l}{Fdysb zFy3e<hxHUHIe~G6{`PNFCuOmEW%vMBrVkABQU8ikWnZK7)y3~uR@^!L==7+`8{wbl znN{ynX+3i`!E74ed6piRlZZAJEw*FVTZf|KCpBfWq+jQpV&9uwhp7*>eC&Q)+~%%M zcIuqYU2p)EXc(H?uWe=U9a(IyY0I;TZ}^@k*VQUCKhA9j<8<cXoWOlmcH|j!Wn8OW z8D~eHGs7$6?8tMfzcMa&Vj$7QI<O;;^|8qJ(KnX)g!XLZO#pk}-DdR1y!tz^7)Ywo zoyr(QaLk1%i6OaPR}Vf_n0{FL@X=<FgV^>#AHE=XNaMQ1KwxOE-sOo+PNhm5GB5>Z z&-$p_d$Y)3)eJiVgfTU3AN8%wXltj5Z%0j-F^iE^xH^=uX3R=p%mRdOegpf}K5h@w z%_c(o)yPJ7^#-G6f%e)5Ks%$<t^pN}hxK5WrA|-x;U-m?�dnQrFGNxH}HCgjhUG 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%0D8+bN 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 diff --git a/src/lib/opensslVerify/license.txt b/src/lib/opensslVerify/license.txt deleted file mode 100644 index fb03713d..00000000 --- a/src/lib/opensslVerify/license.txt +++ /dev/null @@ -1,127 +0,0 @@ - - LICENSE ISSUES - ============== - - The OpenSSL toolkit stays under a dual license, i.e. both the conditions of - the OpenSSL License and the original SSLeay license apply to the toolkit. - See below for the actual license texts. Actually both licenses are BSD-style - Open Source licenses. In case of any license issues related to OpenSSL - please contact openssl-core@openssl.org. - - OpenSSL License - --------------- - -/* ==================================================================== - * Copyright (c) 1998-2016 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - - Original SSLeay License - ----------------------- - -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - diff --git a/src/lib/opensslVerify/openssl.cnf b/src/lib/opensslVerify/openssl.cnf deleted file mode 100644 index a2c48ba1..00000000 --- a/src/lib/opensslVerify/openssl.cnf +++ /dev/null @@ -1,70 +0,0 @@ -[ req ] -prompt = no -default_bits = 2048 -default_keyfile = server-key.pem -distinguished_name = subject -req_extensions = req_ext -x509_extensions = x509_ext -string_mask = utf8only - -# The Subject DN can be formed using X501 or RFC 4514 (see RFC 4519 for a description). -# Its sort of a mashup. For example, RFC 4514 does not provide emailAddress. -[ subject ] -countryName = US -stateOrProvinceName = NY -localityName = New York -organizationName = Example, LLC - -# Use a friendly name here because its presented to the user. The server's DNS -# names are placed in Subject Alternate Names. Plus, DNS names here is deprecated -# by both IETF and CA/Browser Forums. If you place a DNS name here, then you -# must include the DNS name in the SAN too (otherwise, Chrome and others that -# strictly follow the CA/Browser Baseline Requirements will fail). -commonName = Example Company - -emailAddress = test@example.com - -# Section x509_ext is used when generating a self-signed certificate. I.e., openssl req -x509 ... -[ x509_ext ] - -subjectKeyIdentifier = hash -authorityKeyIdentifier = keyid,issuer - -basicConstraints = CA:FALSE -keyUsage = digitalSignature, keyEncipherment -subjectAltName = @alternate_names -nsComment = "OpenSSL Generated Certificate" - -# RFC 5280, Section 4.2.1.12 makes EKU optional -# CA/Browser Baseline Requirements, Appendix (B)(3)(G) makes me confused -# extendedKeyUsage = serverAuth, clientAuth - -# Section req_ext is used when generating a certificate signing request. I.e., openssl req ... -[ req_ext ] - -subjectKeyIdentifier = hash - -basicConstraints = CA:FALSE -keyUsage = digitalSignature, keyEncipherment -subjectAltName = @alternate_names -nsComment = "OpenSSL Generated Certificate" - -# RFC 5280, Section 4.2.1.12 makes EKU optional -# CA/Browser Baseline Requirements, Appendix (B)(3)(G) makes me confused -# extendedKeyUsage = serverAuth, clientAuth - -[ alternate_names ] - -DNS.1 = example.com -DNS.2 = www.example.com -DNS.3 = mail.example.com -DNS.4 = ftp.example.com - -# Add these if you need them. But usually you don't want them or -# need them in production. You may need them for development. -# DNS.5 = localhost -# DNS.6 = localhost.localdomain -# DNS.7 = 127.0.0.1 - -# IPv6 localhost -# DNS.8 = ::1 \ No newline at end of file diff --git a/src/lib/opensslVerify/openssl.exe b/src/lib/opensslVerify/openssl.exe deleted file mode 100644 index 7bdac04f46eae95b0eec2cd9a0bdc89a1a395a04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 518656 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�-pB8^gMS9_ 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 diff --git a/src/lib/opensslVerify/opensslVerify.py b/src/lib/opensslVerify/opensslVerify.py deleted file mode 100644 index 524aeb4d..00000000 --- a/src/lib/opensslVerify/opensslVerify.py +++ /dev/null @@ -1,455 +0,0 @@ -# via http://pastebin.com/H1XikJFd -# -*- Mode: Python -*- - -# This is a combination of http://pastebin.com/bQtdDzHx and -# https://github.com/Bitmessage/PyBitmessage/blob/master/src/pyelliptic/openssl.py -# that doesn't crash on OSX. -# Long message bug fixed by ZeroNet - -import ctypes -import ctypes.util -import _ctypes -import hashlib -import base64 -import time -import logging -import sys -import os - -addrtype = 0 - - -class _OpenSSL: - - """ - Wrapper for OpenSSL using ctypes - """ - - def __init__(self, library): - self.time_opened = time.time() - """ - Build the wrapper - """ - try: - self._lib = ctypes.CDLL(library) - except: - self._lib = ctypes.cdll.LoadLibrary(library) - - self.pointer = ctypes.pointer - self.c_int = ctypes.c_int - self.byref = ctypes.byref - self.create_string_buffer = ctypes.create_string_buffer - - self.BN_new = self._lib.BN_new - self.BN_new.restype = ctypes.c_void_p - self.BN_new.argtypes = [] - - self.BN_copy = self._lib.BN_copy - self.BN_copy.restype = ctypes.c_void_p - self.BN_copy.argtypes = [ctypes.c_void_p, ctypes.c_void_p] - - self.BN_mul_word = self._lib.BN_mul_word - self.BN_mul_word.restype = ctypes.c_int - self.BN_mul_word.argtypes = [ctypes.c_void_p, ctypes.c_int] - - self.BN_set_word = self._lib.BN_set_word - self.BN_set_word.restype = ctypes.c_int - self.BN_set_word.argtypes = [ctypes.c_void_p, ctypes.c_int] - - self.BN_add = self._lib.BN_add - self.BN_add.restype = ctypes.c_void_p - self.BN_add.argtypes = [ctypes.c_void_p, ctypes.c_void_p, - ctypes.c_void_p] - - self.BN_mod_sub = self._lib.BN_mod_sub - self.BN_mod_sub.restype = ctypes.c_int - self.BN_mod_sub.argtypes = [ctypes.c_void_p, ctypes.c_void_p, - ctypes.c_void_p, - ctypes.c_void_p, - ctypes.c_void_p] - - self.BN_mod_mul = self._lib.BN_mod_mul - self.BN_mod_mul.restype = ctypes.c_int - self.BN_mod_mul.argtypes = [ctypes.c_void_p, ctypes.c_void_p, - ctypes.c_void_p, - ctypes.c_void_p, - ctypes.c_void_p] - - self.BN_mod_inverse = self._lib.BN_mod_inverse - self.BN_mod_inverse.restype = ctypes.c_void_p - self.BN_mod_inverse.argtypes = [ctypes.c_void_p, ctypes.c_void_p, - ctypes.c_void_p, - ctypes.c_void_p] - - self.BN_cmp = self._lib.BN_cmp - self.BN_cmp.restype = ctypes.c_int - self.BN_cmp.argtypes = [ctypes.c_void_p, ctypes.c_void_p] - - self.BN_bn2bin = self._lib.BN_bn2bin - self.BN_bn2bin.restype = ctypes.c_int - self.BN_bn2bin.argtypes = [ctypes.c_void_p, ctypes.c_void_p] - - self.BN_bin2bn = self._lib.BN_bin2bn - self.BN_bin2bn.restype = ctypes.c_void_p - self.BN_bin2bn.argtypes = [ctypes.c_void_p, ctypes.c_int, - ctypes.c_void_p] - - self.EC_KEY_new_by_curve_name = self._lib.EC_KEY_new_by_curve_name - self.EC_KEY_new_by_curve_name.restype = ctypes.c_void_p - self.EC_KEY_new_by_curve_name.argtypes = [ctypes.c_int] - - self.EC_KEY_get0_group = self._lib.EC_KEY_get0_group - self.EC_KEY_get0_group.restype = ctypes.c_void_p - self.EC_KEY_get0_group.argtypes = [ctypes.c_void_p] - - self.EC_KEY_set_private_key = self._lib.EC_KEY_set_private_key - self.EC_KEY_set_private_key.restype = ctypes.c_int - self.EC_KEY_set_private_key.argtypes = [ctypes.c_void_p, - ctypes.c_void_p] - - self.EC_KEY_set_public_key = self._lib.EC_KEY_set_public_key - self.EC_KEY_set_public_key.restype = ctypes.c_int - self.EC_KEY_set_public_key.argtypes = [ctypes.c_void_p, - ctypes.c_void_p] - - self.EC_POINT_set_compressed_coordinates_GFp = self._lib.EC_POINT_set_compressed_coordinates_GFp - self.EC_POINT_set_compressed_coordinates_GFp.restype = ctypes.c_int - self.EC_POINT_set_compressed_coordinates_GFp.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p] - - self.EC_POINT_new = self._lib.EC_POINT_new - self.EC_POINT_new.restype = ctypes.c_void_p - self.EC_POINT_new.argtypes = [ctypes.c_void_p] - - self.EC_POINT_free = self._lib.EC_POINT_free - self.EC_POINT_free.restype = None - self.EC_POINT_free.argtypes = [ctypes.c_void_p] - - self.EC_GROUP_get_order = self._lib.EC_GROUP_get_order - self.EC_GROUP_get_order.restype = ctypes.c_void_p - self.EC_GROUP_get_order.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p] - - self.EC_GROUP_get_degree = self._lib.EC_GROUP_get_degree - self.EC_GROUP_get_degree.restype = ctypes.c_void_p - self.EC_GROUP_get_degree.argtypes = [ctypes.c_void_p] - - self.EC_GROUP_get_curve_GFp = self._lib.EC_GROUP_get_curve_GFp - self.EC_GROUP_get_curve_GFp.restype = ctypes.c_void_p - self.EC_GROUP_get_curve_GFp.argtypes = [ctypes.c_void_p, - ctypes.c_void_p, - ctypes.c_void_p, - ctypes.c_void_p, - ctypes.c_void_p] - - self.EC_POINT_mul = self._lib.EC_POINT_mul - self.EC_POINT_mul.restype = ctypes.c_int - self.EC_POINT_mul.argtypes = [ctypes.c_void_p, ctypes.c_void_p, - ctypes.c_void_p, ctypes.c_void_p, - ctypes.c_void_p, ctypes.c_void_p] - - self.EC_KEY_set_private_key = self._lib.EC_KEY_set_private_key - self.EC_KEY_set_private_key.restype = ctypes.c_int - self.EC_KEY_set_private_key.argtypes = [ctypes.c_void_p, - ctypes.c_void_p] - - self.EC_KEY_set_conv_form = self._lib.EC_KEY_set_conv_form - self.EC_KEY_set_conv_form.restype = None - self.EC_KEY_set_conv_form.argtypes = [ctypes.c_void_p, - ctypes.c_int] - - self.BN_CTX_new = self._lib.BN_CTX_new - self._lib.BN_CTX_new.restype = ctypes.c_void_p - self._lib.BN_CTX_new.argtypes = [] - - self.BN_CTX_start = self._lib.BN_CTX_start - self._lib.BN_CTX_start.restype = ctypes.c_void_p - self._lib.BN_CTX_start.argtypes = [ctypes.c_void_p] - - self.BN_CTX_get = self._lib.BN_CTX_get - self._lib.BN_CTX_get.restype = ctypes.c_void_p - self._lib.BN_CTX_get.argtypes = [ctypes.c_void_p] - - self.ECDSA_sign = self._lib.ECDSA_sign - self.ECDSA_sign.restype = ctypes.c_int - self.ECDSA_sign.argtypes = [ctypes.c_int, ctypes.c_void_p, - ctypes.c_int, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p] - - self.ECDSA_verify = self._lib.ECDSA_verify - self.ECDSA_verify.restype = ctypes.c_int - self.ECDSA_verify.argtypes = [ctypes.c_int, ctypes.c_void_p, - ctypes.c_int, ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p] - - self.i2o_ECPublicKey = self._lib.i2o_ECPublicKey - self.i2o_ECPublicKey.restype = ctypes.c_void_p - self.i2o_ECPublicKey.argtypes = [ctypes.c_void_p, ctypes.c_void_p] - - self.BN_CTX_free = self._lib.BN_CTX_free - self.BN_CTX_free.restype = None - self.BN_CTX_free.argtypes = [ctypes.c_void_p] - - self.EC_POINT_free = self._lib.EC_POINT_free - self.EC_POINT_free.restype = None - self.EC_POINT_free.argtypes = [ctypes.c_void_p] - -ssl = None - -def openLibrary(): - global ssl - import util.SslPatch - ssl = _OpenSSL(util.SslPatch.getLibraryPath()) - logging.debug("opensslVerify loaded: %s", ssl._lib) - -if __name__ == "__main__": - ssl = _OpenSSL(sys.argv[1]) -else: - openLibrary() - -openssl_version = "%.9X" % ssl._lib.SSLeay() - -NID_secp256k1 = 714 - - -def check_result(val, func, args): - if val == 0: - raise ValueError - else: - return ctypes.c_void_p(val) - -ssl.EC_KEY_new_by_curve_name.restype = ctypes.c_void_p -ssl.EC_KEY_new_by_curve_name.errcheck = check_result - -POINT_CONVERSION_COMPRESSED = 2 -POINT_CONVERSION_UNCOMPRESSED = 4 - -__b58chars = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz' -__b58base = len(__b58chars) - - -def b58encode(v): - """ encode v, which is a string of bytes, to base58. - """ - - long_value = 0L - for (i, c) in enumerate(v[::-1]): - long_value += (256 ** i) * ord(c) - - result = '' - while long_value >= __b58base: - div, mod = divmod(long_value, __b58base) - result = __b58chars[mod] + result - long_value = div - result = __b58chars[long_value] + result - - # Bitcoin does a little leading-zero-compression: - # leading 0-bytes in the input become leading-1s - nPad = 0 - for c in v: - if c == '\0': - nPad += 1 - else: - break - - return (__b58chars[0] * nPad) + result - - -def hash_160(public_key): - md = hashlib.new('ripemd160') - md.update(hashlib.sha256(public_key).digest()) - return md.digest() - - -def hash_160_to_bc_address(h160): - vh160 = chr(addrtype) + h160 - h = Hash(vh160) - addr = vh160 + h[0:4] - return b58encode(addr) - - -def public_key_to_bc_address(public_key): - h160 = hash_160(public_key) - return hash_160_to_bc_address(h160) - - -def encode(val, base, minlen=0): - base, minlen = int(base), int(minlen) - code_string = ''.join([chr(x) for x in range(256)]) - result = "" - while val > 0: - result = code_string[val % base] + result - val //= base - return code_string[0] * max(minlen - len(result), 0) + result - - -def num_to_var_int(x): - x = int(x) - if x < 253: - return chr(x) - elif x < 65536: - return chr(253) + encode(x, 256, 2)[::-1] - elif x < 4294967296: - return chr(254) + encode(x, 256, 4)[::-1] - else: - return chr(255) + encode(x, 256, 8)[::-1] - - -def msg_magic(message): - return "\x18Bitcoin Signed Message:\n" + num_to_var_int(len(message)) + message - - -def get_address(eckey): - size = ssl.i2o_ECPublicKey(eckey, 0) - mb = ctypes.create_string_buffer(size) - ssl.i2o_ECPublicKey(eckey, ctypes.byref(ctypes.pointer(mb))) - return public_key_to_bc_address(mb.raw) - - -def Hash(data): - return hashlib.sha256(hashlib.sha256(data).digest()).digest() - - -def bx(bn, size=32): - b = ctypes.create_string_buffer(size) - ssl.BN_bn2bin(bn, b) - return b.raw.encode('hex') - - -def verify_message(address, signature, message): - pkey = ssl.EC_KEY_new_by_curve_name(NID_secp256k1) - eckey = SetCompactSignature(pkey, Hash(msg_magic(message)), signature) - addr = get_address(eckey) - return (address == addr) - - -def SetCompactSignature(pkey, hash, signature): - sig = base64.b64decode(signature) - if len(sig) != 65: - raise Exception("Wrong encoding") - nV = ord(sig[0]) - if nV < 27 or nV >= 35: - return False - if nV >= 31: - ssl.EC_KEY_set_conv_form(pkey, POINT_CONVERSION_COMPRESSED) - nV -= 4 - r = ssl.BN_bin2bn(sig[1:33], 32, None) - s = ssl.BN_bin2bn(sig[33:], 32, None) - eckey = ECDSA_SIG_recover_key_GFp(pkey, r, s, hash, len(hash), nV - 27, - False) - return eckey - - -def ECDSA_SIG_recover_key_GFp(eckey, r, s, msg, msglen, recid, check): - n = 0 - i = recid / 2 - ctx = R = O = Q = None - - try: - group = ssl.EC_KEY_get0_group(eckey) - ctx = ssl.BN_CTX_new() - ssl.BN_CTX_start(ctx) - order = ssl.BN_CTX_get(ctx) - ssl.EC_GROUP_get_order(group, order, ctx) - x = ssl.BN_CTX_get(ctx) - ssl.BN_copy(x, order) - ssl.BN_mul_word(x, i) - ssl.BN_add(x, x, r) - field = ssl.BN_CTX_get(ctx) - ssl.EC_GROUP_get_curve_GFp(group, field, None, None, ctx) - - if (ssl.BN_cmp(x, field) >= 0): - return False - - R = ssl.EC_POINT_new(group) - ssl.EC_POINT_set_compressed_coordinates_GFp(group, R, x, recid % 2, ctx) - - if check: - O = ssl.EC_POINT_new(group) - ssl.EC_POINT_mul(group, O, None, R, order, ctx) - if ssl.EC_POINT_is_at_infinity(group, O): - return False - - Q = ssl.EC_POINT_new(group) - n = ssl.EC_GROUP_get_degree(group) - e = ssl.BN_CTX_get(ctx) - ssl.BN_bin2bn(msg, msglen, e) - if 8 * msglen > n: - ssl.BN_rshift(e, e, 8 - (n & 7)) - - zero = ssl.BN_CTX_get(ctx) - ssl.BN_set_word(zero, 0) - ssl.BN_mod_sub(e, zero, e, order, ctx) - rr = ssl.BN_CTX_get(ctx) - ssl.BN_mod_inverse(rr, r, order, ctx) - sor = ssl.BN_CTX_get(ctx) - ssl.BN_mod_mul(sor, s, rr, order, ctx) - eor = ssl.BN_CTX_get(ctx) - ssl.BN_mod_mul(eor, e, rr, order, ctx) - ssl.EC_POINT_mul(group, Q, eor, R, sor, ctx) - ssl.EC_KEY_set_public_key(eckey, Q) - return eckey - finally: - if ctx: - ssl.BN_CTX_free(ctx) - if R: - ssl.EC_POINT_free(R) - if O: - ssl.EC_POINT_free(O) - if Q: - ssl.EC_POINT_free(Q) - - -def closeLibrary(): - handle = ssl._lib._handle - if "FreeLibrary" in dir(_ctypes): - _ctypes.FreeLibrary(handle) - _ctypes.FreeLibrary(handle) - print "OpenSSL closed, handle:", handle - else: - _ctypes.dlclose(handle) - _ctypes.dlclose(handle) - print "OpenSSL dlclosed, handle:", handle - - -def getMessagePubkey(message, sig): - pkey = ssl.EC_KEY_new_by_curve_name(NID_secp256k1) - if type(pkey) is not int and not pkey.value: - raise Exception( - "OpenSSL %s (%s) EC_KEY_new_by_curve_name failed: %s, probably your OpenSSL lib does not support secp256k1 elliptic curve. Please check: https://github.com/HelloZeroNet/ZeroNet/issues/132" % - (openssl_version, ssl._lib._name, pkey.value) - ) - eckey = SetCompactSignature(pkey, Hash(msg_magic(message)), sig) - size = ssl.i2o_ECPublicKey(eckey, 0) - mb = ctypes.create_string_buffer(size) - ssl.i2o_ECPublicKey(eckey, ctypes.byref(ctypes.pointer(mb))) - pub = mb.raw - """ - if time.time() - ssl.time_opened > 60 * 5: # Reopen every 5 min - logging.debug("Reopening OpenSSL...") - closeLibrary() - openLibrary() - """ - return pub - - -def test(): - sign = "HGbib2kv9gm9IJjDt1FXbXFczZi35u0rZR3iPUIt5GglDDCeIQ7v8eYXVNIaLoJRI4URGZrhwmsYQ9aVtRTnTfQ=" - pubkey = "044827c756561b8ef6b28b5e53a000805adbf4938ab82e1c2b7f7ea16a0d6face9a509a0a13e794d742210b00581f3e249ebcc705240af2540ea19591091ac1d41" - assert getMessagePubkey("hello", sign).encode("hex") == pubkey - -test() # Make sure it working right - -if __name__ == "__main__": - import time - import os - import sys - sys.path.append("../pybitcointools") - import bitcoin as btctools - print "OpenSSL version %s" % openssl_version - print ssl._lib - priv = "5JsunC55XGVqFQj5kPGK4MWgTL26jKbnPhjnmchSNPo75XXCwtk" - address = "1N2XWu5soeppX2qUjvrf81rpdbShKJrjTr" - sign = btctools.ecdsa_sign("hello", priv) # HGbib2kv9gm9IJjDt1FXbXFczZi35u0rZR3iPUIt5GglDDCeIQ7v8eYXVNIaLoJRI4URGZrhwmsYQ9aVtRTnTfQ= - - s = time.time() - for i in range(1000): - pubkey = getMessagePubkey("hello", sign) - verified = btctools.pubkey_to_address(pubkey) == address - print "1000x Verified", verified, time.time() - s diff --git a/src/lib/opensslVerify/ssleay32.dll b/src/lib/opensslVerify/ssleay32.dll deleted file mode 100644 index 2ebf965ddd49e2980df52e4c5be9114b9159159f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 337408 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�+)2HP7euNYjR4n8_Op=vcaazilx6 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�rm`zOQ>fMS^%ekaEF{8*IACg?K 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�<qxkR#A>p#%w zBG6O;wD*@pF4j64X~%1vb}XbAty;n-j&u9uEAQ%nVrS6)E?S{W?T$*4*oP3&+4f~> zU<3*zozJXaY`<6yYRy@V|M>?rw4$>T5~eexcWT6x;6BZIKpi;winlLHs3Okml-vF> zSViow3pZ3AwwM`?f283!*Y6I4_CpS5QhL}J0&`yHw;8QL7Sbl~(6-741C#?7leI#o z>aJ(d__fgTT5HZy<Q`)|TXrmH(^w!6i7fj#QBB#XCPg8!ub`g!3=s`h#SnP*N?K~J zE>m5g`V$~CvuRvuuT<K<FV(prR=rJuLo9p$Ujn`x{pYi@?eU@WbL&JXw5t=q73}*u zMbF@CrnSH?AGGs}X5o*>uc1P=J8aE*tSwFaR@;AsHvQ5wC-Ie9`^H-g4{(tIm0Jw& zAikNDiD|4VKR(9`>&#xr6xu!_W-N(R*V-|YtC$|%XlR)jNi^#ChjEcmcZj$eL<K!> z3!*J~u(GRhB-y87xBj|GCDCyJoVg#bn(5@RzQF%7tgP-vNflXHvUb~`lD0Y}IhO@+ zVlR*w-=U$E@e8rg<PT_owY|5iUud={Uzl2{%yE%%g|Fm~CdT#!YX<UX2{}rke?`=q zyST9=9WM$*t(~1DOdc{TVvC~82>Gutedj%dx*yH^m86;_u>0V<i2e3xw}aVlaJ-HN zX)HloWPu2zRwob6)rB)9<gjlrYT^_#Q*r!nZ9}{YZS{{>SC)af?#F)ZR$|`L@WSdG z#|ugs6DOr-Rj5;N|4^y%P(gDAa$uscbs%=EFSorzd0p-O+}KD~B(mE3R5%{7e=!N@ z&Xaq4o+JPSifgezE)z1+VOF@8pr@xzG`Cpeyl}<h^sK`4wBqJN_fQkia;~@TETp+g zJ@5P&6D$--rdcJr**VZwP+ZX#EUsuha+@FIM_2nE=d8nVq@)TU`@RrhI;P2K+|!Q# zwzBflL~-&>;~HQ;7cS%Itv!G0X^Fh{#onn`d%4}EB4_H1oKTB&Y$y99lifKFZ7F}z zzsMhU^9P*#@kqx=0PIoIS?^hwmzO2-k~Y^i8~1W2RqC**qv97iskFvvy=T^km9pYv zDZTiXn-m+CC2;H}s2Ou<eB>4?8&_qup%tb~Pi84Hu!x4tv(|U=4ao}YYpbofVG<Tp ze_Vu%^;mDV?+m&8)n;QdE-AR!-oHXEIG0->cAK|=^$xIg&(AP!@1$rASbvERtFv!$ zJ{-*i!ROACX>``0ZVhdG3`Dq{uj0q%cD~LZdB?CT*)g2Ze|3T0SteYAeOJdt=69m` zon(G5HoupcUu|i38NTo8_@sH4$wybmWb-@C{8pLYIp#NFem`e^uQR_ln%|qu@6G1- z7W2Ep{N8GQqxwY(b&UY=Q9OA(r}Gr@T);Dl=MkPy@s#ph&Qr;AB~OHhGeBdO@_d0O z#&aW2oad`NO+34Ju-hAhfzg<+@!Z9O-RYPg@!ZR^lSlA9XJ`L;voB}o`26mBZeQ4t zq5Zf0Wdp}#U(Ozzmwg>)UdHn~Ascjde&5?^r=L-9=2`vHjrIH-tA-8cdK|-y6~Bgd zmzKXDA3h`5nUCLJcAA&F4ew^6ANq}z_)P!Gu~;&5k61(MliZq=Up~{n;&0hy{JtWj zk_MeoJkPP5W||Oa-hUk|pBdsfskXe<6@HGV9a%Y63?15CT>f5s%uJzhY{lDB`$^0` zIZF0~6BRi*39TO%6W-@k35R-fb7Yo3n!aITysn{8SMrFLi>PzxEKKo!Zbh_CTP)S5 z*enxru|~bl!<xM+s_NLoUxsE=TQ~Vgv|ckGoI+?8u;VVUXnx#at{ZO)t$Ur2rLHi< zLYmQ~>?(g~!#IK_znt-HoqWVfczo{=k;fA@;KrV)%3<~{<*00dKh&bt7KYRE{kW}J zAWQv{YOO8iSBG|wG9#xG)aO72(+<shl?!!Qe)i-jYm*i|@C0l7%a9wPjXzc@`~|j6 zXdlux$9Or$08Kgo3Iejft={nkiya(iM?{SLNWFc-O38qr51{~-Iq?axr=%q909fo1 z-s~+mn*=QDHzXJ2DDMOZ={%up2wPnvRKtQ;k?hJx@Z^`z#s%72%tZ+-PL=kxDMjIr zGJ9$Qt|2~v3qs77$`<=qmdp4Y9|d)O>nfcbd3NRLq1~TpDF3AVSHN-yR&aQPJLq#7 zQZsUB`uthR?)>tr{VSf9#f8H)eXM9+w4}#P>RO@rgf%Mdukdy1KW1k4--zI)iI8>1 z!aj%N`B8tW+Hc@w85{ikmWSNKsFuHH-VNTtD~O6uo*Z}ExcG(K&wSfCh{#1hH6n68 zf08H9i;tczGrRck>9YBZ%h1CVz#XEMq?p0u@$%34f$aPnPz7_|okNB6g<%M4=a#pq zjkhawbj<|cY=+7>X@4E_l(RW=M9|CD9KRK+FqMrNPpzG%Elsu0G4093CjOAM(4QKb z&buP*KMKc%Cm-R4C-E)g45UrP0u8B>)M9@s5=_m_Ge~>q_y>7EHSJfR)BrH&>BIHn ztO9Lq=2?4oQW?e8M4G$RYwU{+-eC-F+&U`p|1Q7!q5T&vZyX$uzvCoKngs^Tj+;jg z`d0f)@9p(^5<@y{MNRKL#d0H;4=W${<mnm@=e}X({O9|4O{V?^X<j#F>^aN_>!P97 zHq~y<G;6UxeQWU0kW<#1RfmT3T3cRI_>5Im(D*iM;nMV-epLS&REKKg6iM^E<;)%0 z+Z5h5idSo^lcdwH$=z{=Y65*b6=)rr_&77RNTZKA=&8k0s){DQ(>-TO9%!U)tL&aL zm*PAu3E4*%C>C?1C0(&D&EpS-%%!9OD2Fz;{7dS|d5F<DQ&2@@x5)myG!FYRN|bKN zmb`r&MF3vMTZTV9+bn^nm}l5yN%G>Gzbz<2b1iK2N9-%VEO24_x<*!4d&lL!?Hgm% z7UQ*nOS!@>A)3EO2^g090UEaIms$_XmE^<VgfHEKdi2&p`+1Z#%KNFOgf0@Uw-05% zEBGE(Z(neyiH9huoyuMIfFyC^!k9#(sb=iwdON`nHBH1!O%XJjcz|SA*#oS@c;e&g z?UyGQP~N*Y5s)&$)|@HRJ?EGu$f9-C@q(o73$+|z{&4X>&X(l;5(g3p>si8IYhk#q zu5m<l_ndt2@Yw%uh^lph&3OT$>lde%=UeL|kUuqNO3!IPneL}np)I4y9cuCMdvTb; zrfV@WwDB@Bg?6=Fw@Wf3UBI9E)J-M!<Kwjq+<S(8%l_?@IrbVXe=oE-?iA8(N)Q|x z)8KwnWxc&+k}DNLEi*~i^IZxf9$Y*<TX;91FLJ^81@3&3)!W^a2Kme1Nt{XL3ZeIx z6~G=|q390?@jSPx&6!fdOX{XdrWOTEjDbmqP*|w-5<b*GJJdk1y*X=WJ>QVJvseKz z`I8N)wj#aPFKtMD=K|h(ehhu=9rF12meA38944M_ow}PuMpY6kM6am#1bo|*hYYFj z-nf+zKzQsIPgfn@`HDlOfZ!|uPT5U2VDz%3f@Egz_0_`W{YQb7S~!IY^sECE<y0ty z&zt$A@tiAnxe&sinDKr^P^BhH>+O}Mh@IaYP=wCoSQ{q^I(I6bFG-gh5wJN1d?D~y zjn1P86G{=9U};wEIJ&<gnA&kO)q8)x3SpY|Es2e?d*`djubkN5mWZ`HiHV4N$gP4N zRBzUrD#>(WW?@eJ)7Xn#kEGCwp8~Bb3w@nUuLgXbp<QS=eqZPNFP-sh^B+9O%;p0g zKfUn4y0I=&*9ujTT19ZZz3nvp-gD!C`i-D|AfHXAQ`*+I4ufLLbMfn~jh#Yvhq`t= z_rw8zqDD2_Y0y{@KC$1g(46?R6Z;DjpLxH^A><`&8*K$q`xB<PJ8vIQ-1nU3xY<SP zRn=$V;?z%--bGn)J%{<Ow_nfK@6LfuzQk!jr(-mc)MX-7^6P>&XK~pMLF0J5-LS<e z+Vlb4t41o)Z&e8mri6oc3`o&S<@ekp)C}+7$vY7ud8a}EuMVcAhlutNa-1~yLD|?( zqfkpYi^3|e7<mj3lYzo|`>C`0y6kC$_1LC=EXG{Jno-bv;2~1iH2N7gMBjzF*1@{6 zAon1_k;V!~lkItkJoWa!b1Rxw0!*E*0@eTwzve(KySIsqY?9GU?@~#z{pawbda(Yt zP`wZZO&w??`RnZm#u&Mvo}~Ix1ykQjLHi#&mil$Qo%i(t*yubC`HxbL=%rze^6nat z;`>gDh@0XMUP_=hwi|}pC_<*%r0+UQaMs*_sXF>ksAVx(W5>uC6a0F6FQZ^zJ!TV0 z9twYjND5~GkEuc9xhB6^-P6WYV@|z2<~&t4(9_`UFJ_VzDXy-Gy(;JeP;cMI^?8Dx zCo27kiU8U}jA%5DHgaT^D5{#C?giGu#of&j3gLefm`h;lZi%nVnCYGhIC8{v&$SYv z7XmM}ya?eMj*pO)LNANaw1_o<UW}60{GmtMO6xhMT)(GK<xWc!+dug?<bWh-%augM z1T<>jP9PN$jl2SU+q8OndbE$-3JDV<+*Fy`VYp7+P5gmG*N7GWGz!O~&4ws~@fK0+ zOkU6j;P(Vr8(;Gn8idbbIA2_mnMkvh-J1{lB*O1+^pHe;Xt`{mFR^#Ax>_OWO_y8* zSrQAWa$e$!vIlIE$4}1=vUcScR4+y%QJb|tk0H%D)@@VD<IK~fbr#jeyoF$vs-NOg zD|OqH6ySQ!$K;~k{_bh|{YA5>NAfW<YEb9Ir)l%l1NuzeRBVsqIFVBq?_%Sw4Z?NL zDLne0-Z2Q?VYLj3n&Si^*yJM&W5ps~{nE*u4LD`i`@*G@pRKpvVYCzf+rJoPdQQ*d z)W@0=Zp51DeiT@zIa=>iDC9;{xKo?~?mbdyV!Ozj)!JNL=BLYzE(6IBQ`y~EsWdT* zoR01TYxL<pw>#-G^J17GWP$bkfwLfR#ODRepDB*%Jd%^QMsIFe)5+Udtj_R96!ql6 zLbuf9FEx(~_bx1e7{O>Prx1c0dSvft3U_f9>(T%6j;Xz$H4^^*jAtY7zv21p1Ku%s z%Nx_O(>rDl&+9yQ{meUNFAsk6#=OpR0nc2X_Fpg`f|b0Z`~T(S`1(J1^ZN&Vj?T>; z{5@pI;P0VB2Y&|wgTIFj8~i<d_~7pmBL;te{3{q795Qm`;O|kR27iY_gTKS!{`p16 zwW9{jUpkHt{vJ4=iJ;#1&1X!$LGu~q{O9?M$uyumdMf%qLeJW!c>?qNde$QR_(JK8 zePT4TgkISvbZ-a}$^Ur8D~Vk|xN}T7wNK$?t1+v*T?UAIDqu<<9W%N#H5D_B?k4qb z<>TDva?TJ{RdB_K?iy+CRq)Ew8!y#imc&Hy8yD;vE=Oxu+67DND<YaU*@vX(0CKN} z4y$Tuw*g58Gb<%+Uxl3cOatl7b;5N>f_yudPfckiYtF1m4aZ=J2-}wvF=$egSf(Bl zwzpi<KdE7YVwpRtVg7)1QkgU39dFlGc5*X>@JdeDIMbSC1yS4AWF&w)rHR__taHCB zkZ>%%*0z}Mvir@%1XpJ>N0<Qb_D#?wWrFEbRuyv-$PM)Vxk)9u*~R~0X*|^O9_^>O z$)EVk-ihWWHC%oSnYg8%N>CZiO}0r}#cF0*zSU+V&VngD-$J0cbCd6r+wrJ#ahSrU zze@Jd#uhS#c5N-$uer%L|J=zcXzIoi`$ETXPGiFNNfEUdg9-R=XFNZNgyW3;=FO(O zrDerfjxJbCv#JixFj&Z&E@+;j7pp3dEvD3sm7Gp(83IBab$-U69Y|G$d)@`FsC^f% zMg-X}$WwsK+2#0IKsXA7vimEbSA0C5ukZ<|9{DQaQ(UUg2l%w}FgvzR3cx#*619Id zO!Qi6<p5R+eDal7a!Zt<YKrpQK_1y#xi`fz9hjb-4or#K^*aV2^h4lT+a`g8qi$;^ z(0rgmu%ZUmrNA;OY}FJK3V7YK5w$yy3;?rKXn}Ra!P-8r>y)@vRQ?Q6Jw5cJsC~^# z1F~F5I61C$>nUs4sC~xH0V#$GsBJUJqw%dasY<G^yz#vHR`dQQ<uv?&nHSY|=dD#! zdhRf=*0BW=wSW412cl`%Uw}Dfnw(Um)}*U9>27gLHtEtX0q<0q6Q2`ll79#{AK2PY zmkB2C87A+iA01FewNu7DZoU2rGt=S;I?bCwQ-RnIh>9sbYCl;?<zSAW+IE6UrKX!Z zX#~*R>431dN{>w4X*5Wpn>O*u62&Oj6Twf_W;lP@rfe2R!}aah3tKY-M$(yvxSwp< z;4rq58Ul@e^-Urq#(v4XgrJ^j{V10^C@b5H>#RtTRZ&<IiTz9!5Oz`fb2G)6(kQ7w zR3#uboeq;M{79^R5v{X_2v4eAeV6zXo}BpQsRdJ#0a+%eVt(;#H!SG(hH>h2M(KRT zp+L{QL;}W{9vyW9ze!-!zT(~i9P?{1r}S(JHULTS#rp=N__>p!!i7;Sz*S3Q$M}vZ zThy6a*g3PDdYOh<OQxv3TvB1d4K52dzxsWWC-?iPi0~gONXDsr${d~*5yH|cO9$x5 z5kyjJhLourxh++iSvcDJ0?ls?IbSOBbZN*^s7VrP)jXoR$}ccwH%?2G*lQLukVu5* zL+zH|5p9&^dV4+*Zet!6^tID8azyRmygq$*C*c^)-n-JYu{!2<LL7|2HB4o^i>J^Y zETrC8nQ9X=rP>bin`>U@22yibNe#1@iZh|q+yaeg7eTw!jW@U|IDS)%3QkLv-8)D# zzTef1tBi=p7NcGjLAr};3c<tGjMq-#@VYc(_A$_msdyCfW;NrrQ?&a>&GLGFh}ARx zh(^&!x<$!<A_wcqsJ+S54wrMP!u>`)zOmRoaf_+5m~og>VejI_*_s#L)8QTCT|CYD zC_8Z}jAkb;RRh%JDC%+)ec33;-++-RH4~GC0p?&^uXgF5s0AO5Q_dP%)s)Q4Sct^2 zX`|VfFq*E+AX(+xvPfC-GUvwrM1YCs9FQBi!il6^5P_cLGg4sldlwWekvbo-Z;C3f zti6I#Y3pM-qLicJcWd1c1$*nMJ>D^6_Ik&x;MvWS;koi*@0c|_ck^U;#y;X5vykUD zo{Jv!jv2SlJLVXF-{FZfVtTycLH}}c^y%|u1O5K&oAWm}ckuU+A%nk%4jud*;NQTI zVZ#P~g~P*#5B?r8V(@n`IQaYHUn55j4jDCS@OLQGr+S%}j^k2F`@=dS;X&U6_1D9S zGVAg2Gfan#=M7R|l@$ec5XcUbsUN<~g#z{V`G0gr%S6udu4t@T46#ZKqkDzy$C%`p zB>}mb8%bv|!R(sbXI?8l2-;`Tol+Z0m3WMKt<dXG^Qz?z`|mJJYQtQ;zHMG3ye9Ei z#o?h1(n=+8tj&VZy<xGw`PaQ+sr$xW<gDaA0rkW$=FSfDQp9Z@=H(1_1SYV8l)7zc z-_nM2ZfkiLIfqr-x4HbfK_EyC3tyKF5-=yIIvXUgPSEAqAmQr-O>~0T|3`My2{1$N z-}E*1SDNOsOi2!II3TrX=f`H?LhNax99J6p2}$$6))CX6@O6EXFo+%Di}<>B+Gqeg zAysWZ<|Z2mZ}$a)cXt+^lW^O=geU%q*xUZ#Hg`N=%)W8elP!<^z5p^68Qj)Efw}rg zVQo8Cp}7b3g&bzsT)KxA^DvixiZDcR^8rQ5cIRSFM$9+jDPkXhMp64Rvu%|}rL><Y zNWD#+%2u^B*`b%5m7jGifTH#rwaUucIT9stp$WY-YF9>GfVTjUnT;fOv$*5dAu01$ zVS5BBxNPOQvA>E*4Fi|zZ5lsFyzehG5>Ivv*$O-MqAMA_<T@l6=^YnlBgV|&*h&u9 z^p4BZ#tc+rL<lr`ay?D^FN!tc3!(YgISamU3Vpjrv!fwsr~yob0v%s$XlQu9Xa9#e z)`9)@*}em*DnDB&#yFEEHT8!+w}B92XCZ$Ixu2xQ&?3roj~ali$DX`F6~<V0Z6PHG zbw==#s6Bn2ONPdXsuJ!{+AOb#W55*SD$#hsG^^V2s?JI5`Up0ep37BevO5?}t*z{? znoCxXZA}tH9Mw7upqe(0$6peAu8ikhhC$UUF<Pvw?Pui~=^qs-zmBU_pu?$0-MGN? z2gBlD;GNN5ImF_EP;L8M0Ale&+R9q5?#Ou*SH6g+nf3NVEN~$%V1x@Bh<lZ^Kj+W- zB@+-AE@eFkh&A@N|0jq~T;<?c#fs8C-lMkshz!WNd>};D>)2ai|H3$<3_v4SUS9vo zsa~6>cR=mNDrY}x{w!R{fg1Zg@vTVV^v>7ysl>uJV!xozg-fgLiwu4R-E)?Ty31XE zv(M9)RdOB>q&OWF<qafjs{qtmcZrg9)(#aW!wFnS>Wy7xYwKd(Ft}425M_>k+C>iT zt{{)ti#{j11dT)<2`1gmev*q7oqoxBb3`2B^h=f)!JUoF)Or;o^3hpRcd8^%OqsF> zO?_KvDeZjr#qSkzigqwJ5b~E@lQJ||Qg4?)Pz0sB?Ae5<AJ;upD0FWOi_dwMgQM}B z;dM5pM|2O>2DAxI4K;rpxtaa#lb^|sgOu(`j7xSLHZQ?J^6R#x&4-l0&giP!IZH#k zw@R*gw<?ftBl%?cdokyL=D3~kkMm6@%=R6X>DU`yfcB*J!sHeK=M)^y7L1KPhz7c% zGK946P<ha=*%X8TDL=5fMn)HjK-tfP>Do%iY(7<LrSyFv3b6meoBhT&@a@4Xm@Cf= zNhnAB$x=_^oaR;jyQbnvpBpol8BuKtqp=7u-^)yZOCSf|mFk#C89BG8wmJ6H3xag& z@yTgLo^@f25B;8X!;G*I=Fat?27;6SGV)96=q?<81bJr63<P16lXob80-m*0eVLIe zRZANzGjKHcv>a@P5W<ojdYiT~xOW<D)sQl65Vb!8xTw9~oHGRIng9|!3&*sg*NjzW zH0c09&dMRq=#|{3)gezbKB3=9z5OL4@%#pW{TtRbqV@&lM%tMmmoV-hN&RSg#$V+t zH^zmQK*L1k<Wt5(<v4%D*)V?qmjK!*G;|BKU|#Oor=qPxn8j4e--vN9i^}{K0sVRY z>{QBxN@|<=8%;aDd~|%dz3+E0$L7}rXS6lEJdn7=xuA|yA0EykPws5KT<pJ$6CYg) z^E+WO(J*21ZDU_}A=wcL<%d`QRhU{c>4EC0?%=VkXDBJ`93?vpuHj@)3FlRG*+#&+ za;Y=Cg0y4_v7E{f{?+ymURQSwTW_h3--Z;&p7f4+mnWC^Gk8|;e4S@6k7wxrzkl8w z-~S<_KX=IB=EL{;<Ri81d7o@AD4Y7yii(w&g?4c(>~j_6M?<ZwD0<`|W?g~xLfZey ziO;iM*fcH2llW3oX>a1X85P8>eX~QpJ4rTlbw{Q&w98)>+LiZ7^2djEGyz~qmjQ8_ z^?cf2Ht_|M|8?bmwJ$$>!0oiSSF0a7@d@Al>B_e5K=NeMn%s^ifcF{mfIAfSb9^oq zuwLYfZmapvq>a`)<Ljt7&e&DwN!8A`X8TjKBD#J2sz9nu$*j6yYU^8ixhkBi0O@RX zd6*wrcPvgP@|(MZU}COH$I|#K9$n}?J2&}wZnA6m@|3T^x(ef@hSWUAfXhY7@s|}v zaRRd-$F5{h6|A<eoM&)Jp1f{#F0LZ3?y8ObgCb*XOd1-e+36}Wu(@O%=VW<4X(w~R zc^-?f0lc}joCO|S=Giiezt-&eDW7#!gmR7NV}tm-fYqj&q~-;!ws*~oQzZ*u=(DgH zPb{u)KBVfT@5s;A2=S9z761rxu5Ny+F5-|S<v=oET(Sg7l&joE9zv#%EiBZf<`&vD zQ{9z|#L!qFX*0T_vjCkcT4PsSsoEoo60>3#5$9C9(in@OXMTD%wVxHB#!kc4@y)<i zYtQEe>3D_7&D{XVF-XUY>58JFeIZFQ!#S&oLiMys=#S<8a}m#03Pzp_p`Ym`ZpZ7c z<y*|q^9tSEv+{b*=BC?z#XCMRE}_tV|ErA6$-PdhaqXkq^4Nb|>RqpZ1v6&1o>=#L zz9*k3dr%=Ob>E@4t>sgKM0nMVaudGd4Q{`1uURqtYb{<ZHVH@T)3*lFYy3ukGH07c zrL1BqgP|ac1gWo2;@wnzN!R<wlP3#T40VhfyY>=+G<xn2t#zJ6#u}1JnrsV9HfumO zl^3;cUR<9%6iDCUw}ZxnZ!HJ;3vbQ0#tKC832$mFAck^0BDD|*UEMwdeqfL({?-wF z<qjL`jOxz#7M*YGyBOi*>JKk<cWqKFv{coAN|oQfRVzJhcsyutyHjuTi%zRAyDPwJ zd}8c1KNIOP*6s|O*lXw;jXBINCe<{Ki`wnR?7X1oX^2{8;BqSntDV);qP=t)KTb0? z|4am5ySQw7CuE7A;X0KVYi-!dH+Mi9W?+dmp=n57<{WFYBC73Ih``FlM00M9{+Acp zlo0B7|D6PfeB-(|mhd@_57hQq&G0;?e!~v=PR%;x>&>t#$kE9*U;C(8Z6mn-g=Dj= z4DtfLzBFS0H@rIF1Wc%Pi{Kcy6*YF)L5g#<6dN{&*TO_gEQHg39TO@@ZPdi9d*c*- zsi7xjj3SczzM*vS&qeLCSYCq!RP6Jy`?Ca$rHPHnn=W1Li5YY?Ex_ezjY>;T-Rsph z{4ZCb=qg9#)&86NuSmYC<3Qn_)kxe1kSJ(Kg)M_X$~Z5h=j3_flVB)L?Kp-aeqWc* zAlK-Pn42*%JzQO;fzbOc;jFZ&yDNB0-L0BHl_6e}L6aCvP)6&HY#K2D71o?CJpVP4 zXf7DBjerJiS7|OC+O=Nip4w)6;W2A&G}#$_*br#`nK~-#_hlMVb^g$<ji08}<l{rQ zBPg_Mi%@F2iY(WGh;A~fi8hW*KK@=^Oyod!^=g5xAZaih`KTH_^?;h6LO2o@u^(fo zvkaKj7V&QPMnAv$r!~dz#GItGTw$s$u8-(qytdqXgA-oI%Jt2>+8y{er9rHdt-ajH z8D0F(jY5G<9qKYUi81Dg6v&OJw!cYZN~16pI8*l&Em*93m>P4M_bYXE<2XEqn@U)l zkAjvw(77s8+xN_O{9ItO>89i;YU+%-ujpt^EKtEnD%17gz%v@oy>}w{?)3pkTyK3~ zEzHN!cp$w#$oKND3O;arjJ`UB?}l=7MvY5&Kb!0w&l%|6afz@iPgozxH(3TO2pNGA zt#5(pITMD8ZOvF}-LkmByH%xG)l03t%9CEN-_%|eX|3`%AJ9wctA6IzcpfLu<Yx`+ zR2VhC8d;Z$1njMUF}(vf%R`p4%3u`DAhOV!yVP2{D0yg6YR^T2x7MH9bBSImmQt=5 zt3OMJ1ckj4%_4iAu*LZQuv&`L3sFTL==^^;I~(|@imTyok_8r6*a#7VMvWRZ6{;w- zB?L4`Ok%aLA!I{~1lq^iYov;G7qEqxxJk%mT*PV-TdVfb_Mu-sR(%k)(m;@?_<{Dz z*4kog+nc6VtQMhu<o%yB_ii@SKJWW`(cHav=FH5QnKNh3oH=ub--KDSM24}cy~NJD z>7H@ztzmJV!#?BcBIhj{TG^Yk1@L~^8E|W&zQq+T`o#k4C0#ebp`w*9rAh_kWo~U8 zGg@PvVsW7CM~DjTdjzLmuJ`T`@~+s>#%HYKBfOiNI(V=5B8)lZ3mAq;@NE*j$b0jA zVRygdsb?0`?^dmz?7UY1_m$SQ+;>ouM$K9FAfV{-D+gjXi21A0lHy(zGR$FXsj-=h z^D6seHz;?ztxb#a$R-y?j_nr38#p~%YMw<`@|qr;E&NDxcwj6KEa=Tu(E`u6zlw7! z0mJB044UB%!c`_?oIX)hP?zGl`yPuUqgYO|GMX?z><v{*zg0AcV;gW=E>~Ve2Z|l( zV6E6rIl$rE&12w-89kLR#cuotP!$`x2}#bTuO$8IW1K{gK>affV4QhHBw(_~I7@@r z%&HSxt{gat6$UA*NO_U-xggH@DtYdl#KXy>_2I(Ra6d*o1C{$c$4GWjJ)|(yu`eOY z_#F%8g)U|i^u0G18zX>Z?9!ils8HnrZ`%<3kZ{ABl}Gn7x9G~g1TzS*Yn|+D6>asY z!5rZgLj*F^5ei`l?C66imsJZ_gUKH~CI96-NCpc5254y$C)T}xjFL)}=v9F`WIhQo zDJNJuF)71CnUP|f?w~zzqvqcQm)_X}l+4l%jhI01l(`aH$zUc<%=IbOzZQo`rfK!P zw8*O<5`PT}B2FvB<lx5TlxnAGFe~XUaCN3;VwvC00)6-_Jzfs3j@>wEem63~uvvO4 zZA|5INww92ps&+j<M@Tl(8W4Kv;Rt|$T89q%+kD;*;(4v8E^OuU6b(EjSPq<{%>aJ z^4Uro*~{sUnvjbJHZMYnS~i~^(Ak(?bAt&P*9Oy!PFI|r<#q*sT5icJ=p8;G7iK5q z;{W#vd2|-1|A+b4{S-%zQL#M1*_r?EsTa}@reF82>C(ae%zNPxc8GQ6rL)WJ>`NDv z4WEH;&>5Jic%wi2#_Qd$>+H)!oN)D;2ygZX=@Gr#6uTZfUbeu|IG<qNq@q?Ci<8Ps zK$5YJx1`q>pp&`T&T%)(<P_@+`53B`xlm?Xl<(M0oa_&o_E|u1)_o|C|CZpvYyl%A zC$zQzsO<^P9*=7>&w0nc$%q%9ZFpqC9`Y|rgHeu$7jjd@Rl*Jq&v;q<lWZbC+)RD{ zEvb&ElFn%|A9$CjzJ&3o6FoSOC<m!{`!3e)AqMUxWDf<wQCAL(beDzQW<2AdX0_;k z-BLWmtFr;73bIV=Qde|Pl7U%Gz!nX-;Bt41Q~}||u24SR>$FmoGF$dZxA6|=`{XB- zy6v)s_Lfs1s;IqsiFv;L328BJEsR*SwsWNfREb(r727axaWdW<#0j6A9f)<FM*Pk< zsdmMhS*bDU>*M2M=>yWLVxfMJmj?U+HhC8zr6DEBx?ln+1TGnIm&f~`qcE-&bl1!> zYc9b{MUh$P)Hk(^OQ`(U(4c}-Z2Kg)5z(k7uLh+=9!~E0P2`W=6?^ze4JBmkZui1s zF_=!|bMs2NXN+5TIZL+7kv#wz3H+$^-jP0FxZ*CUWoiQVXjD#4j+I6S87M9^BlgZN zF)GLgP9t!x2o0+Pu;UcxxJiZ6-nhzxt4olW6HVUd2UWMkO*sLev<r>bS365uBKGk8 zDnB(A#~yyJ@&%-|`$b|JICoy<3$f0}fw;Wle(Ang$NiG<Q(W6QDLFcQ<k(o}T?D9| zS>}Eb3uI4ISY~?1V!qHhr`LxjrDD>ot4EuKm$Y3sE-yJAoK9BK5=vZ=ULOu6KgY?; zi<-R8d|Kx&HB?KDl=~=?r|Q~UvrA3RG?pyV!N6(3`_wgrQ0L6P3&WI#`Ey);23QDQ zgN><9EvX9RGt@h^aeRYU>VlSwc2HD8Wh~yg8IbUwBK$EK#J$6a{R!_sD|Eh7QUxrl zQc@S$-WEn-Am53b2>8$nA=69g<n)fe3I>Q}g$NrFc~3!Q4IlBbNmjs;R#59P>BEx| zcn?oXMOiDY3?*kuz}e1Hu`W=(PqmXzcQPtwf)hMQ-8#d@E<v*UB?OV)6Bpg56Zab5 z7#y^8&#fc3Q)tEVlGMy5Z`_ih#!Qx(g_sQ^vCA6x#%qB}9pi|PFD=daBbW|k;A(3) zM=vCpzJ6u_=Zbg>r9Oe6lsXqBMX<xN0d^yY^~03|$>SPnz_0$52K*EoOApV$R?+(` z@i2}i?@YbR0S<HhcgQ0-y8ZfDLVKxmoAi93Vsrgzbmp6df-B4F*iF~LOgKR)UY?|` z11i5!*QQG=zAj{t9G5<C5`(lk+`j<O^m)f7kCDu|7<DUoyIa@EFj%;x;`TOPl2Zlx zbciUEfOak+1B&|+_$p`P5(Y>|^2#T#L$%X!U-bYXW+XZnN5p3Fa3KBkkxbno$z|Km z$YO-3aG2<eI755wm;7-gx%?RR#1YKY#7y1m3N5!`jM&d(V1N2>ajb()PqHgYevbZ* zb)L%?M(Ry{H{1=bK!v>jI!g#y4g$c=T4D+Bp9t<PSi}64U+AF!0pv1-(tWF^7<= z=*FVsx{JyOYa)XS!uUq|Qa|_mfteerSY8(Ev^;^06Tz5^GsaNPtgTXqSSOloRslUc zEB9ej&u_);VwM)`c#WsKRgzGNSzE;r%eKp`t-sLs@6al<w*FGzzb@^y@UqH%So$<M zIPMFNko@Cj6q}z7df{)A*VZT<jC@oO>%2|uA8Roj<4y>}d&SmU!3rI+hWmTrd1}|* z<Ss1t?tSh9_6?uosgqZ%BO!pf^!zQ_G1ehBvmDZ8c9^CW80`PQepqVMc`Bbxe!F_} zKgzNS6H(cmdK6Sc6`Q4tVmCY`u-msur^UA4|2#kLR*7LIU=BE5<^U6GS_Cb&?-n4G zPW5&wF!rcnZ*ru_oai_82$i`(q;ZnkP_gl0u0fK07XR>LpR0GmRe|+-`h8mCI%)vY z?gJe(h^6PjHl=5!?eq?LAHnPgoXm2clD*W0)AJcGvh=ef<`I=6;=NEaSw10Ij!z%q zs*e8w7YHVE#p|q>O4ww1*N!@SqAfMzaX_(6qw)Tmw~FQnm$XRg1<|$&a{4;&(70`j ziMFfrXpfenpbcs-t<a-9v5tq>iL<tMmb_&s@_)#Sys!I`GKGs3soYt1+CdqN5&v9W z=XG||@bba7a$2~*h0iSYJ|hS&FR@ppffsAMQa0J{iGgKPpmrdyikf1}A*PYK4c}Eo zsZ%)L^jj%N)*Cl|k+Pe-uaqiL%D^p<QWwr_e|3<&(nktXXM*^l{JhjDrnXE^)rk$o z2zhX-PNxP}kNvr|<-<sE5;?~@Q;?g}1yv5Q*MOg2c9tE-f1!4C%eo27rm;<T>DS~~ zM=dYy=Zo{fSm##W1-Z*{#q2yw&{0#v6hA9T44j;%RgRrQ3_n0DlBt68y7gLFYXp8` z`u)kNDHV6M(V$EOf6nH8S^v3Y2A!@Fndl;U#}Q6{<*qg261FB<fHDpxEv|RG$3L!I z9xqYJ)Z~v`CF}CMt6<@BCA$h1>>xCw&Cas&(kw0y*dr+|F|f{#${(_6M)%-r_Z-PM z(!yce+k>#bA>k9&{}5E<EP&(m3rRU!dHdHU&ikkU7xixt5V@OGL3CB$az#HzL?P$- zAk?{?&whqXNN!>4<m?TjeTfqZ`YyA{qjBoB_x$E<DRS@cCV_W5GFZZyhDsU@w9|sa z!+D?yQLc(R#e_C`Q~9<m*4(y=B%`m!zk+uvi~jVUS;IzcfiCUhy-s0J^3JotMUTVu z-@}_<xb|~S2k%p1g>+{ROV{#+fopUUl!+xdx8nA#^7}E47ppN)a{OGe5nVTGZYe*l z$9^|dO7x_;r6;qU7Mokh&$@_vvm_p<cI2q*z(nVPpoEs{ftd4O!I!F!cZ&CwfW+IU zYWu4S<BWgGfRD;9vp8>Eyj*-8P4bZ*rj7{gc^Vhy5bCUSYYFm#slkrZDht+qA$6)F zm#gLUyGSgEN~3MLQkHBK7wL(%)>ECoXQ3AW==jhtv)crfSZFcxz!Mza#}eLaDp?lh zngS`JvL11Si8^~^XKtoBGUL#Um%Z1?$9G+nT*}gHit}gy!#Q|~w3cYekGZL7jFzHg zozn+Ix^L93HwrYbCU2X-y(BWp%c&ErOPnhezi^}XIs1YrD#zrpKx**b)TL5%d9%B0 zIz!BgsA{W}ZbkEctf?uEdmq3a%mN(fFNIDSJf>zEq9=P{$Jh)_&2;;nXTKBPVHAT5 z!N7hArQ-r_^Jxti?5gZreVTIt>_G8#MAFioJX-x0O;n^8!YuEttS*bJ9;NPd2Yzbi zBY6lH3$cfG@tjO;34G%&g_jM#QyjTN!nUT}7$m!DKf5@omiL;5CGMkh7=dKv?$``? zZ2Nc#+*oA;H;(V_zL8+lz;YAEAnpyf@+Dg1N(E28?feG;{nf~K!^thsf5B}amZ+@h ze<l5b2HCgAx)>X%Y7#H<eh5cVi5J!4H6|4So6Aw5puv_&>e|m^)vs`0RL&F5>4fVf zrF6nCw2_B8;YJqQv~{)<*4gibcP%fC-U*shq<@Wy!*u+od(*AcL#ekeH=Cu*%UP-Y z*%m9Ew21wfBJXc>G<7M7dsQOcV3Qp|t9Bv)CNa&-pM&3~@FEcbs*k~E;(N+dqX|#e zLyg||EtQa<h=D5Z{tF?wzC4CZh|-%{^0`+XYZS(bxWiiB+&8~kT8qo%<VRLhIftKU zYjOyiwg~CxUUDIBK}PJ5pCN<X9VJA0HDD2}r#i}H{z6|~%8zu&ug#SZ;1P4NT-#k@ z=7$TO<p7}C%s(01FiC)QccuM^E#VRQk?S7c1*6W_xdw&bjScwpBz+lwr5oo**jqdu zaRDKy6kl{_aL%3zpf~%OvJdri3vqtJTpVu6^G1n?Wxc+N&?21p5l%;ia9(wot$(aH zG2q9NzK;|7{Nv8yDo$UAMGCBJ2&Y!3*V1W~>Mv|Z2z=Y$mnXC76DaiYrD5iY1H0*q zaGHTyA5MYiwAN`;|CV}T2fZ>lFwexN6*Q>!f8I>|UFQJesc4QIhr~8YH{4Q8n1@AN zf~x4iKFR^lz37CYC{ex$>-`2RwDvvH^1T$)n|?pSEs_FvZ8Q@-tMbkDWzzAcZo2u! zu74I}=8Q4VrC%NOK;DbLuZc`H^P>e%$bH*dCI^$QpX|IQ%Hj}%QOB`2pky4StIV3| znYzJUM+z_*Ngo(Bd-K}AgeRoVFiXQ1?|Qc&J&?C{Y}=d@2eBd>z};-Z`^srLAo^;j z3*K6zSZ5EfBIV&;`UE?GXjx1FQfsMsKkB(ba1v}x({%GB#cXU_MKP2b2_GZqJ`L^c zI$V%h{E@*bDpa|9{fPr3egA6<r|%6%22BI5D$gYLNCBogf8o<CoL=yk%!PxbOaF1y z#;*zD1-l}J{iCHk#2@yW;+AaUUR#!(O?G}JZE<Y2Eq-@~)F`SQ*`H!W4rf4mRhL)8 zKp&$2B02{8m;Mp@|2sZ!h5i>r3-+a-Rl=A0S1w@ZLTp4fCM;=}5?ZpcMo9Y<OWGxn z_NiIYKBB$i>%)`dDp@b9V^6XWi^JH%HCz+uTE4O?)+GZA6%^O7rgvjM5xYsOCg>5l zXY`*Wk?X2Px1Gn0@uKgL+$Pa1MfK(vC<9KjBc^``QBB@EmLMx%T7$(OSGYfnS~5GH zl5^}>l97Zx07{^FrfQmO4tx??Z-}={VwX|)F8fN!6KMc=4^q}dtGI+vi!8%7PYisj z^YzwOg>=QeY3U;G4Q+eTFzv%%WY&cI#UME4_txrcZ=G}cP;W72%BZqGX1)N6YTqNQ z2|r-T-v;z!$Md`Xct%5E(U!}8rhz)@7DXL4w5cA#nfglV*@186kbr27qMd`Sqjr!p zbDhlJaO3~^rN2x`V*FiKL&N*tXi}&6Hh8HiX!gAICu$Vda5`|1wfo4!+isIL2llRi zV%P-q#oR1H4CR)ludfT?Ve82WQ0%QD42w+TeN?lGnyagG1s#N($SKS$R*s2va1vfF zLHfjypwsC6`D6fm0p`SncOReNZDkf{BLeFwJzE>N*KMBGSEGa6)K;5?Vp|<wWVmxo zBp%dh(^U+@!XI;)r~GB%t-CUpjLs|Acp0p^a$$9Hrn5vazZ=X4j%OKfx+NyPD=Lwb zorpx<ldV>Q&LmSZG&cww`=wAlDtd>H%U$SATp+FBqkDWG9zyt+1B)pX{^M>W&|Oe$ zZrdy`i4wCxHg(;aQY+uP3(81xxlv<-%iWrCopQuXi`$GBL<*jox}XTcD70=-Cv8kb z@?ShNQIv=?WKZ(u*)D{y(RMSf@^V<)y{6)T*y|#b)PZPxkvEb=G;Jxfyd_knBkvI( z^ciyz#t%13tr!>K?m|8;=c9d>Ry3X$+g?ASJD$%^n1h%6jIOf3k#12=*N;#46xjH2 z9Fp$V1W_9>L88d8{uqKcUQ~z`G9g1#yHdH1kDM^2@0MwD*5w><l;OKE(mg)5U2?9= z7u$jtcqypTHy0&2Q3X8e!enl*uzo>$i(s&>D*&q?k$rI!TstdO(G;=mRW?|y7U+N6 zUgrw+ARvp`u;n3GY!&7pOAY$J^4JHtEZg7zfrDsG%!13<a^ij;VGNy5sg;OnE967$ zEV#3+m;)TD{sPQKqz_NL*5BjQwaJ>ds2wixn(}KKxV2U8tNnGRVItT3RqkIsYAMUS zX2ia}{6>*@F2{3vtWy+pnfViit~86-hF=rnJRwUQ8NzXI*@?6*q93e<69CLsnXB_m z@7_`QySzvP)-B!3^6J@oYxLfO;k6VN3^aPPPLlD#w0b?Bz27=PhwjjZ9@b}#)Q0n| zuQL5H#tZQ&eVkFtl8ItjGJa7)0P1~v61?HqEO2yOwaoN#o71Oz!9G8AZu;E`sgKG{ z)N(to*pgIkxse7-P2s%iGs^Y`yCh)9#27TR73hyfWte7zD94x!xIDNc%Ih|k?O_S} zNjFb6mz{jsx|YUpt|FxW5TWQls+3)-{v+18n=sj5h;_;|)!>u_Nm@?xO2FP{WjG5V zI<dDPZ!epwd*|m**tj7>o|$X&*v;u4x$!2!wtInmar)DHLo3d#)4I5&Fuj+MSF#}& zw4Bz^QrzTq9-tMO(+WFZUw0PTG^VH`v}q=W>Qo?xn$hgnCh6NC732R<bA#82XaHkf zx}0TSuM-K-cHSnMRrz}X9XMYkfy3HH7RCpU*Z!3~gk?iC&a{}`u>_6~O3u=g3Fjod z@>8^x*j125SOBvT0Fa%!-|TWXU&;reeeIfzltH?KC;RD6kaUSl9}#?~K1srgjglyq z{$T)Jn(!8#q<N|;f<22Mraa+o3-b9n^`s;+@Qbjv)82*v;2{C{*MhFC3s71XKyC!m z$49EXr_j{{9a=lV4X@HIXC}Ol2JoK&9w_Ce*~3lHpY_kV<y1TVi<*9t2jYy(Lhk`& zJ9zhKX<!WBqrJG1Y-nhqJzpyI+hxSjNK_~i*G_h-CPJta$jeT_-&2B#Ry5b8&PL=a zos=q9Om%+S9j!>n{B~I8H{m-r&1yf*oiaBiXIY~JQ8dRrL)4JP!bp_ZzM*3w2%#fT z%22^@AT0Y<Hf<w`&x(5sh9%BV9d9<tG-!@l<i&{66>-7q*!>i;K`e;}Dw?a^*5d1n z?XZ=m$gz(FjvAG*nPO_{Ap27~UtWD|`fxP1X}J(t&)eym>Zn^&H^8kbmzu3BwQuOo zaS3m;QVhz$$Jx<9ekr3(3ZBR;o;A+skv00Oa`);{Q!xdPu9>YQFqZS|L8=X;0)!RZ zra#hZ(x93wv-s?BnJ-5x`(j<cA$;m?gZl?>HM-7rS$$o<dc@=MBL!ljmYSA+pFNZZ zfOKyc>@tmSyEm`m#njAUDOj+euAXiA4lClC#2j-$xS*!4QLZ(=={JmexN>3V;QHmX zLU9OZeq^MmPUSwDK$`o_lq{+j1@R1-lS*=j43bpHn}eV&Yf?lry`!C;3HAS-N97xk z$Zu2xBFd6TgLbs+HkM7YciYnl=|^4zd6?jBJhS+sg1WB#JQ={rYkUDBD?F$aaP#L$ zrGmiCLX}7jOvg80p@B@kDpiSq5YOXm1fCwcmmp54?7@sJ5h9A%Jn}ZWl7+|*-e~ju zz({=bXBNI)&%u{hIOPEWnVRa#!^unXTI;6vxi!^L#t4yLGM84q?JkM-RTYAIDBW6( zHN`jRvmwIc4O=BZLpmh+3`VD&x=vA}$Z9$bmB^e#z4>IA<;C=Rrn7(ri^2_hq*(tl zV<BjjZRD|I4taZB%$-B>^(=&nYQ3`u=e~_`^DA!)o6DSdVRLh@ou?{NG`O^`!8Cu~ z%mg<jaP=1JdfiDX0&J7)S;@HQl=%%kMWI~vRkg@_6v<GIDXbF>Or&y$2pci=Y^4e* z=6YWvm7G+e&M9LZa>~X^4zKf8`9X3Fhw_VJH;7uN;#zhHS=)pv?%zr~#X4op!*<CW zUZFyHoy)6W!|QpxN*=tP&+G4bHS;gStYEUan0+yvgh@r}s7Sr)YD;L%#oRr)&%L(V z+pIgT(gq#x!7OQmWPv-sTI5zllv%6}^5LuLJ#%`O_s!ScPdCNY#X;mBp>c_Hz8Ngn ztioAlz5Z8uIN}e(&iOGg?|+i8M$jo@$$6`8Fv(gZ$Zm_DT>$YVYyFu6kqioaG01nQ zzyY~(V{x1#XGPvi_|KPhQJ7<xS9T7ro`;&#%v1e~Y2YfKnb;dgn+kTZ9&8Z%M3J#h z`p_!o`z5ls+n0<xZw2MHoNYG(WVz2&ei|AAvO%}r;O*0+$5FCVMO<?q$}j!}R~$&I z{y^7Zb3`2;r=jZrp?N~?{F&}ohOU0;@}aV%tuLxi#_10#T}V+373Co8yzt&o9=wCq zlXy?S%UBsdRhD7&)l^INXn6n_Y!?9D80}(@(~U8>ybC<M0cM}iXrA$+o2ZLDtll_T z*6wYS(VgdR7Pf#Xk*v_%&BAQm&BAHD)5Yis3pNG-4su$GxF1FNt(+(w{%^-LQ1Si* z;~N^Ec3D=2_*_aRGo^|%&6DDpy1HyC*ocT(4c(M;?BFbWEOb%*UhK$1JU$|iGvzT= z9@FIUQF)vtkF!JGS0_v7h-!NxCn%d~@N)W~yi`J`_4bXDwlQlXrioqDX*4E`;_4#3 zbMcS=NIwxR`1vAT3wxgfXB;ONJOSs4J$!WpCv>FQcoGP9Z<Y25nrE9dPhXofkNk7H zbuzM(v>HSzue8@&Qs;6qxZG?Lvt>EG>iec?dyQ|U3OQxeRP5@h15;b#Uyg}a5blOy zm($%OOJ37d=5FcX<#MyIJofM_bdqEkd$_6mV)$d_PgAGMf~RgVce9dEq!-T4PBS-) zeXSc`Y+Ny*cI%eRc(J0XD0b`a%;E_}Y`c6@n44fFc9LSEh)T=e=gC{StH&@TuPuUv z+oc$|-wleU*_T!Rbg76ITo$re0JT6<B^TP2x$RP@#8HA<x7dv@p)Gtlp-)?YTti;@ zWSM4>Ga8Y|fUUBmh9;bjT+Yf$I?^XIqBt)jdaFaJG7QDjk1VE)P^x(N&>$ul3RP&@ zl+ZV#$LiiJJqdC}KABToiF>~#b)kO0HyM5K5UAT%-EeRjL!-s;hfs2Xb!sN4gH0*M zP{+!yU%PCMB*&;FdA|tWlv3W8ujGf5Xq47XOVE|L3#-fxvbo~cDkttWS6|vPt^J7` zDI8U^%8t};IyxEVo2Ya{JkfxPFJBdK(e&XDl7C4ben0s~xY{_-FHct>)`%>NLM1Q) zI|h7B94q_9MtsgJ85rg7?fV$lflS2>it$|MSc<l6Tv)sF9uJt_ba*;UuVsuFMgRO2 z_8=I$U<AXqi+9<4KsPeSToX3S5H=b^-IKbT3u;X7F0ZhAq}eAUd;w~P#?jpgM3lxz zdT&8@LY8fNM~3!tifC_5K3Av|bdLnAyBS-(0;_rAir&9P)4kCKtky1mnv!d|0}rb+ zj5roLW^#Q~L!xDpEcExM_mqfoqtRQ8WG%k9Y3AB$fNe|5<PuPhB_OL$sDWo#eF8FX zo2quO9aE{sTQE^?If}@2zEN*BU&>vQ=h^#5>QLIwi@>d-iwb(C&MRU&A>oZwg)5@& z^>R=+%Gw&W69oMp-2!F9oBDKRBbo(PD>+*>>A7tvx;gp2vMiEl+9@C03NXp+&aBOo z`x!Pysyd!Z9hut4k%L$Rw|x9m)dtcS$8d}yeO@T_LU6~k?!PW~r^~&PL9K0l6DXI_ zY`^K9K&Kk7^Yzqe&i&HYn`Ir;0_`|*RDoWfJx+UFZ@c6;UsKEMgf|Ob>hEhM!&CPT z6q&u5c%Ieg2l(w)i7CM?lxHHmTYg*(9T#$Y+UZJ3aOm|D`Pwwzw&-ATQf5uwz@5%x zSwuby4&0E3`8L;2x@YRSOs6*+y)p;SuOg*2dSB+5-XqZ3yc|G;NY&HD2r*iSdsx1R z<~wK&e}4?s=!kV14_O}-k8Y~-DI7<)3jiHA$+W))2DJAW?wPb<L+(cW{kAs3Z5dKN zJVO>*W}9a5dg?gS=4UZJ$bze;yn%dix86IJ#)Y4OrFltgId75DUZ#V@RLpkJ=g8h+ z4@o-ccHkM7&C4?L^Op9?{k?Ssl`yf^GaOOK*aTPRByfTR+C)oxH~y3(arrMcG3s<I z&KT@`x%C9D$(#Y;#<~&R<2S~`MAg!X4Asha*ZqOvx*SeZoT)y(fHN<7vL){GV|%{v z5Tiu7a{7aU_2)Y1NPR@4N1c!J0Q29Cp{86J1@?WRbE%vi5)`8s*%imOU!2zz+g`cr z&ylf5(tpc0zfAY$xBs5RZ7x0-uN(2n^wS?)fEHR5EViDx*|*v3XOaE#rAHT#S(wK* z+e`-=h!076p(N#AN1HT%IBr6YjJrRu&WXbkO8Rb)-j;vfDAIvG18OjNDQj-VE20bw ztr@ZH^YhXx%gXZ8Z{+X#lQ^6#9D9)J(AclHo=#g9VZgq7v?i}u6;6(-t$cr-$9YB0 z^|@Mrc>_*T7)sp-ag@cj7c5wY)IZbF8tbTCAyx64wu79=)USZvg)-E*Sbtcr1=3}7 z00S}Bkp_P$V8r?|dmWMHsdO`wjD`OzcJ|%}v3d=sAJK}Z%A8cT6|a#uKfz!`DN_sX z-OK6Bs=R!2v!sb_U&Ljb`N*QK{S@VQ-rlNwp@(Rn*k@urpd=;ib42niM-+ZJeT?aa z;B*H?kfh9ZFWqGelS;+5i;6l=Z2X><74MP!<S6HBBpcX)YB~>9Z?UL)f7P}&KZMcm zH?#R`JNo(0k^FV5y{Io=Oo252rM-G+oFVdCu~<9IP-VmZZ0EnSd3-_M{5%dLae~kg znTzLBrXg-uIOP4DNJ-w)daC80%y5rsScLmel2uJL-UAkd9p67Vk7Y~He)mh*A|-G! zDD`h%jwL{rUYU-Ow3^*cX=P$~O2cLctMos-5A4EjBwdmJ=-aUW<cLR~;RgpRG9x4w zW#SPod<$bVQn*3nvZ7|0c)8Kl;sxp>ZL6y-it}TcLH<Na=X*Tpqr)SW4E+A2EJT*l z)h9cTN?jEC7<qfyLO-2_77~lQ?RyB9L>!5b^<=&Gw9X#Z(`&ELub<zO!}Al3Jf(m6 z==|;&%I|K?@5{sTbAB3R(-LhNts|Nu<oHmL^YfgjF|N8Y@cyKuqSUqk?diOn1u7(c zpA5tx{VO?9q?ej`-#IG19!>GKGbaY?rH(R@!c0e5h~x?LP#HAIvCbdsb=K(*N>@)2 z<vg3E0)~Km9=zAT+S<etvJ<;R4O8HmOT3IuwxWTG<a6!W2Zh(3q#kmo?&WsQnTxq| z-8+u-X<YAOS1$sPGnmCX+A_jBBqL&jOkcQ7C-34#+;a@ubHt^%b|>vN(j4@j6+pX# zo8H5Uuk+CI*w=bQg8wE$Q1<R^>1BHug!M_d|8<%}*i!bN#@DaX$o<lo!{K}XH+X5= zqu_7<-{98?JY&JM9i)Ck^S7y56-;k-e(&B&Jj<$Z|FWuKxAQ#nOoJ~*il+o|Wy@jP zaps~jcLByJWu#*H6GfCqG{gd+R}8_TlnM*ride!<mbGs&%7^h4HBpKE8_h_p+giBX zZH_iGqFJl(CfjH-juqdkA%&Qg?^YuR5rgBYLOm-Jr#CqjIXLLutNFq5lgDJDW#WbF zin#YWk^)*$6E4e<L~R$qr3SsPkSOjw!cYp-ETxXDS8acfa(bv2V{LqaWK$%^kwxw* z6!$_7-fn~vkVq07Ben8XiLc26fB$|kkql{>8Lx|LklArBW~)7S1XBTKz%@}E8G~rG zMHKtiNrc6bv~N^_jYWuD$G)`J+YeWYd*cOFpD&-{9L_;i1|6vW2kS6UMLi&fd)#5) z;xu`igpV$WHgW9gW121JC4;-i0)iZdZ($bS<(3&{@fEL};CrjK2<GO3Z=v8T{&^T( zS$s<s-{ujy_>N~a7&Pr}i|>PZAA;|1rIrf{>(Oj?YPKJOuhRcTOBjDov6&CEOqd@% zM0-^3MZvxoViLwWlK@O&SE=|C756tmb!C1Co1@at0>5GDci8mPKP<hDC*j;SPo>wo zRXTX43;r7a%<%ZOp5fot<B5#7_i3msZt`N&dqeQSeAX>xf_;>VkHjOB525w(`N?)^ zbr~h(?9N-E2x@*+_C1?F4pjur`uO1QC0?ZYBBMz1Hpbj9a|-&0FnqYzxgpzo1(}*c zJS}*0EU{_3N_rAa&L$sc+Ju`BR$xN8J6*P#YA90J<h=$#${>M+e$^ygBmxyx)<!Th zt%{=R6>pK^qamy=0V4L?LW8-}&-+YAjuTj-8aF}~PJ-AyP?fn&Ko|=yJ^+!9a9=6E z@((+k(GA`|D^(j~Hb^a(+PVA5U`}v!?)K-}@q?NXqd)F;33Pkk-8}JZBR>hRPzN=% zKSW+iU-VGiw2QPsE7X_}ZoiV}r`LvY{$=m2QYm34@p=y(!}ng+LZFOHVbd9Aqp;zo zSkKcD7wL6&2K9A*l#}qvY(m?-e)*{ro#z7hmif*-q@a}ZvcRU@wj&6sE?N=Ne0|V~ zL!g2_aK8xhv*r76189&f;(q;podw$|X!>A#vS7C4q54Jq`uXTv`o}L){ffcg2lSd= zTN=Wy_uXvPMbcfrvz5BSW{ujR_fXaJeB6~*6%#G;Hoiuc&gT^m9>~q#&u?_tryxi3 zLz0k2nsQWr1-TiO3}qCwH}vo4H)(i&`z?M?y{9cC_&p+cb<|Byp5};ybfsSBdBPkE zi`QiD>qFpK^h<L}mGPEV*Bl|u4v#Y3o5|O$D-Yo7%WcyshB@$@p=c9O!J@CKoF`P~ zbAoIV;T?D}Xcs`_8xgo8nRy4(hnr&?E|swDZ7&^{kH7rRJNQxV1E<knc(0ka!ma0% z$x?#cd5#q%1q<QLqc=<GrcIubC@K-}yl`@NZg3V>*88SSp2J{sgXQ+l8yJQPp+%T> z`E+l#flLsYZt?rpenh-$t`UR$uzQ1axW!C*R|>3J!dU&gX)C5<Y;|;qDAMs+KGjyu z8mg&Azw_eB!y?hZaxM0$+8j20+hU3$>)YIX<I12j?MoD0!5q&ab(e^~SS)(*<td27 z)jg<QyIhp0kDCjsL<@+Gkr}*jO8$fde>d=V7Jnb-?>_z>;qN*A-s0~{{%+%M1ie$r z-(3FI@fR9D{9j(a{VoUx;Uh+l3SN);<)+r7LiBTNG#ffD7+$*mN*{?~xHMFmLaoP2 zsRt@&?RM#fPhMubAe&ZRY-bD^O-WN?7&@D9ob+6pJSlznb2!C4e7W8<Nhqcq$YtK! zSE?K$xfhBQ81l|N$q&IzUgiQQcyVmQ`7}KgeE$hb!E^XA?GMo@B85intM#I<B<!~T zm^hz;+kY?wC$H|!Ljm)O-1?$kGmk$V1f_0$DWCFJ826?sFAeiClRvi2=0QgDs`#tp zubRIl{9Vf5CH!$Jb>3plXY|eYQjTetr{EKPXaC9i5d_JAx_O(z$TJIbR8VHK4uF5k z0Elha%V2QZ4+9@mOeU%<o$H6txi*M=`81x5$deU;PoIl0{;w9|Rr-vS<WE?@-%|dT z^Y<V8eSyC#`Ma9GYx!Hl-&gp%p1(AI8~FP^e+Q4xpYRTU(|NDt?|l9~$zL&lC-L_@ ze_Q$cF@JCJ7oqP?<}XxIQi2ac918{)3KPJ;Sm7}fCKk!tv6Cjt&xidhp7LR##~q(T zk<e2_=vj7-n31LKmYi1|P0ky4WZN`1y(Ej!nh`U>%!^FDAd<?%=M^fdyTtl*@aPL{ zEWK0Qyrk^-WtFp|OqHnFb2PKIkRkZBN5iuy`Ve^VAv_Pm;8jUvJOsDbz#9&Aj+Ve> z3<o(XRF?3@VB#jDDb11WU9A&YMEw09GL^|%YXq>?p`12Lw@*Si+04{M>N9b!lwB0} z?oa8|2RvR*9@E59_Q}o{#Gp)N4ml;@ppuuF_b!DHAt;A0*!-1o(uR`%TJld?tWAW~ z`X_TsY0N2Q?eJ1ii%2OIA6CjxhiQ2#3O9-xQFK0Lo3H^n_;ClnqEyU}-FP#vvbHU3 z^j<|#K_gMKg5}G48xoC}Ha{DLwSKCh(R+k1&Tp9Av|eUaUa+UIH&d4<s_pAPZr<5A zrhEJaHEe|(Dma{edT{FgJT#?yN6l`mo$s~T%qm}6_aNvMH!s~=JBa#A#(OblEO`qF z86^QZ`yxS&?E3lR2sPaQ+@nLcqDv-sbDuOSj!6^9NQK^FxFzd&Zet6hoFApf!r08g zR!pl|iiWo&HAX$WT!QkVtN~@8hg%Y@c<Z%^2JdHlnL09vbbhKBtFCyovoQh%b5ZrD zqN%Y>aqdi*Mr^_1h8pjOHYrNLComl;NuDds8cN2R9FHBMEF|Nm_|Oe9;kQX#@jz}| z-&C~KvICa8$X7EN@gFG*Zv-Bh&*h)FaA>ae_j+)Z&pMAv7n|PO-x=(DG1mE>Gz__t zc7@)G{25V+7vc9rYihoxgm{BLr=!j|-qu6fwYVYS&4##4Mu6OQ0WzKPPNmtm<deHL z9l0R2e;FU%HFT@AJ%sZe=beC9Tjn|60uoBS>F<)XXt|!ybGI%b&5V~h>sJ!nBvXQa z-sD0NTxO&P3sNK6*eqMxw(b)jAT9GVIG8#<{kZfsmNhO<+Zys+@Xo-JY?5+Gl1QB_ zNkVMqG~!07N~X}3HH|8JP{0~eoX+Of58Jgm1@921$1_l)epA~3wh-%Rle~XdDLCHv zIn*<>Whsy&;UhQ?;7b&`+}>MABUlFTY0wEOeCM0go9o#cy_y~|(<&WU;GB_#RHgj4 zD1fF(0!h=P*Dnbr&uqbNrO}(HNumSCJ0A;@3^ir7h4;}JAuF13&{h$?Pc<eCTB1jG z-VD0I5$m=7YnUv9kz{{G(`awGCbO{V?g6axsU*&$OQm5`qfGmLetS)ue5*cp2nuE^ zp>+5d3r5?>`a%{5elgNgjMUe;seNTxX{_rOGNYt&2&_c*U)W&jS$*}!qO<(-gtLoc zsY_zp*`AE$Ws+y*r4NU{RAf%9oPu4n7v^%Y^j;h!gs=T8MSXtbl-Vbyj>DhS>d$Qa zbl&Xdywte#;r!K~+Bh$Nc1?crLJDUqCLGhk){T<;)XOUmf9V@|)IBS+^31$SLFoo@ zrU67zrasS|v~jeIQPC?gmO|ZQQ0Os!G&)*-6ofR8K;*V4MTSj#k|>!Y-F(_+EIF`g zBL8}0+ugM`F6xevgv9CoC(u#1`(EPQ&D(eenGTQtfyUpT6R-LQ+<Np7Mw2jvm%Jgg z6c&`70|DtIyel;rS63D?6$x~FU@Q`VH$izq)O~mlS&7P8Q3&$?SvLQ}e;dmG?V<d~ z2Kigaf6e~^tn3h&-G^Vw&3}0PWTJF8|CndC{-Q5Jy6z*4HoZW&L)5h4A3UVDz~?ru z`6Pae%88K%cdg8={gF3Ud<Cqxw+to2LY~Mj-2W<SE{;(RzMAbq!AJa7jjxR0a9IjP z!e3BbSy!EUGrhO2DHE?t9}$uqS&1*nbbmO#TS@YWkmOUz>ezPN70sU7mpX@&2&+FP z9*$z$znn)vDO+5tA;%i*K);+%KnxcOt0xkGt;Ht`rtaEx_#~_^^O}3JjqlS(rmoIZ zRSVT0AFszyAu8(PLTL|g8A1(>%4U8zwtXHM)#t05Bwi?Yw7$z@SGGN?tv-$ZhU}q} zAi{3}^i;I)#DtlSmKIA!p`^XYRc|zNI^eINQ109$No1yo$Tql3TRC!zwN+w8Gc_w( z2IJlVr53d9v75dCgy}j6+Llm9>3qOBU?$43a^NK%m+~T+O>Mx`!v($H!p%_3QbU{M zNz2{PE!*!0f^Vc1q5b2)P%y5MO7K0#|L(d!Tk5`Y3(|GB4I1y16&G+K<ZD`49HQSE zgg-Y)!q*4k4}pG;?oIRm-hiLkB}CdHe`SLb-YLJ8>Z1M-jBMQdRGyC}vr|+LY(kGv z{kYk=BKTY{YQ(N*_*`z2Yz#^m8h~qpprJ8;Sy1Rw`!b}#gPwi;=}PVCp>MlqBJ|D} zkuiqd(PeJj8BP$x;&pa#H+$46fYR}$&cbvHsDK*!lw^No>>9nFO;lI?%cg#4yh<1n zKlkW(Yd>7Wl+1AfA+|bf=%@2ng>RP*QTBo1C8n;_)Rb_Sb|VG}N8b6}@q_Ju)<t4p z2zG#azp$dYG&L4S-H4}|EAs}%K28&d%(Ix~mq^qJc;;cx^s6wjf*$#gZmR5S6@&d! zZ2p-iOida2jH_raPenAJ@_~_>zFdO*^p|`{`Z7&lR?$2yHNK*GdTKOz&Z%ggnUrkj zn3~0>K0(vW<cf;~*2_QWABF)S#kf-ynXYD)xldNY=>z#9!`U+ke5C&<?i8z&CtK2u zdsht40$wpqDy!K{GhKT$4@px+noTk?>b;NsOPcA~G}BGj0f1(_h$qDZc{roKq%2Nn z7glTu0h63qu|)*h<k-hTOqrk>H~T8Kyhe&-am5y)m1JT2QyNFY_I;9wg~m*_<fB|f zT9O>cvnV+#{ZyXhj6hP1b2pXLlN0$V3Z>Y-w?}bFDhn2FaT<|k+KTXA9+ITuYB|nv zOJ4K+T&DRz`2bZZP}q-|?#F}=?HZXZNbi$uW+LkFgI|b9dS9OGeM>>rAxzu$<)@$K z|8RO=m}(0v>o`{Gu=7cPkSg)Jv;ZbyYQ_GK4q<*;IL&&0o;e^Vh-XS}4CnEtcG_ue zywmn28dD-Mhq?~%%ufku32&UkdWdGzgCkTa*65A<i}DSU6>G9$fok;D3DosrNR{>} zO`ngaZZmn2_ZUo%31N=d!^c^+ep{KKoGO_adc2C1Nx3n3R;F=(X8nKQtXh1mO-xOB zq?D-9G~?J`(;>L$<h^h-6`s2lEK^0JSLQ^mv{B?)B8%#Ha^%=o04O40j*Q5{<;#*| z+n;J9%W?XUUdMAUQBjD2kM@1pNOu9A$~e<f#MOVqgqm@rJ;!G-_B>Gy<4SjKOR!F* znW8|+agK=mnzm}#z@e(reAZ@WNwkS>E=taX^OP*|TK){cL1`l9sGERJct4@p66UZs zmnf#2_Q87yzJ4{lr4+g>u|2vDMv8T@oq0-S$K!az#^rK?X<I#OP)yri#CMvV+1~Vl zs?_L1y``~^?~>c0+VcG5M-SCbi=@tQelj{(9L%M5&SV~l{Ox~~l<aUKr&Efm5uuTD z@v64Jo!i4v@%}SJy;7s*7VxuvO8XJ%hvYHN-fVvJ2^hGKQj?$fcgarVPKo4{^pS}i z`FlQ_@B$L{e~B^<!AYu;rHb!y;M<lea$d@U;m9@A&xMLO0#s2*5go?fpAoy&ZfSou zj}Km(ZEM_Q>%LXR1#?noa5+PBZ~BA5)Co?1kT)JJ1qm8rEv$lu@OL$Rd6QfpmPvsY z`Kaw*-cDt6&A-3I>i{b(c?&bqCjjFV-SSNJra8l9C&3hglU;V5rc__OEuY2tb!&0- zsuI4;d#JdNNn~c)j1HRQkE-2sn=?iBd%vl^xvF<tUUG8!x=Udr+7JUzrmusi6wl}x z*txBW)zTx+2o}VS;Ah}_&Y5EZL8#h!m>}x8`43u8mPffQDErmiTOgVj-!-__n;kTy zv%});R|upxTg^;(6FPPz%|C;Akvqmz#kotv?;dit_I;BW^4O2E1TgpYP<(nlM}In= z;>~oeqS+hFlF}yg?y0CllGmhLSB6qozSAo#IyD}5&~>$fsfbXG7CgNcE_;!+gm;!? zt2VxU*S%7=yn62looKpxq<}3_fcYd=(0Z<y1yIah)Vj#Kx<WDzcf7pzeEOxd@^I=C zG%Sw(HA&SR&a`dP*LihwSnQ+peizOM(=E2Sa-MryjbstUf|NTSBmR1{iWmQ%Z{M*X zB28M9-Zz+;pI`ZWvbND&RSGkW;Oq4Y?CE>WG0Q3^r$)G~kpc9WvO~+OS?F)irr*tD zN!wJk+)b2X#(@TDB*zQf1zcM;e7X0GGj?py(-$~GG4%9zUKJcg@rS+9gq(O3Bog11 z8$Tr{9w|rSFVBgmolrh13rLOJF{dcZ4UGB17Dn!vsUNbk;bWS9D8m@Jqf9<n2@@_B zW4&{Q;qp<eKyq6TABFlM*ZJ%S^O_v7<2`{58q)t&`QCK3ff<%2m3_(M<KEN1m(G@; zxc8R>N-OS8`Sj0JD$utDNDo=mdrt&FH!4s!PjZUIz2E4V2)jEa$jUD^qBn>TX*_pB zTH7PokspC38trrLh#D3@lK6SyVE{JXUk?1+^nU!mP2U4n3=gp|*0&+Ow9VgNLwtzE zfQ^^xlKw;Deg3xw4>zeP-uORC8y}FSv~yT;k-Mg7V4|rltUQ>)J<*?)dE&a&o&d(< z#jXR;5M#0>#qHA?TgnhDbxvf?v`e#5&JK!)&OTs;B2$p8^_jR?hLuRhdy}WbXpbln zM#wo(6jZD!OyPPXnJqGi$R!y|FEwIbb-I{W?MiWZ&pbZ~^M6fI+<Tj?ZrDIyO%Zso zzRpcg``GnL``g6%<69KQyvsjrzpClkH2UqwW#e@Vz=8;WjhHkDFy}ugQ;ISM4zqSV z#h^elRr!7@YSO}XM84wgvzx3){H2d7mTp=SRsJK^@i@N~SC%Cgm@Q=jy;+_{qs^vr z3F(%n=~^uB_i5}clGs%Rt1<F!wk(m@oAr60Kn6J|2Hnd3G?nQ}3giv)G+Wln`+XX# z`M5Vrh|M$8bs6v23CT~r_vux#u!nu8Ml2J4mGFK!MXQp2Oceg5+)+@?fOonBitv^m zkoc%E(oB`lCfAv?Kvt>=Wa_HS_wVK_^P?wun)j_nZgS<MRJ~~AP{;LUHFBjJ$Ip(X zDnui9?8Zdi?4~@91EZ0PY^=$jU7MdeiSFV?`#ogj8Yv=kzhwGIM03W$4T7h0TYwj5 zC7V{X<Sp{PAxmlPL&z1%VrAcfLtkjfeN0d`eOl3M|8s-}g-HJ|UL{KRrNuK=xc?dX z&eGR@5(e~T-?QnfX6DkDzkar1L+SsTlit4j>BTdcb(9BiR4y-za)%jivKCQ(I(svx zKts>q*S`B8c`?m}`#%PVjqsl$xU}!mc&XCy{}Nx#9RH!^<$J$B@Zsg9|I(&~JxRRe zpYCtd_S(t!jyzDw*523eSbYo1kP9RQ(!I2NjlcKpE|7Cq!9QX#J_v3f)%vOZGFw|M zBXHzpw;6Nb(UNMKIv>Dpt7iddpKSV(|F`r4@V}%V^?yq*07s=4ZXr%WDoh_|Xt<Bc zKi{)^ZW|57&99#s=kry)rNSws{a~&4{7RZ05y1CYWV(hlL=S76tl1_tdCk~nNo)G? zsd4xu>eCOh4+WPB2d(>zy$_V7Ge#}TIfijp4^SeW$mtSW7Bfe3u08RCe*GwX%baV5 z<16-I;QQ7~if=PV5AY|LzEN_u8Z;l-LrJ_p{D=?VlTW*VnA@ay&`&=qpP|$wKZ6Yt z-q)sqy!rQy$*slG*W`Rm*1m3(QLtc={;>GXWRVl^&kw(mP%Ga<!)|+=n&f^TI4WLv zZEpOI;qmh>Q<|fEKYuTXhn}tOOnO0SwW@50K9$}jNo49g-3xya1;Jf%UUSgw*7Bkf zDdXH(F*kog%XIu_dY^tp+uOgN7|E)lHG<2|-IQtfk$x<1_wt}~62DYnou?DtnRB(t zX~bi##2xo0pQS<W&K?rDJAWq6)|GDS^opIEsdci{k;byKe|3;+C?{8gW2QvponIaQ zRQs#qzPEjsKA#FzNlsyIq&N9oIou`GjT;AC2JjN<t5FxWNNh+V&ng9B2t6m^_5DM% zm>qyX8$`pe-}9q)N~m?OVI%$!L`W~2uB|-Xol&wU`V*#Ym3=!FA9BA4;>pzAArWSi zf<I!XNPT})rp1cZlGMj5cJ`1LS1Dn3saIN7=ArM3BkI5CU*Uv8V#p#>)+u5aEtjrD ztRK~XE8mDNL7bvE74ndc|CYjxs(MA`{km;fQF(uYcocVbC{5-F1*m5>2{%W*o#zcQ z_>qX1dVv@cmnK+1QI{mx(tCo6lg<~Hvbyi2<s8;7eSD=gM_(QU&aq{FLUBPMp0wXb zpbhdeHCR_jxAfa@|1y~*w*u^&EzK-V$NgMW1v<hFf?SG`?NFO?s?E7iyBTP|Q*Gq< zAW}M2{@ISTkry3fap)?gt8CD{K3cjEv_bd$StoeYRhNZo4WQ!LpeutQ8QnJFk|1cN z4I1y<KSdPz5B*##W4fjX;Xl^!JA&|8*({C?viMmxC_e}~Ol>GA*fwbPQ`;Q}4)5x! zH*6`)BJ`_2`85$TwLuU4)Ng`y*`Vb%DB*3jFaDfr?Hy_uzsi}aqDP$<NWP@CBHNtv z0*@=QA9`Lu_?K_rIW6oHueBFFK*eA-{Vz&};_<ilovN9k=?o#R;q=Wa%Lae%%*ZCY z4dfj^*#kq#h9)cC{DZPHaPLw121n68J1Qu259K-EwS^{aYSDFIapLtwrJ>fJ?X1i~ zkCU=|=o$;{oQ&9LN8h~ui&zFbS7*Ur0^C~*oUEIomG8tl4#-fIV65?f$pXYZ%WaMJ z)szwpBP$BUh0_(gttIBd6@&X*rezk)Y^rx_%G}m+w{;r4)ZO`4K)rA1;-$E+W(9e{ zs@~S;9rA3w%x!i0x_-cWXft=T?|ew(cIZ<WdcdHi>h4aNV7zHe$F6Qq$&#c}kSr|E zpWyVIkv~Cs_$s$G>9($QTi1DWbW~wSUMR3JV7*fbLK2g2IS0g5BKf-HXEiT}#LSla zDFkON@eEgYWSYYb_1<5osX3l5uKZoBqkv2ryf^kMIl{3v{aqTa502yNPMu`@9fF*0 zRt(;JOPX$1H@Q~!p)34Jw#C_r3-$L3=sE!{4nRc)P|)5i=-&l&tAMT&(ATv)5rH-b zpxnakPlIm>=oba2i9oqscPofJKA+jr#us-E=6i*LuwLV6E|jC^hpJ{pQe(ZJER!@_ zfy!)(kV#A7W1%W|uY0GAVt1#gMckcX$^J7h_~WSc%*>Wzg<a%bm<>EO(<N)W7R(=~ z2Z7g*9DV1#<dblB&e4pj^m(s7f1pnh`rMtuuH2o%p}b{#soCFy>a|4sx|R@JN-o~h z&kF{HZkG@ili#^qz`aS{ox{Mp*M-d%{nF_s>V7%mZPgS}x9d_(ks6;nA_iuYUSr&~ zVY5j<-0LFkYHGs>&Rgp4e2-$6qj$we+V%h?=UW5@1MQXP1f`<Ncaq$#G2!>h#&A@Z zYnG)aEjc5LJi4sc`wol;R&?BHWHLD8DI}Fpe(cs=%QDdn<%cj16#YQ73FEWO0|ca7 ziwjcIO>0!{IGC#>BkR@$;=<sp?B^LRVeUf7e%6sHKh<Jd3k7Uc5S|>3mKrV)TGlJM zy`fa4`@n=l<`Pamzs!c0H+cs&G0WF{{E{{Apb>yddj)ct!SeKh_nXr_k!8KggXOw} zv*aLt`aBCfQh^WEV55JG+_d><hg5Ng1T*?Z@PieJ);E%FEe%;uXmG$+1O2HZ^zI0c zfbD+iS#4@{ztk%tOWia(le|+iGqj2<$C?E0-SLhSMnxefxGbCX^(_%Z$iA8~!2nj( zN17EhcU@ruouxNRZk`z~j(t%{2gO?lDRRZJ#X*E1M=3e^yR9%o%{wl67ir$V8TgmH zj|s9kI`6|uP890rEj6(DkF?X`FD*cyv|-45l`mIfN)Vvsm=HQH>{M1hBQ1r*)EYJ; z5!gn?y}NSL1(qweeRTez+fH$&(l}PO?j?71%SyZdbDy@mP%q3=j%A#kg?lXr?!_TE zyj<wvew*2E0Qbg&Q`Q^eI*84YU~xjfQkG1e_mY#F4iRQD+vME{(=lI@slvTQSW{nG zMk6mk-_O&^gj3?)z;W^swrVKZdn_V*P64Uj2|(a=nwh`CWOSyv_%ib~oopH$)7b-n zn|@Nk_UQW^JmrwkWam~<0)2)ewIW_Z8!?*sAA!z1b~jJe%b=CXczn2qN`muW<^2}P z%)4tp+ro$3`K!cb)jFwB<{;s8(mlkOuf5HO^;Y3Ct%hl)Q&?|iJ$jucH(f*;?{V^V zRtI>r$TbKO`F&}A_d(&s?t>-ztdghR%<MimO+!SMb03_k&siEfho{#<mhSgg@oGAs z;hEku9ku3}Ci5g8p!YfA5p3Ob9p8fdPbkZLO=8_!s(G5upJ|Mw+0Pqk&I-~9JC`&@ z(@3m)i!getp>iKg@?LR&56|Qx)3%3S=d1FNHsB6pc46pTH|-ZtXSHtTW&t#=B$N9I zJ781h7HI-=gT!c(mw0g>{Hp|Bh<hqoyy)FQtf*5{8@v^IbzRu`5nx&x27`|R44F^V zQrT@}fsdhWBgcu_zg)OtM*f5bPQ|$M%e-rG8I>{GeGM#4c0vv2Yf@F2lWzHql-aqM z&*g6V03Xe`EET6EI(~(}rI;eF_8qGW`zo~TE8tUhG#&+iR}Os9hr=`2WN*xDkfw-x zAH|(t_6ECPbIgo#*`8sQiZ2;CW!G4tYLR3VQSZ_xW!8!eT;{L*>@mD5_IdUbTyd8O z2T3d(<kz0}{a#q=95y#eP`!8MWc{>a1oypkyhkIL+hiCm%51osAC%>jc1bBwbCZl< zcauELZDDy=+X%BkhPc}$PgA?Xty#fcP%f@<n;aL{up6K(^eQs$+)eTX5f<AT+O%qs zw~aUabFYef_wr_L+M|H-G`BI%C`6uSgN)M5P1=Q-E%L+V#cr2`dZ+31QY`#K28gMR zQbuuRL9`x^baC%SN~NDA`UH)Z8<<Y3tc@m*%OnaHDU34&bA&9heyL&4zL49C#p82R ziMV^NEfrtS3(LgO^KF}@&RgV(X#~!mv5IgPOv4Ago0!fWD>x=I3un0tW|;-6+~#W2 zw9-wiG_|X+!2P^bvo=Wwfd(SiT%;!9fi+3KuQ#=8ZSd(quzWk_C&F1O-%Vc8<VA_m z^Tm8FY;t!>j5peXGjY^5G<pAc0uZm!8zGI$_dCkqX`$q?P4m51h^0hK)PJ^2L?m2F zct6($2y+97)jiKR<VOXxEx+C_^69_)!9b0>qYfMIZ3U^%C(Os>we!&WgmWwCI6s5^ zst<$tj7=LUU2tf9Dcd*v=loazxGR|q?~$YdOp)`Aob+S70v+3hvVm@;H$UeQo_P2( z<0P%*{M7m@RQD5<JkooLc<0+WnT__gOOj)4lG4r>*B>_=nf|AxU5XSRdvMY(Y>c;# zl;85p>UC&<Y!yd(D{|v<o9h|wT<@dAB(}0O>%0lPGdjF6`djVg%Ws!Zcfdyy4*g|w zcG@5<Pi7)r<gsCPk^|TBi=F5EC-1PnVgNu{&;CjZu{8VzGJK|Hjxg1ceO)UF<$v;m zLIe$?zbm}7{#JWmkzYl_w^A6Yf~=?Q#^{v|iOj0H%yMooc^mPaQMJGlk=y#VsX1(e zo>FAck{!l?v@cocSR=z?g^al8aX%En?2LXDAw@_Y<y&i{{qm?FnBH5$H4v%0n$h$I z7%2Z0ebh$*aAdBt-8(L$)e?QwGR<7<mh>7B4CSn}HE7Ypu+4rSYjMlofb+aXA>kEc zYhk*|1cShm@vYtZVY;RfYLg!bf@Wreo(+P8=UAvmgP@XZ(0>I%GTT_FU(@fDm8&)H z3xZ@4vQSsqgc)7j)O&deX0R=n5xvO!N28#;ig%cZg|4#D_&cyKmZJRjgLLHZgl)U| z4*N|)I<M@K^h!G7xa&->m1F!Ok^(MQp<3{H0r-7G;5#T;X;$b1V_Jw)PoG=u-FUy- zPu3O|<#Ci<lx&)yZ{=6CKAdMyog***E}vg%jUv8Rem|e4xHpeB^W7}q@R(A}IcyG; z4oBh+n;30Kpzl=dn!L1)$hAhc`fsgI@~m_#j?*IEmjRQj*H=f$dy168(W+0|w6uI+ zMD2^^etR?ldxoDuMQ#QYWVUDCE)FtCjZg%f`T0S67qsN1`#5qh{>kZ`0BhT7>i>Za z5n9`K1C+?5=FE7C4H4m*p^9SeOkK;-^^ea>_mrfMMAp5|@J(~+I4%QZu`#{@?-q=A zOE)F8GUx^)>t10oCs{VT7ls0#6U){8sy27lD#WL!<Wee%<C{D|WZ-mJU|wX#Pkk=k zKWE1+Wfy(*o&JIscKwqRRJ**BGS&Hc>BEur<vh%j>rc*F9%ZVx%t>Q;W)U72ApBQp zO4mB|3D{zmWTbuR18dLQT@4w!o9lQ63?t!OA2g&o4)hujeTVpGdk~4}_^KTQFYU|@ z0_$oJ{<#GvoRR5Yyd3m($@D4&|1aDzyI&RSxRZG2mTdO1%mzs%{OR!?EdXbH>&+<X z0e^H9Xm|v+x+eNq1Yq^o<u4Wg4%%=CpC$I24Sxlod8r-hr|r^6vq6L)8#K$pn+>ui zu|aQW#ZU>HZeNtC?&v1o`vnAmCDB7=GE-aO(6kAAl2cgteG@~a*CguGQ5^k<EXZzN zb(8m<$F*R9KGA|1=goXJiHDz(hDF|Abg&~}U=k=7gj(h?Ru9a>Yp&6x)*i5Zk6_X3 z7hE@sO&KhE#GaFjUGA_<BjJ7P9Xy<I8~}@o8#FAMZY>M#cpI@HHDZUy4?cr1RrH#P zHHlSF^di8Kr)m`(e}`x8mg>ojYRP@PpQ6;3;qQ~wT_%ff6L)NKJ={Goj=VALI7kk{ zsTY^6GKckSg1be!!h6AwKvl8Sua6L^xQMKyy>*zImpFCzr62ok);c3|QHbcJ1jM~B zYI@liIVIlUjn*y_PF{q|t@CXXPTTFrLrgE{oWzE|!Fxg5kc&QKq}m~&<IyOElK42^ z*nb;<j1+cWBCf{SW8AJfl^!;x{PcHIrJVFmZhDCe(%bj!X!Q3B+a%Z`#MlhCUl$G) zqH8$G<eeslo^$D3EbnmRLOXNdY9*ht-)Zz%GXxVgu2Nh3P(DEsoK=C9o`>--`p!3K z7gvVRSqYCVJX-M#o-(>Qq5*Fnm0(Xt+m4n@;W0knQob-0f7TG*AuFy(d!Gu;cZl_8 zz&t24Cti^8)*T&R4et?aY~Ar>*ARZx|7Xhd5w`motD!IP)atDIO#TGyc#Fu2qhMaE zwChXW3q68+zwJ%D^}TE@uI0$;I0hj-R~&CCXj$3l{q!**9$mQn4_P!dL6ybzjh;&m ze)wI4vtd5gdjVK;n1T9PsFi`VTwz!{C$GfEzt0B4G}NV>{yfDt6I1WHG2YAi5gsUP z@Y=`(8okbzE5b2EUmS1rCI=;^zB+KWbuy!(@jT}d5MY3B=9lS;^6lPHlXr?{5)p@v z;>cy00)(+r9Np;cXW=g6it!49?9}BcaG2yHyl)XHIzTxp>ZG8SKoIeZI?Wa}@a@1J zbR>gGElq<qZ=lhO!7HTaAiT?|Jv~+8HSrSnuBN^sH(>aXYOtPK{JOkk>#}Eu)@8=) zpu>e~ryh;$Vm|;w?D_^TLZ*<Qb>_s29H}eS4s7x!D5TW!0c}j_z9#Q!rArCD)b`bb zmQV>Wac>bHLe%tCtYa+%NPm4v^AS;r{+eprYJf)FuT8-va(+iOc~=E_r|$KZ5ZgbC z9D?D*{S{&1|2?c_s@@Mzn6bz0D2ou(VD2a@=C{%OK!2g#e*_Ib<4{X+%V_a=$sd{& zN{1*)5hRY&vWi7p<kE8RH?uEuP2R?1=5@S?li24tX!d00y6pG!nM=;e$Fm3J#5R1N z1n~x^^jN()wak&wMP68|Cc^wCQJ~LN*vx-P=9Uh}is7)xys?g(C6pO}O&^(wY-s0~ zsjjz9lzoU6S2*LzR>^1Z*yx+=lZyXf@3rj&mQZqo6XMxY;C0cyPGJDslJBtbBvkz< zkX+L`Q0@!{&EbgWnIQh_8egQx7K#Yh^X8%%Uz&_&ipmywZ`!ftOv&b5+%m>Ho8ruk z+R~O!7vh*Mya&sKJ<>r#49W77)1fduDUFJ_$@`v=?@LnMm)HG=8JW4HxB!-LiDDvC z$U<{rxL~CDDHI>s_0K}wTnfAD#m#E>ygcYFLQ_WK-Ji)%Bf}Lmd7n`fNx6QMa~7o! zOyqusypg^b$Phd|i~A@?TyoGZ{|P%{w2RC*?8w}X&9s5HS}6END_z`Lwv`~bp}A&G z69gn4SHfmC-ew1VH!W?VU4&tew%!wPC<W$4fQ>ROQFPl;bMtFtVZJBQ%At1AJ4I3v zBEmCX9vC4$DMKw|65hp%l5qZV=QBANi<LhZAACqLwsLO!9>KF03Frs>b`Him?w8+} zSv;r&(Wz7h@3hxqNPh-N81r<32rKmNKZ4=S=G5o2WsV)#sMP8`K(zN$@S+D+)#GR2 z^NIvGwtn0{55Bl;CBjoJ;lLEvb8cg_mMxOORdm+MMf1J0HI-;<_ACGQeEuVz3ntn) za-1&mBi;+%MK?jh;zi{3xOMj?qosgx(Kz4x1F^6c(fm*=E8P24vp64Cj^f|i=Er2& z$1^)_q@BDiPz?0=1MS*`Nr~+=2d7xtRGf#I&&Hr7teQl+mkzjEOD^jFTt0Ue-dMJc zj1KJz$2w5CguL053M;yociEFY4;Yqlac`zYm+F1i`nwkYcwVto@mB3SZ02_=#&FZr zH17wzn<qt}42ch+P-twd^G(V>P4DzR{P|etANcalm-bFX7u9+{h0REN9A0-XXH0HX z3{cUvXr4k$waP{H(2C^wPn+jAhvj*b<T(IR15-?=R2L=3D8D*~cI9CR-5ky4-oPPO zy`FG~&N6~`sdHb@WG!PIzrD^^%!>NYB|mfFtkXnB7WuWf-djsb^5FbWoHsd16@82r z!|BEKCv5D{rrj1vp0=%!$#gMj=`6_6wL-cWak^a#W}^-Gi=3YXMLS(&5tP2`N6K8w z>%C6_&01TYPPy<*@6%8;#m`yf?R!{SZ(9E*Qrf&9A%vcj*=uO2BmD)xYVwZdC9Y3C zJMK_SlNU63pQ1EP()zI`uZoYlc$0T7zuXt;wQw=*Gs@kH-?^|nREkDB1{b6tZ1uH~ z<b+!xJA+X@WL8Lng$~(f&>KGx?kzK__f}{=VG}NE-y@_v#Az*!lTj2)YV>u<Nc&#t ziGh*rdu3^)t7in26KxIv7Kx;WhOIeyB6U5^c|B;zma*xcYH@J4+jgOjGFy^8zmkBu z5~^0wsmW^kz6%QqR;s5s2S6?mdtTw40dy7s@LZ%>8n3rWQ;D|E6RDD;E<>6=6Px<{ zhb_emb`Kr2S-feEJBcG;dJkfRGis&@ubxpX<W=ik<SyWn0o;QKBSK-<AlNmDzmXwD zcx_pOdR@60{P3Hk=#gKUQuJW90wWy10$==Ztw8_NOr>bi%{);@&xm^kwn;S^J`w$T z7X-;Z?kBrNk|oOA3yMu`nW;iZNFEpW_A1+l+ESy`GtIy*to_`1T&Gs<Cdy6iG{C0E zy{~8{V8=J(jk}=yVhV#|p1;pxH%*GEo$l65Hw$N)z1%poU?$>ZA@vDmu3DT~UM160 za6k0?_sIVQ=ZtKA1@47jx<?%^_Sz0hSB8?OnTaydJJSL<x2V93Z5fl^6_N8rw_8Xv zAC8k`gnq$tb@#%zg?0allKU={@<ZvbMCEd?hC-(@$cb}Dih0z%@UTF?1em$F(EZeV zfN}G!Y_}b&<1{LhTUGjrl5}qg${4Cq7`t({$V=BzzG#N8(ccx`75ZE4eU@JsyXuDB zJ4Hq6-dWDG;x4I3tV4#7xox_jB6>?D*hSv&ekd)8;f4Uop3<-QH8%;ExlO|AIa+uF zoo+Trn1ag7K#e2J?kKYVgyvS%f2%~z{nz-(eteQB_fE;a;;xxIImmF+ECF984-xR| zy$b`(1VAtoamL&xVCE(Xlg9F7!qzasY>Px9XpD646ae>5QTA5cCHmduC1yh@zs?o% zkP_JcM4-?L34oL!v~O+_Fms!PN!`1o1Wl@-5;@~#f4As1RcdXKr`aH?Emuth&4xJd zYy_R|tl`DBQNU+D0|A(u1OWcvZju+X;gSG;-M_$}De$)mfWU8&myEg#jQh%F_s+$H zc?-_>h3({V?R}RCl<J?G7I`y+nAB&p3inM)h8SPM0AxvbuQmnWG6eZ<w%-}G+KGGT zkVR&b<XZ2Y#yj_;VH26~*03^2?<ou}@rv~FhUQIp9{a0yKWCOm?c;H9{U@mjD+6<X z5A94c*0&=EyF`vqD<8*)9OM01vD0m&A#q0Z&;RCpL4ha7`qLkJo<YjeBL<%bBqul3 zA8?*Q<K;ZV#Ye}puG%BG30itzqxZn~sKG&Wv|`5xXF@e+qft@9*oE<b3=lfXDvIAG z3<dIAjA)%#nyl5Bt99<{60u6gl6N<AkE_OdnXVoJ<B666SI>02JD=g(-3e|y_v`a# z`V`jT?);5D5AgJEQ?6O!?z~aMHtX{sPw5ev(R681jm`U0I2nsqyT_z^>T>5)+82M; zQj!f-{k0lZ>Be`-j6-G=`me{dh9VbFHnDny*yKIB;|$@9t4V(_=1ae_ay!Rt$6Wh% zR&e$0%VnJ`Qogf9)@ZiJGuj@af1RuJBumPhrU(gd>H!<<lMB4%kVGaCX^AZI%0VDg zQ-t-pcY?ewsB0;$_a^XawUp^SK2eY5vM(k<qYh>*UDqh`1R)jsy4P#y28EK=wNQ5l zL9b<l#8yV3q}}_vqz~kug<lm!9w4Z%OFBjV*~o?<Qu@UPRRuxPNjB)CL6G#A4LZ&S zDd{D=bH9rm;*HcWd&)&cA2mskMG?`|Ul8V`;bfd1E)uf>nQK2LuEmChoa$@|THlfK z^r94qcP)$efOsowBFXXC6MX!MfUkJ=(l)=(Zjx~;^Px-0rmKf9l3L6s*d>{@F*Uc{ zP26&;i`8L(hO(=NFo1D%@kd?vg!?pz(4ZC}!C(RyJhaEhfSarbQ33jS==le#mnY}d zBW^b>GyKSq(6fzilQ>cJ1mAEsz8UrSzbp{-W;HpqYv>S*u;bwl0o6d@qv<1ZAHnO{ z){`?Uj?6l=-t6ya6WHuT4IOdooOI91%H7GaGLy{F0UF#!VEIo_KEP&PnOi?}nuGW( zzV?vE(6?1-;-tx;WNusIsg065nsd`<;a4cU@bM3US9)qcPfqd1ZWNV|wb``2l=-&O zf1geW#M!fps)NYXMsy&vQ>;L~6{yN?)5F0ipXZ!Tu{6^}1+pBHCdC*aIrZ|uK$IIK zT)g>dDNT654A*-jbTY{92+nx%a<|X|EC<vl22mSpe{FsS+|WmS#i&<rGQWmRo07_3 zq)y8;6<0o;8s8_YuaGtD8#vz`ZvovONy34%Gi!<~pGy@YZfj2N15ZkDvAa=zEvO%J zvn1$ilc)UaYZD0h7bxx1%DZW(BgqMA<>nzVUS&I2xzfVoOl>j!e{5!9i96jr$L*2~ z+)a|<@?QJv>On_8W_qsjTlhIdD>UrRE7y+K`d8U^A=sgKdj*<}x9`K_?HSfAe7mLj z?DxE6PX6{?(hI$C2={%)zhyKhIsMu0KHWLRc6Zr5{;0r!)7zJYEqDGFz&aNL8G!%e zKZVUL-zJIhX`sCtaqoYRM)A8^iq?Na_^l1_^V?%x@Ga^zxfmxB7hndVbBRpm`+t@{ z!Mj*-89E*)?e)LGpZp>4TAnpak!QT#=D&F#`M;xe$QjT9zW)aP*`wjn!#RJW-Z=uu zIkXNtRXrkrycFvY3wdt;Dr|aWE^y`_=H0ix?dpj+H!V|(oBpvr_v=$7hV%h_e@&ml z``vU8&&-4JWPNEZG~KikclureDZ_WXxV-Yo<Vn_zyG{bJ_FadGlu4i?=w*`;;sLP4 z9_3KLg7hvHS?vA|LEUJfrqp|X{+7~@#ak9dB6-i~G5FTii~!jafJl&lh_*;Tq<WM! zx!(Ks-F_|-Bp|=wH`Cd}Q=}>Hzm++&K#p|?gz1zv;UEatp~k(-g8U^=G~~A{h%^`g z$C->w_pCOy)BMP`ZrYDYna%?N%-4Ry8(jXY0gNA0UxDijZuIK(h&LH&cyv}P11R~X zjHv@rYfb4ssBk|#DB*ug&TjPj?)Gb@L3`P<)kTsv>^$dE8Vjbn^DeY}-q*R3kzwPT z2gp_KIuQKvV)fG^bwXK>-+v`EIz>*$9mEmETUo!PB2W~Y4Xeo4REeJ{HdS_iOIeny z606zJBe?a7rr{%6VA#D&g4BOzM_Lk&5-WqT7&O&X7ZNj&u=|Q(cjQ2|I>1ZGYlU?m zA+Kjyw-WMts&x?|uf=oKL4>@Hn=9@iVx8PLgC#ckmP(0tRq>g`Wlweg6MQ?b@M(og zxqv1`BbyC-h+wfHp0~_RS}nbfhYE0QwDbF%6eGR)k|I%!daRTqDs>G_tQ@8d{ye=0 zJ0*^ocmc2@CQkiG?V<^m8SE;#_V~#)U$}Nk`uzM<(bQdN|IXoR^Lp=)inP&z0(U_* zSueuAZ~j(kPG}JiI&xIT4)C*h8~7Y+OI>V&-uZEF-<`Jabx}_Zra6&(pgyKIMcQOy zBR(+I(c>;c6Hb8y94BUsdJTgZSbxNsNHW_n)eZ|<AsO>c;j~|PTS>->?4Rz9`*x(6 z1uN@4!<ez=rLy$JI&_r#a1V)>bN=$qyLkze(so+`2L{Y_BH(|6xQeT)V;x_Wmz8DF z<RoWKL4bi=mh@|q(<x}M8rTRfk!F`&lFHxWBy}M^ARng^A+HC1A@>5Fa#$NoHHTzX zos-oV?<SiSdzB~mrEevfB(=JvQ4LLMTgzUlwMS-k`ouDEYAE)?4dz$o{}A^!;87M= z-}vrklPs{X3oNi=ghf^xC1{kW2?-h`Kvcv{LN-`FLVakxn^H@47ifzZ+zn*86QnIF zZ%ZvIwX~&{wiMGsX&{uK)e4qYT74>3T89QItr~(Nd4In%_q|CF`u6$1*L(ewYtGKs zIWu$S%$d38a|%X;m~vdZ6*w7d(KH;mka;4W0<MWxs>w*+ERL$DvAdyNF5?r@mzq;> z*{+wj;$=tW5ojDs9Bn1gtHD7u<idH6`Wm`?ENgo~US(nU!=5JP#=Mvx^E#YHnhT#m z)cB0M7mpAWR6jwxMp%xyIE3lsKt+3L2t>GM5He0Ja}B9fPmy=HOw?G^3%P%4aY!uz zE+%~CHEpT@uIoS-)fgwz!Z1kqtiQi-+s<x?gz?XGC@bnZW?*@^P-;aLTNRau<(Er} z|Ev{pm3kOzpi1TZi?!tGxYVrigL~6AF?o~@*Vp_RQqk}dGybyrD<Vr5I1X#qqF6Ak z?psSyvAyqsx7Y(Ucphq&L<$w}U-3nAX$~e0>iB$kY$1dPvU5~QiI=M5RXUI6lUis_ zLbs)UK!JcT=;qcV4~wzI-1!AOVugR?<DZ*)C-@dz_=qgt|Ii~wULRQ-EA0`l%j&m) z)KwsZvCo8)9e==h3u7@E6JgK#DQpf$fISox4J>;Z62EFijvTS6ozwH3@mp%t@ZA#g zdvd(-+8UK*yGvzThG?v)DeVq)H&}FKEL4k~8NJ4YEnbMHdInY0YrPm=W-`n!RThD0 z;bx*R{SQufe%$Yi{~)V!d?hRdPi&X)!vwJc5%4vwL+OkE31to0gZ%mN&U<x@daGY| zcPT#haQ(*8F?g;5`?!Y4y?}^uob4P_umP6xcnv73W7{AIoPzfyr!!g6n7#(FKTd^w z`qmH|t*-%DN8bU#&%xs30&0=~s6~;oQC*?VJ_+gMGxR+g{_7iop!+I$VyqCCmcI-k zM(uIN6fNsg<FjduL7AJ80M^3)@C`-@7@tcA;UO|Ljl^bzL(oeN&-)s<kgaJuXV0)R zO)1r$iDmgHPz)5B*N6Sceq}U;b$M9K()?=CJ8a#Q?c_|vvPsQN?2_m>3QwYX51e%7 z)*V(@BEM1RPotbJ4LN|1O*z~u5>YpZ2yo=dZ0a%KWJBxe;=R5GR%i2bn~>4w&n`k0 z-G7BW|2@x9Jj&Pb7{aaFQhqJBrMxWy0AAg=X4J%asD>C~h+lErlFQf3cTSw=^flBH z4fm&bd4I}Om#<-_9V_|m14t}(ZNn?^amM#;mKwa6(D)-l(ASK991Oq>$Y44J<v1^% zOZ<F00+Cz;pviSENaUWs2OBjzY4^j<FKpU9jma=Oe|Qa{SFim_%SSdhi6^#e+<PU$ zu%eoJnAAIh%}JqvC8|3aLdjmq5Za)f>`Ww?3G8qmPIU)iA19LmXu(A**(vCnNUaYC zko1F}aL(r4kQC^Cn7n{ewMG_IstY|8@qyWKgLC$5Jy-&7F{gSKXW!rtW$jO`ZY9-q zn*dXfpP;?1W4x}1=VQYw)Il9rQo%bkGR}b`$m=2xbYnrj)oc=BL&rS_`w?PK%YFpp zu5I0af5kQAtY!X=Um7YPy`HrSDhyfhV!93O%3Fc9${`xtEc+*i`Y$vCtuDvl^$-4I z{SccOD%BJT!9vhO+3oHyBZCk-P!#TmBC>ANjXLJ!FaC@fSK&zQNFW&{usyxNmpMcY zp!39VI2Y1+7DEN2fT0GRC+W<ka}k|?rZb1m#dN+*r=QMcbhgrYHW$w2bpDu5MQ1&o zPto~0ok=>sPUk^78|mZ_#b~9oiOx8k+vr?J=V$0_VkXzq`RZdBvp>C&))lbgM#!hP z!+}j0Ba9@FjGuw;#$wpiMhH5XXC#5FzAbp0h&N5}JWsdScxA-<c^Yq_g;z)-_ex~< z)0-u7?5c>$wtRNk=w71#Dvf@Hh3+7FE+QMWJ-vlVXUb%p=jquz^1+MyGh5*uLhTs~ znaeYevUFP+brY<{T$Xzuoo`6UHd<G~3cdLB0XXa-4lCb!f5T<=8|OLyy$$`oCD~Hv z$7uX*DT6;TX#;4W*}uvh$bj97lBM=B=YO_K1+0GR$AT3~W32%eKIi^`FEr!eN_@in zL2~AKnp9D||B4!KrwMqK<LeMo?9bwc@Iv(sU}2*$qWQ7oC_W&nc0i%Ct>%~mNuWIo zxKQBkD9+ov)u{Ch^_asLR;j9ij>z+|D=Dh2#+h_lery$T>ms%pANKOjQYSU@Y`#h3 z0MO&XPBa|Ov}35VlZpxZ+&mbd%KercO<=!%>~^&cm8hqz%mlhq?vV37X%#t7+HpjE zfU?SfYk5HD82c^0f%RVa;R7nmLdVvyYWA!_^sJaW$mLE(FYVI<lj=d)w|Wy{ay4Li zqU#pl>MKwfyzFy$mAve;9Y4@M-Uc@3)S%<s1u3JE9<L98s&BMR$9kJyNX5|;>oC1A zX6@y*hhABIyfFFaki*bDh-jSHZ05m}Q#G-v^064ZW)i!|*a+E!7GK)Zzc-DJ&$smJ z<DMs)Fio)I&Xxgv!Y55~KqZn|2>tF=Ed%?6j+T1s!S<=U(E56DczUpWXDLt;U89$N z%C}=({%SJr(Ext10e_4zt7D`Ty<@1prPC|y>d4eAiiPt)p86(rCmsuo^)mwvGthc5 zDLDi3@O<nB)7?M~lyY`l4H3z+7Mu~)u4OzT3@OiQM>g;URvW~vfSo`Nn@)~LI0}>_ z##p|NiqyC<xfMdKyAZ+@amK`#d>^>{(lA}JO$Q$_*rtO@^fmkzA@UvXYiffv@le2x z2QeNBI^)BP?NHDvEG+?jgRcR?j~oPW3;jblD?iTI$Z*|K*msO%wo*>32=nIa>3tFZ zl@A5#fgB$pn1hWZF<+3z1kCs?yV-G(^zfpk!T4Zf5yQWq4u8hRAIsoT#w-S#c5sZZ zRD@Hm3nh$PSS|2{glov3U{1m~lCB{`VUECD3G*h5!<p^M&d$z&;h$Uoq+w>-c413a zMuTfeHcSr8SeQXD!(gH?4ri7tD=RAlhJSATlZKgKoI7zQb7_I;ZeGYkd0cUDfu%#? zLFqvRZ^|k1CXY_(nQ!g3Rw;^IvBGGvGoEQK_NT7HoiUKEEZV>5$GKVU@TR`#HT$O~ z`vJ<m?WN?pBjxJzZ9|=g{=g$=+%1;sOJud$;WZi<V-PqJcRKuu0U_fc>*HR0TSKR! zI<r;|;8%dLkKU0!-e}wA0BjV4>}d&%XRo{y_c>q&@0FrqR7Ae@d;1N4l0ypKmtYP` z96g7Zya(*TY21MvS@1ro#G7aFXvcs9sX<S2bis&;qg}XGK}X{dLq|J>=}L*VEFG;i z(ORmbEl)?Q$7OXAjbjE<yTWm*yE~J*Lr3M{!Me!mDB8{*v@nMt)Ta^9rZQP-jlhwL zg#djI1e8z^IA+l)VDO*GjkX$rgBJ?{15Y48D-wZhp#;n$Uq(E+30Bjm3vBTv+Z@O) zzfXaEPqMGq(T*lsLr4SBI116xEcW>llQ^)zUFwNR98}=0;R&rs)z>C^Rcw?8*#(<h zGvPH{DaNnKwJ)IZaRkb5e~;iR(JY^hW8=8Z9ozc$#7c`iu@Z=JPD8{SpFq{q5b@(p zUo_N)NFY82mfVI&Fdl>@uOX5X_ob$tO3gf*8kCy(9*#!^rr>>?;PPkYH*~L9kmz=% z?)0xHZoaD<?_V@e4Wy=eSBz?&8otd+zd7=H%8v)NQjxQX)<EL8Gk&tU>{p%5Ga4Mt zfnTL&JbD%lC?81`G`oM*T-Jb>9XZ|YNVJ|vU6pe2wH+2S{b%j}<%k1QH|*0xY!33C z8?HFUuCLRFP9Hq|>ghk6egz-Yyh<X-FGTFc%;j!v%r%BgT<{wUSo=-=slnJ_3z<dh z_!llVscVS@(F-gJ=jr{Gv(K8jeEVuKb{EGyNFcZ2jaV_S7KT0C@D4x8#2#vRH8vJ% zod+Ru8vYd<!55?$gfEwdKg2xEkyF?WfCp__^An)%jBmzgMLWb2uekPX8Ey%{t)^kb z1Ty(}N$0g_4Zh}b5+7vf3*(7^Lh(xX8Rk`HA#%#X1voK`#7@H<!rmM(!h9coq4+TH zv5;Rd_%3W)hupAY<u!#)&=RzMxKs>G3U*}Uxn)jFAc3;t-<Vm;2Njp+`Wk+Oh{y3s z!-RA3azej`axdoZ;R}yE?cw(&8?{Hi_6Ycr+?azH1==I%OMXUs6l#wgU$R<zlyvUN zz;*eN(AYzrdo%Rrh0}Y^A`o}2(D(FSI($hElTJ&MjSaNE*?mb)46saz51jEki{`t1 z4d;+o++tHu{5~Euy3b1<p@^97&0+z|z1WZ`j;KEs@u!x0@tn7Lj(5_7k=CX3$A1AD zi4WZIGEz)(?vmF^adP8-MinGG?ql_h1)<ozoM;K+V=tiIJcG|zh%V#^U&-#&e0Rrf zi4R=yvf_VW>$lD|4xZu2z2v$09Llmn>KfTc?4A<zDO+m3A0;Wq5Y*Q&2pSHY5n)MP z-6IC5lydmbfM`s#MMF0+Jzn1bh)iWIf+S4E@fSYY6uV5?1J6?8ZW@nyTW;~oD_rIo zG#<1ZW&9WPWplwVIo6b~w5U413e|!MXD??Xa76P8Lw1DAhsb1ugH=pg)FBcC6Pd7w z<Ge-XN_-O_Wqwk$#)4Lweq1u%?KYcnZ>>(#e1{c_eHl%djk4YoOO*V;;agh|HyTJ7 zWeg#&Bh3#vxrUzhlV&@Pu*_<%@tPAGPA<<j^Na7xjo&OO6hb)`VE*4_zJbn}12iOX zpO<TY=Jjy)Hw}O4K0n>5$&ezy?&{40#n7?wXCy78nHmYD6ij&%C!NfmFZEgUKUM0- znEXI3qo6W2kg*q7-ja)~s_0tDZ(fyoWQ~3o7x{H3F^YT+-7yaFl#GuLz~ljE>Ks!# zs!PUcC%HYPV_L}=?L<!o=S?N0+L<ZNT;idHI7%k^k`*9O67nT^eOgJeFFBdNdA?*3 zekXK`l7v>H_JGNO3Br`10t+TQzb2z(@^W{{CszbZ^6^`=!e8<!{C;_br(}H0U2;v_ zJ!NvopOEpq;+K8NE0Gz_tYrF<P}UAB$N9|26ugkK97?||Tt4AsQDN+J<|*nCbGUh{ zo7d+SV(qR;#<mnKpZGIEeTftOA?0~`qU0BlwqL~CJFX!av!n%AT*y2-hu+^oB1k(I z3Ik*uV=!~?Ygh-{gp)c;4ZlY|V9oPj3X<9bk9O2~j3XEoMbuzBX<viMFz7<0S&Cac z-_Wyy$dm_6l_A=ijAUypm#k&#WG&|@$l4$B7p(mbe%DNKPD!@Lk02e)Yf}~Hwn5=y zH!i17M<6F*N6d?ShJDG|5En2Ac6=>bp&=a#>fD_wp&=6+8#Hc?4uv|+u|s(^hj}3J zW(GFeVq-d#DxSMLka+&=*hA<6>GmbxfpX}`8XzA0_7HV@&FQjmiP%CYcnP-ozmS1= zV_!hMmS~lXA`;Wx4?f?MPeRX1SZU+2#8KEKZDkBIX)F{JKVE~-*$$$tGN%iV3Ejt^ z!qlFzA7U&z!w7;`#@|p;&<v4>rM@tkiB>e__!J-*_dujS9`j1Xgbq1wAPPF>TfyZr zWWE$74{%RHDTOLj*IfyZJbDz+qlC^fUe4MmD_^<w#gLazGNaeBRxzUtd&$Ju+a;mc zTP4M@H%jtiuUR#zde`I>iQX_9($U-7+#~gz9=eFd%&MsyXp~(ILBsjSXXLw(QXVw# zD8%fn)3Nf+?(VbQ7~kDdc)SUmFbClTL?PniltZ7`&C8rX$mosGG2a|s*U!j9>`HZe zI`%M4yKmG9W)`A`m=QJl{HU%zR6XVtecFO;3sKqGdd%Awnzt2p?(xR~JXmD?M!Ige zI^E$jzLoa)3agbHP*AO3s+Y>*qRJ$eH&%!rmm_u=eli^Kd`!(?hUgetV)Jxo`;-D; zVW&=e*7`FULoBB#Q2K5EnBR*nVZ>KiDacN1${j{Cau=b(eaR?3j$lKBoS|*`zT~a2 zaR^z$A!L5Ex;YjuQ<MNGYSal{5k(D#+iLVuH8fB~^KuMSV|YwwZa7aZ##)?NJ*)c_ zHr8f$y>SdB&S=eO6%ob0>4&7K2t`Xp_xCrOA=t_K46+Gsd`?HPyT5Q7Mh5{(XP83- zN@xKEwuD{<be3rOt;7jbCsvgaR*1agW|Lg=2-LLSd<pO0p2X{)c*G68U18^RZ+$aP zF<c+JO|C(hf=;dwom`grXNkTH{U<uQKc{NFV1ysNVmCUv+5S|mpYFaLU3;mU)lvNG z_$HJ3D*&b7$7=LzxViT<5XYN?IwyPU&4>K4QF6sXkfWUdiV{@s;<F8G#pntY9M}u- z67n8EiTviD%r4|5fQ-Kq!#-MMyxPn?JvGppk6wKyF0qJBmb@2Z#FLM^C0*t@Gs0tY zndU!IbzXBYtXb@w>)1K?Q&YUD*?v8;HjmhO-W&gpB+?;6WIysem*>M|JTQ~woA2_P zMe$pTe~m%Fexz|)r_s-RBlSu0CLrkuZ$3%h@KYyc*y$)cowoQ^8E*bJ29$_|y0}}4 zbeHMxyfx_5<*^4GZAhzEdHU({K;Kzu=`z9Hw@j#jA4p+Nn;j@fwG=`U@VliLI3Uh( zTH*iK!azWNV4h!sDwe?S*Cn`B5-3596!tB_pD)HOsTI@*C5X?41yG9bnjK(P0K)TH zY`*^9V)aW(UW-?DO20loC8>L2v;JjphWdwF*NdsFl;DHnd>6$zZB@uz;aAl3pT1S@ z+0iVs(_xAJv--bKi8h-ZsCc9)0*3RyJ>@x%bN{#Hc@-Ubz<eJ9X4ikPb4uX6`ri)$ z+l$7oBU_C|1X?#5G;|0v2;oMT)M8thPf@_+_?oCABoxHAbB=mL_FrIX-<K>zHF6}3 z@5unR(|m*hogZ-m#T~dp?_BY_Sa@CHFRFFp{)Y4i&ndm$ma28*4URwIvxhqYbEpR7 z&D&-u3Q!g0SqXYM&@dtO^p}wk7Z;#1u0`BnM12NcMq!o}wMUtbf`4KkA9Iy&i7+=G zhfugM&~mZSHLXJHW<}Lcaj6%wFt;w-n1xQTMh1^+7`j}je5mVB$cGwFCI%}F-mR-D zxQnMf8!I&Rw@fru+&LYEy;9x@NZ-028y*GUf?W0Ex%N@A@yBl}+@=2|Qg#=2;K_2* zRGYL%Pi|G{D=2DL@rQ^Z<y>)o3{EA0wLyMJdd)#d;7uvA2bb}HJxUXv4zwC|W*La# zAfyK=4#mx<a3cAh)Ih5QcT%-+UGaB15Z6(~Flw?qcWX~0GRifiI(3b@9$ghL-`p-; zmRH|L!0wSdCDS`FTR19Kt5)*+QBE{q6pI_;yyjBBS&K7hIi?DGd^=hbe|71(HuSbK z*VZ{b<iWZbgaN&zqr-d0>DMlOEz#y-n}u)A;c-}5JE`YD4#B?jEb63luTyY>eD<g# z)VbHCoqQ0fV=&Nyd_k#muN%87@KN>){|H=-b|&Oo&F)u!9Nd;T<MXXPLidi8`$?`M zG@sbyLRzsgvfvRP2s+^dNRpSKaS1oPi;iDfj(``AZI)v@L!P!ATj}5j2pUlMcrz>@ zdZ{MLl7=@ULdP=NHqdq-Z3<cJSV&tF{XU7gSTu^ISEENgUK;ZO#IIrKHpVNVt)B6& zr_DjXTwq`*9t+|ZeJySloEr{z3}N_LtUAic{O~g1>|6}+^JVZ$oC__jirvvX4Ns7P z84buOmQ?bD8IK0=17yFHbCoWdKgpDq(_8X;KW&mD1F88t?m>zD9dlQnlf36b8SGCe z=3bS?uV!4yDRb}lfPEd;b0E=?hxp8S4t|+)^2pC>mfZW(x%V5$c+XPW&zRjLcM#~M zw3Cwk`ni(*h7$aM?StjRFW!IW0^lD1Z$#NSo3`K4HiNe3VPpN+5zFYw#loE>w0$48 z&go$Y*v<mFzrm1P+SX~rVHz=eX9%7hD|QC?vvjAIKZ|!d`19GF??Kgc+_O{hXO3Q9 zn-Ieb52)f;j$U6Iq}SK3-uXHs-MI5b{#?6r7k_ehZsQLG6U{6(OxDg~+0qm`ygN5D zEOX}u{NUq|%vc&hJ?_%=xKY<*fJ^QjrC@D<>*pOe(#AFFjy&49Fx_!EZR<!aNLwRq zgHT1*wGONjXo_51ayHJGiZS#r>%jui+tupbn5C}~dL`6N%VJ<-80~LEcagX9BSw92 zAOq&61Gx7N)S<ro9Ny+qRfno7%^G*)$>kmR^ucf!FH|k13d`k5D~`+kZMS{PHRLNW zjWAEZJPI@P39jj6x-v5}Ghq1Vj>7N1U{=C>9%d=bOEBlh8}@D2kOG*SVV1%?4wDU4 z@C1I}gZaN*hZ+T1xiFuEiNIVBQvx#$W&zCqEq#7qf_?mS$!bv$I6OaIIv~-N0q5&< zVr!9oTRiKKGwV7&E}$rNw`m+w>G?xV;6^jdocR%xi~5;nMIO$ESjQpczJK2Djpb7P zaL#z%__X$Z2mz-4+!Hz*URyB~K1<+(&ZsCimOZWb-Q_27>R?W7dY5QVdTQJo-QBY2 zuIK%kzBp5|ccAU~XF;eZ`il}~9DNELZO`OdJ;ckQS{{(pK!QsGxYov(<aN-Pp713v zhlL+~-sZ$Dm@Y|l-RxVffW!^#$I#~)M<CH6%ynLM1q*Tt!Uk!+3R@D|7~!>agvrKt zfQj$8r@zPqgM9fCmo=tF>Bj|eL#>+gXRAEm-Dk0t^5;5hxVNStsx|@*R6kFuf3v9? zHz0>L;oF69PWnY1dq2V`kUFM$3c|P<UFCuZIIdshiK@w(^bnFhVUw<#-0_U@JKLpi zwYEy|=3=4;=2#!s)=wY#z;dRzv4V+RwVitw#Ij^%y=_Zryt8wU3r<WUI@)lH1+4te zYs2fCS+eZT7d3eZY)eSL$NoK0d0Da%q3sH)eZ3^+>2q3A%O{?rfNH?mt#bRg9X4oT zYY8@J>GMeEg=@*tLPGgAOA97tgwRPm!ttdq$wS1G9E0%)Y^g7~NgPn84_zJ`iL2n* zNnzuifgH8u-hf8Z;t+VW0QN~4i0Es$gMqE$;fKKa9{B~z>PvDP#dtsHPC7*Q>M)}D zb~Mh|B7=$p-*pXX*-WICMuCe2Mg-;y^b0&OfpHE9+$3<Bz*z$G1qK9mUC)?@1#T1A zB+w98CNL!M>~)NJMBsLT>jW+)oHPc7cqkmp89x{nGQj6+xEFkBiAbb;fqseVARilU zXW*%P(mY5w$$vS#A2};*I7K!%#()j~6gFIj$moW)eNT31gz(d{RZtrRE*3ajV4=XE zK!-qeEfYB`utnfTf%O6x3M?0xC(tkOy=#bdMBpxgn*=5WE)ZBEFh}6o@r-{|;68zy z1ttY95LhBGN8s5!p)YW|!1aWa9Hm;0CJhEZVgo0+^Rcrc)UsTn%oSLwBSsKDbdqBM zezIEfCB!fA6cx4E{ls@%LpH;FA7&fO<<Fq+fY|~2E||SA2Vi~+a~S4tFehOC1=9s{ z4#ti6{bBqt!(nn@z60|Em><JD2lGpqHkjvOUWWM-@Q%W4hqOAJp+0}E3_9JJwr5th zZPUM=etq5j2lRD&2ljOj^7#k%_8Bs?w<{D14D0J2KBBKXcu8OP$V>aWb1v)a9yQwR z{yob08qAw8Z^L{J<@_SdN!Z_oIRn!TlL@~8FoR)6z+4717Un9LVwlM=(_!v}se-v1 zrWWSYFz561e4by6I5)rukH_}?bGkCznZ3NSvOT?AW5@RE-^V$2fVZ!E;Gn*4pTDnr z@Q}Xlp@F{cVZ-~nM+E!2FB#d_eQ8c#_hqB{x<`lly2o7JtMi6c>*vDpR2s3IgmPk} z4v?iEr)?=0-CH6spU~FlA<?`2sald;?bZ5xJht4yi)tLS@KDG24}H{EUTET$xi_)V z&Js9-aFSNuRNKDfQ-E4|@1cA3A4O|5ZvUYu??U{vlnH8yzyg7J0>c7x1O^0p1-b>E zy^+bjC-8*8V*+0ncv#?z0{02rC2+gItpYa-+$eB8;Uwy5U&D>aVoQ^FC&k+_2I?mi z3yMOI{aro}d<{NETQ1RJ5=|@Xze}<IEX4+%)o1;MzB|^PeO8q9GW@hG64ZqP=L(!9 zaE8D#fh7V91m+103(OH15a<=?7I;=_^gV$m1RfLky1>H%Ulh1c;4XpN1#T6%S>Q&2 z>jgFmObT2sFeY#jq1MRIxTT_T7fQ%nfwKtb{J=HjQ!w|!d>-a^Fn@%30Om_D55Y9R zm@r?3c^u|jFi*pL59UWOKZDr`vj?Uf<|UZQt*#-nVdldugsFpB46_7gIn0$1EQfPc zpFdXyo$gHAGb`J+>0eL3zV7}5`ntUX`?{%Td;1I-+S@g1RA5+N_wW&Y-N8%xx<_8x z*PU~j*}WcR`3B4;m@JgZ3-d7SjWBCro`Km4^AngBnB6e@U|xVZ2=fP+*J1twqhS64 z^B&9xFb>c<pKs^$Rr3+bvzN-xJg<ZLpZ8C_h{4*ow+e;+-}hHqKjNao1a6kjYFR{u z!jHIxuw3{7Z|cW%{N;B1WjcP0?vLx=E4tC>6I~DZR_~S8U*Gs+w*Ce$ep<SS)AF9c zQvy#2R059)JSy;Yfky-$7I;wLivkY_+$XSA;4XnJ0=Em?CUC33Edn<S+$3<LzzqV| z3tT6#NnoSEq`-PYvpcd4dpu$0!fb$f0_GkV1Li)M7|fSp>S0#FG{JlgW;4w9VYb2S zfY}AJ7v=!WZ($C@{0ZhL%->*6!2AoQ3+5b*8+>!5n@CUNhICrK>83pj{d>Ru1H1!! zx6vVK+@S&6+S5db+g_u3nrZNok(cIN#+qgQf2=-d|5WPp^`Ed4o5=di7Z?)g5%^va z{f`MeEO3{=EdtjItQWXQ;B0~A0!swu3Ct1b71&iMGzGpWaF@WX0yhY(7r0PhL}0$a zfWWg-pE6ltc88GvD`E0r44C_1u7@dvxf!Mm=609}OcZ7=%sntMm@mWB!>od7g83TE z2AC&cHp6@$W*f{7m|ZY?VGh9j7UnR_|DW|~mR@vxG*{|ww!m40vNssp&U2!;fL`t= zNc@(&w}#^6>D<ro6JI8AcJo8sOmJ5lwr0dfSTQE{iox%9^@)2h7eBBXhqiuNaSrRZ z9xT#!K4?8$y8sCqrxDHA1AtkOZ!KT~0eLX4+5J8|9pm=bG?ygI=_SoeOSo=?jb*qR zZ{MdF(TxQj?0>=aq?}kcNDhlR7Ojc}An8zz5)*4WJWh-<%(@r(=HiOFPeQyZ$=?SZ zSvYxKjn`AhBLYZoamGJkW&z>ePt%P;V^w8Ph5Ei=xoh=~X`yOPFGcaO43eY649*7W z-1Kj*#&vX+sz2C(f~CGtTAP|MzkLdMqYq^8jC1clYrY8&Moe(pRHhi5TLym~tQ9ic z`ygjnSMJ|{0Gtp1mc8X5WZaZSn{1;^(`d*npMV}!qekd03Ulywv`n+8;ReV|=;U>> z9+g0eBkG&Tvh@~3e2g(YO*Py2jn2%e`H~q<r{2wBb-=ozdGP}Jqh21$le;f9CtNn# z&ovs>wh#|!UNE~>QwYjt<RJU1klAny$(ZGf&B&sPN?Z`Tvme~*NvRD#Zq&uy1vt82 z(>!~CTBWOqq7@&gFJ7Q5RCP><R;wSNtWgL`j>SFiyg4=MDR87$+Q!}K;w`uHIaueD zv15H>_pUCUC+5tiH_Da1KqV3i!ikf35%u9hBx23|jW+I2CoxdO71jCdJgYi!feKCm z)I=-PN7&C4#XYl!Bz0LN>nkAAK5MGfUPQ2~XRPsvP2Aw|V&hj}73j~@^yMTyP_Dy% zB$4C?uQDD@BS`zR5H15kjjEQkgMya6-qI{<E{!(FnsIGMEP{iYUK9?*)HLQ}T4|z? z?I(ivbMn6!!1i+${Baf8l_L9WKtXe6DehX3Twx<eDRSvhnIM35NO+ofU}ryeqG0}+ zt*KP9;WoIis%0pnxe7OwRH|JP62L5J+%dnleX5&;WWo`T!E$C6n?*+({arTR6nS|F z44E|7V)&dkX=f|jw*j+8ec~HE?PpLLZL*D)rO|lY1lQx_QW_{~WAvLYqIR<ExPO`> zNyyn0yiEIfpjOpoMb&%41-1%bmHL@3nvP_Sj;d83=xYCyq~w{8#ZhbDx^ACK!0mMV zeCtzepC5vTEdXPTtJAs8mOFw`*oe-_$J*yXNkg~KYtv{h8|@N}R-;xRUavL+t8AAK zRI};fp{bf*4rKjN!$S}{E@iWgn0G8Tt8{~HHayC$OKr8xTkO=T(K4$PIs~g_en&(? zTBfIOs)oF9D=c1a=WyvKg~e={<aVz-qGhrn!N()*(GSJJ7Ad`eb;1ymG0V;ecGCR> zWdO6rYMS<4Mm3ln|B2NUJvwvN8=5`(`BP~sQw&Z4fXaX0ZOK<!KU2Q&zWL)l@+D{E zt***Kdq$)6=;x)fq0rr<pO=7-J@pR(ME#RdU2HAgkVGDF*Nr6GV4AFdP4(mTFGbb$ z|D`mV%SO9IqoMv0uNQB7*S`}Nfb>-KFGVwFFJRewYi47BI)SW0IIQ|l*{SLJ|8cth z-;y+S{r64PXs~hWmfJa8I=iR-f!HgLy8bVwk3T03mt7NI{(2%!c%Xqh-^j61ny?6g zrH=<PkI=`Hbq*~d=+y%tb+>hf3d<r`0d9?b3fqb1RY&#t5Nyc5|7PEgeBX|8=bpcL z5`TAP{1b<s==}-b4(wzwoO|B%WW0m`co)C0bTD?_`(uMM_KZ6e-z(#b`8Z5IuPv1^ zKjpKO93R`Z@_<ESKW2)NjX=BOdSn1=8WPKjpwE-vxBz^bg(WNGmU~Ow6_r?+^)kcw z_48Lf^#FyG8|J5gn&0$t_q&_=G)SQjVN<n_>s@%5VNRl}8|ohCRN7rkb3iM6+a^4Z z0otQ`%st`|FYA1fx5oUy{3BP<cw-%(=Xe^wQSP5heCWD=u5ZUpz8%xapA2q3tkF-J zn(KH6UM2xn7fF3dV4d%|tBc={T{k(gH&}e&{(o}67M{M__Dg)>W4LD=gaw`cst$H_ z*hU;5Fu#_&dAN8SNOZUo?JlPHci)a|-;TSSdyaZC_Q1QiZRxAyjx;aN#>!0{3JIj< zDb6`<8n;(<>+@3HX!>apZqY+|oXlhl`!sQAm*ZAkv;AB1cj_F(M>;gT<NFN^nWc#u zNkldx0Fb%wSBo&qmLqHw{iW`Z9{akDH^_Lx#>3(p9z5d0)ga@kv}aj|Ve;i(;~Cov z!-yQajU(z7+aLIoaK)q?5*&f!qIhx>*I3-aegw{HW;nGtpl+8uLqA~0>2@2pPo6tx zNuKpypf)bWqbv@*sv{Rxif)^7{8F$HjB6=CklFzqYTtK)Q?KU0#TcKN!(xQkfhxz8 zz`pVtY!X1|GWcT$NP#(QIcyV7;$#7K-g0LMcj3VBf{Gl(EkrDyE(pVfcsX!3T6OWe z`f+ph3veN#Ua4Vj`K^E$IDmS{E>m6h@ngt1)@|z+VO>=!f@*QF@%wZX*YQ1wVsFWk zowd0b=!N;R5n2S2Em7C$9+O`uV-T55u{q+j&aYu-*Tmo8>5jeTL7?O}FLv5K`->0y z9v-f#=M&+Z;FQA--OG&(Jm*t@+eCgP16(vsUqdJ2Fa&po_?kRS4g*l%jtZA=$88yV z{^H3v)LeeH_>iyR1R@$A+6BpI$A;f5=r<XVl0&;m2ph>j3>TI(dvC5V|DkSXr-Cyt z88}c-scx=<3yhDTn7JySE^I7jp$pXIaCKvAJaU*%X2`zyQmB>^4ulIUiBqD6iyY=L z<9~%%;jmaPYT!*fS4IO0&~Xo_=5g@5NsdSGv5IiVT;q5;7SDxslo<a=d#t9%IO8MR z1Co82(P_JkRSfnTzp*{)rWh6QLTf9j6v;&qF;cCC1H}tPR5fk#QFsSz)oQ8^$wyxS z=`L=Y!|~{SC^6&+@$!Kcz<nN@rFSc^Rk5fEd;FPGSFZcxDRKcZ(r&Ggv}F(pS@+r> zZ{L5!ZtIuT&CocLZJZ{JgKhvC414F!=?kpzyr`{{^!P9eKBvbAZ4mf~dJT=#9v_UV zn`;ja4xrkRnF*Tk#|8&KMafZWw1TVZKBaM7e8`nJ-4Q83jasPLbD=LcJu=)WBg4_s zoq9UPaAdfodA8?c-*jq-v`xQ^53a8Jq9j;lr}v0XkK??5A-iC@ogy^+deKrIe%S@o zFv+!>F%R^OS+__RV!2IpVh_=8^^K}I%2cB4BK;MZJrHX6gu~4g7&374nkF~UXxBXH zxXY?ke8ORi0WT!`z#2E!3yaVHgtO&iw84#in%We3qZAzemQ5}FeX;?OYSijxTSP*} zH_~X6ZM4s5H0%4Mk+q}0Po7A}&9dW8)N$?alb7I>?~_?kyW;VEV)3)*`{ZvY^)N_t z@8jPme?UE^<!=f!X++IoHqztM57IfwmN!>X*lja~bsrPKe5oOdV4l&PMswL{U(#qb z>d(k}FPVTfJ%7+!3RjC>x1=z7K`ETCRlhY#<!MkYh%$e02Lw&eA87fPQR+Q?)7D?z z)>q1Jk!KX|(4A5|%49*`*ml#EU#OD{e6Ji~<4wz5*v=8YS6<T8AJEi$f3NT;6o;y_ zg@3l(^~l?bG?gg^hhfO$c$*5oYqd(+hJdIVVfM(|!)dh1Hd^NlDOy@98Q2O9%_v$) z>!bbPXj&d7KygOY9mrOXJiMHynr-}0XJ(V8`Z0M3Nrh{9IGjdv*=V2DXf^7$D9rit zz+)EYeXpiOja%QV5A^zs;rHspqDZtp8gFoPAd*mRCwBIZbfwnzO%C6)U+t}u9v0S$ zO1hzMOydokEIw&|sLQ^&hi-P?*eH=l^ihENsE~nax%ePWXrQrG6Plw5iCmngk4_1r zY`L(7P}kRR$QuS>C)H9!QV&COMbtOIciDr7*_1H`H(_aQm2JGP(|YH2VFqv6>ooyb zrM@5uvBIu4ewjvd*=Q{qtx8=c@!T4p@)y9%-ez=B4d?r+)ZeI{p+I<I8HbE;lmEUn zv3@qO&uL=EzlSX068}MH1Nizdm6`!@<FI2b0ytQ2#BU^0H#@4nAHl}`X^YL7iy~lY zm0D{FW(Wt6^48VhGve;3YCt6E2k|i!U2INUREcZ0s?<GJT;}KZY8_p@-$v>eA9aO( z7im#EpvIvt@Zsd|z~ed(NWHk}v>(A+puKA6SE->^sBqG*8U5Q*k4jccAeZ*|IT>CK zFEbhDun2X=n*y6)WlxBMBl$2P7#{4;g(-z8fysj@fC<9nz=UxM{Stm(noU9w<C(+g z16J;1f^9|5ZU@8So}y=4@Ed!zss^LF8O=@Mxd^Ru%JZtfLUlMQG0vNX8k&vK_*@ks zM+R{OXf!9o>kyaWix9pT*^4Rab_^DCQ^{}=$mS}h0zUtoQ+S}T7zal@<|?Mykztm4 z%!7FUY82mG<4E=3o)36#b`i#P4tQMBSQZ}H;e#jWFJcUMTvGJxHU!7QYgX|WIT-=p z5kMo?9I2*oJ%85g^l@!LGTa0Y+zi_s4ZyKc90nq+hpjnU4!^D9=Z4>A@mmDHUG$UJ zAmGhX;N1fdUk4k0Ht8Sc0IpX4tPk(Q4-QmaA8B46J_tLwxmY-~F?^UYc7>1drzy<# zr83cJK$L|urrhak;~qsYa9K~4xXthwk#>a@f11K4@S~m=m1*N{f|reZ3U=Tc7Vdj+ z0=J7lP2scnQO&(^A7eg?e;=D*?!|FYey`*EB>6nPXWFIq!3ZL?C&La<luBG5cEj3y zmrK8MfP^nKACt_jmm4mTP6!cz$!^VD#S9n!dc}Bhg<UUlw+uflS%C3&g@gQQ5@hub z6d)V;W2`h}>=Tl)bf!Qx53!M-eEeAXDS*{{Y~95WN;E=g4?>wBkX08<VTMMC^dQWF z6=FRD%SGkLAV!Z1tNHR=F&(qQ%d0Chx>PP48C_@=lorGcGO$U6tGWW=9=NeRJ)^7W zKKGKL;08skx>9Mq?ScQZ6vWsVka$s(cx?t7W2DZB#x+Cjfh(~uz=&IPL@i3VmGdWz z=+Y5O)CN1Eeslv>G!pq?A5@p2<IGYqI}S3kRcGX0c$r7)+*P>ZwAv0XdUlgeD=DG} zI@1tTm#OKLsl1+uClGPP7!;Xn6v!0ye_cNvakk3niAae?F}1va1OH&o`s;}0>QAC9 zrI?gX;Rl5fN&lJ=vvkC{>c>41w=v=<)XQ?D`)$S=pkoy(vnN)Qoi1ev=`LZ!Y#lM8 z?&*n0S(0=qJ4p9VM)c^21*)hgB4r2>o5GYCBpqf%uZ~!%{C31Te+_u*6sH$6dO0|G z<x7r+o-;AWX1dTP`FRX32lun1s>A9ax;+S%OhYWh`71i*crk>nQthJ?hn6Eqcs+7Z zp|<MyC6$)!pm*0OWffraKE%N(cKG1dM4r1{GL{_`Ncc&jRY-gm!D~j;|0RUxSN}qN z<A}uWtq5@7&@N_hjCxohidH7owK_p$FewTuB0iXsOYEj>5(`(sXe<}|3lyzVow-di z9%iakO%>uJSQ`Z^5Bw<ASQ(sk09Hh`0n2=h5s-Qq=kfnk&XVNlc<w4Y-Zx2|G15hT z6h1<IlTc?#@-<dwx+I?_masZ0nk}N}BUltaU6OK*m6a~ZwZuYAu_RPu73wM*tI5K` z%$3H<PM72iGH&OPN~lu3tBaD@O_9^Q4rwe;I)`n<vT{gGgcs6ntP{jqL0*?>tbXYn zHWSOrAvJM@qK}k|?T=|;@=0U$Pv@|PSQZbdS1VP8jkV3f0!@uIAf3Z8#IkZofsCk2 zZ7jAB&BHv6<xS_XV|q^x7fKHQ3LoSU8RHy(4vvvD$<U{E4)1!#2xbU6FKYy24Wn8X zfWEpB%-1(-$IL9Wpano*jGNH0-fgr)cTPkksKGpw@Jh3bkHBKI#I;@M3}zh@jR7E* z6~7c8h0)W3j!|mmqZmkb;V9}MkXV#N4v%m3L&xu70$}ZOmcP70eOhwO1<-+vxP}oE zh=^j8As=%k8t5A=d9V`H%VA2@Cj<|(ej0Br@$MjAS$N?%WW@<w*h`S*!4dV<TgV$X zFge;QV3i|*xvaTz6vSXE*!A$rG)7AkeT+mqeUh1l<8+4nPT)n<Q;2DvO5KDcN<mns zGVVV}C8q)z;P5kF&F-7plT59#S87Ztan2Plfzk_S#D=jhQm6~^iT9oypTo$|Y`z^% zOmf29<{HSu9+<cvu$N#@2R;~O!&*ixJn0;8W0&b;gPIzBNbNaN8whGl$<;TdZ4CS8 zpgt)L<ZTj?N@_KSqp2UU+XgRqGss-lR5_|yUbxSRsKrzJaCJ8cZqfu7j$=)fVYCB0 z-1EPpUrUJe;FFqO#@vKfj4;+?p4)f<XhuD3>Vs0DhYIA`<2=mI-UUJ0#2T3u=FG5E z=PU?Kj9JM=A6Z5W-V-50_7Zb2iaF>jEa5~~{)&F>)BX9#1D-pW?#F%XpqW=u**qN= zO-@1*@^T6DherYC#vZ_jS=pLVz8$}*fAfv{GxhO%*8C2=K>Z8u#^E4-L3VsfGD9I7 z3U2W*>Y}%ip~g#&o8T+6WFDljvHBZ11C4BXm@T)*%9a}sX|mq&v}+As6MF{yMYKXl zF60oCu}_z<xNi8(rL-6S+LwF<s6Z*JFM86~@M}0C5dBaDvcCwTpG!VTe>n?lr@-c? zZ6NvDmqg}@5uLgGC)xJ47qmYd6X!d2bI0j+w6M8s@Hy~=H=6~e_Svv-mi*x<Qd2hH zg}^fw0XChv<G>@NUzUMVW5EDfQYC^zg&>KeN%bUN2VB&Lv_-N9bx;x;3qt;g@&hlm zdaEvHX@z<M*+y>+29$L8s#Uj;bz3nm$eE{X&RDz%lRMN5=oDv#XH}{<LGpr};bpnU zUm9R@#wr-Nv9NiT=Ntr))hOrI%Sj67(~VpEa7G9;Sp?FY5w3tKIaE^-b-Cbtj5C58 z0WQ;Hjj$~VXFdU5`72fDWO8N;IRkAKQAsFti!&6Dj{fZun8670;70Rv94|nY21L}W z!bW$BH$lxs3T3u5)fYYOYj_^<C`5+MB@rTY>@&i%D%6jW&;|L$CqRyWtG~@J)FcHS zDJ*QB;W`I;yhSf4+8M8>Es!jvwXz^Du#nTdI!}r^OQnqGOOfD)flDc3X;`Xphcfnp z%WNxQm^_y7demrr(Pm%6Rj{zFgzdH>!eF<Rmy0e^LY|2@&RtpmSzCdYyj^mfE~OCo zvPIxxrSxC8l!ALRa9K)=vw3VUs8ZHp7^n1CTp2-|j_~*beisi$e%0p+$u#zooDT^f z{}2i%b(aAig@GmNW>KZO3E~8=!iXxC_<lP+H0Bo=`2tGkJ66-WsHm(0sSAqA7&7vH zWJELa---%k0G;?i>4npb6av>-1bP?=d6VYFO=%(3e)9#zMR4EGmhz@Y6;{*YB8d7X z@KUQcIfT`vmFlXSgbp|&;|yFC`6CHDPr5kaPwA^KddAmq5{`>Y*ylm<f{YnY#@vm( z{l^lfCNXnq#t4C+MWBZ<$W||H{H)-7Oy>yh>seCl^Cc`q3ByxUuii-B9Mrris8j>t zM)Kr|cwUqz-~B)F<Ze*9AWtTeCsUEF|ClF-rK?QyL<qPo0vF@SHw5QnJQ3Ujng5n2 zZ8wl7O=+H-DM<4~JkR5a3$0Vj$rfM3`~Ox>rh@VXc`}texenR-k9pGCSKkVOQ*KS* zVmw(TI3MGQ;BE)*1vF8vB_}@u4^pewrFrt#3Br@KR)M@o-~|=S_v}9VVj6lps9%sT z739k$R<Zu0(ad(~H`B5r1dgEBBx5hem-}>IdwxG8xEq0M^Cdl+`2-XwMl-hpFSYsv znS#6a@S4W;WQvStz?g!L(M3N}2#gIb`a)UE+b%J&rvz6HrhX(?=Sh-92^#17zJ@nM zk}fvN`4CB6kYn@6v9|%VBq4=ydWd`BQBDr#h|oRu(l|ok8H+%gW9N->N(AR)k|elw zzy&|-uZBF1bkL^_Nv%Gn#V4G4oNOT%#0Pm~`vJ?+J^NXN*BAZ3*YK`z;bL<0{&g4O z0w3c!{w5mcf83rHOE;O88zHdCB9P|7dE=KG1?OX25L|xlQ*Kx?cDEeAz@5i24CZ9< zHR4LG-bRL?)2>jD=EKIXdVFu|-aXBW4}}+7eGUH-UR+Efj+4TLz6iLn^7!w8`yWfh zLg^sWybuEGEdm8n7>Lw)5^=TeRMCcpV5l;~{vsf5#~hUEd~wJHGs4&y6h*dEt51PC z2p2?D)3qXvy%h@s$@vQPE9sqhyT@E4vS<Y*ZB}>@FlSWCXJ@4D-nxM*2pT5lRY=r{ z2+PJDL`usAIj8ue*f1c(Ad+s}yozTBf72j~zj`xRV&4KD1t>$7m!+ImL>JzTZAUon zTv^ao#f3h94fn|nq0+=Wqp__7_h+eyqyTyFt?i=P$l^ZZY`Jfw<J0<S!t55gn5jm; zLzvyd%b7ZE(+?D8w-nG-tY0q7Zpou-yndT7yTwn}XnCFxG~IL!mRoaLHY0KCC|tx? zCpl?FM<Z?8xAs2fL{_Q5wrljtRG%e3SA5_VP)d%7u?)B!0pD{6D~$!T_QR${JY^~r z@9UwM1BynW_|6w!DRCBjC%jfPzii3nz8z(w$|FX;M7f~{@h#NXl;Zhi_y5@lO4#Tg z^mc?1-5~mmQHv@p^iJLRlBb(Bx&d^zpdXbmNxjiR_Y-~As6eHK{#+0Gr!~4C=%<QV zT~GF)--a-A8U-t8@J^^2mFx-3Ltw|a39n)I<`vDi;cRf(D34vbnjZR@n!X$KUl;n5 zdq^CoHdwU|0*NFtTbM+|I3lrz^-z$<6?chmW)CiJ(KT05m_LU5N8JmPIowcYY!Te& z#aGz!MZskQ`WWuFdT@C!sb0py*4YseW3iA~-V@<!L`dwWvUbF7GG<BefAyp?fcR^v z)6K^isScZSYt)Sr0gLFqwSR|aLLQfQ#OC2U4F_$ozm)$`wBtO4I`Ha^+~t|4r+`M7 zYq!C-!YGl%PD#(|?FgC?T)XNv{S}o)NJ9P~A(BcG2zo&i#TXhfJQCq&8Wr!z->VlP zb>In1Qq`yp>A>3!B|c5!1LmzLG+q>+FQ<L3G*@jx8WA;}{mxpkR~W4lYo^4)ZN(2| z@uU_u-p;r7l;Y$>K9RiF00}!E+}MegQ@6lqg$(2Bz1^UQjVueVW{VA^x5JP_by4-# zaX^|84pl@|@<Y8lW(&MHg$#uxd+5|WBpp!|fNGjp3Dpf^Ev7Xr)_huriuDRwx$ilm zM$-BQNJf;8*1w@>5#^@!_hLN*sP>8VAGH2dtZ&i!lvt0@`c<*ML~FfR_tN?Wu|7xZ ze6el?OzbOFw~Olu1{8_)>$E-vNx%#Wtnw<B;jD+P5t>eU`uZ)WAGxZ2CpmuyR(T6c zqbz3d@9F26gh@#ua~9lId*H|9KRuoa{hS1jfbS9YEUj0F@6)v2EY=OQt_FyxW<cW< zXlQCjN$r8Yen;q6+t=?P{qBIDnh1cEML?`jso;+8ZZ!p4q(w&3TOnn}-yAVE>Osfj z=0PcM=U#8@Ms8NW0W<pFgseE$_$LmIk4(N28?q+ioLJ$E58`h8J+9;{@nd-SClk+& z9N~G#kvuP0G|e499Wk@;sW<CZrp;dcZ+J+@5i2&Qd3YsJ;(aIXC>qMkv`@xH<EH(7 z9?8|bHr~E{64xyD_KJE>zcR*eMUedJ{Wp)HWODe;KjF2XLmzN21TS99;@<VU+b~NU z=#E{wW-6~i&tg~y?o5yO$KDE0#__9g^_g6i7{be&MYW+NV^DrBT;xP5%$L;P^|mDB zeDIXSet&Uo=>9i!Z+&;q-tF`Q5<qjClc5n}yi(1B9Wr(IL{#V1xNZCS1UH8IzKtFJ zvf0s`?8QbM2G@)~FW6dq!OsQgeI}xw`8V_soc%wdhqa36zoCcV=khL^Kkkq7m>Jbk z9CK~H&$Y!9&&D-|7_7(%u^{TUsQ#95@eK3*>Gijak7rEioNhR7rS^MvG9?1KE}qRJ zu;m?P_|Z>tY4-BUs^vfLnv6Z}?f;?J#b@As@F|e8SPry%-F&=9I8HVqnF_l*=Qo_3 z=leFd0#9K@Bv(REtZ3C&T_9SGy8kNXkv;R^8dYmMe91W&vfw4zE7Cd@ms-I~Cp|EV zT6IU%N+jJeMAC}+Ex(hwh@~J1QFRp9pxrxPsBaGMJdk-F8PS5?@O-R)O@;d1HOwJ` z_+Sw|F27bh<kZNw_u#eGJ#5K>-<idcALJGf@|x55<%+|R#^RGW<l$_emNUE5J*0hF z2y++?v#>6&V&&VgIhC0U_mV)ro6!?k+FhS#?{v6u`2orCoTaDXdAP7qth)`Jwa^5O z_R^ddk}VBkQqiGq0WFYev-1;@HrtaatAJKfo;%X3Y~DI2O1JP8dU?+)UAlZ1r>D^~ zUl4T7E$vmg??MzYKzEz{C3l^BLUu8Eqx$>i?R+R|5R`!jXLla>t>n?lQ2H6bDml<L z;kC|eAlEieIX9=RsMZ@FSXArB6L&&)PFuD50%RwmR$mDYqxRiUY@Y{RedM=VJs2jp zAd@R*Qcmz+tp>2~MTd>kR=C}JI%QgfC?leBEnz*PpD(bzzj`He=r@l<)i1`1Y|XD$ zUD^gc*zj7d2!D@mp-s-ia)Y0IuT(o4UeWEM%AD`U70OX_Zw+=XSsR4RnVxa&wZ(gu z%<If@#(Wi3m1?0qfQ;V;sfz`n*3Fr2vl{Qe<AgwZ>MRfb&Z!Q4yWPAtqQ6@|aeO>b z|7EA6`BrCaK&mHn4*L!oD}P?xJBv#Y=e6-Al-=b}2vuaB8SHFxf;aNkVZQm2++Y14 zDvH?Eoo!gflu>tV5VoL%>{-m1A8#!A6Ws&u|K=Qh>K*TC<Hk#?n?zUQabQ2^0F1Yd z5EPlQ68(+AcVaP)${8bKk27S_4l&sDM%4e34und?Zj)4+coSTWMk5jx82cQ>D2QE= z+0D~G!g73@iM{aMha_-CzuGx+hu?hMJ#sGYW^iYgKX#olDxHb?UYU42guR?b0C}r2 zynuCXRVV_MTMNz-*BQGqTGw3#RbbpAssQV{4)tR>HAzA9=z7x0jMIl>rL3}<*(z&3 zlCctSsaHkJLUSyo(<5W#1Ma8n#1XqJa3GWFu5HB`lr~^yo4iE+Bm(gipYtIcQNyOi zaxO}GtIS|U;;oM=6TfjrQbDy!Sm>RD7BZyS+ko6U@LF$YZ17bW?~*IA?}B&+&h@1g zmz9NH^)OgAx1t{KG!!%<2DRVT+g;(4i6?F5L*_pA-kY(&=5bwEJw6(riRi|?xWs>C z%9AR0r^*5Sc+n_T9!Ql3Q{_3S@=)&)m86fHUZO<}ORu>g0u_MT*OtCXqVR4i*?u0= zK{~Y4@ARQD;sd(}JHwG>?pXi@dr*(3>O>V`;TM5Or*)L1lUj-)KL#WFc|_{A^!~%W zsp*z_n%~ww-9wIQZPhnB>GUVO!g5Bu#V^E$H-FUuaZ5!4W@-cQ5_<|!^ftItkznt# zvkL6|6W@!+o;3bupb7rA{}X;oeFtvUuqqQjb#+D|Wjd((qkL9n#Dh4eBHokhmehsR zqnFvukm|jsqWEYKE9%xz>UMAH_JFA8Uc^D)sxRsrGIT}A%+~Cja68+oJFx=CMaL#q zcyUjoc?;ies8O@0OHlhXFG}NRpBCVcxg=Ce$&RX<BsXqJ>^$z;?-l<6V}S{+R14fB z!?Sjt;v?})%=mcZMiD%(7RT#qH`igAdPNAtd0?yxcR)acm`7mw>z&L(4z>aKRtHfz zxIJjw8Qhrlns04CI7LS;x!gJ5TQtqPWMua=ca4=>)d3PHm*lR4Z7;wg`c}PyGGLI@ z@B)4#>MbY`b7ml8rXO*O_xM)*6y7A0nif!7m<#OhK~U}dRCREk*(N!!>sPH_pon6n z7A5H$*1uXkd$BNYwfY*uh=VV5Zg(UNZy(x-b6>AG85fCjJK}&w5UrT>Kn6$BdgXC# zmutwk!6`3HE=(B=-84-w2279i+4XfL*wIs89@g1K>+83WQ@g$fjk4<Nh8b3UW&2jY zM^=U#N<P%}^;edJecFZVs~99MRA0{mjrH{mej{oE^l_j1dW4Bs_0@IRMd}N6GLpHy zP<^2;&q0tc7>2s|iwOC@udm&R^Y7~7<_}y$#(@h*@Vg7<J<CnMAPnn)`cLmf^PBgf zNj#_@aYxVTO>})emTi4HG?(K*(#9&&+u<zMgS1x(FN_^DB!ordC1_n3EuD9h!6 zxTi)npguYV6qozsXwN~Z9CwX+c`{-y!DHW4p`%gs5R&J2U9d8O?qmN*$`p?{nn&<a z@sQke{18$+FJ_I}*e5226|b?4@Vhj}Q4{m2ES(}L!CO6kht#p<WSWVt5_6va!A!aD z7nd?j^{dDjrp^{OH6Un=Cs&x8^E|$$(~x+Ed34x3K0QF<P+23QY8a<;)Q@m&1{wvw zh4!I`1%VK<o@34orK0{w%Bh|Wz_*L#?~Yw#P76a7_U9|}mr7$Y?m^4cdUsfAMYztH zXwR!r^QEkTT0DZMQzTg?k%`fcJb}k-nDd2iv?0Y>q-RCObQ67W<v2#S*fo4fZywjE z<s*<IEHq$n>T4K^GU9CmoJ;9np$hxNtn)?HEMyb3a*=^BDlLQy&HWsf4noYRc|`ON zl%~yQ7SEUDd*j8^y}slQSa?&*#Gy!WTG-&LN>*VLt$Exy8<P}67QTM*j{`AeylA?Y zeQ;@x)DdI|0yNTC*F&PNJF!16s;(0fn0UiZveb01MT(h!9BhP=4x-&U)Rnif)X?)E zv8!o4hfk|SSEg_E5D<jwnCr+GQiq;qp0FN@R%*Jge^lMk*T)-GMes3ahRq65$*E}2 zij1I9R%E0Kx(=&Ca5CJS62h^0JUa-@^0`ux%^LLzx*YS45SA&TA@g>;Q5C{qi1sOP zqNnxRc67OZ+m1m}z^r1!!*u(|THm8>7pQiOnLjt8Z?*rr2#I0SfEIYCmT9&}%+jD* zy%l%{{3hT~G;G0I_at;i_^fNlFFwLOhA_D>*Tc+*X@og+&NZYIztvC+Q(?aezfU6m zQ233<?^j?RhpB@39Ksw!okNH6e%LHr8t3dk^#8@*01)-U3>;)r_ld<nc*wdhA&(|Z z3rrIEq4^f<z56G~y4x%dVdV(}$0#>aIud6F#RkvktQQ8k?5d9Mgjgcnk9oPdg`xuR zg`>woXfGafZxrY3)92~syvly=n)G5J>p7_z43>4OH3kQ0>WAdLRupkpE!VJc>Q21_ zX|>0vgKE^GVbU5fL0wDL=XXS7*=hjdbY!Z{P|B#>Xq~g}^L9)>@A2t7Jfr@1M-5(6 zfcL%7I8cm$I4jIk>Q#8?FXpSDsjk2f3{QN=E;CC-e21BSGYcj7IT|#yo;4mjZ_H2n zz`dlyn(s6{D~p&Ko^~yTeu%%*hWAiSm#{H}rck9~&@vIVb+{Hj=%u&|$3ZQ=JW6lP zm)Px~4UP6Ec0blke6U8<V6=#WSE-rWqUZ0U>fNc((3%_b5rVe=s<2Nk<)~629UH9d zb(kGhQloAM6L6PWPr|(_WF}Owm3C|pUIj=BNzTC`Coc_^oIq1Sm9%OHxYM@=p4@`! zjwn-91vnKSX=tAZ;A42+#n9ZL?v+qKt4_p_b6S{6sWPX{#@)7u(L>%^jPc@%(RE)o z0?Y6XeHRrY*Lm;_ePl4RA!`w9ByQv29=yuT^}voy#(bEhftO@KvXLYqx&Fy1J(Xii zr;HacFmOINP9OZ1)Ohm9;29O9R)^G3FHkJF{{<_z7}m+;tZzsEX!94H#iwF<2ESHx zK6_*46B8R_iRsjs_-u#Z*O<$Yr{|cb;@`%`%h6JeUePPzfBGfMSaAx}w!1K0hLnN- zvTw&qVy@i7f;Qjp#6=bN2h8EcgX7mHl$-At?{~xRffJC@JJ$@JI6OWQ<y&&=nhNK{ zs53qgtG-KaSTor*aheNhZ%=2vciM5Ljg@~%+i9oWzB=f}cQr72eF^ICcYLnn2){K+ zG@TqDhNxCuVr#DxPp}48jMeuD_SEP&&EqU2$E2iy(`T;{WS3Ohw8ohji`i0P)oxUE zvSp{!X<o+*MSMHz$(V}DjQtVydui!G^C6%<qVw`NLzx$<gxZwTYTvz;BkVHYWlo(P z_3hZE@q}u|sn|60&e`=pClN<{gt35PdCKOV`rZ&0!E08}uKxwm7$uic{+W)l%8G*2 z@f7!i<Bd)`NbagJ#%pGr(VNQ2`}wxS&67{}04~+RNBZ>QL$PZN)<Z9uvygXb<a~0o z7k2UfShm5-Ogd(v5Pc-bJpJzkXl9Q9P3bK_H(CO8jp0w{Lj=gmM*;JJi#&8bED6Gr z%~V@7nz!|;vW)h`8Tb8{==bIP#ls=V$3=`=-3WjrKOdX9X81%uB>9YU$&@uw=fnsl z`HXAHjcaDQCYHOvkV`I@ksl0{R%B(wrJJE-1pKMD<yk~Q&)~`TJ*E+hPg`?Q=BgMd zV=jf1)-Hp+LXBhlc#H>LE7fS)S8-SuQA258%abY<DqG_43~{C6CFfWqmpJdxzLq1s z3iTH4kFA$Dufm?#7f$Ww+0oQ)?$Al?UL<g_Kqj5q%|uhXnOtf&6H4u75~<xJp4v^a zsof-)+RbdIc5e{439z<()kggA)TWeI>%a??cQax|)RUO3FxPH@y+RdBKDWYNsjj7c z)i#MUmiD#VCC&(mL&}wEfW+A)ak?oAYg;AGyR<*HPvX1{yOdYwQ0JK$OzmcFQ@fdT zYBv*2?PhYR-ApL8n@Oa0lXz-3$)<LbU}`tBo!Wgs;6Xr?_eK1iS6<m4<DKwY4e#ig z#P0*yIZ*teFUiaL%+(7?U=_1tK4Q?mmKii3Uqt(3%%Hh?G3~1)n@>nKpO9=mA=!LF zviXE$^9jl36Ozp*B%4n#o8}`@=(WtO`M4DNG3M1=y$ld<zKw{eZ%a4lPOV}Byn5+( zD2uszc{;)hI|9>Ygr7)+`gDYOb_8aN5xy!Bk~+fBh$^uoFvmzWX0C2b2adJ_Sr7!) zn5&!8fi63c<wM{^b2T{z8_50@l8+HfY849%uglEU>$Gi5L>;gL$rIccHArrqGd4h1 z)@5{DXReNkzc2Y+WHzE+?r+f|+fW91CEEBI!Zb>mQG@{W(|fV3WUgW?=p4*P(P>HV zgOudQ$fZj4McOUt{j^9p%U+@GmN+bGrMgq%uw)T6S>iCS73v0w!$M(~HtdjIJs2}r zZ-QrSYSlsf*c&UXeud-33C|br!OCW9TdHv(Vx$@kfr|t#7RY)}HL`M3jjX{`V^SdN zBh^U8ry9w`R3rJEY9yCZjZ8MxxB;-eej{L7)_VrU`hKv-P+#`_1~`MsMqk3&;Ij7Y z2PhP)NCN|g;pSS>ufW>EL3C%FFZwCM+p{BpI9kdyd`T|!<8-QatQE&L?N})evd9rz zhGQz8y8KG@2<k#+5mtP<jz=QBb@@1}08eb23)JOTq*jr?D#|Jo<$!H6@X*y)X+FkK zewI&y=%iM$zQB3?8qv90>@Jwko(6{#<1$z+Xp^-N_!XjdUR1S~Z%=*rYa;3+YAEY_ zB$LYmZRTB`D%_EkOBIEyGIYB$YuuG;7`&Qw>(v>{kkZ6_5w#2x;}CUyL7|qbmHWvH z@DjmyTftmO#dyVyG%yMc@>3~TQ5D6v#ut!}#J(U)Ge2?EHK)AqXu8+<n0?aAXlSAj zDvH}<XiPt|IUB!R`$yC|cxm0)F+j~hpQQ_eOmf(xDUiDsg$H_3SS$W&rcj_A6fO}8 zbZ81eO@T$UC|uWz!ejKWR9>M#J1D%0mXeYdrzzxU3X~Cx!aKqxeq^8&^pB_);HC9C zC_E|@7@#SHQldDEL>yzGB9TNqx+%Rx%wHt^K`gy`QH$#B8Sm@+8dsr8tJw+yns4S> zHvPzilRR4KZ!g1k5d5j*D81CRFZmp6@G&+3Y*!={3{3N>-4cl(&N5NP_FzY(<bv%U z2(gq4`y1hdsVkKL5?6Y;g{8Ktrdr*eiKJSy|5xHK+1QHPB~xd6x-&$})u@{hDpMC& za=oUiTJ@)UCKrBk&5DJXPN}JiU^%d+3b`myUdUUOI*N{-Dr!!(I>hLhAg@&Iw4rz? z)%<w?Z7pCf?mt0x^sH%)%@7u{25+EO;PQ_kOwNRp;7dsO@|I{nDQ*^vctO6%DZPE< zOQ5*jm;7(?Mfyy-UKTD<*HntC;S_m@0dCS;yIH7Gg4poyljKOr&nS-&7gWu))Y1H` zi)f8ep~oWNHtUI)*8r1j4i>)?10Vj1!Fz8ee-+VsnEXeC_Ga>T=*Dt2_C=fJ3$Yug zriz&rCKsyjg1uGhE2OwD3{@JcR(0@VE2~fog!dlIijM00{w(GT??YIPx>XRpAdZ{z zt|KC6aXDSfeZ1Z_v#aA-sw^3w*>%Ep2#MP+xMY9xqr%4?v4m*xl1LHS2fw2Ek@ymx zn*M@j3Qizml!J7NWpMN$cQ1I`9n(QZzP@CL2<0`}>Iih@VBa8jM0?v^JrN~MQ5ne5 z5$UFpqu3EjxI;d4LHAmVuBCkOqx++*0Uz&=&@;H%Gc2(4|IkpjTriZ%eS;{<f;L_0 zJOU|wO9mpRR#6Us?kBnrKBnZ$7E6Y*%@rY&ToB}B^P_uG(iZ18&*;}}?y(Y?U?tL% zUCvLq&6Q+4^pn?Id5jFNUk<nKV|6&0(K~$EdEu1j-r=$H!VjDmzM&@^YK3WV$K_oW z>ZR{}gt;l1InkL!{iVYzD%1}z7LE(k>rhe67YmQn&8SchJx=Q0p3#F|PqEXVS)uN{ zIQ|_K>Xv_pe`kdnZHISXaiTM0NcR=T1RfRmy1*j>4+}gf@I`?K1nv{qDsY#;7J=IZ zZWFjw;1+?K1#S|!QQ!uF>jkb8*d(w~U{YYcz~us$35*F`EO3!PT!)GLFBG^y;9P;T z1<n!}5jaC&xxg}kr2<O?778p7m@hC-V6MQhz>vTkfkA-*fqsErfgXWwfewLZ-)9cH z1imNml)w`LmB3>Hj|zNU;1Pj`1s)XmqQC<J_X%tjxJzJ*!0iIJ3EV1hi@?nSHwoM* zaD%}00%yO=9ESc$7#5f-Fi&8<zyg7V0!svz3M>;?E^vmxh`?C_XA7JwaDl*u0u6zS z1TGdB6Sz#^a)I>%lL8wBHVIrOaJ|3{0yhfWByh99EdsX++$M0lz!rhK1hxv?C-8v4 z7X=;^cv#>Ofv*cZD)5*<CGdp6Qv%-;*d_3+K*ztxPq#piK(9c*z<|J@z#M@gfnkBU z0`mms3oH;=D6m9eslYOU<pO62j0l`1aJIm?0v8BeD9{kNNZ?|DF@ehjE*DrYFe$K6 zV3WXg0@n-NAaJ9=O#(Ly+#+zRz-<Dz3v3a%OJJ+OeF6^%d{N**frkYi5%{{mqXLf! zR02;3JSFfwfn5U63Ur86y9Ig#dIkCg1_TBL<_HW43=7N^m?tn_V1d9wfh7V<1(pdc z7dS&;MBpreN;JS+u`dv~P@o}jk-)_QV*-~6TrRL)U{YYCz$Ss~1g;mjLEuJ#n*?qa zxJBSrf!hRb7uX_jm%vtm`ve{k_@cmr0uKv3BJg#AM+F`es05x6cuL@V0=opB73g?R z<X@mipjV(@U_f9{V2;3$z_7qvfq4S+1r`V_6j&m#RA8CFa)C1hMg-0hI9uRcfeQpK z6le%sByh37n80NMmkX>Hm=xG3uu0%Lf$Ifs5V%p`CV`s;ZV|Xu;5LEV1-1y>C9qZC zK7j`Wz9{gZz{3KM2z*`OQGv$<DuE{io)Y+;z%GGj1v*5xy9Ig#dIkCg1_TBL<_HW4 z3=7N^m?tn_V1d9wfh7V<1(pdc7dS&;MBprevjxr-xIo}Sfrh|E0v8L630x*{xxjjX zNr8<5n*^={G`p+K6BQNBQ@bMF!#q&8=F~3p&a-unOh^5mtBv}{HaJ!u8Z+~rb67e3 z8Ydn;$X-6^q3lWBUnu?h63#Q22hBUV)RmcXrYhXex4l?_Nf7tA1DCd*J~;M(x$g?c zsqSuEyx-s4bN71Fk#dLI#yc?Y(ctJfE(1QKUxUqFUh_`B`Je|Q*Fzcmi_b0b6nFU^ z<|uRJ83*9~qZ5<rFU4cqvEen*#M{2a-+aaA=GVqOxOo4#LdH(Zltp~lp5v~>UosMB zJojJy?svMwk8U5GF=U<D{tFDE9f{-a`@M;y85sw#h2X#_w5o9PK8EABoWDol=Y}O0 zX6&IgS&i9ira2p@JJ(Eefo|h;S7LugqFt!Jn5K?BhUvHx%bD0O&juh5&!l6m({U2} zoy=jolR0cmhl0irkmd$v0;UnB9%dQLVi*I)EL(dlRrbg+{3`q^{GPz?3H+YI?<xGg zhu`<`+lAjQ{GP?{*=Bb$itflbmC<Ff!|Z0EUxYaVbAq&|f{)L)tz(IM+jZ$JAMT~> z%@MG}j@ul&?rih&qO(>dgnKGs;79L%=Pc5VjG?TZ{v$Z;fEBdtI>AB->tr13WL8M( zgpt=RguM}F8_b$%8DkGMPR~gEL%8>jaPKF*NHcF%oSwS+hb!@pOZeO?=DJ?-Py&?D zs<VG&B;H}o`W}vAN}v}8XuFXiFH8U?2PO=Y2U7qu9R|G40k3oL8^kYewpoj9jgJKI z>&LGjzxddH#EW0d3p|2pj<s(5y8G6R=FtMsGhmj%G?BJlH`6k}fnIeXZj`oHJ)mre zqy75SUEl9NY)^jPm;4%}B3fnsk&{NJ_p^QAqu(DN0Dkxy8sO~s#F{L~YhyOW^|&)O zF4-EpR>zG0)%+vk#XpsJD<d|vCmLehl<08APvR@i&(~<QM8t;MM108&plr#>-!+k# z4g^{!u4TjLAKtSck!W`_&2Rsr``oz|W>&_*#HsEHd(Gik48}|D&Xuv(aU?4**%=#k zdM~yFIbvS^I=bWgQX@KoEB}HMwhq_^!3J;G+}Myys<^BQbiLSsgmN*Bcqa<sYgmd} zw{u-Qu=FGMkhtsJw&T}eTR<=F;rkKO2K;`+M()o}XkCNsCR^jfSAHN`YLKm^GLKhc zze0_9Ch>v${_9TvG4W<b%scLo&4zfVc|e{L;g3IKkNE<W78n}KdiMt)++WB0`~N2H zZNQ_d&OGo*<|8-BzzmRJfB->2u|XRQQNj=zNG3!jFfnDq2m!i99HX`v=JK%;n0PZb zH<zh)`>}Ob+S1gnZtbq^7Q|K{Loh>7A$(M$pbc%RXS`HHNs~dw-2d-AcP0ti?z8{@ zv-|vc$enx7_j%8I-t(UKyzhI^HXR;#ni8AX{{?z^5cK!&(aYXhn0v{&IhtO^X7ah& zPw|+=+v!)pV?O>?<8PP-{&)0}O2>Q}PMer}pQD$&4S$zjCdxREqK@OQ4Sxsm_Y(e| z$KQ|f_XGT4j{PstOR7xKsMB%$39~W(@i#mt|Ig@U;3le<)5`+9{vCSRgtlNTDDl(Z z#rr}0_24f_<NhYSq}2a2ddbU8mNiUO5@Yr^>1Cqq`KV$M{>t#T9DiTI-&*`_#NRgj zVQl^v=p|LAXiww$1N=RYzgH>be}i5g+`rT~zI8*2d3?mY5zl9fjd=6n&CTB)!JEwA zHskFt3y|24mxy^gp0^@z#Jm%4V|kJQ-Zmpi#N33p&+atRRk4`H?E55=pGF#!4T7Py z%VvgO0rniUtIq!cC;FT-lOBj0s-XxAC9AZ;w&=frmeoktO!Z>u@pw?%`gNt!iVnBf zC1@6eO(2Q)Ev$-*l`Zbi@V;na)o0?JE$$(_-?Xr5NSx8)*6?m$Sfz=Xk}Ga1Ziv?( zRTtY1I5l`m)YNjk4dHD_U4*yK@b;N{JKo}Wi>q_=+EiPM9i?Q!F4pc`qPgP5wek8( zP|RA>*={=kwUzYzu=<xI(F`rs*0hIyItwi~kUwahW>zcRpnssH!r)O_di>cf8Pd^| zg|GWhHFf%{^gvO~?5<JT!+*4UGP{+GBYY_cD}#lvgPXZ3UDjw#I91po9W^yxq(wo@ zoz2&Vv-Fc93XLD2=zw@^9oYf3D@)@G+x>T7jrwHaAN@Bs_4+>yGdqH^5p)4T76hGB zzrSw1-sYuXFwyj-pXonw`l++}`V^@Doq@4h;ebpgz)(JRyl?wno1;U_V?lH#Vt^`| z!9)Mp6G(?c5irWpHxXFaRxDb1TK_q@R;Xq_0&nY;#rQy})hTYPX3<;l4f|t1ZpRzK z=_Ndvo0a3z#p&UT7Nhlhfyw6as`-_tfky*NX6+Vlp`?>2X%<$Jt7fTZdbr18G==np z2YEv0tbjk4sSuNoZW;TM-m=PGtyt_8XI8UAP|a0hA(tH|FQT=Y%>*XOu3jkOE#|6c zxe-?!O4Ay{X_!HA^|JBkT)QR;Y&rF!{on>Hn(h03oNpfQsmodi@o?Hfa=ocq932g5 zN=GZjke%p>xk&D9Z3aJ&MAPa_9=V9(*e|b(FxO394HKm^uTZ(Fc^{>ht+2h$qXEC# zqnXC<{HShd9a3yYiW=o;IA&H%LF&8msr2FW@P`(~ltv&DpfE(bd#Um~WMA5NwF?<` zp5zKz>_@i)NlKPapxuR;t-2LlL=n}+UZv*f6A?QUf%nhRSAS#UP#fyrHd#5D&w(Dc zSFzt0Vym*kY6u{Unjv-Md9-X3_EWH<<1-nvRElLaOqAN75&0`5R$SJ`3Ozlk?^va_ zJZ!-z%SaC1b4R#-dI_&Er*VT-+pTH&VRV!i^c0%zt!>xy8b;-<6r`(JD79fiB9BCk z-0;QZIFG@}Qzq`j1ych?b(Xd8%;06EoA?g=_9^Xy8xek7>7ZZZX>}RiVa&(bAf!1R zJ$?T4N2j|pJH`IND@q?y0Tq$kKKOz0bp2SUJzBR3^)~3s30u=w<RfAVj))4+<4wSu zb@1K6Zs}cvazZ%^UKI7LJ8Cy1K?X$w)0;HV{s~K@tGCu)4psbFx;k##*t#*R0VdO% zy@;!AH<tk|>&AK=*mlkgOKn1JJ3BR>pHNs1R$#IKLP9%xH5s&A55l1o5m^rdx2Rzo zTP5Q{54?JzS^Fw}<$~nsHC~#7iLEOfye7Ni17<ghNb&fEx(qgdAqIgxwt(tGz(lqM zuU<V#s;%h+W{Vu`f#sbXx<JqGb<=b2IePBzqUWJE@Z7ZLdolhKy2O9>9_K&7WBlj2 zHvaRASMl@gQ^7v`D55FkGReVyyhnlsc&2~}mG?7>bH?l3a<CV#p<p+z$)fvZm;5#P zg)<R3IEP14zB)sMC&E73Devz^ayd8`;aYaA56l8j3FM69qt3|cF+<)+j*v&W+yOH% z%&o7n-vO;<oG(^9B9B!nd@{^p$2!KerDI(iuZ+1MV7gaq7Sq^{GNiM>KG0$ANkimB zI+Pra7ucU+MJtz^5IW%8oGNBX6`NC0Ns5}G2q@WUqDWY%9yRHRB3-gq7oPXj6xZ5q zO}_)UH8Cqx*~eC+2gS95cpLi|ovEgOIt66vY)<?Z)W-eT@W!MKn?E~<#Ji)<5NT_$ zI<EO&KTH9|qJ8Te_Me~2{^A$2D;??v#no55I!m02s}5_3ELORw7Aw_Krc}nHuWtTK zb$}3Hkwo(#QTd=0ZFS+cOHzd7A?FYx9kVafD(xUzSNtaE<Gz{Shtgl+n$MjHlr0=6 zE;8hp$BV_qq99IZW6(mr;v_nlp|_BCO1&A2j{ibqgPnS`?d-bR=*t)Z5P3W3JT>$H z$U16GV!N`+O7yPAcEA#<I8rWMowUse5(5q4(2gTZC5=AAc|dj;#`)h}pC3+Uq=7)G z1bf1CSUhm(Zw5k*hW?{q2Cyi85&ANq4+|%NU(9C<KbPyyzmrQ{m4N#g4)lfSq}Qv? z_lyQ~!_v<K`eB3+pc61YLoi;aw@4o;;%0R6FbwMg9oGBEl!*Q%VEx0HygNFqr*K#U z#J>VeX&oi_{+`1Z)<Ma&!0M@i4zsw^&B`i3D`=?%cQ+QxC|d>^P2cQ(#HdmBHcqIu z>^@Ar)+Sn%o-Q{SS}%ZCWK&@27i?=tV{Nw~<tg@Cpj)tQXC7M!B*M!LP)yIBqZgm4 znY)oE`aB@a?wEn}olw7ti1Ug|D129=HimwSOWarnMOY_*4=HZ2i;uH(BxdVS1M5Uf z)H-sq<z<r);LF0|j%x_6VPKR#uh%hXYq|r__h?12RP%VP=%p;Q(hq9k)w+N!H{iaV z`;gD;)w281A8Cb2lPzkFhgAbxz0pqzN-?9DR>RH}AfT|#3FU#KR$PGKv+n`ZReK{U zx~lvI92erin!vS>wK$s^ZfklCJtJ-z6UIy)!f)I6YpCE6MXvEwYh6e!HS`*6P2VRR z!{tl$sEvwfvo%SHp!WcAN;i}u&cYDn)!;JfPK4o#pK7)g>61lTC<J{PpsI}GO;p~E zh({*l480=%xMbqt`V;IEI45<g;<}^=N;(d(D^P(KT*d<|5ntHGUIEN?RFN92DHx8s zkqC%HGSXF6b_rE^2{6QCL;n-XS6INw(=;SbxGyNVfLpPEpH-Le1v?81HecTV#)6&0 z7woLz1>24VI}HoAb!*Cs!ZVl`Yp^6^p_DEOazk7eV<fJHthUk~j;1B;MmE{LVZq-D zJ06}qJk}L#vh7a8-%14Su0hc5^$7aLCMO<WcjK{j10K6JBjQ1X?fwSBc5g%2?%kV1 z2Lc$B&=GpxEw(DCvmvhhsTRh;XhyEw(2r)wwQ;4^s<c0Y_Pd0_6Zt2ki#GasMu`=E znhzGxMnB5w%(umR6x=_1Qo6WXu4InO{t5Y)J=Jb@Gtd<j8o8B91}XM7Y_$Mk<JtVv z@~TV5?)-P;+CD|Rq%`y)!IhsPp<3-YB^E)V6Sm8hy-7&)BCb*}A^^Ep^(roVzN^=L zUloI$W1<Fiax$@9IgL&9mFFP!xoG5tD(DGyv7fpKbT1%u=hnW!=uNgc;fSjj#KEA> zB*ZZ&h7z;E0Mo=07?`&CNfQ$jf^bNBpw}>hXKXV_L;{g6<-mRytc&dGmtC>yXICr7 ziwuT5gM06@_vfGXPp{fr*k=0)#nv+PU9RloiZ2LSg*>q}gRVFlVDgV;YtbdlD>JH8 zQ{ir?vz@`2nAS@2dD><XPo*<VtuZ@T_A&kR%<iM-)Jya%V)QKO#dFi1Z2LI+8Dru< zQ+s%z`2zo$-OYb)J%^uXpE3(bqPPsLaeOK+Q>y{rA(zl<rSM=67L16w0&&C#?W4%n zIA}w}+=pkn$<P)t_v4KK$yqs>Gd=stuosYn7m!=a?j<_wL=m8Cb)cu-IuKuCf_w)- zO>`DWDxn0p>k4VgDUFZH*0LFrflIoCpH3Z5O_(lxqF6CeHrYODQ-#D%_-SA{&5dPt zdgRfgfF3jtmeD*|M)P3V=Hv|M8jb#TD%K@jkL553UPScawDgDF@~VEg9T=Z~0zAeR zj(`H8_^N)$7F|Z*=246&cCHOL>*>Gp?}XL24gOw=px{0V#%$=LU?4qm*^S5H(XkE+ z!@GD{e7c|oKvh20SoLY4qgDR{aG2m6Y=<pwHVs^y6nj9mLa2bxpMd2Ewt2<NJTe85 z*ynB+Q_Eq7(x=F;Vo;Ry7E4Qd^Vss1vCWp2aLd?oSmIq-x1e%_OG~WDqpI9ORYC+J zC}JN(2ieN^c~RqA#xFeKPjj{iDC4i(os0htH8XJa0lzhH)s>9-MCqysEGY1Q3N<X= zg6fu>g_G8ZDHSal&ZW(ic_7dbH>?}x6B8|X=VMfQA?No!1IL#9BTWU}feQynRTT+z zz=VPq@=v0(HFgF|GFU+D$YcOF4o4d5IAE@u(ai@41)yaClqgX;ux^++dw~PpPQdoy z#!1be<za6lm(%Sr4tm(7sLs3TV?h}O_5dvq*cbBF=s~ZI4kA9y18yl7V+OO}f`0I7 z1CIB>biMW$>;@*T=j@HVfVK0De-=St7ywEnO1Bn+7uwndW@ncf%_lk_wWSxkgl*}p zk;=GH{Y{`D2X`nbt6<qiQjZ_CL04_zt+wxmm6-8$CCuicV@gAowD?x#ifHLD-WuAH zg7wa@D<@PA2RzMVvHJuH2Kc}jS`5vW!nOsj9NTx>j4rFO4=~n5v-CQQDf8bq)(XBh z%ux84DF<u-Npc|RAH&&Bc8(iQWrbFxVvFE6c352SFH}zBejAjSD|VO%yE`nmmP@gX zJ2RfC+qiyEGgy?P_|Bm3jKsI0JY~SVU=j$3KPymNAlmATp(QC;!XILs#$N}e(cHRp zY3|6@5oiP0gUPL%xXu%*?5zq_o~zO}o3sLcDM;aYaK_+&bJ)Vm39eZ#U=H1C8ry(x zU}<r*Z@s8sTLd?CbOftr0k93{2(tNM?3k~><63^0iVdwusd8gvcqG8jql^*b@ha8~ zgarQ!YX(#EbafKpg6mwhTLT*rp`8Ic3kDu~ra)F`oxiz;u@5wD6n5t5=$&A2vpJ6D z3=@P|3GBKMab41kkb7xZl)%%$wIO;{+>q5^lpC_J9>OXqpSf{F3~1EQKXi75K3ahW z#*wa<c4taQ)Q)n%l5Xu%Tv<|EW{1U4?6L#h##8PaRZh0juzrzR`tfiy>o-~&6k2DV zC_L{tp_^Hd1${Hka+jT8XUc3-v9B4T36d3BmrDLca(PGKSJFR;>PIEu7{TT$mA$lm zi?-lB;J8&Z5x#U-3d$uQdEEoR$)V%3dQ97!E#<H{Ura0=ahA)GoKj$DhB^ZmdjjFj z%|eIMXo%j9nAvDcps+LZxStoN)aFo$Xyr(0%1TrD;Q1-%r9bvS#A)c;jnQnsx$sP8 zSe${xh*r`XFKW0$vK&EXEZpiCz<da>Qc>u<a;2kOc3F#8Wr?O{Tr8<nUKpme>CJEn zF`QqnjBOJfM{Q5;N2{=aL|ieLMxgashFz5~8<@E&rli@9RK{nz`ssMhW?=I$(>6(M z1-6&lHc7GKt*OR#+U7nQH#J)nSHJDW<EC)bRIXKKZIVDih_|SWHT;5q?5z6RWxfZz zL}9|#dGM;&A_T5(@|y!!%RwIu1r_SY4wu!RMZv{lTA+PlbB>xm6mAw&<B(J1O&y1^ ztSj)aRlR&p8gVI$%Nkf<5L00WjFI@|{3LWYqmgN7L^*p1brznVP53hNY`*JKwRg(t z?bh8UM|-`c!;)XFX3%I4c277v_^#uuG6cZyob?I=jFBc>KdG9Oam$v1J1W5V%d7gJ z#c&pwof$l{bJ}h*$Vxr-Vs#slYFZ){5|xiiHJwsr)aM{o22#bA=w<1tz=Bf29px#8 z>*fSlul4Ij7DP_bvmm+KVp6Vxu&-dNKL(?wiMO&(F7XK_7ZkR+=^s;ZI0-s)9mT>F zYsJvh(zW%?Km)w~<TymDH~|>v0BvbAb{HcVgbrtl0RhS&h9vFQ(6$t%)KsV~gGTij zrGu@$s%eD8YAO+E(DE__mLl+Tlw4V30-`tEG<cqB63xZ6)}2Nf%zT3t8O9?+4UOVc zKs3<u>)QGMg|bd`(g-IhYmYiYSuf&z7vZ3+_a`W8k~CzFqN<>_L{F8<ZsW;O6xA4U zv&DB&0ZBrd4FXDplt`#@ifzEEi^yRj+KQ<<JYof(TNFSJYq0j#=!-&EVo_KFVxl+w zia3SM9&Y*qc2lD1ktpqH!TUL0-}=7dI#(gPdWh(E(Wr$M6-ZZ!)^)0>`Nu=9E|B=F zsv6c@GScj6>T1eX?CP;S8<t}6owqt%Sq*b=7?aVGwhYJHSDV+vVI@|GuDTRtS5DFb z(Zm-ByPBJf;fqHH;wkpKgV!$~FZ2xeoalG#0snd_=JMY!#WsmpeewV|WJ@e3c^qt6 z5NyZ3>YpaXmiYA~sA^QI{Ya%2@VwVYYy<kJH~fu=ug7?!MlnWuMrv`Q>ihWukjuF( zSSW>Frb9sO4t9Gk;1w}>Ws9WEsb}!I26oIxcYfiKg0mnGy9Xl$WF@wP^G~c6=j^~O zO3JsbIq#Xfz@xlZ+xMRNIDcX9x!47<??PqYg-6+YwXt{Dh1wYLlxEITc4AxC+3xG- zTaOFaSD@@{UpGFn&*;&=%~-y=+M~}9GsUIZ;J-a=9~A%HY*u0+^6zBpv3x^@=jbCx zU#g9*<ljzwZvgYEna^QkG+1u6g0mA>;PT!@!7NCEq{W8clD3wZSIth1$Eqg7IhZ&h zRGw9r3Q4bQSuL06KpLx#Q5MU)1o<v`U5>oYgo6+=sKiWlt|8ViDflAV;=h@+y-*dE z>!0Ld--joS#!XfY#7f$fV~}n#NSg$M7kLJjSe<^0v;&!DX?L5pXDZ{GQ#IV_)}~r* zhug5Z`8P~HFP)c(#&k=&X3-%HHd&p3`OxALv`Q=6PeXc_hLS*#c7K>`%)m0M6T*`| z<sJX+(r)-ToD0@0#iHi77&UBrPO%2$D@8_e0{f2-QN)5Ti8kfbON-e?DiB@S{kwH* z61dcOX*(A5kqM16TP{N_Yy+!D=oJe66!S&i|7&_4;^zQC@+m5FQNA3c6973#qI)^W z&jf-b@Rx&h2*92Kg9%wz5xWWP(4~$^N<M>Icw_|*y@Z4Ye})o#5ii6t(V63MScnXi z<7jc6hka`dVD%e15d^%F=Zkc-sPu)0%=~<DKR-51RZj53#cxx(<l!QnEM7H_I$TUu zjt)3y1#H0w0S&O0@7S7Z@zydy4)ODikbdGp=M~N0`vlJ>INF?!_LNG8D1kxVOD7w) zJ(&n=IXX9Q(dupEY=@894hLdDaH+>uH~^)c0Z1hdH-&R{z??QM9K!?*eizx`k?otm zz&Rw8#&)<NN(>R?0N$tZBk$*++s{F&AF%B2<KYC%=vHJyJrc|F-y<<2+&weFKf9vB zpN%hDum;gmh|&wudxzgm(Z$2>DbYf_H}W(AP~PaQ;i%MT4&DQweo34QVxf<-vODe= z(vNs-p{qi&bkpEoYGCw3geZLYA8yOA9X=5%6S{PCh`xa+{WvEY#w!(j)8~t&e%nGn z;l*+oM8D4qr1#MU(s%T6UdrA6Re?`^{<6TQkN9%}pKh}SzlLzVKL)%-ze33zkBAdX z6M>ki`e;Rq5v4=N9=&z=Juf-~?=8kfcZgF1kEhHRZzxS>1%MJ+hrnJfD&z@n=Lw!8 zAk%qfBEfr<U?Wa&==UL8)0_1B4M=wBSF|-9qTlVdrv3E0+Sc?7{L1?Y8$v;vTyEQe zqi%WsalEo`V|fDy-V!9t^ZIX8LNxJ0`w8>dPa(i>F_!ApHi1q5DP%v_rFa4<qLnD0 z5GA(J_7nqMv^DL(9G7C%wx|ArVYfA*Zw84i@!NqstMMmPRM>+51j$_BXkH{psEAw! z9s6~lIg9z}Txf4UBKhICytfyxa`4A^+CmkmAi}8tS=dIO!{;C;5Cwp*E%*Zjjv6N! zpCi#?#z>UH=L0SL=2r;Dz#2WF9pwz8rF@9$wl)3I1XJ`OF>~J@5C{FxP~k_15l()n z6VcsBBQZezU9<^(-H{)*HIev~`uszR{9+Y;><pI0-9AzR2=QY|cZeT^y4g7ga*zXH z|MUo_bX18tp=DXTIdPsz<bwkBjC!l0MW{$2y*<4TIMsK+e=3~L%-6d|=xaM-kVDil zf7UbkM^DE_b)pX}yN)2yKjC#>^KgH010W7Bz0s2hmSUT2Ptgs6wx&Pg30}pv=T#p5 zpzT}pi8YBm<bO<xeceAtihaWt{4wGN_$UP;ynASb!T;67XrS*np}KRp&8()F1Yz*b z0AF-^wmiRelM*D<+=TNGL4TDkBY=tii~!6Dj#IA!G}EB)fWfdKKuvuCP38L;DI!FF zhYxXF;L``i2Xu78w?Xw5bJW^p(HEM=Lqrr>5wmNt!tt`PqZSE0td~eKC)yylM8Ppm zc6|us{e-DXH*QGeg;Dmx0U8rQ4mMNNvbY@FgO|jl)HqGXJkod-`oOt0UQCGRfYhOg z^rqO|U}$kvq#Po`06%q&AEIXl7)0}&V663NUab|8A{CpgC--^-hiH~RDCPo*M<pV? zEB067TC^@C!mfQ>VocCU%zna=>ZlO|s&|EkO%5GIs5(nxTi_56WC7^iB-5DF+CU!i zB7E7t8ELN@bC5_3!b3>e!V{RPI)dj=R6%p_cle3$MIE?+yV#HhgN6*Y;Js9G#554j z^XKT083=>ru^m|!S4}i|o&h7XEKY&OXTV9F8A&w7@z(AecA6X=TgE|w;*4SN-I2~E zCd1Rfh<BBkn2P-aA8SK{brd>GmN*3-<aFqI)KDUs?V@D{Z*)k!qVS>CI8mW1Hz*p{ zJ#%D#=01{}9C!~M31h2KEbrwA5>wvYWifJSHjiDQ9tydx<ad-O8U{EdG$Qu%iTYLG zSDJDXLN&if<8xQx&yJJ=r+U}jn-FesIvpp){(MfCPRG<aoM4SiV4Yy8X?J6<?>AH0 zzv^lAiljqr7zIFlErw9xll6J0|8}Sn1Hsbup}JMgfdl@;N4}Z~SN`Mlm^^*>kk+8^ zRXcw#k*EB<U3ltfU=?rBICBSe3j|ifDeq=Trm-K;I18d2;tLRu421|Y*jB{rnFX(Z zivDI2$JbQX73hVq+w>BoL$s!$*;J{26MRDdgTeuqST<g^Xdwc+yUr4F^@GO#03YS< za`yE*5>!^4Q_KVXdD?!8)XNW5_Or{7{Yr-@x4|p!S92xKy=g!@J_0C=y2DN&nK!|> z?M$}SPi@Uhq<De~I%bs)5xp?@CusZWg>A<oDm}-;yb9;|T8zznRff_XD)}xFDV!f} z>55)NfByz2s}scGP4qf=%7?K+Qw8=z<;L;*@i$?aar}Dx)#2|Y{JoF3y07@$bc}X0 zXlJ2@Ba@KpS!|o$z_uxILRROj%L8NVz*>vbYZ&6wfp#nLz;e-cJVVX2o~RIcm<*Dj zbvVr#@^*;tW*Iu1vokuJH{o+ZhjTtm@SVyS%GVgC9FPgUv8lM>q^&7~u+7y)Wov{y z3qq@*^zXnS^I@KFXlJT26mj(sW~pnaJ?t0YA4qrzPxO^NAuHG9lT#!!H7GCiG;h(D zMzu)VAQ%E0W(AT>k~S<r^Yk{2Grr|GT7O1!^%R#-{+)YOi^AWe2YL)aZP%kXj8>p3 zrujY6)ggaXixD&6UfgMsS*2xn=^M;Nir7OpW}BrCriVYU80YH>cE|`N9t>u=$@gPy zLPF*6V(Ev5l`i@0M31y`0aceuu3jjb_U!yl;d$i>l~BYr^enW!$RyoGOJId5pw@Sk zn;N0#YOWht4Naf+3hoi5?XMWKb7%>in*jMsasIKmX1Hzh<-2ARU`Z)~N^z>`q(NZ9 zt1!~4_i1S-klu+FsTq_mVgcpF?(Uk=wud$_Sb+c^ExQ{vVShXhd*V??^4LnT*}x6j z^Vb~at-lKmnHTydACAeiee`F9mRZr(<J4A*6mgpQ2*>LG0O>(Jt=~7{#H+*9I7H{9 zI}dXS0>lE?bi%zklt-tsig&J8EO7xXAU_}xzfp0HsOR9sGZ≪jQQOx@ppLr0->@ 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 diff --git a/src/lib/pyasn1/LICENSE.rst b/src/lib/pyasn1/LICENSE.rst deleted file mode 100644 index 02b45c43..00000000 --- a/src/lib/pyasn1/LICENSE.rst +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2005-2017, Ilya Etingof <etingof@gmail.com> -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. diff --git a/src/lib/pyasn1/__init__.py b/src/lib/pyasn1/__init__.py deleted file mode 100644 index 091f6c3c..00000000 --- a/src/lib/pyasn1/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -import sys - -# http://www.python.org/dev/peps/pep-0396/ -__version__ = '0.2.4' - -if sys.version_info[:2] < (2, 4): - raise RuntimeError('PyASN1 requires Python 2.4 or later') - diff --git a/src/lib/pyasn1/codec/__init__.py b/src/lib/pyasn1/codec/__init__.py deleted file mode 100644 index 8c3066b2..00000000 --- a/src/lib/pyasn1/codec/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# This file is necessary to make this directory a package. diff --git a/src/lib/pyasn1/codec/ber/__init__.py b/src/lib/pyasn1/codec/ber/__init__.py deleted file mode 100644 index 8c3066b2..00000000 --- a/src/lib/pyasn1/codec/ber/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# This file is necessary to make this directory a package. diff --git a/src/lib/pyasn1/codec/ber/decoder.py b/src/lib/pyasn1/codec/ber/decoder.py deleted file mode 100644 index e100e750..00000000 --- a/src/lib/pyasn1/codec/ber/decoder.py +++ /dev/null @@ -1,1048 +0,0 @@ -# -# This file is part of pyasn1 software. -# -# Copyright (c) 2005-2017, Ilya Etingof <etingof@gmail.com> -# License: http://pyasn1.sf.net/license.html -# -from pyasn1.type import base, tag, univ, char, useful, tagmap -from pyasn1.codec.ber import eoo -from pyasn1.compat.octets import oct2int, octs2ints, ints2octs, ensureString, null -from pyasn1.compat.integer import from_bytes -from pyasn1 import debug, error - -__all__ = ['decode'] - - -class AbstractDecoder(object): - protoComponent = None - - def valueDecoder(self, fullSubstrate, substrate, asn1Spec, tagSet, - length, state, decodeFun, substrateFun): - raise error.PyAsn1Error('Decoder not implemented for %s' % (tagSet,)) - - def indefLenValueDecoder(self, fullSubstrate, substrate, asn1Spec, tagSet, - length, state, decodeFun, substrateFun): - raise error.PyAsn1Error('Indefinite length mode decoder not implemented for %s' % (tagSet,)) - - -class AbstractSimpleDecoder(AbstractDecoder): - tagFormats = (tag.tagFormatSimple,) - - @staticmethod - def substrateCollector(asn1Object, substrate, length): - return substrate[:length], substrate[length:] - - def _createComponent(self, asn1Spec, tagSet, value=None): - if tagSet[0].tagFormat not in self.tagFormats: - raise error.PyAsn1Error('Invalid tag format %s for %s' % (tagSet[0], self.protoComponent.prettyPrintType())) - if asn1Spec is None: - return self.protoComponent.clone(value, tagSet) - elif value is None: - return asn1Spec - else: - return asn1Spec.clone(value) - - -class AbstractConstructedDecoder(AbstractDecoder): - tagFormats = (tag.tagFormatConstructed,) - - # noinspection PyUnusedLocal - def _createComponent(self, asn1Spec, tagSet, value=None): - if tagSet[0].tagFormat not in self.tagFormats: - raise error.PyAsn1Error('Invalid tag format %s for %s' % (tagSet[0], self.protoComponent.prettyPrintType())) - if asn1Spec is None: - return self.protoComponent.clone(tagSet) - else: - return asn1Spec.clone() - - -class ExplicitTagDecoder(AbstractSimpleDecoder): - protoComponent = univ.Any('') - tagFormats = (tag.tagFormatConstructed,) - - def valueDecoder(self, fullSubstrate, substrate, asn1Spec, tagSet, - length, state, decodeFun, substrateFun): - if substrateFun: - return substrateFun( - self._createComponent(asn1Spec, tagSet, ''), - substrate, length - ) - head, tail = substrate[:length], substrate[length:] - value, _ = decodeFun(head, asn1Spec, tagSet, length) - return value, tail - - def indefLenValueDecoder(self, fullSubstrate, substrate, asn1Spec, tagSet, - length, state, decodeFun, substrateFun): - if substrateFun: - return substrateFun( - self._createComponent(asn1Spec, tagSet, ''), - substrate, length - ) - value, substrate = decodeFun(substrate, asn1Spec, tagSet, length) - terminator, substrate = decodeFun(substrate, allowEoo=True) - if terminator is eoo.endOfOctets: - return value, substrate - else: - raise error.PyAsn1Error('Missing end-of-octets terminator') - - -explicitTagDecoder = ExplicitTagDecoder() - - -class IntegerDecoder(AbstractSimpleDecoder): - protoComponent = univ.Integer(0) - - def valueDecoder(self, fullSubstrate, substrate, asn1Spec, tagSet, length, - state, decodeFun, substrateFun): - head, tail = substrate[:length], substrate[length:] - - if not head: - return self._createComponent(asn1Spec, tagSet, 0), tail - - value = from_bytes(head, signed=True) - - return self._createComponent(asn1Spec, tagSet, value), tail - - -class BooleanDecoder(IntegerDecoder): - protoComponent = univ.Boolean(0) - - def _createComponent(self, asn1Spec, tagSet, value=None): - return IntegerDecoder._createComponent(self, asn1Spec, tagSet, value and 1 or 0) - - -class BitStringDecoder(AbstractSimpleDecoder): - protoComponent = univ.BitString(()) - tagFormats = (tag.tagFormatSimple, tag.tagFormatConstructed) - supportConstructedForm = True - - def valueDecoder(self, fullSubstrate, substrate, asn1Spec, tagSet, length, - state, decodeFun, substrateFun): - head, tail = substrate[:length], substrate[length:] - if tagSet[0].tagFormat == tag.tagFormatSimple: # XXX what tag to check? - if not head: - raise error.PyAsn1Error('Empty substrate') - trailingBits = oct2int(head[0]) - if trailingBits > 7: - raise error.PyAsn1Error( - 'Trailing bits overflow %s' % trailingBits - ) - head = head[1:] - value = self.protoComponent.fromOctetString(head, trailingBits) - return self._createComponent(asn1Spec, tagSet, value), tail - - if not self.supportConstructedForm: - raise error.PyAsn1Error('Constructed encoding form prohibited at %s' % self.__class__.__name__) - - bitString = self._createComponent(asn1Spec, tagSet) - - if substrateFun: - return substrateFun(bitString, substrate, length) - - while head: - component, head = decodeFun(head, self.protoComponent) - bitString += component - - return bitString, tail - - def indefLenValueDecoder(self, fullSubstrate, substrate, asn1Spec, tagSet, - length, state, decodeFun, substrateFun): - bitString = self._createComponent(asn1Spec, tagSet) - - if substrateFun: - return substrateFun(bitString, substrate, length) - - while substrate: - component, substrate = decodeFun(substrate, self.protoComponent, allowEoo=True) - if component is eoo.endOfOctets: - break - - bitString += component - - else: - raise error.SubstrateUnderrunError('No EOO seen before substrate ends') - - return bitString, substrate - - -class OctetStringDecoder(AbstractSimpleDecoder): - protoComponent = univ.OctetString('') - tagFormats = (tag.tagFormatSimple, tag.tagFormatConstructed) - supportConstructedForm = True - - def valueDecoder(self, fullSubstrate, substrate, asn1Spec, tagSet, length, - state, decodeFun, substrateFun): - head, tail = substrate[:length], substrate[length:] - - if substrateFun: - return substrateFun(self._createComponent(asn1Spec, tagSet), - substrate, length) - - if tagSet[0].tagFormat == tag.tagFormatSimple: # XXX what tag to check? - return self._createComponent(asn1Spec, tagSet, head), tail - - if not self.supportConstructedForm: - raise error.PyAsn1Error('Constructed encoding form prohibited at %s' % self.__class__.__name__) - - # All inner fragments are of the same type, treat them as octet string - substrateFun = self.substrateCollector - - header = null - - while head: - component, head = decodeFun(head, self.protoComponent, - substrateFun=substrateFun) - header += component - - return self._createComponent(asn1Spec, tagSet, header), tail - - def indefLenValueDecoder(self, fullSubstrate, substrate, asn1Spec, tagSet, - length, state, decodeFun, substrateFun): - if substrateFun and substrateFun is not self.substrateCollector: - asn1Object = self._createComponent(asn1Spec, tagSet) - return substrateFun(asn1Object, substrate, length) - - # All inner fragments are of the same type, treat them as octet string - substrateFun = self.substrateCollector - - header = null - - while substrate: - component, substrate = decodeFun(substrate, - self.protoComponent, - substrateFun=substrateFun, - allowEoo=True) - if component is eoo.endOfOctets: - break - header += component - else: - raise error.SubstrateUnderrunError( - 'No EOO seen before substrate ends' - ) - return self._createComponent(asn1Spec, tagSet, header), substrate - - -class NullDecoder(AbstractSimpleDecoder): - protoComponent = univ.Null('') - - def valueDecoder(self, fullSubstrate, substrate, asn1Spec, tagSet, - length, state, decodeFun, substrateFun): - head, tail = substrate[:length], substrate[length:] - component = self._createComponent(asn1Spec, tagSet) - if head: - raise error.PyAsn1Error('Unexpected %d-octet substrate for Null' % length) - return component, tail - - -class ObjectIdentifierDecoder(AbstractSimpleDecoder): - protoComponent = univ.ObjectIdentifier(()) - - def valueDecoder(self, fullSubstrate, substrate, asn1Spec, tagSet, length, - state, decodeFun, substrateFun): - head, tail = substrate[:length], substrate[length:] - if not head: - raise error.PyAsn1Error('Empty substrate') - - head = octs2ints(head) - - oid = () - index = 0 - substrateLen = len(head) - while index < substrateLen: - subId = head[index] - index += 1 - if subId < 128: - oid = oid + (subId,) - elif subId > 128: - # Construct subid from a number of octets - nextSubId = subId - subId = 0 - while nextSubId >= 128: - subId = (subId << 7) + (nextSubId & 0x7F) - if index >= substrateLen: - raise error.SubstrateUnderrunError( - 'Short substrate for sub-OID past %s' % (oid,) - ) - nextSubId = head[index] - index += 1 - oid += ((subId << 7) + nextSubId,) - elif subId == 128: - # ASN.1 spec forbids leading zeros (0x80) in OID - # encoding, tolerating it opens a vulnerability. See - # http://www.cosic.esat.kuleuven.be/publications/article-1432.pdf - # page 7 - raise error.PyAsn1Error('Invalid octet 0x80 in OID encoding') - - # Decode two leading arcs - if 0 <= oid[0] <= 39: - oid = (0,) + oid - elif 40 <= oid[0] <= 79: - oid = (1, oid[0] - 40) + oid[1:] - elif oid[0] >= 80: - oid = (2, oid[0] - 80) + oid[1:] - else: - raise error.PyAsn1Error('Malformed first OID octet: %s' % head[0]) - - return self._createComponent(asn1Spec, tagSet, oid), tail - - -class RealDecoder(AbstractSimpleDecoder): - protoComponent = univ.Real() - - def valueDecoder(self, fullSubstrate, substrate, asn1Spec, tagSet, - length, state, decodeFun, substrateFun): - head, tail = substrate[:length], substrate[length:] - if not head: - return self._createComponent(asn1Spec, tagSet, 0.0), tail - fo = oct2int(head[0]) - head = head[1:] - if fo & 0x80: # binary encoding - if not head: - raise error.PyAsn1Error("Incomplete floating-point value") - n = (fo & 0x03) + 1 - if n == 4: - n = oct2int(head[0]) - head = head[1:] - eo, head = head[:n], head[n:] - if not eo or not head: - raise error.PyAsn1Error('Real exponent screwed') - e = oct2int(eo[0]) & 0x80 and -1 or 0 - while eo: # exponent - e <<= 8 - e |= oct2int(eo[0]) - eo = eo[1:] - b = fo >> 4 & 0x03 # base bits - if b > 2: - raise error.PyAsn1Error('Illegal Real base') - if b == 1: # encbase = 8 - e *= 3 - elif b == 2: # encbase = 16 - e *= 4 - p = 0 - while head: # value - p <<= 8 - p |= oct2int(head[0]) - head = head[1:] - if fo & 0x40: # sign bit - p = -p - sf = fo >> 2 & 0x03 # scale bits - p *= 2 ** sf - value = (p, 2, e) - elif fo & 0x40: # infinite value - value = fo & 0x01 and '-inf' or 'inf' - elif fo & 0xc0 == 0: # character encoding - if not head: - raise error.PyAsn1Error("Incomplete floating-point value") - try: - if fo & 0x3 == 0x1: # NR1 - value = (int(head), 10, 0) - elif fo & 0x3 == 0x2: # NR2 - value = float(head) - elif fo & 0x3 == 0x3: # NR3 - value = float(head) - else: - raise error.SubstrateUnderrunError( - 'Unknown NR (tag %s)' % fo - ) - except ValueError: - raise error.SubstrateUnderrunError( - 'Bad character Real syntax' - ) - else: - raise error.SubstrateUnderrunError( - 'Unknown encoding (tag %s)' % fo - ) - return self._createComponent(asn1Spec, tagSet, value), tail - - -class SequenceAndSetDecoderBase(AbstractConstructedDecoder): - protoComponent = None - orderedComponents = False - - def _getComponentTagMap(self, asn1Object, idx): - raise NotImplementedError() - - def _getComponentPositionByType(self, asn1Object, tagSet, idx): - raise NotImplementedError() - - def valueDecoder(self, fullSubstrate, substrate, asn1Spec, tagSet, - length, state, decodeFun, substrateFun): - head, tail = substrate[:length], substrate[length:] - asn1Object = self._createComponent(asn1Spec, tagSet) - if substrateFun: - return substrateFun(asn1Object, substrate, length) - - namedTypes = asn1Object.getComponentType() - - if not self.orderedComponents or not namedTypes or namedTypes.hasOptionalOrDefault: - seenIndices = set() - idx = 0 - while head: - asn1Spec = self._getComponentTagMap(asn1Object, idx) - component, head = decodeFun(head, asn1Spec) - idx = self._getComponentPositionByType( - asn1Object, component.effectiveTagSet, idx - ) - - asn1Object.setComponentByPosition( - idx, component, - verifyConstraints=False, - matchTags=False, matchConstraints=False - ) - seenIndices.add(idx) - idx += 1 - - if namedTypes and not namedTypes.requiredComponents.issubset(seenIndices): - raise error.PyAsn1Error('ASN.1 object %s has uninitialized components' % asn1Object.__class__.__name__) - else: - for idx, asn1Spec in enumerate(namedTypes.values()): - component, head = decodeFun(head, asn1Spec) - asn1Object.setComponentByPosition( - idx, component, - verifyConstraints=False, - matchTags=False, matchConstraints=False - ) - - if not namedTypes: - asn1Object.verifySizeSpec() - - return asn1Object, tail - - def indefLenValueDecoder(self, fullSubstrate, substrate, asn1Spec, tagSet, - length, state, decodeFun, substrateFun): - asn1Object = self._createComponent(asn1Spec, tagSet) - if substrateFun: - return substrateFun(asn1Object, substrate, length) - - namedTypes = asn1Object.getComponentType() - - if not namedTypes or namedTypes.hasOptionalOrDefault: - seenIndices = set() - idx = 0 - while substrate: - asn1Spec = self._getComponentTagMap(asn1Object, idx) - component, substrate = decodeFun(substrate, asn1Spec, allowEoo=True) - if component is eoo.endOfOctets: - break - idx = self._getComponentPositionByType( - asn1Object, component.effectiveTagSet, idx - ) - - asn1Object.setComponentByPosition( - idx, component, - verifyConstraints=False, - matchTags=False, matchConstraints=False - ) - seenIndices.add(idx) - idx += 1 - - else: - raise error.SubstrateUnderrunError( - 'No EOO seen before substrate ends' - ) - - if namedTypes and not namedTypes.requiredComponents.issubset(seenIndices): - raise error.PyAsn1Error('ASN.1 object %s has uninitialized components' % asn1Object.__class__.__name__) - else: - for idx, asn1Spec in enumerate(namedTypes.values()): - component, substrate = decodeFun(substrate, asn1Spec) - - asn1Object.setComponentByPosition( - idx, component, - verifyConstraints=False, - matchTags=False, matchConstraints=False - ) - - component, substrate = decodeFun(substrate, eoo.endOfOctets, allowEoo=True) - if component is not eoo.endOfOctets: - raise error.SubstrateUnderrunError( - 'No EOO seen before substrate ends' - ) - - if not namedTypes: - asn1Object.verifySizeSpec() - - return asn1Object, substrate - -class SequenceDecoder(SequenceAndSetDecoderBase): - protoComponent = univ.Sequence() - orderedComponents = True - - def _getComponentTagMap(self, asn1Object, idx): - try: - return asn1Object.getComponentTagMapNearPosition(idx) - except error.PyAsn1Error: - return - - def _getComponentPositionByType(self, asn1Object, tagSet, idx): - return asn1Object.getComponentPositionNearType(tagSet, idx) - - -class SequenceOfDecoder(AbstractConstructedDecoder): - protoComponent = univ.SequenceOf() - - def valueDecoder(self, fullSubstrate, substrate, asn1Spec, tagSet, - length, state, decodeFun, substrateFun): - head, tail = substrate[:length], substrate[length:] - asn1Object = self._createComponent(asn1Spec, tagSet) - if substrateFun: - return substrateFun(asn1Object, substrate, length) - asn1Spec = asn1Object.getComponentType() - idx = 0 - while head: - component, head = decodeFun(head, asn1Spec) - asn1Object.setComponentByPosition( - idx, component, - verifyConstraints=False, - matchTags=False, matchConstraints=False - ) - idx += 1 - asn1Object.verifySizeSpec() - return asn1Object, tail - - def indefLenValueDecoder(self, fullSubstrate, substrate, asn1Spec, tagSet, - length, state, decodeFun, substrateFun): - asn1Object = self._createComponent(asn1Spec, tagSet) - if substrateFun: - return substrateFun(asn1Object, substrate, length) - asn1Spec = asn1Object.getComponentType() - idx = 0 - while substrate: - component, substrate = decodeFun(substrate, asn1Spec, allowEoo=True) - if component is eoo.endOfOctets: - break - asn1Object.setComponentByPosition( - idx, component, - verifyConstraints=False, - matchTags=False, matchConstraints=False - ) - idx += 1 - else: - raise error.SubstrateUnderrunError( - 'No EOO seen before substrate ends' - ) - asn1Object.verifySizeSpec() - return asn1Object, substrate - - -class SetDecoder(SequenceAndSetDecoderBase): - protoComponent = univ.Set() - orderedComponents = False - - def _getComponentTagMap(self, asn1Object, idx): - return asn1Object.componentTagMap - - def _getComponentPositionByType(self, asn1Object, tagSet, idx): - nextIdx = asn1Object.getComponentPositionByType(tagSet) - if nextIdx is None: - return idx - else: - return nextIdx - - -class SetOfDecoder(SequenceOfDecoder): - protoComponent = univ.SetOf() - - -class ChoiceDecoder(AbstractConstructedDecoder): - protoComponent = univ.Choice() - tagFormats = (tag.tagFormatSimple, tag.tagFormatConstructed) - - def valueDecoder(self, fullSubstrate, substrate, asn1Spec, tagSet, - length, state, decodeFun, substrateFun): - head, tail = substrate[:length], substrate[length:] - asn1Object = self._createComponent(asn1Spec, tagSet) - if substrateFun: - return substrateFun(asn1Object, substrate, length) - if asn1Object.tagSet == tagSet: # explicitly tagged Choice - component, head = decodeFun( - head, asn1Object.componentTagMap - ) - else: - component, head = decodeFun( - head, asn1Object.componentTagMap, tagSet, length, state - ) - effectiveTagSet = component.effectiveTagSet - asn1Object.setComponentByType( - effectiveTagSet, component, - verifyConstraints=False, - matchTags=False, matchConstraints=False, - innerFlag=False - ) - return asn1Object, tail - - def indefLenValueDecoder(self, fullSubstrate, substrate, asn1Spec, tagSet, - length, state, decodeFun, substrateFun): - asn1Object = self._createComponent(asn1Spec, tagSet) - if substrateFun: - return substrateFun(asn1Object, substrate, length) - if asn1Object.tagSet == tagSet: # explicitly tagged Choice - component, substrate = decodeFun(substrate, asn1Object.componentTagMap) - # eat up EOO marker - eooMarker, substrate = decodeFun(substrate, allowEoo=True) - if eooMarker is not eoo.endOfOctets: - raise error.PyAsn1Error('No EOO seen before substrate ends') - else: - component, substrate = decodeFun( - substrate, asn1Object.componentTagMap, tagSet, length, state - ) - effectiveTagSet = component.effectiveTagSet - asn1Object.setComponentByType( - effectiveTagSet, component, - verifyConstraints=False, - matchTags=False, matchConstraints=False, - innerFlag=False - ) - return asn1Object, substrate - - -class AnyDecoder(AbstractSimpleDecoder): - protoComponent = univ.Any() - tagFormats = (tag.tagFormatSimple, tag.tagFormatConstructed) - - def valueDecoder(self, fullSubstrate, substrate, asn1Spec, tagSet, - length, state, decodeFun, substrateFun): - if asn1Spec is None or asn1Spec is not None and tagSet != asn1Spec.tagSet: - # untagged Any container, recover inner header substrate - length += len(fullSubstrate) - len(substrate) - substrate = fullSubstrate - if substrateFun: - return substrateFun(self._createComponent(asn1Spec, tagSet), - substrate, length) - head, tail = substrate[:length], substrate[length:] - return self._createComponent(asn1Spec, tagSet, value=head), tail - - def indefLenValueDecoder(self, fullSubstrate, substrate, asn1Spec, tagSet, - length, state, decodeFun, substrateFun): - if asn1Spec is not None and tagSet == asn1Spec.tagSet: - # tagged Any type -- consume header substrate - header = null - else: - # untagged Any, recover header substrate - header = fullSubstrate[:-len(substrate)] - - # Any components do not inherit initial tag - asn1Spec = self.protoComponent - - if substrateFun and substrateFun is not self.substrateCollector: - asn1Object = self._createComponent(asn1Spec, tagSet) - return substrateFun(asn1Object, header + substrate, length + len(header)) - - # All inner fragments are of the same type, treat them as octet string - substrateFun = self.substrateCollector - - while substrate: - component, substrate = decodeFun(substrate, asn1Spec, - substrateFun=substrateFun, - allowEoo=True) - if component is eoo.endOfOctets: - break - header += component - else: - raise error.SubstrateUnderrunError( - 'No EOO seen before substrate ends' - ) - if substrateFun: - return header, substrate - else: - return self._createComponent(asn1Spec, tagSet, header), substrate - - -# character string types -class UTF8StringDecoder(OctetStringDecoder): - protoComponent = char.UTF8String() - - -class NumericStringDecoder(OctetStringDecoder): - protoComponent = char.NumericString() - - -class PrintableStringDecoder(OctetStringDecoder): - protoComponent = char.PrintableString() - - -class TeletexStringDecoder(OctetStringDecoder): - protoComponent = char.TeletexString() - - -class VideotexStringDecoder(OctetStringDecoder): - protoComponent = char.VideotexString() - - -class IA5StringDecoder(OctetStringDecoder): - protoComponent = char.IA5String() - - -class GraphicStringDecoder(OctetStringDecoder): - protoComponent = char.GraphicString() - - -class VisibleStringDecoder(OctetStringDecoder): - protoComponent = char.VisibleString() - - -class GeneralStringDecoder(OctetStringDecoder): - protoComponent = char.GeneralString() - - -class UniversalStringDecoder(OctetStringDecoder): - protoComponent = char.UniversalString() - - -class BMPStringDecoder(OctetStringDecoder): - protoComponent = char.BMPString() - - -# "useful" types -class ObjectDescriptorDecoder(OctetStringDecoder): - protoComponent = useful.ObjectDescriptor() - - -class GeneralizedTimeDecoder(OctetStringDecoder): - protoComponent = useful.GeneralizedTime() - - -class UTCTimeDecoder(OctetStringDecoder): - protoComponent = useful.UTCTime() - - -tagMap = { - univ.Integer.tagSet: IntegerDecoder(), - univ.Boolean.tagSet: BooleanDecoder(), - univ.BitString.tagSet: BitStringDecoder(), - univ.OctetString.tagSet: OctetStringDecoder(), - univ.Null.tagSet: NullDecoder(), - univ.ObjectIdentifier.tagSet: ObjectIdentifierDecoder(), - univ.Enumerated.tagSet: IntegerDecoder(), - univ.Real.tagSet: RealDecoder(), - univ.Sequence.tagSet: SequenceDecoder(), # conflicts with SequenceOf - univ.Set.tagSet: SetDecoder(), # conflicts with SetOf - univ.Choice.tagSet: ChoiceDecoder(), # conflicts with Any - # character string types - char.UTF8String.tagSet: UTF8StringDecoder(), - char.NumericString.tagSet: NumericStringDecoder(), - char.PrintableString.tagSet: PrintableStringDecoder(), - char.TeletexString.tagSet: TeletexStringDecoder(), - char.VideotexString.tagSet: VideotexStringDecoder(), - char.IA5String.tagSet: IA5StringDecoder(), - char.GraphicString.tagSet: GraphicStringDecoder(), - char.VisibleString.tagSet: VisibleStringDecoder(), - char.GeneralString.tagSet: GeneralStringDecoder(), - char.UniversalString.tagSet: UniversalStringDecoder(), - char.BMPString.tagSet: BMPStringDecoder(), - # useful types - useful.ObjectDescriptor.tagSet: ObjectDescriptorDecoder(), - useful.GeneralizedTime.tagSet: GeneralizedTimeDecoder(), - useful.UTCTime.tagSet: UTCTimeDecoder() -} - -# Type-to-codec map for ambiguous ASN.1 types -typeMap = { - univ.Set.typeId: SetDecoder(), - univ.SetOf.typeId: SetOfDecoder(), - univ.Sequence.typeId: SequenceDecoder(), - univ.SequenceOf.typeId: SequenceOfDecoder(), - univ.Choice.typeId: ChoiceDecoder(), - univ.Any.typeId: AnyDecoder() -} - -# Put in non-ambiguous types for faster codec lookup -for typeDecoder in tagMap.values(): - typeId = typeDecoder.protoComponent.__class__.typeId - if typeId is not None and typeId not in typeMap: - typeMap[typeId] = typeDecoder - - -(stDecodeTag, stDecodeLength, stGetValueDecoder, stGetValueDecoderByAsn1Spec, - stGetValueDecoderByTag, stTryAsExplicitTag, stDecodeValue, - stDumpRawValue, stErrorCondition, stStop) = [x for x in range(10)] - - -class Decoder(object): - defaultErrorState = stErrorCondition - # defaultErrorState = stDumpRawValue - defaultRawDecoder = AnyDecoder() - supportIndefLength = True - - # noinspection PyDefaultArgument - def __init__(self, tagMap, typeMap={}): - self.__tagMap = tagMap - self.__typeMap = typeMap - # Tag & TagSet objects caches - self.__tagCache = {} - self.__tagSetCache = {} - self.__eooSentinel = ints2octs((0, 0)) - - def __call__(self, substrate, asn1Spec=None, tagSet=None, - length=None, state=stDecodeTag, recursiveFlag=True, - substrateFun=None, allowEoo=False): - if debug.logger and debug.logger & debug.flagDecoder: - debug.logger('decoder called at scope %s with state %d, working with up to %d octets of substrate: %s' % (debug.scope, state, len(substrate), debug.hexdump(substrate))) - - substrate = ensureString(substrate) - - # Look for end-of-octets sentinel - if allowEoo and self.supportIndefLength: - if substrate.startswith(self.__eooSentinel): - debug.logger and debug.logger & debug.flagDecoder and debug.logger('end-of-octets sentinel found') - return eoo.endOfOctets, substrate[2:] - - value = base.noValue - - fullSubstrate = substrate - while state != stStop: - if state == stDecodeTag: - if not substrate: - raise error.SubstrateUnderrunError( - 'Short octet stream on tag decoding' - ) - # Decode tag - isShortTag = True - firstOctet = substrate[0] - substrate = substrate[1:] - try: - lastTag = self.__tagCache[firstOctet] - except KeyError: - integerTag = oct2int(firstOctet) - tagClass = integerTag & 0xC0 - tagFormat = integerTag & 0x20 - tagId = integerTag & 0x1F - if tagId == 0x1F: - isShortTag = False - lengthOctetIdx = 0 - tagId = 0 - try: - while True: - integerTag = oct2int(substrate[lengthOctetIdx]) - lengthOctetIdx += 1 - tagId <<= 7 - tagId |= (integerTag & 0x7F) - if not integerTag & 0x80: - break - substrate = substrate[lengthOctetIdx:] - except IndexError: - raise error.SubstrateUnderrunError( - 'Short octet stream on long tag decoding' - ) - lastTag = tag.Tag( - tagClass=tagClass, tagFormat=tagFormat, tagId=tagId - ) - if isShortTag: - # cache short tags - self.__tagCache[firstOctet] = lastTag - if tagSet is None: - if isShortTag: - try: - tagSet = self.__tagSetCache[firstOctet] - except KeyError: - # base tag not recovered - tagSet = tag.TagSet((), lastTag) - self.__tagSetCache[firstOctet] = tagSet - else: - tagSet = tag.TagSet((), lastTag) - else: - tagSet = lastTag + tagSet - state = stDecodeLength - debug.logger and debug.logger & debug.flagDecoder and debug.logger( - 'tag decoded into %s, decoding length' % tagSet) - if state == stDecodeLength: - # Decode length - if not substrate: - raise error.SubstrateUnderrunError( - 'Short octet stream on length decoding' - ) - firstOctet = oct2int(substrate[0]) - if firstOctet < 128: - size = 1 - length = firstOctet - elif firstOctet == 128: - size = 1 - length = -1 - else: - size = firstOctet & 0x7F - # encoded in size bytes - encodedLength = octs2ints(substrate[1:size + 1]) - # missing check on maximum size, which shouldn't be a - # problem, we can handle more than is possible - if len(encodedLength) != size: - raise error.SubstrateUnderrunError( - '%s<%s at %s' % (size, len(encodedLength), tagSet) - ) - length = 0 - for lengthOctet in encodedLength: - length <<= 8 - length |= lengthOctet - size += 1 - substrate = substrate[size:] - if length == -1: - if not self.supportIndefLength: - raise error.PyAsn1Error('Indefinite length encoding not supported by this codec') - else: - if len(substrate) < length: - raise error.SubstrateUnderrunError('%d-octet short' % (length - len(substrate))) - state = stGetValueDecoder - debug.logger and debug.logger & debug.flagDecoder and debug.logger( - 'value length decoded into %d, payload substrate is: %s' % (length, debug.hexdump(length == -1 and substrate or substrate[:length])) - ) - if state == stGetValueDecoder: - if asn1Spec is None: - state = stGetValueDecoderByTag - else: - state = stGetValueDecoderByAsn1Spec - # - # There're two ways of creating subtypes in ASN.1 what influences - # decoder operation. These methods are: - # 1) Either base types used in or no IMPLICIT tagging has been - # applied on subtyping. - # 2) Subtype syntax drops base type information (by means of - # IMPLICIT tagging. - # The first case allows for complete tag recovery from substrate - # while the second one requires original ASN.1 type spec for - # decoding. - # - # In either case a set of tags (tagSet) is coming from substrate - # in an incremental, tag-by-tag fashion (this is the case of - # EXPLICIT tag which is most basic). Outermost tag comes first - # from the wire. - # - if state == stGetValueDecoderByTag: - try: - concreteDecoder = self.__tagMap[tagSet] - except KeyError: - concreteDecoder = None - if concreteDecoder: - state = stDecodeValue - else: - try: - concreteDecoder = self.__tagMap[tagSet[:1]] - except KeyError: - concreteDecoder = None - if concreteDecoder: - state = stDecodeValue - else: - state = stTryAsExplicitTag - if debug.logger and debug.logger & debug.flagDecoder: - debug.logger('codec %s chosen by a built-in type, decoding %s' % (concreteDecoder and concreteDecoder.__class__.__name__ or "<none>", state == stDecodeValue and 'value' or 'as explicit tag')) - debug.scope.push( - concreteDecoder is None and '?' or concreteDecoder.protoComponent.__class__.__name__) - if state == stGetValueDecoderByAsn1Spec: - if asn1Spec.__class__ is dict or asn1Spec.__class__ is tagmap.TagMap: - try: - chosenSpec = asn1Spec[tagSet] - except KeyError: - chosenSpec = None - if debug.logger and debug.logger & debug.flagDecoder: - debug.logger('candidate ASN.1 spec is a map of:') - for firstOctet, v in asn1Spec.presentTypes.items(): - debug.logger(' %s -> %s' % (firstOctet, v.__class__.__name__)) - if asn1Spec.skipTypes: - debug.logger('but neither of: ') - for firstOctet, v in asn1Spec.skipTypes.items(): - debug.logger(' %s -> %s' % (firstOctet, v.__class__.__name__)) - debug.logger('new candidate ASN.1 spec is %s, chosen by %s' % (chosenSpec is None and '<none>' or chosenSpec.prettyPrintType(), tagSet)) - else: - if tagSet == asn1Spec.tagSet or tagSet in asn1Spec.tagMap: - chosenSpec = asn1Spec - debug.logger and debug.logger & debug.flagDecoder and debug.logger( - 'candidate ASN.1 spec is %s' % asn1Spec.__class__.__name__) - else: - chosenSpec = None - - if chosenSpec is not None: - try: - # ambiguous type or just faster codec lookup - concreteDecoder = self.__typeMap[chosenSpec.typeId] - debug.logger and debug.logger & debug.flagDecoder and debug.logger( - 'value decoder chosen for an ambiguous type by type ID %s' % (chosenSpec.typeId,)) - except KeyError: - # use base type for codec lookup to recover untagged types - baseTagSet = tag.TagSet(chosenSpec.tagSet.baseTag, chosenSpec.tagSet.baseTag) - try: - # base type or tagged subtype - concreteDecoder = self.__tagMap[baseTagSet] - debug.logger and debug.logger & debug.flagDecoder and debug.logger( - 'value decoder chosen by base %s' % (baseTagSet,)) - except KeyError: - concreteDecoder = None - if concreteDecoder: - asn1Spec = chosenSpec - state = stDecodeValue - else: - state = stTryAsExplicitTag - else: - concreteDecoder = None - state = stTryAsExplicitTag - if debug.logger and debug.logger & debug.flagDecoder: - debug.logger('codec %s chosen by ASN.1 spec, decoding %s' % (state == stDecodeValue and concreteDecoder.__class__.__name__ or "<none>", state == stDecodeValue and 'value' or 'as explicit tag')) - debug.scope.push(chosenSpec is None and '?' or chosenSpec.__class__.__name__) - if state == stTryAsExplicitTag: - if tagSet and tagSet[0].tagFormat == tag.tagFormatConstructed and tagSet[0].tagClass != tag.tagClassUniversal: - # Assume explicit tagging - concreteDecoder = explicitTagDecoder - state = stDecodeValue - else: - concreteDecoder = None - state = self.defaultErrorState - debug.logger and debug.logger & debug.flagDecoder and debug.logger('codec %s chosen, decoding %s' % (concreteDecoder and concreteDecoder.__class__.__name__ or "<none>", state == stDecodeValue and 'value' or 'as failure')) - if state == stDumpRawValue: - concreteDecoder = self.defaultRawDecoder - debug.logger and debug.logger & debug.flagDecoder and debug.logger( - 'codec %s chosen, decoding value' % concreteDecoder.__class__.__name__) - state = stDecodeValue - if state == stDecodeValue: - if not recursiveFlag and not substrateFun: # legacy - def substrateFun(a, b, c): - return a, b[:c] - if length == -1: # indef length - value, substrate = concreteDecoder.indefLenValueDecoder( - fullSubstrate, substrate, asn1Spec, tagSet, length, - stGetValueDecoder, self, substrateFun - ) - else: - value, substrate = concreteDecoder.valueDecoder( - fullSubstrate, substrate, asn1Spec, tagSet, length, - stGetValueDecoder, self, substrateFun - ) - state = stStop - debug.logger and debug.logger & debug.flagDecoder and debug.logger( - 'codec %s yields type %s, value:\n%s\n...remaining substrate is: %s' % (concreteDecoder.__class__.__name__, value.__class__.__name__, value.prettyPrint(), substrate and debug.hexdump(substrate) or '<none>')) - if state == stErrorCondition: - raise error.PyAsn1Error( - '%s not in asn1Spec: %s' % (tagSet, asn1Spec) - ) - if debug.logger and debug.logger & debug.flagDecoder: - debug.scope.pop() - debug.logger('decoder left scope %s, call completed' % debug.scope) - return value, substrate - - -#: Turns BER octet stream into an ASN.1 object. -#: -#: Takes BER octetstream and decode it into an ASN.1 object -#: (e.g. :py:class:`~pyasn1.type.base.PyAsn1Item` derivative) which -#: may be a scalar or an arbitrary nested structure. -#: -#: Parameters -#: ---------- -#: substrate: :py:class:`bytes` (Python 3) or :py:class:`str` (Python 2) -#: BER octetstream -#: -#: asn1Spec: any pyasn1 type object e.g. :py:class:`~pyasn1.type.base.PyAsn1Item` derivative -#: A pyasn1 type object to act as a template guiding the decoder. Depending on the ASN.1 structure -#: being decoded, *asn1Spec* may or may not be required. Most common reason for -#: it to require is that ASN.1 structure is encoded in *IMPLICIT* tagging mode. -#: -#: Returns -#: ------- -#: : :py:class:`tuple` -#: A tuple of pyasn1 object recovered from BER substrate (:py:class:`~pyasn1.type.base.PyAsn1Item` derivative) -#: and the unprocessed trailing portion of the *substrate* (may be empty) -#: -#: Raises -#: ------ -#: : :py:class:`pyasn1.error.PyAsn1Error` -#: On decoding errors -decode = Decoder(tagMap, typeMap) - -# XXX -# non-recursive decoding; return position rather than substrate diff --git a/src/lib/pyasn1/codec/ber/encoder.py b/src/lib/pyasn1/codec/ber/encoder.py deleted file mode 100644 index 2bf2bc7f..00000000 --- a/src/lib/pyasn1/codec/ber/encoder.py +++ /dev/null @@ -1,506 +0,0 @@ -# -# This file is part of pyasn1 software. -# -# Copyright (c) 2005-2017, Ilya Etingof <etingof@gmail.com> -# License: http://pyasn1.sf.net/license.html -# -from pyasn1.type import base, tag, univ, char, useful -from pyasn1.codec.ber import eoo -from pyasn1.compat.octets import int2oct, oct2int, ints2octs, null, str2octs -from pyasn1.compat.integer import to_bytes -from pyasn1 import debug, error - -__all__ = ['encode'] - - -class AbstractItemEncoder(object): - supportIndefLenMode = 1 - - # noinspection PyMethodMayBeStatic - def encodeTag(self, singleTag, isConstructed): - tagClass, tagFormat, tagId = singleTag - encodedTag = tagClass | tagFormat - if isConstructed: - encodedTag |= tag.tagFormatConstructed - if tagId < 31: - return (encodedTag | tagId,) - else: - substrate = (tagId & 0x7f,) - tagId >>= 7 - while tagId: - substrate = (0x80 | (tagId & 0x7f),) + substrate - tagId >>= 7 - return (encodedTag | 0x1F,) + substrate - - def encodeLength(self, length, defMode): - if not defMode and self.supportIndefLenMode: - return (0x80,) - if length < 0x80: - return (length,) - else: - substrate = () - while length: - substrate = (length & 0xff,) + substrate - length >>= 8 - substrateLen = len(substrate) - if substrateLen > 126: - raise error.PyAsn1Error('Length octets overflow (%d)' % substrateLen) - return (0x80 | substrateLen,) + substrate - - def encodeValue(self, encodeFun, value, defMode, maxChunkSize): - raise error.PyAsn1Error('Not implemented') - - def _encodeEndOfOctets(self, encodeFun, defMode): - if defMode or not self.supportIndefLenMode: - return null - else: - return encodeFun(eoo.endOfOctets, defMode) - - def encode(self, encodeFun, value, defMode, maxChunkSize): - substrate, isConstructed, isOctets = self.encodeValue( - encodeFun, value, defMode, maxChunkSize - ) - tagSet = value.tagSet - # tagged value? - if tagSet: - if not isConstructed: # primitive form implies definite mode - defMode = True - header = self.encodeTag(tagSet[-1], isConstructed) - header += self.encodeLength(len(substrate), defMode) - - if isOctets: - substrate = ints2octs(header) + substrate - else: - substrate = ints2octs(header + substrate) - - eoo = self._encodeEndOfOctets(encodeFun, defMode) - if eoo: - substrate += eoo - - return substrate - - -class EndOfOctetsEncoder(AbstractItemEncoder): - def encodeValue(self, encodeFun, value, defMode, maxChunkSize): - return null, False, True - - -class ExplicitlyTaggedItemEncoder(AbstractItemEncoder): - def encodeValue(self, encodeFun, value, defMode, maxChunkSize): - if isinstance(value, base.AbstractConstructedAsn1Item): - value = value.clone(tagSet=value.tagSet[:-1], cloneValueFlag=1) - else: - value = value.clone(tagSet=value.tagSet[:-1]) - return encodeFun(value, defMode, maxChunkSize), True, True - - -explicitlyTaggedItemEncoder = ExplicitlyTaggedItemEncoder() - - -class BooleanEncoder(AbstractItemEncoder): - supportIndefLenMode = False - - def encodeValue(self, encodeFun, value, defMode, maxChunkSize): - return value and (1,) or (0,), False, False - - -class IntegerEncoder(AbstractItemEncoder): - supportIndefLenMode = False - supportCompactZero = False - - def encodeValue(self, encodeFun, value, defMode, maxChunkSize): - if value == 0: - # de-facto way to encode zero - if self.supportCompactZero: - return (), False, False - else: - return (0,), False, False - - return to_bytes(int(value), signed=True), False, True - - -class BitStringEncoder(AbstractItemEncoder): - def encodeValue(self, encodeFun, value, defMode, maxChunkSize): - valueLength = len(value) - if valueLength % 8: - alignedValue = value << (8 - valueLength % 8) - else: - alignedValue = value - - if not maxChunkSize or len(alignedValue) <= maxChunkSize * 8: - substrate = alignedValue.asOctets() - return int2oct(len(substrate) * 8 - valueLength) + substrate, False, True - - stop = 0 - substrate = null - while stop < valueLength: - start = stop - stop = min(start + maxChunkSize * 8, valueLength) - substrate += encodeFun(alignedValue[start:stop], defMode, maxChunkSize) - - return substrate, True, True - - -class OctetStringEncoder(AbstractItemEncoder): - def encodeValue(self, encodeFun, value, defMode, maxChunkSize): - if not maxChunkSize or len(value) <= maxChunkSize: - return value.asOctets(), False, True - else: - pos = 0 - substrate = null - while True: - v = value.clone(value[pos:pos + maxChunkSize]) - if not v: - break - substrate += encodeFun(v, defMode, maxChunkSize) - pos += maxChunkSize - - return substrate, True, True - - -class NullEncoder(AbstractItemEncoder): - supportIndefLenMode = False - - def encodeValue(self, encodeFun, value, defMode, maxChunkSize): - return null, False, True - - -class ObjectIdentifierEncoder(AbstractItemEncoder): - supportIndefLenMode = False - - def encodeValue(self, encodeFun, value, defMode, maxChunkSize): - oid = value.asTuple() - - # Build the first pair - try: - first = oid[0] - second = oid[1] - - except IndexError: - raise error.PyAsn1Error('Short OID %s' % (value,)) - - if 0 <= second <= 39: - if first == 1: - oid = (second + 40,) + oid[2:] - elif first == 0: - oid = (second,) + oid[2:] - elif first == 2: - oid = (second + 80,) + oid[2:] - else: - raise error.PyAsn1Error('Impossible first/second arcs at %s' % (value,)) - elif first == 2: - oid = (second + 80,) + oid[2:] - else: - raise error.PyAsn1Error('Impossible first/second arcs at %s' % (value,)) - - octets = () - - # Cycle through subIds - for subOid in oid: - if 0 <= subOid <= 127: - # Optimize for the common case - octets += (subOid,) - elif subOid > 127: - # Pack large Sub-Object IDs - res = (subOid & 0x7f,) - subOid >>= 7 - while subOid: - res = (0x80 | (subOid & 0x7f),) + res - subOid >>= 7 - # Add packed Sub-Object ID to resulted Object ID - octets += res - else: - raise error.PyAsn1Error('Negative OID arc %s at %s' % (subOid, value)) - - return octets, False, False - - -class RealEncoder(AbstractItemEncoder): - supportIndefLenMode = 0 - binEncBase = 2 # set to None to choose encoding base automatically - - @staticmethod - def _dropFloatingPoint(m, encbase, e): - ms, es = 1, 1 - if m < 0: - ms = -1 # mantissa sign - if e < 0: - es = -1 # exponenta sign - m *= ms - if encbase == 8: - m *= 2 ** (abs(e) % 3 * es) - e = abs(e) // 3 * es - elif encbase == 16: - m *= 2 ** (abs(e) % 4 * es) - e = abs(e) // 4 * es - - while True: - if int(m) != m: - m *= encbase - e -= 1 - continue - break - return ms, int(m), encbase, e - - def _chooseEncBase(self, value): - m, b, e = value - encBase = [2, 8, 16] - if value.binEncBase in encBase: - return self._dropFloatingPoint(m, value.binEncBase, e) - elif self.binEncBase in encBase: - return self._dropFloatingPoint(m, self.binEncBase, e) - # auto choosing base 2/8/16 - mantissa = [m, m, m] - exponenta = [e, e, e] - sign = 1 - encbase = 2 - e = float('inf') - for i in range(3): - (sign, - mantissa[i], - encBase[i], - exponenta[i]) = self._dropFloatingPoint(mantissa[i], encBase[i], exponenta[i]) - if abs(exponenta[i]) < abs(e) or (abs(exponenta[i]) == abs(e) and mantissa[i] < m): - e = exponenta[i] - m = int(mantissa[i]) - encbase = encBase[i] - return sign, m, encbase, e - - def encodeValue(self, encodeFun, value, defMode, maxChunkSize): - if value.isPlusInfinity(): - return (0x40,), False, False - if value.isMinusInfinity(): - return (0x41,), False, False - m, b, e = value - if not m: - return null, False, True - if b == 10: - return str2octs('\x03%dE%s%d' % (m, e == 0 and '+' or '', e)), False, True - elif b == 2: - fo = 0x80 # binary encoding - ms, m, encbase, e = self._chooseEncBase(value) - if ms < 0: # mantissa sign - fo |= 0x40 # sign bit - # exponenta & mantissa normalization - if encbase == 2: - while m & 0x1 == 0: - m >>= 1 - e += 1 - elif encbase == 8: - while m & 0x7 == 0: - m >>= 3 - e += 1 - fo |= 0x10 - else: # encbase = 16 - while m & 0xf == 0: - m >>= 4 - e += 1 - fo |= 0x20 - sf = 0 # scale factor - while m & 0x1 == 0: - m >>= 1 - sf += 1 - if sf > 3: - raise error.PyAsn1Error('Scale factor overflow') # bug if raised - fo |= sf << 2 - eo = null - if e == 0 or e == -1: - eo = int2oct(e & 0xff) - else: - while e not in (0, -1): - eo = int2oct(e & 0xff) + eo - e >>= 8 - if e == 0 and eo and oct2int(eo[0]) & 0x80: - eo = int2oct(0) + eo - if e == -1 and eo and not (oct2int(eo[0]) & 0x80): - eo = int2oct(0xff) + eo - n = len(eo) - if n > 0xff: - raise error.PyAsn1Error('Real exponent overflow') - if n == 1: - pass - elif n == 2: - fo |= 1 - elif n == 3: - fo |= 2 - else: - fo |= 3 - eo = int2oct(n & 0xff) + eo - po = null - while m: - po = int2oct(m & 0xff) + po - m >>= 8 - substrate = int2oct(fo) + eo + po - return substrate, False, True - else: - raise error.PyAsn1Error('Prohibited Real base %s' % b) - - -class SequenceEncoder(AbstractItemEncoder): - def encodeValue(self, encodeFun, value, defMode, maxChunkSize): - value.verifySizeSpec() - namedTypes = value.getComponentType() - substrate = null - idx = len(value) - while idx > 0: - idx -= 1 - if namedTypes: - if namedTypes[idx].isOptional and not value[idx].isValue: - continue - if namedTypes[idx].isDefaulted and value[idx] == namedTypes[idx].asn1Object: - continue - substrate = encodeFun(value[idx], defMode, maxChunkSize) + substrate - return substrate, True, True - - -class SequenceOfEncoder(AbstractItemEncoder): - def encodeValue(self, encodeFun, value, defMode, maxChunkSize): - value.verifySizeSpec() - substrate = null - idx = len(value) - while idx > 0: - idx -= 1 - substrate = encodeFun(value[idx], defMode, maxChunkSize) + substrate - return substrate, True, True - - -class ChoiceEncoder(AbstractItemEncoder): - def encodeValue(self, encodeFun, value, defMode, maxChunkSize): - return encodeFun(value.getComponent(), defMode, maxChunkSize), True, True - - -class AnyEncoder(OctetStringEncoder): - def encodeValue(self, encodeFun, value, defMode, maxChunkSize): - return value.asOctets(), defMode == False, True - - -tagMap = { - eoo.endOfOctets.tagSet: EndOfOctetsEncoder(), - univ.Boolean.tagSet: BooleanEncoder(), - univ.Integer.tagSet: IntegerEncoder(), - univ.BitString.tagSet: BitStringEncoder(), - univ.OctetString.tagSet: OctetStringEncoder(), - univ.Null.tagSet: NullEncoder(), - univ.ObjectIdentifier.tagSet: ObjectIdentifierEncoder(), - univ.Enumerated.tagSet: IntegerEncoder(), - univ.Real.tagSet: RealEncoder(), - # Sequence & Set have same tags as SequenceOf & SetOf - univ.SequenceOf.tagSet: SequenceOfEncoder(), - univ.SetOf.tagSet: SequenceOfEncoder(), - univ.Choice.tagSet: ChoiceEncoder(), - # character string types - char.UTF8String.tagSet: OctetStringEncoder(), - char.NumericString.tagSet: OctetStringEncoder(), - char.PrintableString.tagSet: OctetStringEncoder(), - char.TeletexString.tagSet: OctetStringEncoder(), - char.VideotexString.tagSet: OctetStringEncoder(), - char.IA5String.tagSet: OctetStringEncoder(), - char.GraphicString.tagSet: OctetStringEncoder(), - char.VisibleString.tagSet: OctetStringEncoder(), - char.GeneralString.tagSet: OctetStringEncoder(), - char.UniversalString.tagSet: OctetStringEncoder(), - char.BMPString.tagSet: OctetStringEncoder(), - # useful types - useful.ObjectDescriptor.tagSet: OctetStringEncoder(), - useful.GeneralizedTime.tagSet: OctetStringEncoder(), - useful.UTCTime.tagSet: OctetStringEncoder() -} - -# Put in ambiguous & non-ambiguous types for faster codec lookup -typeMap = { - univ.Boolean.typeId: BooleanEncoder(), - univ.Integer.typeId: IntegerEncoder(), - univ.BitString.typeId: BitStringEncoder(), - univ.OctetString.typeId: OctetStringEncoder(), - univ.Null.typeId: NullEncoder(), - univ.ObjectIdentifier.typeId: ObjectIdentifierEncoder(), - univ.Enumerated.typeId: IntegerEncoder(), - univ.Real.typeId: RealEncoder(), - # Sequence & Set have same tags as SequenceOf & SetOf - univ.Set.typeId: SequenceEncoder(), - univ.SetOf.typeId: SequenceOfEncoder(), - univ.Sequence.typeId: SequenceEncoder(), - univ.SequenceOf.typeId: SequenceOfEncoder(), - univ.Choice.typeId: ChoiceEncoder(), - univ.Any.typeId: AnyEncoder(), - # character string types - char.UTF8String.typeId: OctetStringEncoder(), - char.NumericString.typeId: OctetStringEncoder(), - char.PrintableString.typeId: OctetStringEncoder(), - char.TeletexString.typeId: OctetStringEncoder(), - char.VideotexString.typeId: OctetStringEncoder(), - char.IA5String.typeId: OctetStringEncoder(), - char.GraphicString.typeId: OctetStringEncoder(), - char.VisibleString.typeId: OctetStringEncoder(), - char.GeneralString.typeId: OctetStringEncoder(), - char.UniversalString.typeId: OctetStringEncoder(), - char.BMPString.typeId: OctetStringEncoder(), - # useful types - useful.ObjectDescriptor.typeId: OctetStringEncoder(), - useful.GeneralizedTime.typeId: OctetStringEncoder(), - useful.UTCTime.typeId: OctetStringEncoder() -} - - -class Encoder(object): - supportIndefLength = True - - # noinspection PyDefaultArgument - def __init__(self, tagMap, typeMap={}): - self.__tagMap = tagMap - self.__typeMap = typeMap - - def __call__(self, value, defMode=True, maxChunkSize=0): - if not defMode and not self.supportIndefLength: - raise error.PyAsn1Error('Indefinite length encoding not supported by this codec') - debug.logger & debug.flagEncoder and debug.logger( - 'encoder called in %sdef mode, chunk size %s for type %s, value:\n%s' % ( - not defMode and 'in' or '', maxChunkSize, value.prettyPrintType(), value.prettyPrint())) - tagSet = value.tagSet - if len(tagSet) > 1: - concreteEncoder = explicitlyTaggedItemEncoder - else: - try: - concreteEncoder = self.__typeMap[value.typeId] - except KeyError: - # use base type for codec lookup to recover untagged types - baseTagSet = tag.TagSet(value.tagSet.baseTag, value.tagSet.baseTag) - try: - concreteEncoder = self.__tagMap[baseTagSet] - except KeyError: - raise error.PyAsn1Error('No encoder for %s' % (value,)) - debug.logger & debug.flagEncoder and debug.logger( - 'using value codec %s chosen by %s' % (concreteEncoder.__class__.__name__, tagSet)) - substrate = concreteEncoder.encode( - self, value, defMode, maxChunkSize - ) - debug.logger & debug.flagEncoder and debug.logger( - 'built %s octets of substrate: %s\nencoder completed' % (len(substrate), debug.hexdump(substrate))) - return substrate - -#: Turns ASN.1 object into BER octet stream. -#: -#: Takes any ASN.1 object (e.g. :py:class:`~pyasn1.type.base.PyAsn1Item` derivative) -#: walks all its components recursively and produces a BER octet stream. -#: -#: Parameters -#: ---------- -# value: any pyasn1 object (e.g. :py:class:`~pyasn1.type.base.PyAsn1Item` derivative) -#: A pyasn1 object to encode -#: -#: defMode: :py:class:`bool` -#: If `False`, produces indefinite length encoding -#: -#: maxChunkSize: :py:class:`int` -#: Maximum chunk size in chunked encoding mode (0 denotes unlimited chunk size) -#: -#: Returns -#: ------- -#: : :py:class:`bytes` (Python 3) or :py:class:`str` (Python 2) -#: Given ASN.1 object encoded into BER octetstream -#: -#: Raises -#: ------ -#: : :py:class:`pyasn1.error.PyAsn1Error` -#: On encoding errors -encode = Encoder(tagMap, typeMap) diff --git a/src/lib/pyasn1/codec/ber/eoo.py b/src/lib/pyasn1/codec/ber/eoo.py deleted file mode 100644 index b02f5cc4..00000000 --- a/src/lib/pyasn1/codec/ber/eoo.py +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is part of pyasn1 software. -# -# Copyright (c) 2005-2017, Ilya Etingof <etingof@gmail.com> -# License: http://pyasn1.sf.net/license.html -# -from pyasn1.type import base, tag - - -class EndOfOctets(base.AbstractSimpleAsn1Item): - defaultValue = 0 - tagSet = tag.initTagSet( - tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 0x00) - ) - - _instance = None - - def __new__(cls, *args): - if cls._instance is None: - cls._instance = object.__new__(cls, *args) - - return cls._instance - - -endOfOctets = EndOfOctets() diff --git a/src/lib/pyasn1/codec/cer/__init__.py b/src/lib/pyasn1/codec/cer/__init__.py deleted file mode 100644 index 8c3066b2..00000000 --- a/src/lib/pyasn1/codec/cer/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# This file is necessary to make this directory a package. diff --git a/src/lib/pyasn1/codec/cer/decoder.py b/src/lib/pyasn1/codec/cer/decoder.py deleted file mode 100644 index bf9cf4af..00000000 --- a/src/lib/pyasn1/codec/cer/decoder.py +++ /dev/null @@ -1,87 +0,0 @@ -# -# This file is part of pyasn1 software. -# -# Copyright (c) 2005-2017, Ilya Etingof <etingof@gmail.com> -# License: http://pyasn1.sf.net/license.html -# -from pyasn1.type import univ -from pyasn1.codec.ber import decoder -from pyasn1.compat.octets import oct2int -from pyasn1 import error - -__all__ = ['decode'] - - -class BooleanDecoder(decoder.AbstractSimpleDecoder): - protoComponent = univ.Boolean(0) - - def valueDecoder(self, fullSubstrate, substrate, asn1Spec, tagSet, length, - state, decodeFun, substrateFun): - head, tail = substrate[:length], substrate[length:] - if not head or length != 1: - raise error.PyAsn1Error('Not single-octet Boolean payload') - byte = oct2int(head[0]) - # CER/DER specifies encoding of TRUE as 0xFF and FALSE as 0x0, while - # BER allows any non-zero value as TRUE; cf. sections 8.2.2. and 11.1 - # in http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf - if byte == 0xff: - value = 1 - elif byte == 0x00: - value = 0 - else: - raise error.PyAsn1Error('Unexpected Boolean payload: %s' % byte) - return self._createComponent(asn1Spec, tagSet, value), tail - -# TODO: prohibit non-canonical encoding -BitStringDecoder = decoder.BitStringDecoder -OctetStringDecoder = decoder.OctetStringDecoder -RealDecoder = decoder.RealDecoder - -tagMap = decoder.tagMap.copy() -tagMap.update( - {univ.Boolean.tagSet: BooleanDecoder(), - univ.BitString.tagSet: BitStringDecoder(), - univ.OctetString.tagSet: OctetStringDecoder(), - univ.Real.tagSet: RealDecoder()} -) - -typeMap = decoder.typeMap.copy() - -# Put in non-ambiguous types for faster codec lookup -for typeDecoder in tagMap.values(): - typeId = typeDecoder.protoComponent.__class__.typeId - if typeId is not None and typeId not in typeMap: - typeMap[typeId] = typeDecoder - - -class Decoder(decoder.Decoder): - pass - - -#: Turns CER octet stream into an ASN.1 object. -#: -#: Takes CER octetstream and decode it into an ASN.1 object -#: (e.g. :py:class:`~pyasn1.type.base.PyAsn1Item` derivative) which -#: may be a scalar or an arbitrary nested structure. -#: -#: Parameters -#: ---------- -#: substrate: :py:class:`bytes` (Python 3) or :py:class:`str` (Python 2) -#: CER octetstream -#: -#: asn1Spec: any pyasn1 type object e.g. :py:class:`~pyasn1.type.base.PyAsn1Item` derivative -#: A pyasn1 type object to act as a template guiding the decoder. Depending on the ASN.1 structure -#: being decoded, *asn1Spec* may or may not be required. Most common reason for -#: it to require is that ASN.1 structure is encoded in *IMPLICIT* tagging mode. -#: -#: Returns -#: ------- -#: : :py:class:`tuple` -#: A tuple of pyasn1 object recovered from CER substrate (:py:class:`~pyasn1.type.base.PyAsn1Item` derivative) -#: and the unprocessed trailing portion of the *substrate* (may be empty) -#: -#: Raises -#: ------ -#: : :py:class:`pyasn1.error.PyAsn1Error` -#: On decoding errors -decode = Decoder(tagMap, decoder.typeMap) diff --git a/src/lib/pyasn1/codec/cer/encoder.py b/src/lib/pyasn1/codec/cer/encoder.py deleted file mode 100644 index e241e43d..00000000 --- a/src/lib/pyasn1/codec/cer/encoder.py +++ /dev/null @@ -1,179 +0,0 @@ -# -# This file is part of pyasn1 software. -# -# Copyright (c) 2005-2017, Ilya Etingof <etingof@gmail.com> -# License: http://pyasn1.sf.net/license.html -# -from pyasn1.type import univ -from pyasn1.type import useful -from pyasn1.codec.ber import encoder -from pyasn1.compat.octets import int2oct, str2octs, null -from pyasn1 import error - -__all__ = ['encode'] - - -class BooleanEncoder(encoder.IntegerEncoder): - def encodeValue(self, encodeFun, client, defMode, maxChunkSize): - if client == 0: - substrate = (0,) - else: - substrate = (255,) - return substrate, False, False - - -class BitStringEncoder(encoder.BitStringEncoder): - def encodeValue(self, encodeFun, client, defMode, maxChunkSize): - return encoder.BitStringEncoder.encodeValue( - self, encodeFun, client, defMode, 1000 - ) - - -class OctetStringEncoder(encoder.OctetStringEncoder): - def encodeValue(self, encodeFun, client, defMode, maxChunkSize): - return encoder.OctetStringEncoder.encodeValue( - self, encodeFun, client, defMode, 1000 - ) - - -class RealEncoder(encoder.RealEncoder): - def _chooseEncBase(self, value): - m, b, e = value - return self._dropFloatingPoint(m, b, e) - - -# specialized GeneralStringEncoder here - -class GeneralizedTimeEncoder(OctetStringEncoder): - zchar = str2octs('Z') - pluschar = str2octs('+') - minuschar = str2octs('-') - zero = str2octs('0') - - def encodeValue(self, encodeFun, client, defMode, maxChunkSize): - octets = client.asOctets() - # This breaks too many existing data items - # if '.' not in octets: - # raise error.PyAsn1Error('Format must include fraction of second: %r' % octets) - if len(octets) < 15: - raise error.PyAsn1Error('Bad UTC time length: %r' % octets) - if self.pluschar in octets or self.minuschar in octets: - raise error.PyAsn1Error('Must be UTC time: %r' % octets) - if octets[-1] != self.zchar[0]: - raise error.PyAsn1Error('Missing timezone specifier: %r' % octets) - return encoder.OctetStringEncoder.encodeValue( - self, encodeFun, client, defMode, 1000 - ) - - -class UTCTimeEncoder(encoder.OctetStringEncoder): - zchar = str2octs('Z') - pluschar = str2octs('+') - minuschar = str2octs('-') - - def encodeValue(self, encodeFun, client, defMode, maxChunkSize): - octets = client.asOctets() - if self.pluschar in octets or self.minuschar in octets: - raise error.PyAsn1Error('Must be UTC time: %r' % octets) - if octets and octets[-1] != self.zchar[0]: - client = client.clone(octets + self.zchar) - if len(client) != 13: - raise error.PyAsn1Error('Bad UTC time length: %r' % client) - return encoder.OctetStringEncoder.encodeValue( - self, encodeFun, client, defMode, 1000 - ) - - -class SetOfEncoder(encoder.SequenceOfEncoder): - def encodeValue(self, encodeFun, client, defMode, maxChunkSize): - client.verifySizeSpec() - substrate = null - idx = len(client) - # This is certainly a hack but how else do I distinguish SetOf - # from Set if they have the same tags&constraints? - if isinstance(client, univ.SequenceAndSetBase): - # Set - namedTypes = client.getComponentType() - comps = [] - while idx > 0: - idx -= 1 - if namedTypes[idx].isOptional and not client[idx].isValue: - continue - if namedTypes[idx].isDefaulted and client[idx] == namedTypes[idx].asn1Object: - continue - comps.append(client[idx]) - comps.sort(key=lambda x: isinstance(x, univ.Choice) and x.getMinTagSet() or x.tagSet) - for c in comps: - substrate += encodeFun(c, defMode, maxChunkSize) - else: - # SetOf - compSubs = [] - while idx > 0: - idx -= 1 - compSubs.append( - encodeFun(client[idx], defMode, maxChunkSize) - ) - compSubs.sort() # perhaps padding's not needed - substrate = null - for compSub in compSubs: - substrate += compSub - return substrate, True, True - - -tagMap = encoder.tagMap.copy() -tagMap.update({ - univ.Boolean.tagSet: BooleanEncoder(), - univ.BitString.tagSet: BitStringEncoder(), - univ.OctetString.tagSet: OctetStringEncoder(), - univ.Real.tagSet: RealEncoder(), - useful.GeneralizedTime.tagSet: GeneralizedTimeEncoder(), - useful.UTCTime.tagSet: UTCTimeEncoder(), - univ.SetOf().tagSet: SetOfEncoder() # conflcts with Set -}) - -typeMap = encoder.typeMap.copy() -typeMap.update({ - univ.Boolean.typeId: BooleanEncoder(), - univ.BitString.typeId: BitStringEncoder(), - univ.OctetString.typeId: OctetStringEncoder(), - univ.Real.typeId: RealEncoder(), - useful.GeneralizedTime.typeId: GeneralizedTimeEncoder(), - useful.UTCTime.typeId: UTCTimeEncoder(), - univ.Set.typeId: SetOfEncoder(), - univ.SetOf.typeId: SetOfEncoder() -}) - - -class Encoder(encoder.Encoder): - def __call__(self, client, defMode=False, maxChunkSize=0): - return encoder.Encoder.__call__(self, client, defMode, maxChunkSize) - - -#: Turns ASN.1 object into CER octet stream. -#: -#: Takes any ASN.1 object (e.g. :py:class:`~pyasn1.type.base.PyAsn1Item` derivative) -#: walks all its components recursively and produces a CER octet stream. -#: -#: Parameters -#: ---------- -# value: any pyasn1 object (e.g. :py:class:`~pyasn1.type.base.PyAsn1Item` derivative) -#: A pyasn1 object to encode -#: -#: defMode: :py:class:`bool` -#: If `False`, produces indefinite length encoding -#: -#: maxChunkSize: :py:class:`int` -#: Maximum chunk size in chunked encoding mode (0 denotes unlimited chunk size) -#: -#: Returns -#: ------- -#: : :py:class:`bytes` (Python 3) or :py:class:`str` (Python 2) -#: Given ASN.1 object encoded into BER octetstream -#: -#: Raises -#: ------ -#: : :py:class:`pyasn1.error.PyAsn1Error` -#: On encoding errors -encode = Encoder(tagMap, typeMap) - -# EncoderFactory queries class instance and builds a map of tags -> encoders diff --git a/src/lib/pyasn1/codec/der/__init__.py b/src/lib/pyasn1/codec/der/__init__.py deleted file mode 100644 index 8c3066b2..00000000 --- a/src/lib/pyasn1/codec/der/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# This file is necessary to make this directory a package. diff --git a/src/lib/pyasn1/codec/der/decoder.py b/src/lib/pyasn1/codec/der/decoder.py deleted file mode 100644 index 24d3cbcb..00000000 --- a/src/lib/pyasn1/codec/der/decoder.py +++ /dev/null @@ -1,69 +0,0 @@ -# -# This file is part of pyasn1 software. -# -# Copyright (c) 2005-2017, Ilya Etingof <etingof@gmail.com> -# License: http://pyasn1.sf.net/license.html -# -from pyasn1.type import univ -from pyasn1.codec.cer import decoder - -__all__ = ['decode'] - - -class BitStringDecoder(decoder.BitStringDecoder): - supportConstructedForm = False - - -class OctetStringDecoder(decoder.OctetStringDecoder): - supportConstructedForm = False - -# TODO: prohibit non-canonical encoding -RealDecoder = decoder.RealDecoder - -tagMap = decoder.tagMap.copy() -tagMap.update( - {univ.BitString.tagSet: BitStringDecoder(), - univ.OctetString.tagSet: OctetStringDecoder(), - univ.Real.tagSet: RealDecoder()} -) - -typeMap = decoder.typeMap.copy() - -# Put in non-ambiguous types for faster codec lookup -for typeDecoder in tagMap.values(): - typeId = typeDecoder.protoComponent.__class__.typeId - if typeId is not None and typeId not in typeMap: - typeMap[typeId] = typeDecoder - - -class Decoder(decoder.Decoder): - supportIndefLength = False - - -#: Turns DER octet stream into an ASN.1 object. -#: -#: Takes DER octetstream and decode it into an ASN.1 object -#: (e.g. :py:class:`~pyasn1.type.base.PyAsn1Item` derivative) which -#: may be a scalar or an arbitrary nested structure. -#: -#: Parameters -#: ---------- -#: substrate: :py:class:`bytes` (Python 3) or :py:class:`str` (Python 2) -#: DER octetstream -#: -#: asn1Spec: any pyasn1 type object e.g. :py:class:`~pyasn1.type.base.PyAsn1Item` derivative -#: A pyasn1 type object to act as a template guiding the decoder. Depending on the ASN.1 structure -#: being decoded, *asn1Spec* may or may not be required. Most common reason for -#: it to require is that ASN.1 structure is encoded in *IMPLICIT* tagging mode. -#: -#: Returns -#: ------- -#: : :py:class:`tuple` -#: A tuple of pyasn1 object recovered from DER substrate (:py:class:`~pyasn1.type.base.PyAsn1Item` derivative) -#: and the unprocessed trailing portion of the *substrate* (may be empty) -#: -#: Raises -#: ------ -#: : :py:class:`pyasn1.error.PyAsn1Error` -#: On decoding errors -decode = Decoder(tagMap, typeMap) diff --git a/src/lib/pyasn1/codec/der/encoder.py b/src/lib/pyasn1/codec/der/encoder.py deleted file mode 100644 index 2d615e3f..00000000 --- a/src/lib/pyasn1/codec/der/encoder.py +++ /dev/null @@ -1,67 +0,0 @@ -# -# This file is part of pyasn1 software. -# -# Copyright (c) 2005-2017, Ilya Etingof <etingof@gmail.com> -# License: http://pyasn1.sf.net/license.html -# -from pyasn1.type import univ -from pyasn1.codec.cer import encoder -from pyasn1 import error - -__all__ = ['encode'] - - -class SetOfEncoder(encoder.SetOfEncoder): - @staticmethod - def _cmpSetComponents(c1, c2): - tagSet1 = isinstance(c1, univ.Choice) and c1.effectiveTagSet or c1.tagSet - tagSet2 = isinstance(c2, univ.Choice) and c2.effectiveTagSet or c2.tagSet - return cmp(tagSet1, tagSet2) - - -tagMap = encoder.tagMap.copy() -tagMap.update({ - # Overload CER encoders with BER ones (a bit hackerish XXX) - univ.BitString.tagSet: encoder.encoder.BitStringEncoder(), - univ.OctetString.tagSet: encoder.encoder.OctetStringEncoder(), - # Set & SetOf have same tags - univ.SetOf().tagSet: SetOfEncoder() -}) - -typeMap = encoder.typeMap.copy() - - -class Encoder(encoder.Encoder): - supportIndefLength = False - - def __call__(self, client, defMode=True, maxChunkSize=0): - if not defMode or maxChunkSize: - raise error.PyAsn1Error('DER forbids indefinite length mode') - return encoder.Encoder.__call__(self, client, defMode, maxChunkSize) - -#: Turns ASN.1 object into DER octet stream. -#: -#: Takes any ASN.1 object (e.g. :py:class:`~pyasn1.type.base.PyAsn1Item` derivative) -#: walks all its components recursively and produces a DER octet stream. -#: -#: Parameters -#: ---------- -# value: any pyasn1 object (e.g. :py:class:`~pyasn1.type.base.PyAsn1Item` derivative) -#: A pyasn1 object to encode -#: -#: defMode: :py:class:`bool` -#: If `False`, produces indefinite length encoding -#: -#: maxChunkSize: :py:class:`int` -#: Maximum chunk size in chunked encoding mode (0 denotes unlimited chunk size) -#: -#: Returns -#: ------- -#: : :py:class:`bytes` (Python 3) or :py:class:`str` (Python 2) -#: Given ASN.1 object encoded into BER octetstream -#: -#: Raises -#: ------ -#: : :py:class:`pyasn1.error.PyAsn1Error` -#: On encoding errors -encode = Encoder(tagMap, typeMap) diff --git a/src/lib/pyasn1/codec/native/__init__.py b/src/lib/pyasn1/codec/native/__init__.py deleted file mode 100644 index 8c3066b2..00000000 --- a/src/lib/pyasn1/codec/native/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# This file is necessary to make this directory a package. diff --git a/src/lib/pyasn1/codec/native/decoder.py b/src/lib/pyasn1/codec/native/decoder.py deleted file mode 100644 index be75cb86..00000000 --- a/src/lib/pyasn1/codec/native/decoder.py +++ /dev/null @@ -1,188 +0,0 @@ -# -# This file is part of pyasn1 software. -# -# Copyright (c) 2005-2017, Ilya Etingof <etingof@gmail.com> -# License: http://pyasn1.sf.net/license.html -# -from pyasn1.type import base, univ, char, useful, tag -from pyasn1 import debug, error - -__all__ = ['decode'] - - -class AbstractScalarDecoder(object): - def __call__(self, pyObject, asn1Spec, decoderFunc=None): - return asn1Spec.clone(pyObject) - - -class BitStringDecoder(AbstractScalarDecoder): - def __call__(self, pyObject, asn1Spec, decoderFunc=None): - return asn1Spec.clone(univ.BitString.fromBinaryString(pyObject)) - - -class SequenceOrSetDecoder(object): - def __call__(self, pyObject, asn1Spec, decoderFunc): - asn1Value = asn1Spec.clone() - - componentsTypes = asn1Spec.getComponentType() - - for field in asn1Value: - if field in pyObject: - asn1Value[field] = decoderFunc(pyObject[field], componentsTypes[field].asn1Object) - - return asn1Value - - -class SequenceOfOrSetOfDecoder(object): - def __call__(self, pyObject, asn1Spec, decoderFunc): - asn1Value = asn1Spec.clone() - - for pyValue in pyObject: - asn1Value.append(decoderFunc(pyValue, asn1Spec.getComponentType())) - - return asn1Value - - -class ChoiceDecoder(object): - def __call__(self, pyObject, asn1Spec, decoderFunc): - asn1Value = asn1Spec.clone() - - componentsTypes = asn1Spec.getComponentType() - - for field in pyObject: - if field in componentsTypes: - asn1Value[field] = decoderFunc(pyObject[field], componentsTypes[field].asn1Object) - break - - return asn1Value - - -tagMap = { - univ.Integer.tagSet: AbstractScalarDecoder(), - univ.Boolean.tagSet: AbstractScalarDecoder(), - univ.BitString.tagSet: BitStringDecoder(), - univ.OctetString.tagSet: AbstractScalarDecoder(), - univ.Null.tagSet: AbstractScalarDecoder(), - univ.ObjectIdentifier.tagSet: AbstractScalarDecoder(), - univ.Enumerated.tagSet: AbstractScalarDecoder(), - univ.Real.tagSet: AbstractScalarDecoder(), - univ.Sequence.tagSet: SequenceOrSetDecoder(), # conflicts with SequenceOf - univ.Set.tagSet: SequenceOrSetDecoder(), # conflicts with SetOf - univ.Choice.tagSet: ChoiceDecoder(), # conflicts with Any - # character string types - char.UTF8String.tagSet: AbstractScalarDecoder(), - char.NumericString.tagSet: AbstractScalarDecoder(), - char.PrintableString.tagSet: AbstractScalarDecoder(), - char.TeletexString.tagSet: AbstractScalarDecoder(), - char.VideotexString.tagSet: AbstractScalarDecoder(), - char.IA5String.tagSet: AbstractScalarDecoder(), - char.GraphicString.tagSet: AbstractScalarDecoder(), - char.VisibleString.tagSet: AbstractScalarDecoder(), - char.GeneralString.tagSet: AbstractScalarDecoder(), - char.UniversalString.tagSet: AbstractScalarDecoder(), - char.BMPString.tagSet: AbstractScalarDecoder(), - # useful types - useful.ObjectDescriptor.tagSet: AbstractScalarDecoder(), - useful.GeneralizedTime.tagSet: AbstractScalarDecoder(), - useful.UTCTime.tagSet: AbstractScalarDecoder() -} - -# Put in ambiguous & non-ambiguous types for faster codec lookup -typeMap = { - univ.Integer.typeId: AbstractScalarDecoder(), - univ.Boolean.typeId: AbstractScalarDecoder(), - univ.BitString.typeId: BitStringDecoder(), - univ.OctetString.typeId: AbstractScalarDecoder(), - univ.Null.typeId: AbstractScalarDecoder(), - univ.ObjectIdentifier.typeId: AbstractScalarDecoder(), - univ.Enumerated.typeId: AbstractScalarDecoder(), - univ.Real.typeId: AbstractScalarDecoder(), - # ambiguous base types - univ.Set.typeId: SequenceOrSetDecoder(), - univ.SetOf.typeId: SequenceOfOrSetOfDecoder(), - univ.Sequence.typeId: SequenceOrSetDecoder(), - univ.SequenceOf.typeId: SequenceOfOrSetOfDecoder(), - univ.Choice.typeId: ChoiceDecoder(), - univ.Any.typeId: AbstractScalarDecoder(), - # character string types - char.UTF8String.typeId: AbstractScalarDecoder(), - char.NumericString.typeId: AbstractScalarDecoder(), - char.PrintableString.typeId: AbstractScalarDecoder(), - char.TeletexString.typeId: AbstractScalarDecoder(), - char.VideotexString.typeId: AbstractScalarDecoder(), - char.IA5String.typeId: AbstractScalarDecoder(), - char.GraphicString.typeId: AbstractScalarDecoder(), - char.VisibleString.typeId: AbstractScalarDecoder(), - char.GeneralString.typeId: AbstractScalarDecoder(), - char.UniversalString.typeId: AbstractScalarDecoder(), - char.BMPString.typeId: AbstractScalarDecoder(), - # useful types - useful.ObjectDescriptor.typeId: AbstractScalarDecoder(), - useful.GeneralizedTime.typeId: AbstractScalarDecoder(), - useful.UTCTime.typeId: AbstractScalarDecoder() -} - - -class Decoder(object): - - # noinspection PyDefaultArgument - def __init__(self, tagMap, typeMap): - self.__tagMap = tagMap - self.__typeMap = typeMap - - def __call__(self, pyObject, asn1Spec): - if debug.logger & debug.flagDecoder: - debug.scope.push(type(pyObject).__name__) - debug.logger('decoder called at scope %s, working with type %s' % (debug.scope, type(pyObject).__name__)) - - if asn1Spec is None or not isinstance(asn1Spec, base.Asn1Item): - raise error.PyAsn1Error('asn1Spec is not valid (should be an instance of an ASN.1 Item, not %s)' % asn1Spec.__class__.__name__) - - try: - valueDecoder = self.__typeMap[asn1Spec.typeId] - except KeyError: - # use base type for codec lookup to recover untagged types - baseTagSet = tag.TagSet(asn1Spec.tagSet.baseTag, asn1Spec.tagSet.baseTag) - try: - valueDecoder = self.__tagMap[baseTagSet] - except KeyError: - raise error.PyAsn1Error('Unknown ASN.1 tag %s' % asn1Spec.tagSet) - - if debug.logger & debug.flagDecoder: - debug.logger('calling decoder %s on Python type %s <%s>' % (type(valueDecoder).__name__, type(pyObject).__name__, repr(pyObject))) - - value = valueDecoder(pyObject, asn1Spec, self) - - if debug.logger & debug.flagDecoder: - debug.logger('decoder %s produced ASN.1 type %s <%s>' % (type(valueDecoder).__name__, type(value).__name__, repr(value))) - debug.scope.pop() - - return value - - -#: Turns Python objects of built-in types into ASN.1 objects. -#: -#: Takes Python objects of built-in types and turns them into a tree of -#: ASN.1 objects (e.g. :py:class:`~pyasn1.type.base.PyAsn1Item` derivative) which -#: may be a scalar or an arbitrary nested structure. -#: -#: Parameters -#: ---------- -#: pyObject: :py:class:`object` -#: A scalar or nested Python objects -#: -#: asn1Spec: any pyasn1 type object e.g. :py:class:`~pyasn1.type.base.PyAsn1Item` derivative -#: A pyasn1 type object to act as a template guiding the decoder. It is required -#: for successful interpretation of Python objects mapping into their ASN.1 -#: representations. -#: -#: Returns -#: ------- -#: : :py:class:`~pyasn1.type.base.PyAsn1Item` derivative -#: A scalar or constructed pyasn1 object -#: -#: Raises -#: ------ -#: : :py:class:`pyasn1.error.PyAsn1Error` -#: On decoding errors -decode = Decoder(tagMap, typeMap) diff --git a/src/lib/pyasn1/codec/native/encoder.py b/src/lib/pyasn1/codec/native/encoder.py deleted file mode 100644 index afeb8ae0..00000000 --- a/src/lib/pyasn1/codec/native/encoder.py +++ /dev/null @@ -1,215 +0,0 @@ -# -# This file is part of pyasn1 software. -# -# Copyright (c) 2005-2017, Ilya Etingof <etingof@gmail.com> -# License: http://pyasn1.sf.net/license.html -# -try: - from collections import OrderedDict - -except ImportError: - OrderedDict = dict - -from pyasn1.type import base, univ, char, useful -from pyasn1 import debug, error - -__all__ = ['encode'] - - -class AbstractItemEncoder(object): - def encode(self, encodeFun, value): - raise error.PyAsn1Error('Not implemented') - - -class ExplicitlyTaggedItemEncoder(AbstractItemEncoder): - def encode(self, encodeFun, value): - if isinstance(value, base.AbstractConstructedAsn1Item): - value = value.clone(tagSet=value.tagSet[:-1], - cloneValueFlag=1) - else: - value = value.clone(tagSet=value.tagSet[:-1]) - return encodeFun(value) - -explicitlyTaggedItemEncoder = ExplicitlyTaggedItemEncoder() - - -class BooleanEncoder(AbstractItemEncoder): - def encode(self, encodeFun, value): - return bool(value) - - -class IntegerEncoder(AbstractItemEncoder): - def encode(self, encodeFun, value): - return int(value) - - -class BitStringEncoder(AbstractItemEncoder): - def encode(self, encodeFun, value): - return str(value) - - -class OctetStringEncoder(AbstractItemEncoder): - def encode(self, encodeFun, value): - return value.asOctets() - - -class TextStringEncoder(AbstractItemEncoder): - def encode(self, encodeFun, value): - return value.prettyPrint() - - -class NullEncoder(AbstractItemEncoder): - def encode(self, encodeFun, value): - return None - - -class ObjectIdentifierEncoder(AbstractItemEncoder): - def encode(self, encodeFun, value): - return str(value) - - -class RealEncoder(AbstractItemEncoder): - def encode(self, encodeFun, value): - return float(value) - - -class SetEncoder(AbstractItemEncoder): - protoDict = dict - def encode(self, encodeFun, value): - value.verifySizeSpec() - namedTypes = value.getComponentType() - substrate = self.protoDict() - for idx, (key, subValue) in enumerate(value.items()): - if namedTypes[idx].isOptional and not value[idx].isValue: - continue - substrate[key] = encodeFun(subValue) - return substrate - - -class SequenceEncoder(SetEncoder): - protoDict = OrderedDict - - -class SequenceOfEncoder(AbstractItemEncoder): - def encode(self, encodeFun, value): - value.verifySizeSpec() - return [encodeFun(x) for x in value] - - -class ChoiceEncoder(SequenceEncoder): - pass - - -class AnyEncoder(AbstractItemEncoder): - def encode(self, encodeFun, value): - return value.asOctets() - - -tagMap = { - univ.Boolean.tagSet: BooleanEncoder(), - univ.Integer.tagSet: IntegerEncoder(), - univ.BitString.tagSet: BitStringEncoder(), - univ.OctetString.tagSet: OctetStringEncoder(), - univ.Null.tagSet: NullEncoder(), - univ.ObjectIdentifier.tagSet: ObjectIdentifierEncoder(), - univ.Enumerated.tagSet: IntegerEncoder(), - univ.Real.tagSet: RealEncoder(), - # Sequence & Set have same tags as SequenceOf & SetOf - univ.SequenceOf.tagSet: SequenceOfEncoder(), - univ.SetOf.tagSet: SequenceOfEncoder(), - univ.Choice.tagSet: ChoiceEncoder(), - # character string types - char.UTF8String.tagSet: TextStringEncoder(), - char.NumericString.tagSet: TextStringEncoder(), - char.PrintableString.tagSet: TextStringEncoder(), - char.TeletexString.tagSet: TextStringEncoder(), - char.VideotexString.tagSet: TextStringEncoder(), - char.IA5String.tagSet: TextStringEncoder(), - char.GraphicString.tagSet: TextStringEncoder(), - char.VisibleString.tagSet: TextStringEncoder(), - char.GeneralString.tagSet: TextStringEncoder(), - char.UniversalString.tagSet: TextStringEncoder(), - char.BMPString.tagSet: TextStringEncoder(), - # useful types - useful.ObjectDescriptor.tagSet: OctetStringEncoder(), - useful.GeneralizedTime.tagSet: OctetStringEncoder(), - useful.UTCTime.tagSet: OctetStringEncoder() -} - -# Type-to-codec map for ambiguous ASN.1 types -typeMap = { - univ.Set.typeId: SetEncoder(), - univ.SetOf.typeId: SequenceOfEncoder(), - univ.Sequence.typeId: SequenceEncoder(), - univ.SequenceOf.typeId: SequenceOfEncoder(), - univ.Choice.typeId: ChoiceEncoder(), - univ.Any.typeId: AnyEncoder() -} - - -class Encoder(object): - - # noinspection PyDefaultArgument - def __init__(self, tagMap, typeMap={}): - self.__tagMap = tagMap - self.__typeMap = typeMap - - def __call__(self, asn1Value): - if not isinstance(asn1Value, base.Asn1Item): - raise error.PyAsn1Error('value is not valid (should be an instance of an ASN.1 Item)') - - if debug.logger & debug.flagEncoder: - debug.scope.push(type(asn1Value).__name__) - debug.logger('encoder called for type %s <%s>' % (type(asn1Value).__name__, asn1Value.prettyPrint())) - - tagSet = asn1Value.tagSet - if len(tagSet) > 1: - concreteEncoder = explicitlyTaggedItemEncoder - else: - if asn1Value.typeId is not None and asn1Value.typeId in self.__typeMap: - concreteEncoder = self.__typeMap[asn1Value.typeId] - elif tagSet in self.__tagMap: - concreteEncoder = self.__tagMap[tagSet] - else: - tagSet = asn1Value.baseTagSet - if tagSet in self.__tagMap: - concreteEncoder = self.__tagMap[tagSet] - else: - raise error.PyAsn1Error('No encoder for %s' % (asn1Value,)) - - debug.logger & debug.flagEncoder and debug.logger('using value codec %s chosen by %s' % (type(concreteEncoder).__name__, tagSet)) - - pyObject = concreteEncoder.encode(self, asn1Value) - - if debug.logger & debug.flagEncoder: - debug.logger('encoder %s produced: %s' % (type(concreteEncoder).__name__, repr(pyObject))) - debug.scope.pop() - - return pyObject - - -#: Turns ASN.1 object into a Python built-in type object(s). -#: -#: Takes any ASN.1 object (e.g. :py:class:`~pyasn1.type.base.PyAsn1Item` derivative) -#: walks all its components recursively and produces a Python built-in type or a tree -#: of those. -#: -#: One exception is that instead of :py:class:`dict`, the :py:class:`OrderedDict` -#: can be produced (whenever available) to preserve ordering of the components -#: in ASN.1 SEQUENCE. -#: -#: Parameters -#: ---------- -# asn1Value: any pyasn1 object (e.g. :py:class:`~pyasn1.type.base.PyAsn1Item` derivative) -#: pyasn1 object to encode (or a tree of them) -#: -#: Returns -#: ------- -#: : :py:class:`object` -#: Python built-in type instance (or a tree of them) -#: -#: Raises -#: ------ -#: : :py:class:`pyasn1.error.PyAsn1Error` -#: On encoding errors -encode = Encoder(tagMap, typeMap) diff --git a/src/lib/pyasn1/compat/__init__.py b/src/lib/pyasn1/compat/__init__.py deleted file mode 100644 index 8c3066b2..00000000 --- a/src/lib/pyasn1/compat/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# This file is necessary to make this directory a package. diff --git a/src/lib/pyasn1/compat/binary.py b/src/lib/pyasn1/compat/binary.py deleted file mode 100644 index 65c42c74..00000000 --- a/src/lib/pyasn1/compat/binary.py +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is part of pyasn1 software. -# -# Copyright (c) 2005-2017, Ilya Etingof <etingof@gmail.com> -# License: http://pyasn1.sf.net/license.html -# -from sys import version_info - -if version_info[0:2] < (2, 6): - def bin(value): - bitstring = [] - - while value: - if value & 1 == 1: - bitstring.append('1') - else: - bitstring.append('0') - - value >>= 1 - - bitstring.reverse() - - return '0b' + ''.join(bitstring) -else: - bin = bin diff --git a/src/lib/pyasn1/compat/integer.py b/src/lib/pyasn1/compat/integer.py deleted file mode 100644 index ae9c7e1d..00000000 --- a/src/lib/pyasn1/compat/integer.py +++ /dev/null @@ -1,96 +0,0 @@ -# -# This file is part of pyasn1 software. -# -# Copyright (c) 2005-2017, Ilya Etingof <etingof@gmail.com> -# License: http://pyasn1.sf.net/license.html -# -import sys -if sys.version_info[0:2] < (3, 2): - from binascii import a2b_hex, b2a_hex -from pyasn1.compat.octets import oct2int, null - -if sys.version_info[0:2] < (3, 2): - def from_bytes(octets, signed=False): - value = long(b2a_hex(str(octets)), 16) - - if signed and oct2int(octets[0]) & 0x80: - return value - (1 << len(octets) * 8) - - return value - - def to_bytes(value, signed=False, length=0): - if value < 0: - if signed: - bits = bitLength(value) - - # two's complement form - maxValue = 1 << bits - valueToEncode = (value + maxValue) % maxValue - - else: - raise OverflowError('can\'t convert negative int to unsigned') - elif value == 0 and length == 0: - return null - else: - bits = 0 - valueToEncode = value - - hexValue = hex(valueToEncode)[2:] - if hexValue.endswith('L'): - hexValue = hexValue[:-1] - - if len(hexValue) & 1: - hexValue = '0' + hexValue - - # padding may be needed for two's complement encoding - if value != valueToEncode or length: - hexLength = len(hexValue) * 4 - - padLength = max(length, bits) - - if padLength > hexLength: - hexValue = '00' * ((padLength - hexLength - 1) // 8 + 1) + hexValue - elif length and hexLength - length > 7: - raise OverflowError('int too big to convert') - - firstOctet = int(hexValue[:2], 16) - - if signed: - if firstOctet & 0x80: - if value >= 0: - hexValue = '00' + hexValue - elif value < 0: - hexValue = 'ff' + hexValue - - octets_value = a2b_hex(hexValue) - - return octets_value - - def bitLength(number): - # bits in unsigned number - hexValue = hex(abs(number)) - bits = len(hexValue) - 2 - if hexValue.endswith('L'): - bits -= 1 - if bits & 1: - bits += 1 - bits *= 4 - # TODO: strip lhs zeros - return bits - -else: - - def from_bytes(octets, signed=False): - return int.from_bytes(bytes(octets), 'big', signed=signed) - - def to_bytes(value, signed=False, length=0): - length = max(value.bit_length(), length) - - if signed and length % 8 == 0: - length += 1 - - return value.to_bytes(length // 8 + (length % 8 and 1 or 0), 'big', signed=signed) - - def bitLength(number): - return int(number).bit_length() - diff --git a/src/lib/pyasn1/compat/octets.py b/src/lib/pyasn1/compat/octets.py deleted file mode 100644 index ec497a68..00000000 --- a/src/lib/pyasn1/compat/octets.py +++ /dev/null @@ -1,46 +0,0 @@ -# -# This file is part of pyasn1 software. -# -# Copyright (c) 2005-2017, Ilya Etingof <etingof@gmail.com> -# License: http://pyasn1.sf.net/license.html -# -from sys import version_info - -if version_info[0] <= 2: - int2oct = chr - # noinspection PyPep8 - ints2octs = lambda s: ''.join([int2oct(x) for x in s]) - null = '' - oct2int = ord - # noinspection PyPep8 - octs2ints = lambda s: [oct2int(x) for x in s] - # noinspection PyPep8 - str2octs = lambda x: x - # noinspection PyPep8 - octs2str = lambda x: x - # noinspection PyPep8 - isOctetsType = lambda s: isinstance(s, str) - # noinspection PyPep8 - isStringType = lambda s: isinstance(s, (str, unicode)) - # noinspection PyPep8 - ensureString = str -else: - ints2octs = bytes - # noinspection PyPep8 - int2oct = lambda x: ints2octs((x,)) - null = ints2octs() - # noinspection PyPep8 - oct2int = lambda x: x - # noinspection PyPep8 - octs2ints = lambda x: x - # noinspection PyPep8 - str2octs = lambda x: x.encode('iso-8859-1') - # noinspection PyPep8 - octs2str = lambda x: x.decode('iso-8859-1') - # noinspection PyPep8 - isOctetsType = lambda s: isinstance(s, bytes) - # noinspection PyPep8 - isStringType = lambda s: isinstance(s, str) - # noinspection PyPep8 - ensureString = bytes - diff --git a/src/lib/pyasn1/debug.py b/src/lib/pyasn1/debug.py deleted file mode 100644 index 04a9da5c..00000000 --- a/src/lib/pyasn1/debug.py +++ /dev/null @@ -1,130 +0,0 @@ -# -# This file is part of pyasn1 software. -# -# Copyright (c) 2005-2017, Ilya Etingof <etingof@gmail.com> -# License: http://pyasn1.sf.net/license.html -# -import logging -from pyasn1.compat.octets import octs2ints -from pyasn1 import error -from pyasn1 import __version__ - -__all__ = ['Debug', 'setLogger', 'hexdump'] - -flagNone = 0x0000 -flagEncoder = 0x0001 -flagDecoder = 0x0002 -flagAll = 0xffff - -flagMap = { - 'encoder': flagEncoder, - 'decoder': flagDecoder, - 'all': flagAll -} - - -class Printer(object): - # noinspection PyShadowingNames - def __init__(self, logger=None, handler=None, formatter=None): - if logger is None: - logger = logging.getLogger('pyasn1') - logger.setLevel(logging.DEBUG) - if handler is None: - handler = logging.StreamHandler() - if formatter is None: - formatter = logging.Formatter('%(asctime)s %(name)s: %(message)s') - handler.setFormatter(formatter) - handler.setLevel(logging.DEBUG) - logger.addHandler(handler) - self.__logger = logger - - def __call__(self, msg): - self.__logger.debug(msg) - - def __str__(self): - return '<python built-in logging>' - - -if hasattr(logging, 'NullHandler'): - NullHandler = logging.NullHandler -else: - # Python 2.6 and older - class NullHandler(logging.Handler): - def emit(self, record): - pass - - -class Debug(object): - defaultPrinter = None - - def __init__(self, *flags, **options): - self._flags = flagNone - if options.get('printer') is not None: - self._printer = options.get('printer') - elif self.defaultPrinter is not None: - self._printer = self.defaultPrinter - if 'loggerName' in options: - # route our logs to parent logger - self._printer = Printer( - logger=logging.getLogger(options['loggerName']), - handler=NullHandler() - ) - else: - self._printer = Printer() - self('running pyasn1 version %s' % __version__) - for f in flags: - inverse = f and f[0] in ('!', '~') - if inverse: - f = f[1:] - try: - if inverse: - self._flags &= ~flagMap[f] - else: - self._flags |= flagMap[f] - except KeyError: - raise error.PyAsn1Error('bad debug flag %s' % f) - - self('debug category \'%s\' %s' % (f, inverse and 'disabled' or 'enabled')) - - def __str__(self): - return 'logger %s, flags %x' % (self._printer, self._flags) - - def __call__(self, msg): - self._printer(msg) - - def __and__(self, flag): - return self._flags & flag - - def __rand__(self, flag): - return flag & self._flags - - -logger = 0 - - -def setLogger(l): - global logger - logger = l - - -def hexdump(octets): - return ' '.join( - ['%s%.2X' % (n % 16 == 0 and ('\n%.5d: ' % n) or '', x) - for n, x in zip(range(len(octets)), octs2ints(octets))] - ) - - -class Scope(object): - def __init__(self): - self._list = [] - - def __str__(self): return '.'.join(self._list) - - def push(self, token): - self._list.append(token) - - def pop(self): - return self._list.pop() - - -scope = Scope() diff --git a/src/lib/pyasn1/error.py b/src/lib/pyasn1/error.py deleted file mode 100644 index 85308557..00000000 --- a/src/lib/pyasn1/error.py +++ /dev/null @@ -1,18 +0,0 @@ -# -# This file is part of pyasn1 software. -# -# Copyright (c) 2005-2017, Ilya Etingof <etingof@gmail.com> -# License: http://pyasn1.sf.net/license.html -# - - -class PyAsn1Error(Exception): - pass - - -class ValueConstraintError(PyAsn1Error): - pass - - -class SubstrateUnderrunError(PyAsn1Error): - pass diff --git a/src/lib/pyasn1/type/__init__.py b/src/lib/pyasn1/type/__init__.py deleted file mode 100644 index 8c3066b2..00000000 --- a/src/lib/pyasn1/type/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# This file is necessary to make this directory a package. diff --git a/src/lib/pyasn1/type/base.py b/src/lib/pyasn1/type/base.py deleted file mode 100644 index 00c329c2..00000000 --- a/src/lib/pyasn1/type/base.py +++ /dev/null @@ -1,617 +0,0 @@ -# -# This file is part of pyasn1 software. -# -# Copyright (c) 2005-2017, Ilya Etingof <etingof@gmail.com> -# License: http://pyasn1.sf.net/license.html -# -import sys -from pyasn1.type import constraint, tagmap, tag -from pyasn1 import error - -__all__ = ['Asn1Item', 'Asn1ItemBase', 'AbstractSimpleAsn1Item', 'AbstractConstructedAsn1Item'] - - -class Asn1Item(object): - @classmethod - def getTypeId(cls, increment=1): - try: - Asn1Item._typeCounter += increment - except AttributeError: - Asn1Item._typeCounter = increment - return Asn1Item._typeCounter - - -class Asn1ItemBase(Asn1Item): - #: Set or return a :py:class:`~pyasn1.type.tag.TagSet` object representing - #: ASN.1 tag(s) associated with |ASN.1| type. - tagSet = tag.TagSet() - - #: Default :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` - #: object imposing constraints on initialization values. - subtypeSpec = constraint.ConstraintsIntersection() - - # Disambiguation ASN.1 types identification - typeId = None - - def __init__(self, tagSet=None, subtypeSpec=None): - if tagSet is None: - self._tagSet = self.__class__.tagSet - else: - self._tagSet = tagSet - if subtypeSpec is None: - self._subtypeSpec = self.__class__.subtypeSpec - else: - self._subtypeSpec = subtypeSpec - - @property - def effectiveTagSet(self): - """For |ASN.1| type is equivalent to *tagSet* - """ - return self._tagSet # used by untagged types - - @property - def tagMap(self): - """Return a :class:`~pyasn1.type.tagmap.TagMap` object mapping ASN.1 tags to ASN.1 objects within callee object. - """ - try: - return self._tagMap - - except AttributeError: - self._tagMap = tagmap.TagMap({self._tagSet: self}) - return self._tagMap - - def isSameTypeWith(self, other, matchTags=True, matchConstraints=True): - """Examine |ASN.1| type for equality with other ASN.1 type. - - ASN.1 tags (:py:mod:`~pyasn1.type.tag`) and constraints - (:py:mod:`~pyasn1.type.constraint`) are examined when carrying - out ASN.1 types comparison. - - No Python inheritance relationship between PyASN1 objects is considered. - - Parameters - ---------- - other: a pyasn1 type object - Class instance representing ASN.1 type. - - Returns - ------- - : :class:`bool` - :class:`True` if *other* is |ASN.1| type, - :class:`False` otherwise. - """ - return self is other or \ - (not matchTags or - self._tagSet == other.tagSet) and \ - (not matchConstraints or - self._subtypeSpec == other.subtypeSpec) - - def isSuperTypeOf(self, other, matchTags=True, matchConstraints=True): - """Examine |ASN.1| type for subtype relationship with other ASN.1 type. - - ASN.1 tags (:py:mod:`~pyasn1.type.tag`) and constraints - (:py:mod:`~pyasn1.type.constraint`) are examined when carrying - out ASN.1 types comparison. - - No Python inheritance relationship between PyASN1 objects is considered. - - - Parameters - ---------- - other: a pyasn1 type object - Class instance representing ASN.1 type. - - Returns - ------- - : :class:`bool` - :class:`True` if *other* is a subtype of |ASN.1| type, - :class:`False` otherwise. - """ - return (not matchTags or - self._tagSet.isSuperTagSetOf(other.tagSet)) and \ - (not matchConstraints or - (self._subtypeSpec.isSuperTypeOf(other.subtypeSpec))) - - @staticmethod - def isNoValue(*values): - for value in values: - if value is not None and value is not noValue: - return False - return True - - # backward compatibility - - def getTagSet(self): - return self.tagSet - - def getEffectiveTagSet(self): - return self.effectiveTagSet - - def getTagMap(self): - return self.tagMap - - def getSubtypeSpec(self): - return self.subtypeSpec - - -class NoValue(object): - """Create a singleton instance of NoValue class. - - NoValue object can be used as an initializer on PyASN1 type class - instantiation to represent ASN.1 type rather than ASN.1 data value. - - No operations other than type comparison can be performed on - a PyASN1 type object. - """ - skipMethods = ('__getattribute__', '__getattr__', '__setattr__', '__delattr__', - '__class__', '__init__', '__del__', '__new__', '__repr__', - '__qualname__', '__objclass__', 'im_class', '__sizeof__') - - _instance = None - - def __new__(cls): - if cls._instance is None: - def getPlug(name): - def plug(self, *args, **kw): - raise error.PyAsn1Error('Uninitialized ASN.1 value ("%s" attribute looked up)' % name) - return plug - - op_names = [name - for typ in (str, int, list, dict) - for name in dir(typ) - if name not in cls.skipMethods and name.startswith('__') and name.endswith('__') and callable(getattr(typ, name))] - - for name in set(op_names): - setattr(cls, name, getPlug(name)) - - cls._instance = object.__new__(cls) - - return cls._instance - - def __getattr__(self, attr): - if attr in self.skipMethods: - raise AttributeError('attribute %s not present' % attr) - raise error.PyAsn1Error('No value for "%s"' % attr) - - def __repr__(self): - return '%s()' % self.__class__.__name__ - -noValue = NoValue() - - -# Base class for "simple" ASN.1 objects. These are immutable. -class AbstractSimpleAsn1Item(Asn1ItemBase): - #: Default payload value - defaultValue = noValue - - def __init__(self, value=noValue, tagSet=None, subtypeSpec=None): - Asn1ItemBase.__init__(self, tagSet, subtypeSpec) - if value is None or value is noValue: - value = self.defaultValue - else: - value = self.prettyIn(value) - try: - self._subtypeSpec(value) - - except error.PyAsn1Error: - exType, exValue, exTb = sys.exc_info() - raise exType('%s at %s' % (exValue, self.__class__.__name__)) - - self.__hashedValue = None - self._value = value - self._len = None - - def __repr__(self): - representation = [] - if self._value is not self.defaultValue: - representation.append(self.prettyOut(self._value)) - if self._tagSet is not self.__class__.tagSet: - representation.append('tagSet=%r' % (self._tagSet,)) - if self._subtypeSpec is not self.subtypeSpec: - representation.append('subtypeSpec=%r' % (self._subtypeSpec,)) - return '%s(%s)' % (self.__class__.__name__, ', '.join(representation)) - - def __str__(self): - return str(self._value) - - def __eq__(self, other): - return self is other and True or self._value == other - - def __ne__(self, other): - return self._value != other - - def __lt__(self, other): - return self._value < other - - def __le__(self, other): - return self._value <= other - - def __gt__(self, other): - return self._value > other - - def __ge__(self, other): - return self._value >= other - - if sys.version_info[0] <= 2: - def __nonzero__(self): - return self._value and True or False - else: - def __bool__(self): - return self._value and True or False - - def __hash__(self): - if self.__hashedValue is None: - self.__hashedValue = hash(self._value) - return self.__hashedValue - - @property - def isValue(self): - """Indicate if |ASN.1| object represents ASN.1 type or ASN.1 value. - - The PyASN1 type objects can only participate in types comparison - and serve as a blueprint for serialization codecs to resolve - ambiguous types. - - The PyASN1 value objects can additionally participate in most - of built-in Python operations. - - Returns - ------- - : :class:`bool` - :class:`True` if object represents ASN.1 value and type, - :class:`False` if object represents just ASN.1 type. - - """ - return self._value is not noValue - - def clone(self, value=noValue, tagSet=None, subtypeSpec=None): - """Create a copy of a |ASN.1| type or object. - - Any parameters to the *clone()* method will replace corresponding - properties of the |ASN.1| object. - - Parameters - ---------- - value: :class:`tuple`, :class:`str` or |ASN.1| object - Initialization value to pass to new ASN.1 object instead of - inheriting one from the caller. - - tagSet: :py:class:`~pyasn1.type.tag.TagSet` - Object representing ASN.1 tag(s) to use in new object instead of inheriting from the caller - - subtypeSpec: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` - Object representing ASN.1 subtype constraint(s) to use in new object instead of inheriting from the caller - - Returns - ------- - : - new instance of |ASN.1| type/value - """ - isModified = False - - if value is None or value is noValue: - value = self._value - else: - isModified = True - if tagSet is None or tagSet is noValue: - tagSet = self._tagSet - else: - isModified = True - if subtypeSpec is None or subtypeSpec is noValue: - subtypeSpec = self._subtypeSpec - else: - isModified = True - - if isModified: - return self.__class__(value, tagSet, subtypeSpec) - else: - return self - - def subtype(self, value=noValue, implicitTag=None, explicitTag=None, - subtypeSpec=None): - """Create a copy of a |ASN.1| type or object. - - Any parameters to the *subtype()* method will be added to the corresponding - properties of the |ASN.1| object. - - Parameters - ---------- - value: :class:`tuple`, :class:`str` or |ASN.1| object - Initialization value to pass to new ASN.1 object instead of - inheriting one from the caller. - - implicitTag: :py:class:`~pyasn1.type.tag.Tag` - Implicitly apply given ASN.1 tag object to caller's - :py:class:`~pyasn1.type.tag.TagSet`, then use the result as - new object's ASN.1 tag(s). - - explicitTag: :py:class:`~pyasn1.type.tag.Tag` - Explicitly apply given ASN.1 tag object to caller's - :py:class:`~pyasn1.type.tag.TagSet`, then use the result as - new object's ASN.1 tag(s). - - subtypeSpec: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` - Add ASN.1 constraints object to one of the caller, then - use the result as new object's ASN.1 constraints. - - Returns - ------- - : - new instance of |ASN.1| type/value - """ - isModified = False - - if value is None or value is noValue: - value = self._value - else: - isModified = True - if implicitTag is not None and implicitTag is not noValue: - tagSet = self._tagSet.tagImplicitly(implicitTag) - isModified = True - elif explicitTag is not None and explicitTag is not noValue: - tagSet = self._tagSet.tagExplicitly(explicitTag) - isModified = True - else: - tagSet = self._tagSet - if subtypeSpec is None or subtypeSpec is noValue: - subtypeSpec = self._subtypeSpec - else: - subtypeSpec = self._subtypeSpec + subtypeSpec - isModified = True - - if isModified: - return self.__class__(value, tagSet, subtypeSpec) - else: - return self - - def prettyIn(self, value): - return value - - def prettyOut(self, value): - return str(value) - - def prettyPrint(self, scope=0): - """Provide human-friendly printable object representation. - - Returns - ------- - : :class:`str` - human-friendly type and/or value representation. - """ - if self.isValue: - return self.prettyOut(self._value) - else: - return '<no value>' - - # XXX Compatibility stub - def prettyPrinter(self, scope=0): - return self.prettyPrint(scope) - - # noinspection PyUnusedLocal - def prettyPrintType(self, scope=0): - return '%s -> %s' % (self.tagSet, self.__class__.__name__) - - # backward compatibility - - def hasValue(self): - return self.isValue - - -# -# Constructed types: -# * There are five of them: Sequence, SequenceOf/SetOf, Set and Choice -# * ASN1 types and values are represened by Python class instances -# * Value initialization is made for defaulted components only -# * Primary method of component addressing is by-position. Data model for base -# type is Python sequence. Additional type-specific addressing methods -# may be implemented for particular types. -# * SequenceOf and SetOf types do not implement any additional methods -# * Sequence, Set and Choice types also implement by-identifier addressing -# * Sequence, Set and Choice types also implement by-asn1-type (tag) addressing -# * Sequence and Set types may include optional and defaulted -# components -# * Constructed types hold a reference to component types used for value -# verification and ordering. -# * Component type is a scalar type for SequenceOf/SetOf types and a list -# of types for Sequence/Set/Choice. -# - -def setupComponent(): - """Returns a sentinel value. - - Indicates to a constructed type to set up its inner component so that it - can be referred to. This is useful in situation when you want to populate - descendants of a constructed type what requires being able to refer to - their parent types along the way. - - Example - ------- - - >>> constructed['record'] = setupComponent() - >>> constructed['record']['scalar'] = 42 - """ - return noValue - - -class AbstractConstructedAsn1Item(Asn1ItemBase): - - #: If `True`, requires exact component type matching, - #: otherwise subtype relation is only enforced - strictConstraints = False - - def __init__(self, componentType=None, tagSet=None, - subtypeSpec=None, sizeSpec=None): - Asn1ItemBase.__init__(self, tagSet, subtypeSpec) - if componentType is None: - self._componentType = self.componentType - else: - self._componentType = componentType - if sizeSpec is None: - self._sizeSpec = self.sizeSpec - else: - self._sizeSpec = sizeSpec - self._componentValues = [] - - def __repr__(self): - representation = [] - if self._componentType is not self.componentType: - representation.append('componentType=%r' % (self._componentType,)) - if self._tagSet is not self.__class__.tagSet: - representation.append('tagSet=%r' % (self._tagSet,)) - if self._subtypeSpec is not self.subtypeSpec: - representation.append('subtypeSpec=%r' % (self._subtypeSpec,)) - representation = '%s(%s)' % (self.__class__.__name__, ', '.join(representation)) - if self._componentValues: - for idx, component in enumerate(self._componentValues): - if component is None or component is noValue: - continue - representation += '.setComponentByPosition(%d, %s)' % (idx, repr(component)) - return representation - - def __eq__(self, other): - return self is other and True or self._componentValues == other - - def __ne__(self, other): - return self._componentValues != other - - def __lt__(self, other): - return self._componentValues < other - - def __le__(self, other): - return self._componentValues <= other - - def __gt__(self, other): - return self._componentValues > other - - def __ge__(self, other): - return self._componentValues >= other - - if sys.version_info[0] <= 2: - def __nonzero__(self): - return self._componentValues and True or False - else: - def __bool__(self): - return self._componentValues and True or False - - def _cloneComponentValues(self, myClone, cloneValueFlag): - pass - - def clone(self, tagSet=None, subtypeSpec=None, sizeSpec=None, cloneValueFlag=None): - """Create a copy of a |ASN.1| type or object. - - Any parameters to the *clone()* method will replace corresponding - properties of the |ASN.1| object. - - Parameters - ---------- - tagSet: :py:class:`~pyasn1.type.tag.TagSet` - Object representing non-default ASN.1 tag(s) - - subtypeSpec: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` - Object representing non-default ASN.1 subtype constraint(s) - - sizeSpec: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` - Object representing non-default ASN.1 size constraint(s) - - Returns - ------- - : - new instance of |ASN.1| type/value - - """ - if tagSet is None: - tagSet = self._tagSet - if subtypeSpec is None: - subtypeSpec = self._subtypeSpec - if sizeSpec is None: - sizeSpec = self._sizeSpec - clone = self.__class__(self._componentType, tagSet, subtypeSpec, sizeSpec) - if cloneValueFlag: - self._cloneComponentValues(clone, cloneValueFlag) - return clone - - def subtype(self, implicitTag=None, explicitTag=None, subtypeSpec=None, - sizeSpec=None, cloneValueFlag=None): - """Create a copy of a |ASN.1| type or object. - - Any parameters to the *subtype()* method will be added to the corresponding - properties of the |ASN.1| object. - - Parameters - ---------- - tagSet: :py:class:`~pyasn1.type.tag.TagSet` - Object representing non-default ASN.1 tag(s) - - subtypeSpec: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` - Object representing non-default ASN.1 subtype constraint(s) - - sizeSpec: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` - Object representing non-default ASN.1 size constraint(s) - - Returns - ------- - : - new instance of |ASN.1| type/value - - """ - if implicitTag is not None and implicitTag is not noValue: - tagSet = self._tagSet.tagImplicitly(implicitTag) - elif explicitTag is not None and explicitTag is not noValue: - tagSet = self._tagSet.tagExplicitly(explicitTag) - else: - tagSet = self._tagSet - if subtypeSpec is None or subtypeSpec is noValue: - subtypeSpec = self._subtypeSpec - else: - subtypeSpec = self._subtypeSpec + subtypeSpec - if sizeSpec is None or sizeSpec is noValue: - sizeSpec = self._sizeSpec - else: - sizeSpec += self._sizeSpec - clone = self.__class__(self._componentType, tagSet, subtypeSpec, sizeSpec) - if cloneValueFlag: - self._cloneComponentValues(clone, cloneValueFlag) - return clone - - def verifySizeSpec(self): - self._sizeSpec(self) - - def getComponentByPosition(self, idx): - raise error.PyAsn1Error('Method not implemented') - - def setComponentByPosition(self, idx, value, verifyConstraints=True): - raise error.PyAsn1Error('Method not implemented') - - def setComponents(self, *args, **kwargs): - for idx, value in enumerate(args): - self[idx] = value - for k in kwargs: - self[k] = kwargs[k] - return self - - def getComponentType(self): - return self._componentType - - # backward compatibility -- no-op - def setDefaultComponents(self): - pass - - @property - def componentTagMap(self): - raise error.PyAsn1Error('Method not implemented') - - def __getitem__(self, idx): - return self.getComponentByPosition(idx) - - def __setitem__(self, idx, value): - self.setComponentByPosition(idx, value) - - def __len__(self): - return len(self._componentValues) - - def clear(self): - self._componentValues = [] - - # backward compatibility - def getComponentTagMap(self): - return self.componentTagMap \ No newline at end of file diff --git a/src/lib/pyasn1/type/char.py b/src/lib/pyasn1/type/char.py deleted file mode 100644 index 039e5366..00000000 --- a/src/lib/pyasn1/type/char.py +++ /dev/null @@ -1,378 +0,0 @@ -# -# This file is part of pyasn1 software. -# -# Copyright (c) 2005-2017, Ilya Etingof <etingof@gmail.com> -# License: http://pyasn1.sf.net/license.html -# -import sys -from pyasn1.type import univ, tag -from pyasn1 import error - - -__all__ = ['NumericString', 'PrintableString', 'TeletexString', 'T61String', 'VideotexString', - 'IA5String', 'GraphicString', 'VisibleString', 'ISO646String', - 'GeneralString', 'UniversalString', 'BMPString', 'UTF8String'] - -NoValue = univ.NoValue -noValue = univ.noValue - - -class AbstractCharacterString(univ.OctetString): - """Creates |ASN.1| type or object. - - |ASN.1| objects are immutable and duck-type Python 2 :class:`unicode` or Python 3 :class:`str`. - When used in octet-stream context, |ASN.1| type assumes "|encoding|" encoding. - - Parameters - ---------- - value: :class:`unicode`, :class:`str`, :class:`bytes` or |ASN.1| object - unicode object (Python 2) or string (Python 3), alternatively string - (Python 2) or bytes (Python 3) representing octet-stream of serialized - unicode string (note `encoding` parameter) or |ASN.1| class instance. - - tagSet: :py:class:`~pyasn1.type.tag.TagSet` - Object representing non-default ASN.1 tag(s) - - subtypeSpec: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` - Object representing non-default ASN.1 subtype constraint(s) - - encoding: :py:class:`str` - Unicode codec ID to encode/decode :class:`unicode` (Python 2) or - :class:`str` (Python 3) the payload when |ASN.1| object is used - in octet-stream context. - - Raises - ------ - : :py:class:`pyasn1.error.PyAsn1Error` - On constraint violation or bad initializer. - """ - - if sys.version_info[0] <= 2: - def __str__(self): - try: - return self._value.encode(self._encoding) - except UnicodeEncodeError: - raise error.PyAsn1Error( - 'Can\'t encode string \'%s\' with \'%s\' codec' % (self._value, self._encoding) - ) - - def __unicode__(self): - return unicode(self._value) - - def prettyIn(self, value): - if isinstance(value, unicode): - return value - elif isinstance(value, str): - try: - return value.decode(self._encoding) - except (LookupError, UnicodeDecodeError): - raise error.PyAsn1Error( - 'Can\'t decode string \'%s\' with \'%s\' codec' % (value, self._encoding) - ) - elif isinstance(value, (tuple, list)): - try: - return self.prettyIn(''.join([chr(x) for x in value])) - except ValueError: - raise error.PyAsn1Error( - 'Bad %s initializer \'%s\'' % (self.__class__.__name__, value) - ) - else: - try: - return unicode(value) - except UnicodeDecodeError: - raise error.PyAsn1Error( - 'Can\'t turn object \'%s\' into unicode' % (value,) - ) - - def asOctets(self, padding=True): - return str(self) - - def asNumbers(self, padding=True): - return tuple([ord(x) for x in str(self)]) - - else: - def __str__(self): - return str(self._value) - - def __bytes__(self): - try: - return self._value.encode(self._encoding) - except UnicodeEncodeError: - raise error.PyAsn1Error( - 'Can\'t encode string \'%s\' with \'%s\' codec' % (self._value, self._encoding) - ) - - def prettyIn(self, value): - if isinstance(value, str): - return value - elif isinstance(value, bytes): - try: - return value.decode(self._encoding) - except UnicodeDecodeError: - raise error.PyAsn1Error( - 'Can\'t decode string \'%s\' with \'%s\' codec' % (value, self._encoding) - ) - elif isinstance(value, (tuple, list)): - return self.prettyIn(bytes(value)) - else: - try: - return str(value) - except (UnicodeDecodeError, ValueError): - raise error.PyAsn1Error( - 'Can\'t turn object \'%s\' into unicode' % (value,) - ) - - def asOctets(self, padding=True): - return bytes(self) - - def asNumbers(self, padding=True): - return tuple(bytes(self)) - - def prettyOut(self, value): - return value - - def __reversed__(self): - return reversed(self._value) - - def clone(self, value=noValue, tagSet=None, subtypeSpec=None, - encoding=None, binValue=noValue, hexValue=noValue): - """Creates a copy of a |ASN.1| type or object. - - Any parameters to the *clone()* method will replace corresponding - properties of the |ASN.1| object. - - Parameters - ---------- - value: :class:`unicode`, :class:`str`, :class:`bytes` or |ASN.1| object - unicode object (Python 2) or string (Python 3), alternatively string - (Python 2) or bytes (Python 3) representing octet-stream of serialized - unicode string (note `encoding` parameter) or |ASN.1| class instance. - - tagSet: :py:class:`~pyasn1.type.tag.TagSet` - Object representing non-default ASN.1 tag(s) - - subtypeSpec: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` - Object representing non-default ASN.1 subtype constraint(s) - - encoding: :py:class:`str` - Unicode codec ID to encode/decode :py:class:`unicode` (Python 2) or - :py:class:`str` (Python 3) the payload when |ASN.1| object is used - in octet-stream context. - - Returns - ------- - : - new instance of |ASN.1| type/value - - """ - return univ.OctetString.clone(self, value, tagSet, subtypeSpec, encoding, binValue, hexValue) - - def subtype(self, value=noValue, implicitTag=None, explicitTag=None, - subtypeSpec=None, encoding=None, binValue=noValue, hexValue=noValue): - """Creates a copy of a |ASN.1| type or object. - - Any parameters to the *subtype()* method will be added to the corresponding - properties of the |ASN.1| object. - - Parameters - ---------- - value: :class:`unicode`, :class:`str`, :class:`bytes` or |ASN.1| object - unicode object (Python 2) or string (Python 3), alternatively string - (Python 2) or bytes (Python 3) representing octet-stream of serialized - unicode string (note `encoding` parameter) or |ASN.1| class instance. - - implicitTag: :py:class:`~pyasn1.type.tag.Tag` - Implicitly apply given ASN.1 tag object to caller's - :py:class:`~pyasn1.type.tag.TagSet`, then use the result as - new object's ASN.1 tag(s). - - explicitTag: :py:class:`~pyasn1.type.tag.Tag` - Explicitly apply given ASN.1 tag object to caller's - :py:class:`~pyasn1.type.tag.TagSet`, then use the result as - new object's ASN.1 tag(s). - - subtypeSpec: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` - Object representing non-default ASN.1 subtype constraint(s) - - encoding: :py:class:`str` - Unicode codec ID to encode/decode :py:class:`unicode` (Python 2) or - :py:class:`str` (Python 3) the payload when |ASN.1| object is used - in octet-stream context. - - Returns - ------- - : - new instance of |ASN.1| type/value - - """ - return univ.OctetString.subtype(self, value, implicitTag, explicitTag, subtypeSpec, encoding, binValue, hexValue) - - -class NumericString(AbstractCharacterString): - __doc__ = AbstractCharacterString.__doc__ - - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.tag.TagSet` object representing ASN.1 tag(s) - #: associated with |ASN.1| type. - tagSet = AbstractCharacterString.tagSet.tagImplicitly( - tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 18) - ) - encoding = 'us-ascii' - - # Optimization for faster codec lookup - typeId = AbstractCharacterString.getTypeId() - - -class PrintableString(AbstractCharacterString): - __doc__ = AbstractCharacterString.__doc__ - - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.tag.TagSet` object representing ASN.1 tag(s) - #: associated with |ASN.1| type. - tagSet = AbstractCharacterString.tagSet.tagImplicitly( - tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 19) - ) - encoding = 'us-ascii' - - # Optimization for faster codec lookup - typeId = AbstractCharacterString.getTypeId() - - -class TeletexString(AbstractCharacterString): - __doc__ = AbstractCharacterString.__doc__ - - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.tag.TagSet` object representing ASN.1 tag(s) - #: associated with |ASN.1| type. - tagSet = AbstractCharacterString.tagSet.tagImplicitly( - tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 20) - ) - encoding = 'iso-8859-1' - - -class T61String(TeletexString): - __doc__ = TeletexString.__doc__ - - -class VideotexString(AbstractCharacterString): - __doc__ = AbstractCharacterString.__doc__ - - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.tag.TagSet` object representing ASN.1 tag(s) - #: associated with |ASN.1| type. - tagSet = AbstractCharacterString.tagSet.tagImplicitly( - tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 21) - ) - encoding = 'iso-8859-1' - - # Optimization for faster codec lookup - typeId = AbstractCharacterString.getTypeId() - - -class IA5String(AbstractCharacterString): - __doc__ = AbstractCharacterString.__doc__ - - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.tag.TagSet` object representing ASN.1 tag(s) - #: associated with |ASN.1| type. - tagSet = AbstractCharacterString.tagSet.tagImplicitly( - tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 22) - ) - encoding = 'us-ascii' - - # Optimization for faster codec lookup - typeId = AbstractCharacterString.getTypeId() - - -class GraphicString(AbstractCharacterString): - __doc__ = AbstractCharacterString.__doc__ - - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.tag.TagSet` object representing ASN.1 tag(s) - #: associated with |ASN.1| type. - tagSet = AbstractCharacterString.tagSet.tagImplicitly( - tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 25) - ) - encoding = 'iso-8859-1' - - # Optimization for faster codec lookup - typeId = AbstractCharacterString.getTypeId() - - -class VisibleString(AbstractCharacterString): - __doc__ = AbstractCharacterString.__doc__ - - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.tag.TagSet` object representing ASN.1 tag(s) - #: associated with |ASN.1| type. - tagSet = AbstractCharacterString.tagSet.tagImplicitly( - tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 26) - ) - encoding = 'us-ascii' - - # Optimization for faster codec lookup - typeId = AbstractCharacterString.getTypeId() - - -class ISO646String(VisibleString): - __doc__ = VisibleString.__doc__ - - -class GeneralString(AbstractCharacterString): - __doc__ = AbstractCharacterString.__doc__ - - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.tag.TagSet` object representing ASN.1 tag(s) - #: associated with |ASN.1| type. - tagSet = AbstractCharacterString.tagSet.tagImplicitly( - tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 27) - ) - encoding = 'iso-8859-1' - - # Optimization for faster codec lookup - typeId = AbstractCharacterString.getTypeId() - - -class UniversalString(AbstractCharacterString): - __doc__ = AbstractCharacterString.__doc__ - - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.tag.TagSet` object representing ASN.1 tag(s) - #: associated with |ASN.1| type. - tagSet = AbstractCharacterString.tagSet.tagImplicitly( - tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 28) - ) - encoding = "utf-32-be" - - # Optimization for faster codec lookup - typeId = AbstractCharacterString.getTypeId() - - -class BMPString(AbstractCharacterString): - __doc__ = AbstractCharacterString.__doc__ - - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.tag.TagSet` object representing ASN.1 tag(s) - #: associated with |ASN.1| type. - tagSet = AbstractCharacterString.tagSet.tagImplicitly( - tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 30) - ) - encoding = "utf-16-be" - - # Optimization for faster codec lookup - typeId = AbstractCharacterString.getTypeId() - - -class UTF8String(AbstractCharacterString): - __doc__ = AbstractCharacterString.__doc__ - - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.tag.TagSet` object representing ASN.1 tag(s) - #: associated with |ASN.1| type. - tagSet = AbstractCharacterString.tagSet.tagImplicitly( - tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 12) - ) - encoding = "utf-8" - - # Optimization for faster codec lookup - typeId = AbstractCharacterString.getTypeId() diff --git a/src/lib/pyasn1/type/constraint.py b/src/lib/pyasn1/type/constraint.py deleted file mode 100644 index 7f96c507..00000000 --- a/src/lib/pyasn1/type/constraint.py +++ /dev/null @@ -1,283 +0,0 @@ -# -# This file is part of pyasn1 software. -# -# Copyright (c) 2005-2017, Ilya Etingof <etingof@gmail.com> -# License: http://pyasn1.sf.net/license.html -# -# Original concept and code by Mike C. Fletcher. -# -import sys -from pyasn1.type import error - -__all__ = ['SingleValueConstraint', 'ContainedSubtypeConstraint', 'ValueRangeConstraint', - 'ValueSizeConstraint', 'PermittedAlphabetConstraint', 'InnerTypeConstraint', - 'ConstraintsExclusion', 'ConstraintsIntersection', 'ConstraintsUnion'] - - -class AbstractConstraint(object): - """Abstract base-class for constraint objects - - Constraints should be stored in a simple sequence in the - namespace of their client Asn1Item sub-classes in cases - when ASN.1 constraint is define. - """ - - def __init__(self, *values): - self._valueMap = set() - self._setValues(values) - self.__hashedValues = None - - def __call__(self, value, idx=None): - if not self._values: - return - - try: - self._testValue(value, idx) - - except error.ValueConstraintError: - raise error.ValueConstraintError( - '%s failed at: %r' % (self, sys.exc_info()[1]) - ) - - def __repr__(self): - return '%s(%s)' % ( - self.__class__.__name__, - ', '.join([repr(x) for x in self._values]) - ) - - def __eq__(self, other): - return self is other and True or self._values == other - - def __ne__(self, other): - return self._values != other - - def __lt__(self, other): - return self._values < other - - def __le__(self, other): - return self._values <= other - - def __gt__(self, other): - return self._values > other - - def __ge__(self, other): - return self._values >= other - - if sys.version_info[0] <= 2: - def __nonzero__(self): - return self._values and True or False - else: - def __bool__(self): - return self._values and True or False - - def __hash__(self): - if self.__hashedValues is None: - self.__hashedValues = hash((self.__class__.__name__, self._values)) - return self.__hashedValues - - # descriptor protocol - - def __get__(self, instance, owner): - if instance is None: - return self - - # This is a bit of hack: look up instance attribute first, - # then try class attribute if instance attribute with that - # name is not available. - # The rationale is to have `.subtypeSpec`/`.sizeSpec` readable-writeable - # as a class attribute and read-only as instance attribute. - try: - return instance._subtypeSpec - - except AttributeError: - try: - return instance._sizeSpec - - except AttributeError: - return self - - def __set__(self, instance, value): - raise AttributeError('attribute is read-only') - - def _setValues(self, values): - self._values = values - - def _testValue(self, value, idx): - raise error.ValueConstraintError(value) - - # Constraints derivation logic - def getValueMap(self): - return self._valueMap - - def isSuperTypeOf(self, otherConstraint): - return (otherConstraint is self or - not self._values or - otherConstraint == self or - self in otherConstraint.getValueMap()) - - def isSubTypeOf(self, otherConstraint): - return (otherConstraint is self or - not self or - otherConstraint == self or - otherConstraint in self._valueMap) - -class SingleValueConstraint(AbstractConstraint): - """Value must be part of defined values constraint""" - - def _setValues(self, values): - self._values = values - self._set = set(values) - - def _testValue(self, value, idx): - if value not in self._set: - raise error.ValueConstraintError(value) - - -class ContainedSubtypeConstraint(AbstractConstraint): - """Value must satisfy all of defined set of constraints""" - - def _testValue(self, value, idx): - for c in self._values: - c(value, idx) - - -class ValueRangeConstraint(AbstractConstraint): - """Value must be within start and stop values (inclusive)""" - - def _testValue(self, value, idx): - if value < self.start or value > self.stop: - raise error.ValueConstraintError(value) - - def _setValues(self, values): - if len(values) != 2: - raise error.PyAsn1Error( - '%s: bad constraint values' % (self.__class__.__name__,) - ) - self.start, self.stop = values - if self.start > self.stop: - raise error.PyAsn1Error( - '%s: screwed constraint values (start > stop): %s > %s' % ( - self.__class__.__name__, - self.start, self.stop - ) - ) - AbstractConstraint._setValues(self, values) - - -class ValueSizeConstraint(ValueRangeConstraint): - """len(value) must be within start and stop values (inclusive)""" - - def _testValue(self, value, idx): - valueSize = len(value) - if valueSize < self.start or valueSize > self.stop: - raise error.ValueConstraintError(value) - - -class PermittedAlphabetConstraint(SingleValueConstraint): - def _setValues(self, values): - self._values = values - self._set = set(values) - - def _testValue(self, value, idx): - if not self._set.issuperset(value): - raise error.ValueConstraintError(value) - - -# This is a bit kludgy, meaning two op modes within a single constraint -class InnerTypeConstraint(AbstractConstraint): - """Value must satisfy type and presense constraints""" - - def _testValue(self, value, idx): - if self.__singleTypeConstraint: - self.__singleTypeConstraint(value) - elif self.__multipleTypeConstraint: - if idx not in self.__multipleTypeConstraint: - raise error.ValueConstraintError(value) - constraint, status = self.__multipleTypeConstraint[idx] - if status == 'ABSENT': # XXX presense is not checked! - raise error.ValueConstraintError(value) - constraint(value) - - def _setValues(self, values): - self.__multipleTypeConstraint = {} - self.__singleTypeConstraint = None - for v in values: - if isinstance(v, tuple): - self.__multipleTypeConstraint[v[0]] = v[1], v[2] - else: - self.__singleTypeConstraint = v - AbstractConstraint._setValues(self, values) - - -# Boolean ops on constraints - -class ConstraintsExclusion(AbstractConstraint): - """Value must not fit the single constraint""" - - def _testValue(self, value, idx): - try: - self._values[0](value, idx) - except error.ValueConstraintError: - return - else: - raise error.ValueConstraintError(value) - - def _setValues(self, values): - if len(values) != 1: - raise error.PyAsn1Error('Single constraint expected') - AbstractConstraint._setValues(self, values) - - -class AbstractConstraintSet(AbstractConstraint): - """Value must not satisfy the single constraint""" - - def __getitem__(self, idx): - return self._values[idx] - - def __iter__(self): - return iter(self._values) - - def __add__(self, value): - return self.__class__(*(self._values + (value,))) - - def __radd__(self, value): - return self.__class__(*((value,) + self._values)) - - def __len__(self): - return len(self._values) - - # Constraints inclusion in sets - - def _setValues(self, values): - self._values = values - for constraint in values: - if constraint: - self._valueMap.add(constraint) - self._valueMap.update(constraint.getValueMap()) - - -class ConstraintsIntersection(AbstractConstraintSet): - """Value must satisfy all constraints""" - - def _testValue(self, value, idx): - for constraint in self._values: - constraint(value, idx) - - -class ConstraintsUnion(AbstractConstraintSet): - """Value must satisfy at least one constraint""" - - def _testValue(self, value, idx): - for constraint in self._values: - try: - constraint(value, idx) - except error.ValueConstraintError: - pass - else: - return - raise error.ValueConstraintError( - 'all of %s failed for \"%s\"' % (self._values, value) - ) - -# XXX -# add tests for type check diff --git a/src/lib/pyasn1/type/error.py b/src/lib/pyasn1/type/error.py deleted file mode 100644 index cbfa276a..00000000 --- a/src/lib/pyasn1/type/error.py +++ /dev/null @@ -1,11 +0,0 @@ -# -# This file is part of pyasn1 software. -# -# Copyright (c) 2005-2017, Ilya Etingof <etingof@gmail.com> -# License: http://pyasn1.sf.net/license.html -# -from pyasn1.error import PyAsn1Error - - -class ValueConstraintError(PyAsn1Error): - pass diff --git a/src/lib/pyasn1/type/namedtype.py b/src/lib/pyasn1/type/namedtype.py deleted file mode 100644 index 3f9ae190..00000000 --- a/src/lib/pyasn1/type/namedtype.py +++ /dev/null @@ -1,475 +0,0 @@ -# -# This file is part of pyasn1 software. -# -# Copyright (c) 2005-2017, Ilya Etingof <etingof@gmail.com> -# License: http://pyasn1.sf.net/license.html -# -import sys -from pyasn1.type import tagmap -from pyasn1 import error - -__all__ = ['NamedType', 'OptionalNamedType', 'DefaultedNamedType', 'NamedTypes'] - - -class NamedType(object): - """Create named field object for a constructed ASN.1 type. - - The |NamedType| object represents a single name and ASN.1 type of a constructed ASN.1 type. - - |NamedType| objects are immutable and duck-type Python :class:`tuple` objects - holding *name* and *asn1Object* components. - - Parameters - ---------- - name: :py:class:`str` - Field name - - asn1Object: - ASN.1 type object - """ - isOptional = False - isDefaulted = False - - def __init__(self, name, asn1Object): - self.__name = name - self.__type = asn1Object - self.__nameAndType = name, asn1Object - - def __repr__(self): - return '%s(%r, %r)' % (self.__class__.__name__, self.__name, self.__type) - - def __eq__(self, other): - return self.__nameAndType == other - - def __ne__(self, other): - return self.__nameAndType != other - - def __lt__(self, other): - return self.__nameAndType < other - - def __le__(self, other): - return self.__nameAndType <= other - - def __gt__(self, other): - return self.__nameAndType > other - - def __ge__(self, other): - return self.__nameAndType >= other - - def __hash__(self): - return hash(self.__nameAndType) - - def __getitem__(self, idx): - return self.__nameAndType[idx] - - def __iter__(self): - return iter(self.__nameAndType) - - @property - def name(self): - return self.__name - - @property - def asn1Object(self): - return self.__type - - # Backward compatibility - - def getName(self): - return self.name - - def getType(self): - return self.asn1Object - - -class OptionalNamedType(NamedType): - __doc__ = NamedType.__doc__ - - isOptional = True - - -class DefaultedNamedType(NamedType): - __doc__ = NamedType.__doc__ - - isDefaulted = True - - -class NamedTypes(object): - """Create a collection of named fields for a constructed ASN.1 type. - - The NamedTypes object represents a collection of named fields of a constructed ASN.1 type. - - *NamedTypes* objects are immutable and duck-type Python :class:`dict` objects - holding *name* as keys and ASN.1 type object as values. - - Parameters - ---------- - *namedTypes: :class:`~pyasn1.type.namedtype.NamedType` - """ - def __init__(self, *namedTypes): - self.__namedTypes = namedTypes - self.__namedTypesLen = len(self.__namedTypes) - self.__minTagSet = None - self.__tagToPosMapImpl = None - self.__nameToPosMapImpl = None - self.__ambigiousTypesImpl = None - self.__tagMap = {} - self.__hasOptionalOrDefault = None - self.__requiredComponents = None - - def __repr__(self): - return '%s(%s)' % ( - self.__class__.__name__, ', '.join([repr(x) for x in self.__namedTypes]) - ) - - def __eq__(self, other): - return self.__namedTypes == other - - def __ne__(self, other): - return self.__namedTypes != other - - def __lt__(self, other): - return self.__namedTypes < other - - def __le__(self, other): - return self.__namedTypes <= other - - def __gt__(self, other): - return self.__namedTypes > other - - def __ge__(self, other): - return self.__namedTypes >= other - - def __hash__(self): - return hash(self.__namedTypes) - - def __getitem__(self, idx): - try: - return self.__namedTypes[idx] - - except TypeError: - return self.__namedTypes[self.__nameToPosMap[idx]] - - def __contains__(self, key): - return key in self.__nameToPosMap - - def __iter__(self): - return (x[0] for x in self.__namedTypes) - - if sys.version_info[0] <= 2: - def __nonzero__(self): - return self.__namedTypesLen > 0 - else: - def __bool__(self): - return self.__namedTypesLen > 0 - - def __len__(self): - return self.__namedTypesLen - - # Python dict protocol - - def values(self): - return (namedType.asn1Object for namedType in self.__namedTypes) - - def keys(self): - return (namedType.name for namedType in self.__namedTypes) - - def items(self): - return ((namedType.name, namedType.asn1Object) for namedType in self.__namedTypes) - - def clone(self): - return self.__class__(*self.__namedTypes) - - @property - def __tagToPosMap(self): - if self.__tagToPosMapImpl is None: - self.__tagToPosMapImpl = {} - for idx, namedType in enumerate(self.__namedTypes): - tagMap = namedType.asn1Object.tagMap - if not tagMap: - continue - for _tagSet in tagMap.presentTypes: - if _tagSet in self.__tagToPosMapImpl: - raise error.PyAsn1Error('Duplicate type %s in %s' % (_tagSet, namedType)) - self.__tagToPosMapImpl[_tagSet] = idx - - return self.__tagToPosMapImpl - - @property - def __nameToPosMap(self): - if self.__nameToPosMapImpl is None: - self.__nameToPosMapImpl = {} - for idx, namedType in enumerate(self.__namedTypes): - if namedType.name in self.__nameToPosMapImpl: - raise error.PyAsn1Error('Duplicate name %s in %s' % (namedType.name, namedType)) - self.__nameToPosMapImpl[namedType.name] = idx - - return self.__nameToPosMapImpl - - @property - def __ambigiousTypes(self): - if self.__ambigiousTypesImpl is None: - self.__ambigiousTypesImpl = {} - ambigiousTypes = () - for idx, namedType in reversed(tuple(enumerate(self.__namedTypes))): - if namedType.isOptional or namedType.isDefaulted: - ambigiousTypes = (namedType,) + ambigiousTypes - else: - ambigiousTypes = (namedType,) - self.__ambigiousTypesImpl[idx] = NamedTypes(*ambigiousTypes) - return self.__ambigiousTypesImpl - - def getTypeByPosition(self, idx): - """Return ASN.1 type object by its position in fields set. - - Parameters - ---------- - idx: :py:class:`int` - Field index - - Returns - ------- - : - ASN.1 type - - Raises - ------ - : :class:`~pyasn1.error.PyAsn1Error` - If given position is out of fields range - """ - try: - return self.__namedTypes[idx].asn1Object - - except IndexError: - raise error.PyAsn1Error('Type position out of range') - - def getPositionByType(self, tagSet): - """Return field position by its ASN.1 type. - - Parameters - ---------- - tagSet: :class:`~pysnmp.type.tag.TagSet` - ASN.1 tag set distinguishing one ASN.1 type from others. - - Returns - ------- - : :py:class:`int` - ASN.1 type position in fields set - - Raises - ------ - : :class:`~pyasn1.error.PyAsn1Error` - If *tagSet* is not present or ASN.1 types are not unique within callee *NamedTypes* - """ - try: - return self.__tagToPosMap[tagSet] - - except KeyError: - raise error.PyAsn1Error('Type %s not found' % (tagSet,)) - - def getNameByPosition(self, idx): - """Return field name by its position in fields set. - - Parameters - ---------- - idx: :py:class:`idx` - Field index - - Returns - ------- - : :py:class:`str` - Field name - - Raises - ------ - : :class:`~pyasn1.error.PyAsn1Error` - If given field name is not present in callee *NamedTypes* - """ - try: - return self.__namedTypes[idx].name - - except IndexError: - raise error.PyAsn1Error('Type position out of range') - - def getPositionByName(self, name): - """Return field position by filed name. - - Parameters - ---------- - name: :py:class:`str` - Field name - - Returns - ------- - : :py:class:`int` - Field position in fields set - - Raises - ------ - : :class:`~pyasn1.error.PyAsn1Error` - If *name* is not present or not unique within callee *NamedTypes* - """ - try: - return self.__nameToPosMap[name] - - except KeyError: - raise error.PyAsn1Error('Name %s not found' % (name,)) - - def getTagMapNearPosition(self, idx): - """Return ASN.1 types that are allowed at or past given field position. - - Some ASN.1 serialization allow for skipping optional and defaulted fields. - Some constructed ASN.1 types allow reordering of the fields. When recovering - such objects it may be important to know which types can possibly be - present at any given position in the field sets. - - Parameters - ---------- - idx: :py:class:`int` - Field index - - Returns - ------- - : :class:`~pyasn1.type.tagmap.TagMap` - Map if ASN.1 types allowed at given field position - - Raises - ------ - : :class:`~pyasn1.error.PyAsn1Error` - If given position is out of fields range - """ - try: - return self.__ambigiousTypes[idx].getTagMap() - - except KeyError: - raise error.PyAsn1Error('Type position out of range') - - def getPositionNearType(self, tagSet, idx): - """Return the closest field position where given ASN.1 type is allowed. - - Some ASN.1 serialization allow for skipping optional and defaulted fields. - Some constructed ASN.1 types allow reordering of the fields. When recovering - such objects it may be important to know at which field position, in field set, - given *tagSet* is allowed at or past *idx* position. - - Parameters - ---------- - tagSet: :class:`~pyasn1.type.tag.TagSet` - ASN.1 type which field position to look up - - idx: :py:class:`int` - Field position at or past which to perform ASN.1 type look up - - Returns - ------- - : :py:class:`int` - Field position in fields set - - Raises - ------ - : :class:`~pyasn1.error.PyAsn1Error` - If *tagSet* is not present or not unique within callee *NamedTypes* - or *idx* is out of fields range - """ - try: - return idx + self.__ambigiousTypes[idx].getPositionByType(tagSet) - - except KeyError: - raise error.PyAsn1Error('Type position out of range') - - @property - def minTagSet(self): - """Return the minimal TagSet among ASN.1 type in callee *NamedTypes*. - - Some ASN.1 types/serialization protocols require ASN.1 types to be - arranged based on their numerical tag value. The *minTagSet* property - returns that. - - Returns - ------- - : :class:`~pyasn1.type.tagset.TagSet` - Minimal TagSet among ASN.1 types in callee *NamedTypes* - """ - if self.__minTagSet is None: - for namedType in self.__namedTypes: - asn1Object = namedType.asn1Object - try: - tagSet = asn1Object.getMinTagSet() - - except AttributeError: - tagSet = asn1Object.tagSet - if self.__minTagSet is None or tagSet < self.__minTagSet: - self.__minTagSet = tagSet - return self.__minTagSet - - def getTagMap(self, unique=False): - """Create a *TagMap* object from tags and types recursively. - - Create a new :class:`~pyasn1.type.tagmap.TagMap` object by - combining tags from *TagMap* objects of children types and - associating them with their immediate child type. - - Example - ------- - - .. code-block:: python - - OuterType ::= CHOICE { - innerType INTEGER - } - - Calling *.getTagMap()* on *OuterType* will yield a map like this: - - .. code-block:: python - - Integer.tagSet -> Choice - - Parameters - ---------- - unique: :py:class:`bool` - If `True`, duplicate *TagSet* objects occurring while building - new *TagMap* would cause error. - - Returns - ------- - : :class:`~pyasn1.type.tagmap.TagMap` - New *TagMap* holding *TagSet* object gathered from childen types. - """ - if unique not in self.__tagMap: - presentTypes = {} - skipTypes = {} - defaultType = None - for namedType in self.__namedTypes: - tagMap = namedType.asn1Object.tagMap - for tagSet in tagMap: - if unique and tagSet in presentTypes: - raise error.PyAsn1Error('Non-unique tagSet %s' % (tagSet,)) - presentTypes[tagSet] = namedType.asn1Object - skipTypes.update(tagMap.skipTypes) - - if defaultType is None: - defaultType = tagMap.defaultType - elif tagMap.defaultType is not None: - raise error.PyAsn1Error('Duplicate default ASN.1 type at %s' % (self,)) - - self.__tagMap[unique] = tagmap.TagMap(presentTypes, skipTypes, defaultType) - - return self.__tagMap[unique] - - @property - def hasOptionalOrDefault(self): - if self.__hasOptionalOrDefault is None: - self.__hasOptionalOrDefault = bool([True for namedType in self.__namedTypes if namedType.isDefaulted or namedType.isOptional]) - return self.__hasOptionalOrDefault - - @property - def namedTypes(self): - return iter(self.__namedTypes) - - @property - def requiredComponents(self): - if self.__requiredComponents is None: - self.__requiredComponents = frozenset( - [idx for idx, nt in enumerate(self.__namedTypes) if not nt.isOptional and not nt.isDefaulted] - ) - return self.__requiredComponents diff --git a/src/lib/pyasn1/type/namedval.py b/src/lib/pyasn1/type/namedval.py deleted file mode 100644 index bcdbf153..00000000 --- a/src/lib/pyasn1/type/namedval.py +++ /dev/null @@ -1,94 +0,0 @@ -# -# This file is part of pyasn1 software. -# -# Copyright (c) 2005-2017, Ilya Etingof <etingof@gmail.com> -# License: http://pyasn1.sf.net/license.html -# -# ASN.1 named integers -# -from pyasn1 import error - -__all__ = ['NamedValues'] - - -class NamedValues(object): - def __init__(self, *namedValues): - self.nameToValIdx = {} - self.valToNameIdx = {} - self.namedValues = () - automaticVal = 1 - for namedValue in namedValues: - if isinstance(namedValue, tuple): - name, val = namedValue - else: - name = namedValue - val = automaticVal - if name in self.nameToValIdx: - raise error.PyAsn1Error('Duplicate name %s' % (name,)) - self.nameToValIdx[name] = val - if val in self.valToNameIdx: - raise error.PyAsn1Error('Duplicate value %s=%s' % (name, val)) - self.valToNameIdx[val] = name - self.namedValues = self.namedValues + ((name, val),) - automaticVal += 1 - - def __repr__(self): - return '%s(%s)' % (self.__class__.__name__, ', '.join([repr(x) for x in self.namedValues])) - - def __str__(self): - return str(self.namedValues) - - def __eq__(self, other): - return tuple(self) == tuple(other) - - def __ne__(self, other): - return tuple(self) != tuple(other) - - def __lt__(self, other): - return tuple(self) < tuple(other) - - def __le__(self, other): - return tuple(self) <= tuple(other) - - def __gt__(self, other): - return tuple(self) > tuple(other) - - def __ge__(self, other): - return tuple(self) >= tuple(other) - - def __hash__(self): - return hash(tuple(self)) - - def getName(self, value): - if value in self.valToNameIdx: - return self.valToNameIdx[value] - - def getValue(self, name): - if name in self.nameToValIdx: - return self.nameToValIdx[name] - - def getValues(self, *names): - try: - return [self.nameToValIdx[name] for name in names] - - except KeyError: - raise error.PyAsn1Error( - 'Unknown bit identifier(s): %s' % (set(names).difference(self.nameToValIdx),) - ) - - def __getitem__(self, i): - return self.namedValues[i] - - def __len__(self): - return len(self.namedValues) - - def __add__(self, namedValues): - return self.__class__(*self.namedValues + namedValues) - - def __radd__(self, namedValues): - return self.__class__(*namedValues + tuple(self)) - - def clone(self, *namedValues): - return self.__class__(*tuple(self) + namedValues) - -# XXX clone/subtype? diff --git a/src/lib/pyasn1/type/tag.py b/src/lib/pyasn1/type/tag.py deleted file mode 100644 index aaf18572..00000000 --- a/src/lib/pyasn1/type/tag.py +++ /dev/null @@ -1,342 +0,0 @@ -# -# This file is part of pyasn1 software. -# -# Copyright (c) 2005-2017, Ilya Etingof <etingof@gmail.com> -# License: http://pyasn1.sf.net/license.html -# -from pyasn1 import error - -__all__ = ['tagClassUniversal', 'tagClassApplication', 'tagClassContext', - 'tagClassPrivate', 'tagFormatSimple', 'tagFormatConstructed', - 'tagCategoryImplicit', 'tagCategoryExplicit', 'tagCategoryUntagged', - 'Tag', 'TagSet'] - -#: Identifier for ASN.1 class UNIVERSAL -tagClassUniversal = 0x00 - -#: Identifier for ASN.1 class APPLICATION -tagClassApplication = 0x40 - -#: Identifier for ASN.1 class context-specific -tagClassContext = 0x80 - -#: Identifier for ASN.1 class private -tagClassPrivate = 0xC0 - -#: Identifier for "simple" ASN.1 structure (e.g. scalar) -tagFormatSimple = 0x00 - -#: Identifier for "constructed" ASN.1 structure (e.g. may have inner components) -tagFormatConstructed = 0x20 - -tagCategoryImplicit = 0x01 -tagCategoryExplicit = 0x02 -tagCategoryUntagged = 0x04 - - -class Tag(object): - """Create ASN.1 tag - - Represents ASN.1 tag that can be attached to a ASN.1 type to make - types distinguishable from each other. - - *Tag* objects are immutable and duck-type Python :class:`tuple` objects - holding three integer components of a tag. - - Parameters - ---------- - tagClass: :py:class:`int` - Tag *class* value - - tagFormat: :py:class:`int` - Tag *format* value - - tagId: :py:class:`int` - Tag ID value - """ - def __init__(self, tagClass, tagFormat, tagId): - if tagId < 0: - raise error.PyAsn1Error('Negative tag ID (%s) not allowed' % tagId) - self.__tagClass = tagClass - self.__tagFormat = tagFormat - self.__tagId = tagId - self.__tagClassId = tagClass, tagId - self.__lazyHash = None - - def __str__(self): - return '[%s:%s:%s]' % (self.__tagClass, self.__tagFormat, self.__tagId) - - def __repr__(self): - return '%s(tagClass=%s, tagFormat=%s, tagId=%s)' % ( - (self.__class__.__name__, self.__tagClass, self.__tagFormat, self.__tagId) - ) - - def __eq__(self, other): - return self.__tagClassId == other - - def __ne__(self, other): - return self.__tagClassId != other - - def __lt__(self, other): - return self.__tagClassId < other - - def __le__(self, other): - return self.__tagClassId <= other - - def __gt__(self, other): - return self.__tagClassId > other - - def __ge__(self, other): - return self.__tagClassId >= other - - def __hash__(self): - if self.__lazyHash is None: - self.__lazyHash = hash(self.__tagClassId) - return self.__lazyHash - - def __getitem__(self, idx): - if idx == 0: - return self.__tagClass - elif idx == 1: - return self.__tagFormat - elif idx == 2: - return self.__tagId - else: - raise IndexError() - - def __iter__(self): - yield self.__tagClass - yield self.__tagFormat - yield self.__tagId - - def __and__(self, otherTag): - return self.__class__(self.__tagClass & otherTag.tagClass, - self.__tagFormat & otherTag.tagFormat, - self.__tagId & otherTag.tagId) - - def __or__(self, otherTag): - return self.__class__(self.__tagClass | otherTag.tagClass, - self.__tagFormat | otherTag.tagFormat, - self.__tagId | otherTag.tagId) - - @property - def tagClass(self): - """ASN.1 tag class - - Returns - ------- - : :py:class:`int` - Tag class - """ - return self.__tagClass - - @property - def tagFormat(self): - """ASN.1 tag format - - Returns - ------- - : :py:class:`int` - Tag format - """ - return self.__tagFormat - - @property - def tagId(self): - """ASN.1 tag ID - - Returns - ------- - : :py:class:`int` - Tag ID - """ - return self.__tagId - - -class TagSet(object): - """Create a collection of ASN.1 tags - - Represents a combination of :class:`~pyasn1.type.tag.Tag` objects - that can be attached to a ASN.1 type to make types distinguishable - from each other. - - *TagSet* objects are immutable and duck-type Python :class:`tuple` objects - holding arbitrary number of :class:`~pyasn1.type.tag.Tag` objects. - - Parameters - ---------- - baseTag: :class:`~pyasn1.type.tag.Tag` - Base *Tag* object. This tag survives IMPLICIT tagging. - - *superTags: :class:`~pyasn1.type.tag.Tag` - Additional *Tag* objects taking part in subtyping. - """ - def __init__(self, baseTag=(), *superTags): - self.__baseTag = baseTag - self.__superTags = superTags - self.__superTagsSignature = tuple( - [(superTag.tagClass, superTag.tagId) for superTag in superTags] - ) - self.__lenOfSuperTags = len(superTags) - self.__lazyHash = None - - def __str__(self): - return self.__superTags and '+'.join([str(x) for x in self.__superTags]) or '[untagged]' - - def __repr__(self): - return '%s(%s)' % ( - self.__class__.__name__, '(), ' + ', '.join([repr(x) for x in self.__superTags]) - ) - - def __add__(self, superTag): - return self.__class__(self.__baseTag, *self.__superTags + (superTag,)) - - def __radd__(self, superTag): - return self.__class__(self.__baseTag, *(superTag,) + self.__superTags) - - def __getitem__(self, i): - if i.__class__ is slice: - return self.__class__(self.__baseTag, *self.__superTags[i]) - else: - return self.__superTags[i] - - def __eq__(self, other): - return self.__superTagsSignature == other - - def __ne__(self, other): - return self.__superTagsSignature != other - - def __lt__(self, other): - return self.__superTagsSignature < other - - def __le__(self, other): - return self.__superTagsSignature <= other - - def __gt__(self, other): - return self.__superTagsSignature > other - - def __ge__(self, other): - return self.__superTagsSignature >= other - - def __hash__(self): - if self.__lazyHash is None: - self.__lazyHash = hash(self.__superTags) - return self.__lazyHash - - def __len__(self): - return self.__lenOfSuperTags - - # descriptor protocol - - def __get__(self, instance, owner): - if instance is None: - return self - - # This is a bit of hack: look up instance attribute first, - # then try class attribute if instance attribute with that - # name is not available. - # The rationale is to have `.tagSet` readable-writeable - # as a class attribute and read-only as instance attribute. - try: - return instance._tagSet - - except AttributeError: - return self - - def __set__(self, instance, value): - raise AttributeError('attribute is read-only') - - @property - def baseTag(self): - """Return base ASN.1 tag - - Returns - ------- - : :class:`~pyasn1.type.tag.Tag` - Base tag of this *TagSet* - """ - return self.__baseTag - - @property - def superTags(self): - """Return ASN.1 tags - - Returns - ------- - : :py:class:`tuple` - Tuple of :class:`~pyasn1.type.tag.Tag` objects that this *TagSet* contains - """ - return self.__superTags - - def tagExplicitly(self, superTag): - """Return explicitly tagged *TagSet* - - Create a new *TagSet* representing callee *TagSet* explicitly tagged - with passed tag(s). With explicit tagging mode, new tags are appended - to existing tag(s). - - Parameters - ---------- - superTag: :class:`~pyasn1.type.tag.Tag` - *Tag* object to tag this *TagSet* - - Returns - ------- - : :class:`~pyasn1.type.tag.TagSet` - New *TagSet* object - """ - if superTag.tagClass == tagClassUniversal: - raise error.PyAsn1Error('Can\'t tag with UNIVERSAL class tag') - if superTag.tagFormat != tagFormatConstructed: - superTag = Tag(superTag.tagClass, tagFormatConstructed, superTag.tagId) - return self + superTag - - def tagImplicitly(self, superTag): - """Return implicitly tagged *TagSet* - - Create a new *TagSet* representing callee *TagSet* implicitly tagged - with passed tag(s). With implicit tagging mode, new tag(s) replace the - last existing tag. - - Parameters - ---------- - superTag: :class:`~pyasn1.type.tag.Tag` - *Tag* object to tag this *TagSet* - - Returns - ------- - : :class:`~pyasn1.type.tag.TagSet` - New *TagSet* object - """ - if self.__superTags: - superTag = Tag(superTag.tagClass, self.__superTags[-1].tagFormat, superTag.tagId) - return self[:-1] + superTag - - def isSuperTagSetOf(self, tagSet): - """Test type relationship against given *TagSet* - - The callee is considered to be a supertype of given *TagSet* - tag-wise if all tags in *TagSet* are present in the callee and - they are in the same order. - - Parameters - ---------- - tagSet: :class:`~pyasn1.type.tag.TagSet` - *TagSet* object to evaluate against the callee - - Returns - ------- - : :py:class:`bool` - `True` if callee is a supertype of *tagSet* - """ - if len(tagSet) < self.__lenOfSuperTags: - return False - return self.__superTags == tagSet[:self.__lenOfSuperTags] - - # Backward compatibility - - def getBaseTag(self): - return self.__baseTag - -def initTagSet(tag): - return TagSet(tag, tag) diff --git a/src/lib/pyasn1/type/tagmap.py b/src/lib/pyasn1/type/tagmap.py deleted file mode 100644 index 8527f33d..00000000 --- a/src/lib/pyasn1/type/tagmap.py +++ /dev/null @@ -1,102 +0,0 @@ -# -# This file is part of pyasn1 software. -# -# Copyright (c) 2005-2017, Ilya Etingof <etingof@gmail.com> -# License: http://pyasn1.sf.net/license.html -# -from pyasn1 import error - -__all__ = ['TagMap'] - - -class TagMap(object): - """Map *TagSet* objects to ASN.1 types - - Create an object mapping *TagSet* object to ASN.1 type. - - *TagMap* objects are immutable and duck-type read-only Python - :class:`dict` objects holding *TagSet* objects as keys and ASN.1 - type objects as values. - - Parameters - ---------- - presentTypes: :py:class:`dict` - Map of :class:`~pyasn1.type.tag.TagSet` to ASN.1 objects considered - as being unconditionally present in the *TagMap*. - - skipTypes: :py:class:`dict` - A collection of :class:`~pyasn1.type.tag.TagSet` objects considered - as absent in the *TagMap* even when *defaultType* is present. - - defaultType: ASN.1 type object - An ASN.1 type object callee *TagMap* returns for any *TagSet* key not present - in *presentTypes* (unless given key is present in *skipTypes*). - """ - def __init__(self, presentTypes=None, skipTypes=None, defaultType=None): - self.__presentTypes = presentTypes or {} - self.__skipTypes = skipTypes or {} - self.__defaultType = defaultType - - def __contains__(self, tagSet): - return (tagSet in self.__presentTypes or - self.__defaultType is not None and tagSet not in self.__skipTypes) - - def __getitem__(self, tagSet): - try: - return self.__presentTypes[tagSet] - except KeyError: - if self.__defaultType is None: - raise KeyError() - elif tagSet in self.__skipTypes: - raise error.PyAsn1Error('Key in negative map') - else: - return self.__defaultType - - def __iter__(self): - return iter(self.__presentTypes) - - def __repr__(self): - s = self.__class__.__name__ + '(' - if self.__presentTypes: - s += 'presentTypes=%r, ' % (self.__presentTypes,) - if self.__skipTypes: - s += 'skipTypes=%r, ' % (self.__skipTypes,) - if self.__defaultType is not None: - s += 'defaultType=%r' % (self.__defaultType,) - return s + ')' - - def __str__(self): - s = self.__class__.__name__ + ': ' - if self.__presentTypes: - s += 'presentTypes: %s, ' % ', '.join([x.prettyPrintType() for x in self.__presentTypes.values()]) - if self.__skipTypes: - s += 'skipTypes: %s, ' % ', '.join([x.prettyPrintType() for x in self.__skipTypes.values()]) - if self.__defaultType is not None: - s += 'defaultType: %s, ' % self.__defaultType.prettyPrintType() - return s - - @property - def presentTypes(self): - """Return *TagSet* to ASN.1 type map present in callee *TagMap*""" - return self.__presentTypes - - @property - def skipTypes(self): - """Return *TagSet* collection unconditionally absent in callee *TagMap*""" - return self.__skipTypes - - @property - def defaultType(self): - """Return default ASN.1 type being returned for any missing *TagSet*""" - return self.__defaultType - - # Backward compatibility - - def getPosMap(self): - return self.presentTypes - - def getNegMap(self): - return self.skipTypes - - def getDef(self): - return self.defaultType diff --git a/src/lib/pyasn1/type/univ.py b/src/lib/pyasn1/type/univ.py deleted file mode 100644 index 1a146e03..00000000 --- a/src/lib/pyasn1/type/univ.py +++ /dev/null @@ -1,2806 +0,0 @@ -# -# This file is part of pyasn1 software. -# -# Copyright (c) 2005-2017, Ilya Etingof <etingof@gmail.com> -# License: http://pyasn1.sf.net/license.html -# -import sys -import math -from pyasn1.type import base, tag, constraint, namedtype, namedval, tagmap -from pyasn1.codec.ber import eoo -from pyasn1.compat import octets, integer, binary -from pyasn1 import error - -NoValue = base.NoValue -noValue = NoValue() - -__all__ = ['Integer', 'Boolean', 'BitString', 'OctetString', 'Null', - 'ObjectIdentifier', 'Real', 'Enumerated', 'SequenceOfAndSetOfBase', 'SequenceOf', - 'SetOf', 'SequenceAndSetBase', 'Sequence', 'Set', 'Choice', 'Any', - 'NoValue', 'noValue'] - -# "Simple" ASN.1 types (yet incomplete) - -class Integer(base.AbstractSimpleAsn1Item): - """Create |ASN.1| type or object. - - |ASN.1| objects are immutable and duck-type Python :class:`int` objects. - - Parameters - ---------- - value : :class:`int`, :class:`str` or |ASN.1| object - Python integer or string literal or |ASN.1| class instance. - - tagSet: :py:class:`~pyasn1.type.tag.TagSet` - Object representing non-default ASN.1 tag(s) - - subtypeSpec: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` - Object representing non-default ASN.1 subtype constraint(s) - - namedValues: :py:class:`~pyasn1.type.namedval.NamedValues` - Object representing non-default symbolic aliases for numbers - - Raises - ------ - : :py:class:`pyasn1.error.PyAsn1Error` - On constraint violation or bad initializer. - """ - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.tag.TagSet` object representing ASN.1 tag(s) - #: associated with |ASN.1| type. - tagSet = tag.initTagSet( - tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 0x02) - ) - - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` object - #: imposing constraints on |ASN.1| type initialization values. - subtypeSpec = constraint.ConstraintsIntersection() - - #: Default :py:class:`~pyasn1.type.namedval.NamedValues` object - #: representing symbolic aliases for numbers - namedValues = namedval.NamedValues() - - # Optimization for faster codec lookup - typeId = base.AbstractSimpleAsn1Item.getTypeId() - - def __init__(self, value=noValue, tagSet=None, subtypeSpec=None, - namedValues=None): - if namedValues is None: - self.__namedValues = self.namedValues - else: - self.__namedValues = namedValues - base.AbstractSimpleAsn1Item.__init__( - self, value, tagSet, subtypeSpec - ) - - def __repr__(self): - if self.__namedValues is not self.namedValues: - return '%s, %r)' % (base.AbstractSimpleAsn1Item.__repr__(self)[:-1], self.__namedValues) - else: - return base.AbstractSimpleAsn1Item.__repr__(self) - - def __and__(self, value): - return self.clone(self._value & value) - - def __rand__(self, value): - return self.clone(value & self._value) - - def __or__(self, value): - return self.clone(self._value | value) - - def __ror__(self, value): - return self.clone(value | self._value) - - def __xor__(self, value): - return self.clone(self._value ^ value) - - def __rxor__(self, value): - return self.clone(value ^ self._value) - - def __lshift__(self, value): - return self.clone(self._value << value) - - def __rshift__(self, value): - return self.clone(self._value >> value) - - def __add__(self, value): - return self.clone(self._value + value) - - def __radd__(self, value): - return self.clone(value + self._value) - - def __sub__(self, value): - return self.clone(self._value - value) - - def __rsub__(self, value): - return self.clone(value - self._value) - - def __mul__(self, value): - return self.clone(self._value * value) - - def __rmul__(self, value): - return self.clone(value * self._value) - - def __mod__(self, value): - return self.clone(self._value % value) - - def __rmod__(self, value): - return self.clone(value % self._value) - - def __pow__(self, value, modulo=None): - return self.clone(pow(self._value, value, modulo)) - - def __rpow__(self, value): - return self.clone(pow(value, self._value)) - - def __floordiv__(self, value): - return self.clone(self._value // value) - - def __rfloordiv__(self, value): - return self.clone(value // self._value) - - if sys.version_info[0] <= 2: - def __div__(self, value): - if isinstance(value, float): - return Real(self._value / value) - else: - return self.clone(self._value / value) - - def __rdiv__(self, value): - if isinstance(value, float): - return Real(value / self._value) - else: - return self.clone(value / self._value) - else: - def __truediv__(self, value): - return Real(self._value / value) - - def __rtruediv__(self, value): - return Real(value / self._value) - - def __divmod__(self, value): - return self.clone(divmod(self._value, value)) - - def __rdivmod__(self, value): - return self.clone(divmod(value, self._value)) - - __hash__ = base.AbstractSimpleAsn1Item.__hash__ - - def __int__(self): - return int(self._value) - - if sys.version_info[0] <= 2: - def __long__(self): return long(self._value) - - def __float__(self): - return float(self._value) - - def __abs__(self): - return self.clone(abs(self._value)) - - def __index__(self): - return int(self._value) - - def __pos__(self): - return self.clone(+self._value) - - def __neg__(self): - return self.clone(-self._value) - - def __invert__(self): - return self.clone(~self._value) - - def __round__(self, n=0): - r = round(self._value, n) - if n: - return self.clone(r) - else: - return r - - def __floor__(self): - return math.floor(self._value) - - def __ceil__(self): - return math.ceil(self._value) - - if sys.version_info[0:2] > (2, 5): - def __trunc__(self): - return self.clone(math.trunc(self._value)) - - def __lt__(self, value): - return self._value < value - - def __le__(self, value): - return self._value <= value - - def __eq__(self, value): - return self._value == value - - def __ne__(self, value): - return self._value != value - - def __gt__(self, value): - return self._value > value - - def __ge__(self, value): - return self._value >= value - - def prettyIn(self, value): - try: - return int(value) - - except ValueError: - valueOfName = self.__namedValues.getValue(value) - if valueOfName is not None: - return valueOfName - - raise error.PyAsn1Error( - 'Can\'t coerce %r into integer: %s' % (value, sys.exc_info()[1]) - ) - - def prettyOut(self, value): - nameOfValue = self.__namedValues.getName(value) - return nameOfValue is None and str(value) or repr(nameOfValue) - - def getNamedValues(self): - return self.__namedValues - - def clone(self, value=noValue, tagSet=None, subtypeSpec=None, namedValues=None): - """Create a copy of a |ASN.1| type or object. - - Any parameters to the *clone()* method will replace corresponding - properties of the |ASN.1| object. - - Parameters - ---------- - value: :class:`int`, :class:`str` or |ASN.1| object - Initialization value to pass to new ASN.1 object instead of - inheriting one from the caller. - - tagSet: :py:class:`~pyasn1.type.tag.TagSet` - Object representing ASN.1 tag(s) to use in new object instead of inheriting from the caller - - subtypeSpec: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` - Object representing ASN.1 subtype constraint(s) to use in new object instead of inheriting from the caller - - namedValues: :py:class:`~pyasn1.type.namedval.NamedValues` - Object representing symbolic aliases for numbers to use instead of inheriting from caller - - Returns - ------- - : - new instance of |ASN.1| type/value - """ - isModified = False - - if value is None or value is noValue: - value = self._value - else: - isModified = True - if tagSet is None or tagSet is noValue: - tagSet = self._tagSet - else: - isModified = True - if subtypeSpec is None or subtypeSpec is noValue: - subtypeSpec = self._subtypeSpec - else: - isModified = True - if namedValues is None or namedValues is noValue: - namedValues = self.__namedValues - else: - isModified = True - - if isModified: - return self.__class__(value, tagSet, subtypeSpec, namedValues) - else: - return self - - def subtype(self, value=noValue, implicitTag=None, explicitTag=None, - subtypeSpec=None, namedValues=None): - """Create a copy of a |ASN.1| type or object. - - Any parameters to the *subtype()* method will be added to the corresponding - properties of the |ASN.1| object. - - Parameters - ---------- - value: :class:`int`, :class:`str` or |ASN.1| object - Initialization value to pass to new ASN.1 object instead of - inheriting one from the caller. - - implicitTag: :py:class:`~pyasn1.type.tag.Tag` - Implicitly apply given ASN.1 tag object to caller's - :py:class:`~pyasn1.type.tag.TagSet`, then use the result as - new object's ASN.1 tag(s). - - explicitTag: :py:class:`~pyasn1.type.tag.Tag` - Explicitly apply given ASN.1 tag object to caller's - :py:class:`~pyasn1.type.tag.TagSet`, then use the result as - new object's ASN.1 tag(s). - - subtypeSpec: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` - Add ASN.1 constraints object to one of the caller, then - use the result as new object's ASN.1 constraints. - - namedValues: :py:class:`~pyasn1.type.namedval.NamedValues` - Add given object representing symbolic aliases for numbers - to one of the caller, then use the result as new object's - named numbers. - - Returns - ------- - : - new instance of |ASN.1| type/value - """ - isModified = False - - if value is None or value is noValue: - value = self._value - else: - isModified = True - if implicitTag is not None and implicitTag is not noValue: - tagSet = self._tagSet.tagImplicitly(implicitTag) - isModified = True - elif explicitTag is not None and explicitTag is not noValue: - tagSet = self._tagSet.tagExplicitly(explicitTag) - isModified = True - else: - tagSet = self._tagSet - if subtypeSpec is None or subtypeSpec is noValue: - subtypeSpec = self._subtypeSpec - else: - subtypeSpec = self._subtypeSpec + subtypeSpec - isModified = True - if namedValues is None or namedValues is noValue: - namedValues = self.__namedValues - else: - namedValues = namedValues + self.__namedValues - isModified = True - - if isModified: - return self.__class__(value, tagSet, subtypeSpec, namedValues) - else: - return self - - -class Boolean(Integer): - __doc__ = Integer.__doc__ - - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.tag.TagSet` object representing ASN.1 tag(s) - #: associated with |ASN.1| type. - tagSet = tag.initTagSet( - tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 0x01), - ) - - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` object - #: imposing constraints on |ASN.1| type initialization values. - subtypeSpec = Integer.subtypeSpec + constraint.SingleValueConstraint(0, 1) - - #: Default :py:class:`~pyasn1.type.namedval.NamedValues` object - #: representing symbolic aliases for numbers - namedValues = Integer.namedValues.clone(('False', 0), ('True', 1)) - - # Optimization for faster codec lookup - typeId = Integer.getTypeId() - - -class BitString(base.AbstractSimpleAsn1Item): - """Create |ASN.1| type or object. - - |ASN.1| objects are immutable and duck-type both Python :class:`tuple` (as a tuple - of bits) and :class:`int` objects. - - Parameters - ---------- - value : :class:`int`, :class:`str` or |ASN.1| object - Python integer or string literal representing binary or hexadecimal - number or sequence of integer bits or |ASN.1| object. - - tagSet: :py:class:`~pyasn1.type.tag.TagSet` - Object representing non-default ASN.1 tag(s) - - subtypeSpec: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` - Object representing non-default ASN.1 subtype constraint(s) - - namedValues: :py:class:`~pyasn1.type.namedval.NamedValues` - Object representing non-default symbolic aliases for numbers - - binValue: :py:class:`str` - Binary string initializer to use instead of the *value*. - Example: '10110011'. - - hexValue: :py:class:`str` - Hexadecimal string initializer to use instead of the *value*. - Example: 'DEADBEEF'. - - Raises - ------ - : :py:class:`pyasn1.error.PyAsn1Error` - On constraint violation or bad initializer. - """ - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.tag.TagSet` object representing ASN.1 tag(s) - #: associated with |ASN.1| type. - tagSet = tag.initTagSet( - tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 0x03) - ) - - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` object - #: imposing constraints on |ASN.1| type initialization values. - subtypeSpec = constraint.ConstraintsIntersection() - - #: Default :py:class:`~pyasn1.type.namedval.NamedValues` object - #: representing symbolic aliases for numbers - namedValues = namedval.NamedValues() - - # Optimization for faster codec lookup - typeId = base.AbstractSimpleAsn1Item.getTypeId() - - defaultBinValue = defaultHexValue = noValue - - if sys.version_info[0] < 3: - SizedIntegerBase = long - else: - SizedIntegerBase = int - - class SizedInteger(SizedIntegerBase): - bitLength = leadingZeroBits = None - - def setBitLength(self, bitLength): - self.bitLength = bitLength - self.leadingZeroBits = max(bitLength - integer.bitLength(self), 0) - return self - - def __len__(self): - if self.bitLength is None: - self.setBitLength(integer.bitLength(self)) - - return self.bitLength - - def __init__(self, value=noValue, tagSet=None, subtypeSpec=None, - namedValues=None, binValue=noValue, hexValue=noValue): - if namedValues is None: - self.__namedValues = self.namedValues - else: - self.__namedValues = namedValues - if binValue is not noValue: - value = self.fromBinaryString(binValue) - elif hexValue is not noValue: - value = self.fromHexString(hexValue) - elif value is None or value is noValue: - if self.defaultBinValue is not noValue: - value = self.fromBinaryString(self.defaultBinValue) - elif self.defaultHexValue is not noValue: - value = self.fromHexString(self.defaultHexValue) - base.AbstractSimpleAsn1Item.__init__(self, value, tagSet, subtypeSpec) - - def clone(self, value=noValue, tagSet=None, subtypeSpec=None, - namedValues=None, binValue=noValue, hexValue=noValue): - """Create a copy of a |ASN.1| type or object. - - Any parameters to the *clone()* method will replace corresponding - properties of the |ASN.1| object. - - Parameters - ---------- - value : :class:`int`, :class:`str` or |ASN.1| object - Initialization value to pass to new ASN.1 object instead of - inheriting one from the caller. - - tagSet: :py:class:`~pyasn1.type.tag.TagSet` - Object representing ASN.1 tag(s) to use in new object instead of inheriting from the caller - - subtypeSpec: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` - Object representing ASN.1 subtype constraint(s) to use in new object instead of inheriting from the caller - - namedValues: :py:class:`~pyasn1.type.namedval.NamedValues` - Class instance representing BitString type enumerations - - binValue: :py:class:`str` - Binary string initializer to use instead of the *value*. - Example: '10110011'. - - hexValue: :py:class:`str` - Hexadecimal string initializer to use instead of the *value*. - Example: 'DEADBEEF'. - - Returns - ------- - : - new instance of |ASN.1| type/value - """ - isModified = False - - if (value is None or value is noValue) and binValue is noValue and hexValue is noValue: - value = self._value - else: - isModified = True - if tagSet is None or tagSet is noValue: - tagSet = self._tagSet - else: - isModified = True - if subtypeSpec is None or subtypeSpec is noValue: - subtypeSpec = self._subtypeSpec - else: - isModified = True - if namedValues is None or namedValues is noValue: - namedValues = self.__namedValues - else: - isModified = True - - if isModified: - return self.__class__(value, tagSet, subtypeSpec, namedValues, binValue, hexValue) - else: - return self - - def subtype(self, value=noValue, implicitTag=None, explicitTag=None, - subtypeSpec=None, namedValues=None, binValue=noValue, hexValue=noValue): - """Create a copy of a |ASN.1| type or object. - - Any parameters to the *subtype()* method will be added to the corresponding - properties of the |ASN.1| object. - - Parameters - ---------- - value : :class:`int`, :class:`str` or |ASN.1| object - Initialization value to pass to new ASN.1 object instead of - inheriting one from the caller. - - implicitTag: :py:class:`~pyasn1.type.tag.Tag` - Implicitly apply given ASN.1 tag object to caller's - :py:class:`~pyasn1.type.tag.TagSet`, then use the result as - new object's ASN.1 tag(s). - - explicitTag: :py:class:`~pyasn1.type.tag.Tag` - Explicitly apply given ASN.1 tag object to caller's - :py:class:`~pyasn1.type.tag.TagSet`, then use the result as - new object's ASN.1 tag(s). - - subtypeSpec: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` - Add ASN.1 constraints object to one of the caller, then - use the result as new object's ASN.1 constraints. - - namedValues: :py:class:`~pyasn1.type.namedval.NamedValues` - Add given object representing symbolic aliases for numbers - to one of the caller, then use the result as new object's - named numbers. - - binValue: :py:class:`str` - Binary string initializer to use instead of the *value*. - Example: '10110011'. - - hexValue: :py:class:`str` - Hexadecimal string initializer to use instead of the *value*. - Example: 'DEADBEEF'. - - Returns - ------- - : - new instance of |ASN.1| type/value - """ - isModified = False - - if (value is None or value is noValue) and binValue is noValue and hexValue is noValue: - value = self._value - else: - isModified = True - if implicitTag is not None and implicitTag is not noValue: - tagSet = self._tagSet.tagImplicitly(implicitTag) - isModified = True - elif explicitTag is not None and explicitTag is not noValue: - tagSet = self._tagSet.tagExplicitly(explicitTag) - isModified = True - else: - tagSet = self._tagSet - if subtypeSpec is None or subtypeSpec is noValue: - subtypeSpec = self._subtypeSpec - else: - subtypeSpec = self._subtypeSpec + subtypeSpec - isModified = True - if namedValues is None or namedValues is noValue: - namedValues = self.__namedValues - else: - namedValues = namedValues + self.__namedValues - isModified = True - - if isModified: - return self.__class__(value, tagSet, subtypeSpec, namedValues, binValue, hexValue) - else: - return self - - def __str__(self): - return self.asBinary() - - def __eq__(self, other): - other = self.prettyIn(other) - return self is other or self._value == other and len(self._value) == len(other) - - def __ne__(self, other): - other = self.prettyIn(other) - return self._value != other or len(self._value) != len(other) - - def __lt__(self, other): - other = self.prettyIn(other) - return len(self._value) < len(other) or len(self._value) == len(other) and self._value < other - - def __le__(self, other): - other = self.prettyIn(other) - return len(self._value) <= len(other) or len(self._value) == len(other) and self._value <= other - - def __gt__(self, other): - other = self.prettyIn(other) - return len(self._value) > len(other) or len(self._value) == len(other) and self._value > other - - def __ge__(self, other): - other = self.prettyIn(other) - return len(self._value) >= len(other) or len(self._value) == len(other) and self._value >= other - - # Immutable sequence object protocol - - def __len__(self): - return len(self._value) - - def __getitem__(self, i): - if i.__class__ is slice: - return self.clone([self[x] for x in range(*i.indices(len(self)))]) - else: - length = len(self._value) - 1 - if i > length or i < 0: - raise IndexError('bit index out of range') - return (self._value >> (length - i)) & 1 - - def __iter__(self): - length = len(self._value) - while length: - length -= 1 - yield (self._value >> length) & 1 - - def __reversed__(self): - return reversed(tuple(self)) - - # arithmetic operators - - def __add__(self, value): - value = self.prettyIn(value) - return self.clone(self.SizedInteger(self._value << len(value) | value).setBitLength(len(self._value) + len(value))) - - def __radd__(self, value): - value = self.prettyIn(value) - return self.clone(self.SizedInteger(value << len(self._value) | self._value).setBitLength(len(self._value) + len(value))) - - def __mul__(self, value): - bitString = self._value - while value > 1: - bitString <<= len(self._value) - bitString |= self._value - value -= 1 - return self.clone(bitString) - - def __rmul__(self, value): - return self * value - - def __lshift__(self, count): - return self.clone(self.SizedInteger(self._value << count).setBitLength(len(self._value) + count)) - - def __rshift__(self, count): - return self.clone(self.SizedInteger(self._value >> count).setBitLength(max(0, len(self._value) - count))) - - def __int__(self): - return self._value - - def __float__(self): - return float(self._value) - - if sys.version_info[0] < 3: - def __long__(self): - return self._value - - def asNumbers(self): - """Get |ASN.1| value as a sequence of 8-bit integers. - - If |ASN.1| object length is not a multiple of 8, result - will be left-padded with zeros. - """ - return tuple(octets.octs2ints(self.asOctets())) - - def asOctets(self): - """Get |ASN.1| value as a sequence of octets. - - If |ASN.1| object length is not a multiple of 8, result - will be left-padded with zeros. - """ - return integer.to_bytes(self._value, length=len(self)) - - def asInteger(self): - """Get |ASN.1| value as a single integer value. - """ - return self._value - - def asBinary(self): - """Get |ASN.1| value as a text string of bits. - """ - binString = binary.bin(self._value)[2:] - return '0'*(len(self._value) - len(binString)) + binString - - @classmethod - def fromHexString(cls, value): - try: - return cls.SizedInteger(value, 16).setBitLength(len(value) * 4) - - except ValueError: - raise error.PyAsn1Error('%s.fromHexString() error: %s' % (cls.__name__, sys.exc_info()[1])) - - @classmethod - def fromBinaryString(cls, value): - try: - return cls.SizedInteger(value or '0', 2).setBitLength(len(value)) - - except ValueError: - raise error.PyAsn1Error('%s.fromBinaryString() error: %s' % (cls.__name__, sys.exc_info()[1])) - - @classmethod - def fromOctetString(cls, value, padding=0): - return cls(cls.SizedInteger(integer.from_bytes(value) >> padding).setBitLength(len(value) * 8 - padding)) - - def prettyIn(self, value): - if octets.isStringType(value): - if not value: - return self.SizedInteger(0).setBitLength(0) - - elif value[0] == '\'': # "'1011'B" -- ASN.1 schema representation (deprecated) - if value[-2:] == '\'B': - return self.fromBinaryString(value[1:-2]) - elif value[-2:] == '\'H': - return self.fromHexString(value[1:-2]) - else: - raise error.PyAsn1Error( - 'Bad BIT STRING value notation %s' % (value,) - ) - - elif self.__namedValues and not value.isdigit(): # named bits like 'Urgent, Active' - bitPositions = self.__namedValues.getValues(*[x.strip() for x in value.split(',')]) - - rightmostPosition = max(bitPositions) - - number = 0 - for bitPosition in bitPositions: - number |= 1 << (rightmostPosition - bitPosition) - - return self.SizedInteger(number).setBitLength(rightmostPosition + 1) - - elif value.startswith('0x'): - return self.fromHexString(value[2:]) - - elif value.startswith('0b'): - return self.fromBinaryString(value[2:]) - - else: # assume plain binary string like '1011' - return self.fromBinaryString(value) - - elif isinstance(value, (tuple, list)): - return self.fromBinaryString(''.join([b and '1' or '0' for b in value])) - - elif isinstance(value, (self.SizedInteger, BitString)): - return self.SizedInteger(value).setBitLength(len(value)) - - elif isinstance(value, intTypes): - return self.SizedInteger(value) - - else: - raise error.PyAsn1Error( - 'Bad BitString initializer type \'%s\'' % (value,) - ) - - def prettyOut(self, value): - return '\'%s\'' % str(self) - - -try: - # noinspection PyStatementEffect - all - -except NameError: # Python 2.4 - # noinspection PyShadowingBuiltins - def all(iterable): - for element in iterable: - if not element: - return False - return True - - -class OctetString(base.AbstractSimpleAsn1Item): - """Create |ASN.1| type or object. - - |ASN.1| objects are immutable and duck-type Python 2 :class:`str` or Python 3 :class:`bytes`. - When used in Unicode context, |ASN.1| type assumes "|encoding|" serialization. - - Parameters - ---------- - value : :class:`str`, :class:`bytes` or |ASN.1| object - string (Python 2) or bytes (Python 3), alternatively unicode object - (Python 2) or string (Python 3) representing character string to be - serialized into octets (note `encoding` parameter) or |ASN.1| object. - - tagSet: :py:class:`~pyasn1.type.tag.TagSet` - Object representing non-default ASN.1 tag(s) - - subtypeSpec: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` - Object representing non-default ASN.1 subtype constraint(s) - - encoding: :py:class:`str` - Unicode codec ID to encode/decode :class:`unicode` (Python 2) or - :class:`str` (Python 3) the payload when |ASN.1| object is used - in text string context. - - binValue: :py:class:`str` - Binary string initializer to use instead of the *value*. - Example: '10110011'. - - hexValue: :py:class:`str` - Hexadecimal string initializer to use instead of the *value*. - Example: 'DEADBEEF'. - - Raises - ------ - : :py:class:`pyasn1.error.PyAsn1Error` - On constraint violation or bad initializer. - """ - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.tag.TagSet` object representing ASN.1 tag(s) - #: associated with |ASN.1| type. - tagSet = tag.initTagSet( - tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 0x04) - ) - - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` object - #: imposing constraints on |ASN.1| type initialization values. - subtypeSpec = constraint.ConstraintsIntersection() - - # Optimization for faster codec lookup - typeId = base.AbstractSimpleAsn1Item.getTypeId() - - defaultBinValue = defaultHexValue = noValue - encoding = 'iso-8859-1' - - def __init__(self, value=noValue, tagSet=None, subtypeSpec=None, - encoding=None, binValue=noValue, hexValue=noValue): - if encoding is None: - self._encoding = self.encoding - else: - self._encoding = encoding - if binValue is not noValue: - value = self.fromBinaryString(binValue) - elif hexValue is not noValue: - value = self.fromHexString(hexValue) - elif value is None or value is noValue: - if self.defaultBinValue is not noValue: - value = self.fromBinaryString(self.defaultBinValue) - elif self.defaultHexValue is not noValue: - value = self.fromHexString(self.defaultHexValue) - self.__asNumbersCache = None - base.AbstractSimpleAsn1Item.__init__(self, value, tagSet, subtypeSpec) - - def clone(self, value=noValue, tagSet=None, subtypeSpec=None, - encoding=None, binValue=noValue, hexValue=noValue): - """Create a copy of a |ASN.1| type or object. - - Any parameters to the *clone()* method will replace corresponding - properties of the |ASN.1| object. - - Parameters - ---------- - value : :class:`str`, :class:`bytes` or |ASN.1| object - Initialization value to pass to new ASN.1 object instead of - inheriting one from the caller. - - tagSet: :py:class:`~pyasn1.type.tag.TagSet` - Object representing ASN.1 tag(s) to use in new object instead of inheriting from the caller - - subtypeSpec: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` - Object representing ASN.1 subtype constraint(s) to use in new object instead of inheriting from the caller - - encoding: :py:class:`str` - Unicode codec ID to encode/decode :class:`unicode` (Python 2) - or :class:`str` (Python 3) the payload when |ASN.1| - object is used in string context. - - binValue: :py:class:`str` - Binary string initializer. Example: '10110011'. - - hexValue: :py:class:`str` - Hexadecimal string initializer. Example: 'DEADBEEF'. - - Returns - ------- - : - new instance of |ASN.1| type/value - """ - isModified = False - - if (value is None or value is noValue) and binValue is noValue and hexValue is noValue: - value = self._value - else: - isModified = True - if tagSet is None or tagSet is noValue: - tagSet = self._tagSet - else: - isModified = True - if subtypeSpec is None or subtypeSpec is noValue: - subtypeSpec = self._subtypeSpec - else: - isModified = True - if encoding is None or encoding is noValue: - encoding = self._encoding - else: - isModified = True - - if isModified: - return self.__class__(value, tagSet, subtypeSpec, encoding, binValue, hexValue) - else: - return self - - def subtype(self, value=noValue, implicitTag=None, explicitTag=None, - subtypeSpec=None, encoding=None, binValue=noValue, - hexValue=noValue): - """Create a copy of a |ASN.1| type or object. - - Any parameters to the *subtype()* method will be added to the corresponding - properties of the |ASN.1| object. - - Parameters - ---------- - value : :class:`str`, :class:`bytes` or |ASN.1| object - Initialization value to pass to new ASN.1 object instead of - inheriting one from the caller. - - implicitTag: :py:class:`~pyasn1.type.tag.Tag` - Implicitly apply given ASN.1 tag object to |ASN.1| object tag set - :py:class:`~pyasn1.type.tag.TagSet`, then use the result as - new object's ASN.1 tag(s). - - explicitTag: :py:class:`~pyasn1.type.tag.Tag` - Explicitly apply given ASN.1 tag object to |ASN.1| object tag set - :py:class:`~pyasn1.type.tag.TagSet`, then use the result as - new object's ASN.1 tag(s). - - subtypeSpec: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` - Add ASN.1 constraints object to one of the caller, then - use the result as new object's ASN.1 constraints. - - encoding: :py:class:`str` - Unicode codec ID to encode/decode :class:`unicode` (Python 2) - or :class:`str` (Python 3) the payload when *OctetString* - object is used in string context. - - binValue: :py:class:`str` - Binary string initializer. Example: '10110011'. - - hexValue: :py:class:`str` - Hexadecimal string initializer. Example: 'DEADBEEF'. - - Returns - ------- - : - new instance of |ASN.1| type/value - """ - isModified = False - - if (value is None or value is noValue) and binValue is noValue and hexValue is noValue: - value = self._value - else: - isModified = True - if implicitTag is not None and implicitTag is not noValue: - tagSet = self._tagSet.tagImplicitly(implicitTag) - isModified = True - elif explicitTag is not None and explicitTag is not noValue: - tagSet = self._tagSet.tagExplicitly(explicitTag) - isModified = True - else: - tagSet = self._tagSet - if subtypeSpec is None or subtypeSpec is noValue: - subtypeSpec = self._subtypeSpec - else: - subtypeSpec = self._subtypeSpec + subtypeSpec - isModified = True - if encoding is None or encoding is noValue: - encoding = self._encoding - else: - isModified = True - - if isModified: - return self.__class__(value, tagSet, subtypeSpec, encoding, binValue, hexValue) - else: - return self - - if sys.version_info[0] <= 2: - def prettyIn(self, value): - if isinstance(value, str): - return value - elif isinstance(value, unicode): - try: - return value.encode(self._encoding) - except (LookupError, UnicodeEncodeError): - raise error.PyAsn1Error( - 'Can\'t encode string \'%s\' with \'%s\' codec' % (value, self._encoding) - ) - elif isinstance(value, (tuple, list)): - try: - return ''.join([chr(x) for x in value]) - except ValueError: - raise error.PyAsn1Error( - 'Bad %s initializer \'%s\'' % (self.__class__.__name__, value) - ) - else: - return str(value) - - def __str__(self): - return str(self._value) - - def __unicode__(self): - try: - return self._value.decode(self._encoding) - - except UnicodeDecodeError: - raise error.PyAsn1Error( - 'Can\'t decode string \'%s\' with \'%s\' codec' % (self._value, self._encoding) - ) - - def asOctets(self): - return str(self._value) - - def asNumbers(self): - if self.__asNumbersCache is None: - self.__asNumbersCache = tuple([ord(x) for x in self._value]) - return self.__asNumbersCache - - else: - def prettyIn(self, value): - if isinstance(value, bytes): - return value - elif isinstance(value, str): - try: - return value.encode(self._encoding) - except UnicodeEncodeError: - raise error.PyAsn1Error( - 'Can\'t encode string \'%s\' with \'%s\' codec' % (value, self._encoding) - ) - elif isinstance(value, OctetString): # a shortcut, bytes() would work the same way - return value.asOctets() - elif isinstance(value, base.AbstractSimpleAsn1Item): # this mostly targets Integer objects - return self.prettyIn(str(value)) - elif isinstance(value, (tuple, list)): - return self.prettyIn(bytes(value)) - else: - return bytes(value) - - def __str__(self): - try: - return self._value.decode(self._encoding) - - except UnicodeDecodeError: - raise error.PyAsn1Error( - 'Can\'t decode string \'%s\' with \'%s\' codec at \'%s\'' % (self._value, self._encoding, self.__class__.__name__) - ) - - def __bytes__(self): - return bytes(self._value) - - def asOctets(self): - return bytes(self._value) - - def asNumbers(self): - if self.__asNumbersCache is None: - self.__asNumbersCache = tuple(self._value) - return self.__asNumbersCache - - def prettyOut(self, value): - if sys.version_info[0] <= 2: - numbers = tuple((ord(x) for x in value)) - else: - numbers = tuple(value) - for x in numbers: - if x < 32 or x > 126: - return '0x' + ''.join(('%.2x' % x for x in numbers)) - else: - return octets.octs2str(value) - - @staticmethod - def fromBinaryString(value): - bitNo = 8 - byte = 0 - r = [] - for v in value: - if bitNo: - bitNo -= 1 - else: - bitNo = 7 - r.append(byte) - byte = 0 - if v in ('0', '1'): - v = int(v) - else: - raise error.PyAsn1Error( - 'Non-binary OCTET STRING initializer %s' % (v,) - ) - byte |= v << bitNo - - r.append(byte) - - return octets.ints2octs(r) - - @staticmethod - def fromHexString(value): - r = [] - p = [] - for v in value: - if p: - r.append(int(p + v, 16)) - p = None - else: - p = v - if p: - r.append(int(p + '0', 16)) - - return octets.ints2octs(r) - - def __repr__(self): - r = [] - doHex = False - if self._value is not self.defaultValue: - for x in self.asNumbers(): - if x < 32 or x > 126: - doHex = True - break - if not doHex: - r.append('%r' % (self._value,)) - if self._tagSet is not self.__class__.tagSet: - r.append('tagSet=%r' % (self._tagSet,)) - if self._subtypeSpec is not self.subtypeSpec: - r.append('subtypeSpec=%r' % (self._subtypeSpec,)) - if self.encoding is not self._encoding: - r.append('encoding=%r' % (self._encoding,)) - if doHex: - r.append('hexValue=%r' % ''.join(['%.2x' % x for x in self.asNumbers()])) - return '%s(%s)' % (self.__class__.__name__, ', '.join(r)) - - # Immutable sequence object protocol - - def __len__(self): - if self._len is None: - self._len = len(self._value) - return self._len - - def __getitem__(self, i): - if i.__class__ is slice: - return self.clone(self._value[i]) - else: - return self._value[i] - - def __iter__(self): - return iter(self._value) - - def __contains__(self, value): - return value in self._value - - def __add__(self, value): - return self.clone(self._value + self.prettyIn(value)) - - def __radd__(self, value): - return self.clone(self.prettyIn(value) + self._value) - - def __mul__(self, value): - return self.clone(self._value * value) - - def __rmul__(self, value): - return self * value - - def __int__(self): - return int(self._value) - - def __float__(self): - return float(self._value) - - def __reversed__(self): - return reversed(self._value) - - -class Null(OctetString): - """Create |ASN.1| type or object. - - |ASN.1| objects are immutable and duck-type Python :class:`str` objects (always empty). - - Parameters - ---------- - value : :class:`str` or :py:class:`~pyasn1.type.univ.Null` object - Python empty string literal or *Null* class instance. - - tagSet: :py:class:`~pyasn1.type.tag.TagSet` - Object representing non-default ASN.1 tag(s) - - Raises - ------ - : :py:class:`pyasn1.error.PyAsn1Error` - On constraint violation or bad initializer. - """ - defaultValue = ''.encode() # This is tightly constrained - - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.tag.TagSet` object representing ASN.1 tag(s) - #: associated with |ASN.1| type. - tagSet = tag.initTagSet( - tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 0x05) - ) - subtypeSpec = OctetString.subtypeSpec + constraint.SingleValueConstraint(octets.str2octs('')) - - # Optimization for faster codec lookup - typeId = OctetString.getTypeId() - - def clone(self, value=noValue, tagSet=None): - """Create a copy of a |ASN.1| type or object. - - Any parameters to the *clone()* method will replace corresponding - properties of the |ASN.1| object. - - Parameters - ---------- - value: :class:`str` or |ASN.1| object - Initialization value to pass to new ASN.1 object instead of - inheriting one from the caller. - - tagSet: :py:class:`~pyasn1.type.tag.TagSet` - Object representing ASN.1 tag(s) to use in new object instead of inheriting from the caller - - Returns - ------- - : :py:class:`~pyasn1.type.univ.Null` - new instance of NULL type/value - """ - return OctetString.clone(self, value, tagSet) - - def subtype(self, value=noValue, implicitTag=None, explicitTag=None): - """Create a copy of a |ASN.1| type or object. - - Any parameters to the *subtype()* method will be added to the corresponding - properties of the |ASN.1| object. - - Parameters - ---------- - value: :class:`int`, :class:`str` or |ASN.1| object - Initialization value to pass to new ASN.1 object instead of - inheriting one from the caller. - - implicitTag: :py:class:`~pyasn1.type.tag.Tag` - Implicitly apply given ASN.1 tag object to caller's - :py:class:`~pyasn1.type.tag.TagSet`, then use the result as - new object's ASN.1 tag(s). - - explicitTag: :py:class:`~pyasn1.type.tag.Tag` - Explicitly apply given ASN.1 tag object to caller's - :py:class:`~pyasn1.type.tag.TagSet`, then use the result as - new object's ASN.1 tag(s). - - Returns - ------- - : :py:class:`~pyasn1.type.univ.Null` - new instance of NULL type/value - """ - return OctetString.subtype(self, value, implicitTag, explicitTag) - - -if sys.version_info[0] <= 2: - intTypes = (int, long) -else: - intTypes = (int,) - -numericTypes = intTypes + (float,) - - -class ObjectIdentifier(base.AbstractSimpleAsn1Item): - """Create |ASN.1| type or object. - - |ASN.1| objects are immutable and duck-type Python :class:`tuple` objects (tuple of non-negative integers). - - Parameters - ---------- - value: :class:`tuple`, :class:`str` or |ASN.1| object - Python sequence of :class:`int` or string literal or |ASN.1| object. - - tagSet: :py:class:`~pyasn1.type.tag.TagSet` - Object representing non-default ASN.1 tag(s) - - subtypeSpec: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` - Object representing non-default ASN.1 subtype constraint(s) - - Raises - ------ - : :py:class:`pyasn1.error.PyAsn1Error` - On constraint violation or bad initializer. - """ - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.tag.TagSet` object representing ASN.1 tag(s) - #: associated with |ASN.1| type. - tagSet = tag.initTagSet( - tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 0x06) - ) - - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` object - #: imposing constraints on |ASN.1| type initialization values. - subtypeSpec = constraint.ConstraintsIntersection() - - # Optimization for faster codec lookup - typeId = base.AbstractSimpleAsn1Item.getTypeId() - - def __add__(self, other): - return self.clone(self._value + other) - - def __radd__(self, other): - return self.clone(other + self._value) - - def asTuple(self): - return self._value - - # Sequence object protocol - - def __len__(self): - if self._len is None: - self._len = len(self._value) - return self._len - - def __getitem__(self, i): - if i.__class__ is slice: - return self.clone(self._value[i]) - else: - return self._value[i] - - def __iter__(self): - return iter(self._value) - - def __contains__(self, value): - return value in self._value - - def __str__(self): - return self.prettyPrint() - - def __repr__(self): - return '%s(%r)' % (self.__class__.__name__, self.prettyPrint()) - - def index(self, suboid): - return self._value.index(suboid) - - def isPrefixOf(self, other): - """Indicate if this |ASN.1| object is a prefix of other |ASN.1| object. - - Parameters - ---------- - other: |ASN.1| object - |ASN.1| object - - Returns - ------- - : :class:`bool` - :class:`True` if this |ASN.1| object is a parent (e.g. prefix) of the other |ASN.1| object - or :class:`False` otherwise. - """ - l = len(self) - if l <= len(other): - if self._value[:l] == other[:l]: - return True - return False - - def prettyIn(self, value): - if isinstance(value, ObjectIdentifier): - return tuple(value) - elif octets.isStringType(value): - if '-' in value: - raise error.PyAsn1Error( - 'Malformed Object ID %s at %s: %s' % (value, self.__class__.__name__, sys.exc_info()[1]) - ) - try: - return tuple([int(subOid) for subOid in value.split('.') if subOid]) - except ValueError: - raise error.PyAsn1Error( - 'Malformed Object ID %s at %s: %s' % (value, self.__class__.__name__, sys.exc_info()[1]) - ) - - try: - tupleOfInts = tuple([int(subOid) for subOid in value if subOid >= 0]) - - except (ValueError, TypeError): - raise error.PyAsn1Error( - 'Malformed Object ID %s at %s: %s' % (value, self.__class__.__name__, sys.exc_info()[1]) - ) - - if len(tupleOfInts) == len(value): - return tupleOfInts - - raise error.PyAsn1Error('Malformed Object ID %s at %s' % (value, self.__class__.__name__)) - - def prettyOut(self, value): - return '.'.join([str(x) for x in value]) - - -class Real(base.AbstractSimpleAsn1Item): - """Create |ASN.1| type or object. - - |ASN.1| objects are immutable and duck-type Python :class:`float` objects. - Additionally, |ASN.1| objects behave like a :class:`tuple` in which case its - elements are mantissa, base and exponent. - - Parameters - ---------- - value: :class:`tuple`, :class:`float` or |ASN.1| object - Python sequence of :class:`int` (representing mantissa, base and - exponent) or float instance or *Real* class instance. - - tagSet: :py:class:`~pyasn1.type.tag.TagSet` - Object representing non-default ASN.1 tag(s) - - subtypeSpec: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` - Object representing non-default ASN.1 subtype constraint(s) - - Raises - ------ - : :py:class:`pyasn1.error.PyAsn1Error` - On constraint violation or bad initializer. - - """ - binEncBase = None # binEncBase = 16 is recommended for large numbers - - try: - _plusInf = float('inf') - _minusInf = float('-inf') - _inf = (_plusInf, _minusInf) - except ValueError: - # Infinity support is platform and Python dependent - _plusInf = _minusInf = None - _inf = () - - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.tag.TagSet` object representing ASN.1 tag(s) - #: associated with |ASN.1| type. - tagSet = tag.initTagSet( - tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 0x09) - ) - - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` object - #: imposing constraints on |ASN.1| type initialization values. - subtypeSpec = constraint.ConstraintsIntersection() - - # Optimization for faster codec lookup - typeId = base.AbstractSimpleAsn1Item.getTypeId() - - def clone(self, value=noValue, tagSet=None, subtypeSpec=None): - """Create a copy of a |ASN.1| type or object. - - Any parameters to the *clone()* method will replace corresponding - properties of the |ASN.1| object. - - Parameters - ---------- - value: :class:`tuple`, :class:`float` or |ASN.1| object - Initialization value to pass to new ASN.1 object instead of - inheriting one from the caller. - - tagSet: :py:class:`~pyasn1.type.tag.TagSet` - Object representing ASN.1 tag(s) to use in new object instead of inheriting from the caller - - subtypeSpec: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` - Object representing ASN.1 subtype constraint(s) to use in new object instead of inheriting from the caller - - Returns - ------- - : - new instance of |ASN.1| type/value - """ - return base.AbstractSimpleAsn1Item.clone(self, value, tagSet, subtypeSpec) - - def subtype(self, value=noValue, implicitTag=None, explicitTag=None, - subtypeSpec=None): - """Create a copy of a |ASN.1| type or object. - - Any parameters to the *subtype()* method will be added to the corresponding - properties of the |ASN.1| object. - - Parameters - ---------- - value: :class:`tuple`, :class:`float` or |ASN.1| object - Initialization value to pass to new ASN.1 object instead of - inheriting one from the caller. - - implicitTag: :py:class:`~pyasn1.type.tag.Tag` - Implicitly apply given ASN.1 tag object to caller's - :py:class:`~pyasn1.type.tag.TagSet`, then use the result as - new object's ASN.1 tag(s). - - explicitTag: :py:class:`~pyasn1.type.tag.Tag` - Explicitly apply given ASN.1 tag object to caller's - :py:class:`~pyasn1.type.tag.TagSet`, then use the result as - new object's ASN.1 tag(s). - - subtypeSpec: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` - Object representing ASN.1 subtype constraint(s) to use in new object instead of inheriting from the caller - - Returns - ------- - : - new instance of |ASN.1| type/value - """ - return base.AbstractSimpleAsn1Item.subtype(self, value, implicitTag, explicitTag) - - @staticmethod - def __normalizeBase10(value): - m, b, e = value - while m and m % 10 == 0: - m /= 10 - e += 1 - return m, b, e - - def prettyIn(self, value): - if isinstance(value, tuple) and len(value) == 3: - if not isinstance(value[0], numericTypes) or \ - not isinstance(value[1], intTypes) or \ - not isinstance(value[2], intTypes): - raise error.PyAsn1Error('Lame Real value syntax: %s' % (value,)) - if isinstance(value[0], float) and \ - self._inf and value[0] in self._inf: - return value[0] - if value[1] not in (2, 10): - raise error.PyAsn1Error( - 'Prohibited base for Real value: %s' % (value[1],) - ) - if value[1] == 10: - value = self.__normalizeBase10(value) - return value - elif isinstance(value, intTypes): - return self.__normalizeBase10((value, 10, 0)) - elif isinstance(value, float) or octets.isStringType(value): - if octets.isStringType(value): - try: - value = float(value) - except ValueError: - raise error.PyAsn1Error( - 'Bad real value syntax: %s' % (value,) - ) - if self._inf and value in self._inf: - return value - else: - e = 0 - while int(value) != value: - value *= 10 - e -= 1 - return self.__normalizeBase10((int(value), 10, e)) - elif isinstance(value, Real): - return tuple(value) - raise error.PyAsn1Error( - 'Bad real value syntax: %s' % (value,) - ) - - def prettyOut(self, value): - if value in self._inf: - return '\'%s\'' % value - else: - return str(value) - - def prettyPrint(self, scope=0): - if self.isInfinity(): - return self.prettyOut(self._value) - else: - return str(float(self)) - - def isPlusInfinity(self): - """Indicate PLUS-INFINITY object value - - Returns - ------- - : :class:`bool` - :class:`True` if calling object represents plus infinity - or :class:`False` otherwise. - - """ - return self._value == self._plusInf - - def isMinusInfinity(self): - """Indicate MINUS-INFINITY object value - - Returns - ------- - : :class:`bool` - :class:`True` if calling object represents minus infinity - or :class:`False` otherwise. - """ - return self._value == self._minusInf - - def isInfinity(self): - return self._value in self._inf - - def __str__(self): - return str(float(self)) - - def __add__(self, value): - return self.clone(float(self) + value) - - def __radd__(self, value): - return self + value - - def __mul__(self, value): - return self.clone(float(self) * value) - - def __rmul__(self, value): - return self * value - - def __sub__(self, value): - return self.clone(float(self) - value) - - def __rsub__(self, value): - return self.clone(value - float(self)) - - def __mod__(self, value): - return self.clone(float(self) % value) - - def __rmod__(self, value): - return self.clone(value % float(self)) - - def __pow__(self, value, modulo=None): - return self.clone(pow(float(self), value, modulo)) - - def __rpow__(self, value): - return self.clone(pow(value, float(self))) - - if sys.version_info[0] <= 2: - def __div__(self, value): - return self.clone(float(self) / value) - - def __rdiv__(self, value): - return self.clone(value / float(self)) - else: - def __truediv__(self, value): - return self.clone(float(self) / value) - - def __rtruediv__(self, value): - return self.clone(value / float(self)) - - def __divmod__(self, value): - return self.clone(float(self) // value) - - def __rdivmod__(self, value): - return self.clone(value // float(self)) - - def __int__(self): - return int(float(self)) - - if sys.version_info[0] <= 2: - def __long__(self): return long(float(self)) - - def __float__(self): - if self._value in self._inf: - return self._value - else: - return float( - self._value[0] * pow(self._value[1], self._value[2]) - ) - - def __abs__(self): - return self.clone(abs(float(self))) - - def __pos__(self): - return self.clone(+float(self)) - - def __neg__(self): - return self.clone(-float(self)) - - def __round__(self, n=0): - r = round(float(self), n) - if n: - return self.clone(r) - else: - return r - - def __floor__(self): - return self.clone(math.floor(float(self))) - - def __ceil__(self): - return self.clone(math.ceil(float(self))) - - if sys.version_info[0:2] > (2, 5): - def __trunc__(self): return self.clone(math.trunc(float(self))) - - def __lt__(self, value): - return float(self) < value - - def __le__(self, value): - return float(self) <= value - - def __eq__(self, value): - return float(self) == value - - def __ne__(self, value): - return float(self) != value - - def __gt__(self, value): - return float(self) > value - - def __ge__(self, value): - return float(self) >= value - - if sys.version_info[0] <= 2: - def __nonzero__(self): - return bool(float(self)) - else: - def __bool__(self): - return bool(float(self)) - - __hash__ = base.AbstractSimpleAsn1Item.__hash__ - - def __getitem__(self, idx): - if self._value in self._inf: - raise error.PyAsn1Error('Invalid infinite value operation') - else: - return self._value[idx] - - -class Enumerated(Integer): - __doc__ = Integer.__doc__ - - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.tag.TagSet` object representing ASN.1 tag(s) - #: associated with |ASN.1| type. - tagSet = tag.initTagSet( - tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 0x0A) - ) - - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` object - #: imposing constraints on |ASN.1| type initialization values. - subtypeSpec = constraint.ConstraintsIntersection() - - # Optimization for faster codec lookup - typeId = Integer.getTypeId() - - #: Default :py:class:`~pyasn1.type.namedval.NamedValues` object - #: representing symbolic aliases for numbers - namedValues = namedval.NamedValues() - - -# "Structured" ASN.1 types - -class SequenceOfAndSetOfBase(base.AbstractConstructedAsn1Item): - """Create |ASN.1| type. - - |ASN.1| objects are mutable and duck-type Python :class:`list` objects. - - Parameters - ---------- - componentType : :py:class:`~pyasn1.type.base.PyAsn1Item` derivative - A pyasn1 object representing ASN.1 type allowed within |ASN.1| type - - tagSet: :py:class:`~pyasn1.type.tag.TagSet` - Object representing non-default ASN.1 tag(s) - - subtypeSpec: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` - Object representing non-default ASN.1 subtype constraint(s) - - sizeSpec: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` - Object representing collection size constraint - """ - - # Python list protocol - - def clear(self): - self._componentValues = [] - - def append(self, value): - self[len(self)] = value - - def count(self, value): - return self._componentValues.count(value) - - def extend(self, values): - for value in values: - self.append(value) - - def index(self, value, start=0, stop=None): - if stop is None: - stop = len(self) - return self._componentValues.index(value, start, stop) - - def reverse(self): - self._componentValues.reverse() - - def sort(self, key=None, reverse=False): - self._componentValues.sort(key=key, reverse=reverse) - - def __iter__(self): - return iter(self._componentValues) - - def _cloneComponentValues(self, myClone, cloneValueFlag): - for idx, componentValue in enumerate(self._componentValues): - if componentValue is not None: - if isinstance(componentValue, base.AbstractConstructedAsn1Item): - myClone.setComponentByPosition( - idx, componentValue.clone(cloneValueFlag=cloneValueFlag) - ) - else: - myClone.setComponentByPosition(idx, componentValue.clone()) - - def getComponentByPosition(self, idx): - """Return |ASN.1| type component value by position. - - Equivalent to Python sequence subscription operation (e.g. `[]`). - - Parameters - ---------- - idx : :class:`int` - Component index (zero-based). Must either refer to an existing - component or to N+1 component (of *componentType is set). In the latter - case a new component type gets instantiated and appended to the |ASN.1| - sequence. - - Returns - ------- - : :py:class:`~pyasn1.type.base.PyAsn1Item` - a pyasn1 object - """ - try: - return self._componentValues[idx] - except IndexError: - self.setComponentByPosition(idx) - return self._componentValues[idx] - - def setComponentByPosition(self, idx, value=noValue, - verifyConstraints=True, - matchTags=True, - matchConstraints=True): - """Assign |ASN.1| type component by position. - - Equivalent to Python sequence item assignment operation (e.g. `[]`) - or list.append() (when idx == len(self)). - - Parameters - ---------- - idx: :class:`int` - Component index (zero-based). Must either refer to existing - component or to N+1 component. In the latter case a new component - type gets instantiated (if *componentType* is set, or given ASN.1 - object is taken otherwise) and appended to the |ASN.1| sequence. - - value: :class:`object` or :py:class:`~pyasn1.type.base.PyAsn1Item` derivative - A Python value to initialize |ASN.1| component with (if *componentType* is set) - or ASN.1 value object to assign to |ASN.1| component. - - verifyConstraints: :class:`bool` - If `False`, skip constraints validation - - matchTags: :class:`bool` - If `False`, skip component tags matching - - matchConstraints: :class:`bool` - If `False`, skip component constraints matching - - Returns - ------- - self - - Raises - ------ - IndexError: - When idx > len(self) - """ - componentType = self._componentType - - try: - currentValue = self._componentValues[idx] - except IndexError: - currentValue = None - - if len(self._componentValues) < idx: - raise error.PyAsn1Error('Component index out of range') - - if value is None or value is noValue: - if componentType is not None: - value = componentType.clone() - elif currentValue is None: - raise error.PyAsn1Error('Component type not defined') - elif not isinstance(value, base.Asn1Item): - if componentType is not None and isinstance(componentType, base.AbstractSimpleAsn1Item): - value = componentType.clone(value=value) - elif currentValue is not None and isinstance(currentValue, base.AbstractSimpleAsn1Item): - value = currentValue.clone(value=value) - else: - raise error.PyAsn1Error('%s undefined component type' % componentType.__class__.__name__) - elif componentType is not None: - if self.strictConstraints: - if not componentType.isSameTypeWith(value, matchTags, matchConstraints): - raise error.PyAsn1Error('Component value is tag-incompatible: %r vs %r' % (value, componentType)) - else: - if not componentType.isSuperTypeOf(value, matchTags, matchConstraints): - raise error.PyAsn1Error('Component value is tag-incompatible: %r vs %r' % (value, componentType)) - - if verifyConstraints and value.isValue: - try: - self._subtypeSpec(value, idx) - - except error.PyAsn1Error: - exType, exValue, exTb = sys.exc_info() - raise exType('%s at %s' % (exValue, self.__class__.__name__)) - - if currentValue is None: - self._componentValues.append(value) - else: - self._componentValues[idx] = value - - return self - - @property - def componentTagMap(self): - if self._componentType is not None: - return self._componentType.tagMap - - def prettyPrint(self, scope=0): - scope += 1 - representation = self.__class__.__name__ + ':\n' - for idx in range(len(self._componentValues)): - representation += ' ' * scope - if self._componentValues[idx] is None: - representation += '<empty>' - else: - representation += self._componentValues[idx].prettyPrint(scope) - return representation - - def prettyPrintType(self, scope=0): - scope += 1 - representation = '%s -> %s {\n' % (self.tagSet, self.__class__.__name__) - if self._componentType is not None: - representation += ' ' * scope - representation += self._componentType.prettyPrintType(scope) - return representation + '\n' + ' ' * (scope - 1) + '}' - - - @property - def isValue(self): - """Indicate if |ASN.1| object components represent ASN.1 type or ASN.1 value. - - The PyASN1 type objects can only participate in types comparison - and serve as a blueprint for serialization codecs to resolve - ambiguous types. - - The PyASN1 value objects can additionally participate in most - of built-in Python operations. - - Returns - ------- - : :class:`bool` - :class:`True` if all |ASN.1| components represent value and type, - :class:`False` if at least one |ASN.1| component represents just ASN.1 type. - """ - if not self._componentValues: - return False - - for componentValue in self._componentValues: - if not componentValue.isValue: - return False - - return True - - -class SequenceOf(SequenceOfAndSetOfBase): - __doc__ = SequenceOfAndSetOfBase.__doc__ - - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.tag.TagSet` object representing ASN.1 tag(s) - #: associated with |ASN.1| type. - tagSet = tag.initTagSet( - tag.Tag(tag.tagClassUniversal, tag.tagFormatConstructed, 0x10) - ) - - #: Default :py:class:`~pyasn1.type.base.PyAsn1Item` derivative - #: object representing ASN.1 type allowed within |ASN.1| type - componentType = None - - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` object - #: imposing constraints on |ASN.1| type initialization values. - subtypeSpec = constraint.ConstraintsIntersection() - - #: Default :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` - #: object imposing size constraint on |ASN.1| objects - sizeSpec = constraint.ConstraintsIntersection() - - # Disambiguation ASN.1 types identification - typeId = SequenceOfAndSetOfBase.getTypeId() - - -class SetOf(SequenceOfAndSetOfBase): - __doc__ = SequenceOfAndSetOfBase.__doc__ - - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.tag.TagSet` object representing ASN.1 tag(s) - #: associated with |ASN.1| type. - tagSet = tag.initTagSet( - tag.Tag(tag.tagClassUniversal, tag.tagFormatConstructed, 0x11) - ) - - #: Default :py:class:`~pyasn1.type.base.PyAsn1Item` derivative - #: object representing ASN.1 type allowed within |ASN.1| type - componentType = None - - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` object - #: imposing constraints on |ASN.1| type initialization values. - subtypeSpec = constraint.ConstraintsIntersection() - - #: Default :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` - #: object imposing size constraint on |ASN.1| objects - sizeSpec = constraint.ConstraintsIntersection() - - # Disambiguation ASN.1 types identification - typeId = SequenceOfAndSetOfBase.getTypeId() - - -class SequenceAndSetBase(base.AbstractConstructedAsn1Item): - """Create |ASN.1| type. - - |ASN.1| objects are mutable and duck-type Python :class:`dict` objects. - - Parameters - ---------- - componentType: :py:class:`~pyasn1.type.namedtype.NamedType` - Object holding named ASN.1 types allowed within this collection - - tagSet: :py:class:`~pyasn1.type.tag.TagSet` - Object representing non-default ASN.1 tag(s) - - subtypeSpec: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` - Object representing non-default ASN.1 subtype constraint(s) - - sizeSpec: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` - Object representing collection size constraint - """ - #: Default :py:class:`~pyasn1.type.namedtype.NamedTypes` - #: object representing named ASN.1 types allowed within |ASN.1| type - componentType = namedtype.NamedTypes() - - def __init__(self, componentType=None, tagSet=None, - subtypeSpec=None, sizeSpec=None): - if componentType is None: - componentType = self.componentType - base.AbstractConstructedAsn1Item.__init__( - self, componentType, tagSet, subtypeSpec, sizeSpec - ) - self._componentTypeLen = len(self._componentType) - - def __getitem__(self, idx): - if octets.isStringType(idx): - return self.getComponentByName(idx) - else: - return base.AbstractConstructedAsn1Item.__getitem__(self, idx) - - def __setitem__(self, idx, value): - if octets.isStringType(idx): - self.setComponentByName(idx, value) - else: - base.AbstractConstructedAsn1Item.__setitem__(self, idx, value) - - def __contains__(self, key): - return key in self._componentType - - def __iter__(self): - return iter(self._componentType) - - # Python dict protocol - - def values(self): - for idx in range(self._componentTypeLen): - yield self[idx] - - def keys(self): - return iter(self._componentType) - - def items(self): - for idx in range(self._componentTypeLen): - yield self._componentType[idx].getName(), self[idx] - - def update(self, *iterValue, **mappingValue): - for k, v in iterValue: - self[k] = v - for k in mappingValue: - self[k] = mappingValue[k] - - def clear(self): - self._componentValues = [] - - def _cloneComponentValues(self, myClone, cloneValueFlag): - for idx, componentValue in enumerate(self._componentValues): - if componentValue is not None: - if isinstance(componentValue, base.AbstractConstructedAsn1Item): - myClone.setComponentByPosition( - idx, componentValue.clone(cloneValueFlag=cloneValueFlag) - ) - else: - myClone.setComponentByPosition(idx, componentValue.clone()) - - def getComponentByName(self, name): - """Returns |ASN.1| type component by name. - - Equivalent to Python :class:`dict` subscription operation (e.g. `[]`). - - Parameters - ---------- - name : :class:`str` - |ASN.1| type component name - - Returns - ------- - : :py:class:`~pyasn1.type.base.PyAsn1Item` - Instantiate |ASN.1| component type or return existing component value - """ - return self.getComponentByPosition( - self._componentType.getPositionByName(name) - ) - - def setComponentByName(self, name, value=noValue, - verifyConstraints=True, - matchTags=True, - matchConstraints=True): - """Assign |ASN.1| type component by name. - - Equivalent to Python :class:`dict` item assignment operation (e.g. `[]`). - - Parameters - ---------- - name: :class:`str` - |ASN.1| type component name - - value : :class:`object` or :py:class:`~pyasn1.type.base.PyAsn1Item` derivative - A Python value to initialize |ASN.1| component with (if *componentType* is set) - or ASN.1 value object to assign to |ASN.1| component. - - verifyConstraints: :class:`bool` - If `False`, skip constraints validation - - matchTags: :class:`bool` - If `False`, skip component tags matching - - matchConstraints: :class:`bool` - If `False`, skip component constraints matching - - Returns - ------- - self - """ - return self.setComponentByPosition( - self._componentType.getPositionByName(name), value, verifyConstraints, matchTags, matchConstraints - ) - - def getComponentByPosition(self, idx): - """Returns |ASN.1| type component by index. - - Equivalent to Python sequence subscription operation (e.g. `[]`). - - Parameters - ---------- - idx : :class:`int` - Component index (zero-based). Must either refer to an existing - component or (if *componentType* is set) new ASN.1 type object gets - instantiated. - - Returns - ------- - : :py:class:`~pyasn1.type.base.PyAsn1Item` - a PyASN1 object - """ - try: - componentValue = self._componentValues[idx] - except IndexError: - componentValue = None - - if componentValue is None: - self.setComponentByPosition(idx) - - return self._componentValues[idx] - - def setComponentByPosition(self, idx, value=noValue, - verifyConstraints=True, - matchTags=True, - matchConstraints=True): - """Assign |ASN.1| type component by position. - - Equivalent to Python sequence item assignment operation (e.g. `[]`). - - Parameters - ---------- - idx : :class:`int` - Component index (zero-based). Must either refer to existing - component (if *componentType* is set) or to N+1 component - otherwise. In the latter case a new component of given ASN.1 - type gets instantiated and appended to |ASN.1| sequence. - - value : :class:`object` or :py:class:`~pyasn1.type.base.PyAsn1Item` derivative - A Python value to initialize |ASN.1| component with (if *componentType* is set) - or ASN.1 value object to assign to |ASN.1| component. - - verifyConstraints : :class:`bool` - If `False`, skip constraints validation - - matchTags: :class:`bool` - If `False`, skip component tags matching - - matchConstraints: :class:`bool` - If `False`, skip component constraints matching - - Returns - ------- - self - """ - componentType = self._componentType - componentTypeLen = self._componentTypeLen - - try: - currentValue = self._componentValues[idx] - except IndexError: - currentValue = None - if componentTypeLen: - if componentTypeLen < idx: - raise IndexError('component index out of range') - self._componentValues = [None] * componentTypeLen - - if value is None or value is noValue: - if componentTypeLen: - value = componentType.getTypeByPosition(idx).clone() - elif currentValue is None: - raise error.PyAsn1Error('Component type not defined') - elif not isinstance(value, base.Asn1Item): - if componentTypeLen: - subComponentType = componentType.getTypeByPosition(idx) - if isinstance(subComponentType, base.AbstractSimpleAsn1Item): - value = subComponentType.clone(value=value) - else: - raise error.PyAsn1Error('%s can cast only scalar values' % componentType.__class__.__name__) - elif currentValue is not None and isinstance(currentValue, base.AbstractSimpleAsn1Item): - value = currentValue.clone(value=value) - else: - raise error.PyAsn1Error('%s undefined component type' % componentType.__class__.__name__) - elif (matchTags or matchConstraints) and componentTypeLen: - subComponentType = componentType.getTypeByPosition(idx) - if subComponentType is not None: - if self.strictConstraints: - if not subComponentType.isSameTypeWith(value, matchTags, matchConstraints): - raise error.PyAsn1Error('Component value is tag-incompatible: %r vs %r' % (value, componentType)) - else: - if not subComponentType.isSuperTypeOf(value, matchTags, matchConstraints): - raise error.PyAsn1Error('Component value is tag-incompatible: %r vs %r' % (value, componentType)) - - if verifyConstraints and value.isValue: - try: - self._subtypeSpec(value, idx) - - except error.PyAsn1Error: - exType, exValue, exTb = sys.exc_info() - raise exType('%s at %s' % (exValue, self.__class__.__name__)) - - if componentTypeLen: - self._componentValues[idx] = value - elif len(self._componentValues) == idx: - self._componentValues.append(value) - else: - raise error.PyAsn1Error('Component index out of range') - - return self - - def getNameByPosition(self, idx): - if self._componentTypeLen: - return self._componentType.getNameByPosition(idx) - - def getComponentType(self): - if self._componentTypeLen: - return self._componentType - - @property - def isValue(self): - """Indicate if |ASN.1| object components represent ASN.1 type or ASN.1 value. - - The PyASN1 type objects can only participate in types comparison - and serve as a blueprint for serialization codecs to resolve - ambiguous types. - - The PyASN1 value objects can additionally participate in most - of built-in Python operations. - - Returns - ------- - : :class:`bool` - :class:`True` if all |ASN.1| components represent value and type, - :class:`False` if at least one |ASN.1| component represents just ASN.1 type. - """ - componentType = self._componentType - - if componentType: - for idx, subComponentType in enumerate(componentType.namedTypes): - if subComponentType.isDefaulted or subComponentType.isOptional: - continue - if not self._componentValues or self._componentValues[idx] is None or not self._componentValues[idx].isValue: - return False - - else: - for componentValue in self._componentValues: - if not componentValue.isValue: - return False - - return True - - def prettyPrint(self, scope=0): - """Return an object representation string. - - Returns - ------- - : :class:`str` - Human-friendly object representation. - """ - scope += 1 - representation = self.__class__.__name__ + ':\n' - for idx in range(len(self._componentValues)): - if self._componentValues[idx] is not None: - representation += ' ' * scope - componentType = self.getComponentType() - if componentType is None: - representation += '<no-name>' - else: - representation += componentType.getNameByPosition(idx) - representation = '%s=%s\n' % ( - representation, self._componentValues[idx].prettyPrint(scope) - ) - return representation - - def prettyPrintType(self, scope=0): - scope += 1 - representation = '%s -> %s {\n' % (self.tagSet, self.__class__.__name__) - for idx in range(len(self.componentType)): - representation += ' ' * scope - representation += '"%s"' % self.componentType.getNameByPosition(idx) - representation = '%s = %s\n' % ( - representation, self._componentType.getTypeByPosition(idx).prettyPrintType(scope) - ) - return representation + '\n' + ' ' * (scope - 1) + '}' - - # backward compatibility -- no-op - def setDefaultComponents(self): - return self - - -class Sequence(SequenceAndSetBase): - __doc__ = SequenceAndSetBase.__doc__ - - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.tag.TagSet` object representing ASN.1 tag(s) - #: associated with |ASN.1| type. - tagSet = tag.initTagSet( - tag.Tag(tag.tagClassUniversal, tag.tagFormatConstructed, 0x10) - ) - - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` object - #: imposing constraints on |ASN.1| type initialization values. - subtypeSpec = constraint.ConstraintsIntersection() - - #: Default :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` - #: object imposing constraints on |ASN.1| objects - sizeSpec = constraint.ConstraintsIntersection() - - #: Default collection of ASN.1 types of component (e.g. :py:class:`~pyasn1.type.namedtype.NamedType`) - #: object imposing size constraint on |ASN.1| objects - componentType = namedtype.NamedTypes() - - # Disambiguation ASN.1 types identification - typeId = SequenceAndSetBase.getTypeId() - - def getComponentTagMapNearPosition(self, idx): - if self._componentType: - return self._componentType.getTagMapNearPosition(idx) - - def getComponentPositionNearType(self, tagSet, idx): - if self._componentType: - return self._componentType.getPositionNearType(tagSet, idx) - else: - return idx - - -class Set(SequenceAndSetBase): - __doc__ = SequenceAndSetBase.__doc__ - - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.tag.TagSet` object representing ASN.1 tag(s) - #: associated with |ASN.1| type. - tagSet = tag.initTagSet( - tag.Tag(tag.tagClassUniversal, tag.tagFormatConstructed, 0x11) - ) - - #: Default collection of ASN.1 types of component (e.g. :py:class:`~pyasn1.type.namedtype.NamedType`) - #: object representing ASN.1 type allowed within |ASN.1| type - componentType = namedtype.NamedTypes() - - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` object - #: imposing constraints on |ASN.1| type initialization values. - subtypeSpec = constraint.ConstraintsIntersection() - - #: Default :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` - #: object imposing constraints on |ASN.1| objects - sizeSpec = constraint.ConstraintsIntersection() - - # Disambiguation ASN.1 types identification - typeId = SequenceAndSetBase.getTypeId() - - def getComponent(self, innerFlag=False): - return self - - def getComponentByType(self, tagSet, innerFlag=False): - """Returns |ASN.1| type component by ASN.1 tag. - - Parameters - ---------- - tagSet : :py:class:`~pyasn1.type.tag.TagSet` - Object representing ASN.1 tags to identify one of - |ASN.1| object component - - Returns - ------- - : :py:class:`~pyasn1.type.base.PyAsn1Item` - a pyasn1 object - """ - component = self.getComponentByPosition( - self._componentType.getPositionByType(tagSet) - ) - if innerFlag and isinstance(component, Set): - # get inner component by inner tagSet - return component.getComponent(innerFlag=True) - else: - # get outer component by inner tagSet - return component - - def setComponentByType(self, tagSet, value=noValue, - verifyConstraints=True, - matchTags=True, - matchConstraints=True, - innerFlag=False): - """Assign |ASN.1| type component by ASN.1 tag. - - Parameters - ---------- - tagSet : :py:class:`~pyasn1.type.tag.TagSet` - Object representing ASN.1 tags to identify one of - |ASN.1| object component - - value : :class:`object` or :py:class:`~pyasn1.type.base.PyAsn1Item` derivative - A Python value to initialize |ASN.1| component with (if *componentType* is set) - or ASN.1 value object to assign to |ASN.1| component. - - verifyConstraints : :class:`bool` - If `False`, skip constraints validation - - matchTags: :class:`bool` - If `False`, skip component tags matching - - matchConstraints: :class:`bool` - If `False`, skip component constraints matching - - innerFlag: :class:`bool` - If `True`, search for matching *tagSet* recursively. - - Returns - ------- - self - """ - idx = self._componentType.getPositionByType(tagSet) - - if innerFlag: # set inner component by inner tagSet - componentType = self._componentType.getTypeByPosition(idx) - - if componentType.tagSet: - return self.setComponentByPosition( - idx, value, verifyConstraints, matchTags, matchConstraints - ) - else: - componentType = self.getComponentByPosition(idx) - return componentType.setComponentByType( - tagSet, value, verifyConstraints, matchTags, matchConstraints, innerFlag=innerFlag - ) - else: # set outer component by inner tagSet - return self.setComponentByPosition( - idx, value, verifyConstraints, matchTags, matchConstraints - ) - - @property - def componentTagMap(self): - if self._componentType: - return self._componentType.getTagMap(True) - - def getComponentPositionByType(self, tagSet): - if self._componentType: - return self._componentType.getPositionByType(tagSet) - - -class Choice(Set): - __doc__ = Set.__doc__ - - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.tag.TagSet` object representing ASN.1 tag(s) - #: associated with |ASN.1| type. - tagSet = tag.TagSet() # untagged - - #: Default collection of ASN.1 types of component (e.g. :py:class:`~pyasn1.type.namedtype.NamedType`) - #: object representing ASN.1 type allowed within |ASN.1| type - componentType = namedtype.NamedTypes() - - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` object - #: imposing constraints on |ASN.1| type initialization values. - subtypeSpec = constraint.ConstraintsIntersection() - - #: Default :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` - #: object imposing size constraint on |ASN.1| objects - sizeSpec = constraint.ConstraintsIntersection( - constraint.ValueSizeConstraint(1, 1) - ) - - # Disambiguation ASN.1 types identification - typeId = Set.getTypeId() - - _currentIdx = None - - def __eq__(self, other): - if self._componentValues: - return self._componentValues[self._currentIdx] == other - return NotImplemented - - def __ne__(self, other): - if self._componentValues: - return self._componentValues[self._currentIdx] != other - return NotImplemented - - def __lt__(self, other): - if self._componentValues: - return self._componentValues[self._currentIdx] < other - return NotImplemented - - def __le__(self, other): - if self._componentValues: - return self._componentValues[self._currentIdx] <= other - return NotImplemented - - def __gt__(self, other): - if self._componentValues: - return self._componentValues[self._currentIdx] > other - return NotImplemented - - def __ge__(self, other): - if self._componentValues: - return self._componentValues[self._currentIdx] >= other - return NotImplemented - - if sys.version_info[0] <= 2: - def __nonzero__(self): - return self._componentValues and True or False - else: - def __bool__(self): - return self._componentValues and True or False - - def __len__(self): - return self._currentIdx is not None and 1 or 0 - - def __contains__(self, key): - if self._currentIdx is None: - return False - return key == self._componentType[self._currentIdx].getName() - - def __iter__(self): - if self._currentIdx is None: - raise StopIteration - yield self._componentType[self._currentIdx].getName() - - # Python dict protocol - - def values(self): - if self._currentIdx is not None: - yield self._componentValues[self._currentIdx] - - def keys(self): - if self._currentIdx is not None: - yield self._componentType[self._currentIdx].getName() - - def items(self): - if self._currentIdx is not None: - yield self._componentType[self._currentIdx].getName(), self[self._currentIdx] - - def verifySizeSpec(self): - if self._currentIdx is None: - raise error.PyAsn1Error('Component not chosen') - - def _cloneComponentValues(self, myClone, cloneValueFlag): - try: - component = self.getComponent() - except error.PyAsn1Error: - pass - else: - if isinstance(component, Choice): - tagSet = component.effectiveTagSet - else: - tagSet = component.tagSet - if isinstance(component, base.AbstractConstructedAsn1Item): - myClone.setComponentByType( - tagSet, component.clone(cloneValueFlag=cloneValueFlag) - ) - else: - myClone.setComponentByType(tagSet, component.clone()) - - def getComponentByPosition(self, idx): - __doc__ = Set.__doc__ - - if self._currentIdx is None or self._currentIdx != idx: - return Set.getComponentByPosition(self, idx) - - return self._componentValues[idx] - - def setComponentByPosition(self, idx, value=noValue, - verifyConstraints=True, - matchTags=True, - matchConstraints=True): - """Assign |ASN.1| type component by position. - - Equivalent to Python sequence item assignment operation (e.g. `[]`). - - Parameters - ---------- - idx: :class:`int` - Component index (zero-based). Must either refer to existing - component or to N+1 component. In the latter case a new component - type gets instantiated (if *componentType* is set, or given ASN.1 - object is taken otherwise) and appended to the |ASN.1| sequence. - - value: :class:`object` or :py:class:`~pyasn1.type.base.PyAsn1Item` derivative - A Python value to initialize |ASN.1| component with (if *componentType* is set) - or ASN.1 value object to assign to |ASN.1| component. Once a new value is - set to *idx* component, previous value is dropped. - - verifyConstraints : :class:`bool` - If `False`, skip constraints validation - - matchTags: :class:`bool` - If `False`, skip component tags matching - - matchConstraints: :class:`bool` - If `False`, skip component constraints matching - - Returns - ------- - self - """ - oldIdx = self._currentIdx - Set.setComponentByPosition(self, idx, value, verifyConstraints, matchTags, matchConstraints) - self._currentIdx = idx - if oldIdx is not None and oldIdx != idx: - self._componentValues[oldIdx] = None - return self - - def getMinTagSet(self): - if self._tagSet: - return self._tagSet - else: - return self._componentType.minTagSet - - @property - def effectiveTagSet(self): - """Return a :class:`~pyasn1.type.tag.TagSet` object of the currently initialized component or self (if |ASN.1| is tagged).""" - if self._tagSet: - return self._tagSet - else: - component = self.getComponent() - return component.effectiveTagSet - - @property - def tagMap(self): - """"Return a :class:`~pyasn1.type.tagmap.TagMap` object mapping - ASN.1 tags to ASN.1 objects contained within callee. - """ - if self._tagSet: - return Set.tagMap.fget(self) - else: - return Set.componentTagMap.fget(self) - - def getComponent(self, innerFlag=0): - """Return currently assigned component of the |ASN.1| object. - - Returns - ------- - : :py:class:`~pyasn1.type.base.PyAsn1Item` - a PyASN1 object - """ - if self._currentIdx is None: - raise error.PyAsn1Error('Component not chosen') - else: - c = self._componentValues[self._currentIdx] - if innerFlag and isinstance(c, Choice): - return c.getComponent(innerFlag) - else: - return c - - def getName(self, innerFlag=False): - """Return the name of currently assigned component of the |ASN.1| object. - - Returns - ------- - : :py:class:`str` - |ASN.1| component name - """ - if self._currentIdx is None: - raise error.PyAsn1Error('Component not chosen') - else: - if innerFlag: - c = self._componentValues[self._currentIdx] - if isinstance(c, Choice): - return c.getName(innerFlag) - return self._componentType.getNameByPosition(self._currentIdx) - - @property - def isValue(self): - """Indicate if |ASN.1| component is set and represents ASN.1 type or ASN.1 value. - - The PyASN1 type objects can only participate in types comparison - and serve as a blueprint for serialization codecs to resolve - ambiguous types. - - The PyASN1 value objects can additionally participate in most - of built-in Python operations. - - Returns - ------- - : :class:`bool` - :class:`True` if |ASN.1| component is set and represent value and type, - :class:`False` if |ASN.1| component is not set or it represents just ASN.1 type. - """ - if self._currentIdx is None: - return False - - return self._componentValues[self._currentIdx].isValue - - -class Any(OctetString): - __doc__ = OctetString.__doc__ - - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.tag.TagSet` object representing ASN.1 tag(s) - #: associated with |ASN.1| type. - tagSet = tag.TagSet() # untagged - - #: Set (class attribute) or return (class or instance attribute) a - #: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection` object - #: imposing constraints on |ASN.1| type initialization values. - subtypeSpec = constraint.ConstraintsIntersection() - - # Disambiguation ASN.1 types identification - typeId = OctetString.getTypeId() - - @property - def tagMap(self): - """"Return a :class:`~pyasn1.type.tagmap.TagMap` object mapping - ASN.1 tags to ASN.1 objects contained within callee. - """ - try: - return self._tagMap - - except AttributeError: - self._tagMap = tagmap.TagMap( - {self.tagSet: self}, - {eoo.endOfOctets.tagSet: eoo.endOfOctets}, - self - ) - - return self._tagMap - -# XXX -# coercion rules? diff --git a/src/lib/pyasn1/type/useful.py b/src/lib/pyasn1/type/useful.py deleted file mode 100644 index 0b79a983..00000000 --- a/src/lib/pyasn1/type/useful.py +++ /dev/null @@ -1,39 +0,0 @@ -# -# This file is part of pyasn1 software. -# -# Copyright (c) 2005-2017, Ilya Etingof <etingof@gmail.com> -# License: http://pyasn1.sf.net/license.html -# -from pyasn1.type import univ, char, tag - -__all__ = ['ObjectDescriptor', 'GeneralizedTime', 'UTCTime'] - -NoValue = univ.NoValue -noValue = univ.noValue - - -class ObjectDescriptor(char.GraphicString): - __doc__ = char.GraphicString.__doc__ - - #: Default :py:class:`~pyasn1.type.tag.TagSet` object for |ASN.1| objects - tagSet = char.GraphicString.tagSet.tagImplicitly( - tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 7) - ) - - -class GeneralizedTime(char.VisibleString): - __doc__ = char.GraphicString.__doc__ - - #: Default :py:class:`~pyasn1.type.tag.TagSet` object for |ASN.1| objects - tagSet = char.VisibleString.tagSet.tagImplicitly( - tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 24) - ) - - -class UTCTime(char.VisibleString): - __doc__ = char.GraphicString.__doc__ - - #: Default :py:class:`~pyasn1.type.tag.TagSet` object for |ASN.1| objects - tagSet = char.VisibleString.tagSet.tagImplicitly( - tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 23) - ) diff --git a/src/lib/pybitcointools/LICENSE b/src/lib/pybitcointools/LICENSE deleted file mode 100644 index c47d4ad0..00000000 --- a/src/lib/pybitcointools/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -This code is public domain. Everyone has the right to do whatever they want -with it for any purpose. - -In case your jurisdiction does not consider the above disclaimer valid or -enforceable, here's an MIT license for you: - -The MIT License (MIT) - -Copyright (c) 2013 Vitalik Buterin - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/src/lib/pybitcointools/MANIFEST.in b/src/lib/pybitcointools/MANIFEST.in deleted file mode 100644 index 70656b68..00000000 --- a/src/lib/pybitcointools/MANIFEST.in +++ /dev/null @@ -1 +0,0 @@ -include bitcoin/english.txt diff --git a/src/lib/pybitcointools/README.md b/src/lib/pybitcointools/README.md deleted file mode 100644 index 2f2876e7..00000000 --- a/src/lib/pybitcointools/README.md +++ /dev/null @@ -1,142 +0,0 @@ -# Pybitcointools, Python library for Bitcoin signatures and transactions - -### Advantages: - -* Functions have a simple interface, inputting and outputting in standard formats -* No classes -* Many functions can be taken out and used individually -* Supports binary, hex and base58 -* Transaction deserialization format almost compatible with BitcoinJS -* Electrum and BIP0032 support -* Make and publish a transaction all in a single command line instruction -* Includes non-bitcoin-specific conversion and JSON utilities - -### Disadvantages: - -* Not a full node, has no idea what blocks are -* Relies on centralized service (blockchain.info) for blockchain operations, although operations do have backups (eligius, blockr.io) - -### Example usage (best way to learn :) ): - - > from bitcoin import * - > priv = sha256('some big long brainwallet password') - > priv - '57c617d9b4e1f7af6ec97ca2ff57e94a28279a7eedd4d12a99fa11170e94f5a4' - > pub = privtopub(priv) - > pub - '0420f34c2786b4bae593e22596631b025f3ff46e200fc1d4b52ef49bbdc2ed00b26c584b7e32523fb01be2294a1f8a5eb0cf71a203cc034ced46ea92a8df16c6e9' - > addr = pubtoaddr(pub) - > addr - '1CQLd3bhw4EzaURHbKCwM5YZbUQfA4ReY6' - > h = history(addr) - > h - [{'output': u'97f7c7d8ac85e40c255f8a763b6cd9a68f3a94d2e93e8bfa08f977b92e55465e:0', 'value': 50000, 'address': u'1CQLd3bhw4EzaURHbKCwM5YZbUQfA4ReY6'}, {'output': u'4cc806bb04f730c445c60b3e0f4f44b54769a1c196ca37d8d4002135e4abd171:1', 'value': 50000, 'address': u'1CQLd3bhw4EzaURHbKCwM5YZbUQfA4ReY6'}] - > outs = [{'value': 90000, 'address': '16iw1MQ1sy1DtRPYw3ao1bCamoyBJtRB4t'}] - > tx = mktx(h,outs) - > tx - '01000000025e46552eb977f908fa8b3ee9d2943a8fa6d96c3b768a5f250ce485acd8c7f7970000000000ffffffff71d1abe4352100d4d837ca96c1a16947b5444f0f3e0bc645c430f704bb06c84c0100000000ffffffff01905f0100000000001976a9143ec6c3ed8dfc3ceabcc1cbdb0c5aef4e2d02873c88ac00000000' - > tx2 = sign(tx,0,priv) - > tx2 - '01000000025e46552eb977f908fa8b3ee9d2943a8fa6d96c3b768a5f250ce485acd8c7f797000000008b483045022100dd29d89a28451febb990fb1dafa21245b105140083ced315ebcdea187572b3990220713f2e554f384d29d7abfedf39f0eb92afba0ef46f374e49d43a728a0ff6046e01410420f34c2786b4bae593e22596631b025f3ff46e200fc1d4b52ef49bbdc2ed00b26c584b7e32523fb01be2294a1f8a5eb0cf71a203cc034ced46ea92a8df16c6e9ffffffff71d1abe4352100d4d837ca96c1a16947b5444f0f3e0bc645c430f704bb06c84c0100000000ffffffff01905f0100000000001976a9143ec6c3ed8dfc3ceabcc1cbdb0c5aef4e2d02873c88ac00000000' - > tx3 = sign(tx2,1,priv) - > tx3 - '01000000025e46552eb977f908fa8b3ee9d2943a8fa6d96c3b768a5f250ce485acd8c7f797000000008b483045022100dd29d89a28451febb990fb1dafa21245b105140083ced315ebcdea187572b3990220713f2e554f384d29d7abfedf39f0eb92afba0ef46f374e49d43a728a0ff6046e01410420f34c2786b4bae593e22596631b025f3ff46e200fc1d4b52ef49bbdc2ed00b26c584b7e32523fb01be2294a1f8a5eb0cf71a203cc034ced46ea92a8df16c6e9ffffffff71d1abe4352100d4d837ca96c1a16947b5444f0f3e0bc645c430f704bb06c84c010000008c4930460221008bbaaaf172adfefc3a1315dc7312c88645832ff76d52e0029d127e65bbeeabe1022100fdeb89658d503cf2737cedb4049e5070f689c50a9b6c85997d49e0787938f93901410420f34c2786b4bae593e22596631b025f3ff46e200fc1d4b52ef49bbdc2ed00b26c584b7e32523fb01be2294a1f8a5eb0cf71a203cc034ced46ea92a8df16c6e9ffffffff01905f0100000000001976a9143ec6c3ed8dfc3ceabcc1cbdb0c5aef4e2d02873c88ac00000000' - > pushtx(tx3) - 'Transaction Submitted' - -Or using the pybtctool command line interface: - - @vub: pybtctool random_electrum_seed - 484ccb566edb66c65dd0fd2e4d90ef65 - - @vub: pybtctool electrum_privkey 484ccb566edb66c65dd0fd2e4d90ef65 0 0 - 593240c2205e7b7b5d7c13393b7c9553497854b75c7470b76aeca50cd4a894d7 - - @vub: pybtctool electrum_mpk 484ccb566edb66c65dd0fd2e4d90ef65 - 484e42865b8e9a6ea8262fd1cde666b557393258ed598d842e563ad9e5e6c70a97e387eefdef123c1b8b4eb21fe210c6216ad7cc1e4186fbbba70f0e2c062c25 - - @vub: pybtctool bip32_master_key 21456t243rhgtucyadh3wgyrcubw3grydfbng - xprv9s21ZrQH143K2napkeoHT48gWmoJa89KCQj4nqLfdGybyWHP9Z8jvCGzuEDv4ihCyoed7RFPNbc9NxoSF7cAvH9AaNSvepUaeqbSpJZ4rbT - - @vub: pybtctool bip32_ckd xprv9s21ZrQH143K2napkeoHT48gWmoJa89KCQj4nqLfdGybyWHP9Z8jvCGzuEDv4ihCyoed7RFPNbc9NxoSF7cAvH9AaNSvepUaeqbSpJZ4rbT 0 - xprv9vfzYrpwo7QHFdtrcvsSCTrBESFPUf1g7NRvayy1QkEfUekpDKLfqvHjgypF5w3nAvnwPjtQUNkyywWNkLbiUS95khfHCzJXFkLEdwRepbw - - @vub: pybtctool bip32_privtopub xprv9s21ZrQH143K2napkeoHT48gWmoJa89KCQj4nqLfdGybyWHP9Z8jvCGzuEDv4ihCyoed7RFPNbc9NxoSF7cAvH9AaNSvepUaeqbSpJZ4rbT - xpub661MyMwAqRbcFGfHrgLHpC5R4odnyasAZdefbDkHBcWarJcXh6SzTzbUkWuhnP142ZFdKdAJSuTSaiGDYjvm7bCLmA8DZqksYjJbYmcgrYF - -The -s option lets you read arguments from the command line - - @vub: pybtctool sha256 'some big long brainwallet password' | pybtctool -s privtoaddr | pybtctool -s history - [{'output': u'97f7c7d8ac85e40c255f8a763b6cd9a68f3a94d2e93e8bfa08f977b92e55465e:0', 'value': 50000, 'address': u'1CQLd3bhw4EzaURHbKCwM5YZbUQfA4ReY6'}, {'output': u'4cc806bb04f730c445c60b3e0f4f44b54769a1c196ca37d8d4002135e4abd171:1', 'value': 50000, 'address': u'1CQLd3bhw4EzaURHbKCwM5YZbUQfA4ReY6'}] - @vub: pybtctool random_electrum_seed | pybtctool -s electrum_privkey 0 0 - 593240c2205e7b7b5d7c13393b7c9553497854b75c7470b76aeca50cd4a894d7 - -The -b option lets you read binary data as an argument - - @vub: pybtctool sha256 123 | pybtctool -s changebase 16 256 | pybtctool -b changebase 256 16 - a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae30a - -The -j option lets you read json from the command line (-J to split a json list into multiple arguments) - - @vub: pybtctool unspent 1FxkfJQLJTXpW6QmxGT6oF43ZH959ns8Cq | pybtctool -j select 200000001 | pybtctool -j mksend 1EXoDusjGwvnjZUyKkxZ4UHEf77z6A5S4P:20000 1FxkfJQLJTXpW6QmxGT6oF43ZH959ns8Cq 1000 | pybtctool -s signall 805cd74ca322633372b9bfb857f3be41db0b8de43a3c44353b238c0acff9d523 - 0100000003d5001aae8358ae98cb02c1b6f9859dc1ac3dbc1e9cc88632afeb7b7e3c510a49000000008b4830450221009e03bb6122437767e2ca785535824f4ed13d2ebbb9fa4f9becc6d6f4e1e217dc022064577353c08d8d974250143d920d3b963b463e43bbb90f3371060645c49266b90141048ef80f6bd6b073407a69299c2ba89de48adb59bb9689a5ab040befbbebcfbb15d01b006a6b825121a0d2c546c277acb60f0bd3203bd501b8d67c7dba91f27f47ffffffff1529d655dff6a0f6c9815ee835312fb3ca4df622fde21b6b9097666e9284087d010000008a473044022035dd67d18b575ebd339d05ca6ffa1d27d7549bd993aeaf430985795459fc139402201aaa162cc50181cee493870c9479b1148243a33923cb77be44a73ca554a4e5d60141048ef80f6bd6b073407a69299c2ba89de48adb59bb9689a5ab040befbbebcfbb15d01b006a6b825121a0d2c546c277acb60f0bd3203bd501b8d67c7dba91f27f47ffffffff23d5f9cf0a8c233b35443c3ae48d0bdb41bef357b8bfb972336322a34cd75c80010000008b483045022014daa5c5bbe9b3e5f2539a5cd8e22ce55bc84788f946c5b3643ecac85b4591a9022100a4062074a1df3fa0aea5ef67368d0b1f0eaac520bee6e417c682d83cd04330450141048ef80f6bd6b073407a69299c2ba89de48adb59bb9689a5ab040befbbebcfbb15d01b006a6b825121a0d2c546c277acb60f0bd3203bd501b8d67c7dba91f27f47ffffffff02204e0000000000001976a914946cb2e08075bcbaf157e47bcb67eb2b2339d24288ac5b3c4411000000001976a914a41d15ae657ad3bfd0846771a34d7584c37d54a288ac00000000 - -Fun stuff with json: - - @vub: pybtctool history 1EXoDusjGwvnjZUyKkxZ4UHEf77z6A5S4P | pybtctool -j multiaccess value | pybtctool -j sum - 625216206372 - - @vub: pybtctool history 1EXoDusjGwvnjZUyKkxZ4UHEf77z6A5S4P | pybtctool -j count - 6198 - -### Listing of main commands: - -* privkey_to_pubkey : (privkey) -> pubkey -* privtopub : (privkey) -> pubkey -* pubkey_to_address : (pubkey) -> address -* pubtoaddr : (pubkey) -> address -* privkey_to_address : (privkey) -> address -* privtoaddr : (privkey) -> address - -* add : (key1, key2) -> key1 + key2 (works on privkeys or pubkeys) -* multiply : (pubkey, privkey) -> returns pubkey * privkey - -* ecdsa_sign : (message, privkey) -> sig -* ecdsa_verify : (message, sig, pubkey) -> True/False -* ecdsa_recover : (message, sig) -> pubkey - -* random_key : () -> privkey -* random_electrum_seed : () -> electrum seed - -* electrum_stretch : (seed) -> secret exponent -* electrum_privkey : (seed or secret exponent, i, type) -> privkey -* electrum_mpk : (seed or secret exponent) -> master public key -* electrum_pubkey : (seed or secexp or mpk) -> pubkey - -* bip32_master_key : (seed) -> bip32 master key -* bip32_ckd : (private or public bip32 key, i) -> child key -* bip32_privtopub : (private bip32 key) -> public bip32 key -* bip32_extract_key : (private or public bip32_key) -> privkey or pubkey - -* deserialize : (hex or bin transaction) -> JSON tx -* serialize : (JSON tx) -> hex or bin tx -* mktx : (inputs, outputs) -> tx -* mksend : (inputs, outputs, change_addr, fee) -> tx -* sign : (tx, i, privkey) -> tx with index i signed with privkey -* multisign : (tx, i, script, privkey) -> signature -* apply_multisignatures: (tx, i, script, sigs) -> tx with index i signed with sigs -* scriptaddr : (script) -> P2SH address -* mk_multisig_script : (pubkeys, k, n) -> k-of-n multisig script from pubkeys -* verify_tx_input : (tx, i, script, sig, pub) -> True/False -* tx_hash : (hex or bin tx) -> hash - -* history : (address1, address2, etc) -> outputs to those addresses -* unspent : (address1, address2, etc) -> unspent outputs to those addresses -* fetchtx : (txash) -> tx if present -* pushtx : (hex or bin tx) -> tries to push to blockchain.info/pushtx - -* access : (json list/object, prop) -> desired property of that json object -* multiaccess : (json list, prop) -> like access, but mapped across each list element -* slice : (json list, start, end) -> given slice of the list -* count : (json list) -> number of elements -* sum : (json list) -> sum of all values diff --git a/src/lib/pybitcointools/__init__.py b/src/lib/pybitcointools/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/src/lib/pybitcointools/bitcoin/__init__.py b/src/lib/pybitcointools/bitcoin/__init__.py deleted file mode 100644 index 7d529abc..00000000 --- a/src/lib/pybitcointools/bitcoin/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -from .py2specials import * -from .py3specials import * -from .main import * -from .transaction import * -from .deterministic import * -from .bci import * -from .composite import * -from .stealth import * -from .blocks import * -from .mnemonic import * diff --git a/src/lib/pybitcointools/bitcoin/bci.py b/src/lib/pybitcointools/bitcoin/bci.py deleted file mode 100644 index 79a2c401..00000000 --- a/src/lib/pybitcointools/bitcoin/bci.py +++ /dev/null @@ -1,528 +0,0 @@ -#!/usr/bin/python -import json, re -import random -import sys -try: - from urllib.request import build_opener -except: - from urllib2 import build_opener - - -# Makes a request to a given URL (first arg) and optional params (second arg) -def make_request(*args): - opener = build_opener() - opener.addheaders = [('User-agent', - 'Mozilla/5.0'+str(random.randrange(1000000)))] - try: - return opener.open(*args).read().strip() - except Exception as e: - try: - p = e.read().strip() - except: - p = e - raise Exception(p) - - -def is_testnet(inp): - '''Checks if inp is a testnet address or if UTXO is a known testnet TxID''' - if isinstance(inp, (list, tuple)) and len(inp) >= 1: - return any([is_testnet(x) for x in inp]) - elif not isinstance(inp, basestring): # sanity check - raise TypeError("Input must be str/unicode, not type %s" % str(type(inp))) - - if not inp or (inp.lower() in ("btc", "testnet")): - pass - - ## ADDRESSES - if inp[0] in "123mn": - if re.match("^[2mn][a-km-zA-HJ-NP-Z0-9]{26,33}$", inp): - return True - elif re.match("^[13][a-km-zA-HJ-NP-Z0-9]{26,33}$", inp): - return False - else: - #sys.stderr.write("Bad address format %s") - return None - - ## TXID - elif re.match('^[0-9a-fA-F]{64}$', inp): - base_url = "http://api.blockcypher.com/v1/btc/{network}/txs/{txid}?includesHex=false" - try: - # try testnet fetchtx - make_request(base_url.format(network="test3", txid=inp.lower())) - return True - except: - # try mainnet fetchtx - make_request(base_url.format(network="main", txid=inp.lower())) - return False - sys.stderr.write("TxID %s has no match for testnet or mainnet (Bad TxID)") - return None - else: - raise TypeError("{0} is unknown input".format(inp)) - - -def set_network(*args): - '''Decides if args for unspent/fetchtx/pushtx are mainnet or testnet''' - r = [] - for arg in args: - if not arg: - pass - if isinstance(arg, basestring): - r.append(is_testnet(arg)) - elif isinstance(arg, (list, tuple)): - return set_network(*arg) - if any(r) and not all(r): - raise Exception("Mixed Testnet/Mainnet queries") - return "testnet" if any(r) else "btc" - - -def parse_addr_args(*args): - # Valid input formats: unspent([addr1, addr2, addr3]) - # unspent([addr1, addr2, addr3], network) - # unspent(addr1, addr2, addr3) - # unspent(addr1, addr2, addr3, network) - addr_args = args - network = "btc" - if len(args) == 0: - return [], 'btc' - if len(args) >= 1 and args[-1] in ('testnet', 'btc'): - network = args[-1] - addr_args = args[:-1] - if len(addr_args) == 1 and isinstance(addr_args, list): - network = set_network(*addr_args[0]) - addr_args = addr_args[0] - if addr_args and isinstance(addr_args, tuple) and isinstance(addr_args[0], list): - addr_args = addr_args[0] - network = set_network(addr_args) - return network, addr_args - - -# Gets the unspent outputs of one or more addresses -def bci_unspent(*args): - network, addrs = parse_addr_args(*args) - u = [] - for a in addrs: - try: - data = make_request('https://blockchain.info/unspent?active='+a) - except Exception as e: - if str(e) == 'No free outputs to spend': - continue - else: - raise Exception(e) - try: - jsonobj = json.loads(data.decode("utf-8")) - for o in jsonobj["unspent_outputs"]: - h = o['tx_hash'].decode('hex')[::-1].encode('hex') - u.append({ - "output": h+':'+str(o['tx_output_n']), - "value": o['value'] - }) - except: - raise Exception("Failed to decode data: "+data) - return u - - -def blockr_unspent(*args): - # Valid input formats: blockr_unspent([addr1, addr2,addr3]) - # blockr_unspent(addr1, addr2, addr3) - # blockr_unspent([addr1, addr2, addr3], network) - # blockr_unspent(addr1, addr2, addr3, network) - # Where network is 'btc' or 'testnet' - network, addr_args = parse_addr_args(*args) - - if network == 'testnet': - blockr_url = 'http://tbtc.blockr.io/api/v1/address/unspent/' - elif network == 'btc': - blockr_url = 'http://btc.blockr.io/api/v1/address/unspent/' - else: - raise Exception( - 'Unsupported network {0} for blockr_unspent'.format(network)) - - if len(addr_args) == 0: - return [] - elif isinstance(addr_args[0], list): - addrs = addr_args[0] - else: - addrs = addr_args - res = make_request(blockr_url+','.join(addrs)) - data = json.loads(res.decode("utf-8"))['data'] - o = [] - if 'unspent' in data: - data = [data] - for dat in data: - for u in dat['unspent']: - o.append({ - "output": u['tx']+':'+str(u['n']), - "value": int(u['amount'].replace('.', '')) - }) - return o - - -def helloblock_unspent(*args): - addrs, network = parse_addr_args(*args) - if network == 'testnet': - url = 'https://testnet.helloblock.io/v1/addresses/%s/unspents?limit=500&offset=%s' - elif network == 'btc': - url = 'https://mainnet.helloblock.io/v1/addresses/%s/unspents?limit=500&offset=%s' - o = [] - for addr in addrs: - for offset in xrange(0, 10**9, 500): - res = make_request(url % (addr, offset)) - data = json.loads(res.decode("utf-8"))["data"] - if not len(data["unspents"]): - break - elif offset: - sys.stderr.write("Getting more unspents: %d\n" % offset) - for dat in data["unspents"]: - o.append({ - "output": dat["txHash"]+':'+str(dat["index"]), - "value": dat["value"], - }) - return o - - -unspent_getters = { - 'bci': bci_unspent, - 'blockr': blockr_unspent, - 'helloblock': helloblock_unspent -} - - -def unspent(*args, **kwargs): - f = unspent_getters.get(kwargs.get('source', ''), bci_unspent) - return f(*args) - - -# Gets the transaction output history of a given set of addresses, -# including whether or not they have been spent -def history(*args): - # Valid input formats: history([addr1, addr2,addr3]) - # history(addr1, addr2, addr3) - if len(args) == 0: - return [] - elif isinstance(args[0], list): - addrs = args[0] - else: - addrs = args - - txs = [] - for addr in addrs: - offset = 0 - while 1: - gathered = False - while not gathered: - try: - data = make_request( - 'https://blockchain.info/address/%s?format=json&offset=%s' % - (addr, offset)) - gathered = True - except Exception as e: - try: - sys.stderr.write(e.read().strip()) - except: - sys.stderr.write(str(e)) - gathered = False - try: - jsonobj = json.loads(data.decode("utf-8")) - except: - raise Exception("Failed to decode data: "+data) - txs.extend(jsonobj["txs"]) - if len(jsonobj["txs"]) < 50: - break - offset += 50 - sys.stderr.write("Fetching more transactions... "+str(offset)+'\n') - outs = {} - for tx in txs: - for o in tx["out"]: - if o.get('addr', None) in addrs: - key = str(tx["tx_index"])+':'+str(o["n"]) - outs[key] = { - "address": o["addr"], - "value": o["value"], - "output": tx["hash"]+':'+str(o["n"]), - "block_height": tx.get("block_height", None) - } - for tx in txs: - for i, inp in enumerate(tx["inputs"]): - if "prev_out" in inp: - if inp["prev_out"].get("addr", None) in addrs: - key = str(inp["prev_out"]["tx_index"]) + \ - ':'+str(inp["prev_out"]["n"]) - if outs.get(key): - outs[key]["spend"] = tx["hash"]+':'+str(i) - return [outs[k] for k in outs] - - -# Pushes a transaction to the network using https://blockchain.info/pushtx -def bci_pushtx(tx): - if not re.match('^[0-9a-fA-F]*$', tx): - tx = tx.encode('hex') - return make_request('https://blockchain.info/pushtx', 'tx='+tx) - - -def eligius_pushtx(tx): - if not re.match('^[0-9a-fA-F]*$', tx): - tx = tx.encode('hex') - s = make_request( - 'http://eligius.st/~wizkid057/newstats/pushtxn.php', - 'transaction='+tx+'&send=Push') - strings = re.findall('string[^"]*"[^"]*"', s) - for string in strings: - quote = re.findall('"[^"]*"', string)[0] - if len(quote) >= 5: - return quote[1:-1] - - -def blockr_pushtx(tx, network='btc'): - if network == 'testnet': - blockr_url = 'http://tbtc.blockr.io/api/v1/tx/push' - elif network == 'btc': - blockr_url = 'http://btc.blockr.io/api/v1/tx/push' - else: - raise Exception( - 'Unsupported network {0} for blockr_pushtx'.format(network)) - - if not re.match('^[0-9a-fA-F]*$', tx): - tx = tx.encode('hex') - return make_request(blockr_url, '{"hex":"%s"}' % tx) - - -def helloblock_pushtx(tx): - if not re.match('^[0-9a-fA-F]*$', tx): - tx = tx.encode('hex') - return make_request('https://mainnet.helloblock.io/v1/transactions', - 'rawTxHex='+tx) - -pushtx_getters = { - 'bci': bci_pushtx, - 'blockr': blockr_pushtx, - 'helloblock': helloblock_pushtx -} - - -def pushtx(*args, **kwargs): - f = pushtx_getters.get(kwargs.get('source', ''), bci_pushtx) - return f(*args) - - -def last_block_height(network='btc'): - if network == 'testnet': - data = make_request('http://tbtc.blockr.io/api/v1/block/info/last') - jsonobj = json.loads(data.decode("utf-8")) - return jsonobj["data"]["nb"] - - data = make_request('https://blockchain.info/latestblock') - jsonobj = json.loads(data.decode("utf-8")) - return jsonobj["height"] - - -# Gets a specific transaction -def bci_fetchtx(txhash): - if isinstance(txhash, list): - return [bci_fetchtx(h) for h in txhash] - if not re.match('^[0-9a-fA-F]*$', txhash): - txhash = txhash.encode('hex') - data = make_request('https://blockchain.info/rawtx/'+txhash+'?format=hex') - return data - - -def blockr_fetchtx(txhash, network='btc'): - if network == 'testnet': - blockr_url = 'http://tbtc.blockr.io/api/v1/tx/raw/' - elif network == 'btc': - blockr_url = 'http://btc.blockr.io/api/v1/tx/raw/' - else: - raise Exception( - 'Unsupported network {0} for blockr_fetchtx'.format(network)) - if isinstance(txhash, list): - txhash = ','.join([x.encode('hex') if not re.match('^[0-9a-fA-F]*$', x) - else x for x in txhash]) - jsondata = json.loads(make_request(blockr_url+txhash).decode("utf-8")) - return [d['tx']['hex'] for d in jsondata['data']] - else: - if not re.match('^[0-9a-fA-F]*$', txhash): - txhash = txhash.encode('hex') - jsondata = json.loads(make_request(blockr_url+txhash).decode("utf-8")) - return jsondata['data']['tx']['hex'] - - -def helloblock_fetchtx(txhash, network='btc'): - if isinstance(txhash, list): - return [helloblock_fetchtx(h) for h in txhash] - if not re.match('^[0-9a-fA-F]*$', txhash): - txhash = txhash.encode('hex') - if network == 'testnet': - url = 'https://testnet.helloblock.io/v1/transactions/' - elif network == 'btc': - url = 'https://mainnet.helloblock.io/v1/transactions/' - else: - raise Exception( - 'Unsupported network {0} for helloblock_fetchtx'.format(network)) - data = json.loads(make_request(url + txhash).decode("utf-8"))["data"]["transaction"] - o = { - "locktime": data["locktime"], - "version": data["version"], - "ins": [], - "outs": [] - } - for inp in data["inputs"]: - o["ins"].append({ - "script": inp["scriptSig"], - "outpoint": { - "index": inp["prevTxoutIndex"], - "hash": inp["prevTxHash"], - }, - "sequence": 4294967295 - }) - for outp in data["outputs"]: - o["outs"].append({ - "value": outp["value"], - "script": outp["scriptPubKey"] - }) - from .transaction import serialize - from .transaction import txhash as TXHASH - tx = serialize(o) - assert TXHASH(tx) == txhash - return tx - - -fetchtx_getters = { - 'bci': bci_fetchtx, - 'blockr': blockr_fetchtx, - 'helloblock': helloblock_fetchtx -} - - -def fetchtx(*args, **kwargs): - f = fetchtx_getters.get(kwargs.get('source', ''), bci_fetchtx) - return f(*args) - - -def firstbits(address): - if len(address) >= 25: - return make_request('https://blockchain.info/q/getfirstbits/'+address) - else: - return make_request( - 'https://blockchain.info/q/resolvefirstbits/'+address) - - -def get_block_at_height(height): - j = json.loads(make_request("https://blockchain.info/block-height/" + - str(height)+"?format=json").decode("utf-8")) - for b in j['blocks']: - if b['main_chain'] is True: - return b - raise Exception("Block at this height not found") - - -def _get_block(inp): - if len(str(inp)) < 64: - return get_block_at_height(inp) - else: - return json.loads(make_request( - 'https://blockchain.info/rawblock/'+inp).decode("utf-8")) - - -def bci_get_block_header_data(inp): - j = _get_block(inp) - return { - 'version': j['ver'], - 'hash': j['hash'], - 'prevhash': j['prev_block'], - 'timestamp': j['time'], - 'merkle_root': j['mrkl_root'], - 'bits': j['bits'], - 'nonce': j['nonce'], - } - -def blockr_get_block_header_data(height, network='btc'): - if network == 'testnet': - blockr_url = "http://tbtc.blockr.io/api/v1/block/raw/" - elif network == 'btc': - blockr_url = "http://btc.blockr.io/api/v1/block/raw/" - else: - raise Exception( - 'Unsupported network {0} for blockr_get_block_header_data'.format(network)) - - k = json.loads(make_request(blockr_url + str(height)).decode("utf-8")) - j = k['data'] - return { - 'version': j['version'], - 'hash': j['hash'], - 'prevhash': j['previousblockhash'], - 'timestamp': j['time'], - 'merkle_root': j['merkleroot'], - 'bits': int(j['bits'], 16), - 'nonce': j['nonce'], - } - - -def get_block_timestamp(height, network='btc'): - if network == 'testnet': - blockr_url = "http://tbtc.blockr.io/api/v1/block/info/" - elif network == 'btc': - blockr_url = "http://btc.blockr.io/api/v1/block/info/" - else: - raise Exception( - 'Unsupported network {0} for get_block_timestamp'.format(network)) - - import time, calendar - if isinstance(height, list): - k = json.loads(make_request(blockr_url + ','.join([str(x) for x in height])).decode("utf-8")) - o = {x['nb']: calendar.timegm(time.strptime(x['time_utc'], - "%Y-%m-%dT%H:%M:%SZ")) for x in k['data']} - return [o[x] for x in height] - else: - k = json.loads(make_request(blockr_url + str(height)).decode("utf-8")) - j = k['data']['time_utc'] - return calendar.timegm(time.strptime(j, "%Y-%m-%dT%H:%M:%SZ")) - - -block_header_data_getters = { - 'bci': bci_get_block_header_data, - 'blockr': blockr_get_block_header_data -} - - -def get_block_header_data(inp, **kwargs): - f = block_header_data_getters.get(kwargs.get('source', ''), - bci_get_block_header_data) - return f(inp, **kwargs) - - -def get_txs_in_block(inp): - j = _get_block(inp) - hashes = [t['hash'] for t in j['tx']] - return hashes - - -def get_block_height(txhash): - j = json.loads(make_request('https://blockchain.info/rawtx/'+txhash).decode("utf-8")) - return j['block_height'] - -# fromAddr, toAddr, 12345, changeAddress -def get_tx_composite(inputs, outputs, output_value, change_address=None, network=None): - """mktx using blockcypher API""" - inputs = [inputs] if not isinstance(inputs, list) else inputs - outputs = [outputs] if not isinstance(outputs, list) else outputs - network = set_network(change_address or inputs) if not network else network.lower() - url = "http://api.blockcypher.com/v1/btc/{network}/txs/new?includeToSignTx=true".format( - network=('test3' if network=='testnet' else 'main')) - is_address = lambda a: bool(re.match("^[123mn][a-km-zA-HJ-NP-Z0-9]{26,33}$", a)) - if any([is_address(x) for x in inputs]): - inputs_type = 'addresses' # also accepts UTXOs, only addresses supported presently - if any([is_address(x) for x in outputs]): - outputs_type = 'addresses' # TODO: add UTXO support - data = { - 'inputs': [{inputs_type: inputs}], - 'confirmations': 0, - 'preference': 'high', - 'outputs': [{outputs_type: outputs, "value": output_value}] - } - if change_address: - data["change_address"] = change_address # - jdata = json.loads(make_request(url, data)) - hash, txh = jdata.get("tosign")[0], jdata.get("tosign_tx")[0] - assert bin_dbl_sha256(txh.decode('hex')).encode('hex') == hash, "checksum mismatch %s" % hash - return txh.encode("utf-8") - -blockcypher_mktx = get_tx_composite diff --git a/src/lib/pybitcointools/bitcoin/blocks.py b/src/lib/pybitcointools/bitcoin/blocks.py deleted file mode 100644 index 9df6b35c..00000000 --- a/src/lib/pybitcointools/bitcoin/blocks.py +++ /dev/null @@ -1,50 +0,0 @@ -from .main import * - - -def serialize_header(inp): - o = encode(inp['version'], 256, 4)[::-1] + \ - inp['prevhash'].decode('hex')[::-1] + \ - inp['merkle_root'].decode('hex')[::-1] + \ - encode(inp['timestamp'], 256, 4)[::-1] + \ - encode(inp['bits'], 256, 4)[::-1] + \ - encode(inp['nonce'], 256, 4)[::-1] - h = bin_sha256(bin_sha256(o))[::-1].encode('hex') - assert h == inp['hash'], (sha256(o), inp['hash']) - return o.encode('hex') - - -def deserialize_header(inp): - inp = inp.decode('hex') - return { - "version": decode(inp[:4][::-1], 256), - "prevhash": inp[4:36][::-1].encode('hex'), - "merkle_root": inp[36:68][::-1].encode('hex'), - "timestamp": decode(inp[68:72][::-1], 256), - "bits": decode(inp[72:76][::-1], 256), - "nonce": decode(inp[76:80][::-1], 256), - "hash": bin_sha256(bin_sha256(inp))[::-1].encode('hex') - } - - -def mk_merkle_proof(header, hashes, index): - nodes = [h.decode('hex')[::-1] for h in hashes] - if len(nodes) % 2 and len(nodes) > 2: - nodes.append(nodes[-1]) - layers = [nodes] - while len(nodes) > 1: - newnodes = [] - for i in range(0, len(nodes) - 1, 2): - newnodes.append(bin_sha256(bin_sha256(nodes[i] + nodes[i+1]))) - if len(newnodes) % 2 and len(newnodes) > 2: - newnodes.append(newnodes[-1]) - nodes = newnodes - layers.append(nodes) - # Sanity check, make sure merkle root is valid - assert nodes[0][::-1].encode('hex') == header['merkle_root'] - merkle_siblings = \ - [layers[i][(index >> i) ^ 1] for i in range(len(layers)-1)] - return { - "hash": hashes[index], - "siblings": [x[::-1].encode('hex') for x in merkle_siblings], - "header": header - } diff --git a/src/lib/pybitcointools/bitcoin/composite.py b/src/lib/pybitcointools/bitcoin/composite.py deleted file mode 100644 index e5d50492..00000000 --- a/src/lib/pybitcointools/bitcoin/composite.py +++ /dev/null @@ -1,128 +0,0 @@ -from .main import * -from .transaction import * -from .bci import * -from .deterministic import * -from .blocks import * - - -# Takes privkey, address, value (satoshis), fee (satoshis) -def send(frm, to, value, fee=10000, **kwargs): - return sendmultitx(frm, to + ":" + str(value), fee, **kwargs) - - -# Takes privkey, "address1:value1,address2:value2" (satoshis), fee (satoshis) -def sendmultitx(frm, *args, **kwargs): - tv, fee = args[:-1], int(args[-1]) - outs = [] - outvalue = 0 - for a in tv: - outs.append(a) - outvalue += int(a.split(":")[1]) - - u = unspent(privtoaddr(frm), **kwargs) - u2 = select(u, int(outvalue)+int(fee)) - argz = u2 + outs + [privtoaddr(frm), fee] - tx = mksend(*argz) - tx2 = signall(tx, frm) - return pushtx(tx2, **kwargs) - - -# Takes address, address, value (satoshis), fee(satoshis) -def preparetx(frm, to, value, fee=10000, **kwargs): - tovalues = to + ":" + str(value) - return preparemultitx(frm, tovalues, fee, **kwargs) - - -# Takes address, address:value, address:value ... (satoshis), fee(satoshis) -def preparemultitx(frm, *args, **kwargs): - tv, fee = args[:-1], int(args[-1]) - outs = [] - outvalue = 0 - for a in tv: - outs.append(a) - outvalue += int(a.split(":")[1]) - - u = unspent(frm, **kwargs) - u2 = select(u, int(outvalue)+int(fee)) - argz = u2 + outs + [frm, fee] - return mksend(*argz) - - -# BIP32 hierarchical deterministic multisig script -def bip32_hdm_script(*args): - if len(args) == 3: - keys, req, path = args - else: - i, keys, path = 0, [], [] - while len(args[i]) > 40: - keys.append(args[i]) - i += 1 - req = int(args[i]) - path = map(int, args[i+1:]) - pubs = sorted(map(lambda x: bip32_descend(x, path), keys)) - return mk_multisig_script(pubs, req) - - -# BIP32 hierarchical deterministic multisig address -def bip32_hdm_addr(*args): - return scriptaddr(bip32_hdm_script(*args)) - - -# Setup a coinvault transaction -def setup_coinvault_tx(tx, script): - txobj = deserialize(tx) - N = deserialize_script(script)[-2] - for inp in txobj["ins"]: - inp["script"] = serialize_script([None] * (N+1) + [script]) - return serialize(txobj) - - -# Sign a coinvault transaction -def sign_coinvault_tx(tx, priv): - pub = privtopub(priv) - txobj = deserialize(tx) - subscript = deserialize_script(txobj['ins'][0]['script']) - oscript = deserialize_script(subscript[-1]) - k, pubs = oscript[0], oscript[1:-2] - for j in range(len(txobj['ins'])): - scr = deserialize_script(txobj['ins'][j]['script']) - for i, p in enumerate(pubs): - if p == pub: - scr[i+1] = multisign(tx, j, subscript[-1], priv) - if len(filter(lambda x: x, scr[1:-1])) >= k: - scr = [None] + filter(lambda x: x, scr[1:-1])[:k] + [scr[-1]] - txobj['ins'][j]['script'] = serialize_script(scr) - return serialize(txobj) - - -# Inspects a transaction -def inspect(tx, **kwargs): - d = deserialize(tx) - isum = 0 - ins = {} - for _in in d['ins']: - h = _in['outpoint']['hash'] - i = _in['outpoint']['index'] - prevout = deserialize(fetchtx(h, **kwargs))['outs'][i] - isum += prevout['value'] - a = script_to_address(prevout['script']) - ins[a] = ins.get(a, 0) + prevout['value'] - outs = [] - osum = 0 - for _out in d['outs']: - outs.append({'address': script_to_address(_out['script']), - 'value': _out['value']}) - osum += _out['value'] - return { - 'fee': isum - osum, - 'outs': outs, - 'ins': ins - } - - -def merkle_prove(txhash): - blocknum = str(get_block_height(txhash)) - header = get_block_header_data(blocknum) - hashes = get_txs_in_block(blocknum) - i = hashes.index(txhash) - return mk_merkle_proof(header, hashes, i) diff --git a/src/lib/pybitcointools/bitcoin/deterministic.py b/src/lib/pybitcointools/bitcoin/deterministic.py deleted file mode 100644 index b2bdbbc6..00000000 --- a/src/lib/pybitcointools/bitcoin/deterministic.py +++ /dev/null @@ -1,199 +0,0 @@ -from .main import * -import hmac -import hashlib -from binascii import hexlify -# Electrum wallets - - -def electrum_stretch(seed): - return slowsha(seed) - -# Accepts seed or stretched seed, returns master public key - - -def electrum_mpk(seed): - if len(seed) == 32: - seed = electrum_stretch(seed) - return privkey_to_pubkey(seed)[2:] - -# Accepts (seed or stretched seed), index and secondary index -# (conventionally 0 for ordinary addresses, 1 for change) , returns privkey - - -def electrum_privkey(seed, n, for_change=0): - if len(seed) == 32: - seed = electrum_stretch(seed) - mpk = electrum_mpk(seed) - offset = dbl_sha256(from_int_representation_to_bytes(n)+b':'+from_int_representation_to_bytes(for_change)+b':'+binascii.unhexlify(mpk)) - return add_privkeys(seed, offset) - -# Accepts (seed or stretched seed or master pubkey), index and secondary index -# (conventionally 0 for ordinary addresses, 1 for change) , returns pubkey - - -def electrum_pubkey(masterkey, n, for_change=0): - if len(masterkey) == 32: - mpk = electrum_mpk(electrum_stretch(masterkey)) - elif len(masterkey) == 64: - mpk = electrum_mpk(masterkey) - else: - mpk = masterkey - bin_mpk = encode_pubkey(mpk, 'bin_electrum') - offset = bin_dbl_sha256(from_int_representation_to_bytes(n)+b':'+from_int_representation_to_bytes(for_change)+b':'+bin_mpk) - return add_pubkeys('04'+mpk, privtopub(offset)) - -# seed/stretched seed/pubkey -> address (convenience method) - - -def electrum_address(masterkey, n, for_change=0, version=0): - return pubkey_to_address(electrum_pubkey(masterkey, n, for_change), version) - -# Given a master public key, a private key from that wallet and its index, -# cracks the secret exponent which can be used to generate all other private -# keys in the wallet - - -def crack_electrum_wallet(mpk, pk, n, for_change=0): - bin_mpk = encode_pubkey(mpk, 'bin_electrum') - offset = dbl_sha256(str(n)+':'+str(for_change)+':'+bin_mpk) - return subtract_privkeys(pk, offset) - -# Below code ASSUMES binary inputs and compressed pubkeys -MAINNET_PRIVATE = b'\x04\x88\xAD\xE4' -MAINNET_PUBLIC = b'\x04\x88\xB2\x1E' -TESTNET_PRIVATE = b'\x04\x35\x83\x94' -TESTNET_PUBLIC = b'\x04\x35\x87\xCF' -PRIVATE = [MAINNET_PRIVATE, TESTNET_PRIVATE] -PUBLIC = [MAINNET_PUBLIC, TESTNET_PUBLIC] - -# BIP32 child key derivation - - -def raw_bip32_ckd(rawtuple, i): - vbytes, depth, fingerprint, oldi, chaincode, key = rawtuple - i = int(i) - - if vbytes in PRIVATE: - priv = key - pub = privtopub(key) - else: - pub = key - - if i >= 2**31: - if vbytes in PUBLIC: - raise Exception("Can't do private derivation on public key!") - I = hmac.new(chaincode, b'\x00'+priv[:32]+encode(i, 256, 4), hashlib.sha512).digest() - else: - I = hmac.new(chaincode, pub+encode(i, 256, 4), hashlib.sha512).digest() - - if vbytes in PRIVATE: - newkey = add_privkeys(I[:32]+B'\x01', priv) - fingerprint = bin_hash160(privtopub(key))[:4] - if vbytes in PUBLIC: - newkey = add_pubkeys(compress(privtopub(I[:32])), key) - fingerprint = bin_hash160(key)[:4] - - return (vbytes, depth + 1, fingerprint, i, I[32:], newkey) - - -def bip32_serialize(rawtuple): - vbytes, depth, fingerprint, i, chaincode, key = rawtuple - i = encode(i, 256, 4) - chaincode = encode(hash_to_int(chaincode), 256, 32) - keydata = b'\x00'+key[:-1] if vbytes in PRIVATE else key - bindata = vbytes + from_int_to_byte(depth % 256) + fingerprint + i + chaincode + keydata - return changebase(bindata+bin_dbl_sha256(bindata)[:4], 256, 58) - - -def bip32_deserialize(data): - dbin = changebase(data, 58, 256) - if bin_dbl_sha256(dbin[:-4])[:4] != dbin[-4:]: - raise Exception("Invalid checksum") - vbytes = dbin[0:4] - depth = from_byte_to_int(dbin[4]) - fingerprint = dbin[5:9] - i = decode(dbin[9:13], 256) - chaincode = dbin[13:45] - key = dbin[46:78]+b'\x01' if vbytes in PRIVATE else dbin[45:78] - return (vbytes, depth, fingerprint, i, chaincode, key) - - -def raw_bip32_privtopub(rawtuple): - vbytes, depth, fingerprint, i, chaincode, key = rawtuple - newvbytes = MAINNET_PUBLIC if vbytes == MAINNET_PRIVATE else TESTNET_PUBLIC - return (newvbytes, depth, fingerprint, i, chaincode, privtopub(key)) - - -def bip32_privtopub(data): - return bip32_serialize(raw_bip32_privtopub(bip32_deserialize(data))) - - -def bip32_ckd(data, i): - return bip32_serialize(raw_bip32_ckd(bip32_deserialize(data), i)) - - -def bip32_master_key(seed, vbytes=MAINNET_PRIVATE): - I = hmac.new(from_string_to_bytes("Bitcoin seed"), seed, hashlib.sha512).digest() - return bip32_serialize((vbytes, 0, b'\x00'*4, 0, I[32:], I[:32]+b'\x01')) - - -def bip32_bin_extract_key(data): - return bip32_deserialize(data)[-1] - - -def bip32_extract_key(data): - return safe_hexlify(bip32_deserialize(data)[-1]) - -# Exploits the same vulnerability as above in Electrum wallets -# Takes a BIP32 pubkey and one of the child privkeys of its corresponding -# privkey and returns the BIP32 privkey associated with that pubkey - - -def raw_crack_bip32_privkey(parent_pub, priv): - vbytes, depth, fingerprint, i, chaincode, key = priv - pvbytes, pdepth, pfingerprint, pi, pchaincode, pkey = parent_pub - i = int(i) - - if i >= 2**31: - raise Exception("Can't crack private derivation!") - - I = hmac.new(pchaincode, pkey+encode(i, 256, 4), hashlib.sha512).digest() - - pprivkey = subtract_privkeys(key, I[:32]+b'\x01') - - newvbytes = MAINNET_PRIVATE if vbytes == MAINNET_PUBLIC else TESTNET_PRIVATE - return (newvbytes, pdepth, pfingerprint, pi, pchaincode, pprivkey) - - -def crack_bip32_privkey(parent_pub, priv): - dsppub = bip32_deserialize(parent_pub) - dspriv = bip32_deserialize(priv) - return bip32_serialize(raw_crack_bip32_privkey(dsppub, dspriv)) - - -def coinvault_pub_to_bip32(*args): - if len(args) == 1: - args = args[0].split(' ') - vals = map(int, args[34:]) - I1 = ''.join(map(chr, vals[:33])) - I2 = ''.join(map(chr, vals[35:67])) - return bip32_serialize((MAINNET_PUBLIC, 0, b'\x00'*4, 0, I2, I1)) - - -def coinvault_priv_to_bip32(*args): - if len(args) == 1: - args = args[0].split(' ') - vals = map(int, args[34:]) - I2 = ''.join(map(chr, vals[35:67])) - I3 = ''.join(map(chr, vals[72:104])) - return bip32_serialize((MAINNET_PRIVATE, 0, b'\x00'*4, 0, I2, I3+b'\x01')) - - -def bip32_descend(*args): - if len(args) == 2 and isinstance(args[1], list): - key, path = args - else: - key, path = args[0], map(int, args[1:]) - for p in path: - key = bip32_ckd(key, p) - return bip32_extract_key(key) diff --git a/src/lib/pybitcointools/bitcoin/english.txt b/src/lib/pybitcointools/bitcoin/english.txt deleted file mode 100644 index 942040ed..00000000 --- a/src/lib/pybitcointools/bitcoin/english.txt +++ /dev/null @@ -1,2048 +0,0 @@ -abandon -ability -able -about -above -absent -absorb -abstract -absurd -abuse -access -accident -account -accuse -achieve -acid -acoustic -acquire -across -act -action -actor -actress -actual -adapt -add -addict -address -adjust -admit -adult -advance -advice -aerobic -affair -afford -afraid -again -age -agent -agree -ahead -aim -air -airport -aisle -alarm -album -alcohol -alert -alien -all -alley -allow -almost -alone -alpha -already -also -alter -always -amateur -amazing -among -amount -amused -analyst -anchor -ancient -anger -angle -angry -animal -ankle -announce -annual -another -answer -antenna -antique -anxiety -any -apart -apology -appear -apple -approve -april -arch -arctic -area -arena -argue -arm -armed -armor -army -around -arrange -arrest -arrive -arrow -art -artefact -artist -artwork -ask -aspect -assault -asset -assist -assume -asthma -athlete -atom -attack -attend -attitude -attract -auction -audit -august -aunt -author -auto -autumn -average -avocado -avoid -awake -aware -away -awesome -awful -awkward -axis -baby -bachelor -bacon -badge -bag -balance -balcony -ball -bamboo -banana -banner -bar -barely -bargain -barrel -base -basic -basket -battle -beach -bean -beauty -because -become -beef -before -begin -behave -behind -believe -below -belt -bench -benefit -best -betray -better -between -beyond -bicycle -bid -bike -bind -biology -bird -birth -bitter -black -blade -blame -blanket -blast -bleak -bless -blind -blood -blossom -blouse -blue -blur -blush -board -boat -body -boil -bomb -bone -bonus -book -boost -border -boring -borrow -boss -bottom -bounce -box -boy -bracket -brain -brand -brass -brave -bread -breeze -brick -bridge -brief -bright -bring -brisk -broccoli -broken -bronze -broom -brother -brown -brush -bubble -buddy -budget -buffalo -build -bulb -bulk -bullet -bundle -bunker -burden -burger -burst -bus -business -busy -butter -buyer -buzz -cabbage -cabin -cable -cactus -cage -cake -call -calm -camera -camp -can -canal -cancel -candy -cannon -canoe -canvas -canyon -capable -capital -captain -car -carbon -card -cargo -carpet -carry -cart -case -cash -casino -castle -casual -cat -catalog -catch -category -cattle -caught -cause -caution -cave -ceiling -celery -cement -census -century -cereal -certain -chair -chalk -champion -change -chaos -chapter -charge -chase -chat -cheap -check -cheese -chef -cherry -chest -chicken -chief -child -chimney -choice -choose -chronic -chuckle -chunk -churn -cigar -cinnamon -circle -citizen -city -civil -claim -clap -clarify -claw -clay -clean -clerk -clever -click -client -cliff -climb -clinic -clip -clock -clog -close -cloth -cloud -clown -club -clump -cluster -clutch -coach -coast -coconut -code -coffee -coil -coin -collect -color -column -combine -come -comfort -comic -common -company -concert -conduct -confirm -congress -connect -consider -control -convince -cook -cool -copper -copy -coral -core -corn -correct -cost -cotton -couch -country -couple -course -cousin -cover -coyote -crack -cradle -craft -cram -crane -crash -crater -crawl -crazy -cream -credit -creek -crew -cricket -crime -crisp -critic -crop -cross -crouch -crowd -crucial -cruel -cruise -crumble -crunch -crush -cry -crystal -cube -culture -cup -cupboard -curious -current -curtain -curve -cushion -custom -cute -cycle -dad -damage -damp -dance -danger -daring -dash -daughter -dawn -day -deal -debate -debris -decade -december -decide -decline -decorate -decrease -deer -defense -define -defy -degree -delay -deliver -demand -demise -denial -dentist -deny -depart -depend -deposit -depth -deputy -derive -describe -desert -design -desk -despair -destroy -detail -detect -develop -device -devote -diagram -dial -diamond -diary -dice -diesel -diet -differ -digital -dignity -dilemma -dinner -dinosaur -direct -dirt -disagree -discover -disease -dish -dismiss -disorder -display -distance -divert -divide -divorce -dizzy -doctor -document -dog -doll -dolphin -domain -donate -donkey -donor -door -dose -double -dove -draft -dragon -drama -drastic -draw -dream -dress -drift -drill -drink -drip -drive -drop -drum -dry -duck -dumb -dune -during -dust -dutch -duty -dwarf -dynamic -eager -eagle -early -earn -earth -easily -east -easy -echo -ecology -economy -edge -edit -educate -effort -egg -eight -either -elbow -elder -electric -elegant -element -elephant -elevator -elite -else -embark -embody -embrace -emerge -emotion -employ -empower -empty -enable -enact -end -endless -endorse -enemy -energy -enforce -engage -engine -enhance -enjoy -enlist -enough -enrich -enroll -ensure -enter -entire -entry -envelope -episode -equal -equip -era -erase -erode -erosion -error -erupt -escape -essay -essence -estate -eternal -ethics -evidence -evil -evoke -evolve -exact -example -excess -exchange -excite -exclude -excuse -execute -exercise -exhaust -exhibit -exile -exist -exit -exotic -expand -expect -expire -explain -expose -express -extend -extra -eye -eyebrow -fabric -face -faculty -fade -faint -faith -fall -false -fame -family -famous -fan -fancy -fantasy -farm -fashion -fat -fatal -father -fatigue -fault -favorite -feature -february -federal -fee -feed -feel -female -fence -festival -fetch -fever -few -fiber -fiction -field -figure -file -film -filter -final -find -fine -finger -finish -fire -firm -first -fiscal -fish -fit -fitness -fix -flag -flame -flash -flat -flavor -flee -flight -flip -float -flock -floor -flower -fluid -flush -fly -foam -focus -fog -foil -fold -follow -food -foot -force -forest -forget -fork -fortune -forum -forward -fossil -foster -found -fox -fragile -frame -frequent -fresh -friend -fringe -frog -front -frost -frown -frozen -fruit -fuel -fun -funny -furnace -fury -future -gadget -gain -galaxy -gallery -game -gap -garage -garbage -garden -garlic -garment -gas -gasp -gate -gather -gauge -gaze -general -genius -genre -gentle -genuine -gesture -ghost -giant -gift -giggle -ginger -giraffe -girl -give -glad -glance -glare -glass -glide -glimpse -globe -gloom -glory -glove -glow -glue -goat -goddess -gold -good -goose -gorilla -gospel -gossip -govern -gown -grab -grace -grain -grant -grape -grass -gravity -great -green -grid -grief -grit -grocery -group -grow -grunt -guard -guess -guide -guilt -guitar -gun -gym -habit -hair -half -hammer -hamster -hand -happy -harbor -hard -harsh -harvest -hat -have -hawk -hazard -head -health -heart -heavy -hedgehog -height -hello -helmet -help -hen -hero -hidden -high -hill -hint -hip -hire -history -hobby -hockey -hold -hole -holiday -hollow -home -honey -hood -hope -horn -horror -horse -hospital -host -hotel -hour -hover -hub -huge -human -humble -humor -hundred -hungry -hunt -hurdle -hurry -hurt -husband -hybrid -ice -icon -idea -identify -idle -ignore -ill -illegal -illness -image -imitate -immense -immune -impact -impose -improve -impulse -inch -include -income -increase -index -indicate -indoor -industry -infant -inflict -inform -inhale -inherit -initial -inject -injury -inmate -inner -innocent -input -inquiry -insane -insect -inside -inspire -install -intact -interest -into -invest -invite -involve -iron -island -isolate -issue -item -ivory -jacket -jaguar -jar -jazz -jealous -jeans -jelly -jewel -job -join -joke -journey -joy -judge -juice -jump -jungle -junior -junk -just -kangaroo -keen -keep -ketchup -key -kick -kid -kidney -kind -kingdom -kiss -kit -kitchen -kite -kitten -kiwi -knee -knife -knock -know -lab -label -labor -ladder -lady -lake -lamp -language -laptop -large -later -latin -laugh -laundry -lava -law -lawn -lawsuit -layer -lazy -leader -leaf -learn -leave -lecture -left -leg -legal -legend -leisure -lemon -lend -length -lens -leopard -lesson -letter -level -liar -liberty -library -license -life -lift -light -like -limb -limit -link -lion -liquid -list -little -live -lizard -load -loan -lobster -local -lock -logic -lonely -long -loop -lottery -loud -lounge -love -loyal -lucky -luggage -lumber -lunar -lunch -luxury -lyrics -machine -mad -magic -magnet -maid -mail -main -major -make -mammal -man -manage -mandate -mango -mansion -manual -maple -marble -march -margin -marine -market -marriage -mask -mass -master -match -material -math -matrix -matter -maximum -maze -meadow -mean -measure -meat -mechanic -medal -media -melody -melt -member -memory -mention -menu -mercy -merge -merit -merry -mesh -message -metal -method -middle -midnight -milk -million -mimic -mind -minimum -minor -minute -miracle -mirror -misery -miss -mistake -mix -mixed -mixture -mobile -model -modify -mom -moment -monitor -monkey -monster -month -moon -moral -more -morning -mosquito -mother -motion -motor -mountain -mouse -move -movie -much -muffin -mule -multiply -muscle -museum -mushroom -music -must -mutual -myself -mystery -myth -naive -name -napkin -narrow -nasty -nation -nature -near -neck -need -negative -neglect -neither -nephew -nerve -nest -net -network -neutral -never -news -next -nice -night -noble -noise -nominee -noodle -normal -north -nose -notable -note -nothing -notice -novel -now -nuclear -number -nurse -nut -oak -obey -object -oblige -obscure -observe -obtain -obvious -occur -ocean -october -odor -off -offer -office -often -oil -okay -old -olive -olympic -omit -once -one -onion -online -only -open -opera -opinion -oppose -option -orange -orbit -orchard -order -ordinary -organ -orient -original -orphan -ostrich -other -outdoor -outer -output -outside -oval -oven -over -own -owner -oxygen -oyster -ozone -pact -paddle -page -pair -palace -palm -panda -panel -panic -panther -paper -parade -parent -park -parrot -party -pass -patch -path -patient -patrol -pattern -pause -pave -payment -peace -peanut -pear -peasant -pelican -pen -penalty -pencil -people -pepper -perfect -permit -person -pet -phone -photo -phrase -physical -piano -picnic -picture -piece -pig -pigeon -pill -pilot -pink -pioneer -pipe -pistol -pitch -pizza -place -planet -plastic -plate -play -please -pledge -pluck -plug -plunge -poem -poet -point -polar -pole -police -pond -pony -pool -popular -portion -position -possible -post -potato -pottery -poverty -powder -power -practice -praise -predict -prefer -prepare -present -pretty -prevent -price -pride -primary -print -priority -prison -private -prize -problem -process -produce -profit -program -project -promote -proof -property -prosper -protect -proud -provide -public -pudding -pull -pulp -pulse -pumpkin -punch -pupil -puppy -purchase -purity -purpose -purse -push -put -puzzle -pyramid -quality -quantum -quarter -question -quick -quit -quiz -quote -rabbit -raccoon -race -rack -radar -radio -rail -rain -raise -rally -ramp -ranch -random -range -rapid -rare -rate -rather -raven -raw -razor -ready -real -reason -rebel -rebuild -recall -receive -recipe -record -recycle -reduce -reflect -reform -refuse -region -regret -regular -reject -relax -release -relief -rely -remain -remember -remind -remove -render -renew -rent -reopen -repair -repeat -replace -report -require -rescue -resemble -resist -resource -response -result -retire -retreat -return -reunion -reveal -review -reward -rhythm -rib -ribbon -rice -rich -ride -ridge -rifle -right -rigid -ring -riot -ripple -risk -ritual -rival -river -road -roast -robot -robust -rocket -romance -roof -rookie -room -rose -rotate -rough -round -route -royal -rubber -rude -rug -rule -run -runway -rural -sad -saddle -sadness -safe -sail -salad -salmon -salon -salt -salute -same -sample -sand -satisfy -satoshi -sauce -sausage -save -say -scale -scan -scare -scatter -scene -scheme -school -science -scissors -scorpion -scout -scrap -screen -script -scrub -sea -search -season -seat -second -secret -section -security -seed -seek -segment -select -sell -seminar -senior -sense -sentence -series -service -session -settle -setup -seven -shadow -shaft -shallow -share -shed -shell -sheriff -shield -shift -shine -ship -shiver -shock -shoe -shoot -shop -short -shoulder -shove -shrimp -shrug -shuffle -shy -sibling -sick -side -siege -sight -sign -silent -silk -silly -silver -similar -simple -since -sing -siren -sister -situate -six -size -skate -sketch -ski -skill -skin -skirt -skull -slab -slam -sleep -slender -slice -slide -slight -slim -slogan -slot -slow -slush -small -smart -smile -smoke -smooth -snack -snake -snap -sniff -snow -soap -soccer -social -sock -soda -soft -solar -soldier -solid -solution -solve -someone -song -soon -sorry -sort -soul -sound -soup -source -south -space -spare -spatial -spawn -speak -special -speed -spell -spend -sphere -spice -spider -spike -spin -spirit -split -spoil -sponsor -spoon -sport -spot -spray -spread -spring -spy -square -squeeze -squirrel -stable -stadium -staff -stage -stairs -stamp -stand -start -state -stay -steak -steel -stem -step -stereo -stick -still -sting -stock -stomach -stone -stool -story -stove -strategy -street -strike -strong -struggle -student -stuff -stumble -style -subject -submit -subway -success -such -sudden -suffer -sugar -suggest -suit -summer -sun -sunny -sunset -super -supply -supreme -sure -surface -surge -surprise -surround -survey -suspect -sustain -swallow -swamp -swap -swarm -swear -sweet -swift -swim -swing -switch -sword -symbol -symptom -syrup -system -table -tackle -tag -tail -talent -talk -tank -tape -target -task -taste -tattoo -taxi -teach -team -tell -ten -tenant -tennis -tent -term -test -text -thank -that -theme -then -theory -there -they -thing -this -thought -three -thrive -throw -thumb -thunder -ticket -tide -tiger -tilt -timber -time -tiny -tip -tired -tissue -title -toast -tobacco -today -toddler -toe -together -toilet -token -tomato -tomorrow -tone -tongue -tonight -tool -tooth -top -topic -topple -torch -tornado -tortoise -toss -total -tourist -toward -tower -town -toy -track -trade -traffic -tragic -train -transfer -trap -trash -travel -tray -treat -tree -trend -trial -tribe -trick -trigger -trim -trip -trophy -trouble -truck -true -truly -trumpet -trust -truth -try -tube -tuition -tumble -tuna -tunnel -turkey -turn -turtle -twelve -twenty -twice -twin -twist -two -type -typical -ugly -umbrella -unable -unaware -uncle -uncover -under -undo -unfair -unfold -unhappy -uniform -unique -unit -universe -unknown -unlock -until -unusual -unveil -update -upgrade -uphold -upon -upper -upset -urban -urge -usage -use -used -useful -useless -usual -utility -vacant -vacuum -vague -valid -valley -valve -van -vanish -vapor -various -vast -vault -vehicle -velvet -vendor -venture -venue -verb -verify -version -very -vessel -veteran -viable -vibrant -vicious -victory -video -view -village -vintage -violin -virtual -virus -visa -visit -visual -vital -vivid -vocal -voice -void -volcano -volume -vote -voyage -wage -wagon -wait -walk -wall -walnut -want -warfare -warm -warrior -wash -wasp -waste -water -wave -way -wealth -weapon -wear -weasel -weather -web -wedding -weekend -weird -welcome -west -wet -whale -what -wheat -wheel -when -where -whip -whisper -wide -width -wife -wild -will -win -window -wine -wing -wink -winner -winter -wire -wisdom -wise -wish -witness -wolf -woman -wonder -wood -wool -word -work -world -worry -worth -wrap -wreck -wrestle -wrist -write -wrong -yard -year -yellow -you -young -youth -zebra -zero -zone -zoo diff --git a/src/lib/pybitcointools/bitcoin/main.py b/src/lib/pybitcointools/bitcoin/main.py deleted file mode 100644 index 8cf3a9f7..00000000 --- a/src/lib/pybitcointools/bitcoin/main.py +++ /dev/null @@ -1,581 +0,0 @@ -#!/usr/bin/python -from .py2specials import * -from .py3specials import * -import binascii -import hashlib -import re -import sys -import os -import base64 -import time -import random -import hmac -from .ripemd import * - -# Elliptic curve parameters (secp256k1) - -P = 2**256 - 2**32 - 977 -N = 115792089237316195423570985008687907852837564279074904382605163141518161494337 -A = 0 -B = 7 -Gx = 55066263022277343669578718895168534326250603453777594175500187360389116729240 -Gy = 32670510020758816978083085130507043184471273380659243275938904335757337482424 -G = (Gx, Gy) - - -def change_curve(p, n, a, b, gx, gy): - global P, N, A, B, Gx, Gy, G - P, N, A, B, Gx, Gy = p, n, a, b, gx, gy - G = (Gx, Gy) - - -def getG(): - return G - -# Extended Euclidean Algorithm - - -def inv(a, n): - if a == 0: - return 0 - lm, hm = 1, 0 - low, high = a % n, n - while low > 1: - r = high//low - nm, new = hm-lm*r, high-low*r - lm, low, hm, high = nm, new, lm, low - return lm % n - - - -# JSON access (for pybtctool convenience) - - -def access(obj, prop): - if isinstance(obj, dict): - if prop in obj: - return obj[prop] - elif '.' in prop: - return obj[float(prop)] - else: - return obj[int(prop)] - else: - return obj[int(prop)] - - -def multiaccess(obj, prop): - return [access(o, prop) for o in obj] - - -def slice(obj, start=0, end=2**200): - return obj[int(start):int(end)] - - -def count(obj): - return len(obj) - -_sum = sum - - -def sum(obj): - return _sum(obj) - - -def isinf(p): - return p[0] == 0 and p[1] == 0 - - -def to_jacobian(p): - o = (p[0], p[1], 1) - return o - - -def jacobian_double(p): - if not p[1]: - return (0, 0, 0) - ysq = (p[1] ** 2) % P - S = (4 * p[0] * ysq) % P - M = (3 * p[0] ** 2 + A * p[2] ** 4) % P - nx = (M**2 - 2 * S) % P - ny = (M * (S - nx) - 8 * ysq ** 2) % P - nz = (2 * p[1] * p[2]) % P - return (nx, ny, nz) - - -def jacobian_add(p, q): - if not p[1]: - return q - if not q[1]: - return p - U1 = (p[0] * q[2] ** 2) % P - U2 = (q[0] * p[2] ** 2) % P - S1 = (p[1] * q[2] ** 3) % P - S2 = (q[1] * p[2] ** 3) % P - if U1 == U2: - if S1 != S2: - return (0, 0, 1) - return jacobian_double(p) - H = U2 - U1 - R = S2 - S1 - H2 = (H * H) % P - H3 = (H * H2) % P - U1H2 = (U1 * H2) % P - nx = (R ** 2 - H3 - 2 * U1H2) % P - ny = (R * (U1H2 - nx) - S1 * H3) % P - nz = (H * p[2] * q[2]) % P - return (nx, ny, nz) - - -def from_jacobian(p): - z = inv(p[2], P) - return ((p[0] * z**2) % P, (p[1] * z**3) % P) - - -def jacobian_multiply(a, n): - if a[1] == 0 or n == 0: - return (0, 0, 1) - if n == 1: - return a - if n < 0 or n >= N: - return jacobian_multiply(a, n % N) - if (n % 2) == 0: - return jacobian_double(jacobian_multiply(a, n//2)) - if (n % 2) == 1: - return jacobian_add(jacobian_double(jacobian_multiply(a, n//2)), a) - - -def fast_multiply(a, n): - return from_jacobian(jacobian_multiply(to_jacobian(a), n)) - - -def fast_add(a, b): - return from_jacobian(jacobian_add(to_jacobian(a), to_jacobian(b))) - -# Functions for handling pubkey and privkey formats - - -def get_pubkey_format(pub): - if is_python2: - two = '\x02' - three = '\x03' - four = '\x04' - else: - two = 2 - three = 3 - four = 4 - - if isinstance(pub, (tuple, list)): return 'decimal' - elif len(pub) == 65 and pub[0] == four: return 'bin' - elif len(pub) == 130 and pub[0:2] == '04': return 'hex' - elif len(pub) == 33 and pub[0] in [two, three]: return 'bin_compressed' - elif len(pub) == 66 and pub[0:2] in ['02', '03']: return 'hex_compressed' - elif len(pub) == 64: return 'bin_electrum' - elif len(pub) == 128: return 'hex_electrum' - else: raise Exception("Pubkey not in recognized format") - - -def encode_pubkey(pub, formt): - if not isinstance(pub, (tuple, list)): - pub = decode_pubkey(pub) - if formt == 'decimal': return pub - elif formt == 'bin': return b'\x04' + encode(pub[0], 256, 32) + encode(pub[1], 256, 32) - elif formt == 'bin_compressed': - return from_int_to_byte(2+(pub[1] % 2)) + encode(pub[0], 256, 32) - elif formt == 'hex': return '04' + encode(pub[0], 16, 64) + encode(pub[1], 16, 64) - elif formt == 'hex_compressed': - return '0'+str(2+(pub[1] % 2)) + encode(pub[0], 16, 64) - elif formt == 'bin_electrum': return encode(pub[0], 256, 32) + encode(pub[1], 256, 32) - elif formt == 'hex_electrum': return encode(pub[0], 16, 64) + encode(pub[1], 16, 64) - else: raise Exception("Invalid format!") - - -def decode_pubkey(pub, formt=None): - if not formt: formt = get_pubkey_format(pub) - if formt == 'decimal': return pub - elif formt == 'bin': return (decode(pub[1:33], 256), decode(pub[33:65], 256)) - elif formt == 'bin_compressed': - x = decode(pub[1:33], 256) - beta = pow(int(x*x*x+A*x+B), int((P+1)//4), int(P)) - y = (P-beta) if ((beta + from_byte_to_int(pub[0])) % 2) else beta - return (x, y) - elif formt == 'hex': return (decode(pub[2:66], 16), decode(pub[66:130], 16)) - elif formt == 'hex_compressed': - return decode_pubkey(safe_from_hex(pub), 'bin_compressed') - elif formt == 'bin_electrum': - return (decode(pub[:32], 256), decode(pub[32:64], 256)) - elif formt == 'hex_electrum': - return (decode(pub[:64], 16), decode(pub[64:128], 16)) - else: raise Exception("Invalid format!") - -def get_privkey_format(priv): - if isinstance(priv, int_types): return 'decimal' - elif len(priv) == 32: return 'bin' - elif len(priv) == 33: return 'bin_compressed' - elif len(priv) == 64: return 'hex' - elif len(priv) == 66: return 'hex_compressed' - else: - bin_p = b58check_to_bin(priv) - if len(bin_p) == 32: return 'wif' - elif len(bin_p) == 33: return 'wif_compressed' - else: raise Exception("WIF does not represent privkey") - -def encode_privkey(priv, formt, vbyte=0): - if not isinstance(priv, int_types): - return encode_privkey(decode_privkey(priv), formt, vbyte) - if formt == 'decimal': return priv - elif formt == 'bin': return encode(priv, 256, 32) - elif formt == 'bin_compressed': return encode(priv, 256, 32)+b'\x01' - elif formt == 'hex': return encode(priv, 16, 64) - elif formt == 'hex_compressed': return encode(priv, 16, 64)+'01' - elif formt == 'wif': - return bin_to_b58check(encode(priv, 256, 32), 128+int(vbyte)) - elif formt == 'wif_compressed': - return bin_to_b58check(encode(priv, 256, 32)+b'\x01', 128+int(vbyte)) - else: raise Exception("Invalid format!") - -def decode_privkey(priv,formt=None): - if not formt: formt = get_privkey_format(priv) - if formt == 'decimal': return priv - elif formt == 'bin': return decode(priv, 256) - elif formt == 'bin_compressed': return decode(priv[:32], 256) - elif formt == 'hex': return decode(priv, 16) - elif formt == 'hex_compressed': return decode(priv[:64], 16) - elif formt == 'wif': return decode(b58check_to_bin(priv),256) - elif formt == 'wif_compressed': - return decode(b58check_to_bin(priv)[:32],256) - else: raise Exception("WIF does not represent privkey") - -def add_pubkeys(p1, p2): - f1, f2 = get_pubkey_format(p1), get_pubkey_format(p2) - return encode_pubkey(fast_add(decode_pubkey(p1, f1), decode_pubkey(p2, f2)), f1) - -def add_privkeys(p1, p2): - f1, f2 = get_privkey_format(p1), get_privkey_format(p2) - return encode_privkey((decode_privkey(p1, f1) + decode_privkey(p2, f2)) % N, f1) - -def mul_privkeys(p1, p2): - f1, f2 = get_privkey_format(p1), get_privkey_format(p2) - return encode_privkey((decode_privkey(p1, f1) * decode_privkey(p2, f2)) % N, f1) - -def multiply(pubkey, privkey): - f1, f2 = get_pubkey_format(pubkey), get_privkey_format(privkey) - pubkey, privkey = decode_pubkey(pubkey, f1), decode_privkey(privkey, f2) - # http://safecurves.cr.yp.to/twist.html - if not isinf(pubkey) and (pubkey[0]**3+B-pubkey[1]*pubkey[1]) % P != 0: - raise Exception("Point not on curve") - return encode_pubkey(fast_multiply(pubkey, privkey), f1) - - -def divide(pubkey, privkey): - factor = inv(decode_privkey(privkey), N) - return multiply(pubkey, factor) - - -def compress(pubkey): - f = get_pubkey_format(pubkey) - if 'compressed' in f: return pubkey - elif f == 'bin': return encode_pubkey(decode_pubkey(pubkey, f), 'bin_compressed') - elif f == 'hex' or f == 'decimal': - return encode_pubkey(decode_pubkey(pubkey, f), 'hex_compressed') - - -def decompress(pubkey): - f = get_pubkey_format(pubkey) - if 'compressed' not in f: return pubkey - elif f == 'bin_compressed': return encode_pubkey(decode_pubkey(pubkey, f), 'bin') - elif f == 'hex_compressed' or f == 'decimal': - return encode_pubkey(decode_pubkey(pubkey, f), 'hex') - - -def privkey_to_pubkey(privkey): - f = get_privkey_format(privkey) - privkey = decode_privkey(privkey, f) - if privkey >= N: - raise Exception("Invalid privkey") - if f in ['bin', 'bin_compressed', 'hex', 'hex_compressed', 'decimal']: - return encode_pubkey(fast_multiply(G, privkey), f) - else: - return encode_pubkey(fast_multiply(G, privkey), f.replace('wif', 'hex')) - -privtopub = privkey_to_pubkey - - -def privkey_to_address(priv, magicbyte=0): - return pubkey_to_address(privkey_to_pubkey(priv), magicbyte) -privtoaddr = privkey_to_address - - -def neg_pubkey(pubkey): - f = get_pubkey_format(pubkey) - pubkey = decode_pubkey(pubkey, f) - return encode_pubkey((pubkey[0], (P-pubkey[1]) % P), f) - - -def neg_privkey(privkey): - f = get_privkey_format(privkey) - privkey = decode_privkey(privkey, f) - return encode_privkey((N - privkey) % N, f) - -def subtract_pubkeys(p1, p2): - f1, f2 = get_pubkey_format(p1), get_pubkey_format(p2) - k2 = decode_pubkey(p2, f2) - return encode_pubkey(fast_add(decode_pubkey(p1, f1), (k2[0], (P - k2[1]) % P)), f1) - - -def subtract_privkeys(p1, p2): - f1, f2 = get_privkey_format(p1), get_privkey_format(p2) - k2 = decode_privkey(p2, f2) - return encode_privkey((decode_privkey(p1, f1) - k2) % N, f1) - -# Hashes - - -def bin_hash160(string): - intermed = hashlib.sha256(string).digest() - digest = '' - try: - digest = hashlib.new('ripemd160', intermed).digest() - except: - digest = RIPEMD160(intermed).digest() - return digest - - -def hash160(string): - return safe_hexlify(bin_hash160(string)) - - -def bin_sha256(string): - binary_data = string if isinstance(string, bytes) else bytes(string, 'utf-8') - return hashlib.sha256(binary_data).digest() - -def sha256(string): - return bytes_to_hex_string(bin_sha256(string)) - - -def bin_ripemd160(string): - try: - digest = hashlib.new('ripemd160', string).digest() - except: - digest = RIPEMD160(string).digest() - return digest - - -def ripemd160(string): - return safe_hexlify(bin_ripemd160(string)) - - -def bin_dbl_sha256(s): - bytes_to_hash = from_string_to_bytes(s) - return hashlib.sha256(hashlib.sha256(bytes_to_hash).digest()).digest() - - -def dbl_sha256(string): - return safe_hexlify(bin_dbl_sha256(string)) - - -def bin_slowsha(string): - string = from_string_to_bytes(string) - orig_input = string - for i in range(100000): - string = hashlib.sha256(string + orig_input).digest() - return string - - -def slowsha(string): - return safe_hexlify(bin_slowsha(string)) - - -def hash_to_int(x): - if len(x) in [40, 64]: - return decode(x, 16) - return decode(x, 256) - - -def num_to_var_int(x): - x = int(x) - if x < 253: return from_int_to_byte(x) - elif x < 65536: return from_int_to_byte(253)+encode(x, 256, 2)[::-1] - elif x < 4294967296: return from_int_to_byte(254) + encode(x, 256, 4)[::-1] - else: return from_int_to_byte(255) + encode(x, 256, 8)[::-1] - - -# WTF, Electrum? -def electrum_sig_hash(message): - padded = b"\x18Bitcoin Signed Message:\n" + num_to_var_int(len(message)) + from_string_to_bytes(message) - return bin_dbl_sha256(padded) - - -def random_key(): - # Gotta be secure after that java.SecureRandom fiasco... - entropy = random_string(32) \ - + str(random.randrange(2**256)) \ - + str(int(time.time() * 1000000)) - return sha256(entropy) - - -def random_electrum_seed(): - entropy = os.urandom(32) \ - + str(random.randrange(2**256)) \ - + str(int(time.time() * 1000000)) - return sha256(entropy)[:32] - -# Encodings - -def b58check_to_bin(inp): - leadingzbytes = len(re.match('^1*', inp).group(0)) - data = b'\x00' * leadingzbytes + changebase(inp, 58, 256) - assert bin_dbl_sha256(data[:-4])[:4] == data[-4:] - return data[1:-4] - - -def get_version_byte(inp): - leadingzbytes = len(re.match('^1*', inp).group(0)) - data = b'\x00' * leadingzbytes + changebase(inp, 58, 256) - assert bin_dbl_sha256(data[:-4])[:4] == data[-4:] - return ord(data[0]) - - -def hex_to_b58check(inp, magicbyte=0): - return bin_to_b58check(binascii.unhexlify(inp), magicbyte) - - -def b58check_to_hex(inp): - return safe_hexlify(b58check_to_bin(inp)) - - -def pubkey_to_address(pubkey, magicbyte=0): - if isinstance(pubkey, (list, tuple)): - pubkey = encode_pubkey(pubkey, 'bin') - if len(pubkey) in [66, 130]: - return bin_to_b58check( - bin_hash160(binascii.unhexlify(pubkey)), magicbyte) - return bin_to_b58check(bin_hash160(pubkey), magicbyte) - -pubtoaddr = pubkey_to_address - - -def is_privkey(priv): - try: - get_privkey_format(priv) - return True - except: - return False - -def is_pubkey(pubkey): - try: - get_pubkey_format(pubkey) - return True - except: - return False - -def is_address(addr): - ADDR_RE = re.compile("^[123mn][a-km-zA-HJ-NP-Z0-9]{26,33}$") - return bool(ADDR_RE.match(addr)) - - -# EDCSA - - -def encode_sig(v, r, s): - vb, rb, sb = from_int_to_byte(v), encode(r, 256), encode(s, 256) - - result = base64.b64encode(vb+b'\x00'*(32-len(rb))+rb+b'\x00'*(32-len(sb))+sb) - return result if is_python2 else str(result, 'utf-8') - - -def decode_sig(sig): - bytez = base64.b64decode(sig) - return from_byte_to_int(bytez[0]), decode(bytez[1:33], 256), decode(bytez[33:], 256) - -# https://tools.ietf.org/html/rfc6979#section-3.2 - - -def deterministic_generate_k(msghash, priv): - v = b'\x01' * 32 - k = b'\x00' * 32 - priv = encode_privkey(priv, 'bin') - msghash = encode(hash_to_int(msghash), 256, 32) - k = hmac.new(k, v+b'\x00'+priv+msghash, hashlib.sha256).digest() - v = hmac.new(k, v, hashlib.sha256).digest() - k = hmac.new(k, v+b'\x01'+priv+msghash, hashlib.sha256).digest() - v = hmac.new(k, v, hashlib.sha256).digest() - return decode(hmac.new(k, v, hashlib.sha256).digest(), 256) - - -def ecdsa_raw_sign(msghash, priv): - - z = hash_to_int(msghash) - k = deterministic_generate_k(msghash, priv) - - r, y = fast_multiply(G, k) - s = inv(k, N) * (z + r*decode_privkey(priv)) % N - - v, r, s = 27+((y % 2) ^ (0 if s * 2 < N else 1)), r, s if s * 2 < N else N - s - if 'compressed' in get_privkey_format(priv): - v += 4 - return v, r, s - - -def ecdsa_sign(msg, priv): - v, r, s = ecdsa_raw_sign(electrum_sig_hash(msg), priv) - sig = encode_sig(v, r, s) - assert ecdsa_verify(msg, sig, - privtopub(priv)), "Bad Sig!\t %s\nv = %d\n,r = %d\ns = %d" % (sig, v, r, s) - return sig - - -def ecdsa_raw_verify(msghash, vrs, pub): - v, r, s = vrs - if not (27 <= v <= 34): - return False - - w = inv(s, N) - z = hash_to_int(msghash) - - u1, u2 = z*w % N, r*w % N - x, y = fast_add(fast_multiply(G, u1), fast_multiply(decode_pubkey(pub), u2)) - return bool(r == x and (r % N) and (s % N)) - - -# For BitcoinCore, (msg = addr or msg = "") be default -def ecdsa_verify_addr(msg, sig, addr): - assert is_address(addr) - Q = ecdsa_recover(msg, sig) - magic = get_version_byte(addr) - return (addr == pubtoaddr(Q, int(magic))) or (addr == pubtoaddr(compress(Q), int(magic))) - - -def ecdsa_verify(msg, sig, pub): - if is_address(pub): - return ecdsa_verify_addr(msg, sig, pub) - return ecdsa_raw_verify(electrum_sig_hash(msg), decode_sig(sig), pub) - - -def ecdsa_raw_recover(msghash, vrs): - v, r, s = vrs - if not (27 <= v <= 34): - raise ValueError("%d must in range 27-31" % v) - x = r - xcubedaxb = (x*x*x+A*x+B) % P - beta = pow(xcubedaxb, (P+1)//4, P) - y = beta if v % 2 ^ beta % 2 else (P - beta) - # If xcubedaxb is not a quadratic residue, then r cannot be the x coord - # for a point on the curve, and so the sig is invalid - if (xcubedaxb - y*y) % P != 0 or not (r % N) or not (s % N): - return False - z = hash_to_int(msghash) - Gz = jacobian_multiply((Gx, Gy, 1), (N - z) % N) - XY = jacobian_multiply((x, y, 1), s) - Qr = jacobian_add(Gz, XY) - Q = jacobian_multiply(Qr, inv(r, N)) - Q = from_jacobian(Q) - - # if ecdsa_raw_verify(msghash, vrs, Q): - return Q - # return False - - -def ecdsa_recover(msg, sig): - v,r,s = decode_sig(sig) - Q = ecdsa_raw_recover(electrum_sig_hash(msg), (v,r,s)) - return encode_pubkey(Q, 'hex_compressed') if v >= 31 else encode_pubkey(Q, 'hex') diff --git a/src/lib/pybitcointools/bitcoin/mnemonic.py b/src/lib/pybitcointools/bitcoin/mnemonic.py deleted file mode 100644 index a9df3617..00000000 --- a/src/lib/pybitcointools/bitcoin/mnemonic.py +++ /dev/null @@ -1,127 +0,0 @@ -import hashlib -import os.path -import binascii -import random -from bisect import bisect_left - -wordlist_english=list(open(os.path.join(os.path.dirname(os.path.realpath(__file__)),'english.txt'),'r')) - -def eint_to_bytes(entint,entbits): - a=hex(entint)[2:].rstrip('L').zfill(32) - print(a) - return binascii.unhexlify(a) - -def mnemonic_int_to_words(mint,mint_num_words,wordlist=wordlist_english): - backwords=[wordlist[(mint >> (11*x)) & 0x7FF].strip() for x in range(mint_num_words)] - return backwords[::-1] - -def entropy_cs(entbytes): - entropy_size=8*len(entbytes) - checksum_size=entropy_size//32 - hd=hashlib.sha256(entbytes).hexdigest() - csint=int(hd,16) >> (256-checksum_size) - return csint,checksum_size - -def entropy_to_words(entbytes,wordlist=wordlist_english): - if(len(entbytes) < 4 or len(entbytes) % 4 != 0): - raise ValueError("The size of the entropy must be a multiple of 4 bytes (multiple of 32 bits)") - entropy_size=8*len(entbytes) - csint,checksum_size = entropy_cs(entbytes) - entint=int(binascii.hexlify(entbytes),16) - mint=(entint << checksum_size) | csint - mint_num_words=(entropy_size+checksum_size)//11 - - return mnemonic_int_to_words(mint,mint_num_words,wordlist) - -def words_bisect(word,wordlist=wordlist_english): - lo=bisect_left(wordlist,word) - hi=len(wordlist)-bisect_left(wordlist[:lo:-1],word) - - return lo,hi - -def words_split(wordstr,wordlist=wordlist_english): - def popword(wordstr,wordlist): - for fwl in range(1,9): - w=wordstr[:fwl].strip() - lo,hi=words_bisect(w,wordlist) - if(hi-lo == 1): - return w,wordstr[fwl:].lstrip() - wordlist=wordlist[lo:hi] - raise Exception("Wordstr %s not found in list" %(w)) - - words=[] - tail=wordstr - while(len(tail)): - head,tail=popword(tail,wordlist) - words.append(head) - return words - -def words_to_mnemonic_int(words,wordlist=wordlist_english): - if(isinstance(words,str)): - words=words_split(words,wordlist) - return sum([wordlist.index(w) << (11*x) for x,w in enumerate(words[::-1])]) - -def words_verify(words,wordlist=wordlist_english): - if(isinstance(words,str)): - words=words_split(words,wordlist) - - mint = words_to_mnemonic_int(words,wordlist) - mint_bits=len(words)*11 - cs_bits=mint_bits//32 - entropy_bits=mint_bits-cs_bits - eint=mint >> cs_bits - csint=mint & ((1 << cs_bits)-1) - ebytes=_eint_to_bytes(eint,entropy_bits) - return csint == entropy_cs(ebytes) - -def mnemonic_to_seed(mnemonic_phrase,passphrase=b''): - try: - from hashlib import pbkdf2_hmac - def pbkdf2_hmac_sha256(password,salt,iters=2048): - return pbkdf2_hmac(hash_name='sha512',password=password,salt=salt,iterations=iters) - except: - try: - from Crypto.Protocol.KDF import PBKDF2 - from Crypto.Hash import SHA512,HMAC - - def pbkdf2_hmac_sha256(password,salt,iters=2048): - return PBKDF2(password=password,salt=salt,dkLen=64,count=iters,prf=lambda p,s: HMAC.new(p,s,SHA512).digest()) - except: - try: - - from pbkdf2 import PBKDF2 - import hmac - def pbkdf2_hmac_sha256(password,salt,iters=2048): - return PBKDF2(password,salt, iterations=iters, macmodule=hmac, digestmodule=hashlib.sha512).read(64) - except: - raise RuntimeError("No implementation of pbkdf2 was found!") - - return pbkdf2_hmac_sha256(password=mnemonic_phrase,salt=b'mnemonic'+passphrase) - -def words_mine(prefix,entbits,satisfunction,wordlist=wordlist_english,randombits=random.getrandbits): - prefix_bits=len(prefix)*11 - mine_bits=entbits-prefix_bits - pint=words_to_mnemonic_int(prefix,wordlist) - pint<<=mine_bits - dint=randombits(mine_bits) - count=0 - while(not satisfunction(entropy_to_words(eint_to_bytes(pint+dint,entbits)))): - dint=randombits(mine_bits) - if((count & 0xFFFF) == 0): - print("Searched %f percent of the space" % (float(count)/float(1 << mine_bits))) - - return entropy_to_words(eint_to_bytes(pint+dint,entbits)) - -if __name__=="__main__": - import json - testvectors=json.load(open('vectors.json','r')) - passed=True - for v in testvectors['english']: - ebytes=binascii.unhexlify(v[0]) - w=' '.join(entropy_to_words(ebytes)) - seed=mnemonic_to_seed(w,passphrase='TREZOR') - passed = passed and w==v[1] - passed = passed and binascii.hexlify(seed)==v[2] - print("Tests %s." % ("Passed" if passed else "Failed")) - - diff --git a/src/lib/pybitcointools/bitcoin/py2specials.py b/src/lib/pybitcointools/bitcoin/py2specials.py deleted file mode 100644 index 337154f3..00000000 --- a/src/lib/pybitcointools/bitcoin/py2specials.py +++ /dev/null @@ -1,98 +0,0 @@ -import sys, re -import binascii -import os -import hashlib - - -if sys.version_info.major == 2: - string_types = (str, unicode) - string_or_bytes_types = string_types - int_types = (int, float, long) - - # Base switching - code_strings = { - 2: '01', - 10: '0123456789', - 16: '0123456789abcdef', - 32: 'abcdefghijklmnopqrstuvwxyz234567', - 58: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz', - 256: ''.join([chr(x) for x in range(256)]) - } - - def bin_dbl_sha256(s): - bytes_to_hash = from_string_to_bytes(s) - return hashlib.sha256(hashlib.sha256(bytes_to_hash).digest()).digest() - - def lpad(msg, symbol, length): - if len(msg) >= length: - return msg - return symbol * (length - len(msg)) + msg - - def get_code_string(base): - if base in code_strings: - return code_strings[base] - else: - raise ValueError("Invalid base!") - - def changebase(string, frm, to, minlen=0): - if frm == to: - return lpad(string, get_code_string(frm)[0], minlen) - return encode(decode(string, frm), to, minlen) - - def bin_to_b58check(inp, magicbyte=0): - if magicbyte == 0: - inp = '\x00' + inp - while magicbyte > 0: - inp = chr(int(magicbyte % 256)) + inp - magicbyte //= 256 - leadingzbytes = len(re.match('^\x00*', inp).group(0)) - checksum = bin_dbl_sha256(inp)[:4] - return '1' * leadingzbytes + changebase(inp+checksum, 256, 58) - - def bytes_to_hex_string(b): - return b.encode('hex') - - def safe_from_hex(s): - return s.decode('hex') - - def from_int_representation_to_bytes(a): - return str(a) - - def from_int_to_byte(a): - return chr(a) - - def from_byte_to_int(a): - return ord(a) - - def from_bytes_to_string(s): - return s - - def from_string_to_bytes(a): - return a - - def safe_hexlify(a): - return binascii.hexlify(a) - - def encode(val, base, minlen=0): - base, minlen = int(base), int(minlen) - code_string = get_code_string(base) - result = "" - while val > 0: - result = code_string[val % base] + result - val //= base - return code_string[0] * max(minlen - len(result), 0) + result - - def decode(string, base): - base = int(base) - code_string = get_code_string(base) - result = 0 - if base == 16: - string = string.lower() - while len(string) > 0: - result *= base - result += code_string.find(string[0]) - string = string[1:] - return result - - def random_string(x): - return os.urandom(x) diff --git a/src/lib/pybitcointools/bitcoin/py3specials.py b/src/lib/pybitcointools/bitcoin/py3specials.py deleted file mode 100644 index 7593b9a6..00000000 --- a/src/lib/pybitcointools/bitcoin/py3specials.py +++ /dev/null @@ -1,123 +0,0 @@ -import sys, os -import binascii -import hashlib - - -if sys.version_info.major == 3: - string_types = (str) - string_or_bytes_types = (str, bytes) - int_types = (int, float) - # Base switching - code_strings = { - 2: '01', - 10: '0123456789', - 16: '0123456789abcdef', - 32: 'abcdefghijklmnopqrstuvwxyz234567', - 58: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz', - 256: ''.join([chr(x) for x in range(256)]) - } - - def bin_dbl_sha256(s): - bytes_to_hash = from_string_to_bytes(s) - return hashlib.sha256(hashlib.sha256(bytes_to_hash).digest()).digest() - - def lpad(msg, symbol, length): - if len(msg) >= length: - return msg - return symbol * (length - len(msg)) + msg - - def get_code_string(base): - if base in code_strings: - return code_strings[base] - else: - raise ValueError("Invalid base!") - - def changebase(string, frm, to, minlen=0): - if frm == to: - return lpad(string, get_code_string(frm)[0], minlen) - return encode(decode(string, frm), to, minlen) - - def bin_to_b58check(inp, magicbyte=0): - if magicbyte == 0: - inp = from_int_to_byte(0) + inp - while magicbyte > 0: - inp = from_int_to_byte(magicbyte % 256) + inp - magicbyte //= 256 - - leadingzbytes = 0 - for x in inp: - if x != 0: - break - leadingzbytes += 1 - - checksum = bin_dbl_sha256(inp)[:4] - return '1' * leadingzbytes + changebase(inp+checksum, 256, 58) - - def bytes_to_hex_string(b): - if isinstance(b, str): - return b - - return ''.join('{:02x}'.format(y) for y in b) - - def safe_from_hex(s): - return bytes.fromhex(s) - - def from_int_representation_to_bytes(a): - return bytes(str(a), 'utf-8') - - def from_int_to_byte(a): - return bytes([a]) - - def from_byte_to_int(a): - return a - - def from_string_to_bytes(a): - return a if isinstance(a, bytes) else bytes(a, 'utf-8') - - def safe_hexlify(a): - return str(binascii.hexlify(a), 'utf-8') - - def encode(val, base, minlen=0): - base, minlen = int(base), int(minlen) - code_string = get_code_string(base) - result_bytes = bytes() - while val > 0: - curcode = code_string[val % base] - result_bytes = bytes([ord(curcode)]) + result_bytes - val //= base - - pad_size = minlen - len(result_bytes) - - padding_element = b'\x00' if base == 256 else b'1' \ - if base == 58 else b'0' - if (pad_size > 0): - result_bytes = padding_element*pad_size + result_bytes - - result_string = ''.join([chr(y) for y in result_bytes]) - result = result_bytes if base == 256 else result_string - - return result - - def decode(string, base): - if base == 256 and isinstance(string, str): - string = bytes(bytearray.fromhex(string)) - base = int(base) - code_string = get_code_string(base) - result = 0 - if base == 256: - def extract(d, cs): - return d - else: - def extract(d, cs): - return cs.find(d if isinstance(d, str) else chr(d)) - - if base == 16: - string = string.lower() - while len(string) > 0: - result *= base - result += extract(string[0], code_string) - string = string[1:] - return result - - def random_string(x): - return str(os.urandom(x)) diff --git a/src/lib/pybitcointools/bitcoin/ripemd.py b/src/lib/pybitcointools/bitcoin/ripemd.py deleted file mode 100644 index 4b0c6045..00000000 --- a/src/lib/pybitcointools/bitcoin/ripemd.py +++ /dev/null @@ -1,414 +0,0 @@ -## ripemd.py - pure Python implementation of the RIPEMD-160 algorithm. -## Bjorn Edstrom <be@bjrn.se> 16 december 2007. -## -## Copyrights -## ========== -## -## This code is a derived from an implementation by Markus Friedl which is -## subject to the following license. This Python implementation is not -## subject to any other license. -## -##/* -## * Copyright (c) 2001 Markus Friedl. All rights reserved. -## * -## * Redistribution and use in source and binary forms, with or without -## * modification, are permitted provided that the following conditions -## * are met: -## * 1. Redistributions of source code must retain the above copyright -## * notice, this list of conditions and the following disclaimer. -## * 2. Redistributions in binary form must reproduce the above copyright -## * notice, this list of conditions and the following disclaimer in the -## * documentation and/or other materials provided with the distribution. -## * -## * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -## * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -## * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -## * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -## * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -## * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -## * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -## * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -## * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -## * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -## */ -##/* -## * Preneel, Bosselaers, Dobbertin, "The Cryptographic Hash Function RIPEMD-160", -## * RSA Laboratories, CryptoBytes, Volume 3, Number 2, Autumn 1997, -## * ftp://ftp.rsasecurity.com/pub/cryptobytes/crypto3n2.pdf -## */ - -try: - import psyco - psyco.full() -except ImportError: - pass - -import sys - -is_python2 = sys.version_info.major == 2 -#block_size = 1 -digest_size = 20 -digestsize = 20 - -try: - range = xrange -except: - pass - -class RIPEMD160: - """Return a new RIPEMD160 object. An optional string argument - may be provided; if present, this string will be automatically - hashed.""" - - def __init__(self, arg=None): - self.ctx = RMDContext() - if arg: - self.update(arg) - self.dig = None - - def update(self, arg): - """update(arg)""" - RMD160Update(self.ctx, arg, len(arg)) - self.dig = None - - def digest(self): - """digest()""" - if self.dig: - return self.dig - ctx = self.ctx.copy() - self.dig = RMD160Final(self.ctx) - self.ctx = ctx - return self.dig - - def hexdigest(self): - """hexdigest()""" - dig = self.digest() - hex_digest = '' - for d in dig: - if (is_python2): - hex_digest += '%02x' % ord(d) - else: - hex_digest += '%02x' % d - return hex_digest - - def copy(self): - """copy()""" - import copy - return copy.deepcopy(self) - - - -def new(arg=None): - """Return a new RIPEMD160 object. An optional string argument - may be provided; if present, this string will be automatically - hashed.""" - return RIPEMD160(arg) - - - -# -# Private. -# - -class RMDContext: - def __init__(self): - self.state = [0x67452301, 0xEFCDAB89, 0x98BADCFE, - 0x10325476, 0xC3D2E1F0] # uint32 - self.count = 0 # uint64 - self.buffer = [0]*64 # uchar - def copy(self): - ctx = RMDContext() - ctx.state = self.state[:] - ctx.count = self.count - ctx.buffer = self.buffer[:] - return ctx - -K0 = 0x00000000 -K1 = 0x5A827999 -K2 = 0x6ED9EBA1 -K3 = 0x8F1BBCDC -K4 = 0xA953FD4E - -KK0 = 0x50A28BE6 -KK1 = 0x5C4DD124 -KK2 = 0x6D703EF3 -KK3 = 0x7A6D76E9 -KK4 = 0x00000000 - -def ROL(n, x): - return ((x << n) & 0xffffffff) | (x >> (32 - n)) - -def F0(x, y, z): - return x ^ y ^ z - -def F1(x, y, z): - return (x & y) | (((~x) % 0x100000000) & z) - -def F2(x, y, z): - return (x | ((~y) % 0x100000000)) ^ z - -def F3(x, y, z): - return (x & z) | (((~z) % 0x100000000) & y) - -def F4(x, y, z): - return x ^ (y | ((~z) % 0x100000000)) - -def R(a, b, c, d, e, Fj, Kj, sj, rj, X): - a = ROL(sj, (a + Fj(b, c, d) + X[rj] + Kj) % 0x100000000) + e - c = ROL(10, c) - return a % 0x100000000, c - -PADDING = [0x80] + [0]*63 - -import sys -import struct - -def RMD160Transform(state, block): #uint32 state[5], uchar block[64] - x = [0]*16 - if sys.byteorder == 'little': - if is_python2: - x = struct.unpack('<16L', ''.join([chr(x) for x in block[0:64]])) - else: - x = struct.unpack('<16L', bytes(block[0:64])) - else: - raise "Error!!" - a = state[0] - b = state[1] - c = state[2] - d = state[3] - e = state[4] - - #/* Round 1 */ - a, c = R(a, b, c, d, e, F0, K0, 11, 0, x); - e, b = R(e, a, b, c, d, F0, K0, 14, 1, x); - d, a = R(d, e, a, b, c, F0, K0, 15, 2, x); - c, e = R(c, d, e, a, b, F0, K0, 12, 3, x); - b, d = R(b, c, d, e, a, F0, K0, 5, 4, x); - a, c = R(a, b, c, d, e, F0, K0, 8, 5, x); - e, b = R(e, a, b, c, d, F0, K0, 7, 6, x); - d, a = R(d, e, a, b, c, F0, K0, 9, 7, x); - c, e = R(c, d, e, a, b, F0, K0, 11, 8, x); - b, d = R(b, c, d, e, a, F0, K0, 13, 9, x); - a, c = R(a, b, c, d, e, F0, K0, 14, 10, x); - e, b = R(e, a, b, c, d, F0, K0, 15, 11, x); - d, a = R(d, e, a, b, c, F0, K0, 6, 12, x); - c, e = R(c, d, e, a, b, F0, K0, 7, 13, x); - b, d = R(b, c, d, e, a, F0, K0, 9, 14, x); - a, c = R(a, b, c, d, e, F0, K0, 8, 15, x); #/* #15 */ - #/* Round 2 */ - e, b = R(e, a, b, c, d, F1, K1, 7, 7, x); - d, a = R(d, e, a, b, c, F1, K1, 6, 4, x); - c, e = R(c, d, e, a, b, F1, K1, 8, 13, x); - b, d = R(b, c, d, e, a, F1, K1, 13, 1, x); - a, c = R(a, b, c, d, e, F1, K1, 11, 10, x); - e, b = R(e, a, b, c, d, F1, K1, 9, 6, x); - d, a = R(d, e, a, b, c, F1, K1, 7, 15, x); - c, e = R(c, d, e, a, b, F1, K1, 15, 3, x); - b, d = R(b, c, d, e, a, F1, K1, 7, 12, x); - a, c = R(a, b, c, d, e, F1, K1, 12, 0, x); - e, b = R(e, a, b, c, d, F1, K1, 15, 9, x); - d, a = R(d, e, a, b, c, F1, K1, 9, 5, x); - c, e = R(c, d, e, a, b, F1, K1, 11, 2, x); - b, d = R(b, c, d, e, a, F1, K1, 7, 14, x); - a, c = R(a, b, c, d, e, F1, K1, 13, 11, x); - e, b = R(e, a, b, c, d, F1, K1, 12, 8, x); #/* #31 */ - #/* Round 3 */ - d, a = R(d, e, a, b, c, F2, K2, 11, 3, x); - c, e = R(c, d, e, a, b, F2, K2, 13, 10, x); - b, d = R(b, c, d, e, a, F2, K2, 6, 14, x); - a, c = R(a, b, c, d, e, F2, K2, 7, 4, x); - e, b = R(e, a, b, c, d, F2, K2, 14, 9, x); - d, a = R(d, e, a, b, c, F2, K2, 9, 15, x); - c, e = R(c, d, e, a, b, F2, K2, 13, 8, x); - b, d = R(b, c, d, e, a, F2, K2, 15, 1, x); - a, c = R(a, b, c, d, e, F2, K2, 14, 2, x); - e, b = R(e, a, b, c, d, F2, K2, 8, 7, x); - d, a = R(d, e, a, b, c, F2, K2, 13, 0, x); - c, e = R(c, d, e, a, b, F2, K2, 6, 6, x); - b, d = R(b, c, d, e, a, F2, K2, 5, 13, x); - a, c = R(a, b, c, d, e, F2, K2, 12, 11, x); - e, b = R(e, a, b, c, d, F2, K2, 7, 5, x); - d, a = R(d, e, a, b, c, F2, K2, 5, 12, x); #/* #47 */ - #/* Round 4 */ - c, e = R(c, d, e, a, b, F3, K3, 11, 1, x); - b, d = R(b, c, d, e, a, F3, K3, 12, 9, x); - a, c = R(a, b, c, d, e, F3, K3, 14, 11, x); - e, b = R(e, a, b, c, d, F3, K3, 15, 10, x); - d, a = R(d, e, a, b, c, F3, K3, 14, 0, x); - c, e = R(c, d, e, a, b, F3, K3, 15, 8, x); - b, d = R(b, c, d, e, a, F3, K3, 9, 12, x); - a, c = R(a, b, c, d, e, F3, K3, 8, 4, x); - e, b = R(e, a, b, c, d, F3, K3, 9, 13, x); - d, a = R(d, e, a, b, c, F3, K3, 14, 3, x); - c, e = R(c, d, e, a, b, F3, K3, 5, 7, x); - b, d = R(b, c, d, e, a, F3, K3, 6, 15, x); - a, c = R(a, b, c, d, e, F3, K3, 8, 14, x); - e, b = R(e, a, b, c, d, F3, K3, 6, 5, x); - d, a = R(d, e, a, b, c, F3, K3, 5, 6, x); - c, e = R(c, d, e, a, b, F3, K3, 12, 2, x); #/* #63 */ - #/* Round 5 */ - b, d = R(b, c, d, e, a, F4, K4, 9, 4, x); - a, c = R(a, b, c, d, e, F4, K4, 15, 0, x); - e, b = R(e, a, b, c, d, F4, K4, 5, 5, x); - d, a = R(d, e, a, b, c, F4, K4, 11, 9, x); - c, e = R(c, d, e, a, b, F4, K4, 6, 7, x); - b, d = R(b, c, d, e, a, F4, K4, 8, 12, x); - a, c = R(a, b, c, d, e, F4, K4, 13, 2, x); - e, b = R(e, a, b, c, d, F4, K4, 12, 10, x); - d, a = R(d, e, a, b, c, F4, K4, 5, 14, x); - c, e = R(c, d, e, a, b, F4, K4, 12, 1, x); - b, d = R(b, c, d, e, a, F4, K4, 13, 3, x); - a, c = R(a, b, c, d, e, F4, K4, 14, 8, x); - e, b = R(e, a, b, c, d, F4, K4, 11, 11, x); - d, a = R(d, e, a, b, c, F4, K4, 8, 6, x); - c, e = R(c, d, e, a, b, F4, K4, 5, 15, x); - b, d = R(b, c, d, e, a, F4, K4, 6, 13, x); #/* #79 */ - - aa = a; - bb = b; - cc = c; - dd = d; - ee = e; - - a = state[0] - b = state[1] - c = state[2] - d = state[3] - e = state[4] - - #/* Parallel round 1 */ - a, c = R(a, b, c, d, e, F4, KK0, 8, 5, x) - e, b = R(e, a, b, c, d, F4, KK0, 9, 14, x) - d, a = R(d, e, a, b, c, F4, KK0, 9, 7, x) - c, e = R(c, d, e, a, b, F4, KK0, 11, 0, x) - b, d = R(b, c, d, e, a, F4, KK0, 13, 9, x) - a, c = R(a, b, c, d, e, F4, KK0, 15, 2, x) - e, b = R(e, a, b, c, d, F4, KK0, 15, 11, x) - d, a = R(d, e, a, b, c, F4, KK0, 5, 4, x) - c, e = R(c, d, e, a, b, F4, KK0, 7, 13, x) - b, d = R(b, c, d, e, a, F4, KK0, 7, 6, x) - a, c = R(a, b, c, d, e, F4, KK0, 8, 15, x) - e, b = R(e, a, b, c, d, F4, KK0, 11, 8, x) - d, a = R(d, e, a, b, c, F4, KK0, 14, 1, x) - c, e = R(c, d, e, a, b, F4, KK0, 14, 10, x) - b, d = R(b, c, d, e, a, F4, KK0, 12, 3, x) - a, c = R(a, b, c, d, e, F4, KK0, 6, 12, x) #/* #15 */ - #/* Parallel round 2 */ - e, b = R(e, a, b, c, d, F3, KK1, 9, 6, x) - d, a = R(d, e, a, b, c, F3, KK1, 13, 11, x) - c, e = R(c, d, e, a, b, F3, KK1, 15, 3, x) - b, d = R(b, c, d, e, a, F3, KK1, 7, 7, x) - a, c = R(a, b, c, d, e, F3, KK1, 12, 0, x) - e, b = R(e, a, b, c, d, F3, KK1, 8, 13, x) - d, a = R(d, e, a, b, c, F3, KK1, 9, 5, x) - c, e = R(c, d, e, a, b, F3, KK1, 11, 10, x) - b, d = R(b, c, d, e, a, F3, KK1, 7, 14, x) - a, c = R(a, b, c, d, e, F3, KK1, 7, 15, x) - e, b = R(e, a, b, c, d, F3, KK1, 12, 8, x) - d, a = R(d, e, a, b, c, F3, KK1, 7, 12, x) - c, e = R(c, d, e, a, b, F3, KK1, 6, 4, x) - b, d = R(b, c, d, e, a, F3, KK1, 15, 9, x) - a, c = R(a, b, c, d, e, F3, KK1, 13, 1, x) - e, b = R(e, a, b, c, d, F3, KK1, 11, 2, x) #/* #31 */ - #/* Parallel round 3 */ - d, a = R(d, e, a, b, c, F2, KK2, 9, 15, x) - c, e = R(c, d, e, a, b, F2, KK2, 7, 5, x) - b, d = R(b, c, d, e, a, F2, KK2, 15, 1, x) - a, c = R(a, b, c, d, e, F2, KK2, 11, 3, x) - e, b = R(e, a, b, c, d, F2, KK2, 8, 7, x) - d, a = R(d, e, a, b, c, F2, KK2, 6, 14, x) - c, e = R(c, d, e, a, b, F2, KK2, 6, 6, x) - b, d = R(b, c, d, e, a, F2, KK2, 14, 9, x) - a, c = R(a, b, c, d, e, F2, KK2, 12, 11, x) - e, b = R(e, a, b, c, d, F2, KK2, 13, 8, x) - d, a = R(d, e, a, b, c, F2, KK2, 5, 12, x) - c, e = R(c, d, e, a, b, F2, KK2, 14, 2, x) - b, d = R(b, c, d, e, a, F2, KK2, 13, 10, x) - a, c = R(a, b, c, d, e, F2, KK2, 13, 0, x) - e, b = R(e, a, b, c, d, F2, KK2, 7, 4, x) - d, a = R(d, e, a, b, c, F2, KK2, 5, 13, x) #/* #47 */ - #/* Parallel round 4 */ - c, e = R(c, d, e, a, b, F1, KK3, 15, 8, x) - b, d = R(b, c, d, e, a, F1, KK3, 5, 6, x) - a, c = R(a, b, c, d, e, F1, KK3, 8, 4, x) - e, b = R(e, a, b, c, d, F1, KK3, 11, 1, x) - d, a = R(d, e, a, b, c, F1, KK3, 14, 3, x) - c, e = R(c, d, e, a, b, F1, KK3, 14, 11, x) - b, d = R(b, c, d, e, a, F1, KK3, 6, 15, x) - a, c = R(a, b, c, d, e, F1, KK3, 14, 0, x) - e, b = R(e, a, b, c, d, F1, KK3, 6, 5, x) - d, a = R(d, e, a, b, c, F1, KK3, 9, 12, x) - c, e = R(c, d, e, a, b, F1, KK3, 12, 2, x) - b, d = R(b, c, d, e, a, F1, KK3, 9, 13, x) - a, c = R(a, b, c, d, e, F1, KK3, 12, 9, x) - e, b = R(e, a, b, c, d, F1, KK3, 5, 7, x) - d, a = R(d, e, a, b, c, F1, KK3, 15, 10, x) - c, e = R(c, d, e, a, b, F1, KK3, 8, 14, x) #/* #63 */ - #/* Parallel round 5 */ - b, d = R(b, c, d, e, a, F0, KK4, 8, 12, x) - a, c = R(a, b, c, d, e, F0, KK4, 5, 15, x) - e, b = R(e, a, b, c, d, F0, KK4, 12, 10, x) - d, a = R(d, e, a, b, c, F0, KK4, 9, 4, x) - c, e = R(c, d, e, a, b, F0, KK4, 12, 1, x) - b, d = R(b, c, d, e, a, F0, KK4, 5, 5, x) - a, c = R(a, b, c, d, e, F0, KK4, 14, 8, x) - e, b = R(e, a, b, c, d, F0, KK4, 6, 7, x) - d, a = R(d, e, a, b, c, F0, KK4, 8, 6, x) - c, e = R(c, d, e, a, b, F0, KK4, 13, 2, x) - b, d = R(b, c, d, e, a, F0, KK4, 6, 13, x) - a, c = R(a, b, c, d, e, F0, KK4, 5, 14, x) - e, b = R(e, a, b, c, d, F0, KK4, 15, 0, x) - d, a = R(d, e, a, b, c, F0, KK4, 13, 3, x) - c, e = R(c, d, e, a, b, F0, KK4, 11, 9, x) - b, d = R(b, c, d, e, a, F0, KK4, 11, 11, x) #/* #79 */ - - t = (state[1] + cc + d) % 0x100000000; - state[1] = (state[2] + dd + e) % 0x100000000; - state[2] = (state[3] + ee + a) % 0x100000000; - state[3] = (state[4] + aa + b) % 0x100000000; - state[4] = (state[0] + bb + c) % 0x100000000; - state[0] = t % 0x100000000; - - pass - - -def RMD160Update(ctx, inp, inplen): - if type(inp) == str: - inp = [ord(i)&0xff for i in inp] - - have = int((ctx.count // 8) % 64) - inplen = int(inplen) - need = 64 - have - ctx.count += 8 * inplen - off = 0 - if inplen >= need: - if have: - for i in range(need): - ctx.buffer[have+i] = inp[i] - RMD160Transform(ctx.state, ctx.buffer) - off = need - have = 0 - while off + 64 <= inplen: - RMD160Transform(ctx.state, inp[off:]) #<--- - off += 64 - if off < inplen: - # memcpy(ctx->buffer + have, input+off, len-off); - for i in range(inplen - off): - ctx.buffer[have+i] = inp[off+i] - -def RMD160Final(ctx): - size = struct.pack("<Q", ctx.count) - padlen = 64 - ((ctx.count // 8) % 64) - if padlen < 1+8: - padlen += 64 - RMD160Update(ctx, PADDING, padlen-8) - RMD160Update(ctx, size, 8) - return struct.pack("<5L", *ctx.state) - - -assert '37f332f68db77bd9d7edd4969571ad671cf9dd3b' == \ - new('The quick brown fox jumps over the lazy dog').hexdigest() -assert '132072df690933835eb8b6ad0b77e7b6f14acad7' == \ - new('The quick brown fox jumps over the lazy cog').hexdigest() -assert '9c1185a5c5e9fc54612808977ee8f548b2258d31' == \ - new('').hexdigest() diff --git a/src/lib/pybitcointools/bitcoin/stealth.py b/src/lib/pybitcointools/bitcoin/stealth.py deleted file mode 100644 index 7940f99d..00000000 --- a/src/lib/pybitcointools/bitcoin/stealth.py +++ /dev/null @@ -1,100 +0,0 @@ -import main as main -import transaction as tx - -# Shared secrets and uncovering pay keys - - -def shared_secret_sender(scan_pubkey, ephem_privkey): - shared_point = main.multiply(scan_pubkey, ephem_privkey) - shared_secret = main.sha256(main.encode_pubkey(shared_point, 'bin_compressed')) - return shared_secret - - -def shared_secret_receiver(ephem_pubkey, scan_privkey): - shared_point = main.multiply(ephem_pubkey, scan_privkey) - shared_secret = main.sha256(main.encode_pubkey(shared_point, 'bin_compressed')) - return shared_secret - - -def uncover_pay_pubkey_sender(scan_pubkey, spend_pubkey, ephem_privkey): - shared_secret = shared_secret_sender(scan_pubkey, ephem_privkey) - return main.add_pubkeys(spend_pubkey, main.privtopub(shared_secret)) - - -def uncover_pay_pubkey_receiver(scan_privkey, spend_pubkey, ephem_pubkey): - shared_secret = shared_secret_receiver(ephem_pubkey, scan_privkey) - return main.add_pubkeys(spend_pubkey, main.privtopub(shared_secret)) - - -def uncover_pay_privkey(scan_privkey, spend_privkey, ephem_pubkey): - shared_secret = shared_secret_receiver(ephem_pubkey, scan_privkey) - return main.add_privkeys(spend_privkey, shared_secret) - -# Address encoding - -# Functions for basic stealth addresses, -# i.e. one scan key, one spend key, no prefix - - -def pubkeys_to_basic_stealth_address(scan_pubkey, spend_pubkey, magic_byte=42): - # magic_byte = 42 for mainnet, 43 for testnet. - hex_scankey = main.encode_pubkey(scan_pubkey, 'hex_compressed') - hex_spendkey = main.encode_pubkey(spend_pubkey, 'hex_compressed') - hex_data = '00{0:066x}01{1:066x}0100'.format(int(hex_scankey, 16), int(hex_spendkey, 16)) - addr = main.hex_to_b58check(hex_data, magic_byte) - return addr - - -def basic_stealth_address_to_pubkeys(stealth_address): - hex_data = main.b58check_to_hex(stealth_address) - if len(hex_data) != 140: - raise Exception('Stealth address is not of basic type (one scan key, one spend key, no prefix)') - - scan_pubkey = hex_data[2:68] - spend_pubkey = hex_data[70:136] - return scan_pubkey, spend_pubkey - -# Sending stealth payments - - -def mk_stealth_metadata_script(ephem_pubkey, nonce): - op_return = '6a' - msg_size = '26' - version = '06' - return op_return + msg_size + version + '{0:08x}'.format(nonce) + main.encode_pubkey(ephem_pubkey, 'hex_compressed') - - -def mk_stealth_tx_outputs(stealth_addr, value, ephem_privkey, nonce, network='btc'): - - scan_pubkey, spend_pubkey = basic_stealth_address_to_pubkeys(stealth_addr) - - if network == 'btc': - btc_magic_byte = 42 - if stealth_addr != pubkeys_to_basic_stealth_address(scan_pubkey, spend_pubkey, btc_magic_byte): - raise Exception('Invalid btc mainnet stealth address: ' + stealth_addr) - magic_byte_addr = 0 - - elif network == 'testnet': - testnet_magic_byte = 43 - if stealth_addr != pubkeys_to_basic_stealth_address(scan_pubkey, spend_pubkey, testnet_magic_byte): - raise Exception('Invalid testnet stealth address: ' + stealth_addr) - magic_byte_addr = 111 - - ephem_pubkey = main.privkey_to_pubkey(ephem_privkey) - output0 = {'script': mk_stealth_metadata_script(ephem_pubkey, nonce), - 'value': 0} - - pay_pubkey = uncover_pay_pubkey_sender(scan_pubkey, spend_pubkey, ephem_privkey) - pay_addr = main.pubkey_to_address(pay_pubkey, magic_byte_addr) - output1 = {'address': pay_addr, - 'value': value} - - return [output0, output1] - -# Receiving stealth payments - - -def ephem_pubkey_from_tx_script(stealth_tx_script): - if len(stealth_tx_script) != 80: - raise Exception('Wrong format for stealth tx output') - return stealth_tx_script[14:] diff --git a/src/lib/pybitcointools/bitcoin/transaction.py b/src/lib/pybitcointools/bitcoin/transaction.py deleted file mode 100644 index 4a501504..00000000 --- a/src/lib/pybitcointools/bitcoin/transaction.py +++ /dev/null @@ -1,514 +0,0 @@ -#!/usr/bin/python -import binascii, re, json, copy, sys -from .main import * -from _functools import reduce - -### Hex to bin converter and vice versa for objects - - -def json_is_base(obj, base): - if not is_python2 and isinstance(obj, bytes): - return False - - alpha = get_code_string(base) - if isinstance(obj, string_types): - for i in range(len(obj)): - if alpha.find(obj[i]) == -1: - return False - return True - elif isinstance(obj, int_types) or obj is None: - return True - elif isinstance(obj, list): - for i in range(len(obj)): - if not json_is_base(obj[i], base): - return False - return True - else: - for x in obj: - if not json_is_base(obj[x], base): - return False - return True - - -def json_changebase(obj, changer): - if isinstance(obj, string_or_bytes_types): - return changer(obj) - elif isinstance(obj, int_types) or obj is None: - return obj - elif isinstance(obj, list): - return [json_changebase(x, changer) for x in obj] - return dict((x, json_changebase(obj[x], changer)) for x in obj) - -# Transaction serialization and deserialization - - -def deserialize(tx): - if isinstance(tx, str) and re.match('^[0-9a-fA-F]*$', tx): - #tx = bytes(bytearray.fromhex(tx)) - return json_changebase(deserialize(binascii.unhexlify(tx)), - lambda x: safe_hexlify(x)) - # http://stackoverflow.com/questions/4851463/python-closure-write-to-variable-in-parent-scope - # Python's scoping rules are demented, requiring me to make pos an object - # so that it is call-by-reference - pos = [0] - - def read_as_int(bytez): - pos[0] += bytez - return decode(tx[pos[0]-bytez:pos[0]][::-1], 256) - - def read_var_int(): - pos[0] += 1 - - val = from_byte_to_int(tx[pos[0]-1]) - if val < 253: - return val - return read_as_int(pow(2, val - 252)) - - def read_bytes(bytez): - pos[0] += bytez - return tx[pos[0]-bytez:pos[0]] - - def read_var_string(): - size = read_var_int() - return read_bytes(size) - - obj = {"ins": [], "outs": []} - obj["version"] = read_as_int(4) - ins = read_var_int() - for i in range(ins): - obj["ins"].append({ - "outpoint": { - "hash": read_bytes(32)[::-1], - "index": read_as_int(4) - }, - "script": read_var_string(), - "sequence": read_as_int(4) - }) - outs = read_var_int() - for i in range(outs): - obj["outs"].append({ - "value": read_as_int(8), - "script": read_var_string() - }) - obj["locktime"] = read_as_int(4) - return obj - -def serialize(txobj): - #if isinstance(txobj, bytes): - # txobj = bytes_to_hex_string(txobj) - o = [] - if json_is_base(txobj, 16): - json_changedbase = json_changebase(txobj, lambda x: binascii.unhexlify(x)) - hexlified = safe_hexlify(serialize(json_changedbase)) - return hexlified - o.append(encode(txobj["version"], 256, 4)[::-1]) - o.append(num_to_var_int(len(txobj["ins"]))) - for inp in txobj["ins"]: - o.append(inp["outpoint"]["hash"][::-1]) - o.append(encode(inp["outpoint"]["index"], 256, 4)[::-1]) - o.append(num_to_var_int(len(inp["script"]))+(inp["script"] if inp["script"] or is_python2 else bytes())) - o.append(encode(inp["sequence"], 256, 4)[::-1]) - o.append(num_to_var_int(len(txobj["outs"]))) - for out in txobj["outs"]: - o.append(encode(out["value"], 256, 8)[::-1]) - o.append(num_to_var_int(len(out["script"]))+out["script"]) - o.append(encode(txobj["locktime"], 256, 4)[::-1]) - - return ''.join(o) if is_python2 else reduce(lambda x,y: x+y, o, bytes()) - -# Hashing transactions for signing - -SIGHASH_ALL = 1 -SIGHASH_NONE = 2 -SIGHASH_SINGLE = 3 -# this works like SIGHASH_ANYONECANPAY | SIGHASH_ALL, might as well make it explicit while -# we fix the constant -SIGHASH_ANYONECANPAY = 0x81 - - -def signature_form(tx, i, script, hashcode=SIGHASH_ALL): - i, hashcode = int(i), int(hashcode) - if isinstance(tx, string_or_bytes_types): - return serialize(signature_form(deserialize(tx), i, script, hashcode)) - newtx = copy.deepcopy(tx) - for inp in newtx["ins"]: - inp["script"] = "" - newtx["ins"][i]["script"] = script - if hashcode == SIGHASH_NONE: - newtx["outs"] = [] - elif hashcode == SIGHASH_SINGLE: - newtx["outs"] = newtx["outs"][:len(newtx["ins"])] - for out in newtx["outs"][:len(newtx["ins"]) - 1]: - out['value'] = 2**64 - 1 - out['script'] = "" - elif hashcode == SIGHASH_ANYONECANPAY: - newtx["ins"] = [newtx["ins"][i]] - else: - pass - return newtx - -# Making the actual signatures - - -def der_encode_sig(v, r, s): - b1, b2 = safe_hexlify(encode(r, 256)), safe_hexlify(encode(s, 256)) - if len(b1) and b1[0] in '89abcdef': - b1 = '00' + b1 - if len(b2) and b2[0] in '89abcdef': - b2 = '00' + b2 - left = '02'+encode(len(b1)//2, 16, 2)+b1 - right = '02'+encode(len(b2)//2, 16, 2)+b2 - return '30'+encode(len(left+right)//2, 16, 2)+left+right - -def der_decode_sig(sig): - leftlen = decode(sig[6:8], 16)*2 - left = sig[8:8+leftlen] - rightlen = decode(sig[10+leftlen:12+leftlen], 16)*2 - right = sig[12+leftlen:12+leftlen+rightlen] - return (None, decode(left, 16), decode(right, 16)) - -def is_bip66(sig): - """Checks hex DER sig for BIP66 consistency""" - #https://raw.githubusercontent.com/bitcoin/bips/master/bip-0066.mediawiki - #0x30 [total-len] 0x02 [R-len] [R] 0x02 [S-len] [S] [sighash] - sig = bytearray.fromhex(sig) if re.match('^[0-9a-fA-F]*$', sig) else bytearray(sig) - if (sig[0] == 0x30) and (sig[1] == len(sig)-2): # check if sighash is missing - sig.extend(b"\1") # add SIGHASH_ALL for testing - #assert (sig[-1] & 124 == 0) and (not not sig[-1]), "Bad SIGHASH value" - - if len(sig) < 9 or len(sig) > 73: return False - if (sig[0] != 0x30): return False - if (sig[1] != len(sig)-3): return False - rlen = sig[3] - if (5+rlen >= len(sig)): return False - slen = sig[5+rlen] - if (rlen + slen + 7 != len(sig)): return False - if (sig[2] != 0x02): return False - if (rlen == 0): return False - if (sig[4] & 0x80): return False - if (rlen > 1 and (sig[4] == 0x00) and not (sig[5] & 0x80)): return False - if (sig[4+rlen] != 0x02): return False - if (slen == 0): return False - if (sig[rlen+6] & 0x80): return False - if (slen > 1 and (sig[6+rlen] == 0x00) and not (sig[7+rlen] & 0x80)): - return False - return True - -def txhash(tx, hashcode=None): - if isinstance(tx, str) and re.match('^[0-9a-fA-F]*$', tx): - tx = changebase(tx, 16, 256) - if hashcode: - return dbl_sha256(from_string_to_bytes(tx) + encode(int(hashcode), 256, 4)[::-1]) - else: - return safe_hexlify(bin_dbl_sha256(tx)[::-1]) - - -def bin_txhash(tx, hashcode=None): - return binascii.unhexlify(txhash(tx, hashcode)) - - -def ecdsa_tx_sign(tx, priv, hashcode=SIGHASH_ALL): - rawsig = ecdsa_raw_sign(bin_txhash(tx, hashcode), priv) - return der_encode_sig(*rawsig)+encode(hashcode, 16, 2) - - -def ecdsa_tx_verify(tx, sig, pub, hashcode=SIGHASH_ALL): - return ecdsa_raw_verify(bin_txhash(tx, hashcode), der_decode_sig(sig), pub) - - -def ecdsa_tx_recover(tx, sig, hashcode=SIGHASH_ALL): - z = bin_txhash(tx, hashcode) - _, r, s = der_decode_sig(sig) - left = ecdsa_raw_recover(z, (0, r, s)) - right = ecdsa_raw_recover(z, (1, r, s)) - return (encode_pubkey(left, 'hex'), encode_pubkey(right, 'hex')) - -# Scripts - - -def mk_pubkey_script(addr): - # Keep the auxiliary functions around for altcoins' sake - return '76a914' + b58check_to_hex(addr) + '88ac' - - -def mk_scripthash_script(addr): - return 'a914' + b58check_to_hex(addr) + '87' - -# Address representation to output script - - -def address_to_script(addr): - if addr[0] == '3' or addr[0] == '2': - return mk_scripthash_script(addr) - else: - return mk_pubkey_script(addr) - -# Output script to address representation - - -def script_to_address(script, vbyte=0): - if re.match('^[0-9a-fA-F]*$', script): - script = binascii.unhexlify(script) - if script[:3] == b'\x76\xa9\x14' and script[-2:] == b'\x88\xac' and len(script) == 25: - return bin_to_b58check(script[3:-2], vbyte) # pubkey hash addresses - else: - if vbyte in [111, 196]: - # Testnet - scripthash_byte = 196 - elif vbyte == 0: - # Mainnet - scripthash_byte = 5 - else: - scripthash_byte = vbyte - # BIP0016 scripthash addresses - return bin_to_b58check(script[2:-1], scripthash_byte) - - -def p2sh_scriptaddr(script, magicbyte=5): - if re.match('^[0-9a-fA-F]*$', script): - script = binascii.unhexlify(script) - return hex_to_b58check(hash160(script), magicbyte) -scriptaddr = p2sh_scriptaddr - - -def deserialize_script(script): - if isinstance(script, str) and re.match('^[0-9a-fA-F]*$', script): - return json_changebase(deserialize_script(binascii.unhexlify(script)), - lambda x: safe_hexlify(x)) - out, pos = [], 0 - while pos < len(script): - code = from_byte_to_int(script[pos]) - if code == 0: - out.append(None) - pos += 1 - elif code <= 75: - out.append(script[pos+1:pos+1+code]) - pos += 1 + code - elif code <= 78: - szsz = pow(2, code - 76) - sz = decode(script[pos+szsz: pos:-1], 256) - out.append(script[pos + 1 + szsz:pos + 1 + szsz + sz]) - pos += 1 + szsz + sz - elif code <= 96: - out.append(code - 80) - pos += 1 - else: - out.append(code) - pos += 1 - return out - - -def serialize_script_unit(unit): - if isinstance(unit, int): - if unit < 16: - return from_int_to_byte(unit + 80) - else: - return from_int_to_byte(unit) - elif unit is None: - return b'\x00' - else: - if len(unit) <= 75: - return from_int_to_byte(len(unit))+unit - elif len(unit) < 256: - return from_int_to_byte(76)+from_int_to_byte(len(unit))+unit - elif len(unit) < 65536: - return from_int_to_byte(77)+encode(len(unit), 256, 2)[::-1]+unit - else: - return from_int_to_byte(78)+encode(len(unit), 256, 4)[::-1]+unit - - -if is_python2: - def serialize_script(script): - if json_is_base(script, 16): - return binascii.hexlify(serialize_script(json_changebase(script, - lambda x: binascii.unhexlify(x)))) - return ''.join(map(serialize_script_unit, script)) -else: - def serialize_script(script): - if json_is_base(script, 16): - return safe_hexlify(serialize_script(json_changebase(script, - lambda x: binascii.unhexlify(x)))) - - result = bytes() - for b in map(serialize_script_unit, script): - result += b if isinstance(b, bytes) else bytes(b, 'utf-8') - return result - - -def mk_multisig_script(*args): # [pubs],k or pub1,pub2...pub[n],k - if isinstance(args[0], list): - pubs, k = args[0], int(args[1]) - else: - pubs = list(filter(lambda x: len(str(x)) >= 32, args)) - k = int(args[len(pubs)]) - return serialize_script([k]+pubs+[len(pubs)]+[0xae]) - -# Signing and verifying - - -def verify_tx_input(tx, i, script, sig, pub): - if re.match('^[0-9a-fA-F]*$', tx): - tx = binascii.unhexlify(tx) - if re.match('^[0-9a-fA-F]*$', script): - script = binascii.unhexlify(script) - if not re.match('^[0-9a-fA-F]*$', sig): - sig = safe_hexlify(sig) - hashcode = decode(sig[-2:], 16) - modtx = signature_form(tx, int(i), script, hashcode) - return ecdsa_tx_verify(modtx, sig, pub, hashcode) - - -def sign(tx, i, priv, hashcode=SIGHASH_ALL): - i = int(i) - if (not is_python2 and isinstance(re, bytes)) or not re.match('^[0-9a-fA-F]*$', tx): - return binascii.unhexlify(sign(safe_hexlify(tx), i, priv)) - if len(priv) <= 33: - priv = safe_hexlify(priv) - pub = privkey_to_pubkey(priv) - address = pubkey_to_address(pub) - signing_tx = signature_form(tx, i, mk_pubkey_script(address), hashcode) - sig = ecdsa_tx_sign(signing_tx, priv, hashcode) - txobj = deserialize(tx) - txobj["ins"][i]["script"] = serialize_script([sig, pub]) - return serialize(txobj) - - -def signall(tx, priv): - # if priv is a dictionary, assume format is - # { 'txinhash:txinidx' : privkey } - if isinstance(priv, dict): - for e, i in enumerate(deserialize(tx)["ins"]): - k = priv["%s:%d" % (i["outpoint"]["hash"], i["outpoint"]["index"])] - tx = sign(tx, e, k) - else: - for i in range(len(deserialize(tx)["ins"])): - tx = sign(tx, i, priv) - return tx - - -def multisign(tx, i, script, pk, hashcode=SIGHASH_ALL): - if re.match('^[0-9a-fA-F]*$', tx): - tx = binascii.unhexlify(tx) - if re.match('^[0-9a-fA-F]*$', script): - script = binascii.unhexlify(script) - modtx = signature_form(tx, i, script, hashcode) - return ecdsa_tx_sign(modtx, pk, hashcode) - - -def apply_multisignatures(*args): - # tx,i,script,sigs OR tx,i,script,sig1,sig2...,sig[n] - tx, i, script = args[0], int(args[1]), args[2] - sigs = args[3] if isinstance(args[3], list) else list(args[3:]) - - if isinstance(script, str) and re.match('^[0-9a-fA-F]*$', script): - script = binascii.unhexlify(script) - sigs = [binascii.unhexlify(x) if x[:2] == '30' else x for x in sigs] - if isinstance(tx, str) and re.match('^[0-9a-fA-F]*$', tx): - return safe_hexlify(apply_multisignatures(binascii.unhexlify(tx), i, script, sigs)) - - # Not pushing empty elements on the top of the stack if passing no - # script (in case of bare multisig inputs there is no script) - script_blob = [] if script.__len__() == 0 else [script] - - txobj = deserialize(tx) - txobj["ins"][i]["script"] = serialize_script([None]+sigs+script_blob) - return serialize(txobj) - - -def is_inp(arg): - return len(arg) > 64 or "output" in arg or "outpoint" in arg - - -def mktx(*args): - # [in0, in1...],[out0, out1...] or in0, in1 ... out0 out1 ... - ins, outs = [], [] - for arg in args: - if isinstance(arg, list): - for a in arg: (ins if is_inp(a) else outs).append(a) - else: - (ins if is_inp(arg) else outs).append(arg) - - txobj = {"locktime": 0, "version": 1, "ins": [], "outs": []} - for i in ins: - if isinstance(i, dict) and "outpoint" in i: - txobj["ins"].append(i) - else: - if isinstance(i, dict) and "output" in i: - i = i["output"] - txobj["ins"].append({ - "outpoint": {"hash": i[:64], "index": int(i[65:])}, - "script": "", - "sequence": 4294967295 - }) - for o in outs: - if isinstance(o, string_or_bytes_types): - addr = o[:o.find(':')] - val = int(o[o.find(':')+1:]) - o = {} - if re.match('^[0-9a-fA-F]*$', addr): - o["script"] = addr - else: - o["address"] = addr - o["value"] = val - - outobj = {} - if "address" in o: - outobj["script"] = address_to_script(o["address"]) - elif "script" in o: - outobj["script"] = o["script"] - else: - raise Exception("Could not find 'address' or 'script' in output.") - outobj["value"] = o["value"] - txobj["outs"].append(outobj) - - return serialize(txobj) - - -def select(unspent, value): - value = int(value) - high = [u for u in unspent if u["value"] >= value] - high.sort(key=lambda u: u["value"]) - low = [u for u in unspent if u["value"] < value] - low.sort(key=lambda u: -u["value"]) - if len(high): - return [high[0]] - i, tv = 0, 0 - while tv < value and i < len(low): - tv += low[i]["value"] - i += 1 - if tv < value: - raise Exception("Not enough funds") - return low[:i] - -# Only takes inputs of the form { "output": blah, "value": foo } - - -def mksend(*args): - argz, change, fee = args[:-2], args[-2], int(args[-1]) - ins, outs = [], [] - for arg in argz: - if isinstance(arg, list): - for a in arg: - (ins if is_inp(a) else outs).append(a) - else: - (ins if is_inp(arg) else outs).append(arg) - - isum = sum([i["value"] for i in ins]) - osum, outputs2 = 0, [] - for o in outs: - if isinstance(o, string_types): - o2 = { - "address": o[:o.find(':')], - "value": int(o[o.find(':')+1:]) - } - else: - o2 = o - outputs2.append(o2) - osum += o2["value"] - - if isum < osum+fee: - raise Exception("Not enough money") - elif isum > osum+fee+5430: - outputs2 += [{"address": change, "value": isum-osum-fee}] - - return mktx(ins, outputs2) diff --git a/src/lib/pybitcointools/pybtctool b/src/lib/pybitcointools/pybtctool deleted file mode 100644 index 2f6b3dcc..00000000 --- a/src/lib/pybitcointools/pybtctool +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/python -import sys, json, re -from bitcoin import * - -if len(sys.argv) == 1: - print "pybtctool <command> <arg1> <arg2> ..." -else: - cmdargs, preargs, kwargs = [], [], {} - i = 2 - # Process first arg tag - if sys.argv[1] == '-s': - preargs.extend(re.findall(r'\S\S*', sys.stdin.read())) - elif sys.argv[1] == '-B': - preargs.extend([sys.stdin.read()]) - elif sys.argv[1] == '-b': - preargs.extend([sys.stdin.read()[:-1]]) - elif sys.argv[1] == '-j': - preargs.extend([json.loads(sys.stdin.read())]) - elif sys.argv[1] == '-J': - preargs.extend(json.loads(sys.stdin.read())) - else: - i = 1 - while i < len(sys.argv): - if sys.argv[i][:2] == '--': - kwargs[sys.argv[i][2:]] = sys.argv[i+1] - i += 2 - else: - cmdargs.append(sys.argv[i]) - i += 1 - cmd = cmdargs[0] - args = preargs + cmdargs[1:] - o = vars()[cmd](*args, **kwargs) - if isinstance(o, (list, dict)): - print json.dumps(o) - else: - print o diff --git a/src/lib/pybitcointools/setup.py b/src/lib/pybitcointools/setup.py deleted file mode 100644 index e01a9bfc..00000000 --- a/src/lib/pybitcointools/setup.py +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env python -try: - from setuptools import setup -except ImportError: - from distutils.core import setup - -setup(name='bitcoin', - version='1.1.42', - description='Python Bitcoin Tools', - author='Vitalik Buterin', - author_email='vbuterin@gmail.com', - url='http://github.com/vbuterin/pybitcointools', - packages=['bitcoin'], - scripts=['pybtctool'], - include_package_data=True, - data_files=[("", ["LICENSE"]), ("bitcoin", ["bitcoin/english.txt"])], - ) diff --git a/src/lib/pybitcointools/test.py b/src/lib/pybitcointools/test.py deleted file mode 100644 index 8fb8bdc1..00000000 --- a/src/lib/pybitcointools/test.py +++ /dev/null @@ -1,496 +0,0 @@ -import json -import os -import random -import unittest - -import bitcoin.ripemd as ripemd -from bitcoin import * - - -class TestECCArithmetic(unittest.TestCase): - - @classmethod - def setUpClass(cls): - print('Starting ECC arithmetic tests') - - def test_all(self): - for i in range(8): - print('### Round %d' % (i+1)) - x, y = random.randrange(2**256), random.randrange(2**256) - self.assertEqual( - multiply(multiply(G, x), y)[0], - multiply(multiply(G, y), x)[0] - ) - self.assertEqual( - - add_pubkeys(multiply(G, x), multiply(G, y))[0], - multiply(G, add_privkeys(x, y))[0] - ) - - hx, hy = encode(x % N, 16, 64), encode(y % N, 16, 64) - self.assertEqual( - multiply(multiply(G, hx), hy)[0], - multiply(multiply(G, hy), hx)[0] - ) - self.assertEqual( - add_pubkeys(multiply(G, hx), multiply(G, hy))[0], - multiply(G, add_privkeys(hx, hy))[0] - ) - self.assertEqual( - b58check_to_hex(pubtoaddr(privtopub(x))), - b58check_to_hex(pubtoaddr(multiply(G, hx), 23)) - ) - - p = privtopub(sha256(str(x))) - if i % 2 == 1: - p = changebase(p, 16, 256) - self.assertEqual(p, decompress(compress(p))) - self.assertEqual(G[0], multiply(divide(G, x), x)[0]) - - -class TestBases(unittest.TestCase): - - @classmethod - def setUpClass(cls): - print('Starting base change tests') - - def test_all(self): - data = [ - [10, '65535', 16, 'ffff'], - [16, 'deadbeef', 10, '3735928559'], - [10, '0', 16, ''], - [256, b'34567', 10, '219919234615'], - [10, '444', 16, '1bc'], - [256, b'\x03\x04\x05\x06\x07', 10, '12952339975'], - [16, '3132333435', 256, b'12345'] - ] - for prebase, preval, postbase, postval in data: - self.assertEqual(changebase(preval, prebase, postbase), postval) - - for i in range(100): - x = random.randrange(1, 9999999999999999) - frm = random.choice([2, 10, 16, 58, 256]) - to = random.choice([2, 10, 16, 58, 256]) - self.assertEqual(decode(encode(x, to), to), x) - self.assertEqual(changebase(encode(x, frm), frm, to), encode(x, to)) - self.assertEqual(decode(changebase(encode(x, frm), frm, to), to), x) - - -class TestElectrumWalletInternalConsistency(unittest.TestCase): - - @classmethod - def setUpClass(cls): - print('Starting Electrum wallet internal consistency tests') - - def test_all(self): - for i in range(3): - seed = sha256(str(random.randrange(2**40)))[:32] - mpk = electrum_mpk(seed) - for i in range(5): - pk = electrum_privkey(seed, i) - pub = electrum_pubkey((mpk, seed)[i % 2], i) - pub2 = privtopub(pk) - self.assertEqual( - pub, - pub2, - 'Does not match! Details:\nseed: %s\nmpk: %s\npriv: %s\npub: %s\npub2: %s' % ( - seed, mpk, pk, pub, pub2 - ) - ) - - -class TestRawSignRecover(unittest.TestCase): - - @classmethod - def setUpClass(cls): - print("Basic signing and recovery tests") - - def test_all(self): - for i in range(20): - k = sha256(str(i)) - s = ecdsa_raw_sign('35' * 32, k) - self.assertEqual( - ecdsa_raw_recover('35' * 32, s), - decode_pubkey(privtopub(k)) - ) - - -class TestTransactionSignVerify(unittest.TestCase): - - @classmethod - def setUpClass(cls): - print("Transaction-style signing and verification tests") - - def test_all(self): - alphabet = "1234567890qwertyuiopasdfghjklzxcvbnm" - for i in range(10): - msg = ''.join([random.choice(alphabet) for i in range(random.randrange(20, 200))]) - priv = sha256(str(random.randrange(2**256))) - pub = privtopub(priv) - sig = ecdsa_tx_sign(msg, priv) - self.assertTrue( - ecdsa_tx_verify(msg, sig, pub), - "Verification error" - ) - - self.assertIn( - pub, - ecdsa_tx_recover(msg, sig), - "Recovery failed" - ) - - -class TestSerialize(unittest.TestCase): - - def test_serialize(self): - tx = '0100000001239f932c780e517015842f3b02ff765fba97f9f63f9f1bc718b686a56ed9c73400000000fd5d010047304402200c40fa58d3f6d5537a343cf9c8d13bc7470baf1d13867e0de3e535cd6b4354c802200f2b48f67494835b060d0b2ff85657d2ba2d9ea4e697888c8cb580e8658183a801483045022056f488c59849a4259e7cef70fe5d6d53a4bd1c59a195b0577bd81cb76044beca022100a735b319fa66af7b178fc719b93f905961ef4d4446deca8757a90de2106dd98a014cc95241046c7d87fd72caeab48e937f2feca9e9a4bd77f0eff4ebb2dbbb9855c023e334e188d32aaec4632ea4cbc575c037d8101aec73d029236e7b1c2380f3e4ad7edced41046fd41cddf3bbda33a240b417a825cc46555949917c7ccf64c59f42fd8dfe95f34fae3b09ed279c8c5b3530510e8cca6230791102eef9961d895e8db54af0563c410488d618b988efd2511fc1f9c03f11c210808852b07fe46128c1a6b1155aa22cdf4b6802460ba593db2d11c7e6cbe19cedef76b7bcabd05d26fd97f4c5a59b225053aeffffffff0310270000000000001976a914a89733100315c37d228a529853af341a9d290a4588ac409c00000000000017a9142b56f9a4009d9ff99b8f97bea4455cd71135f5dd87409c00000000000017a9142b56f9a4009d9ff99b8f97bea4455cd71135f5dd8700000000' - self.assertEqual( - serialize(deserialize(tx)), - tx, - "Serialize roundtrip failed" - ) - - def test_serialize_script(self): - script = '47304402200c40fa58d3f6d5537a343cf9c8d13bc7470baf1d13867e0de3e535cd6b4354c802200f2b48f67494835b060d0b2ff85657d2ba2d9ea4e697888c8cb580e8658183a801483045022056f488c59849a4259e7cef70fe5d6d53a4bd1c59a195b0577bd81cb76044beca022100a735b319fa66af7b178fc719b93f905961ef4d4446deca8757a90de2106dd98a014cc95241046c7d87fd72caeab48e937f2feca9e9a4bd77f0eff4ebb2dbbb9855c023e334e188d32aaec4632ea4cbc575c037d8101aec73d029236e7b1c2380f3e4ad7edced41046fd41cddf3bbda33a240b417a825cc46555949917c7ccf64c59f42fd8dfe95f34fae3b09ed279c8c5b3530510e8cca6230791102eef9961d895e8db54af0563c410488d618b988efd2511fc1f9c03f11c210808852b07fe46128c1a6b1155aa22cdf4b6802460ba593db2d11c7e6cbe19cedef76b7bcabd05d26fd97f4c5a59b225053ae' - self.assertEqual( - serialize_script(deserialize_script(script)), - script, - "Script serialize roundtrip failed" - ) - - -class TestTransaction(unittest.TestCase): - @classmethod - def setUpClass(cls): - print("Attempting transaction creation") - - # FIXME: I don't know how to write this as a unit test. - # What should be asserted? - def test_all(self): - privs = [sha256(str(random.randrange(2**256))) for x in range(4)] - pubs = [privtopub(priv) for priv in privs] - addresses = [pubtoaddr(pub) for pub in pubs] - mscript = mk_multisig_script(pubs[1:], 2, 3) - msigaddr = p2sh_scriptaddr(mscript) - tx = mktx(['01'*32+':1', '23'*32+':2'], [msigaddr+':20202', addresses[0]+':40404']) - tx1 = sign(tx, 1, privs[0]) - - sig1 = multisign(tx, 0, mscript, privs[1]) - self.assertTrue(verify_tx_input(tx1, 0, mscript, sig1, pubs[1]), "Verification Error") - - sig3 = multisign(tx, 0, mscript, privs[3]) - self.assertTrue(verify_tx_input(tx1, 0, mscript, sig3, pubs[3]), "Verification Error") - - tx2 = apply_multisignatures(tx1, 0, mscript, [sig1, sig3]) - print("Outputting transaction: ", tx2) - - # https://github.com/vbuterin/pybitcointools/issues/71 - def test_multisig(self): - script = mk_multisig_script(["0254236f7d1124fc07600ad3eec5ac47393bf963fbf0608bcce255e685580d16d9", - "03560cad89031c412ad8619398bd43b3d673cb5bdcdac1afc46449382c6a8e0b2b"], - 2) - - self.assertEqual(p2sh_scriptaddr(script), "33byJBaS5N45RHFcatTSt9ZjiGb6nK4iV3") - - self.assertEqual(p2sh_scriptaddr(script, 0x05), "33byJBaS5N45RHFcatTSt9ZjiGb6nK4iV3") - self.assertEqual(p2sh_scriptaddr(script, 5), "33byJBaS5N45RHFcatTSt9ZjiGb6nK4iV3") - - self.assertEqual(p2sh_scriptaddr(script, 0xc4), "2MuABMvWTgpZRd4tAG25KW6YzvcoGVZDZYP") - self.assertEqual(p2sh_scriptaddr(script, 196), "2MuABMvWTgpZRd4tAG25KW6YzvcoGVZDZYP") - - -class TestDeterministicGenerate(unittest.TestCase): - @classmethod - def setUpClass(cls): - print("Beginning RFC6979 deterministic signing tests") - - def test_all(self): - # Created with python-ecdsa 0.9 - # Code to make your own vectors: - # class gen: - # def order(self): return 115792089237316195423570985008687907852837564279074904382605163141518161494337 - # dummy = gen() - # for i in range(10): ecdsa.rfc6979.generate_k(dummy, i, hashlib.sha256, hashlib.sha256(str(i)).digest()) - test_vectors = [ - 32783320859482229023646250050688645858316445811207841524283044428614360139869, - 109592113955144883013243055602231029997040992035200230706187150761552110229971, - 65765393578006003630736298397268097590176526363988568884298609868706232621488, - 85563144787585457107933685459469453513056530050186673491900346620874099325918, - 99829559501561741463404068005537785834525504175465914981205926165214632019533, - 7755945018790142325513649272940177083855222863968691658328003977498047013576, - 81516639518483202269820502976089105897400159721845694286620077204726637043798, - 52824159213002398817852821148973968315579759063230697131029801896913602807019, - 44033460667645047622273556650595158811264350043302911918907282441675680538675, - 32396602643737403620316035551493791485834117358805817054817536312402837398361 - ] - - for i, ti in enumerate(test_vectors): - mine = deterministic_generate_k(bin_sha256(str(i)), encode(i, 256, 32)) - self.assertEqual( - ti, - mine, - "Test vector does not match. Details:\n%s\n%s" % ( - ti, - mine - ) - ) - - -class TestBIP0032(unittest.TestCase): - """See: https://en.bitcoin.it/wiki/BIP_0032""" - @classmethod - def setUpClass(cls): - print("Beginning BIP0032 tests") - - def _full_derive(self, key, chain): - if len(chain) == 0: - return key - elif chain[0] == 'pub': - return self._full_derive(bip32_privtopub(key), chain[1:]) - else: - return self._full_derive(bip32_ckd(key, chain[0]), chain[1:]) - - def test_all(self): - test_vectors = [ - [[], 'xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi'], - [['pub'], 'xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8'], - [[2**31], 'xprv9uHRZZhk6KAJC1avXpDAp4MDc3sQKNxDiPvvkX8Br5ngLNv1TxvUxt4cV1rGL5hj6KCesnDYUhd7oWgT11eZG7XnxHrnYeSvkzY7d2bhkJ7'], - [[2**31, 1], 'xprv9wTYmMFdV23N2TdNG573QoEsfRrWKQgWeibmLntzniatZvR9BmLnvSxqu53Kw1UmYPxLgboyZQaXwTCg8MSY3H2EU4pWcQDnRnrVA1xe8fs'], - [[2**31, 1, 2**31 + 2], 'xprv9z4pot5VBttmtdRTWfWQmoH1taj2axGVzFqSb8C9xaxKymcFzXBDptWmT7FwuEzG3ryjH4ktypQSAewRiNMjANTtpgP4mLTj34bhnZX7UiM'], - [[2**31, 1, 2**31 + 2, 'pub', 2, 1000000000], 'xpub6H1LXWLaKsWFhvm6RVpEL9P4KfRZSW7abD2ttkWP3SSQvnyA8FSVqNTEcYFgJS2UaFcxupHiYkro49S8yGasTvXEYBVPamhGW6cFJodrTHy'] - ] - - mk = bip32_master_key(safe_from_hex('000102030405060708090a0b0c0d0e0f')) - - for tv in test_vectors: - left, right = self._full_derive(mk, tv[0]), tv[1] - self.assertEqual( - left, - right, - r"Test vector does not match. Details: \n%s\n%s\n\%s" % ( - tv[0], - [x.encode('hex') if isinstance(x, str) else x for x in bip32_deserialize(left)], - [x.encode('hex') if isinstance(x, str) else x for x in bip32_deserialize(right)], - ) - ) - - def test_all_testnet(self): - test_vectors = [ - [[], 'tprv8ZgxMBicQKsPeDgjzdC36fs6bMjGApWDNLR9erAXMs5skhMv36j9MV5ecvfavji5khqjWaWSFhN3YcCUUdiKH6isR4Pwy3U5y5egddBr16m'], - [['pub'], 'tpubD6NzVbkrYhZ4XgiXtGrdW5XDAPFCL9h7we1vwNCpn8tGbBcgfVYjXyhWo4E1xkh56hjod1RhGjxbaTLV3X4FyWuejifB9jusQ46QzG87VKp'], - [[2**31], 'tprv8bxNLu25VazNnppTCP4fyhyCvBHcYtzE3wr3cwYeL4HA7yf6TLGEUdS4QC1vLT63TkjRssqJe4CvGNEC8DzW5AoPUw56D1Ayg6HY4oy8QZ9'], - [[2**31, 1], 'tprv8e8VYgZxtHsSdGrtvdxYaSrryZGiYviWzGWtDDKTGh5NMXAEB8gYSCLHpFCywNs5uqV7ghRjimALQJkRFZnUrLHpzi2pGkwqLtbubgWuQ8q'], - [[2**31, 1, 2**31 + 2], 'tprv8gjmbDPpbAirVSezBEMuwSu1Ci9EpUJWKokZTYccSZSomNMLytWyLdtDNHRbucNaRJWWHANf9AzEdWVAqahfyRjVMKbNRhBmxAM8EJr7R15'], - [[2**31, 1, 2**31 + 2, 'pub', 2, 1000000000], 'tpubDHNy3kAG39ThyiwwsgoKY4iRenXDRtce8qdCFJZXPMCJg5dsCUHayp84raLTpvyiNA9sXPob5rgqkKvkN8S7MMyXbnEhGJMW64Cf4vFAoaF'] - ] - - mk = bip32_master_key(safe_from_hex('000102030405060708090a0b0c0d0e0f'), TESTNET_PRIVATE) - - for tv in test_vectors: - left, right = self._full_derive(mk, tv[0]), tv[1] - self.assertEqual( - left, - right, - r"Test vector does not match. Details:\n%s\n%s\n%s\n\%s" % ( - left, - tv[0], - [x.encode('hex') if isinstance(x, str) else x for x in bip32_deserialize(left)], - [x.encode('hex') if isinstance(x, str) else x for x in bip32_deserialize(right)], - ) - ) - - def test_extra(self): - master = bip32_master_key(safe_from_hex("000102030405060708090a0b0c0d0e0f")) - - # m/0 - assert bip32_ckd(master, "0") == "xprv9uHRZZhbkedL37eZEnyrNsQPFZYRAvjy5rt6M1nbEkLSo378x1CQQLo2xxBvREwiK6kqf7GRNvsNEchwibzXaV6i5GcsgyjBeRguXhKsi4R" - assert bip32_privtopub(bip32_ckd(master, "0")) == "xpub68Gmy5EVb2BdFbj2LpWrk1M7obNuaPTpT5oh9QCCo5sRfqSHVYWex97WpDZzszdzHzxXDAzPLVSwybe4uPYkSk4G3gnrPqqkV9RyNzAcNJ1" - - # m/1 - assert bip32_ckd(master, "1") == "xprv9uHRZZhbkedL4yTpidDvuVfrdUkTbhDHviERRBkbzbNDZeMjWzqzKAdxWhzftGDSxDmBdakjqHiZJbkwiaTEXJdjZAaAjMZEE3PMbMrPJih" - assert bip32_privtopub(bip32_ckd(master, "1")) == "xpub68Gmy5EVb2BdHTYHpekwGdcbBWax19w9HwA2DaADYvuCSSgt4YAErxxSN1KWSnmyqkwRNbnTj3XiUBKmHeC8rTjLRPjSULcDKQQgfgJDppq" - - # m/0/0 - assert bip32_ckd(bip32_ckd(master, "0"), "0") == "xprv9ww7sMFLzJMzur2oEQDB642fbsMS4q6JRraMVTrM9bTWBq7NDS8ZpmsKVB4YF3mZecqax1fjnsPF19xnsJNfRp4RSyexacULXMKowSACTRc" - assert bip32_privtopub(bip32_ckd(bip32_ckd(master, "0"), "0")) == "xpub6AvUGrnEpfvJ8L7GLRkBTByQ9uBvUHp9o5VxHrFxhvzV4dSWkySpNaBoLR9FpbnwRmTa69yLHF3QfcaxbWT7gWdwws5k4dpmJvqpEuMWwnj" - - # m/0' - assert bip32_ckd(master, 2**31) == "xprv9uHRZZhk6KAJC1avXpDAp4MDc3sQKNxDiPvvkX8Br5ngLNv1TxvUxt4cV1rGL5hj6KCesnDYUhd7oWgT11eZG7XnxHrnYeSvkzY7d2bhkJ7" - assert bip32_privtopub(bip32_ckd(master, 2**31)) == "xpub68Gmy5EdvgibQVfPdqkBBCHxA5htiqg55crXYuXoQRKfDBFA1WEjWgP6LHhwBZeNK1VTsfTFUHCdrfp1bgwQ9xv5ski8PX9rL2dZXvgGDnw" - - # m/1' - assert bip32_ckd(master, 2**31 + 1) == "xprv9uHRZZhk6KAJFszJGW6LoUFq92uL7FvkBhmYiMurCWPHLJZkX2aGvNdRUBNnJu7nv36WnwCN59uNy6sxLDZvvNSgFz3TCCcKo7iutQzpg78" - assert bip32_privtopub(bip32_ckd(master, 2**31 + 1)) == "xpub68Gmy5EdvgibUN4mNXdMAcCZh4jpWiebYvh9WkKTkqvGD6tu4ZtXUAwuKSyF5DFZVmotf9UHFTGqSXo9qyDBSn47RkaN6Aedt9JbL7zcgSL" - - # m/1' - assert bip32_ckd(master, 1 + 2**31) == "xprv9uHRZZhk6KAJFszJGW6LoUFq92uL7FvkBhmYiMurCWPHLJZkX2aGvNdRUBNnJu7nv36WnwCN59uNy6sxLDZvvNSgFz3TCCcKo7iutQzpg78" - assert bip32_privtopub(bip32_ckd(master, 1 + 2**31)) == "xpub68Gmy5EdvgibUN4mNXdMAcCZh4jpWiebYvh9WkKTkqvGD6tu4ZtXUAwuKSyF5DFZVmotf9UHFTGqSXo9qyDBSn47RkaN6Aedt9JbL7zcgSL" - - # m/0'/0 - assert bip32_ckd(bip32_ckd(master, 2**31), "0") == "xprv9wTYmMFdV23N21MM6dLNavSQV7Sj7meSPXx6AV5eTdqqGLjycVjb115Ec5LgRAXscPZgy5G4jQ9csyyZLN3PZLxoM1h3BoPuEJzsgeypdKj" - assert bip32_privtopub(bip32_ckd(bip32_ckd(master, 2**31), "0")) == "xpub6ASuArnXKPbfEVRpCesNx4P939HDXENHkksgxsVG1yNp9958A33qYoPiTN9QrJmWFa2jNLdK84bWmyqTSPGtApP8P7nHUYwxHPhqmzUyeFG" - - # m/0'/0' - assert bip32_ckd(bip32_ckd(master, 2**31), 2**31) == "xprv9wTYmMFmpgaLB5Hge4YtaGqCKpsYPTD9vXWSsmdZrNU3Y2i4WoBykm6ZteeCLCCZpGxdHQuqEhM6Gdo2X6CVrQiTw6AAneF9WSkA9ewaxtS" - assert bip32_privtopub(bip32_ckd(bip32_ckd(master, 2**31), 2**31)) == "xpub6ASuArnff48dPZN9k65twQmvsri2nuw1HkS3gA3BQi12Qq3D4LWEJZR3jwCAr1NhsFMcQcBkmevmub6SLP37bNq91SEShXtEGUbX3GhNaGk" - - # m/44'/0'/0'/0/0 - assert bip32_ckd(bip32_ckd(bip32_ckd(bip32_ckd(bip32_ckd(master, 44 + 2**31), 2**31), 2**31), 0), 0) == "xprvA4A9CuBXhdBtCaLxwrw64Jaran4n1rgzeS5mjH47Ds8V67uZS8tTkG8jV3BZi83QqYXPcN4v8EjK2Aof4YcEeqLt688mV57gF4j6QZWdP9U" - assert bip32_privtopub(bip32_ckd(bip32_ckd(bip32_ckd(bip32_ckd(bip32_ckd(master, 44 + 2**31), 2**31), 2**31), 0), 0)) == "xpub6H9VcQiRXzkBR4RS3tU6RSXb8ouGRKQr1f1NXfTinCfTxvEhygCiJ4TDLHz1dyQ6d2Vz8Ne7eezkrViwaPo2ZMsNjVtFwvzsQXCDV6HJ3cV" - - -class TestStartingAddressAndScriptGenerationConsistency(unittest.TestCase): - @classmethod - def setUpClass(cls): - print("Starting address and script generation consistency tests") - - def test_all(self): - for i in range(5): - a = privtoaddr(random_key()) - self.assertEqual(a, script_to_address(address_to_script(a))) - self.assertEqual(a, script_to_address(address_to_script(a), 0)) - self.assertEqual(a, script_to_address(address_to_script(a), 0x00)) - - b = privtoaddr(random_key(), 5) - self.assertEqual(b, script_to_address(address_to_script(b))) - self.assertEqual(b, script_to_address(address_to_script(b), 0)) - self.assertEqual(b, script_to_address(address_to_script(b), 0x00)) - self.assertEqual(b, script_to_address(address_to_script(b), 5)) - self.assertEqual(b, script_to_address(address_to_script(b), 0x05)) - - - for i in range(5): - a = privtoaddr(random_key(), 0x6f) - self.assertEqual(a, script_to_address(address_to_script(a), 111)) - self.assertEqual(a, script_to_address(address_to_script(a), 0x6f)) - - b = privtoaddr(random_key(), 0xc4) - self.assertEqual(b, script_to_address(address_to_script(b), 111)) - self.assertEqual(b, script_to_address(address_to_script(b), 0x6f)) - self.assertEqual(b, script_to_address(address_to_script(b), 196)) - self.assertEqual(b, script_to_address(address_to_script(b), 0xc4)) - - -class TestRipeMD160PythonBackup(unittest.TestCase): - - @classmethod - def setUpClass(cls): - print('Testing the pure python backup for ripemd160') - - def test_all(self): - strvec = [ - '', - 'The quick brown fox jumps over the lazy dog', - 'The quick brown fox jumps over the lazy cog', - 'Nobody inspects the spammish repetition' - ] - - target = [ - '9c1185a5c5e9fc54612808977ee8f548b2258d31', - '37f332f68db77bd9d7edd4969571ad671cf9dd3b', - '132072df690933835eb8b6ad0b77e7b6f14acad7', - 'cc4a5ce1b3df48aec5d22d1f16b894a0b894eccc' - ] - - hash160target = [ - 'b472a266d0bd89c13706a4132ccfb16f7c3b9fcb', - '0e3397b4abc7a382b3ea2365883c3c7ca5f07600', - '53e0dacac5249e46114f65cb1f30d156b14e0bdc', - '1c9b7b48049a8f98699bca22a5856c5ef571cd68' - ] - - for i, s in enumerate(strvec): - digest = ripemd.RIPEMD160(s).digest() - hash160digest = ripemd.RIPEMD160(bin_sha256(s)).digest() - self.assertEqual(bytes_to_hex_string(digest), target[i]) - self.assertEqual(bytes_to_hex_string(hash160digest), hash160target[i]) - self.assertEqual(bytes_to_hex_string(bin_hash160(from_string_to_bytes(s))), hash160target[i]) - self.assertEqual(hash160(from_string_to_bytes(s)), hash160target[i]) - - -class TestScriptVsAddressOutputs(unittest.TestCase): - - @classmethod - def setUpClass(cls): - print('Testing script vs address outputs') - - def test_all(self): - addr0 = '1Lqgj1ThNfwLgHMp5qJUerYsuUEm8vHmVG' - script0 = '76a914d99f84267d1f90f3e870a5e9d2399918140be61d88ac' - addr1 = '31oSGBBNrpCiENH3XMZpiP6GTC4tad4bMy' - script1 = 'a9140136d001619faba572df2ef3d193a57ad29122d987' - - inputs = [{ - 'output': 'cd6219ea108119dc62fce09698b649efde56eca7ce223a3315e8b431f6280ce7:0', - 'value': 158000 - }] - - outputs = [ - [{'address': addr0, 'value': 1000}, {'address': addr1, 'value': 2000}], - [{'script': script0, 'value': 1000}, {'address': addr1, 'value': 2000}], - [{'address': addr0, 'value': 1000}, {'script': script1, 'value': 2000}], - [{'script': script0, 'value': 1000}, {'script': script1, 'value': 2000}], - [addr0 + ':1000', addr1 + ':2000'], - [script0 + ':1000', addr1 + ':2000'], - [addr0 + ':1000', script1 + ':2000'], - [script0 + ':1000', script1 + ':2000'] - ] - - for outs in outputs: - tx_struct = deserialize(mktx(inputs, outs)) - self.assertEqual(tx_struct['outs'], outputs[3]) - - -class TestConversions(unittest.TestCase): - @classmethod - def setUpClass(cls): - cls.privkey_hex = ( - "e9873d79c6d87dc0fb6a5778633389f4453213303da61f20bd67fc233aa33262" - ) - cls.privkey_bin = ( - b"\xe9\x87=y\xc6\xd8}\xc0\xfbjWxc3\x89\xf4E2\x130=\xa6\x1f \xbdg\xfc#:\xa32b" - ) - - cls.pubkey_hex = ( - "04588d202afcc1ee4ab5254c7847ec25b9a135bbda0f2bc69ee1a714749fd77dc9f88ff2a00d7e752d44cbe16e1ebcf0890b76ec7c78886109dee76ccfc8445424" - ) - cls.pubkey_bin = ( - b"\x04X\x8d *\xfc\xc1\xeeJ\xb5%LxG\xec%\xb9\xa15\xbb\xda\x0f+\xc6\x9e\xe1\xa7\x14t\x9f\xd7}\xc9\xf8\x8f\xf2\xa0\r~u-D\xcb\xe1n\x1e\xbc\xf0\x89\x0bv\xec|x\x88a\t\xde\xe7l\xcf\xc8DT$" - ) - - def test_privkey_to_pubkey(self): - pubkey_hex = privkey_to_pubkey(self.privkey_hex) - self.assertEqual(pubkey_hex, self.pubkey_hex) - - def test_changebase(self): - self.assertEqual( - self.pubkey_bin, - changebase( - self.pubkey_hex, 16, 256, minlen=len(self.pubkey_bin) - ) - ) - - self.assertEqual( - self.pubkey_hex, - changebase( - self.pubkey_bin, 256, 16, minlen=len(self.pubkey_hex) - ) - ) - - self.assertEqual( - self.privkey_bin, - changebase( - self.privkey_hex, 16, 256, minlen=len(self.privkey_bin) - ) - ) - - self.assertEqual( - self.privkey_hex, - changebase( - self.privkey_bin, 256, 16, minlen=len(self.privkey_hex) - ) - ) - - -if __name__ == '__main__': - unittest.main() diff --git a/src/lib/pybitcointools/test_stealth.py b/src/lib/pybitcointools/test_stealth.py deleted file mode 100644 index 01a1432d..00000000 --- a/src/lib/pybitcointools/test_stealth.py +++ /dev/null @@ -1,92 +0,0 @@ -import bitcoin as bc -import sys -import unittest - -class TestStealth(unittest.TestCase): - - def setUp(self): - - if sys.getrecursionlimit() < 1000: - sys.setrecursionlimit(1000) - - self.addr = 'vJmtjxSDxNPXL4RNapp9ARdqKz3uJyf1EDGjr1Fgqs9c8mYsVH82h8wvnA4i5rtJ57mr3kor1EVJrd4e5upACJd588xe52yXtzumxj' - self.scan_pub = '025e58a31122b38c86abc119b9379fe247410aee87a533f9c07b189aef6c3c1f52' - self.scan_priv = '3e49e7257cb31db997edb1cf8299af0f37e2663e2260e4b8033e49d39a6d02f2' - self.spend_pub = '03616562c98e7d7b74be409a787cec3a912122f3fb331a9bee9b0b73ce7b9f50af' - self.spend_priv = 'aa3db0cfb3edc94de4d10f873f8190843f2a17484f6021a95a7742302c744748' - self.ephem_pub = '03403d306ec35238384c7e340393335f9bc9bb4a2e574eb4e419452c4ea19f14b0' - self.ephem_priv = '9e63abaf8dcd5ea3919e6de0b6c544e00bf51bf92496113a01d6e369944dc091' - self.shared_secret = 'a4047ee231f4121e3a99a3a3378542e34a384b865a9917789920e1f13ffd91c6' - self.pay_pub = '02726112ad39cb6bf848b1b1ef30b88e35286bf99f746c2be575f96c0e02a9357c' - self.pay_priv = '4e422fb1e5e1db6c1f6ab32a7706d368ceb385e7fab098e633c5c5949c3b97cd' - - self.testnet_addr = 'waPUuLLykSnY3itzf1AyrQZm42F7KyB7SR5zpfqmnzPXWhx9kXLzV3EcyqzDdpTwngiyCCMUqztS9S1d7XJs3JMt3MsHPDpBCudvx9' - - def test_address_encoding(self): - - sc_pub, sp_pub = bc.basic_stealth_address_to_pubkeys(self.addr) - self.assertEqual(sc_pub, self.scan_pub) - self.assertEqual(sp_pub, self.spend_pub) - - stealth_addr2 = bc.pubkeys_to_basic_stealth_address(sc_pub, sp_pub) - self.assertEqual(stealth_addr2, self.addr) - - magic_byte_testnet = 43 - sc_pub, sp_pub = bc.basic_stealth_address_to_pubkeys(self.testnet_addr) - self.assertEqual(sc_pub, self.scan_pub) - self.assertEqual(sp_pub, self.spend_pub) - - stealth_addr2 = bc.pubkeys_to_basic_stealth_address(sc_pub, sp_pub, magic_byte_testnet) - self.assertEqual(stealth_addr2, self.testnet_addr) - - def test_shared_secret(self): - - sh_sec = bc.shared_secret_sender(self.scan_pub, self.ephem_priv) - self.assertEqual(sh_sec, self.shared_secret) - - sh_sec2 = bc.shared_secret_receiver(self.ephem_pub, self.scan_priv) - self.assertEqual(sh_sec2, self.shared_secret) - - def test_uncover_pay_keys(self): - - pub = bc.uncover_pay_pubkey_sender(self.scan_pub, self.spend_pub, self.ephem_priv) - pub2 = bc.uncover_pay_pubkey_receiver(self.scan_priv, self.spend_pub, self.ephem_pub) - self.assertEqual(pub, self.pay_pub) - self.assertEqual(pub2, self.pay_pub) - - priv = bc.uncover_pay_privkey(self.scan_priv, self.spend_priv, self.ephem_pub) - self.assertEqual(priv, self.pay_priv) - - def test_stealth_metadata_script(self): - - nonce = int('deadbeef', 16) - script = bc.mk_stealth_metadata_script(self.ephem_pub, nonce) - self.assertEqual(script[6:], 'deadbeef' + self.ephem_pub) - - eph_pub = bc.ephem_pubkey_from_tx_script(script) - self.assertEqual(eph_pub, self.ephem_pub) - - def test_stealth_tx_outputs(self): - - nonce = int('deadbeef', 16) - value = 10**8 - outputs = bc.mk_stealth_tx_outputs(self.addr, value, self.ephem_priv, nonce) - - self.assertEqual(outputs[0]['value'], 0) - self.assertEqual(outputs[0]['script'], '6a2606deadbeef' + self.ephem_pub) - self.assertEqual(outputs[1]['address'], bc.pubkey_to_address(self.pay_pub)) - self.assertEqual(outputs[1]['value'], value) - - outputs = bc.mk_stealth_tx_outputs(self.testnet_addr, value, self.ephem_priv, nonce, 'testnet') - - self.assertEqual(outputs[0]['value'], 0) - self.assertEqual(outputs[0]['script'], '6a2606deadbeef' + self.ephem_pub) - self.assertEqual(outputs[1]['address'], bc.pubkey_to_address(self.pay_pub, 111)) - self.assertEqual(outputs[1]['value'], value) - - self.assertRaises(Exception, bc.mk_stealth_tx_outputs, self.testnet_addr, value, self.ephem_priv, nonce, 'btc') - - self.assertRaises(Exception, bc.mk_stealth_tx_outputs, self.addr, value, self.ephem_priv, nonce, 'testnet') - -if __name__ == '__main__': - unittest.main() diff --git a/src/lib/pyelliptic/LICENSE b/src/lib/pyelliptic/LICENSE deleted file mode 100644 index 94a9ed02..00000000 --- a/src/lib/pyelliptic/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - <one line to give the program's name and a brief idea of what it does.> - Copyright (C) <year> <name of author> - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - <program> Copyright (C) <year> <name of author> - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -<http://www.gnu.org/licenses/>. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -<http://www.gnu.org/philosophy/why-not-lgpl.html>. diff --git a/src/lib/pyelliptic/README.md b/src/lib/pyelliptic/README.md deleted file mode 100644 index 587b1445..00000000 --- a/src/lib/pyelliptic/README.md +++ /dev/null @@ -1,67 +0,0 @@ -# PyElliptic - -PyElliptic is a high level wrapper for the cryptographic library : OpenSSL. -Under the GNU General Public License - -Python3 compatible. For GNU/Linux and Windows. -Require OpenSSL - -## Features - -### Asymmetric cryptography using Elliptic Curve Cryptography (ECC) - -* Key agreement : ECDH -* Digital signatures : ECDSA -* Hybrid encryption : ECIES (like RSA) - -### Symmetric cryptography - -* AES-128 (CBC, OFB, CFB) -* AES-256 (CBC, OFB, CFB) -* Blowfish (CFB and CBC) -* RC4 - -### Other - -* CSPRNG -* HMAC (using SHA512) -* PBKDF2 (SHA256 and SHA512) - -## Example - -```python -#!/usr/bin/python - -import pyelliptic - -# Symmetric encryption -iv = pyelliptic.Cipher.gen_IV('aes-256-cfb') -ctx = pyelliptic.Cipher("secretkey", iv, 1, ciphername='aes-256-cfb') - -ciphertext = ctx.update('test1') -ciphertext += ctx.update('test2') -ciphertext += ctx.final() - -ctx2 = pyelliptic.Cipher("secretkey", iv, 0, ciphername='aes-256-cfb') -print ctx2.ciphering(ciphertext) - -# Asymmetric encryption -alice = pyelliptic.ECC() # default curve: sect283r1 -bob = pyelliptic.ECC(curve='sect571r1') - -ciphertext = alice.encrypt("Hello Bob", bob.get_pubkey()) -print bob.decrypt(ciphertext) - -signature = bob.sign("Hello Alice") -# alice's job : -print pyelliptic.ECC(pubkey=bob.get_pubkey()).verify(signature, "Hello Alice") - -# ERROR !!! -try: - key = alice.get_ecdh_key(bob.get_pubkey()) -except: print("For ECDH key agreement, the keys must be defined on the same curve !") - -alice = pyelliptic.ECC(curve='sect571r1') -print alice.get_ecdh_key(bob.get_pubkey()).encode('hex') -print bob.get_ecdh_key(alice.get_pubkey()).encode('hex') -``` diff --git a/src/lib/pyelliptic/__init__.py b/src/lib/pyelliptic/__init__.py deleted file mode 100644 index 761d08af..00000000 --- a/src/lib/pyelliptic/__init__.py +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (C) 2010 -# Author: Yann GUIBET -# Contact: <yannguibet@gmail.com> - -__version__ = '1.3' - -__all__ = [ - 'OpenSSL', - 'ECC', - 'Cipher', - 'hmac_sha256', - 'hmac_sha512', - 'pbkdf2' -] - -from .openssl import OpenSSL -from .ecc import ECC -from .cipher import Cipher -from .hash import hmac_sha256, hmac_sha512, pbkdf2 diff --git a/src/lib/pyelliptic/arithmetic.py b/src/lib/pyelliptic/arithmetic.py deleted file mode 100644 index 1eec381a..00000000 --- a/src/lib/pyelliptic/arithmetic.py +++ /dev/null @@ -1,106 +0,0 @@ -import hashlib, re - -P = 2**256-2**32-2**9-2**8-2**7-2**6-2**4-1 -A = 0 -Gx = 55066263022277343669578718895168534326250603453777594175500187360389116729240 -Gy = 32670510020758816978083085130507043184471273380659243275938904335757337482424 -G = (Gx,Gy) - -def inv(a,n): - lm, hm = 1,0 - low, high = a%n,n - while low > 1: - r = high/low - nm, new = hm-lm*r, high-low*r - lm, low, hm, high = nm, new, lm, low - return lm % n - -def get_code_string(base): - if base == 2: return '01' - elif base == 10: return '0123456789' - elif base == 16: return "0123456789abcdef" - elif base == 58: return "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" - elif base == 256: return ''.join([chr(x) for x in range(256)]) - else: raise ValueError("Invalid base!") - -def encode(val,base,minlen=0): - code_string = get_code_string(base) - result = "" - while val > 0: - result = code_string[val % base] + result - val /= base - if len(result) < minlen: - result = code_string[0]*(minlen-len(result))+result - return result - -def decode(string,base): - code_string = get_code_string(base) - result = 0 - if base == 16: string = string.lower() - while len(string) > 0: - result *= base - result += code_string.find(string[0]) - string = string[1:] - return result - -def changebase(string,frm,to,minlen=0): - return encode(decode(string,frm),to,minlen) - -def base10_add(a,b): - if a == None: return b[0],b[1] - if b == None: return a[0],a[1] - if a[0] == b[0]: - if a[1] == b[1]: return base10_double(a[0],a[1]) - else: return None - m = ((b[1]-a[1]) * inv(b[0]-a[0],P)) % P - x = (m*m-a[0]-b[0]) % P - y = (m*(a[0]-x)-a[1]) % P - return (x,y) - -def base10_double(a): - if a == None: return None - m = ((3*a[0]*a[0]+A)*inv(2*a[1],P)) % P - x = (m*m-2*a[0]) % P - y = (m*(a[0]-x)-a[1]) % P - return (x,y) - -def base10_multiply(a,n): - if n == 0: return G - if n == 1: return a - if (n%2) == 0: return base10_double(base10_multiply(a,n/2)) - if (n%2) == 1: return base10_add(base10_double(base10_multiply(a,n/2)),a) - -def hex_to_point(h): return (decode(h[2:66],16),decode(h[66:],16)) - -def point_to_hex(p): return '04'+encode(p[0],16,64)+encode(p[1],16,64) - -def multiply(privkey,pubkey): - return point_to_hex(base10_multiply(hex_to_point(pubkey),decode(privkey,16))) - -def privtopub(privkey): - return point_to_hex(base10_multiply(G,decode(privkey,16))) - -def add(p1,p2): - if (len(p1)==32): - return encode(decode(p1,16) + decode(p2,16) % P,16,32) - else: - return point_to_hex(base10_add(hex_to_point(p1),hex_to_point(p2))) - -def hash_160(string): - intermed = hashlib.sha256(string).digest() - ripemd160 = hashlib.new('ripemd160') - ripemd160.update(intermed) - return ripemd160.digest() - -def dbl_sha256(string): - return hashlib.sha256(hashlib.sha256(string).digest()).digest() - -def bin_to_b58check(inp): - inp_fmtd = '\x00' + inp - leadingzbytes = len(re.match('^\x00*',inp_fmtd).group(0)) - checksum = dbl_sha256(inp_fmtd)[:4] - return '1' * leadingzbytes + changebase(inp_fmtd+checksum,256,58) - -#Convert a public key (in hex) to a Bitcoin address -def pubkey_to_address(pubkey): - return bin_to_b58check(hash_160(changebase(pubkey,16,256))) diff --git a/src/lib/pyelliptic/cipher.py b/src/lib/pyelliptic/cipher.py deleted file mode 100644 index b597cafa..00000000 --- a/src/lib/pyelliptic/cipher.py +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -# Copyright (C) 2011 Yann GUIBET <yannguibet@gmail.com> -# See LICENSE for details. - -from pyelliptic.openssl import OpenSSL - - -class Cipher: - """ - Symmetric encryption - - import pyelliptic - iv = pyelliptic.Cipher.gen_IV('aes-256-cfb') - ctx = pyelliptic.Cipher("secretkey", iv, 1, ciphername='aes-256-cfb') - ciphertext = ctx.update('test1') - ciphertext += ctx.update('test2') - ciphertext += ctx.final() - - ctx2 = pyelliptic.Cipher("secretkey", iv, 0, ciphername='aes-256-cfb') - print ctx2.ciphering(ciphertext) - """ - def __init__(self, key, iv, do, ciphername='aes-256-cbc'): - """ - do == 1 => Encrypt; do == 0 => Decrypt - """ - self.cipher = OpenSSL.get_cipher(ciphername) - self.ctx = OpenSSL.EVP_CIPHER_CTX_new() - if do == 1 or do == 0: - k = OpenSSL.malloc(key, len(key)) - IV = OpenSSL.malloc(iv, len(iv)) - OpenSSL.EVP_CipherInit_ex( - self.ctx, self.cipher.get_pointer(), 0, k, IV, do) - else: - raise Exception("RTFM ...") - - @staticmethod - def get_all_cipher(): - """ - static method, returns all ciphers available - """ - return OpenSSL.cipher_algo.keys() - - @staticmethod - def get_blocksize(ciphername): - cipher = OpenSSL.get_cipher(ciphername) - return cipher.get_blocksize() - - @staticmethod - def gen_IV(ciphername): - cipher = OpenSSL.get_cipher(ciphername) - return OpenSSL.rand(cipher.get_blocksize()) - - def update(self, input): - i = OpenSSL.c_int(0) - buffer = OpenSSL.malloc(b"", len(input) + self.cipher.get_blocksize()) - inp = OpenSSL.malloc(input, len(input)) - if OpenSSL.EVP_CipherUpdate(self.ctx, OpenSSL.byref(buffer), - OpenSSL.byref(i), inp, len(input)) == 0: - raise Exception("[OpenSSL] EVP_CipherUpdate FAIL ...") - return buffer.raw[0:i.value] - - def final(self): - i = OpenSSL.c_int(0) - buffer = OpenSSL.malloc(b"", self.cipher.get_blocksize()) - if (OpenSSL.EVP_CipherFinal_ex(self.ctx, OpenSSL.byref(buffer), - OpenSSL.byref(i))) == 0: - raise Exception("[OpenSSL] EVP_CipherFinal_ex FAIL ...") - return buffer.raw[0:i.value] - - def ciphering(self, input): - """ - Do update and final in one method - """ - buff = self.update(input) - return buff + self.final() - - def __del__(self): - if OpenSSL._hexversion > 0x10100000 and not OpenSSL._libreSSL: - OpenSSL.EVP_CIPHER_CTX_reset(self.ctx) - else: - OpenSSL.EVP_CIPHER_CTX_cleanup(self.ctx) - OpenSSL.EVP_CIPHER_CTX_free(self.ctx) diff --git a/src/lib/pyelliptic/ecc.py b/src/lib/pyelliptic/ecc.py deleted file mode 100644 index bea645db..00000000 --- a/src/lib/pyelliptic/ecc.py +++ /dev/null @@ -1,480 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -# Copyright (C) 2011 Yann GUIBET <yannguibet@gmail.com> -# See LICENSE for details. - -from hashlib import sha512 -from pyelliptic.openssl import OpenSSL -from pyelliptic.cipher import Cipher -from pyelliptic.hash import hmac_sha256, equals -from struct import pack, unpack - - -class ECC: - """ - Asymmetric encryption with Elliptic Curve Cryptography (ECC) - ECDH, ECDSA and ECIES - - import pyelliptic - - alice = pyelliptic.ECC() # default curve: sect283r1 - bob = pyelliptic.ECC(curve='sect571r1') - - ciphertext = alice.encrypt("Hello Bob", bob.get_pubkey()) - print bob.decrypt(ciphertext) - - signature = bob.sign("Hello Alice") - # alice's job : - print pyelliptic.ECC( - pubkey=bob.get_pubkey()).verify(signature, "Hello Alice") - - # ERROR !!! - try: - key = alice.get_ecdh_key(bob.get_pubkey()) - except: print("For ECDH key agreement,\ - the keys must be defined on the same curve !") - - alice = pyelliptic.ECC(curve='sect571r1') - print alice.get_ecdh_key(bob.get_pubkey()).encode('hex') - print bob.get_ecdh_key(alice.get_pubkey()).encode('hex') - - """ - def __init__(self, pubkey=None, privkey=None, pubkey_x=None, - pubkey_y=None, raw_privkey=None, curve='sect283r1'): - """ - For a normal and High level use, specifie pubkey, - privkey (if you need) and the curve - """ - if type(curve) == str: - self.curve = OpenSSL.get_curve(curve) - else: - self.curve = curve - - if pubkey_x is not None and pubkey_y is not None: - self._set_keys(pubkey_x, pubkey_y, raw_privkey) - elif pubkey is not None: - curve, pubkey_x, pubkey_y, i = ECC._decode_pubkey(pubkey) - if privkey is not None: - curve2, raw_privkey, i = ECC._decode_privkey(privkey) - if curve != curve2: - raise Exception("Bad ECC keys ...") - self.curve = curve - self._set_keys(pubkey_x, pubkey_y, raw_privkey) - else: - self.privkey, self.pubkey_x, self.pubkey_y = self._generate() - - def _set_keys(self, pubkey_x, pubkey_y, privkey): - if self.raw_check_key(privkey, pubkey_x, pubkey_y) < 0: - self.pubkey_x = None - self.pubkey_y = None - self.privkey = None - raise Exception("Bad ECC keys ...") - else: - self.pubkey_x = pubkey_x - self.pubkey_y = pubkey_y - self.privkey = privkey - - @staticmethod - def get_curves(): - """ - static method, returns the list of all the curves available - """ - return OpenSSL.curves.keys() - - def get_curve(self): - return OpenSSL.get_curve_by_id(self.curve) - - def get_curve_id(self): - return self.curve - - def get_pubkey(self): - """ - High level function which returns : - curve(2) + len_of_pubkeyX(2) + pubkeyX + len_of_pubkeyY + pubkeyY - """ - return b''.join((pack('!H', self.curve), - pack('!H', len(self.pubkey_x)), - self.pubkey_x, - pack('!H', len(self.pubkey_y)), - self.pubkey_y - )) - - def get_privkey(self): - """ - High level function which returns - curve(2) + len_of_privkey(2) + privkey - """ - return b''.join((pack('!H', self.curve), - pack('!H', len(self.privkey)), - self.privkey - )) - - @staticmethod - def _decode_pubkey(pubkey): - i = 0 - curve = unpack('!H', pubkey[i:i + 2])[0] - i += 2 - tmplen = unpack('!H', pubkey[i:i + 2])[0] - i += 2 - pubkey_x = pubkey[i:i + tmplen] - i += tmplen - tmplen = unpack('!H', pubkey[i:i + 2])[0] - i += 2 - pubkey_y = pubkey[i:i + tmplen] - i += tmplen - return curve, pubkey_x, pubkey_y, i - - @staticmethod - def _decode_privkey(privkey): - i = 0 - curve = unpack('!H', privkey[i:i + 2])[0] - i += 2 - tmplen = unpack('!H', privkey[i:i + 2])[0] - i += 2 - privkey = privkey[i:i + tmplen] - i += tmplen - return curve, privkey, i - - def _generate(self): - try: - pub_key_x = OpenSSL.BN_new() - pub_key_y = OpenSSL.BN_new() - - key = OpenSSL.EC_KEY_new_by_curve_name(self.curve) - if key == 0: - raise Exception("[OpenSSL] EC_KEY_new_by_curve_name FAIL ...") - if (OpenSSL.EC_KEY_generate_key(key)) == 0: - raise Exception("[OpenSSL] EC_KEY_generate_key FAIL ...") - if (OpenSSL.EC_KEY_check_key(key)) == 0: - raise Exception("[OpenSSL] EC_KEY_check_key FAIL ...") - priv_key = OpenSSL.EC_KEY_get0_private_key(key) - - group = OpenSSL.EC_KEY_get0_group(key) - pub_key = OpenSSL.EC_KEY_get0_public_key(key) - - if (OpenSSL.EC_POINT_get_affine_coordinates_GFp(group, pub_key, - pub_key_x, - pub_key_y, 0 - )) == 0: - raise Exception( - "[OpenSSL] EC_POINT_get_affine_coordinates_GFp FAIL ...") - - privkey = OpenSSL.malloc(0, OpenSSL.BN_num_bytes(priv_key)) - pubkeyx = OpenSSL.malloc(0, OpenSSL.BN_num_bytes(pub_key_x)) - pubkeyy = OpenSSL.malloc(0, OpenSSL.BN_num_bytes(pub_key_y)) - OpenSSL.BN_bn2bin(priv_key, privkey) - privkey = privkey.raw - OpenSSL.BN_bn2bin(pub_key_x, pubkeyx) - pubkeyx = pubkeyx.raw - OpenSSL.BN_bn2bin(pub_key_y, pubkeyy) - pubkeyy = pubkeyy.raw - self.raw_check_key(privkey, pubkeyx, pubkeyy) - - return privkey, pubkeyx, pubkeyy - - finally: - OpenSSL.EC_KEY_free(key) - OpenSSL.BN_free(pub_key_x) - OpenSSL.BN_free(pub_key_y) - - def get_ecdh_key(self, pubkey): - """ - High level function. Compute public key with the local private key - and returns a 512bits shared key - """ - curve, pubkey_x, pubkey_y, i = ECC._decode_pubkey(pubkey) - if curve != self.curve: - raise Exception("ECC keys must be from the same curve !") - return sha512(self.raw_get_ecdh_key(pubkey_x, pubkey_y)).digest() - - def raw_get_ecdh_key(self, pubkey_x, pubkey_y): - try: - ecdh_keybuffer = OpenSSL.malloc(0, 32) - - other_key = OpenSSL.EC_KEY_new_by_curve_name(self.curve) - if other_key == 0: - raise Exception("[OpenSSL] EC_KEY_new_by_curve_name FAIL ...") - - other_pub_key_x = OpenSSL.BN_bin2bn(pubkey_x, len(pubkey_x), 0) - other_pub_key_y = OpenSSL.BN_bin2bn(pubkey_y, len(pubkey_y), 0) - - other_group = OpenSSL.EC_KEY_get0_group(other_key) - other_pub_key = OpenSSL.EC_POINT_new(other_group) - - if (OpenSSL.EC_POINT_set_affine_coordinates_GFp(other_group, - other_pub_key, - other_pub_key_x, - other_pub_key_y, - 0)) == 0: - raise Exception( - "[OpenSSL] EC_POINT_set_affine_coordinates_GFp FAIL ...") - if (OpenSSL.EC_KEY_set_public_key(other_key, other_pub_key)) == 0: - raise Exception("[OpenSSL] EC_KEY_set_public_key FAIL ...") - if (OpenSSL.EC_KEY_check_key(other_key)) == 0: - raise Exception("[OpenSSL] EC_KEY_check_key FAIL ...") - - own_key = OpenSSL.EC_KEY_new_by_curve_name(self.curve) - if own_key == 0: - raise Exception("[OpenSSL] EC_KEY_new_by_curve_name FAIL ...") - own_priv_key = OpenSSL.BN_bin2bn( - self.privkey, len(self.privkey), 0) - - if (OpenSSL.EC_KEY_set_private_key(own_key, own_priv_key)) == 0: - raise Exception("[OpenSSL] EC_KEY_set_private_key FAIL ...") - - if OpenSSL._hexversion > 0x10100000 and not OpenSSL._libreSSL: - OpenSSL.EC_KEY_set_method(own_key, OpenSSL.EC_KEY_OpenSSL()) - else: - OpenSSL.ECDH_set_method(own_key, OpenSSL.ECDH_OpenSSL()) - ecdh_keylen = OpenSSL.ECDH_compute_key( - ecdh_keybuffer, 32, other_pub_key, own_key, 0) - - if ecdh_keylen != 32: - raise Exception("[OpenSSL] ECDH keylen FAIL ...") - - return ecdh_keybuffer.raw - - finally: - OpenSSL.EC_KEY_free(other_key) - OpenSSL.BN_free(other_pub_key_x) - OpenSSL.BN_free(other_pub_key_y) - OpenSSL.EC_POINT_free(other_pub_key) - OpenSSL.EC_KEY_free(own_key) - OpenSSL.BN_free(own_priv_key) - - def check_key(self, privkey, pubkey): - """ - Check the public key and the private key. - The private key is optional (replace by None) - """ - curve, pubkey_x, pubkey_y, i = ECC._decode_pubkey(pubkey) - if privkey is None: - raw_privkey = None - curve2 = curve - else: - curve2, raw_privkey, i = ECC._decode_privkey(privkey) - if curve != curve2: - raise Exception("Bad public and private key") - return self.raw_check_key(raw_privkey, pubkey_x, pubkey_y, curve) - - def raw_check_key(self, privkey, pubkey_x, pubkey_y, curve=None): - if curve is None: - curve = self.curve - elif type(curve) == str: - curve = OpenSSL.get_curve(curve) - else: - curve = curve - try: - key = OpenSSL.EC_KEY_new_by_curve_name(curve) - if key == 0: - raise Exception("[OpenSSL] EC_KEY_new_by_curve_name FAIL ...") - if privkey is not None: - priv_key = OpenSSL.BN_bin2bn(privkey, len(privkey), 0) - pub_key_x = OpenSSL.BN_bin2bn(pubkey_x, len(pubkey_x), 0) - pub_key_y = OpenSSL.BN_bin2bn(pubkey_y, len(pubkey_y), 0) - - if privkey is not None: - if (OpenSSL.EC_KEY_set_private_key(key, priv_key)) == 0: - raise Exception( - "[OpenSSL] EC_KEY_set_private_key FAIL ...") - - group = OpenSSL.EC_KEY_get0_group(key) - pub_key = OpenSSL.EC_POINT_new(group) - - if (OpenSSL.EC_POINT_set_affine_coordinates_GFp(group, pub_key, - pub_key_x, - pub_key_y, - 0)) == 0: - raise Exception( - "[OpenSSL] EC_POINT_set_affine_coordinates_GFp FAIL ...") - if (OpenSSL.EC_KEY_set_public_key(key, pub_key)) == 0: - raise Exception("[OpenSSL] EC_KEY_set_public_key FAIL ...") - if (OpenSSL.EC_KEY_check_key(key)) == 0: - raise Exception("[OpenSSL] EC_KEY_check_key FAIL ...") - return 0 - - finally: - OpenSSL.EC_KEY_free(key) - OpenSSL.BN_free(pub_key_x) - OpenSSL.BN_free(pub_key_y) - OpenSSL.EC_POINT_free(pub_key) - if privkey is not None: - OpenSSL.BN_free(priv_key) - - def sign(self, inputb, digest_alg=OpenSSL.digest_ecdsa_sha1): - """ - Sign the input with ECDSA method and returns the signature - """ - try: - size = len(inputb) - buff = OpenSSL.malloc(inputb, size) - digest = OpenSSL.malloc(0, 64) - if OpenSSL._hexversion > 0x10100000 and not OpenSSL._libreSSL: - md_ctx = OpenSSL.EVP_MD_CTX_new() - else: - md_ctx = OpenSSL.EVP_MD_CTX_create() - dgst_len = OpenSSL.pointer(OpenSSL.c_int(0)) - siglen = OpenSSL.pointer(OpenSSL.c_int(0)) - sig = OpenSSL.malloc(0, 151) - - key = OpenSSL.EC_KEY_new_by_curve_name(self.curve) - if key == 0: - raise Exception("[OpenSSL] EC_KEY_new_by_curve_name FAIL ...") - - priv_key = OpenSSL.BN_bin2bn(self.privkey, len(self.privkey), 0) - pub_key_x = OpenSSL.BN_bin2bn(self.pubkey_x, len(self.pubkey_x), 0) - pub_key_y = OpenSSL.BN_bin2bn(self.pubkey_y, len(self.pubkey_y), 0) - - if (OpenSSL.EC_KEY_set_private_key(key, priv_key)) == 0: - raise Exception("[OpenSSL] EC_KEY_set_private_key FAIL ...") - - group = OpenSSL.EC_KEY_get0_group(key) - pub_key = OpenSSL.EC_POINT_new(group) - - if (OpenSSL.EC_POINT_set_affine_coordinates_GFp(group, pub_key, - pub_key_x, - pub_key_y, - 0)) == 0: - raise Exception( - "[OpenSSL] EC_POINT_set_affine_coordinates_GFp FAIL ...") - if (OpenSSL.EC_KEY_set_public_key(key, pub_key)) == 0: - raise Exception("[OpenSSL] EC_KEY_set_public_key FAIL ...") - if (OpenSSL.EC_KEY_check_key(key)) == 0: - raise Exception("[OpenSSL] EC_KEY_check_key FAIL ...") - - if OpenSSL._hexversion > 0x10100000 and not OpenSSL._libreSSL: - OpenSSL.EVP_MD_CTX_new(md_ctx) - else: - OpenSSL.EVP_MD_CTX_init(md_ctx) - OpenSSL.EVP_DigestInit_ex(md_ctx, digest_alg(), None) - - if (OpenSSL.EVP_DigestUpdate(md_ctx, buff, size)) == 0: - raise Exception("[OpenSSL] EVP_DigestUpdate FAIL ...") - OpenSSL.EVP_DigestFinal_ex(md_ctx, digest, dgst_len) - OpenSSL.ECDSA_sign(0, digest, dgst_len.contents, sig, siglen, key) - if (OpenSSL.ECDSA_verify(0, digest, dgst_len.contents, sig, - siglen.contents, key)) != 1: - raise Exception("[OpenSSL] ECDSA_verify FAIL ...") - - return sig.raw[:siglen.contents.value] - - finally: - OpenSSL.EC_KEY_free(key) - OpenSSL.BN_free(pub_key_x) - OpenSSL.BN_free(pub_key_y) - OpenSSL.BN_free(priv_key) - OpenSSL.EC_POINT_free(pub_key) - if OpenSSL._hexversion > 0x10100000 and not OpenSSL._libreSSL: - OpenSSL.EVP_MD_CTX_free(md_ctx) - else: - OpenSSL.EVP_MD_CTX_destroy(md_ctx) - pass - - def verify(self, sig, inputb, digest_alg=OpenSSL.digest_ecdsa_sha1): - """ - Verify the signature with the input and the local public key. - Returns a boolean - """ - try: - bsig = OpenSSL.malloc(sig, len(sig)) - binputb = OpenSSL.malloc(inputb, len(inputb)) - digest = OpenSSL.malloc(0, 64) - dgst_len = OpenSSL.pointer(OpenSSL.c_int(0)) - if OpenSSL._hexversion > 0x10100000 and not OpenSSL._libreSSL: - md_ctx = OpenSSL.EVP_MD_CTX_new() - else: - md_ctx = OpenSSL.EVP_MD_CTX_create() - key = OpenSSL.EC_KEY_new_by_curve_name(self.curve) - - if key == 0: - raise Exception("[OpenSSL] EC_KEY_new_by_curve_name FAIL ...") - - pub_key_x = OpenSSL.BN_bin2bn(self.pubkey_x, len(self.pubkey_x), 0) - pub_key_y = OpenSSL.BN_bin2bn(self.pubkey_y, len(self.pubkey_y), 0) - group = OpenSSL.EC_KEY_get0_group(key) - pub_key = OpenSSL.EC_POINT_new(group) - - if (OpenSSL.EC_POINT_set_affine_coordinates_GFp(group, pub_key, - pub_key_x, - pub_key_y, - 0)) == 0: - raise Exception( - "[OpenSSL] EC_POINT_set_affine_coordinates_GFp FAIL ...") - if (OpenSSL.EC_KEY_set_public_key(key, pub_key)) == 0: - raise Exception("[OpenSSL] EC_KEY_set_public_key FAIL ...") - if (OpenSSL.EC_KEY_check_key(key)) == 0: - raise Exception("[OpenSSL] EC_KEY_check_key FAIL ...") - if OpenSSL._hexversion > 0x10100000 and not OpenSSL._libreSSL: - OpenSSL.EVP_MD_CTX_new(md_ctx) - else: - OpenSSL.EVP_MD_CTX_init(md_ctx) - OpenSSL.EVP_DigestInit_ex(md_ctx, digest_alg(), None) - if (OpenSSL.EVP_DigestUpdate(md_ctx, binputb, len(inputb))) == 0: - raise Exception("[OpenSSL] EVP_DigestUpdate FAIL ...") - - OpenSSL.EVP_DigestFinal_ex(md_ctx, digest, dgst_len) - ret = OpenSSL.ECDSA_verify( - 0, digest, dgst_len.contents, bsig, len(sig), key) - - if ret == -1: - return False # Fail to Check - else: - if ret == 0: - return False # Bad signature ! - else: - return True # Good - return False - - finally: - OpenSSL.EC_KEY_free(key) - OpenSSL.BN_free(pub_key_x) - OpenSSL.BN_free(pub_key_y) - OpenSSL.EC_POINT_free(pub_key) - if OpenSSL._hexversion > 0x10100000 and not OpenSSL._libreSSL: - OpenSSL.EVP_MD_CTX_free(md_ctx) - else: - OpenSSL.EVP_MD_CTX_destroy(md_ctx) - - @staticmethod - def encrypt(data, pubkey, ephemcurve=None, ciphername='aes-256-cbc'): - """ - Encrypt data with ECIES method using the public key of the recipient. - """ - curve, pubkey_x, pubkey_y, i = ECC._decode_pubkey(pubkey) - return ECC.raw_encrypt(data, pubkey_x, pubkey_y, curve=curve, - ephemcurve=ephemcurve, ciphername=ciphername) - - @staticmethod - def raw_encrypt(data, pubkey_x, pubkey_y, curve='sect283r1', - ephemcurve=None, ciphername='aes-256-cbc'): - if ephemcurve is None: - ephemcurve = curve - ephem = ECC(curve=ephemcurve) - key = sha512(ephem.raw_get_ecdh_key(pubkey_x, pubkey_y)).digest() - key_e, key_m = key[:32], key[32:] - pubkey = ephem.get_pubkey() - iv = OpenSSL.rand(OpenSSL.get_cipher(ciphername).get_blocksize()) - ctx = Cipher(key_e, iv, 1, ciphername) - ciphertext = iv + pubkey + ctx.ciphering(data) - mac = hmac_sha256(key_m, ciphertext) - return ciphertext + mac - - def decrypt(self, data, ciphername='aes-256-cbc'): - """ - Decrypt data with ECIES method using the local private key - """ - blocksize = OpenSSL.get_cipher(ciphername).get_blocksize() - iv = data[:blocksize] - i = blocksize - curve, pubkey_x, pubkey_y, i2 = ECC._decode_pubkey(data[i:]) - i += i2 - ciphertext = data[i:len(data)-32] - i += len(ciphertext) - mac = data[i:] - key = sha512(self.raw_get_ecdh_key(pubkey_x, pubkey_y)).digest() - key_e, key_m = key[:32], key[32:] - if not equals(hmac_sha256(key_m, data[:len(data) - 32]), mac): - raise RuntimeError("Fail to verify data") - ctx = Cipher(key_e, iv, 0, ciphername) - return ctx.ciphering(ciphertext) diff --git a/src/lib/pyelliptic/hash.py b/src/lib/pyelliptic/hash.py deleted file mode 100644 index fb910dd4..00000000 --- a/src/lib/pyelliptic/hash.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -# Copyright (C) 2011 Yann GUIBET <yannguibet@gmail.com> -# See LICENSE for details. - -from pyelliptic.openssl import OpenSSL - - -# For python3 -def _equals_bytes(a, b): - if len(a) != len(b): - return False - result = 0 - for x, y in zip(a, b): - result |= x ^ y - return result == 0 - - -def _equals_str(a, b): - if len(a) != len(b): - return False - result = 0 - for x, y in zip(a, b): - result |= ord(x) ^ ord(y) - return result == 0 - - -def equals(a, b): - if isinstance(a, str): - return _equals_str(a, b) - else: - return _equals_bytes(a, b) - - -def hmac_sha256(k, m): - """ - Compute the key and the message with HMAC SHA5256 - """ - key = OpenSSL.malloc(k, len(k)) - d = OpenSSL.malloc(m, len(m)) - md = OpenSSL.malloc(0, 32) - i = OpenSSL.pointer(OpenSSL.c_int(0)) - OpenSSL.HMAC(OpenSSL.EVP_sha256(), key, len(k), d, len(m), md, i) - return md.raw - - -def hmac_sha512(k, m): - """ - Compute the key and the message with HMAC SHA512 - """ - key = OpenSSL.malloc(k, len(k)) - d = OpenSSL.malloc(m, len(m)) - md = OpenSSL.malloc(0, 64) - i = OpenSSL.pointer(OpenSSL.c_int(0)) - OpenSSL.HMAC(OpenSSL.EVP_sha512(), key, len(k), d, len(m), md, i) - return md.raw - - -def pbkdf2(password, salt=None, i=10000, keylen=64): - if salt is None: - salt = OpenSSL.rand(8) - p_password = OpenSSL.malloc(password, len(password)) - p_salt = OpenSSL.malloc(salt, len(salt)) - output = OpenSSL.malloc(0, keylen) - OpenSSL.PKCS5_PBKDF2_HMAC(p_password, len(password), p_salt, - len(p_salt), i, OpenSSL.EVP_sha256(), - keylen, output) - return salt, output.raw diff --git a/src/lib/pyelliptic/openssl.py b/src/lib/pyelliptic/openssl.py deleted file mode 100644 index 6043f404..00000000 --- a/src/lib/pyelliptic/openssl.py +++ /dev/null @@ -1,504 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -# Copyright (C) 2011 Yann GUIBET <yannguibet@gmail.com> -# See LICENSE for details. -# -# Software slightly changed by Jonathan Warren <bitmessage at-symbol jonwarren.org> - -import sys -import ctypes - -OpenSSL = None - - -class CipherName: - def __init__(self, name, pointer, blocksize): - self._name = name - self._pointer = pointer - self._blocksize = blocksize - - def __str__(self): - return "Cipher : " + self._name + " | Blocksize : " + str(self._blocksize) + " | Fonction pointer : " + str(self._pointer) - - def get_pointer(self): - return self._pointer() - - def get_name(self): - return self._name - - def get_blocksize(self): - return self._blocksize - - -def get_version(library): - version = None - hexversion = None - cflags = None - try: - #OpenSSL 1.1 - OPENSSL_VERSION = 0 - OPENSSL_CFLAGS = 1 - library.OpenSSL_version.argtypes = [ctypes.c_int] - library.OpenSSL_version.restype = ctypes.c_char_p - version = library.OpenSSL_version(OPENSSL_VERSION) - cflags = library.OpenSSL_version(OPENSSL_CFLAGS) - library.OpenSSL_version_num.restype = ctypes.c_long - hexversion = library.OpenSSL_version_num() - except AttributeError: - try: - #OpenSSL 1.0 - SSLEAY_VERSION = 0 - SSLEAY_CFLAGS = 2 - library.SSLeay.restype = ctypes.c_long - library.SSLeay_version.restype = ctypes.c_char_p - library.SSLeay_version.argtypes = [ctypes.c_int] - version = library.SSLeay_version(SSLEAY_VERSION) - cflags = library.SSLeay_version(SSLEAY_CFLAGS) - hexversion = library.SSLeay() - except AttributeError: - #raise NotImplementedError('Cannot determine version of this OpenSSL library.') - pass - return (version, hexversion, cflags) - - -class _OpenSSL: - """ - Wrapper for OpenSSL using ctypes - """ - def __init__(self, library): - """ - Build the wrapper - """ - self._lib = ctypes.CDLL(library) - self._version, self._hexversion, self._cflags = get_version(self._lib) - self._libreSSL = self._version.startswith("LibreSSL") - - self.pointer = ctypes.pointer - self.c_int = ctypes.c_int - self.byref = ctypes.byref - self.create_string_buffer = ctypes.create_string_buffer - - self.BN_new = self._lib.BN_new - self.BN_new.restype = ctypes.c_void_p - self.BN_new.argtypes = [] - - self.BN_free = self._lib.BN_free - self.BN_free.restype = None - self.BN_free.argtypes = [ctypes.c_void_p] - - self.BN_num_bits = self._lib.BN_num_bits - self.BN_num_bits.restype = ctypes.c_int - self.BN_num_bits.argtypes = [ctypes.c_void_p] - - self.BN_bn2bin = self._lib.BN_bn2bin - self.BN_bn2bin.restype = ctypes.c_int - self.BN_bn2bin.argtypes = [ctypes.c_void_p, ctypes.c_void_p] - - self.BN_bin2bn = self._lib.BN_bin2bn - self.BN_bin2bn.restype = ctypes.c_void_p - self.BN_bin2bn.argtypes = [ctypes.c_void_p, ctypes.c_int, - ctypes.c_void_p] - - self.EC_KEY_free = self._lib.EC_KEY_free - self.EC_KEY_free.restype = None - self.EC_KEY_free.argtypes = [ctypes.c_void_p] - - self.EC_KEY_new_by_curve_name = self._lib.EC_KEY_new_by_curve_name - self.EC_KEY_new_by_curve_name.restype = ctypes.c_void_p - self.EC_KEY_new_by_curve_name.argtypes = [ctypes.c_int] - - self.EC_KEY_generate_key = self._lib.EC_KEY_generate_key - self.EC_KEY_generate_key.restype = ctypes.c_int - self.EC_KEY_generate_key.argtypes = [ctypes.c_void_p] - - self.EC_KEY_check_key = self._lib.EC_KEY_check_key - self.EC_KEY_check_key.restype = ctypes.c_int - self.EC_KEY_check_key.argtypes = [ctypes.c_void_p] - - self.EC_KEY_get0_private_key = self._lib.EC_KEY_get0_private_key - self.EC_KEY_get0_private_key.restype = ctypes.c_void_p - self.EC_KEY_get0_private_key.argtypes = [ctypes.c_void_p] - - self.EC_KEY_get0_public_key = self._lib.EC_KEY_get0_public_key - self.EC_KEY_get0_public_key.restype = ctypes.c_void_p - self.EC_KEY_get0_public_key.argtypes = [ctypes.c_void_p] - - self.EC_KEY_get0_group = self._lib.EC_KEY_get0_group - self.EC_KEY_get0_group.restype = ctypes.c_void_p - self.EC_KEY_get0_group.argtypes = [ctypes.c_void_p] - - self.EC_POINT_get_affine_coordinates_GFp = self._lib.EC_POINT_get_affine_coordinates_GFp - self.EC_POINT_get_affine_coordinates_GFp.restype = ctypes.c_int - self.EC_POINT_get_affine_coordinates_GFp.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p] - - self.EC_KEY_set_private_key = self._lib.EC_KEY_set_private_key - self.EC_KEY_set_private_key.restype = ctypes.c_int - self.EC_KEY_set_private_key.argtypes = [ctypes.c_void_p, - ctypes.c_void_p] - - self.EC_KEY_set_public_key = self._lib.EC_KEY_set_public_key - self.EC_KEY_set_public_key.restype = ctypes.c_int - self.EC_KEY_set_public_key.argtypes = [ctypes.c_void_p, - ctypes.c_void_p] - - self.EC_KEY_set_group = self._lib.EC_KEY_set_group - self.EC_KEY_set_group.restype = ctypes.c_int - self.EC_KEY_set_group.argtypes = [ctypes.c_void_p, ctypes.c_void_p] - - self.EC_POINT_set_affine_coordinates_GFp = self._lib.EC_POINT_set_affine_coordinates_GFp - self.EC_POINT_set_affine_coordinates_GFp.restype = ctypes.c_int - self.EC_POINT_set_affine_coordinates_GFp.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p] - - self.EC_POINT_new = self._lib.EC_POINT_new - self.EC_POINT_new.restype = ctypes.c_void_p - self.EC_POINT_new.argtypes = [ctypes.c_void_p] - - self.EC_POINT_free = self._lib.EC_POINT_free - self.EC_POINT_free.restype = None - self.EC_POINT_free.argtypes = [ctypes.c_void_p] - - self.BN_CTX_free = self._lib.BN_CTX_free - self.BN_CTX_free.restype = None - self.BN_CTX_free.argtypes = [ctypes.c_void_p] - - self.EC_POINT_mul = self._lib.EC_POINT_mul - self.EC_POINT_mul.restype = None - self.EC_POINT_mul.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p] - - self.EC_KEY_set_private_key = self._lib.EC_KEY_set_private_key - self.EC_KEY_set_private_key.restype = ctypes.c_int - self.EC_KEY_set_private_key.argtypes = [ctypes.c_void_p, - ctypes.c_void_p] - - if self._hexversion >= 0x10100000 and not self._libreSSL: - self.EC_KEY_OpenSSL = self._lib.EC_KEY_OpenSSL - self._lib.EC_KEY_OpenSSL.restype = ctypes.c_void_p - self._lib.EC_KEY_OpenSSL.argtypes = [] - - self.EC_KEY_set_method = self._lib.EC_KEY_set_method - self._lib.EC_KEY_set_method.restype = ctypes.c_int - self._lib.EC_KEY_set_method.argtypes = [ctypes.c_void_p, ctypes.c_void_p] - else: - self.ECDH_OpenSSL = self._lib.ECDH_OpenSSL - self._lib.ECDH_OpenSSL.restype = ctypes.c_void_p - self._lib.ECDH_OpenSSL.argtypes = [] - - self.ECDH_set_method = self._lib.ECDH_set_method - self._lib.ECDH_set_method.restype = ctypes.c_int - self._lib.ECDH_set_method.argtypes = [ctypes.c_void_p, ctypes.c_void_p] - - self.BN_CTX_new = self._lib.BN_CTX_new - self._lib.BN_CTX_new.restype = ctypes.c_void_p - self._lib.BN_CTX_new.argtypes = [] - - self.ECDH_compute_key = self._lib.ECDH_compute_key - self.ECDH_compute_key.restype = ctypes.c_int - self.ECDH_compute_key.argtypes = [ctypes.c_void_p, - ctypes.c_int, ctypes.c_void_p, ctypes.c_void_p] - - self.EVP_CipherInit_ex = self._lib.EVP_CipherInit_ex - self.EVP_CipherInit_ex.restype = ctypes.c_int - self.EVP_CipherInit_ex.argtypes = [ctypes.c_void_p, - ctypes.c_void_p, ctypes.c_void_p] - - self.EVP_CIPHER_CTX_new = self._lib.EVP_CIPHER_CTX_new - self.EVP_CIPHER_CTX_new.restype = ctypes.c_void_p - self.EVP_CIPHER_CTX_new.argtypes = [] - - # Cipher - self.EVP_aes_128_cfb128 = self._lib.EVP_aes_128_cfb128 - self.EVP_aes_128_cfb128.restype = ctypes.c_void_p - self.EVP_aes_128_cfb128.argtypes = [] - - self.EVP_aes_256_cfb128 = self._lib.EVP_aes_256_cfb128 - self.EVP_aes_256_cfb128.restype = ctypes.c_void_p - self.EVP_aes_256_cfb128.argtypes = [] - - self.EVP_aes_128_cbc = self._lib.EVP_aes_128_cbc - self.EVP_aes_128_cbc.restype = ctypes.c_void_p - self.EVP_aes_128_cbc.argtypes = [] - - self.EVP_aes_256_cbc = self._lib.EVP_aes_256_cbc - self.EVP_aes_256_cbc.restype = ctypes.c_void_p - self.EVP_aes_256_cbc.argtypes = [] - - #self.EVP_aes_128_ctr = self._lib.EVP_aes_128_ctr - #self.EVP_aes_128_ctr.restype = ctypes.c_void_p - #self.EVP_aes_128_ctr.argtypes = [] - - #self.EVP_aes_256_ctr = self._lib.EVP_aes_256_ctr - #self.EVP_aes_256_ctr.restype = ctypes.c_void_p - #self.EVP_aes_256_ctr.argtypes = [] - - self.EVP_aes_128_ofb = self._lib.EVP_aes_128_ofb - self.EVP_aes_128_ofb.restype = ctypes.c_void_p - self.EVP_aes_128_ofb.argtypes = [] - - self.EVP_aes_256_ofb = self._lib.EVP_aes_256_ofb - self.EVP_aes_256_ofb.restype = ctypes.c_void_p - self.EVP_aes_256_ofb.argtypes = [] - - self.EVP_bf_cbc = self._lib.EVP_bf_cbc - self.EVP_bf_cbc.restype = ctypes.c_void_p - self.EVP_bf_cbc.argtypes = [] - - self.EVP_bf_cfb64 = self._lib.EVP_bf_cfb64 - self.EVP_bf_cfb64.restype = ctypes.c_void_p - self.EVP_bf_cfb64.argtypes = [] - - self.EVP_rc4 = self._lib.EVP_rc4 - self.EVP_rc4.restype = ctypes.c_void_p - self.EVP_rc4.argtypes = [] - - if self._hexversion >= 0x10100000 and not self._libreSSL: - self.EVP_CIPHER_CTX_reset = self._lib.EVP_CIPHER_CTX_reset - self.EVP_CIPHER_CTX_reset.restype = ctypes.c_int - self.EVP_CIPHER_CTX_reset.argtypes = [ctypes.c_void_p] - else: - self.EVP_CIPHER_CTX_cleanup = self._lib.EVP_CIPHER_CTX_cleanup - self.EVP_CIPHER_CTX_cleanup.restype = ctypes.c_int - self.EVP_CIPHER_CTX_cleanup.argtypes = [ctypes.c_void_p] - - self.EVP_CIPHER_CTX_free = self._lib.EVP_CIPHER_CTX_free - self.EVP_CIPHER_CTX_free.restype = None - self.EVP_CIPHER_CTX_free.argtypes = [ctypes.c_void_p] - - self.EVP_CipherUpdate = self._lib.EVP_CipherUpdate - self.EVP_CipherUpdate.restype = ctypes.c_int - self.EVP_CipherUpdate.argtypes = [ctypes.c_void_p, - ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_int] - - self.EVP_CipherFinal_ex = self._lib.EVP_CipherFinal_ex - self.EVP_CipherFinal_ex.restype = ctypes.c_int - self.EVP_CipherFinal_ex.argtypes = [ctypes.c_void_p, - ctypes.c_void_p, ctypes.c_void_p] - - self.EVP_DigestInit = self._lib.EVP_DigestInit - self.EVP_DigestInit.restype = ctypes.c_int - self._lib.EVP_DigestInit.argtypes = [ctypes.c_void_p, ctypes.c_void_p] - - self.EVP_DigestInit_ex = self._lib.EVP_DigestInit_ex - self.EVP_DigestInit_ex.restype = ctypes.c_int - self._lib.EVP_DigestInit_ex.argtypes = 3 * [ctypes.c_void_p] - - self.EVP_DigestUpdate = self._lib.EVP_DigestUpdate - self.EVP_DigestUpdate.restype = ctypes.c_int - self.EVP_DigestUpdate.argtypes = [ctypes.c_void_p, - ctypes.c_void_p, ctypes.c_int] - - self.EVP_DigestFinal = self._lib.EVP_DigestFinal - self.EVP_DigestFinal.restype = ctypes.c_int - self.EVP_DigestFinal.argtypes = [ctypes.c_void_p, - ctypes.c_void_p, ctypes.c_void_p] - - self.EVP_DigestFinal_ex = self._lib.EVP_DigestFinal_ex - self.EVP_DigestFinal_ex.restype = ctypes.c_int - self.EVP_DigestFinal_ex.argtypes = [ctypes.c_void_p, - ctypes.c_void_p, ctypes.c_void_p] - - self.ECDSA_sign = self._lib.ECDSA_sign - self.ECDSA_sign.restype = ctypes.c_int - self.ECDSA_sign.argtypes = [ctypes.c_int, ctypes.c_void_p, - ctypes.c_int, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p] - - self.ECDSA_verify = self._lib.ECDSA_verify - self.ECDSA_verify.restype = ctypes.c_int - self.ECDSA_verify.argtypes = [ctypes.c_int, ctypes.c_void_p, - ctypes.c_int, ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p] - - if self._hexversion >= 0x10100000 and not self._libreSSL: - self.EVP_MD_CTX_new = self._lib.EVP_MD_CTX_new - self.EVP_MD_CTX_new.restype = ctypes.c_void_p - self.EVP_MD_CTX_new.argtypes = [] - - self.EVP_MD_CTX_reset = self._lib.EVP_MD_CTX_reset - self.EVP_MD_CTX_reset.restype = None - self.EVP_MD_CTX_reset.argtypes = [ctypes.c_void_p] - - self.EVP_MD_CTX_free = self._lib.EVP_MD_CTX_free - self.EVP_MD_CTX_free.restype = None - self.EVP_MD_CTX_free.argtypes = [ctypes.c_void_p] - - self.EVP_sha1 = self._lib.EVP_sha1 - self.EVP_sha1.restype = ctypes.c_void_p - self.EVP_sha1.argtypes = [] - - self.digest_ecdsa_sha1 = self.EVP_sha1 - else: - self.EVP_MD_CTX_create = self._lib.EVP_MD_CTX_create - self.EVP_MD_CTX_create.restype = ctypes.c_void_p - self.EVP_MD_CTX_create.argtypes = [] - - self.EVP_MD_CTX_init = self._lib.EVP_MD_CTX_init - self.EVP_MD_CTX_init.restype = None - self.EVP_MD_CTX_init.argtypes = [ctypes.c_void_p] - - self.EVP_MD_CTX_destroy = self._lib.EVP_MD_CTX_destroy - self.EVP_MD_CTX_destroy.restype = None - self.EVP_MD_CTX_destroy.argtypes = [ctypes.c_void_p] - - self.EVP_ecdsa = self._lib.EVP_ecdsa - self._lib.EVP_ecdsa.restype = ctypes.c_void_p - self._lib.EVP_ecdsa.argtypes = [] - - self.digest_ecdsa_sha1 = self.EVP_ecdsa - - self.RAND_bytes = self._lib.RAND_bytes - self.RAND_bytes.restype = ctypes.c_int - self.RAND_bytes.argtypes = [ctypes.c_void_p, ctypes.c_int] - - self.EVP_sha256 = self._lib.EVP_sha256 - self.EVP_sha256.restype = ctypes.c_void_p - self.EVP_sha256.argtypes = [] - - self.i2o_ECPublicKey = self._lib.i2o_ECPublicKey - self.i2o_ECPublicKey.restype = ctypes.c_void_p - self.i2o_ECPublicKey.argtypes = [ctypes.c_void_p, ctypes.c_void_p] - - self.EVP_sha512 = self._lib.EVP_sha512 - self.EVP_sha512.restype = ctypes.c_void_p - self.EVP_sha512.argtypes = [] - - self.HMAC = self._lib.HMAC - self.HMAC.restype = ctypes.c_void_p - self.HMAC.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.c_int, - ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p, ctypes.c_void_p] - - try: - self.PKCS5_PBKDF2_HMAC = self._lib.PKCS5_PBKDF2_HMAC - except: - # The above is not compatible with all versions of OSX. - self.PKCS5_PBKDF2_HMAC = self._lib.PKCS5_PBKDF2_HMAC_SHA1 - - self.PKCS5_PBKDF2_HMAC.restype = ctypes.c_int - self.PKCS5_PBKDF2_HMAC.argtypes = [ctypes.c_void_p, ctypes.c_int, - ctypes.c_void_p, ctypes.c_int, - ctypes.c_int, ctypes.c_void_p, - ctypes.c_int, ctypes.c_void_p] - - self._set_ciphers() - self._set_curves() - - def _set_ciphers(self): - self.cipher_algo = { - 'aes-128-cbc': CipherName('aes-128-cbc', self.EVP_aes_128_cbc, 16), - 'aes-256-cbc': CipherName('aes-256-cbc', self.EVP_aes_256_cbc, 16), - 'aes-128-cfb': CipherName('aes-128-cfb', self.EVP_aes_128_cfb128, 16), - 'aes-256-cfb': CipherName('aes-256-cfb', self.EVP_aes_256_cfb128, 16), - 'aes-128-ofb': CipherName('aes-128-ofb', self._lib.EVP_aes_128_ofb, 16), - 'aes-256-ofb': CipherName('aes-256-ofb', self._lib.EVP_aes_256_ofb, 16), - #'aes-128-ctr': CipherName('aes-128-ctr', self._lib.EVP_aes_128_ctr, 16), - #'aes-256-ctr': CipherName('aes-256-ctr', self._lib.EVP_aes_256_ctr, 16), - 'bf-cfb': CipherName('bf-cfb', self.EVP_bf_cfb64, 8), - 'bf-cbc': CipherName('bf-cbc', self.EVP_bf_cbc, 8), - 'rc4': CipherName('rc4', self.EVP_rc4, 128), # 128 is the initialisation size not block size - } - - def _set_curves(self): - self.curves = { - 'secp112r1': 704, - 'secp112r2': 705, - 'secp128r1': 706, - 'secp128r2': 707, - 'secp160k1': 708, - 'secp160r1': 709, - 'secp160r2': 710, - 'secp192k1': 711, - 'secp224k1': 712, - 'secp224r1': 713, - 'secp256k1': 714, - 'secp384r1': 715, - 'secp521r1': 716, - 'sect113r1': 717, - 'sect113r2': 718, - 'sect131r1': 719, - 'sect131r2': 720, - 'sect163k1': 721, - 'sect163r1': 722, - 'sect163r2': 723, - 'sect193r1': 724, - 'sect193r2': 725, - 'sect233k1': 726, - 'sect233r1': 727, - 'sect239k1': 728, - 'sect283k1': 729, - 'sect283r1': 730, - 'sect409k1': 731, - 'sect409r1': 732, - 'sect571k1': 733, - 'sect571r1': 734, - } - - def BN_num_bytes(self, x): - """ - returns the length of a BN (OpenSSl API) - """ - return int((self.BN_num_bits(x) + 7) / 8) - - def get_cipher(self, name): - """ - returns the OpenSSL cipher instance - """ - if name not in self.cipher_algo: - raise Exception("Unknown cipher") - return self.cipher_algo[name] - - def get_curve(self, name): - """ - returns the id of a elliptic curve - """ - if name not in self.curves: - raise Exception("Unknown curve") - return self.curves[name] - - def get_curve_by_id(self, id): - """ - returns the name of a elliptic curve with his id - """ - res = None - for i in self.curves: - if self.curves[i] == id: - res = i - break - if res is None: - raise Exception("Unknown curve") - return res - - def rand(self, size): - """ - OpenSSL random function - """ - buffer = self.malloc(0, size) - # This pyelliptic library, by default, didn't check the return value of RAND_bytes. It is - # evidently possible that it returned an error and not-actually-random data. However, in - # tests on various operating systems, while generating hundreds of gigabytes of random - # strings of various sizes I could not get an error to occur. Also Bitcoin doesn't check - # the return value of RAND_bytes either. - # Fixed in Bitmessage version 0.4.2 (in source code on 2013-10-13) - while self.RAND_bytes(buffer, size) != 1: - import time - time.sleep(1) - return buffer.raw - - def malloc(self, data, size): - """ - returns a create_string_buffer (ctypes) - """ - buffer = None - if data != 0: - if sys.version_info.major == 3 and isinstance(data, type('')): - data = data.encode() - buffer = self.create_string_buffer(data, size) - else: - buffer = self.create_string_buffer(size) - return buffer - -def loadOpenSSL(): - import logging - import util.SslPatch - global OpenSSL - OpenSSL = _OpenSSL(util.SslPatch.getLibraryPath()) - logging.debug("pyelliptic loaded: %s", OpenSSL._lib) - -loadOpenSSL() diff --git a/src/lib/rsa/LICENSE b/src/lib/rsa/LICENSE deleted file mode 100644 index da76c9d7..00000000 --- a/src/lib/rsa/LICENSE +++ /dev/null @@ -1,13 +0,0 @@ -Copyright 2011 Sybren A. Stüvel <sybren@stuvel.eu> - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/src/lib/rsa/__init__.py b/src/lib/rsa/__init__.py deleted file mode 100644 index c572c06b..00000000 --- a/src/lib/rsa/__init__.py +++ /dev/null @@ -1,42 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2011 Sybren A. Stüvel <sybren@stuvel.eu> -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -"""RSA module - -Module for calculating large primes, and RSA encryption, decryption, signing -and verification. Includes generating public and private keys. - -WARNING: this implementation does not use random padding, compression of the -cleartext input to prevent repetitions, or other common security improvements. -Use with care. - -""" - -from rsa.key import newkeys, PrivateKey, PublicKey -from rsa.pkcs1 import encrypt, decrypt, sign, verify, DecryptionError, \ - VerificationError - -__author__ = "Sybren Stuvel, Barry Mead and Yesudeep Mangalapilly" -__date__ = "2016-03-29" -__version__ = '3.4.2' - -# Do doctest if we're run directly -if __name__ == "__main__": - import doctest - - doctest.testmod() - -__all__ = ["newkeys", "encrypt", "decrypt", "sign", "verify", 'PublicKey', - 'PrivateKey', 'DecryptionError', 'VerificationError'] diff --git a/src/lib/rsa/_compat.py b/src/lib/rsa/_compat.py deleted file mode 100644 index 93393d9f..00000000 --- a/src/lib/rsa/_compat.py +++ /dev/null @@ -1,148 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2011 Sybren A. Stüvel <sybren@stuvel.eu> -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Python compatibility wrappers.""" - -from __future__ import absolute_import - -import sys -from struct import pack - -try: - MAX_INT = sys.maxsize -except AttributeError: - MAX_INT = sys.maxint - -MAX_INT64 = (1 << 63) - 1 -MAX_INT32 = (1 << 31) - 1 -MAX_INT16 = (1 << 15) - 1 - -# Determine the word size of the processor. -if MAX_INT == MAX_INT64: - # 64-bit processor. - MACHINE_WORD_SIZE = 64 -elif MAX_INT == MAX_INT32: - # 32-bit processor. - MACHINE_WORD_SIZE = 32 -else: - # Else we just assume 64-bit processor keeping up with modern times. - MACHINE_WORD_SIZE = 64 - -try: - # < Python3 - unicode_type = unicode -except NameError: - # Python3. - unicode_type = str - -# Fake byte literals. -if str is unicode_type: - def byte_literal(s): - return s.encode('latin1') -else: - def byte_literal(s): - return s - -# ``long`` is no more. Do type detection using this instead. -try: - integer_types = (int, long) -except NameError: - integer_types = (int,) - -b = byte_literal - -# To avoid calling b() multiple times in tight loops. -ZERO_BYTE = b('\x00') -EMPTY_BYTE = b('') - - -def is_bytes(obj): - """ - Determines whether the given value is a byte string. - - :param obj: - The value to test. - :returns: - ``True`` if ``value`` is a byte string; ``False`` otherwise. - """ - return isinstance(obj, bytes) - - -def is_integer(obj): - """ - Determines whether the given value is an integer. - - :param obj: - The value to test. - :returns: - ``True`` if ``value`` is an integer; ``False`` otherwise. - """ - return isinstance(obj, integer_types) - - -def byte(num): - """ - Converts a number between 0 and 255 (both inclusive) to a base-256 (byte) - representation. - - Use it as a replacement for ``chr`` where you are expecting a byte - because this will work on all current versions of Python:: - - :param num: - An unsigned integer between 0 and 255 (both inclusive). - :returns: - A single byte. - """ - return pack("B", num) - - -def get_word_alignment(num, force_arch=64, - _machine_word_size=MACHINE_WORD_SIZE): - """ - Returns alignment details for the given number based on the platform - Python is running on. - - :param num: - Unsigned integral number. - :param force_arch: - If you don't want to use 64-bit unsigned chunks, set this to - anything other than 64. 32-bit chunks will be preferred then. - Default 64 will be used when on a 64-bit machine. - :param _machine_word_size: - (Internal) The machine word size used for alignment. - :returns: - 4-tuple:: - - (word_bits, word_bytes, - max_uint, packing_format_type) - """ - max_uint64 = 0xffffffffffffffff - max_uint32 = 0xffffffff - max_uint16 = 0xffff - max_uint8 = 0xff - - if force_arch == 64 and _machine_word_size >= 64 and num > max_uint32: - # 64-bit unsigned integer. - return 64, 8, max_uint64, "Q" - elif num > max_uint16: - # 32-bit unsigned integer - return 32, 4, max_uint32, "L" - elif num > max_uint8: - # 16-bit unsigned integer. - return 16, 2, max_uint16, "H" - else: - # 8-bit unsigned integer. - return 8, 1, max_uint8, "B" diff --git a/src/lib/rsa/_version133.py b/src/lib/rsa/_version133.py deleted file mode 100644 index ff03b45f..00000000 --- a/src/lib/rsa/_version133.py +++ /dev/null @@ -1,441 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2011 Sybren A. Stüvel <sybren@stuvel.eu> -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Deprecated version of the RSA module - -.. deprecated:: 2.0 - - This submodule is deprecated and will be completely removed as of version 4.0. - -Module for calculating large primes, and RSA encryption, decryption, -signing and verification. Includes generating public and private keys. - -WARNING: this code implements the mathematics of RSA. It is not suitable for -real-world secure cryptography purposes. It has not been reviewed by a security -expert. It does not include padding of data. There are many ways in which the -output of this module, when used without any modification, can be sucessfully -attacked. -""" - -__author__ = "Sybren Stuvel, Marloes de Boer and Ivo Tamboer" -__date__ = "2010-02-05" -__version__ = '1.3.3' - -# NOTE: Python's modulo can return negative numbers. We compensate for -# this behaviour using the abs() function - -try: - import cPickle as pickle -except ImportError: - import pickle -from pickle import dumps, loads -import base64 -import math -import os -import random -import sys -import types -import zlib - -from rsa._compat import byte - -# Display a warning that this insecure version is imported. -import warnings -warnings.warn('Insecure version of the RSA module is imported as %s, be careful' - % __name__) -warnings.warn('This submodule is deprecated and will be completely removed as of version 4.0.', - DeprecationWarning) - - -def gcd(p, q): - """Returns the greatest common divisor of p and q - - - >>> gcd(42, 6) - 6 - """ - if p<q: return gcd(q, p) - if q == 0: return p - return gcd(q, abs(p%q)) - -def bytes2int(bytes): - """Converts a list of bytes or a string to an integer - """ - - if not (type(bytes) is types.ListType or type(bytes) is types.StringType): - raise TypeError("You must pass a string or a list") - - # Convert byte stream to integer - integer = 0 - for byte in bytes: - integer *= 256 - if type(byte) is types.StringType: byte = ord(byte) - integer += byte - - return integer - -def int2bytes(number): - """Converts a number to a string of bytes - """ - - if not (type(number) is types.LongType or type(number) is types.IntType): - raise TypeError("You must pass a long or an int") - - string = "" - - while number > 0: - string = "%s%s" % (byte(number & 0xFF), string) - number /= 256 - - return string - -def fast_exponentiation(a, p, n): - """Calculates r = a^p mod n - """ - result = a % n - remainders = [] - while p != 1: - remainders.append(p & 1) - p = p >> 1 - while remainders: - rem = remainders.pop() - result = ((a ** rem) * result ** 2) % n - return result - -def read_random_int(nbits): - """Reads a random integer of approximately nbits bits rounded up - to whole bytes""" - - nbytes = ceil(nbits/8.) - randomdata = os.urandom(nbytes) - return bytes2int(randomdata) - -def ceil(x): - """ceil(x) -> int(math.ceil(x))""" - - return int(math.ceil(x)) - -def randint(minvalue, maxvalue): - """Returns a random integer x with minvalue <= x <= maxvalue""" - - # Safety - get a lot of random data even if the range is fairly - # small - min_nbits = 32 - - # The range of the random numbers we need to generate - range = maxvalue - minvalue - - # Which is this number of bytes - rangebytes = ceil(math.log(range, 2) / 8.) - - # Convert to bits, but make sure it's always at least min_nbits*2 - rangebits = max(rangebytes * 8, min_nbits * 2) - - # Take a random number of bits between min_nbits and rangebits - nbits = random.randint(min_nbits, rangebits) - - return (read_random_int(nbits) % range) + minvalue - -def fermat_little_theorem(p): - """Returns 1 if p may be prime, and something else if p definitely - is not prime""" - - a = randint(1, p-1) - return fast_exponentiation(a, p-1, p) - -def jacobi(a, b): - """Calculates the value of the Jacobi symbol (a/b) - """ - - if a % b == 0: - return 0 - result = 1 - while a > 1: - if a & 1: - if ((a-1)*(b-1) >> 2) & 1: - result = -result - b, a = a, b % a - else: - if ((b ** 2 - 1) >> 3) & 1: - result = -result - a = a >> 1 - return result - -def jacobi_witness(x, n): - """Returns False if n is an Euler pseudo-prime with base x, and - True otherwise. - """ - - j = jacobi(x, n) % n - f = fast_exponentiation(x, (n-1)/2, n) - - if j == f: return False - return True - -def randomized_primality_testing(n, k): - """Calculates whether n is composite (which is always correct) or - prime (which is incorrect with error probability 2**-k) - - Returns False if the number if composite, and True if it's - probably prime. - """ - - q = 0.5 # Property of the jacobi_witness function - - # t = int(math.ceil(k / math.log(1/q, 2))) - t = ceil(k / math.log(1/q, 2)) - for i in range(t+1): - x = randint(1, n-1) - if jacobi_witness(x, n): return False - - return True - -def is_prime(number): - """Returns True if the number is prime, and False otherwise. - """ - - """ - if not fermat_little_theorem(number) == 1: - # Not prime, according to Fermat's little theorem - return False - """ - - if randomized_primality_testing(number, 5): - # Prime, according to Jacobi - return True - - # Not prime - return False - - -def getprime(nbits): - """Returns a prime number of max. 'math.ceil(nbits/8)*8' bits. In - other words: nbits is rounded up to whole bytes. - """ - - nbytes = int(math.ceil(nbits/8.)) - - while True: - integer = read_random_int(nbits) - - # Make sure it's odd - integer |= 1 - - # Test for primeness - if is_prime(integer): break - - # Retry if not prime - - return integer - -def are_relatively_prime(a, b): - """Returns True if a and b are relatively prime, and False if they - are not. - """ - - d = gcd(a, b) - return (d == 1) - -def find_p_q(nbits): - """Returns a tuple of two different primes of nbits bits""" - - p = getprime(nbits) - while True: - q = getprime(nbits) - if not q == p: break - - return (p, q) - -def extended_euclid_gcd(a, b): - """Returns a tuple (d, i, j) such that d = gcd(a, b) = ia + jb - """ - - if b == 0: - return (a, 1, 0) - - q = abs(a % b) - r = long(a / b) - (d, k, l) = extended_euclid_gcd(b, q) - - return (d, l, k - l*r) - -# Main function: calculate encryption and decryption keys -def calculate_keys(p, q, nbits): - """Calculates an encryption and a decryption key for p and q, and - returns them as a tuple (e, d)""" - - n = p * q - phi_n = (p-1) * (q-1) - - while True: - # Make sure e has enough bits so we ensure "wrapping" through - # modulo n - e = getprime(max(8, nbits/2)) - if are_relatively_prime(e, n) and are_relatively_prime(e, phi_n): break - - (d, i, j) = extended_euclid_gcd(e, phi_n) - - if not d == 1: - raise Exception("e (%d) and phi_n (%d) are not relatively prime" % (e, phi_n)) - - if not (e * i) % phi_n == 1: - raise Exception("e (%d) and i (%d) are not mult. inv. modulo phi_n (%d)" % (e, i, phi_n)) - - return (e, i) - - -def gen_keys(nbits): - """Generate RSA keys of nbits bits. Returns (p, q, e, d). - - Note: this can take a long time, depending on the key size. - """ - - while True: - (p, q) = find_p_q(nbits) - (e, d) = calculate_keys(p, q, nbits) - - # For some reason, d is sometimes negative. We don't know how - # to fix it (yet), so we keep trying until everything is shiny - if d > 0: break - - return (p, q, e, d) - -def gen_pubpriv_keys(nbits): - """Generates public and private keys, and returns them as (pub, - priv). - - The public key consists of a dict {e: ..., , n: ....). The private - key consists of a dict {d: ...., p: ...., q: ....). - """ - - (p, q, e, d) = gen_keys(nbits) - - return ( {'e': e, 'n': p*q}, {'d': d, 'p': p, 'q': q} ) - -def encrypt_int(message, ekey, n): - """Encrypts a message using encryption key 'ekey', working modulo - n""" - - if type(message) is types.IntType: - return encrypt_int(long(message), ekey, n) - - if not type(message) is types.LongType: - raise TypeError("You must pass a long or an int") - - if message > 0 and \ - math.floor(math.log(message, 2)) > math.floor(math.log(n, 2)): - raise OverflowError("The message is too long") - - return fast_exponentiation(message, ekey, n) - -def decrypt_int(cyphertext, dkey, n): - """Decrypts a cypher text using the decryption key 'dkey', working - modulo n""" - - return encrypt_int(cyphertext, dkey, n) - -def sign_int(message, dkey, n): - """Signs 'message' using key 'dkey', working modulo n""" - - return decrypt_int(message, dkey, n) - -def verify_int(signed, ekey, n): - """verifies 'signed' using key 'ekey', working modulo n""" - - return encrypt_int(signed, ekey, n) - -def picklechops(chops): - """Pickles and base64encodes it's argument chops""" - - value = zlib.compress(dumps(chops)) - encoded = base64.encodestring(value) - return encoded.strip() - -def unpicklechops(string): - """base64decodes and unpickes it's argument string into chops""" - - return loads(zlib.decompress(base64.decodestring(string))) - -def chopstring(message, key, n, funcref): - """Splits 'message' into chops that are at most as long as n, - converts these into integers, and calls funcref(integer, key, n) - for each chop. - - Used by 'encrypt' and 'sign'. - """ - - msglen = len(message) - mbits = msglen * 8 - nbits = int(math.floor(math.log(n, 2))) - nbytes = nbits / 8 - blocks = msglen / nbytes - - if msglen % nbytes > 0: - blocks += 1 - - cypher = [] - - for bindex in range(blocks): - offset = bindex * nbytes - block = message[offset:offset+nbytes] - value = bytes2int(block) - cypher.append(funcref(value, key, n)) - - return picklechops(cypher) - -def gluechops(chops, key, n, funcref): - """Glues chops back together into a string. calls - funcref(integer, key, n) for each chop. - - Used by 'decrypt' and 'verify'. - """ - message = "" - - chops = unpicklechops(chops) - - for cpart in chops: - mpart = funcref(cpart, key, n) - message += int2bytes(mpart) - - return message - -def encrypt(message, key): - """Encrypts a string 'message' with the public key 'key'""" - - return chopstring(message, key['e'], key['n'], encrypt_int) - -def sign(message, key): - """Signs a string 'message' with the private key 'key'""" - - return chopstring(message, key['d'], key['p']*key['q'], decrypt_int) - -def decrypt(cypher, key): - """Decrypts a cypher with the private key 'key'""" - - return gluechops(cypher, key['d'], key['p']*key['q'], decrypt_int) - -def verify(cypher, key): - """Verifies a cypher with the public key 'key'""" - - return gluechops(cypher, key['e'], key['n'], encrypt_int) - -# Do doctest if we're not imported -if __name__ == "__main__": - import doctest - doctest.testmod() - -__all__ = ["gen_pubpriv_keys", "encrypt", "decrypt", "sign", "verify"] - diff --git a/src/lib/rsa/_version200.py b/src/lib/rsa/_version200.py deleted file mode 100644 index 1a169494..00000000 --- a/src/lib/rsa/_version200.py +++ /dev/null @@ -1,513 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2011 Sybren A. Stüvel <sybren@stuvel.eu> -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Deprecated version of the RSA module - -.. deprecated:: 3.0 - - This submodule is deprecated and will be completely removed as of version 4.0. - -""" - -__author__ = "Sybren Stuvel, Marloes de Boer, Ivo Tamboer, and Barry Mead" -__date__ = "2010-02-08" -__version__ = '2.0' - -import math -import os -import random -import sys -import types -from rsa._compat import byte - -# Display a warning that this insecure version is imported. -import warnings -warnings.warn('Insecure version of the RSA module is imported as %s' % __name__) -warnings.warn('This submodule is deprecated and will be completely removed as of version 4.0.', - DeprecationWarning) - - -def bit_size(number): - """Returns the number of bits required to hold a specific long number""" - - return int(math.ceil(math.log(number,2))) - -def gcd(p, q): - """Returns the greatest common divisor of p and q - >>> gcd(48, 180) - 12 - """ - # Iterateive Version is faster and uses much less stack space - while q != 0: - if p < q: (p,q) = (q,p) - (p,q) = (q, p % q) - return p - - -def bytes2int(bytes): - r"""Converts a list of bytes or a string to an integer - """ - - if not (type(bytes) is types.ListType or type(bytes) is types.StringType): - raise TypeError("You must pass a string or a list") - - # Convert byte stream to integer - integer = 0 - for byte in bytes: - integer *= 256 - if type(byte) is types.StringType: byte = ord(byte) - integer += byte - - return integer - -def int2bytes(number): - """ - Converts a number to a string of bytes - """ - - if not (type(number) is types.LongType or type(number) is types.IntType): - raise TypeError("You must pass a long or an int") - - string = "" - - while number > 0: - string = "%s%s" % (byte(number & 0xFF), string) - number /= 256 - - return string - -def to64(number): - """Converts a number in the range of 0 to 63 into base 64 digit - character in the range of '0'-'9', 'A'-'Z', 'a'-'z','-','_'. - """ - - if not (type(number) is types.LongType or type(number) is types.IntType): - raise TypeError("You must pass a long or an int") - - if 0 <= number <= 9: #00-09 translates to '0' - '9' - return byte(number + 48) - - if 10 <= number <= 35: - return byte(number + 55) #10-35 translates to 'A' - 'Z' - - if 36 <= number <= 61: - return byte(number + 61) #36-61 translates to 'a' - 'z' - - if number == 62: # 62 translates to '-' (minus) - return byte(45) - - if number == 63: # 63 translates to '_' (underscore) - return byte(95) - - raise ValueError('Invalid Base64 value: %i' % number) - - -def from64(number): - """Converts an ordinal character value in the range of - 0-9,A-Z,a-z,-,_ to a number in the range of 0-63. - """ - - if not (type(number) is types.LongType or type(number) is types.IntType): - raise TypeError("You must pass a long or an int") - - if 48 <= number <= 57: #ord('0') - ord('9') translates to 0-9 - return(number - 48) - - if 65 <= number <= 90: #ord('A') - ord('Z') translates to 10-35 - return(number - 55) - - if 97 <= number <= 122: #ord('a') - ord('z') translates to 36-61 - return(number - 61) - - if number == 45: #ord('-') translates to 62 - return(62) - - if number == 95: #ord('_') translates to 63 - return(63) - - raise ValueError('Invalid Base64 value: %i' % number) - - -def int2str64(number): - """Converts a number to a string of base64 encoded characters in - the range of '0'-'9','A'-'Z,'a'-'z','-','_'. - """ - - if not (type(number) is types.LongType or type(number) is types.IntType): - raise TypeError("You must pass a long or an int") - - string = "" - - while number > 0: - string = "%s%s" % (to64(number & 0x3F), string) - number /= 64 - - return string - - -def str642int(string): - """Converts a base64 encoded string into an integer. - The chars of this string in in the range '0'-'9','A'-'Z','a'-'z','-','_' - """ - - if not (type(string) is types.ListType or type(string) is types.StringType): - raise TypeError("You must pass a string or a list") - - integer = 0 - for byte in string: - integer *= 64 - if type(byte) is types.StringType: byte = ord(byte) - integer += from64(byte) - - return integer - -def read_random_int(nbits): - """Reads a random integer of approximately nbits bits rounded up - to whole bytes""" - - nbytes = int(math.ceil(nbits/8.)) - randomdata = os.urandom(nbytes) - return bytes2int(randomdata) - -def randint(minvalue, maxvalue): - """Returns a random integer x with minvalue <= x <= maxvalue""" - - # Safety - get a lot of random data even if the range is fairly - # small - min_nbits = 32 - - # The range of the random numbers we need to generate - range = (maxvalue - minvalue) + 1 - - # Which is this number of bytes - rangebytes = ((bit_size(range) + 7) / 8) - - # Convert to bits, but make sure it's always at least min_nbits*2 - rangebits = max(rangebytes * 8, min_nbits * 2) - - # Take a random number of bits between min_nbits and rangebits - nbits = random.randint(min_nbits, rangebits) - - return (read_random_int(nbits) % range) + minvalue - -def jacobi(a, b): - """Calculates the value of the Jacobi symbol (a/b) - where both a and b are positive integers, and b is odd - """ - - if a == 0: return 0 - result = 1 - while a > 1: - if a & 1: - if ((a-1)*(b-1) >> 2) & 1: - result = -result - a, b = b % a, a - else: - if (((b * b) - 1) >> 3) & 1: - result = -result - a >>= 1 - if a == 0: return 0 - return result - -def jacobi_witness(x, n): - """Returns False if n is an Euler pseudo-prime with base x, and - True otherwise. - """ - - j = jacobi(x, n) % n - f = pow(x, (n-1)/2, n) - - if j == f: return False - return True - -def randomized_primality_testing(n, k): - """Calculates whether n is composite (which is always correct) or - prime (which is incorrect with error probability 2**-k) - - Returns False if the number is composite, and True if it's - probably prime. - """ - - # 50% of Jacobi-witnesses can report compositness of non-prime numbers - - for i in range(k): - x = randint(1, n-1) - if jacobi_witness(x, n): return False - - return True - -def is_prime(number): - """Returns True if the number is prime, and False otherwise. - """ - - if randomized_primality_testing(number, 6): - # Prime, according to Jacobi - return True - - # Not prime - return False - - -def getprime(nbits): - """Returns a prime number of max. 'math.ceil(nbits/8)*8' bits. In - other words: nbits is rounded up to whole bytes. - """ - - while True: - integer = read_random_int(nbits) - - # Make sure it's odd - integer |= 1 - - # Test for primeness - if is_prime(integer): break - - # Retry if not prime - - return integer - -def are_relatively_prime(a, b): - """Returns True if a and b are relatively prime, and False if they - are not. - - >>> are_relatively_prime(2, 3) - 1 - >>> are_relatively_prime(2, 4) - 0 - """ - - d = gcd(a, b) - return (d == 1) - -def find_p_q(nbits): - """Returns a tuple of two different primes of nbits bits""" - pbits = nbits + (nbits/16) #Make sure that p and q aren't too close - qbits = nbits - (nbits/16) #or the factoring programs can factor n - p = getprime(pbits) - while True: - q = getprime(qbits) - #Make sure p and q are different. - if not q == p: break - return (p, q) - -def extended_gcd(a, b): - """Returns a tuple (r, i, j) such that r = gcd(a, b) = ia + jb - """ - # r = gcd(a,b) i = multiplicitive inverse of a mod b - # or j = multiplicitive inverse of b mod a - # Neg return values for i or j are made positive mod b or a respectively - # Iterateive Version is faster and uses much less stack space - x = 0 - y = 1 - lx = 1 - ly = 0 - oa = a #Remember original a/b to remove - ob = b #negative values from return results - while b != 0: - q = long(a/b) - (a, b) = (b, a % b) - (x, lx) = ((lx - (q * x)),x) - (y, ly) = ((ly - (q * y)),y) - if (lx < 0): lx += ob #If neg wrap modulo orignal b - if (ly < 0): ly += oa #If neg wrap modulo orignal a - return (a, lx, ly) #Return only positive values - -# Main function: calculate encryption and decryption keys -def calculate_keys(p, q, nbits): - """Calculates an encryption and a decryption key for p and q, and - returns them as a tuple (e, d)""" - - n = p * q - phi_n = (p-1) * (q-1) - - while True: - # Make sure e has enough bits so we ensure "wrapping" through - # modulo n - e = max(65537,getprime(nbits/4)) - if are_relatively_prime(e, n) and are_relatively_prime(e, phi_n): break - - (d, i, j) = extended_gcd(e, phi_n) - - if not d == 1: - raise Exception("e (%d) and phi_n (%d) are not relatively prime" % (e, phi_n)) - if (i < 0): - raise Exception("New extended_gcd shouldn't return negative values") - if not (e * i) % phi_n == 1: - raise Exception("e (%d) and i (%d) are not mult. inv. modulo phi_n (%d)" % (e, i, phi_n)) - - return (e, i) - - -def gen_keys(nbits): - """Generate RSA keys of nbits bits. Returns (p, q, e, d). - - Note: this can take a long time, depending on the key size. - """ - - (p, q) = find_p_q(nbits) - (e, d) = calculate_keys(p, q, nbits) - - return (p, q, e, d) - -def newkeys(nbits): - """Generates public and private keys, and returns them as (pub, - priv). - - The public key consists of a dict {e: ..., , n: ....). The private - key consists of a dict {d: ...., p: ...., q: ....). - """ - nbits = max(9,nbits) # Don't let nbits go below 9 bits - (p, q, e, d) = gen_keys(nbits) - - return ( {'e': e, 'n': p*q}, {'d': d, 'p': p, 'q': q} ) - -def encrypt_int(message, ekey, n): - """Encrypts a message using encryption key 'ekey', working modulo n""" - - if type(message) is types.IntType: - message = long(message) - - if not type(message) is types.LongType: - raise TypeError("You must pass a long or int") - - if message < 0 or message > n: - raise OverflowError("The message is too long") - - #Note: Bit exponents start at zero (bit counts start at 1) this is correct - safebit = bit_size(n) - 2 #compute safe bit (MSB - 1) - message += (1 << safebit) #add safebit to ensure folding - - return pow(message, ekey, n) - -def decrypt_int(cyphertext, dkey, n): - """Decrypts a cypher text using the decryption key 'dkey', working - modulo n""" - - message = pow(cyphertext, dkey, n) - - safebit = bit_size(n) - 2 #compute safe bit (MSB - 1) - message -= (1 << safebit) #remove safebit before decode - - return message - -def encode64chops(chops): - """base64encodes chops and combines them into a ',' delimited string""" - - chips = [] #chips are character chops - - for value in chops: - chips.append(int2str64(value)) - - #delimit chops with comma - encoded = ','.join(chips) - - return encoded - -def decode64chops(string): - """base64decodes and makes a ',' delimited string into chops""" - - chips = string.split(',') #split chops at commas - - chops = [] - - for string in chips: #make char chops (chips) into chops - chops.append(str642int(string)) - - return chops - -def chopstring(message, key, n, funcref): - """Chops the 'message' into integers that fit into n, - leaving room for a safebit to be added to ensure that all - messages fold during exponentiation. The MSB of the number n - is not independant modulo n (setting it could cause overflow), so - use the next lower bit for the safebit. Therefore reserve 2-bits - in the number n for non-data bits. Calls specified encryption - function for each chop. - - Used by 'encrypt' and 'sign'. - """ - - msglen = len(message) - mbits = msglen * 8 - #Set aside 2-bits so setting of safebit won't overflow modulo n. - nbits = bit_size(n) - 2 # leave room for safebit - nbytes = nbits / 8 - blocks = msglen / nbytes - - if msglen % nbytes > 0: - blocks += 1 - - cypher = [] - - for bindex in range(blocks): - offset = bindex * nbytes - block = message[offset:offset+nbytes] - value = bytes2int(block) - cypher.append(funcref(value, key, n)) - - return encode64chops(cypher) #Encode encrypted ints to base64 strings - -def gluechops(string, key, n, funcref): - """Glues chops back together into a string. calls - funcref(integer, key, n) for each chop. - - Used by 'decrypt' and 'verify'. - """ - message = "" - - chops = decode64chops(string) #Decode base64 strings into integer chops - - for cpart in chops: - mpart = funcref(cpart, key, n) #Decrypt each chop - message += int2bytes(mpart) #Combine decrypted strings into a msg - - return message - -def encrypt(message, key): - """Encrypts a string 'message' with the public key 'key'""" - if 'n' not in key: - raise Exception("You must use the public key with encrypt") - - return chopstring(message, key['e'], key['n'], encrypt_int) - -def sign(message, key): - """Signs a string 'message' with the private key 'key'""" - if 'p' not in key: - raise Exception("You must use the private key with sign") - - return chopstring(message, key['d'], key['p']*key['q'], encrypt_int) - -def decrypt(cypher, key): - """Decrypts a string 'cypher' with the private key 'key'""" - if 'p' not in key: - raise Exception("You must use the private key with decrypt") - - return gluechops(cypher, key['d'], key['p']*key['q'], decrypt_int) - -def verify(cypher, key): - """Verifies a string 'cypher' with the public key 'key'""" - if 'n' not in key: - raise Exception("You must use the public key with verify") - - return gluechops(cypher, key['e'], key['n'], decrypt_int) - -# Do doctest if we're not imported -if __name__ == "__main__": - import doctest - doctest.testmod() - -__all__ = ["newkeys", "encrypt", "decrypt", "sign", "verify"] - diff --git a/src/lib/rsa/asn1.py b/src/lib/rsa/asn1.py deleted file mode 100644 index b724b8f5..00000000 --- a/src/lib/rsa/asn1.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2011 Sybren A. Stüvel <sybren@stuvel.eu> -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""ASN.1 definitions. - -Not all ASN.1-handling code use these definitions, but when it does, they should be here. -""" - -from pyasn1.type import univ, namedtype, tag - - -class PubKeyHeader(univ.Sequence): - componentType = namedtype.NamedTypes( - namedtype.NamedType('oid', univ.ObjectIdentifier()), - namedtype.NamedType('parameters', univ.Null()), - ) - - -class OpenSSLPubKey(univ.Sequence): - componentType = namedtype.NamedTypes( - namedtype.NamedType('header', PubKeyHeader()), - - # This little hack (the implicit tag) allows us to get a Bit String as Octet String - namedtype.NamedType('key', univ.OctetString().subtype( - implicitTag=tag.Tag(tagClass=0, tagFormat=0, tagId=3))), - ) - - -class AsnPubKey(univ.Sequence): - """ASN.1 contents of DER encoded public key: - - RSAPublicKey ::= SEQUENCE { - modulus INTEGER, -- n - publicExponent INTEGER, -- e - """ - - componentType = namedtype.NamedTypes( - namedtype.NamedType('modulus', univ.Integer()), - namedtype.NamedType('publicExponent', univ.Integer()), - ) diff --git a/src/lib/rsa/bigfile.py b/src/lib/rsa/bigfile.py deleted file mode 100644 index 3a09716a..00000000 --- a/src/lib/rsa/bigfile.py +++ /dev/null @@ -1,135 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2011 Sybren A. Stüvel <sybren@stuvel.eu> -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Large file support - -.. deprecated:: 3.4 - - The VARBLOCK format is NOT recommended for general use, has been deprecated since - Python-RSA 3.4, and will be removed in a future release. It's vulnerable to a - number of attacks: - - 1. decrypt/encrypt_bigfile() does not implement `Authenticated encryption`_ nor - uses MACs to verify messages before decrypting public key encrypted messages. - - 2. decrypt/encrypt_bigfile() does not use hybrid encryption (it uses plain RSA) - and has no method for chaining, so block reordering is possible. - - See `issue #19 on Github`_ for more information. - -.. _Authenticated encryption: https://en.wikipedia.org/wiki/Authenticated_encryption -.. _issue #19 on Github: https://github.com/sybrenstuvel/python-rsa/issues/13 - - -This module contains functions to: - - - break a file into smaller blocks, and encrypt them, and store the - encrypted blocks in another file. - - - take such an encrypted files, decrypt its blocks, and reconstruct the - original file. - -The encrypted file format is as follows, where || denotes byte concatenation: - - FILE := VERSION || BLOCK || BLOCK ... - - BLOCK := LENGTH || DATA - - LENGTH := varint-encoded length of the subsequent data. Varint comes from - Google Protobuf, and encodes an integer into a variable number of bytes. - Each byte uses the 7 lowest bits to encode the value. The highest bit set - to 1 indicates the next byte is also part of the varint. The last byte will - have this bit set to 0. - -This file format is called the VARBLOCK format, in line with the varint format -used to denote the block sizes. - -""" - -import warnings - -from rsa import key, common, pkcs1, varblock -from rsa._compat import byte - - -def encrypt_bigfile(infile, outfile, pub_key): - """Encrypts a file, writing it to 'outfile' in VARBLOCK format. - - .. deprecated:: 3.4 - This function was deprecated in Python-RSA version 3.4 due to security issues - in the VARBLOCK format. See the documentation_ for more information. - - .. _documentation: https://stuvel.eu/python-rsa-doc/usage.html#working-with-big-files - - :param infile: file-like object to read the cleartext from - :param outfile: file-like object to write the crypto in VARBLOCK format to - :param pub_key: :py:class:`rsa.PublicKey` to encrypt with - - """ - - warnings.warn("The 'rsa.bigfile.encrypt_bigfile' function was deprecated in Python-RSA version " - "3.4 due to security issues in the VARBLOCK format. See " - "https://stuvel.eu/python-rsa-doc/usage.html#working-with-big-files " - "for more information.", - DeprecationWarning, stacklevel=2) - - if not isinstance(pub_key, key.PublicKey): - raise TypeError('Public key required, but got %r' % pub_key) - - key_bytes = common.bit_size(pub_key.n) // 8 - blocksize = key_bytes - 11 # keep space for PKCS#1 padding - - # Write the version number to the VARBLOCK file - outfile.write(byte(varblock.VARBLOCK_VERSION)) - - # Encrypt and write each block - for block in varblock.yield_fixedblocks(infile, blocksize): - crypto = pkcs1.encrypt(block, pub_key) - - varblock.write_varint(outfile, len(crypto)) - outfile.write(crypto) - - -def decrypt_bigfile(infile, outfile, priv_key): - """Decrypts an encrypted VARBLOCK file, writing it to 'outfile' - - .. deprecated:: 3.4 - This function was deprecated in Python-RSA version 3.4 due to security issues - in the VARBLOCK format. See the documentation_ for more information. - - .. _documentation: https://stuvel.eu/python-rsa-doc/usage.html#working-with-big-files - - :param infile: file-like object to read the crypto in VARBLOCK format from - :param outfile: file-like object to write the cleartext to - :param priv_key: :py:class:`rsa.PrivateKey` to decrypt with - - """ - - warnings.warn("The 'rsa.bigfile.decrypt_bigfile' function was deprecated in Python-RSA version " - "3.4 due to security issues in the VARBLOCK format. See " - "https://stuvel.eu/python-rsa-doc/usage.html#working-with-big-files " - "for more information.", - DeprecationWarning, stacklevel=2) - - if not isinstance(priv_key, key.PrivateKey): - raise TypeError('Private key required, but got %r' % priv_key) - - for block in varblock.yield_varblocks(infile): - cleartext = pkcs1.decrypt(block, priv_key) - outfile.write(cleartext) - - -__all__ = ['encrypt_bigfile', 'decrypt_bigfile'] diff --git a/src/lib/rsa/cli.py b/src/lib/rsa/cli.py deleted file mode 100644 index 3a218782..00000000 --- a/src/lib/rsa/cli.py +++ /dev/null @@ -1,383 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2011 Sybren A. Stüvel <sybren@stuvel.eu> -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Commandline scripts. - -These scripts are called by the executables defined in setup.py. -""" - -from __future__ import with_statement, print_function - -import abc -import sys -from optparse import OptionParser - -import rsa -import rsa.bigfile -import rsa.pkcs1 - -HASH_METHODS = sorted(rsa.pkcs1.HASH_METHODS.keys()) - - -def keygen(): - """Key generator.""" - - # Parse the CLI options - parser = OptionParser(usage='usage: %prog [options] keysize', - description='Generates a new RSA keypair of "keysize" bits.') - - parser.add_option('--pubout', type='string', - help='Output filename for the public key. The public key is ' - 'not saved if this option is not present. You can use ' - 'pyrsa-priv2pub to create the public key file later.') - - parser.add_option('-o', '--out', type='string', - help='Output filename for the private key. The key is ' - 'written to stdout if this option is not present.') - - parser.add_option('--form', - help='key format of the private and public keys - default PEM', - choices=('PEM', 'DER'), default='PEM') - - (cli, cli_args) = parser.parse_args(sys.argv[1:]) - - if len(cli_args) != 1: - parser.print_help() - raise SystemExit(1) - - try: - keysize = int(cli_args[0]) - except ValueError: - parser.print_help() - print('Not a valid number: %s' % cli_args[0], file=sys.stderr) - raise SystemExit(1) - - print('Generating %i-bit key' % keysize, file=sys.stderr) - (pub_key, priv_key) = rsa.newkeys(keysize) - - # Save public key - if cli.pubout: - print('Writing public key to %s' % cli.pubout, file=sys.stderr) - data = pub_key.save_pkcs1(format=cli.form) - with open(cli.pubout, 'wb') as outfile: - outfile.write(data) - - # Save private key - data = priv_key.save_pkcs1(format=cli.form) - - if cli.out: - print('Writing private key to %s' % cli.out, file=sys.stderr) - with open(cli.out, 'wb') as outfile: - outfile.write(data) - else: - print('Writing private key to stdout', file=sys.stderr) - sys.stdout.write(data) - - -class CryptoOperation(object): - """CLI callable that operates with input, output, and a key.""" - - __metaclass__ = abc.ABCMeta - - keyname = 'public' # or 'private' - usage = 'usage: %%prog [options] %(keyname)s_key' - description = None - operation = 'decrypt' - operation_past = 'decrypted' - operation_progressive = 'decrypting' - input_help = 'Name of the file to %(operation)s. Reads from stdin if ' \ - 'not specified.' - output_help = 'Name of the file to write the %(operation_past)s file ' \ - 'to. Written to stdout if this option is not present.' - expected_cli_args = 1 - has_output = True - - key_class = rsa.PublicKey - - def __init__(self): - self.usage = self.usage % self.__class__.__dict__ - self.input_help = self.input_help % self.__class__.__dict__ - self.output_help = self.output_help % self.__class__.__dict__ - - @abc.abstractmethod - def perform_operation(self, indata, key, cli_args=None): - """Performs the program's operation. - - Implement in a subclass. - - :returns: the data to write to the output. - """ - - def __call__(self): - """Runs the program.""" - - (cli, cli_args) = self.parse_cli() - - key = self.read_key(cli_args[0], cli.keyform) - - indata = self.read_infile(cli.input) - - print(self.operation_progressive.title(), file=sys.stderr) - outdata = self.perform_operation(indata, key, cli_args) - - if self.has_output: - self.write_outfile(outdata, cli.output) - - def parse_cli(self): - """Parse the CLI options - - :returns: (cli_opts, cli_args) - """ - - parser = OptionParser(usage=self.usage, description=self.description) - - parser.add_option('-i', '--input', type='string', help=self.input_help) - - if self.has_output: - parser.add_option('-o', '--output', type='string', help=self.output_help) - - parser.add_option('--keyform', - help='Key format of the %s key - default PEM' % self.keyname, - choices=('PEM', 'DER'), default='PEM') - - (cli, cli_args) = parser.parse_args(sys.argv[1:]) - - if len(cli_args) != self.expected_cli_args: - parser.print_help() - raise SystemExit(1) - - return cli, cli_args - - def read_key(self, filename, keyform): - """Reads a public or private key.""" - - print('Reading %s key from %s' % (self.keyname, filename), file=sys.stderr) - with open(filename, 'rb') as keyfile: - keydata = keyfile.read() - - return self.key_class.load_pkcs1(keydata, keyform) - - def read_infile(self, inname): - """Read the input file""" - - if inname: - print('Reading input from %s' % inname, file=sys.stderr) - with open(inname, 'rb') as infile: - return infile.read() - - print('Reading input from stdin', file=sys.stderr) - return sys.stdin.read() - - def write_outfile(self, outdata, outname): - """Write the output file""" - - if outname: - print('Writing output to %s' % outname, file=sys.stderr) - with open(outname, 'wb') as outfile: - outfile.write(outdata) - else: - print('Writing output to stdout', file=sys.stderr) - sys.stdout.write(outdata) - - -class EncryptOperation(CryptoOperation): - """Encrypts a file.""" - - keyname = 'public' - description = ('Encrypts a file. The file must be shorter than the key ' - 'length in order to be encrypted. For larger files, use the ' - 'pyrsa-encrypt-bigfile command.') - operation = 'encrypt' - operation_past = 'encrypted' - operation_progressive = 'encrypting' - - def perform_operation(self, indata, pub_key, cli_args=None): - """Encrypts files.""" - - return rsa.encrypt(indata, pub_key) - - -class DecryptOperation(CryptoOperation): - """Decrypts a file.""" - - keyname = 'private' - description = ('Decrypts a file. The original file must be shorter than ' - 'the key length in order to have been encrypted. For larger ' - 'files, use the pyrsa-decrypt-bigfile command.') - operation = 'decrypt' - operation_past = 'decrypted' - operation_progressive = 'decrypting' - key_class = rsa.PrivateKey - - def perform_operation(self, indata, priv_key, cli_args=None): - """Decrypts files.""" - - return rsa.decrypt(indata, priv_key) - - -class SignOperation(CryptoOperation): - """Signs a file.""" - - keyname = 'private' - usage = 'usage: %%prog [options] private_key hash_method' - description = ('Signs a file, outputs the signature. Choose the hash ' - 'method from %s' % ', '.join(HASH_METHODS)) - operation = 'sign' - operation_past = 'signature' - operation_progressive = 'Signing' - key_class = rsa.PrivateKey - expected_cli_args = 2 - - output_help = ('Name of the file to write the signature to. Written ' - 'to stdout if this option is not present.') - - def perform_operation(self, indata, priv_key, cli_args): - """Signs files.""" - - hash_method = cli_args[1] - if hash_method not in HASH_METHODS: - raise SystemExit('Invalid hash method, choose one of %s' % - ', '.join(HASH_METHODS)) - - return rsa.sign(indata, priv_key, hash_method) - - -class VerifyOperation(CryptoOperation): - """Verify a signature.""" - - keyname = 'public' - usage = 'usage: %%prog [options] public_key signature_file' - description = ('Verifies a signature, exits with status 0 upon success, ' - 'prints an error message and exits with status 1 upon error.') - operation = 'verify' - operation_past = 'verified' - operation_progressive = 'Verifying' - key_class = rsa.PublicKey - expected_cli_args = 2 - has_output = False - - def perform_operation(self, indata, pub_key, cli_args): - """Verifies files.""" - - signature_file = cli_args[1] - - with open(signature_file, 'rb') as sigfile: - signature = sigfile.read() - - try: - rsa.verify(indata, signature, pub_key) - except rsa.VerificationError: - raise SystemExit('Verification failed.') - - print('Verification OK', file=sys.stderr) - - -class BigfileOperation(CryptoOperation): - """CryptoOperation that doesn't read the entire file into memory.""" - - def __init__(self): - CryptoOperation.__init__(self) - - self.file_objects = [] - - def __del__(self): - """Closes any open file handles.""" - - for fobj in self.file_objects: - fobj.close() - - def __call__(self): - """Runs the program.""" - - (cli, cli_args) = self.parse_cli() - - key = self.read_key(cli_args[0], cli.keyform) - - # Get the file handles - infile = self.get_infile(cli.input) - outfile = self.get_outfile(cli.output) - - # Call the operation - print(self.operation_progressive.title(), file=sys.stderr) - self.perform_operation(infile, outfile, key, cli_args) - - def get_infile(self, inname): - """Returns the input file object""" - - if inname: - print('Reading input from %s' % inname, file=sys.stderr) - fobj = open(inname, 'rb') - self.file_objects.append(fobj) - else: - print('Reading input from stdin', file=sys.stderr) - fobj = sys.stdin - - return fobj - - def get_outfile(self, outname): - """Returns the output file object""" - - if outname: - print('Will write output to %s' % outname, file=sys.stderr) - fobj = open(outname, 'wb') - self.file_objects.append(fobj) - else: - print('Will write output to stdout', file=sys.stderr) - fobj = sys.stdout - - return fobj - - -class EncryptBigfileOperation(BigfileOperation): - """Encrypts a file to VARBLOCK format.""" - - keyname = 'public' - description = ('Encrypts a file to an encrypted VARBLOCK file. The file ' - 'can be larger than the key length, but the output file is only ' - 'compatible with Python-RSA.') - operation = 'encrypt' - operation_past = 'encrypted' - operation_progressive = 'encrypting' - - def perform_operation(self, infile, outfile, pub_key, cli_args=None): - """Encrypts files to VARBLOCK.""" - - return rsa.bigfile.encrypt_bigfile(infile, outfile, pub_key) - - -class DecryptBigfileOperation(BigfileOperation): - """Decrypts a file in VARBLOCK format.""" - - keyname = 'private' - description = ('Decrypts an encrypted VARBLOCK file that was encrypted ' - 'with pyrsa-encrypt-bigfile') - operation = 'decrypt' - operation_past = 'decrypted' - operation_progressive = 'decrypting' - key_class = rsa.PrivateKey - - def perform_operation(self, infile, outfile, priv_key, cli_args=None): - """Decrypts a VARBLOCK file.""" - - return rsa.bigfile.decrypt_bigfile(infile, outfile, priv_key) - - -encrypt = EncryptOperation() -decrypt = DecryptOperation() -sign = SignOperation() -verify = VerifyOperation() -encrypt_bigfile = EncryptBigfileOperation() -decrypt_bigfile = DecryptBigfileOperation() diff --git a/src/lib/rsa/common.py b/src/lib/rsa/common.py deleted file mode 100644 index e0743340..00000000 --- a/src/lib/rsa/common.py +++ /dev/null @@ -1,188 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2011 Sybren A. Stüvel <sybren@stuvel.eu> -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Common functionality shared by several modules.""" - - -def bit_size(num): - """ - Number of bits needed to represent a integer excluding any prefix - 0 bits. - - As per definition from https://wiki.python.org/moin/BitManipulation and - to match the behavior of the Python 3 API. - - Usage:: - - >>> bit_size(1023) - 10 - >>> bit_size(1024) - 11 - >>> bit_size(1025) - 11 - - :param num: - Integer value. If num is 0, returns 0. Only the absolute value of the - number is considered. Therefore, signed integers will be abs(num) - before the number's bit length is determined. - :returns: - Returns the number of bits in the integer. - """ - if num == 0: - return 0 - if num < 0: - num = -num - - # Make sure this is an int and not a float. - num & 1 - - hex_num = "%x" % num - return ((len(hex_num) - 1) * 4) + { - '0': 0, '1': 1, '2': 2, '3': 2, - '4': 3, '5': 3, '6': 3, '7': 3, - '8': 4, '9': 4, 'a': 4, 'b': 4, - 'c': 4, 'd': 4, 'e': 4, 'f': 4, - }[hex_num[0]] - - -def _bit_size(number): - """ - Returns the number of bits required to hold a specific long number. - """ - if number < 0: - raise ValueError('Only nonnegative numbers possible: %s' % number) - - if number == 0: - return 0 - - # This works, even with very large numbers. When using math.log(number, 2), - # you'll get rounding errors and it'll fail. - bits = 0 - while number: - bits += 1 - number >>= 1 - - return bits - - -def byte_size(number): - """ - Returns the number of bytes required to hold a specific long number. - - The number of bytes is rounded up. - - Usage:: - - >>> byte_size(1 << 1023) - 128 - >>> byte_size((1 << 1024) - 1) - 128 - >>> byte_size(1 << 1024) - 129 - - :param number: - An unsigned integer - :returns: - The number of bytes required to hold a specific long number. - """ - quanta, mod = divmod(bit_size(number), 8) - if mod or number == 0: - quanta += 1 - return quanta - # return int(math.ceil(bit_size(number) / 8.0)) - - -def extended_gcd(a, b): - """Returns a tuple (r, i, j) such that r = gcd(a, b) = ia + jb - """ - # r = gcd(a,b) i = multiplicitive inverse of a mod b - # or j = multiplicitive inverse of b mod a - # Neg return values for i or j are made positive mod b or a respectively - # Iterateive Version is faster and uses much less stack space - x = 0 - y = 1 - lx = 1 - ly = 0 - oa = a # Remember original a/b to remove - ob = b # negative values from return results - while b != 0: - q = a // b - (a, b) = (b, a % b) - (x, lx) = ((lx - (q * x)), x) - (y, ly) = ((ly - (q * y)), y) - if lx < 0: - lx += ob # If neg wrap modulo orignal b - if ly < 0: - ly += oa # If neg wrap modulo orignal a - return a, lx, ly # Return only positive values - - -def inverse(x, n): - """Returns x^-1 (mod n) - - >>> inverse(7, 4) - 3 - >>> (inverse(143, 4) * 143) % 4 - 1 - """ - - (divider, inv, _) = extended_gcd(x, n) - - if divider != 1: - raise ValueError("x (%d) and n (%d) are not relatively prime" % (x, n)) - - return inv - - -def crt(a_values, modulo_values): - """Chinese Remainder Theorem. - - Calculates x such that x = a[i] (mod m[i]) for each i. - - :param a_values: the a-values of the above equation - :param modulo_values: the m-values of the above equation - :returns: x such that x = a[i] (mod m[i]) for each i - - - >>> crt([2, 3], [3, 5]) - 8 - - >>> crt([2, 3, 2], [3, 5, 7]) - 23 - - >>> crt([2, 3, 0], [7, 11, 15]) - 135 - """ - - m = 1 - x = 0 - - for modulo in modulo_values: - m *= modulo - - for (m_i, a_i) in zip(modulo_values, a_values): - M_i = m // m_i - inv = inverse(M_i, m_i) - - x = (x + a_i * M_i * inv) % m - - return x - - -if __name__ == '__main__': - import doctest - - doctest.testmod() diff --git a/src/lib/rsa/core.py b/src/lib/rsa/core.py deleted file mode 100644 index b3114d9e..00000000 --- a/src/lib/rsa/core.py +++ /dev/null @@ -1,57 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2011 Sybren A. Stüvel <sybren@stuvel.eu> -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Core mathematical operations. - -This is the actual core RSA implementation, which is only defined -mathematically on integers. -""" - -from rsa._compat import is_integer - - -def assert_int(var, name): - if is_integer(var): - return - - raise TypeError('%s should be an integer, not %s' % (name, var.__class__)) - - -def encrypt_int(message, ekey, n): - """Encrypts a message using encryption key 'ekey', working modulo n""" - - assert_int(message, 'message') - assert_int(ekey, 'ekey') - assert_int(n, 'n') - - if message < 0: - raise ValueError('Only non-negative numbers are supported') - - if message > n: - raise OverflowError("The message %i is too long for n=%i" % (message, n)) - - return pow(message, ekey, n) - - -def decrypt_int(cyphertext, dkey, n): - """Decrypts a cypher text using the decryption key 'dkey', working modulo n""" - - assert_int(cyphertext, 'cyphertext') - assert_int(dkey, 'dkey') - assert_int(n, 'n') - - message = pow(cyphertext, dkey, n) - return message diff --git a/src/lib/rsa/key.py b/src/lib/rsa/key.py deleted file mode 100644 index 64600a27..00000000 --- a/src/lib/rsa/key.py +++ /dev/null @@ -1,739 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2011 Sybren A. Stüvel <sybren@stuvel.eu> -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""RSA key generation code. - -Create new keys with the newkeys() function. It will give you a PublicKey and a -PrivateKey object. - -Loading and saving keys requires the pyasn1 module. This module is imported as -late as possible, such that other functionality will remain working in absence -of pyasn1. - -.. note:: - - Storing public and private keys via the `pickle` module is possible. - However, it is insecure to load a key from an untrusted source. - The pickle module is not secure against erroneous or maliciously - constructed data. Never unpickle data received from an untrusted - or unauthenticated source. - -""" - -import logging -from rsa._compat import b - -import rsa.prime -import rsa.pem -import rsa.common -import rsa.randnum -import rsa.core - -log = logging.getLogger(__name__) -DEFAULT_EXPONENT = 65537 - - -class AbstractKey(object): - """Abstract superclass for private and public keys.""" - - __slots__ = ('n', 'e') - - def __init__(self, n, e): - self.n = n - self.e = e - - @classmethod - def load_pkcs1(cls, keyfile, format='PEM'): - """Loads a key in PKCS#1 DER or PEM format. - - :param keyfile: contents of a DER- or PEM-encoded file that contains - the public key. - :param format: the format of the file to load; 'PEM' or 'DER' - - :return: a PublicKey object - """ - - methods = { - 'PEM': cls._load_pkcs1_pem, - 'DER': cls._load_pkcs1_der, - } - - method = cls._assert_format_exists(format, methods) - return method(keyfile) - - @staticmethod - def _assert_format_exists(file_format, methods): - """Checks whether the given file format exists in 'methods'. - """ - - try: - return methods[file_format] - except KeyError: - formats = ', '.join(sorted(methods.keys())) - raise ValueError('Unsupported format: %r, try one of %s' % (file_format, - formats)) - - def save_pkcs1(self, format='PEM'): - """Saves the public key in PKCS#1 DER or PEM format. - - :param format: the format to save; 'PEM' or 'DER' - :returns: the DER- or PEM-encoded public key. - """ - - methods = { - 'PEM': self._save_pkcs1_pem, - 'DER': self._save_pkcs1_der, - } - - method = self._assert_format_exists(format, methods) - return method() - - def blind(self, message, r): - """Performs blinding on the message using random number 'r'. - - :param message: the message, as integer, to blind. - :type message: int - :param r: the random number to blind with. - :type r: int - :return: the blinded message. - :rtype: int - - The blinding is such that message = unblind(decrypt(blind(encrypt(message))). - - See https://en.wikipedia.org/wiki/Blinding_%28cryptography%29 - """ - - return (message * pow(r, self.e, self.n)) % self.n - - def unblind(self, blinded, r): - """Performs blinding on the message using random number 'r'. - - :param blinded: the blinded message, as integer, to unblind. - :param r: the random number to unblind with. - :return: the original message. - - The blinding is such that message = unblind(decrypt(blind(encrypt(message))). - - See https://en.wikipedia.org/wiki/Blinding_%28cryptography%29 - """ - - return (rsa.common.inverse(r, self.n) * blinded) % self.n - - -class PublicKey(AbstractKey): - """Represents a public RSA key. - - This key is also known as the 'encryption key'. It contains the 'n' and 'e' - values. - - Supports attributes as well as dictionary-like access. Attribute accesss is - faster, though. - - >>> PublicKey(5, 3) - PublicKey(5, 3) - - >>> key = PublicKey(5, 3) - >>> key.n - 5 - >>> key['n'] - 5 - >>> key.e - 3 - >>> key['e'] - 3 - - """ - - __slots__ = ('n', 'e') - - def __getitem__(self, key): - return getattr(self, key) - - def __repr__(self): - return 'PublicKey(%i, %i)' % (self.n, self.e) - - def __getstate__(self): - """Returns the key as tuple for pickling.""" - return self.n, self.e - - def __setstate__(self, state): - """Sets the key from tuple.""" - self.n, self.e = state - - def __eq__(self, other): - if other is None: - return False - - if not isinstance(other, PublicKey): - return False - - return self.n == other.n and self.e == other.e - - def __ne__(self, other): - return not (self == other) - - @classmethod - def _load_pkcs1_der(cls, keyfile): - """Loads a key in PKCS#1 DER format. - - :param keyfile: contents of a DER-encoded file that contains the public - key. - :return: a PublicKey object - - First let's construct a DER encoded key: - - >>> import base64 - >>> b64der = 'MAwCBQCNGmYtAgMBAAE=' - >>> der = base64.standard_b64decode(b64der) - - This loads the file: - - >>> PublicKey._load_pkcs1_der(der) - PublicKey(2367317549, 65537) - - """ - - from pyasn1.codec.der import decoder - from rsa.asn1 import AsnPubKey - - (priv, _) = decoder.decode(keyfile, asn1Spec=AsnPubKey()) - return cls(n=int(priv['modulus']), e=int(priv['publicExponent'])) - - def _save_pkcs1_der(self): - """Saves the public key in PKCS#1 DER format. - - @returns: the DER-encoded public key. - """ - - from pyasn1.codec.der import encoder - from rsa.asn1 import AsnPubKey - - # Create the ASN object - asn_key = AsnPubKey() - asn_key.setComponentByName('modulus', self.n) - asn_key.setComponentByName('publicExponent', self.e) - - return encoder.encode(asn_key) - - @classmethod - def _load_pkcs1_pem(cls, keyfile): - """Loads a PKCS#1 PEM-encoded public key file. - - The contents of the file before the "-----BEGIN RSA PUBLIC KEY-----" and - after the "-----END RSA PUBLIC KEY-----" lines is ignored. - - :param keyfile: contents of a PEM-encoded file that contains the public - key. - :return: a PublicKey object - """ - - der = rsa.pem.load_pem(keyfile, 'RSA PUBLIC KEY') - return cls._load_pkcs1_der(der) - - def _save_pkcs1_pem(self): - """Saves a PKCS#1 PEM-encoded public key file. - - :return: contents of a PEM-encoded file that contains the public key. - """ - - der = self._save_pkcs1_der() - return rsa.pem.save_pem(der, 'RSA PUBLIC KEY') - - @classmethod - def load_pkcs1_openssl_pem(cls, keyfile): - """Loads a PKCS#1.5 PEM-encoded public key file from OpenSSL. - - These files can be recognised in that they start with BEGIN PUBLIC KEY - rather than BEGIN RSA PUBLIC KEY. - - The contents of the file before the "-----BEGIN PUBLIC KEY-----" and - after the "-----END PUBLIC KEY-----" lines is ignored. - - :param keyfile: contents of a PEM-encoded file that contains the public - key, from OpenSSL. - :return: a PublicKey object - """ - - der = rsa.pem.load_pem(keyfile, 'PUBLIC KEY') - return cls.load_pkcs1_openssl_der(der) - - @classmethod - def load_pkcs1_openssl_der(cls, keyfile): - """Loads a PKCS#1 DER-encoded public key file from OpenSSL. - - :param keyfile: contents of a DER-encoded file that contains the public - key, from OpenSSL. - :return: a PublicKey object - - """ - - from rsa.asn1 import OpenSSLPubKey - from pyasn1.codec.der import decoder - from pyasn1.type import univ - - (keyinfo, _) = decoder.decode(keyfile, asn1Spec=OpenSSLPubKey()) - - if keyinfo['header']['oid'] != univ.ObjectIdentifier('1.2.840.113549.1.1.1'): - raise TypeError("This is not a DER-encoded OpenSSL-compatible public key") - - return cls._load_pkcs1_der(keyinfo['key'][1:]) - - -class PrivateKey(AbstractKey): - """Represents a private RSA key. - - This key is also known as the 'decryption key'. It contains the 'n', 'e', - 'd', 'p', 'q' and other values. - - Supports attributes as well as dictionary-like access. Attribute accesss is - faster, though. - - >>> PrivateKey(3247, 65537, 833, 191, 17) - PrivateKey(3247, 65537, 833, 191, 17) - - exp1, exp2 and coef can be given, but if None or omitted they will be calculated: - - >>> pk = PrivateKey(3727264081, 65537, 3349121513, 65063, 57287, exp2=4) - >>> pk.exp1 - 55063 - >>> pk.exp2 # this is of course not a correct value, but it is the one we passed. - 4 - >>> pk.coef - 50797 - - If you give exp1, exp2 or coef, they will be used as-is: - - >>> pk = PrivateKey(1, 2, 3, 4, 5, 6, 7, 8) - >>> pk.exp1 - 6 - >>> pk.exp2 - 7 - >>> pk.coef - 8 - - """ - - __slots__ = ('n', 'e', 'd', 'p', 'q', 'exp1', 'exp2', 'coef') - - def __init__(self, n, e, d, p, q, exp1=None, exp2=None, coef=None): - AbstractKey.__init__(self, n, e) - self.d = d - self.p = p - self.q = q - - # Calculate the other values if they aren't supplied - if exp1 is None: - self.exp1 = int(d % (p - 1)) - else: - self.exp1 = exp1 - - if exp2 is None: - self.exp2 = int(d % (q - 1)) - else: - self.exp2 = exp2 - - if coef is None: - self.coef = rsa.common.inverse(q, p) - else: - self.coef = coef - - def __getitem__(self, key): - return getattr(self, key) - - def __repr__(self): - return 'PrivateKey(%(n)i, %(e)i, %(d)i, %(p)i, %(q)i)' % self - - def __getstate__(self): - """Returns the key as tuple for pickling.""" - return self.n, self.e, self.d, self.p, self.q, self.exp1, self.exp2, self.coef - - def __setstate__(self, state): - """Sets the key from tuple.""" - self.n, self.e, self.d, self.p, self.q, self.exp1, self.exp2, self.coef = state - - def __eq__(self, other): - if other is None: - return False - - if not isinstance(other, PrivateKey): - return False - - return (self.n == other.n and - self.e == other.e and - self.d == other.d and - self.p == other.p and - self.q == other.q and - self.exp1 == other.exp1 and - self.exp2 == other.exp2 and - self.coef == other.coef) - - def __ne__(self, other): - return not (self == other) - - def blinded_decrypt(self, encrypted): - """Decrypts the message using blinding to prevent side-channel attacks. - - :param encrypted: the encrypted message - :type encrypted: int - - :returns: the decrypted message - :rtype: int - """ - - blind_r = rsa.randnum.randint(self.n - 1) - blinded = self.blind(encrypted, blind_r) # blind before decrypting - decrypted = rsa.core.decrypt_int(blinded, self.d, self.n) - - return self.unblind(decrypted, blind_r) - - def blinded_encrypt(self, message): - """Encrypts the message using blinding to prevent side-channel attacks. - - :param message: the message to encrypt - :type message: int - - :returns: the encrypted message - :rtype: int - """ - - blind_r = rsa.randnum.randint(self.n - 1) - blinded = self.blind(message, blind_r) # blind before encrypting - encrypted = rsa.core.encrypt_int(blinded, self.d, self.n) - return self.unblind(encrypted, blind_r) - - @classmethod - def _load_pkcs1_der(cls, keyfile): - """Loads a key in PKCS#1 DER format. - - :param keyfile: contents of a DER-encoded file that contains the private - key. - :return: a PrivateKey object - - First let's construct a DER encoded key: - - >>> import base64 - >>> b64der = 'MC4CAQACBQDeKYlRAgMBAAECBQDHn4npAgMA/icCAwDfxwIDANcXAgInbwIDAMZt' - >>> der = base64.standard_b64decode(b64der) - - This loads the file: - - >>> PrivateKey._load_pkcs1_der(der) - PrivateKey(3727264081, 65537, 3349121513, 65063, 57287) - - """ - - from pyasn1.codec.der import decoder - (priv, _) = decoder.decode(keyfile) - - # ASN.1 contents of DER encoded private key: - # - # RSAPrivateKey ::= SEQUENCE { - # version Version, - # modulus INTEGER, -- n - # publicExponent INTEGER, -- e - # privateExponent INTEGER, -- d - # prime1 INTEGER, -- p - # prime2 INTEGER, -- q - # exponent1 INTEGER, -- d mod (p-1) - # exponent2 INTEGER, -- d mod (q-1) - # coefficient INTEGER, -- (inverse of q) mod p - # otherPrimeInfos OtherPrimeInfos OPTIONAL - # } - - if priv[0] != 0: - raise ValueError('Unable to read this file, version %s != 0' % priv[0]) - - as_ints = tuple(int(x) for x in priv[1:9]) - return cls(*as_ints) - - def _save_pkcs1_der(self): - """Saves the private key in PKCS#1 DER format. - - @returns: the DER-encoded private key. - """ - - from pyasn1.type import univ, namedtype - from pyasn1.codec.der import encoder - - class AsnPrivKey(univ.Sequence): - componentType = namedtype.NamedTypes( - namedtype.NamedType('version', univ.Integer()), - namedtype.NamedType('modulus', univ.Integer()), - namedtype.NamedType('publicExponent', univ.Integer()), - namedtype.NamedType('privateExponent', univ.Integer()), - namedtype.NamedType('prime1', univ.Integer()), - namedtype.NamedType('prime2', univ.Integer()), - namedtype.NamedType('exponent1', univ.Integer()), - namedtype.NamedType('exponent2', univ.Integer()), - namedtype.NamedType('coefficient', univ.Integer()), - ) - - # Create the ASN object - asn_key = AsnPrivKey() - asn_key.setComponentByName('version', 0) - asn_key.setComponentByName('modulus', self.n) - asn_key.setComponentByName('publicExponent', self.e) - asn_key.setComponentByName('privateExponent', self.d) - asn_key.setComponentByName('prime1', self.p) - asn_key.setComponentByName('prime2', self.q) - asn_key.setComponentByName('exponent1', self.exp1) - asn_key.setComponentByName('exponent2', self.exp2) - asn_key.setComponentByName('coefficient', self.coef) - - return encoder.encode(asn_key) - - @classmethod - def _load_pkcs1_pem(cls, keyfile): - """Loads a PKCS#1 PEM-encoded private key file. - - The contents of the file before the "-----BEGIN RSA PRIVATE KEY-----" and - after the "-----END RSA PRIVATE KEY-----" lines is ignored. - - :param keyfile: contents of a PEM-encoded file that contains the private - key. - :return: a PrivateKey object - """ - - der = rsa.pem.load_pem(keyfile, b('RSA PRIVATE KEY')) - return cls._load_pkcs1_der(der) - - def _save_pkcs1_pem(self): - """Saves a PKCS#1 PEM-encoded private key file. - - :return: contents of a PEM-encoded file that contains the private key. - """ - - der = self._save_pkcs1_der() - return rsa.pem.save_pem(der, b('RSA PRIVATE KEY')) - - -def find_p_q(nbits, getprime_func=rsa.prime.getprime, accurate=True): - """Returns a tuple of two different primes of nbits bits each. - - The resulting p * q has exacty 2 * nbits bits, and the returned p and q - will not be equal. - - :param nbits: the number of bits in each of p and q. - :param getprime_func: the getprime function, defaults to - :py:func:`rsa.prime.getprime`. - - *Introduced in Python-RSA 3.1* - - :param accurate: whether to enable accurate mode or not. - :returns: (p, q), where p > q - - >>> (p, q) = find_p_q(128) - >>> from rsa import common - >>> common.bit_size(p * q) - 256 - - When not in accurate mode, the number of bits can be slightly less - - >>> (p, q) = find_p_q(128, accurate=False) - >>> from rsa import common - >>> common.bit_size(p * q) <= 256 - True - >>> common.bit_size(p * q) > 240 - True - - """ - - total_bits = nbits * 2 - - # Make sure that p and q aren't too close or the factoring programs can - # factor n. - shift = nbits // 16 - pbits = nbits + shift - qbits = nbits - shift - - # Choose the two initial primes - log.debug('find_p_q(%i): Finding p', nbits) - p = getprime_func(pbits) - log.debug('find_p_q(%i): Finding q', nbits) - q = getprime_func(qbits) - - def is_acceptable(p, q): - """Returns True iff p and q are acceptable: - - - p and q differ - - (p * q) has the right nr of bits (when accurate=True) - """ - - if p == q: - return False - - if not accurate: - return True - - # Make sure we have just the right amount of bits - found_size = rsa.common.bit_size(p * q) - return total_bits == found_size - - # Keep choosing other primes until they match our requirements. - change_p = False - while not is_acceptable(p, q): - # Change p on one iteration and q on the other - if change_p: - p = getprime_func(pbits) - else: - q = getprime_func(qbits) - - change_p = not change_p - - # We want p > q as described on - # http://www.di-mgt.com.au/rsa_alg.html#crt - return max(p, q), min(p, q) - - -def calculate_keys_custom_exponent(p, q, exponent): - """Calculates an encryption and a decryption key given p, q and an exponent, - and returns them as a tuple (e, d) - - :param p: the first large prime - :param q: the second large prime - :param exponent: the exponent for the key; only change this if you know - what you're doing, as the exponent influences how difficult your - private key can be cracked. A very common choice for e is 65537. - :type exponent: int - - """ - - phi_n = (p - 1) * (q - 1) - - try: - d = rsa.common.inverse(exponent, phi_n) - except ValueError: - raise ValueError("e (%d) and phi_n (%d) are not relatively prime" % - (exponent, phi_n)) - - if (exponent * d) % phi_n != 1: - raise ValueError("e (%d) and d (%d) are not mult. inv. modulo " - "phi_n (%d)" % (exponent, d, phi_n)) - - return exponent, d - - -def calculate_keys(p, q): - """Calculates an encryption and a decryption key given p and q, and - returns them as a tuple (e, d) - - :param p: the first large prime - :param q: the second large prime - - :return: tuple (e, d) with the encryption and decryption exponents. - """ - - return calculate_keys_custom_exponent(p, q, DEFAULT_EXPONENT) - - -def gen_keys(nbits, getprime_func, accurate=True, exponent=DEFAULT_EXPONENT): - """Generate RSA keys of nbits bits. Returns (p, q, e, d). - - Note: this can take a long time, depending on the key size. - - :param nbits: the total number of bits in ``p`` and ``q``. Both ``p`` and - ``q`` will use ``nbits/2`` bits. - :param getprime_func: either :py:func:`rsa.prime.getprime` or a function - with similar signature. - :param exponent: the exponent for the key; only change this if you know - what you're doing, as the exponent influences how difficult your - private key can be cracked. A very common choice for e is 65537. - :type exponent: int - """ - - # Regenerate p and q values, until calculate_keys doesn't raise a - # ValueError. - while True: - (p, q) = find_p_q(nbits // 2, getprime_func, accurate) - try: - (e, d) = calculate_keys_custom_exponent(p, q, exponent=exponent) - break - except ValueError: - pass - - return p, q, e, d - - -def newkeys(nbits, accurate=True, poolsize=1, exponent=DEFAULT_EXPONENT): - """Generates public and private keys, and returns them as (pub, priv). - - The public key is also known as the 'encryption key', and is a - :py:class:`rsa.PublicKey` object. The private key is also known as the - 'decryption key' and is a :py:class:`rsa.PrivateKey` object. - - :param nbits: the number of bits required to store ``n = p*q``. - :param accurate: when True, ``n`` will have exactly the number of bits you - asked for. However, this makes key generation much slower. When False, - `n`` may have slightly less bits. - :param poolsize: the number of processes to use to generate the prime - numbers. If set to a number > 1, a parallel algorithm will be used. - This requires Python 2.6 or newer. - :param exponent: the exponent for the key; only change this if you know - what you're doing, as the exponent influences how difficult your - private key can be cracked. A very common choice for e is 65537. - :type exponent: int - - :returns: a tuple (:py:class:`rsa.PublicKey`, :py:class:`rsa.PrivateKey`) - - The ``poolsize`` parameter was added in *Python-RSA 3.1* and requires - Python 2.6 or newer. - - """ - - if nbits < 16: - raise ValueError('Key too small') - - if poolsize < 1: - raise ValueError('Pool size (%i) should be >= 1' % poolsize) - - # Determine which getprime function to use - if poolsize > 1: - from rsa import parallel - import functools - - getprime_func = functools.partial(parallel.getprime, poolsize=poolsize) - else: - getprime_func = rsa.prime.getprime - - # Generate the key components - (p, q, e, d) = gen_keys(nbits, getprime_func, accurate=accurate, exponent=exponent) - - # Create the key objects - n = p * q - - return ( - PublicKey(n, e), - PrivateKey(n, e, d, p, q) - ) - - -__all__ = ['PublicKey', 'PrivateKey', 'newkeys'] - -if __name__ == '__main__': - import doctest - - try: - for count in range(100): - (failures, tests) = doctest.testmod() - if failures: - break - - if (count and count % 10 == 0) or count == 1: - print('%i times' % count) - except KeyboardInterrupt: - print('Aborted') - else: - print('Doctests done') diff --git a/src/lib/rsa/parallel.py b/src/lib/rsa/parallel.py deleted file mode 100644 index edc924fd..00000000 --- a/src/lib/rsa/parallel.py +++ /dev/null @@ -1,100 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2011 Sybren A. Stüvel <sybren@stuvel.eu> -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Functions for parallel computation on multiple cores. - -Introduced in Python-RSA 3.1. - -.. note:: - - Requires Python 2.6 or newer. - -""" - -from __future__ import print_function - -import multiprocessing as mp - -import rsa.prime -import rsa.randnum - - -def _find_prime(nbits, pipe): - while True: - integer = rsa.randnum.read_random_odd_int(nbits) - - # Test for primeness - if rsa.prime.is_prime(integer): - pipe.send(integer) - return - - -def getprime(nbits, poolsize): - """Returns a prime number that can be stored in 'nbits' bits. - - Works in multiple threads at the same time. - - >>> p = getprime(128, 3) - >>> rsa.prime.is_prime(p-1) - False - >>> rsa.prime.is_prime(p) - True - >>> rsa.prime.is_prime(p+1) - False - - >>> from rsa import common - >>> common.bit_size(p) == 128 - True - - """ - - (pipe_recv, pipe_send) = mp.Pipe(duplex=False) - - # Create processes - try: - procs = [mp.Process(target=_find_prime, args=(nbits, pipe_send)) - for _ in range(poolsize)] - # Start processes - for p in procs: - p.start() - - result = pipe_recv.recv() - finally: - pipe_recv.close() - pipe_send.close() - - # Terminate processes - for p in procs: - p.terminate() - - return result - - -__all__ = ['getprime'] - -if __name__ == '__main__': - print('Running doctests 1000x or until failure') - import doctest - - for count in range(100): - (failures, tests) = doctest.testmod() - if failures: - break - - if count and count % 10 == 0: - print('%i times' % count) - - print('Doctests done') diff --git a/src/lib/rsa/pem.py b/src/lib/rsa/pem.py deleted file mode 100644 index 0f68cb2a..00000000 --- a/src/lib/rsa/pem.py +++ /dev/null @@ -1,125 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2011 Sybren A. Stüvel <sybren@stuvel.eu> -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Functions that load and write PEM-encoded files.""" - -import base64 -from rsa._compat import b, is_bytes - - -def _markers(pem_marker): - """ - Returns the start and end PEM markers - """ - - if is_bytes(pem_marker): - pem_marker = pem_marker.decode('utf-8') - - return (b('-----BEGIN %s-----' % pem_marker), - b('-----END %s-----' % pem_marker)) - - -def load_pem(contents, pem_marker): - """Loads a PEM file. - - :param contents: the contents of the file to interpret - :param pem_marker: the marker of the PEM content, such as 'RSA PRIVATE KEY' - when your file has '-----BEGIN RSA PRIVATE KEY-----' and - '-----END RSA PRIVATE KEY-----' markers. - - :return: the base64-decoded content between the start and end markers. - - @raise ValueError: when the content is invalid, for example when the start - marker cannot be found. - - """ - - # We want bytes, not text. If it's text, it can be converted to ASCII bytes. - if not is_bytes(contents): - contents = contents.encode('ascii') - - (pem_start, pem_end) = _markers(pem_marker) - - pem_lines = [] - in_pem_part = False - - for line in contents.splitlines(): - line = line.strip() - - # Skip empty lines - if not line: - continue - - # Handle start marker - if line == pem_start: - if in_pem_part: - raise ValueError('Seen start marker "%s" twice' % pem_start) - - in_pem_part = True - continue - - # Skip stuff before first marker - if not in_pem_part: - continue - - # Handle end marker - if in_pem_part and line == pem_end: - in_pem_part = False - break - - # Load fields - if b(':') in line: - continue - - pem_lines.append(line) - - # Do some sanity checks - if not pem_lines: - raise ValueError('No PEM start marker "%s" found' % pem_start) - - if in_pem_part: - raise ValueError('No PEM end marker "%s" found' % pem_end) - - # Base64-decode the contents - pem = b('').join(pem_lines) - return base64.standard_b64decode(pem) - - -def save_pem(contents, pem_marker): - """Saves a PEM file. - - :param contents: the contents to encode in PEM format - :param pem_marker: the marker of the PEM content, such as 'RSA PRIVATE KEY' - when your file has '-----BEGIN RSA PRIVATE KEY-----' and - '-----END RSA PRIVATE KEY-----' markers. - - :return: the base64-encoded content between the start and end markers. - - """ - - (pem_start, pem_end) = _markers(pem_marker) - - b64 = base64.standard_b64encode(contents).replace(b('\n'), b('')) - pem_lines = [pem_start] - - for block_start in range(0, len(b64), 64): - block = b64[block_start:block_start + 64] - pem_lines.append(block) - - pem_lines.append(pem_end) - pem_lines.append(b('')) - - return b('\n').join(pem_lines) diff --git a/src/lib/rsa/pkcs1.py b/src/lib/rsa/pkcs1.py deleted file mode 100644 index 28f0dc54..00000000 --- a/src/lib/rsa/pkcs1.py +++ /dev/null @@ -1,381 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2011 Sybren A. Stüvel <sybren@stuvel.eu> -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Functions for PKCS#1 version 1.5 encryption and signing - -This module implements certain functionality from PKCS#1 version 1.5. For a -very clear example, read http://www.di-mgt.com.au/rsa_alg.html#pkcs1schemes - -At least 8 bytes of random padding is used when encrypting a message. This makes -these methods much more secure than the ones in the ``rsa`` module. - -WARNING: this module leaks information when decryption fails. The exceptions -that are raised contain the Python traceback information, which can be used to -deduce where in the process the failure occurred. DO NOT PASS SUCH INFORMATION -to your users. -""" - -import hashlib -import os - -from rsa._compat import b -from rsa import common, transform, core - -# ASN.1 codes that describe the hash algorithm used. -HASH_ASN1 = { - 'MD5': b('\x30\x20\x30\x0c\x06\x08\x2a\x86\x48\x86\xf7\x0d\x02\x05\x05\x00\x04\x10'), - 'SHA-1': b('\x30\x21\x30\x09\x06\x05\x2b\x0e\x03\x02\x1a\x05\x00\x04\x14'), - 'SHA-256': b('\x30\x31\x30\x0d\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x01\x05\x00\x04\x20'), - 'SHA-384': b('\x30\x41\x30\x0d\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x02\x05\x00\x04\x30'), - 'SHA-512': b('\x30\x51\x30\x0d\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x03\x05\x00\x04\x40'), -} - -HASH_METHODS = { - 'MD5': hashlib.md5, - 'SHA-1': hashlib.sha1, - 'SHA-256': hashlib.sha256, - 'SHA-384': hashlib.sha384, - 'SHA-512': hashlib.sha512, -} - - -class CryptoError(Exception): - """Base class for all exceptions in this module.""" - - -class DecryptionError(CryptoError): - """Raised when decryption fails.""" - - -class VerificationError(CryptoError): - """Raised when verification fails.""" - - -def _pad_for_encryption(message, target_length): - r"""Pads the message for encryption, returning the padded message. - - :return: 00 02 RANDOM_DATA 00 MESSAGE - - >>> block = _pad_for_encryption(b'hello', 16) - >>> len(block) - 16 - >>> block[0:2] - b'\x00\x02' - >>> block[-6:] - b'\x00hello' - - """ - - max_msglength = target_length - 11 - msglength = len(message) - - if msglength > max_msglength: - raise OverflowError('%i bytes needed for message, but there is only' - ' space for %i' % (msglength, max_msglength)) - - # Get random padding - padding = b('') - padding_length = target_length - msglength - 3 - - # We remove 0-bytes, so we'll end up with less padding than we've asked for, - # so keep adding data until we're at the correct length. - while len(padding) < padding_length: - needed_bytes = padding_length - len(padding) - - # Always read at least 8 bytes more than we need, and trim off the rest - # after removing the 0-bytes. This increases the chance of getting - # enough bytes, especially when needed_bytes is small - new_padding = os.urandom(needed_bytes + 5) - new_padding = new_padding.replace(b('\x00'), b('')) - padding = padding + new_padding[:needed_bytes] - - assert len(padding) == padding_length - - return b('').join([b('\x00\x02'), - padding, - b('\x00'), - message]) - - -def _pad_for_signing(message, target_length): - r"""Pads the message for signing, returning the padded message. - - The padding is always a repetition of FF bytes. - - :return: 00 01 PADDING 00 MESSAGE - - >>> block = _pad_for_signing(b'hello', 16) - >>> len(block) - 16 - >>> block[0:2] - b'\x00\x01' - >>> block[-6:] - b'\x00hello' - >>> block[2:-6] - b'\xff\xff\xff\xff\xff\xff\xff\xff' - - """ - - max_msglength = target_length - 11 - msglength = len(message) - - if msglength > max_msglength: - raise OverflowError('%i bytes needed for message, but there is only' - ' space for %i' % (msglength, max_msglength)) - - padding_length = target_length - msglength - 3 - - return b('').join([b('\x00\x01'), - padding_length * b('\xff'), - b('\x00'), - message]) - - -def encrypt(message, pub_key): - """Encrypts the given message using PKCS#1 v1.5 - - :param message: the message to encrypt. Must be a byte string no longer than - ``k-11`` bytes, where ``k`` is the number of bytes needed to encode - the ``n`` component of the public key. - :param pub_key: the :py:class:`rsa.PublicKey` to encrypt with. - :raise OverflowError: when the message is too large to fit in the padded - block. - - >>> from rsa import key, common - >>> (pub_key, priv_key) = key.newkeys(256) - >>> message = b'hello' - >>> crypto = encrypt(message, pub_key) - - The crypto text should be just as long as the public key 'n' component: - - >>> len(crypto) == common.byte_size(pub_key.n) - True - - """ - - keylength = common.byte_size(pub_key.n) - padded = _pad_for_encryption(message, keylength) - - payload = transform.bytes2int(padded) - encrypted = core.encrypt_int(payload, pub_key.e, pub_key.n) - block = transform.int2bytes(encrypted, keylength) - - return block - - -def decrypt(crypto, priv_key): - r"""Decrypts the given message using PKCS#1 v1.5 - - The decryption is considered 'failed' when the resulting cleartext doesn't - start with the bytes 00 02, or when the 00 byte between the padding and - the message cannot be found. - - :param crypto: the crypto text as returned by :py:func:`rsa.encrypt` - :param priv_key: the :py:class:`rsa.PrivateKey` to decrypt with. - :raise DecryptionError: when the decryption fails. No details are given as - to why the code thinks the decryption fails, as this would leak - information about the private key. - - - >>> import rsa - >>> (pub_key, priv_key) = rsa.newkeys(256) - - It works with strings: - - >>> crypto = encrypt(b'hello', pub_key) - >>> decrypt(crypto, priv_key) - b'hello' - - And with binary data: - - >>> crypto = encrypt(b'\x00\x00\x00\x00\x01', pub_key) - >>> decrypt(crypto, priv_key) - b'\x00\x00\x00\x00\x01' - - Altering the encrypted information will *likely* cause a - :py:class:`rsa.pkcs1.DecryptionError`. If you want to be *sure*, use - :py:func:`rsa.sign`. - - - .. warning:: - - Never display the stack trace of a - :py:class:`rsa.pkcs1.DecryptionError` exception. It shows where in the - code the exception occurred, and thus leaks information about the key. - It's only a tiny bit of information, but every bit makes cracking the - keys easier. - - >>> crypto = encrypt(b'hello', pub_key) - >>> crypto = crypto[0:5] + b'X' + crypto[6:] # change a byte - >>> decrypt(crypto, priv_key) - Traceback (most recent call last): - ... - rsa.pkcs1.DecryptionError: Decryption failed - - """ - - blocksize = common.byte_size(priv_key.n) - encrypted = transform.bytes2int(crypto) - decrypted = priv_key.blinded_decrypt(encrypted) - cleartext = transform.int2bytes(decrypted, blocksize) - - # If we can't find the cleartext marker, decryption failed. - if cleartext[0:2] != b('\x00\x02'): - raise DecryptionError('Decryption failed') - - # Find the 00 separator between the padding and the message - try: - sep_idx = cleartext.index(b('\x00'), 2) - except ValueError: - raise DecryptionError('Decryption failed') - - return cleartext[sep_idx + 1:] - - -def sign(message, priv_key, hash): - """Signs the message with the private key. - - Hashes the message, then signs the hash with the given key. This is known - as a "detached signature", because the message itself isn't altered. - - :param message: the message to sign. Can be an 8-bit string or a file-like - object. If ``message`` has a ``read()`` method, it is assumed to be a - file-like object. - :param priv_key: the :py:class:`rsa.PrivateKey` to sign with - :param hash: the hash method used on the message. Use 'MD5', 'SHA-1', - 'SHA-256', 'SHA-384' or 'SHA-512'. - :return: a message signature block. - :raise OverflowError: if the private key is too small to contain the - requested hash. - - """ - - # Get the ASN1 code for this hash method - if hash not in HASH_ASN1: - raise ValueError('Invalid hash method: %s' % hash) - asn1code = HASH_ASN1[hash] - - # Calculate the hash - hash = _hash(message, hash) - - # Encrypt the hash with the private key - cleartext = asn1code + hash - keylength = common.byte_size(priv_key.n) - padded = _pad_for_signing(cleartext, keylength) - - payload = transform.bytes2int(padded) - encrypted = priv_key.blinded_encrypt(payload) - block = transform.int2bytes(encrypted, keylength) - - return block - - -def verify(message, signature, pub_key): - """Verifies that the signature matches the message. - - The hash method is detected automatically from the signature. - - :param message: the signed message. Can be an 8-bit string or a file-like - object. If ``message`` has a ``read()`` method, it is assumed to be a - file-like object. - :param signature: the signature block, as created with :py:func:`rsa.sign`. - :param pub_key: the :py:class:`rsa.PublicKey` of the person signing the message. - :raise VerificationError: when the signature doesn't match the message. - - """ - - keylength = common.byte_size(pub_key.n) - encrypted = transform.bytes2int(signature) - decrypted = core.decrypt_int(encrypted, pub_key.e, pub_key.n) - clearsig = transform.int2bytes(decrypted, keylength) - - # Get the hash method - method_name = _find_method_hash(clearsig) - message_hash = _hash(message, method_name) - - # Reconstruct the expected padded hash - cleartext = HASH_ASN1[method_name] + message_hash - expected = _pad_for_signing(cleartext, keylength) - - # Compare with the signed one - if expected != clearsig: - raise VerificationError('Verification failed') - - return True - - -def _hash(message, method_name): - """Returns the message digest. - - :param message: the signed message. Can be an 8-bit string or a file-like - object. If ``message`` has a ``read()`` method, it is assumed to be a - file-like object. - :param method_name: the hash method, must be a key of - :py:const:`HASH_METHODS`. - - """ - - if method_name not in HASH_METHODS: - raise ValueError('Invalid hash method: %s' % method_name) - - method = HASH_METHODS[method_name] - hasher = method() - - if hasattr(message, 'read') and hasattr(message.read, '__call__'): - # Late import to prevent DeprecationWarnings. - from . import varblock - - # read as 1K blocks - for block in varblock.yield_fixedblocks(message, 1024): - hasher.update(block) - else: - # hash the message object itself. - hasher.update(message) - - return hasher.digest() - - -def _find_method_hash(clearsig): - """Finds the hash method. - - :param clearsig: full padded ASN1 and hash. - :return: the used hash method. - :raise VerificationFailed: when the hash method cannot be found - """ - - for (hashname, asn1code) in HASH_ASN1.items(): - if asn1code in clearsig: - return hashname - - raise VerificationError('Verification failed') - - -__all__ = ['encrypt', 'decrypt', 'sign', 'verify', - 'DecryptionError', 'VerificationError', 'CryptoError'] - -if __name__ == '__main__': - print('Running doctests 1000x or until failure') - import doctest - - for count in range(1000): - (failures, tests) = doctest.testmod() - if failures: - break - - if count and count % 100 == 0: - print('%i times' % count) - - print('Doctests done') diff --git a/src/lib/rsa/prime.py b/src/lib/rsa/prime.py deleted file mode 100644 index 6f23f9da..00000000 --- a/src/lib/rsa/prime.py +++ /dev/null @@ -1,178 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2011 Sybren A. Stüvel <sybren@stuvel.eu> -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Numerical functions related to primes. - -Implementation based on the book Algorithm Design by Michael T. Goodrich and -Roberto Tamassia, 2002. -""" - -import rsa.randnum - -__all__ = ['getprime', 'are_relatively_prime'] - - -def gcd(p, q): - """Returns the greatest common divisor of p and q - - >>> gcd(48, 180) - 12 - """ - - while q != 0: - (p, q) = (q, p % q) - return p - - -def miller_rabin_primality_testing(n, k): - """Calculates whether n is composite (which is always correct) or prime - (which theoretically is incorrect with error probability 4**-k), by - applying Miller-Rabin primality testing. - - For reference and implementation example, see: - https://en.wikipedia.org/wiki/Miller%E2%80%93Rabin_primality_test - - :param n: Integer to be tested for primality. - :type n: int - :param k: Number of rounds (witnesses) of Miller-Rabin testing. - :type k: int - :return: False if the number is composite, True if it's probably prime. - :rtype: bool - """ - - # prevent potential infinite loop when d = 0 - if n < 2: - return False - - # Decompose (n - 1) to write it as (2 ** r) * d - # While d is even, divide it by 2 and increase the exponent. - d = n - 1 - r = 0 - - while not (d & 1): - r += 1 - d >>= 1 - - # Test k witnesses. - for _ in range(k): - # Generate random integer a, where 2 <= a <= (n - 2) - a = rsa.randnum.randint(n - 4) + 2 - - x = pow(a, d, n) - if x == 1 or x == n - 1: - continue - - for _ in range(r - 1): - x = pow(x, 2, n) - if x == 1: - # n is composite. - return False - if x == n - 1: - # Exit inner loop and continue with next witness. - break - else: - # If loop doesn't break, n is composite. - return False - - return True - - -def is_prime(number): - """Returns True if the number is prime, and False otherwise. - - >>> is_prime(2) - True - >>> is_prime(42) - False - >>> is_prime(41) - True - >>> [x for x in range(901, 1000) if is_prime(x)] - [907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997] - """ - - # Check for small numbers. - if number < 10: - return number in [2, 3, 5, 7] - - # Check for even numbers. - if not (number & 1): - return False - - # According to NIST FIPS 186-4, Appendix C, Table C.3, minimum number of - # rounds of M-R testing, using an error probability of 2 ** (-100), for - # different p, q bitsizes are: - # * p, q bitsize: 512; rounds: 7 - # * p, q bitsize: 1024; rounds: 4 - # * p, q bitsize: 1536; rounds: 3 - # See: http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf - return miller_rabin_primality_testing(number, 7) - - -def getprime(nbits): - """Returns a prime number that can be stored in 'nbits' bits. - - >>> p = getprime(128) - >>> is_prime(p-1) - False - >>> is_prime(p) - True - >>> is_prime(p+1) - False - - >>> from rsa import common - >>> common.bit_size(p) == 128 - True - """ - - assert nbits > 3 # the loop wil hang on too small numbers - - while True: - integer = rsa.randnum.read_random_odd_int(nbits) - - # Test for primeness - if is_prime(integer): - return integer - - # Retry if not prime - - -def are_relatively_prime(a, b): - """Returns True if a and b are relatively prime, and False if they - are not. - - >>> are_relatively_prime(2, 3) - True - >>> are_relatively_prime(2, 4) - False - """ - - d = gcd(a, b) - return d == 1 - - -if __name__ == '__main__': - print('Running doctests 1000x or until failure') - import doctest - - for count in range(1000): - (failures, tests) = doctest.testmod() - if failures: - break - - if count and count % 100 == 0: - print('%i times' % count) - - print('Doctests done') diff --git a/src/lib/rsa/randnum.py b/src/lib/rsa/randnum.py deleted file mode 100644 index 3c788a57..00000000 --- a/src/lib/rsa/randnum.py +++ /dev/null @@ -1,98 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2011 Sybren A. Stüvel <sybren@stuvel.eu> -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Functions for generating random numbers.""" - -# Source inspired by code by Yesudeep Mangalapilly <yesudeep@gmail.com> - -import os - -from rsa import common, transform -from rsa._compat import byte - - -def read_random_bits(nbits): - """Reads 'nbits' random bits. - - If nbits isn't a whole number of bytes, an extra byte will be appended with - only the lower bits set. - """ - - nbytes, rbits = divmod(nbits, 8) - - # Get the random bytes - randomdata = os.urandom(nbytes) - - # Add the remaining random bits - if rbits > 0: - randomvalue = ord(os.urandom(1)) - randomvalue >>= (8 - rbits) - randomdata = byte(randomvalue) + randomdata - - return randomdata - - -def read_random_int(nbits): - """Reads a random integer of approximately nbits bits. - """ - - randomdata = read_random_bits(nbits) - value = transform.bytes2int(randomdata) - - # Ensure that the number is large enough to just fill out the required - # number of bits. - value |= 1 << (nbits - 1) - - return value - - -def read_random_odd_int(nbits): - """Reads a random odd integer of approximately nbits bits. - - >>> read_random_odd_int(512) & 1 - 1 - """ - - value = read_random_int(nbits) - - # Make sure it's odd - return value | 1 - - -def randint(maxvalue): - """Returns a random integer x with 1 <= x <= maxvalue - - May take a very long time in specific situations. If maxvalue needs N bits - to store, the closer maxvalue is to (2 ** N) - 1, the faster this function - is. - """ - - bit_size = common.bit_size(maxvalue) - - tries = 0 - while True: - value = read_random_int(bit_size) - if value <= maxvalue: - break - - if tries and tries % 10 == 0: - # After a lot of tries to get the right number of bits but still - # smaller than maxvalue, decrease the number of bits by 1. That'll - # dramatically increase the chances to get a large enough number. - bit_size -= 1 - tries += 1 - - return value diff --git a/src/lib/rsa/transform.py b/src/lib/rsa/transform.py deleted file mode 100644 index 16061a94..00000000 --- a/src/lib/rsa/transform.py +++ /dev/null @@ -1,224 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2011 Sybren A. Stüvel <sybren@stuvel.eu> -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Data transformation functions. - -From bytes to a number, number to bytes, etc. -""" - -from __future__ import absolute_import - -try: - # We'll use psyco if available on 32-bit architectures to speed up code. - # Using psyco (if available) cuts down the execution time on Python 2.5 - # at least by half. - import psyco - - psyco.full() -except ImportError: - pass - -import binascii -from struct import pack -from rsa import common -from rsa._compat import is_integer, b, byte, get_word_alignment, ZERO_BYTE, EMPTY_BYTE - - -def bytes2int(raw_bytes): - r"""Converts a list of bytes or an 8-bit string to an integer. - - When using unicode strings, encode it to some encoding like UTF8 first. - - >>> (((128 * 256) + 64) * 256) + 15 - 8405007 - >>> bytes2int(b'\x80@\x0f') - 8405007 - - """ - - return int(binascii.hexlify(raw_bytes), 16) - - -def _int2bytes(number, block_size=None): - r"""Converts a number to a string of bytes. - - Usage:: - - >>> _int2bytes(123456789) - b'\x07[\xcd\x15' - >>> bytes2int(_int2bytes(123456789)) - 123456789 - - >>> _int2bytes(123456789, 6) - b'\x00\x00\x07[\xcd\x15' - >>> bytes2int(_int2bytes(123456789, 128)) - 123456789 - - >>> _int2bytes(123456789, 3) - Traceback (most recent call last): - ... - OverflowError: Needed 4 bytes for number, but block size is 3 - - @param number: the number to convert - @param block_size: the number of bytes to output. If the number encoded to - bytes is less than this, the block will be zero-padded. When not given, - the returned block is not padded. - - @throws OverflowError when block_size is given and the number takes up more - bytes than fit into the block. - """ - - # Type checking - if not is_integer(number): - raise TypeError("You must pass an integer for 'number', not %s" % - number.__class__) - - if number < 0: - raise ValueError('Negative numbers cannot be used: %i' % number) - - # Do some bounds checking - if number == 0: - needed_bytes = 1 - raw_bytes = [ZERO_BYTE] - else: - needed_bytes = common.byte_size(number) - raw_bytes = [] - - # You cannot compare None > 0 in Python 3x. It will fail with a TypeError. - if block_size and block_size > 0: - if needed_bytes > block_size: - raise OverflowError('Needed %i bytes for number, but block size ' - 'is %i' % (needed_bytes, block_size)) - - # Convert the number to bytes. - while number > 0: - raw_bytes.insert(0, byte(number & 0xFF)) - number >>= 8 - - # Pad with zeroes to fill the block - if block_size and block_size > 0: - padding = (block_size - needed_bytes) * ZERO_BYTE - else: - padding = EMPTY_BYTE - - return padding + EMPTY_BYTE.join(raw_bytes) - - -def bytes_leading(raw_bytes, needle=ZERO_BYTE): - """ - Finds the number of prefixed byte occurrences in the haystack. - - Useful when you want to deal with padding. - - :param raw_bytes: - Raw bytes. - :param needle: - The byte to count. Default \000. - :returns: - The number of leading needle bytes. - """ - - leading = 0 - # Indexing keeps compatibility between Python 2.x and Python 3.x - _byte = needle[0] - for x in raw_bytes: - if x == _byte: - leading += 1 - else: - break - return leading - - -def int2bytes(number, fill_size=None, chunk_size=None, overflow=False): - """ - Convert an unsigned integer to bytes (base-256 representation):: - - Does not preserve leading zeros if you don't specify a chunk size or - fill size. - - .. NOTE: - You must not specify both fill_size and chunk_size. Only one - of them is allowed. - - :param number: - Integer value - :param fill_size: - If the optional fill size is given the length of the resulting - byte string is expected to be the fill size and will be padded - with prefix zero bytes to satisfy that length. - :param chunk_size: - If optional chunk size is given and greater than zero, pad the front of - the byte string with binary zeros so that the length is a multiple of - ``chunk_size``. - :param overflow: - ``False`` (default). If this is ``True``, no ``OverflowError`` - will be raised when the fill_size is shorter than the length - of the generated byte sequence. Instead the byte sequence will - be returned as is. - :returns: - Raw bytes (base-256 representation). - :raises: - ``OverflowError`` when fill_size is given and the number takes up more - bytes than fit into the block. This requires the ``overflow`` - argument to this function to be set to ``False`` otherwise, no - error will be raised. - """ - - if number < 0: - raise ValueError("Number must be an unsigned integer: %d" % number) - - if fill_size and chunk_size: - raise ValueError("You can either fill or pad chunks, but not both") - - # Ensure these are integers. - number & 1 - - raw_bytes = b('') - - # Pack the integer one machine word at a time into bytes. - num = number - word_bits, _, max_uint, pack_type = get_word_alignment(num) - pack_format = ">%s" % pack_type - while num > 0: - raw_bytes = pack(pack_format, num & max_uint) + raw_bytes - num >>= word_bits - # Obtain the index of the first non-zero byte. - zero_leading = bytes_leading(raw_bytes) - if number == 0: - raw_bytes = ZERO_BYTE - # De-padding. - raw_bytes = raw_bytes[zero_leading:] - - length = len(raw_bytes) - if fill_size and fill_size > 0: - if not overflow and length > fill_size: - raise OverflowError( - "Need %d bytes for number, but fill size is %d" % - (length, fill_size) - ) - raw_bytes = raw_bytes.rjust(fill_size, ZERO_BYTE) - elif chunk_size and chunk_size > 0: - remainder = length % chunk_size - if remainder: - padding_size = chunk_size - remainder - raw_bytes = raw_bytes.rjust(length + padding_size, ZERO_BYTE) - return raw_bytes - - -if __name__ == '__main__': - import doctest - - doctest.testmod() diff --git a/src/lib/rsa/util.py b/src/lib/rsa/util.py deleted file mode 100644 index 29d5eb12..00000000 --- a/src/lib/rsa/util.py +++ /dev/null @@ -1,79 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2011 Sybren A. Stüvel <sybren@stuvel.eu> -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Utility functions.""" - -from __future__ import with_statement, print_function - -import sys -from optparse import OptionParser - -import rsa.key - - -def private_to_public(): - """Reads a private key and outputs the corresponding public key.""" - - # Parse the CLI options - parser = OptionParser(usage='usage: %prog [options]', - description='Reads a private key and outputs the ' - 'corresponding public key. Both private and public keys use ' - 'the format described in PKCS#1 v1.5') - - parser.add_option('-i', '--input', dest='infilename', type='string', - help='Input filename. Reads from stdin if not specified') - parser.add_option('-o', '--output', dest='outfilename', type='string', - help='Output filename. Writes to stdout of not specified') - - parser.add_option('--inform', dest='inform', - help='key format of input - default PEM', - choices=('PEM', 'DER'), default='PEM') - - parser.add_option('--outform', dest='outform', - help='key format of output - default PEM', - choices=('PEM', 'DER'), default='PEM') - - (cli, cli_args) = parser.parse_args(sys.argv) - - # Read the input data - if cli.infilename: - print('Reading private key from %s in %s format' % - (cli.infilename, cli.inform), file=sys.stderr) - with open(cli.infilename, 'rb') as infile: - in_data = infile.read() - else: - print('Reading private key from stdin in %s format' % cli.inform, - file=sys.stderr) - in_data = sys.stdin.read().encode('ascii') - - assert type(in_data) == bytes, type(in_data) - - # Take the public fields and create a public key - priv_key = rsa.key.PrivateKey.load_pkcs1(in_data, cli.inform) - pub_key = rsa.key.PublicKey(priv_key.n, priv_key.e) - - # Save to the output file - out_data = pub_key.save_pkcs1(cli.outform) - - if cli.outfilename: - print('Writing public key to %s in %s format' % - (cli.outfilename, cli.outform), file=sys.stderr) - with open(cli.outfilename, 'wb') as outfile: - outfile.write(out_data) - else: - print('Writing public key to stdout in %s format' % cli.outform, - file=sys.stderr) - sys.stdout.write(out_data.decode('ascii')) diff --git a/src/lib/rsa/varblock.py b/src/lib/rsa/varblock.py deleted file mode 100644 index 1c8d8390..00000000 --- a/src/lib/rsa/varblock.py +++ /dev/null @@ -1,179 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2011 Sybren A. Stüvel <sybren@stuvel.eu> -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""VARBLOCK file support - -.. deprecated:: 3.4 - - The VARBLOCK format is NOT recommended for general use, has been deprecated since - Python-RSA 3.4, and will be removed in a future release. It's vulnerable to a - number of attacks: - - 1. decrypt/encrypt_bigfile() does not implement `Authenticated encryption`_ nor - uses MACs to verify messages before decrypting public key encrypted messages. - - 2. decrypt/encrypt_bigfile() does not use hybrid encryption (it uses plain RSA) - and has no method for chaining, so block reordering is possible. - - See `issue #19 on Github`_ for more information. - -.. _Authenticated encryption: https://en.wikipedia.org/wiki/Authenticated_encryption -.. _issue #19 on Github: https://github.com/sybrenstuvel/python-rsa/issues/13 - - -The VARBLOCK file format is as follows, where || denotes byte concatenation: - - FILE := VERSION || BLOCK || BLOCK ... - - BLOCK := LENGTH || DATA - - LENGTH := varint-encoded length of the subsequent data. Varint comes from - Google Protobuf, and encodes an integer into a variable number of bytes. - Each byte uses the 7 lowest bits to encode the value. The highest bit set - to 1 indicates the next byte is also part of the varint. The last byte will - have this bit set to 0. - -This file format is called the VARBLOCK format, in line with the varint format -used to denote the block sizes. - -""" - -import warnings - -from rsa._compat import byte, b - -ZERO_BYTE = b('\x00') -VARBLOCK_VERSION = 1 - -warnings.warn("The 'rsa.varblock' module was deprecated in Python-RSA version " - "3.4 due to security issues in the VARBLOCK format. See " - "https://github.com/sybrenstuvel/python-rsa/issues/13 for more information.", - DeprecationWarning) - - -def read_varint(infile): - """Reads a varint from the file. - - When the first byte to be read indicates EOF, (0, 0) is returned. When an - EOF occurs when at least one byte has been read, an EOFError exception is - raised. - - :param infile: the file-like object to read from. It should have a read() - method. - :returns: (varint, length), the read varint and the number of read bytes. - """ - - varint = 0 - read_bytes = 0 - - while True: - char = infile.read(1) - if len(char) == 0: - if read_bytes == 0: - return 0, 0 - raise EOFError('EOF while reading varint, value is %i so far' % - varint) - - byte = ord(char) - varint += (byte & 0x7F) << (7 * read_bytes) - - read_bytes += 1 - - if not byte & 0x80: - return varint, read_bytes - - -def write_varint(outfile, value): - """Writes a varint to a file. - - :param outfile: the file-like object to write to. It should have a write() - method. - :returns: the number of written bytes. - """ - - # there is a big difference between 'write the value 0' (this case) and - # 'there is nothing left to write' (the false-case of the while loop) - - if value == 0: - outfile.write(ZERO_BYTE) - return 1 - - written_bytes = 0 - while value > 0: - to_write = value & 0x7f - value >>= 7 - - if value > 0: - to_write |= 0x80 - - outfile.write(byte(to_write)) - written_bytes += 1 - - return written_bytes - - -def yield_varblocks(infile): - """Generator, yields each block in the input file. - - :param infile: file to read, is expected to have the VARBLOCK format as - described in the module's docstring. - @yields the contents of each block. - """ - - # Check the version number - first_char = infile.read(1) - if len(first_char) == 0: - raise EOFError('Unable to read VARBLOCK version number') - - version = ord(first_char) - if version != VARBLOCK_VERSION: - raise ValueError('VARBLOCK version %i not supported' % version) - - while True: - (block_size, read_bytes) = read_varint(infile) - - # EOF at block boundary, that's fine. - if read_bytes == 0 and block_size == 0: - break - - block = infile.read(block_size) - - read_size = len(block) - if read_size != block_size: - raise EOFError('Block size is %i, but could read only %i bytes' % - (block_size, read_size)) - - yield block - - -def yield_fixedblocks(infile, blocksize): - """Generator, yields each block of ``blocksize`` bytes in the input file. - - :param infile: file to read and separate in blocks. - :returns: a generator that yields the contents of each block - """ - - while True: - block = infile.read(blocksize) - - read_bytes = len(block) - if read_bytes == 0: - break - - yield block - - if read_bytes < blocksize: - break diff --git a/src/lib/websocket/ChangeLog b/src/lib/websocket/ChangeLog deleted file mode 100644 index f4483d1e..00000000 --- a/src/lib/websocket/ChangeLog +++ /dev/null @@ -1,302 +0,0 @@ -ChangeLog -============ - -- 0.47.0 - - - Fix socket constructor in _open_socket to use all relevant variables from getaddrinfo. (#383) - - .send() method is very slow (#340) - - cross-platform aync multi-client solution (#375) - - Fix detecting timeouts with SSL in recv (#387) - - Fix WebSocketApp does not poll for data correctly when using SSL (#384) - - Fix Infinite ping/pong timeouts in WebSocketApp.run_forever (#395) - - Added status message when HTTP can't be upgraded to WS (#399) - -- 0.46.0 - - - fixed OSError on windows (#370) - - fixed invalid character (#379) - -- 0.45.0 - - - change license to LGP v2.1 - - allow reuse of WebsocketApp.run_forever (#365) - - Update example for python3 (#360) - - add lock to recv function (#356) - - Parse close frame response correctly when reason present (#354) - - Fix SSL: SSLV3_ALERT_HANDSHAKE_FAILURE on Debian Stretch (#353) - - Wrap socket.gaierror with subclass of WebsocketException (#352) - - Resolve a proxy issue and a connection error (#345) - - Allow empty Host header value (#369) - - Fix undefined variable (#347) - - fix: getting a value with the key 'ca_certs' in sslopt dict (#326) - -- 0.44.0 - - -renames key in sslopt dict (#326) - -- 0.43.0 - - - Unkown kwarg 'ca_cert' when calling ssl wrap_socket() (#326) - - Race condition in WebSocket ping/pong (#327) - -- 0.42.0 - - - Implement simple cookie jar(#292) - - fix: when using pppoe redial will block.(#301) - - Fix insecure_pythons list in setup.py(#304) - - Support WEBSOCKET_CLIENT_CA_BUNDLE being directory(#307) - - WebSocketPayloadException under high traffic and limited network connection(#306) - - Not working --nocert parameter in wsdump.py(#315) - - Avoid the app to block on close on certain systems (#320) - - Fix warning is not defined. (#323) - -- 0.41.0 - - - move to repository to https://github.com/websocket-client/websocket-client.git - - _send_ping warning fails due to missing reference in _logging.__all__ (#294) - -- 0.40.0 - - Fix opcode -> op_code (#286) - -- 0.39.0 - - Shuffled around example code (#256) - - _send_ping graceful error handling (#262) - - Allow closing WebSocketApp with status/reason/timeout (#265) - - Support universal wheels (#267) - - _url: Added subnet IP address matching in no_proxy host detection (#270) - - fixed Incorrect encoding in continued messages python3 (#261) - - Pass headers for websocket handshake (#271) - - setup.py: Import `logging` before calling it. (#272) - - Implemented close code 1014 (#273) - - Support CA bundle specified by environment variable (#279) - - Response header values should not be converted to lower case (#264) - -- 0.38.0 - - Exclude port 443 from host http header (#248) - - Cleanup code (#249) - - Modify a code block directive in README (#250) - - fixed ping/pong timeouet (#253) - -- 0.37.0 - - fixed failure that `websocket.create_connection` does not accept `origin` as a parameter (#246 ) - -- 0.36.0 - - added support for using custom connection class (#235) - - use Named logger (#238) - - implement ping/pong timeout (#241) - - Corrects the syntax highlight code (#243) - - fixed failure to join thread before it is started (#242) - -- 0.35.0 - - Prints timings in console (#217) - - use inspect.getfullargspec with Python 3.x (#219) - - Check that exception message is actually a string before trying for substring check (#224) - - Use pre-initialized stream socket (#226) - - fixed TypeError: cafile, capath and cadata cannot be all omitted (#227) - -- 0.34.0 - - - Change import style (#203) - - fix attribute error on the older python. (#215) - -- 0.33.0 - - - fixed timeout+ssl error handling bug on python 2.7.10 (#190) - - add proxy support to wsdump.py (#194) - - use wsaccel if available (#193) - - add support for ssl cert chains to support client certs (#195) - - fix string formatting in exception (#196) - - fix typo in README.rst (#197) - - introduce on_data callback to pass data type. (#198) - - WebSocketBadStatusException for Handshake error (#199) - - set close timeout (#192) - - Map dict to headers list (#204) - - support client certification (#207) - - security improvement during handshake (#211) - - improve logging of error from callback (#212) - -- 0.32.0 - - - fix http proxy bug (#189) - -- 0.31.0 - - - Avoid deprecated BaseException.message (#180) - - Add travis builds (#182) - - fixed wsdump to work with piped input (#183) - - fixed output of wsdump.py with python3 (#185) - - add raw mode to wsdump.py (#186) - -- 0.30.0 - - - fixed if client is behind proxy (#169) - - support SNI for python 2.7.9+ and 3.2+ (#172) - - update Host HTTP header by user. (#171) - - fix typo for isEnabledFor (#173) - - can set verify_mode to CERT_NONE when check_hostname is enabled.(#175) - - make websockets iterable (#178) - -- 0.29.0 - - - fixed ssl socket bug - -- 0.28.0 - - - Fix erroneous argument shadowing(#168) - -- 0.27.0 - - - remove unittest2 requirements for python 2.6 (#156) - - fixed subprotocol case during header validation (#158) - - get response status and headers (#160) - - fix out-of-memory due to fragmentation when receiving a very large frame(#163) - - fix error if the payload data is nothing.(#166) - - refactoring. - -- 0.26.0 - - - all WebSocketException provide message string (#152) - - fixed tests fail when not connected to the network (#155) - - Add command line options and handle closed socket to wsdump.py (#153) - -- 0.25.0 - - - fixed for Python 2.6(#151) - -- 0.24.0 - - - Supporting http-basic auth in WebSocketApp (#143) - - fix failure of test.testInternalRecvStrict(#141) - - skip utf8 validation by skip_utf8_validation argument (#137) - - WebsocketProxyException will be raised if we got error about proxy.(#138) - -- 0.23.0 - - - Remove spurious print statement. (#135) - -- 0.22.0 - - - Fix not thread-safe of Websocket.close() (#120) - - Try to get proxy info from environment if not explicitly provided (#124) - - support proxy basic authentication. (#125) - - Fix NoneType exception at WebsocketApp.send (#126) - - not use proxy for localhost (#132) - -- 0.21.0 - - - Check for socket before attempting to close (#115) - - Enable turning off SSL verification in wsdump.py(#116) - - Enable to set subprotocol(#118) - - Better support for Autobahn test suite (http://autobahn.ws/testsuite) (#117) - -- v0.20.0 - - - fix typo. - -- v0.19.0 - - - suppress close event message(#107) - - detect socket connection state(#109) - - support for code and reason in on_close callback(#111) - - continuation frame handling seems suspicious(#113) - -- v0.18.0 - - - allow override of match_hostname usage on ssl (#105) - -- v0.17.0 - - - can't set timeout on a standing websocket connection (#102) - - fixed local variable 'error' referenced before assignment (#102, #98) - -- v0.16.0 - - - lock some method for multithread. (#92) - - disable cert verification. (#89) - -- v0.15.0 - - - fixed exception when send a large message (#84) - -- v0.14.1 - - - fixed to work on Python2.6 (#83) - -- v0.14.0 - - - Support python 3(#73) - - Support IPv6(#77) - - Support explicit web proxy(#57) - - specify cookie in connect method option(#82) - -- v0.13.0 - - - MemoryError when receiving large amount of data (~60 MB) at once(ISSUE#59) - - Controlling fragmentation(ISSUE#55) - - server certificate validation(ISSUE#56) - - PyPI tarball is missing test_websocket.py(ISSUE#65) - - Payload length encoding bug(ISSUE#58) - - disable Nagle algorithm by default(ISSUE#41) - - Better event loop in WebSocketApp(ISSUE#63) - - Skip tests that require Internet access by default(ISSUE#66) - -- v0.12.0 - - - support keep alive for WebSocketApp(ISSUE#34) - - fix some SSL bugs(ISSUE#35, #36) - - fix "Timing out leaves websocket library in bad state"(ISSUE#37) - - fix "WebSocketApp.run_with_no_err() silently eats all exceptions"(ISSUE#38) - - WebSocketTimeoutException will be raised for ws/wss timeout(ISSUE#40) - - improve wsdump message(ISSUE#42) - - support fragmentation message(ISSUE#43) - - fix some bugs - -- v0.11.0 - - - Only log non-normal close status(ISSUE#31) - - Fix default Origin isn't URI(ISSUE#32) - - fileno support(ISSUE#33) - -- v0.10.0 - - - allow to set HTTP Header to WebSocketApp(ISSUE#27) - - fix typo in pydoc(ISSUE#28) - - Passing a socketopt flag to the websocket constructor(ISSUE#29) - - websocket.send fails with long data(ISSUE#30) - - -- v0.9.0 - - - allow to set opcode in WebSocketApp.send(ISSUE#25) - - allow to modify Origin(ISSUE#26) - -- v0.8.0 - - - many bug fix - - some performance improvement - -- v0.7.0 - - - fixed problem to read long data.(ISSUE#12) - - fix buffer size boundary violation - -- v0.6.0 - - - Patches: UUID4, self.keep_running, mask_key (ISSUE#11) - - add wsdump.py tool - -- v0.5.2 - - - fix Echo App Demo Throw Error: 'NoneType' object has no attribute 'opcode (ISSUE#10) - -- v0.5.1 - - - delete invalid print statement. - -- v0.5.0 - - - support hybi-13 protocol. - -- v0.4.1 - - - fix incorrect custom header order(ISSUE#1) diff --git a/src/lib/websocket/LICENSE b/src/lib/websocket/LICENSE deleted file mode 100644 index 342ae716..00000000 --- a/src/lib/websocket/LICENSE +++ /dev/null @@ -1,135 +0,0 @@ -GNU LESSER GENERAL PUBLIC LICENSE -Version 2.1, February 1999 - -Copyright (C) 1991, 1999 Free Software Foundation, Inc. -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -Everyone is permitted to copy and distribute verbatim copies -of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] -Preamble -The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. - -This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. - -When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. - -To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. - -For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. - -We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. - -To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. - -Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. - -Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. - -When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. - -We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. - -For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. - -In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. - -Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. - -The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. - -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". - -A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. - -The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) - -"Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. - -Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. - -1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. - -You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. - -2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: - -a) The modified work must itself be a software library. -b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. -c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. -d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. -(For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. - -3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. - -Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. - -This option is useful when you wish to copy part of the code of the Library into a program that is not a library. - -4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. - -If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. - -5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. - -However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. - -When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. - -If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) - -Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. - -6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. - -You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: - -a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) -b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. -c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. -d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. -e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. -For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. - -It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. - -7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: - -a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. -b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. -8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. - -9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. - -10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. - -11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. - -This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. - -12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. - -13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. - -14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. - -NO WARRANTY - -15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - -16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. diff --git a/src/lib/websocket/README.rst b/src/lib/websocket/README.rst deleted file mode 100644 index 7c303983..00000000 --- a/src/lib/websocket/README.rst +++ /dev/null @@ -1,268 +0,0 @@ -================= -websocket-client -================= - -websocket-client module is WebSocket client for python. This provide the low level APIs for WebSocket. All APIs are the synchronous functions. - -websocket-client supports only hybi-13. - - -License -============ - - - LGPL - -Installation -============= - -This module is tested on Python 2.7 and Python 3.x. - -Type "python setup.py install" or "pip install websocket-client" to install. - -.. CAUTION:: - - from v0.16.0, we can install by "pip install websocket-client" for python 3. - -This module depend on - - - six - - backports.ssl_match_hostname for Python 2.x - -performance ------------------- - - "send" method is too slow on pure python. If you want to get better performace, please install numpy or wsaccel. -You can get the best performance from numpy. - - -How about Python 3 -=========================== - -Now, we support python 3 on single source code from version 0.14.0. Thanks, @battlemidget and @ralphbean. - -HTTP Proxy -============= - -Support websocket access via http proxy. -The proxy server must allow "CONNECT" method to websocket port. -Default squid setting is "ALLOWED TO CONNECT ONLY HTTPS PORT". - -Current implementation of websocket-client is using "CONNECT" method via proxy. - - -example - -.. code:: python - - import websocket - ws = websocket.WebSocket() - ws.connect("ws://example.com/websocket", http_proxy_host="proxy_host_name", http_proxy_port=3128) - - - - -Examples -======== - -Long-lived connection ---------------------- -This example is similar to how WebSocket code looks in browsers using JavaScript. - -.. code:: python - - import websocket - try: - import thread - except ImportError: - import _thread as thread - import time - - def on_message(ws, message): - print(message) - - def on_error(ws, error): - print(error) - - def on_close(ws): - print("### closed ###") - - def on_open(ws): - def run(*args): - for i in range(3): - time.sleep(1) - ws.send("Hello %d" % i) - time.sleep(1) - ws.close() - print("thread terminating...") - thread.start_new_thread(run, ()) - - - if __name__ == "__main__": - websocket.enableTrace(True) - ws = websocket.WebSocketApp("ws://echo.websocket.org/", - on_message = on_message, - on_error = on_error, - on_close = on_close) - ws.on_open = on_open - ws.run_forever() - - -Short-lived one-off send-receive --------------------------------- -This is if you want to communicate a short message and disconnect immediately when done. - -.. code:: python - - from websocket import create_connection - ws = create_connection("ws://echo.websocket.org/") - print("Sending 'Hello, World'...") - ws.send("Hello, World") - print("Sent") - print("Receiving...") - result = ws.recv() - print("Received '%s'" % result) - ws.close() - -If you want to customize socket options, set sockopt. - -sockopt example - -.. code:: python - - from websocket import create_connection - ws = create_connection("ws://echo.websocket.org/", - sockopt=((socket.IPPROTO_TCP, socket.TCP_NODELAY),)) - - -More advanced: Custom class ---------------------------- -You can also write your own class for the connection, if you want to handle the nitty-gritty details yourself. - -.. code:: python - - import socket - from websocket import create_connection, WebSocket - class MyWebSocket(WebSocket): - def recv_frame(self): - frame = super().recv_frame() - print('yay! I got this frame: ', frame) - return frame - - ws = create_connection("ws://echo.websocket.org/", - sockopt=((socket.IPPROTO_TCP, socket.TCP_NODELAY, 1),), class_=MyWebSocket) - - -FAQ -============ - -How to disable ssl cert verification? ----------------------------------------- - -Please set sslopt to {"cert_reqs": ssl.CERT_NONE}. - -WebSocketApp sample - -.. code:: python - - ws = websocket.WebSocketApp("wss://echo.websocket.org") - ws.run_forever(sslopt={"cert_reqs": ssl.CERT_NONE}) - -create_connection sample - -.. code:: python - - ws = websocket.create_connection("wss://echo.websocket.org", - sslopt={"cert_reqs": ssl.CERT_NONE}) - -WebSocket sample - -.. code:: python - - ws = websocket.WebSocket(sslopt={"cert_reqs": ssl.CERT_NONE}) - ws.connect("wss://echo.websocket.org") - - -How to disable hostname verification. ----------------------------------------- - -Please set sslopt to {"check_hostname": False}. -(since v0.18.0) - -WebSocketApp sample - -.. code:: python - - ws = websocket.WebSocketApp("wss://echo.websocket.org") - ws.run_forever(sslopt={"check_hostname": False}) - -create_connection sample - -.. code:: python - - ws = websocket.create_connection("wss://echo.websocket.org", - sslopt={"check_hostname": False}) - -WebSocket sample - -.. code:: python - - ws = websocket.WebSocket(sslopt={"check_hostname": False}) - ws.connect("wss://echo.websocket.org") - - -How to enable `SNI <http://en.wikipedia.org/wiki/Server_Name_Indication>`_? ---------------------------------------------------------------------------- - -SNI support is available for Python 2.7.9+ and 3.2+. It will be enabled automatically whenever possible. - - -Sub Protocols. ----------------------------------------- - -The server needs to support sub protocols, please set the subprotocol like this. - - -Subprotocol sample - -.. code:: python - - ws = websocket.create_connection("ws://example.com/websocket", subprotocols=["binary", "base64"]) - - - -wsdump.py -============ - -wsdump.py is simple WebSocket test(debug) tool. - -sample for echo.websocket.org:: - - $ wsdump.py ws://echo.websocket.org/ - Press Ctrl+C to quit - > Hello, WebSocket - < Hello, WebSocket - > How are you? - < How are you? - -Usage ---------- - -usage:: - - wsdump.py [-h] [-v [VERBOSE]] ws_url - -WebSocket Simple Dump Tool - -positional arguments: - ws_url websocket url. ex. ws://echo.websocket.org/ - -optional arguments: - -h, --help show this help message and exit -WebSocketApp - -v VERBOSE, --verbose VERBOSE set verbose mode. If set to 1, show opcode. If set to 2, enable to trace websocket module - -example:: - - $ wsdump.py ws://echo.websocket.org/ - $ wsdump.py ws://echo.websocket.org/ -v - $ wsdump.py ws://echo.websocket.org/ -vv diff --git a/src/lib/websocket/__init__.py b/src/lib/websocket/__init__.py deleted file mode 100644 index b90e65ad..00000000 --- a/src/lib/websocket/__init__.py +++ /dev/null @@ -1,29 +0,0 @@ -""" -websocket - WebSocket client library for Python - -Copyright (C) 2010 Hiroki Ohtani(liris) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1335 USA - -""" -from ._abnf import * -from ._app import WebSocketApp -from ._core import * -from ._exceptions import * -from ._logging import * -from ._socket import * - -__version__ = "0.47.0" diff --git a/src/lib/websocket/_abnf.py b/src/lib/websocket/_abnf.py deleted file mode 100644 index a0000fa1..00000000 --- a/src/lib/websocket/_abnf.py +++ /dev/null @@ -1,447 +0,0 @@ -""" -websocket - WebSocket client library for Python - -Copyright (C) 2010 Hiroki Ohtani(liris) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1335 USA - -""" -import array -import os -import struct - -import six - -from ._exceptions import * -from ._utils import validate_utf8 -from threading import Lock - -try: - if six.PY3: - import numpy - else: - numpy = None -except ImportError: - numpy = None - -try: - # If wsaccel is available we use compiled routines to mask data. - if not numpy: - from wsaccel.xormask import XorMaskerSimple - - def _mask(_m, _d): - return XorMaskerSimple(_m).process(_d) -except ImportError: - # wsaccel is not available, we rely on python implementations. - def _mask(_m, _d): - for i in range(len(_d)): - _d[i] ^= _m[i % 4] - - if six.PY3: - return _d.tobytes() - else: - return _d.tostring() - - -__all__ = [ - 'ABNF', 'continuous_frame', 'frame_buffer', - 'STATUS_NORMAL', - 'STATUS_GOING_AWAY', - 'STATUS_PROTOCOL_ERROR', - 'STATUS_UNSUPPORTED_DATA_TYPE', - 'STATUS_STATUS_NOT_AVAILABLE', - 'STATUS_ABNORMAL_CLOSED', - 'STATUS_INVALID_PAYLOAD', - 'STATUS_POLICY_VIOLATION', - 'STATUS_MESSAGE_TOO_BIG', - 'STATUS_INVALID_EXTENSION', - 'STATUS_UNEXPECTED_CONDITION', - 'STATUS_BAD_GATEWAY', - 'STATUS_TLS_HANDSHAKE_ERROR', -] - -# closing frame status codes. -STATUS_NORMAL = 1000 -STATUS_GOING_AWAY = 1001 -STATUS_PROTOCOL_ERROR = 1002 -STATUS_UNSUPPORTED_DATA_TYPE = 1003 -STATUS_STATUS_NOT_AVAILABLE = 1005 -STATUS_ABNORMAL_CLOSED = 1006 -STATUS_INVALID_PAYLOAD = 1007 -STATUS_POLICY_VIOLATION = 1008 -STATUS_MESSAGE_TOO_BIG = 1009 -STATUS_INVALID_EXTENSION = 1010 -STATUS_UNEXPECTED_CONDITION = 1011 -STATUS_BAD_GATEWAY = 1014 -STATUS_TLS_HANDSHAKE_ERROR = 1015 - -VALID_CLOSE_STATUS = ( - STATUS_NORMAL, - STATUS_GOING_AWAY, - STATUS_PROTOCOL_ERROR, - STATUS_UNSUPPORTED_DATA_TYPE, - STATUS_INVALID_PAYLOAD, - STATUS_POLICY_VIOLATION, - STATUS_MESSAGE_TOO_BIG, - STATUS_INVALID_EXTENSION, - STATUS_UNEXPECTED_CONDITION, - STATUS_BAD_GATEWAY, -) - - -class ABNF(object): - """ - ABNF frame class. - see http://tools.ietf.org/html/rfc5234 - and http://tools.ietf.org/html/rfc6455#section-5.2 - """ - - # operation code values. - OPCODE_CONT = 0x0 - OPCODE_TEXT = 0x1 - OPCODE_BINARY = 0x2 - OPCODE_CLOSE = 0x8 - OPCODE_PING = 0x9 - OPCODE_PONG = 0xa - - # available operation code value tuple - OPCODES = (OPCODE_CONT, OPCODE_TEXT, OPCODE_BINARY, OPCODE_CLOSE, - OPCODE_PING, OPCODE_PONG) - - # opcode human readable string - OPCODE_MAP = { - OPCODE_CONT: "cont", - OPCODE_TEXT: "text", - OPCODE_BINARY: "binary", - OPCODE_CLOSE: "close", - OPCODE_PING: "ping", - OPCODE_PONG: "pong" - } - - # data length threshold. - LENGTH_7 = 0x7e - LENGTH_16 = 1 << 16 - LENGTH_63 = 1 << 63 - - def __init__(self, fin=0, rsv1=0, rsv2=0, rsv3=0, - opcode=OPCODE_TEXT, mask=1, data=""): - """ - Constructor for ABNF. - please check RFC for arguments. - """ - self.fin = fin - self.rsv1 = rsv1 - self.rsv2 = rsv2 - self.rsv3 = rsv3 - self.opcode = opcode - self.mask = mask - if data is None: - data = "" - self.data = data - self.get_mask_key = os.urandom - - def validate(self, skip_utf8_validation=False): - """ - validate the ABNF frame. - skip_utf8_validation: skip utf8 validation. - """ - if self.rsv1 or self.rsv2 or self.rsv3: - raise WebSocketProtocolException("rsv is not implemented, yet") - - if self.opcode not in ABNF.OPCODES: - raise WebSocketProtocolException("Invalid opcode %r", self.opcode) - - if self.opcode == ABNF.OPCODE_PING and not self.fin: - raise WebSocketProtocolException("Invalid ping frame.") - - if self.opcode == ABNF.OPCODE_CLOSE: - l = len(self.data) - if not l: - return - if l == 1 or l >= 126: - raise WebSocketProtocolException("Invalid close frame.") - if l > 2 and not skip_utf8_validation and not validate_utf8(self.data[2:]): - raise WebSocketProtocolException("Invalid close frame.") - - code = 256 * \ - six.byte2int(self.data[0:1]) + six.byte2int(self.data[1:2]) - if not self._is_valid_close_status(code): - raise WebSocketProtocolException("Invalid close opcode.") - - @staticmethod - def _is_valid_close_status(code): - return code in VALID_CLOSE_STATUS or (3000 <= code < 5000) - - def __str__(self): - return "fin=" + str(self.fin) \ - + " opcode=" + str(self.opcode) \ - + " data=" + str(self.data) - - @staticmethod - def create_frame(data, opcode, fin=1): - """ - create frame to send text, binary and other data. - - data: data to send. This is string value(byte array). - if opcode is OPCODE_TEXT and this value is unicode, - data value is converted into unicode string, automatically. - - opcode: operation code. please see OPCODE_XXX. - - fin: fin flag. if set to 0, create continue fragmentation. - """ - if opcode == ABNF.OPCODE_TEXT and isinstance(data, six.text_type): - data = data.encode("utf-8") - # mask must be set if send data from client - return ABNF(fin, 0, 0, 0, opcode, 1, data) - - def format(self): - """ - format this object to string(byte array) to send data to server. - """ - if any(x not in (0, 1) for x in [self.fin, self.rsv1, self.rsv2, self.rsv3]): - raise ValueError("not 0 or 1") - if self.opcode not in ABNF.OPCODES: - raise ValueError("Invalid OPCODE") - length = len(self.data) - if length >= ABNF.LENGTH_63: - raise ValueError("data is too long") - - frame_header = chr(self.fin << 7 - | self.rsv1 << 6 | self.rsv2 << 5 | self.rsv3 << 4 - | self.opcode) - if length < ABNF.LENGTH_7: - frame_header += chr(self.mask << 7 | length) - frame_header = six.b(frame_header) - elif length < ABNF.LENGTH_16: - frame_header += chr(self.mask << 7 | 0x7e) - frame_header = six.b(frame_header) - frame_header += struct.pack("!H", length) - else: - frame_header += chr(self.mask << 7 | 0x7f) - frame_header = six.b(frame_header) - frame_header += struct.pack("!Q", length) - - if not self.mask: - return frame_header + self.data - else: - mask_key = self.get_mask_key(4) - return frame_header + self._get_masked(mask_key) - - def _get_masked(self, mask_key): - s = ABNF.mask(mask_key, self.data) - - if isinstance(mask_key, six.text_type): - mask_key = mask_key.encode('utf-8') - - return mask_key + s - - @staticmethod - def mask(mask_key, data): - """ - mask or unmask data. Just do xor for each byte - - mask_key: 4 byte string(byte). - - data: data to mask/unmask. - """ - if data is None: - data = "" - - if isinstance(mask_key, six.text_type): - mask_key = six.b(mask_key) - - if isinstance(data, six.text_type): - data = six.b(data) - - if numpy: - origlen = len(data) - _mask_key = mask_key[3] << 24 | mask_key[2] << 16 | mask_key[1] << 8 | mask_key[0] - - # We need data to be a multiple of four... - data += bytes(" " * (4 - (len(data) % 4)), "us-ascii") - a = numpy.frombuffer(data, dtype="uint32") - masked = numpy.bitwise_xor(a, [_mask_key]).astype("uint32") - if len(data) > origlen: - return masked.tobytes()[:origlen] - return masked.tobytes() - else: - _m = array.array("B", mask_key) - _d = array.array("B", data) - return _mask(_m, _d) - - -class frame_buffer(object): - _HEADER_MASK_INDEX = 5 - _HEADER_LENGTH_INDEX = 6 - - def __init__(self, recv_fn, skip_utf8_validation): - self.recv = recv_fn - self.skip_utf8_validation = skip_utf8_validation - # Buffers over the packets from the layer beneath until desired amount - # bytes of bytes are received. - self.recv_buffer = [] - self.clear() - self.lock = Lock() - - def clear(self): - self.header = None - self.length = None - self.mask = None - - def has_received_header(self): - return self.header is None - - def recv_header(self): - header = self.recv_strict(2) - b1 = header[0] - - if six.PY2: - b1 = ord(b1) - - fin = b1 >> 7 & 1 - rsv1 = b1 >> 6 & 1 - rsv2 = b1 >> 5 & 1 - rsv3 = b1 >> 4 & 1 - opcode = b1 & 0xf - b2 = header[1] - - if six.PY2: - b2 = ord(b2) - - has_mask = b2 >> 7 & 1 - length_bits = b2 & 0x7f - - self.header = (fin, rsv1, rsv2, rsv3, opcode, has_mask, length_bits) - - def has_mask(self): - if not self.header: - return False - return self.header[frame_buffer._HEADER_MASK_INDEX] - - def has_received_length(self): - return self.length is None - - def recv_length(self): - bits = self.header[frame_buffer._HEADER_LENGTH_INDEX] - length_bits = bits & 0x7f - if length_bits == 0x7e: - v = self.recv_strict(2) - self.length = struct.unpack("!H", v)[0] - elif length_bits == 0x7f: - v = self.recv_strict(8) - self.length = struct.unpack("!Q", v)[0] - else: - self.length = length_bits - - def has_received_mask(self): - return self.mask is None - - def recv_mask(self): - self.mask = self.recv_strict(4) if self.has_mask() else "" - - def recv_frame(self): - - with self.lock: - # Header - if self.has_received_header(): - self.recv_header() - (fin, rsv1, rsv2, rsv3, opcode, has_mask, _) = self.header - - # Frame length - if self.has_received_length(): - self.recv_length() - length = self.length - - # Mask - if self.has_received_mask(): - self.recv_mask() - mask = self.mask - - # Payload - payload = self.recv_strict(length) - if has_mask: - payload = ABNF.mask(mask, payload) - - # Reset for next frame - self.clear() - - frame = ABNF(fin, rsv1, rsv2, rsv3, opcode, has_mask, payload) - frame.validate(self.skip_utf8_validation) - - return frame - - def recv_strict(self, bufsize): - shortage = bufsize - sum(len(x) for x in self.recv_buffer) - while shortage > 0: - # Limit buffer size that we pass to socket.recv() to avoid - # fragmenting the heap -- the number of bytes recv() actually - # reads is limited by socket buffer and is relatively small, - # yet passing large numbers repeatedly causes lots of large - # buffers allocated and then shrunk, which results in - # fragmentation. - bytes_ = self.recv(min(16384, shortage)) - self.recv_buffer.append(bytes_) - shortage -= len(bytes_) - - unified = six.b("").join(self.recv_buffer) - - if shortage == 0: - self.recv_buffer = [] - return unified - else: - self.recv_buffer = [unified[bufsize:]] - return unified[:bufsize] - - -class continuous_frame(object): - - def __init__(self, fire_cont_frame, skip_utf8_validation): - self.fire_cont_frame = fire_cont_frame - self.skip_utf8_validation = skip_utf8_validation - self.cont_data = None - self.recving_frames = None - - def validate(self, frame): - if not self.recving_frames and frame.opcode == ABNF.OPCODE_CONT: - raise WebSocketProtocolException("Illegal frame") - if self.recving_frames and \ - frame.opcode in (ABNF.OPCODE_TEXT, ABNF.OPCODE_BINARY): - raise WebSocketProtocolException("Illegal frame") - - def add(self, frame): - if self.cont_data: - self.cont_data[1] += frame.data - else: - if frame.opcode in (ABNF.OPCODE_TEXT, ABNF.OPCODE_BINARY): - self.recving_frames = frame.opcode - self.cont_data = [frame.opcode, frame.data] - - if frame.fin: - self.recving_frames = None - - def is_fire(self, frame): - return frame.fin or self.fire_cont_frame - - def extract(self, frame): - data = self.cont_data - self.cont_data = None - frame.data = data[1] - if not self.fire_cont_frame and data[0] == ABNF.OPCODE_TEXT and not self.skip_utf8_validation and not validate_utf8(frame.data): - raise WebSocketPayloadException( - "cannot decode: " + repr(frame.data)) - - return [data[0], frame] diff --git a/src/lib/websocket/_app.py b/src/lib/websocket/_app.py deleted file mode 100644 index 74e90ae0..00000000 --- a/src/lib/websocket/_app.py +++ /dev/null @@ -1,320 +0,0 @@ -""" -websocket - WebSocket client library for Python - -Copyright (C) 2010 Hiroki Ohtani(liris) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1335 USA - -""" - -""" -WebSocketApp provides higher level APIs. -""" -import select -import sys -import threading -import time -import traceback - -import six - -from ._abnf import ABNF -from ._core import WebSocket, getdefaulttimeout -from ._exceptions import * -from . import _logging - - -__all__ = ["WebSocketApp"] - -class Dispatcher: - def __init__(self, app, ping_timeout): - self.app = app - self.ping_timeout = ping_timeout - - def read(self, sock, callback): - while self.app.sock.connected: - r, w, e = select.select( - (self.app.sock.sock, ), (), (), self.ping_timeout) # Use a 10 second timeout to avoid to wait forever on close - if r: - callback() - -class SSLDispacther: - def __init__(self, app, ping_timeout): - self.app = app - self.ping_timeout = ping_timeout - - def read(self, sock, callback): - while self.app.sock.connected: - r = self.select() - if r: - callback() - - def select(self): - sock = self.app.sock.sock - if sock.pending(): - return [sock,] - - r, w, e = select.select((sock, ), (), (), self.ping_timeout) - return r - -class WebSocketApp(object): - """ - Higher level of APIs are provided. - The interface is like JavaScript WebSocket object. - """ - - def __init__(self, url, header=None, - on_open=None, on_message=None, on_error=None, - on_close=None, on_ping=None, on_pong=None, - on_cont_message=None, - keep_running=True, get_mask_key=None, cookie=None, - subprotocols=None, - on_data=None): - """ - url: websocket url. - header: custom header for websocket handshake. - on_open: callable object which is called at opening websocket. - this function has one argument. The argument is this class object. - on_message: callable object which is called when received data. - on_message has 2 arguments. - The 1st argument is this class object. - The 2nd argument is utf-8 string which we get from the server. - on_error: callable object which is called when we get error. - on_error has 2 arguments. - The 1st argument is this class object. - The 2nd argument is exception object. - on_close: callable object which is called when closed the connection. - this function has one argument. The argument is this class object. - on_cont_message: callback object which is called when receive continued - frame data. - on_cont_message has 3 arguments. - The 1st argument is this class object. - The 2nd argument is utf-8 string which we get from the server. - The 3rd argument is continue flag. if 0, the data continue - to next frame data - on_data: callback object which is called when a message received. - This is called before on_message or on_cont_message, - and then on_message or on_cont_message is called. - on_data has 4 argument. - The 1st argument is this class object. - The 2nd argument is utf-8 string which we get from the server. - The 3rd argument is data type. ABNF.OPCODE_TEXT or ABNF.OPCODE_BINARY will be came. - The 4th argument is continue flag. if 0, the data continue - keep_running: this parameter is obosleted and ignored it. - get_mask_key: a callable to produce new mask keys, - see the WebSocket.set_mask_key's docstring for more information - subprotocols: array of available sub protocols. default is None. - """ - self.url = url - self.header = header if header is not None else [] - self.cookie = cookie - self.on_open = on_open - self.on_message = on_message - self.on_data = on_data - self.on_error = on_error - self.on_close = on_close - self.on_ping = on_ping - self.on_pong = on_pong - self.on_cont_message = on_cont_message - self.keep_running = False - self.get_mask_key = get_mask_key - self.sock = None - self.last_ping_tm = 0 - self.last_pong_tm = 0 - self.subprotocols = subprotocols - - def send(self, data, opcode=ABNF.OPCODE_TEXT): - """ - send message. - data: message to send. If you set opcode to OPCODE_TEXT, - data must be utf-8 string or unicode. - opcode: operation code of data. default is OPCODE_TEXT. - """ - - if not self.sock or self.sock.send(data, opcode) == 0: - raise WebSocketConnectionClosedException( - "Connection is already closed.") - - def close(self, **kwargs): - """ - close websocket connection. - """ - self.keep_running = False - if self.sock: - self.sock.close(**kwargs) - - def _send_ping(self, interval, event): - while not event.wait(interval): - self.last_ping_tm = time.time() - if self.sock: - try: - self.sock.ping() - except Exception as ex: - _logging.warning("send_ping routine terminated: {}".format(ex)) - break - - def run_forever(self, sockopt=None, sslopt=None, - ping_interval=0, ping_timeout=None, - http_proxy_host=None, http_proxy_port=None, - http_no_proxy=None, http_proxy_auth=None, - skip_utf8_validation=False, - host=None, origin=None, dispatcher=None): - """ - run event loop for WebSocket framework. - This loop is infinite loop and is alive during websocket is available. - sockopt: values for socket.setsockopt. - sockopt must be tuple - and each element is argument of sock.setsockopt. - sslopt: ssl socket optional dict. - ping_interval: automatically send "ping" command - every specified period(second) - if set to 0, not send automatically. - ping_timeout: timeout(second) if the pong message is not received. - http_proxy_host: http proxy host name. - http_proxy_port: http proxy port. If not set, set to 80. - http_no_proxy: host names, which doesn't use proxy. - skip_utf8_validation: skip utf8 validation. - host: update host header. - origin: update origin header. - """ - - if not ping_timeout or ping_timeout <= 0: - ping_timeout = None - if ping_timeout and ping_interval and ping_interval <= ping_timeout: - raise WebSocketException("Ensure ping_interval > ping_timeout") - if sockopt is None: - sockopt = [] - if sslopt is None: - sslopt = {} - if self.sock: - raise WebSocketException("socket is already opened") - thread = None - close_frame = None - self.keep_running = True - self.last_ping_tm = 0 - self.last_pong_tm = 0 - - def teardown(): - if not self.keep_running: - return - if thread and thread.isAlive(): - event.set() - thread.join() - self.keep_running = False - self.sock.close() - close_args = self._get_close_args( - close_frame.data if close_frame else None) - self._callback(self.on_close, *close_args) - self.sock = None - - try: - self.sock = WebSocket( - self.get_mask_key, sockopt=sockopt, sslopt=sslopt, - fire_cont_frame=self.on_cont_message and True or False, - skip_utf8_validation=skip_utf8_validation) - self.sock.settimeout(getdefaulttimeout()) - self.sock.connect( - self.url, header=self.header, cookie=self.cookie, - http_proxy_host=http_proxy_host, - http_proxy_port=http_proxy_port, http_no_proxy=http_no_proxy, - http_proxy_auth=http_proxy_auth, subprotocols=self.subprotocols, - host=host, origin=origin) - if not dispatcher: - dispatcher = self.create_dispatcher(ping_timeout) - - self._callback(self.on_open) - - if ping_interval: - event = threading.Event() - thread = threading.Thread( - target=self._send_ping, args=(ping_interval, event)) - thread.setDaemon(True) - thread.start() - - def read(): - if not self.keep_running: - return teardown() - - op_code, frame = self.sock.recv_data_frame(True) - if op_code == ABNF.OPCODE_CLOSE: - close_frame = frame - return teardown() - elif op_code == ABNF.OPCODE_PING: - self._callback(self.on_ping, frame.data) - elif op_code == ABNF.OPCODE_PONG: - self.last_pong_tm = time.time() - self._callback(self.on_pong, frame.data) - elif op_code == ABNF.OPCODE_CONT and self.on_cont_message: - self._callback(self.on_data, frame.data, - frame.opcode, frame.fin) - self._callback(self.on_cont_message, - frame.data, frame.fin) - else: - data = frame.data - if six.PY3 and op_code == ABNF.OPCODE_TEXT: - data = data.decode("utf-8") - self._callback(self.on_data, data, frame.opcode, True) - self._callback(self.on_message, data) - - if ping_timeout and self.last_ping_tm \ - and time.time() - self.last_ping_tm > ping_timeout \ - and self.last_ping_tm - self.last_pong_tm > ping_timeout: - raise WebSocketTimeoutException("ping/pong timed out") - return True - - dispatcher.read(self.sock.sock, read) - except (Exception, KeyboardInterrupt, SystemExit) as e: - self._callback(self.on_error, e) - if isinstance(e, SystemExit): - # propagate SystemExit further - raise - teardown() - - def create_dispatcher(self, ping_timeout): - timeout = ping_timeout or 10 - if self.sock.is_ssl(): - return SSLDispacther(self, timeout) - - return Dispatcher(self, timeout) - - def _get_close_args(self, data): - """ this functions extracts the code, reason from the close body - if they exists, and if the self.on_close except three arguments """ - import inspect - # if the on_close callback is "old", just return empty list - if sys.version_info < (3, 0): - if not self.on_close or len(inspect.getargspec(self.on_close).args) != 3: - return [] - else: - if not self.on_close or len(inspect.getfullargspec(self.on_close).args) != 3: - return [] - - if data and len(data) >= 2: - code = 256 * six.byte2int(data[0:1]) + six.byte2int(data[1:2]) - reason = data[2:].decode('utf-8') - return [code, reason] - - return [None, None] - - def _callback(self, callback, *args): - if callback: - try: - callback(self, *args) - except Exception as e: - _logging.error("error from callback {}: {}".format(callback, e)) - if _logging.isEnabledForDebug(): - _, _, tb = sys.exc_info() - traceback.print_tb(tb) diff --git a/src/lib/websocket/_cookiejar.py b/src/lib/websocket/_cookiejar.py deleted file mode 100644 index 3efeb0fd..00000000 --- a/src/lib/websocket/_cookiejar.py +++ /dev/null @@ -1,52 +0,0 @@ -try: - import Cookie -except: - import http.cookies as Cookie - - -class SimpleCookieJar(object): - def __init__(self): - self.jar = dict() - - def add(self, set_cookie): - if set_cookie: - try: - simpleCookie = Cookie.SimpleCookie(set_cookie) - except: - simpleCookie = Cookie.SimpleCookie(set_cookie.encode('ascii', 'ignore')) - - for k, v in simpleCookie.items(): - domain = v.get("domain") - if domain: - if not domain.startswith("."): - domain = "." + domain - cookie = self.jar.get(domain) if self.jar.get(domain) else Cookie.SimpleCookie() - cookie.update(simpleCookie) - self.jar[domain.lower()] = cookie - - def set(self, set_cookie): - if set_cookie: - try: - simpleCookie = Cookie.SimpleCookie(set_cookie) - except: - simpleCookie = Cookie.SimpleCookie(set_cookie.encode('ascii', 'ignore')) - - for k, v in simpleCookie.items(): - domain = v.get("domain") - if domain: - if not domain.startswith("."): - domain = "." + domain - self.jar[domain.lower()] = simpleCookie - - def get(self, host): - if not host: - return "" - - cookies = [] - for domain, simpleCookie in self.jar.items(): - host = host.lower() - if host.endswith(domain) or host == domain[1:]: - cookies.append(self.jar.get(domain)) - - return "; ".join(filter(None, ["%s=%s" % (k, v.value) for cookie in filter(None, sorted(cookies)) for k, v in - sorted(cookie.items())])) diff --git a/src/lib/websocket/_core.py b/src/lib/websocket/_core.py deleted file mode 100644 index 2d009621..00000000 --- a/src/lib/websocket/_core.py +++ /dev/null @@ -1,495 +0,0 @@ -""" -websocket - WebSocket client library for Python - -Copyright (C) 2010 Hiroki Ohtani(liris) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1335 USA - -""" -from __future__ import print_function - -import socket -import struct -import threading - -import six - -# websocket modules -from ._abnf import * -from ._exceptions import * -from ._handshake import * -from ._http import * -from ._logging import * -from ._socket import * -from ._ssl_compat import * -from ._utils import * - -__all__ = ['WebSocket', 'create_connection'] - -""" -websocket python client. -========================= - -This version support only hybi-13. -Please see http://tools.ietf.org/html/rfc6455 for protocol. -""" - - -class WebSocket(object): - """ - Low level WebSocket interface. - This class is based on - The WebSocket protocol draft-hixie-thewebsocketprotocol-76 - http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76 - - We can connect to the websocket server and send/receive data. - The following example is an echo client. - - >>> import websocket - >>> ws = websocket.WebSocket() - >>> ws.connect("ws://echo.websocket.org") - >>> ws.send("Hello, Server") - >>> ws.recv() - 'Hello, Server' - >>> ws.close() - - get_mask_key: a callable to produce new mask keys, see the set_mask_key - function's docstring for more details - sockopt: values for socket.setsockopt. - sockopt must be tuple and each element is argument of sock.setsockopt. - sslopt: dict object for ssl socket option. - fire_cont_frame: fire recv event for each cont frame. default is False - enable_multithread: if set to True, lock send method. - skip_utf8_validation: skip utf8 validation. - """ - - def __init__(self, get_mask_key=None, sockopt=None, sslopt=None, - fire_cont_frame=False, enable_multithread=False, - skip_utf8_validation=False, **_): - """ - Initialize WebSocket object. - """ - self.sock_opt = sock_opt(sockopt, sslopt) - self.handshake_response = None - self.sock = None - - self.connected = False - self.get_mask_key = get_mask_key - # These buffer over the build-up of a single frame. - self.frame_buffer = frame_buffer(self._recv, skip_utf8_validation) - self.cont_frame = continuous_frame( - fire_cont_frame, skip_utf8_validation) - - if enable_multithread: - self.lock = threading.Lock() - self.readlock = threading.Lock() - else: - self.lock = NoLock() - self.readlock = NoLock() - - def __iter__(self): - """ - Allow iteration over websocket, implying sequential `recv` executions. - """ - while True: - yield self.recv() - - def __next__(self): - return self.recv() - - def next(self): - return self.__next__() - - def fileno(self): - return self.sock.fileno() - - def set_mask_key(self, func): - """ - set function to create musk key. You can customize mask key generator. - Mainly, this is for testing purpose. - - func: callable object. the func takes 1 argument as integer. - The argument means length of mask key. - This func must return string(byte array), - which length is argument specified. - """ - self.get_mask_key = func - - def gettimeout(self): - """ - Get the websocket timeout(second). - """ - return self.sock_opt.timeout - - def settimeout(self, timeout): - """ - Set the timeout to the websocket. - - timeout: timeout time(second). - """ - self.sock_opt.timeout = timeout - if self.sock: - self.sock.settimeout(timeout) - - timeout = property(gettimeout, settimeout) - - def getsubprotocol(self): - """ - get subprotocol - """ - if self.handshake_response: - return self.handshake_response.subprotocol - else: - return None - - subprotocol = property(getsubprotocol) - - def getstatus(self): - """ - get handshake status - """ - if self.handshake_response: - return self.handshake_response.status - else: - return None - - status = property(getstatus) - - def getheaders(self): - """ - get handshake response header - """ - if self.handshake_response: - return self.handshake_response.headers - else: - return None - - def is_ssl(self): - return isinstance(self.sock, ssl.SSLSocket) - - headers = property(getheaders) - - def connect(self, url, **options): - """ - Connect to url. url is websocket url scheme. - ie. ws://host:port/resource - You can customize using 'options'. - If you set "header" list object, you can set your own custom header. - - >>> ws = WebSocket() - >>> ws.connect("ws://echo.websocket.org/", - ... header=["User-Agent: MyProgram", - ... "x-custom: header"]) - - timeout: socket timeout time. This value is integer. - if you set None for this value, - it means "use default_timeout value" - - options: "header" -> custom http header list or dict. - "cookie" -> cookie value. - "origin" -> custom origin url. - "host" -> custom host header string. - "http_proxy_host" - http proxy host name. - "http_proxy_port" - http proxy port. If not set, set to 80. - "http_no_proxy" - host names, which doesn't use proxy. - "http_proxy_auth" - http proxy auth information. - tuple of username and password. - default is None - "subprotocols" - array of available sub protocols. - default is None. - "socket" - pre-initialized stream socket. - - """ - self.sock, addrs = connect(url, self.sock_opt, proxy_info(**options), - options.pop('socket', None)) - - try: - self.handshake_response = handshake(self.sock, *addrs, **options) - self.connected = True - except: - if self.sock: - self.sock.close() - self.sock = None - raise - - def send(self, payload, opcode=ABNF.OPCODE_TEXT): - """ - Send the data as string. - - payload: Payload must be utf-8 string or unicode, - if the opcode is OPCODE_TEXT. - Otherwise, it must be string(byte array) - - opcode: operation code to send. Please see OPCODE_XXX. - """ - - frame = ABNF.create_frame(payload, opcode) - return self.send_frame(frame) - - def send_frame(self, frame): - """ - Send the data frame. - - frame: frame data created by ABNF.create_frame - - >>> ws = create_connection("ws://echo.websocket.org/") - >>> frame = ABNF.create_frame("Hello", ABNF.OPCODE_TEXT) - >>> ws.send_frame(frame) - >>> cont_frame = ABNF.create_frame("My name is ", ABNF.OPCODE_CONT, 0) - >>> ws.send_frame(frame) - >>> cont_frame = ABNF.create_frame("Foo Bar", ABNF.OPCODE_CONT, 1) - >>> ws.send_frame(frame) - - """ - if self.get_mask_key: - frame.get_mask_key = self.get_mask_key - data = frame.format() - length = len(data) - trace("send: " + repr(data)) - - with self.lock: - while data: - l = self._send(data) - data = data[l:] - - return length - - def send_binary(self, payload): - return self.send(payload, ABNF.OPCODE_BINARY) - - def ping(self, payload=""): - """ - send ping data. - - payload: data payload to send server. - """ - if isinstance(payload, six.text_type): - payload = payload.encode("utf-8") - self.send(payload, ABNF.OPCODE_PING) - - def pong(self, payload): - """ - send pong data. - - payload: data payload to send server. - """ - if isinstance(payload, six.text_type): - payload = payload.encode("utf-8") - self.send(payload, ABNF.OPCODE_PONG) - - def recv(self): - """ - Receive string data(byte array) from the server. - - return value: string(byte array) value. - """ - with self.readlock: - opcode, data = self.recv_data() - if six.PY3 and opcode == ABNF.OPCODE_TEXT: - return data.decode("utf-8") - elif opcode == ABNF.OPCODE_TEXT or opcode == ABNF.OPCODE_BINARY: - return data - else: - return '' - - def recv_data(self, control_frame=False): - """ - Receive data with operation code. - - control_frame: a boolean flag indicating whether to return control frame - data, defaults to False - - return value: tuple of operation code and string(byte array) value. - """ - opcode, frame = self.recv_data_frame(control_frame) - return opcode, frame.data - - def recv_data_frame(self, control_frame=False): - """ - Receive data with operation code. - - control_frame: a boolean flag indicating whether to return control frame - data, defaults to False - - return value: tuple of operation code and string(byte array) value. - """ - while True: - frame = self.recv_frame() - if not frame: - # handle error: - # 'NoneType' object has no attribute 'opcode' - raise WebSocketProtocolException( - "Not a valid frame %s" % frame) - elif frame.opcode in (ABNF.OPCODE_TEXT, ABNF.OPCODE_BINARY, ABNF.OPCODE_CONT): - self.cont_frame.validate(frame) - self.cont_frame.add(frame) - - if self.cont_frame.is_fire(frame): - return self.cont_frame.extract(frame) - - elif frame.opcode == ABNF.OPCODE_CLOSE: - self.send_close() - return frame.opcode, frame - elif frame.opcode == ABNF.OPCODE_PING: - if len(frame.data) < 126: - self.pong(frame.data) - else: - raise WebSocketProtocolException( - "Ping message is too long") - if control_frame: - return frame.opcode, frame - elif frame.opcode == ABNF.OPCODE_PONG: - if control_frame: - return frame.opcode, frame - - def recv_frame(self): - """ - receive data as frame from server. - - return value: ABNF frame object. - """ - return self.frame_buffer.recv_frame() - - def send_close(self, status=STATUS_NORMAL, reason=six.b("")): - """ - send close data to the server. - - status: status code to send. see STATUS_XXX. - - reason: the reason to close. This must be string or bytes. - """ - if status < 0 or status >= ABNF.LENGTH_16: - raise ValueError("code is invalid range") - self.connected = False - self.send(struct.pack('!H', status) + reason, ABNF.OPCODE_CLOSE) - - def close(self, status=STATUS_NORMAL, reason=six.b(""), timeout=3): - """ - Close Websocket object - - status: status code to send. see STATUS_XXX. - - reason: the reason to close. This must be string. - - timeout: timeout until receive a close frame. - If None, it will wait forever until receive a close frame. - """ - if self.connected: - if status < 0 or status >= ABNF.LENGTH_16: - raise ValueError("code is invalid range") - - try: - self.connected = False - self.send(struct.pack('!H', status) + - reason, ABNF.OPCODE_CLOSE) - sock_timeout = self.sock.gettimeout() - self.sock.settimeout(timeout) - try: - frame = self.recv_frame() - if isEnabledForError(): - recv_status = struct.unpack("!H", frame.data[0:2])[0] - if recv_status != STATUS_NORMAL: - error("close status: " + repr(recv_status)) - except: - pass - self.sock.settimeout(sock_timeout) - self.sock.shutdown(socket.SHUT_RDWR) - except: - pass - - self.shutdown() - - def abort(self): - """ - Low-level asynchronous abort, wakes up other threads that are waiting in recv_* - """ - if self.connected: - self.sock.shutdown(socket.SHUT_RDWR) - - def shutdown(self): - """close socket, immediately.""" - if self.sock: - self.sock.close() - self.sock = None - self.connected = False - - def _send(self, data): - return send(self.sock, data) - - def _recv(self, bufsize): - try: - return recv(self.sock, bufsize) - except WebSocketConnectionClosedException: - if self.sock: - self.sock.close() - self.sock = None - self.connected = False - raise - - -def create_connection(url, timeout=None, class_=WebSocket, **options): - """ - connect to url and return websocket object. - - Connect to url and return the WebSocket object. - Passing optional timeout parameter will set the timeout on the socket. - If no timeout is supplied, - the global default timeout setting returned by getdefauttimeout() is used. - You can customize using 'options'. - If you set "header" list object, you can set your own custom header. - - >>> conn = create_connection("ws://echo.websocket.org/", - ... header=["User-Agent: MyProgram", - ... "x-custom: header"]) - - - timeout: socket timeout time. This value is integer. - if you set None for this value, - it means "use default_timeout value" - - class_: class to instantiate when creating the connection. It has to implement - settimeout and connect. It's __init__ should be compatible with - WebSocket.__init__, i.e. accept all of it's kwargs. - options: "header" -> custom http header list or dict. - "cookie" -> cookie value. - "origin" -> custom origin url. - "host" -> custom host header string. - "http_proxy_host" - http proxy host name. - "http_proxy_port" - http proxy port. If not set, set to 80. - "http_no_proxy" - host names, which doesn't use proxy. - "http_proxy_auth" - http proxy auth information. - tuple of username and password. - default is None - "enable_multithread" -> enable lock for multithread. - "sockopt" -> socket options - "sslopt" -> ssl option - "subprotocols" - array of available sub protocols. - default is None. - "skip_utf8_validation" - skip utf8 validation. - "socket" - pre-initialized stream socket. - """ - sockopt = options.pop("sockopt", []) - sslopt = options.pop("sslopt", {}) - fire_cont_frame = options.pop("fire_cont_frame", False) - enable_multithread = options.pop("enable_multithread", False) - skip_utf8_validation = options.pop("skip_utf8_validation", False) - websock = class_(sockopt=sockopt, sslopt=sslopt, - fire_cont_frame=fire_cont_frame, - enable_multithread=enable_multithread, - skip_utf8_validation=skip_utf8_validation, **options) - websock.settimeout(timeout if timeout is not None else getdefaulttimeout()) - websock.connect(url, **options) - return websock diff --git a/src/lib/websocket/_exceptions.py b/src/lib/websocket/_exceptions.py deleted file mode 100644 index 24c85e0e..00000000 --- a/src/lib/websocket/_exceptions.py +++ /dev/null @@ -1,87 +0,0 @@ -""" -websocket - WebSocket client library for Python - -Copyright (C) 2010 Hiroki Ohtani(liris) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1335 USA - -""" - - -""" -define websocket exceptions -""" - - -class WebSocketException(Exception): - """ - websocket exception class. - """ - pass - - -class WebSocketProtocolException(WebSocketException): - """ - If the websocket protocol is invalid, this exception will be raised. - """ - pass - - -class WebSocketPayloadException(WebSocketException): - """ - If the websocket payload is invalid, this exception will be raised. - """ - pass - - -class WebSocketConnectionClosedException(WebSocketException): - """ - If remote host closed the connection or some network error happened, - this exception will be raised. - """ - pass - - -class WebSocketTimeoutException(WebSocketException): - """ - WebSocketTimeoutException will be raised at socket timeout during read/write data. - """ - pass - - -class WebSocketProxyException(WebSocketException): - """ - WebSocketProxyException will be raised when proxy error occurred. - """ - pass - - -class WebSocketBadStatusException(WebSocketException): - """ - WebSocketBadStatusException will be raised when we get bad handshake status code. - """ - - def __init__(self, message, status_code, status_message=None): - msg = message % (status_code, status_message) if status_message is not None \ - else message % status_code - super(WebSocketBadStatusException, self).__init__(msg) - self.status_code = status_code - -class WebSocketAddressException(WebSocketException): - """ - If the websocket address info cannot be found, this exception will be raised. - """ - pass diff --git a/src/lib/websocket/_handshake.py b/src/lib/websocket/_handshake.py deleted file mode 100644 index 3fd5c9ee..00000000 --- a/src/lib/websocket/_handshake.py +++ /dev/null @@ -1,180 +0,0 @@ -""" -websocket - WebSocket client library for Python - -Copyright (C) 2010 Hiroki Ohtani(liris) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1335 USA - -""" -import hashlib -import hmac -import os - -import six - -from ._cookiejar import SimpleCookieJar -from ._exceptions import * -from ._http import * -from ._logging import * -from ._socket import * - -if six.PY3: - from base64 import encodebytes as base64encode -else: - from base64 import encodestring as base64encode - -__all__ = ["handshake_response", "handshake"] - -if hasattr(hmac, "compare_digest"): - compare_digest = hmac.compare_digest -else: - def compare_digest(s1, s2): - return s1 == s2 - -# websocket supported version. -VERSION = 13 - -CookieJar = SimpleCookieJar() - - -class handshake_response(object): - - def __init__(self, status, headers, subprotocol): - self.status = status - self.headers = headers - self.subprotocol = subprotocol - CookieJar.add(headers.get("set-cookie")) - - -def handshake(sock, hostname, port, resource, **options): - headers, key = _get_handshake_headers(resource, hostname, port, options) - - header_str = "\r\n".join(headers) - send(sock, header_str) - dump("request header", header_str) - - status, resp = _get_resp_headers(sock) - success, subproto = _validate(resp, key, options.get("subprotocols")) - if not success: - raise WebSocketException("Invalid WebSocket Header") - - return handshake_response(status, resp, subproto) - -def _pack_hostname(hostname): - # IPv6 address - if ':' in hostname: - return '[' + hostname + ']' - - return hostname - -def _get_handshake_headers(resource, host, port, options): - headers = [ - "GET %s HTTP/1.1" % resource, - "Upgrade: websocket", - "Connection: Upgrade" - ] - if port == 80 or port == 443: - hostport = _pack_hostname(host) - else: - hostport = "%s:%d" % (_pack_hostname(host), port) - - if "host" in options and options["host"] is not None: - headers.append("Host: %s" % options["host"]) - else: - headers.append("Host: %s" % hostport) - - if "origin" in options and options["origin"] is not None: - headers.append("Origin: %s" % options["origin"]) - else: - headers.append("Origin: http://%s" % hostport) - - key = _create_sec_websocket_key() - headers.append("Sec-WebSocket-Key: %s" % key) - headers.append("Sec-WebSocket-Version: %s" % VERSION) - - subprotocols = options.get("subprotocols") - if subprotocols: - headers.append("Sec-WebSocket-Protocol: %s" % ",".join(subprotocols)) - - if "header" in options: - header = options["header"] - if isinstance(header, dict): - header = map(": ".join, header.items()) - headers.extend(header) - - server_cookie = CookieJar.get(host) - client_cookie = options.get("cookie", None) - - cookie = "; ".join(filter(None, [server_cookie, client_cookie])) - - if cookie: - headers.append("Cookie: %s" % cookie) - - headers.append("") - headers.append("") - - return headers, key - - -def _get_resp_headers(sock, success_status=101): - status, resp_headers, status_message = read_headers(sock) - if status != success_status: - raise WebSocketBadStatusException("Handshake status %d %s", status, status_message) - return status, resp_headers - -_HEADERS_TO_CHECK = { - "upgrade": "websocket", - "connection": "upgrade", -} - - -def _validate(headers, key, subprotocols): - subproto = None - for k, v in _HEADERS_TO_CHECK.items(): - r = headers.get(k, None) - if not r: - return False, None - r = r.lower() - if v != r: - return False, None - - if subprotocols: - subproto = headers.get("sec-websocket-protocol", None).lower() - if not subproto or subproto not in [s.lower() for s in subprotocols]: - error("Invalid subprotocol: " + str(subprotocols)) - return False, None - - result = headers.get("sec-websocket-accept", None) - if not result: - return False, None - result = result.lower() - - if isinstance(result, six.text_type): - result = result.encode('utf-8') - - value = (key + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11").encode('utf-8') - hashed = base64encode(hashlib.sha1(value).digest()).strip().lower() - success = compare_digest(hashed, result) - - if success: - return True, subproto - else: - return False, None - - -def _create_sec_websocket_key(): - randomness = os.urandom(16) - return base64encode(randomness).decode('utf-8').strip() diff --git a/src/lib/websocket/_http.py b/src/lib/websocket/_http.py deleted file mode 100644 index c3b53f56..00000000 --- a/src/lib/websocket/_http.py +++ /dev/null @@ -1,256 +0,0 @@ -""" -websocket - WebSocket client library for Python - -Copyright (C) 2010 Hiroki Ohtani(liris) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1335 USA - -""" -import errno -import os -import socket -import sys - -import six - -from ._exceptions import * -from ._logging import * -from ._socket import* -from ._ssl_compat import * -from ._url import * - -if six.PY3: - from base64 import encodebytes as base64encode -else: - from base64 import encodestring as base64encode - -__all__ = ["proxy_info", "connect", "read_headers"] - - -class proxy_info(object): - - def __init__(self, **options): - self.host = options.get("http_proxy_host", None) - if self.host: - self.port = options.get("http_proxy_port", 0) - self.auth = options.get("http_proxy_auth", None) - else: - self.port = 0 - self.auth = None - self.no_proxy = options.get("http_no_proxy", None) - - -def connect(url, options, proxy, socket): - hostname, port, resource, is_secure = parse_url(url) - - if socket: - return socket, (hostname, port, resource) - - addrinfo_list, need_tunnel, auth = _get_addrinfo_list( - hostname, port, is_secure, proxy) - if not addrinfo_list: - raise WebSocketException( - "Host not found.: " + hostname + ":" + str(port)) - - sock = None - try: - sock = _open_socket(addrinfo_list, options.sockopt, options.timeout) - if need_tunnel: - sock = _tunnel(sock, hostname, port, auth) - - if is_secure: - if HAVE_SSL: - sock = _ssl_socket(sock, options.sslopt, hostname) - else: - raise WebSocketException("SSL not available.") - - return sock, (hostname, port, resource) - except: - if sock: - sock.close() - raise - - -def _get_addrinfo_list(hostname, port, is_secure, proxy): - phost, pport, pauth = get_proxy_info( - hostname, is_secure, proxy.host, proxy.port, proxy.auth, proxy.no_proxy) - try: - if not phost: - addrinfo_list = socket.getaddrinfo( - hostname, port, 0, 0, socket.SOL_TCP) - return addrinfo_list, False, None - else: - pport = pport and pport or 80 - addrinfo_list = socket.getaddrinfo(phost, pport, 0, 0, socket.SOL_TCP) - return addrinfo_list, True, pauth - except socket.gaierror as e: - raise WebSocketAddressException(e) - - -def _open_socket(addrinfo_list, sockopt, timeout): - err = None - for addrinfo in addrinfo_list: - family, socktype, proto = addrinfo[:3] - sock = socket.socket(family, socktype, proto) - sock.settimeout(timeout) - for opts in DEFAULT_SOCKET_OPTION: - sock.setsockopt(*opts) - for opts in sockopt: - sock.setsockopt(*opts) - - address = addrinfo[4] - try: - sock.connect(address) - except socket.error as error: - error.remote_ip = str(address[0]) - try: - eConnRefused = (errno.ECONNREFUSED, errno.WSAECONNREFUSED) - except: - eConnRefused = (errno.ECONNREFUSED, ) - if error.errno in eConnRefused: - err = error - continue - else: - raise - else: - break - else: - raise err - - return sock - - -def _can_use_sni(): - return six.PY2 and sys.version_info >= (2, 7, 9) or sys.version_info >= (3, 2) - - -def _wrap_sni_socket(sock, sslopt, hostname, check_hostname): - context = ssl.SSLContext(sslopt.get('ssl_version', ssl.PROTOCOL_SSLv23)) - - if sslopt.get('cert_reqs', ssl.CERT_NONE) != ssl.CERT_NONE: - context.load_verify_locations(cafile=sslopt.get('ca_certs', None), capath=sslopt.get('ca_cert_path', None)) - if sslopt.get('certfile', None): - context.load_cert_chain( - sslopt['certfile'], - sslopt.get('keyfile', None), - sslopt.get('password', None), - ) - # see - # https://github.com/liris/websocket-client/commit/b96a2e8fa765753e82eea531adb19716b52ca3ca#commitcomment-10803153 - context.verify_mode = sslopt['cert_reqs'] - if HAVE_CONTEXT_CHECK_HOSTNAME: - context.check_hostname = check_hostname - if 'ciphers' in sslopt: - context.set_ciphers(sslopt['ciphers']) - if 'cert_chain' in sslopt: - certfile, keyfile, password = sslopt['cert_chain'] - context.load_cert_chain(certfile, keyfile, password) - if 'ecdh_curve' in sslopt: - context.set_ecdh_curve(sslopt['ecdh_curve']) - - return context.wrap_socket( - sock, - do_handshake_on_connect=sslopt.get('do_handshake_on_connect', True), - suppress_ragged_eofs=sslopt.get('suppress_ragged_eofs', True), - server_hostname=hostname, - ) - - -def _ssl_socket(sock, user_sslopt, hostname): - sslopt = dict(cert_reqs=ssl.CERT_REQUIRED) - sslopt.update(user_sslopt) - - if os.environ.get('WEBSOCKET_CLIENT_CA_BUNDLE'): - certPath = os.environ.get('WEBSOCKET_CLIENT_CA_BUNDLE') - else: - certPath = os.path.join( - os.path.dirname(__file__), "cacert.pem") - if os.path.isfile(certPath) and user_sslopt.get('ca_certs', None) is None \ - and user_sslopt.get('ca_cert', None) is None: - sslopt['ca_certs'] = certPath - elif os.path.isdir(certPath) and user_sslopt.get('ca_cert_path', None) is None: - sslopt['ca_cert_path'] = certPath - - check_hostname = sslopt["cert_reqs"] != ssl.CERT_NONE and sslopt.pop( - 'check_hostname', True) - - if _can_use_sni(): - sock = _wrap_sni_socket(sock, sslopt, hostname, check_hostname) - else: - sslopt.pop('check_hostname', True) - sock = ssl.wrap_socket(sock, **sslopt) - - if not HAVE_CONTEXT_CHECK_HOSTNAME and check_hostname: - match_hostname(sock.getpeercert(), hostname) - - return sock - - -def _tunnel(sock, host, port, auth): - debug("Connecting proxy...") - connect_header = "CONNECT %s:%d HTTP/1.0\r\n" % (host, port) - # TODO: support digest auth. - if auth and auth[0]: - auth_str = auth[0] - if auth[1]: - auth_str += ":" + auth[1] - encoded_str = base64encode(auth_str.encode()).strip().decode() - connect_header += "Proxy-Authorization: Basic %s\r\n" % encoded_str - connect_header += "\r\n" - dump("request header", connect_header) - - send(sock, connect_header) - - try: - status, resp_headers, status_message = read_headers(sock) - except Exception as e: - raise WebSocketProxyException(str(e)) - - if status != 200: - raise WebSocketProxyException( - "failed CONNECT via proxy status: %r" % status) - - return sock - - -def read_headers(sock): - status = None - status_message = None - headers = {} - trace("--- response header ---") - - while True: - line = recv_line(sock) - line = line.decode('utf-8').strip() - if not line: - break - trace(line) - if not status: - - status_info = line.split(" ", 2) - status = int(status_info[1]) - status_message = status_info[2] - else: - kv = line.split(":", 1) - if len(kv) == 2: - key, value = kv - headers[key.lower()] = value.strip() - else: - raise WebSocketException("Invalid header") - - trace("-----------------------") - - return status, headers, status_message diff --git a/src/lib/websocket/_logging.py b/src/lib/websocket/_logging.py deleted file mode 100644 index d406db6a..00000000 --- a/src/lib/websocket/_logging.py +++ /dev/null @@ -1,74 +0,0 @@ -""" -websocket - WebSocket client library for Python - -Copyright (C) 2010 Hiroki Ohtani(liris) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1335 USA - -""" -import logging - -_logger = logging.getLogger('websocket') -_traceEnabled = False - -__all__ = ["enableTrace", "dump", "error", "warning", "debug", "trace", - "isEnabledForError", "isEnabledForDebug"] - - -def enableTrace(traceable): - """ - turn on/off the traceability. - - traceable: boolean value. if set True, traceability is enabled. - """ - global _traceEnabled - _traceEnabled = traceable - if traceable: - if not _logger.handlers: - _logger.addHandler(logging.StreamHandler()) - _logger.setLevel(logging.DEBUG) - - -def dump(title, message): - if _traceEnabled: - _logger.debug("--- " + title + " ---") - _logger.debug(message) - _logger.debug("-----------------------") - - -def error(msg): - _logger.error(msg) - - -def warning(msg): - _logger.warning(msg) - - -def debug(msg): - _logger.debug(msg) - - -def trace(msg): - if _traceEnabled: - _logger.debug(msg) - - -def isEnabledForError(): - return _logger.isEnabledFor(logging.ERROR) - - -def isEnabledForDebug(): - return _logger.isEnabledFor(logging.DEBUG) diff --git a/src/lib/websocket/_socket.py b/src/lib/websocket/_socket.py deleted file mode 100644 index c84fcf90..00000000 --- a/src/lib/websocket/_socket.py +++ /dev/null @@ -1,126 +0,0 @@ -""" -websocket - WebSocket client library for Python - -Copyright (C) 2010 Hiroki Ohtani(liris) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1335 USA - -""" -import socket - -import six -import sys - -from ._exceptions import * -from ._ssl_compat import * -from ._utils import * - -DEFAULT_SOCKET_OPTION = [(socket.SOL_TCP, socket.TCP_NODELAY, 1)] -if hasattr(socket, "SO_KEEPALIVE"): - DEFAULT_SOCKET_OPTION.append((socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)) -if hasattr(socket, "TCP_KEEPIDLE"): - DEFAULT_SOCKET_OPTION.append((socket.SOL_TCP, socket.TCP_KEEPIDLE, 30)) -if hasattr(socket, "TCP_KEEPINTVL"): - DEFAULT_SOCKET_OPTION.append((socket.SOL_TCP, socket.TCP_KEEPINTVL, 10)) -if hasattr(socket, "TCP_KEEPCNT"): - DEFAULT_SOCKET_OPTION.append((socket.SOL_TCP, socket.TCP_KEEPCNT, 3)) - -_default_timeout = None - -__all__ = ["DEFAULT_SOCKET_OPTION", "sock_opt", "setdefaulttimeout", "getdefaulttimeout", - "recv", "recv_line", "send"] - - -class sock_opt(object): - - def __init__(self, sockopt, sslopt): - if sockopt is None: - sockopt = [] - if sslopt is None: - sslopt = {} - self.sockopt = sockopt - self.sslopt = sslopt - self.timeout = None - - -def setdefaulttimeout(timeout): - """ - Set the global timeout setting to connect. - - timeout: default socket timeout time. This value is second. - """ - global _default_timeout - _default_timeout = timeout - - -def getdefaulttimeout(): - """ - Return the global timeout setting(second) to connect. - """ - return _default_timeout - - -def recv(sock, bufsize): - if not sock: - raise WebSocketConnectionClosedException("socket is already closed.") - - try: - bytes_ = sock.recv(bufsize) - except socket.timeout as e: - message = extract_err_message(e) - raise WebSocketTimeoutException(message) - except SSLError as e: - message = extract_err_message(e) - if isinstance(message, str) and 'timed out' in message: - raise WebSocketTimeoutException(message) - else: - raise - - if not bytes_: - raise WebSocketConnectionClosedException( - "Connection is already closed.") - - return bytes_ - - -def recv_line(sock): - line = [] - while True: - c = recv(sock, 1) - line.append(c) - if c == six.b("\n"): - break - return six.b("").join(line) - - -def send(sock, data): - if isinstance(data, six.text_type): - data = data.encode('utf-8') - - if not sock: - raise WebSocketConnectionClosedException("socket is already closed.") - - try: - return sock.send(data) - except socket.timeout as e: - message = extract_err_message(e) - raise WebSocketTimeoutException(message) - except Exception as e: - message = extract_err_message(e) - if isinstance(message, str) and "timed out" in message: - raise WebSocketTimeoutException(message) - else: - raise diff --git a/src/lib/websocket/_ssl_compat.py b/src/lib/websocket/_ssl_compat.py deleted file mode 100644 index 03048162..00000000 --- a/src/lib/websocket/_ssl_compat.py +++ /dev/null @@ -1,44 +0,0 @@ -""" -websocket - WebSocket client library for Python - -Copyright (C) 2010 Hiroki Ohtani(liris) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1335 USA - -""" -__all__ = ["HAVE_SSL", "ssl", "SSLError"] - -try: - import ssl - from ssl import SSLError - if hasattr(ssl, 'SSLContext') and hasattr(ssl.SSLContext, 'check_hostname'): - HAVE_CONTEXT_CHECK_HOSTNAME = True - else: - HAVE_CONTEXT_CHECK_HOSTNAME = False - if hasattr(ssl, "match_hostname"): - from ssl import match_hostname - else: - from backports.ssl_match_hostname import match_hostname - __all__.append("match_hostname") - __all__.append("HAVE_CONTEXT_CHECK_HOSTNAME") - - HAVE_SSL = True -except ImportError: - # dummy class of SSLError for ssl none-support environment. - class SSLError(Exception): - pass - - HAVE_SSL = False diff --git a/src/lib/websocket/_url.py b/src/lib/websocket/_url.py deleted file mode 100644 index f7bdf346..00000000 --- a/src/lib/websocket/_url.py +++ /dev/null @@ -1,160 +0,0 @@ -""" -websocket - WebSocket client library for Python - -Copyright (C) 2010 Hiroki Ohtani(liris) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1335 USA - -""" - -import os -import socket -import struct - -from six.moves.urllib.parse import urlparse - - -__all__ = ["parse_url", "get_proxy_info"] - - -def parse_url(url): - """ - parse url and the result is tuple of - (hostname, port, resource path and the flag of secure mode) - - url: url string. - """ - if ":" not in url: - raise ValueError("url is invalid") - - scheme, url = url.split(":", 1) - - parsed = urlparse(url, scheme="ws") - if parsed.hostname: - hostname = parsed.hostname - else: - raise ValueError("hostname is invalid") - port = 0 - if parsed.port: - port = parsed.port - - is_secure = False - if scheme == "ws": - if not port: - port = 80 - elif scheme == "wss": - is_secure = True - if not port: - port = 443 - else: - raise ValueError("scheme %s is invalid" % scheme) - - if parsed.path: - resource = parsed.path - else: - resource = "/" - - if parsed.query: - resource += "?" + parsed.query - - return hostname, port, resource, is_secure - - -DEFAULT_NO_PROXY_HOST = ["localhost", "127.0.0.1"] - - -def _is_ip_address(addr): - try: - socket.inet_aton(addr) - except socket.error: - return False - else: - return True - - -def _is_subnet_address(hostname): - try: - addr, netmask = hostname.split("/") - return _is_ip_address(addr) and 0 <= int(netmask) < 32 - except ValueError: - return False - - -def _is_address_in_network(ip, net): - ipaddr = struct.unpack('I', socket.inet_aton(ip))[0] - netaddr, bits = net.split('/') - netmask = struct.unpack('I', socket.inet_aton(netaddr))[0] & ((2 << int(bits) - 1) - 1) - return ipaddr & netmask == netmask - - -def _is_no_proxy_host(hostname, no_proxy): - if not no_proxy: - v = os.environ.get("no_proxy", "").replace(" ", "") - no_proxy = v.split(",") - if not no_proxy: - no_proxy = DEFAULT_NO_PROXY_HOST - - if hostname in no_proxy: - return True - elif _is_ip_address(hostname): - return any([_is_address_in_network(hostname, subnet) for subnet in no_proxy if _is_subnet_address(subnet)]) - - return False - - -def get_proxy_info( - hostname, is_secure, proxy_host=None, proxy_port=0, proxy_auth=None, - no_proxy=None): - """ - try to retrieve proxy host and port from environment - if not provided in options. - result is (proxy_host, proxy_port, proxy_auth). - proxy_auth is tuple of username and password - of proxy authentication information. - - hostname: websocket server name. - - is_secure: is the connection secure? (wss) - looks for "https_proxy" in env - before falling back to "http_proxy" - - options: "http_proxy_host" - http proxy host name. - "http_proxy_port" - http proxy port. - "http_no_proxy" - host names, which doesn't use proxy. - "http_proxy_auth" - http proxy auth information. - tuple of username and password. - default is None - """ - if _is_no_proxy_host(hostname, no_proxy): - return None, 0, None - - if proxy_host: - port = proxy_port - auth = proxy_auth - return proxy_host, port, auth - - env_keys = ["http_proxy"] - if is_secure: - env_keys.insert(0, "https_proxy") - - for key in env_keys: - value = os.environ.get(key, None) - if value: - proxy = urlparse(value) - auth = (proxy.username, proxy.password) if proxy.username else None - return proxy.hostname, proxy.port, auth - - return None, 0, None diff --git a/src/lib/websocket/_utils.py b/src/lib/websocket/_utils.py deleted file mode 100644 index 399fb89d..00000000 --- a/src/lib/websocket/_utils.py +++ /dev/null @@ -1,105 +0,0 @@ -""" -websocket - WebSocket client library for Python - -Copyright (C) 2010 Hiroki Ohtani(liris) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1335 USA - -""" -import six - -__all__ = ["NoLock", "validate_utf8", "extract_err_message"] - - -class NoLock(object): - - def __enter__(self): - pass - - def __exit__(self, exc_type, exc_value, traceback): - pass - -try: - # If wsaccel is available we use compiled routines to validate UTF-8 - # strings. - from wsaccel.utf8validator import Utf8Validator - - def _validate_utf8(utfbytes): - return Utf8Validator().validate(utfbytes)[0] - -except ImportError: - # UTF-8 validator - # python implementation of http://bjoern.hoehrmann.de/utf-8/decoder/dfa/ - - _UTF8_ACCEPT = 0 - _UTF8_REJECT = 12 - - _UTF8D = [ - # The first part of the table maps bytes to character classes that - # to reduce the size of the transition table and create bitmasks. - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, - 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, - 8,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 10,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3, 11,6,6,6,5,8,8,8,8,8,8,8,8,8,8,8, - - # The second part is a transition table that maps a combination - # of a state of the automaton and a character class to a state. - 0,12,24,36,60,96,84,12,12,12,48,72, 12,12,12,12,12,12,12,12,12,12,12,12, - 12, 0,12,12,12,12,12, 0,12, 0,12,12, 12,24,12,12,12,12,12,24,12,24,12,12, - 12,12,12,12,12,12,12,24,12,12,12,12, 12,24,12,12,12,12,12,12,12,24,12,12, - 12,12,12,12,12,12,12,36,12,36,12,12, 12,36,12,12,12,12,12,36,12,36,12,12, - 12,36,12,12,12,12,12,12,12,12,12,12, ] - - def _decode(state, codep, ch): - tp = _UTF8D[ch] - - codep = (ch & 0x3f) | (codep << 6) if ( - state != _UTF8_ACCEPT) else (0xff >> tp) & ch - state = _UTF8D[256 + state + tp] - - return state, codep - - def _validate_utf8(utfbytes): - state = _UTF8_ACCEPT - codep = 0 - for i in utfbytes: - if six.PY2: - i = ord(i) - state, codep = _decode(state, codep, i) - if state == _UTF8_REJECT: - return False - - return True - - -def validate_utf8(utfbytes): - """ - validate utf8 byte string. - utfbytes: utf byte string to check. - return value: if valid utf8 string, return true. Otherwise, return false. - """ - return _validate_utf8(utfbytes) - - -def extract_err_message(exception): - if exception.args: - return exception.args[0] - else: - return None diff --git a/src/lib/win_inet_pton/__init__.py b/src/lib/win_inet_pton/__init__.py deleted file mode 100644 index 12aaf46c..00000000 --- a/src/lib/win_inet_pton/__init__.py +++ /dev/null @@ -1,84 +0,0 @@ -# This software released into the public domain. Anyone is free to copy, -# modify, publish, use, compile, sell, or distribute this software, -# either in source code form or as a compiled binary, for any purpose, -# commercial or non-commercial, and by any means. - -import socket -import ctypes -import os - - -class sockaddr(ctypes.Structure): - _fields_ = [("sa_family", ctypes.c_short), - ("__pad1", ctypes.c_ushort), - ("ipv4_addr", ctypes.c_byte * 4), - ("ipv6_addr", ctypes.c_byte * 16), - ("__pad2", ctypes.c_ulong)] - -if hasattr(ctypes, 'windll'): - WSAStringToAddressA = ctypes.windll.ws2_32.WSAStringToAddressA - WSAAddressToStringA = ctypes.windll.ws2_32.WSAAddressToStringA -else: - def not_windows(): - raise SystemError( - "Invalid platform. ctypes.windll must be available." - ) - WSAStringToAddressA = not_windows - WSAAddressToStringA = not_windows - - -def inet_pton(address_family, ip_string): - addr = sockaddr() - addr.sa_family = address_family - addr_size = ctypes.c_int(ctypes.sizeof(addr)) - - if WSAStringToAddressA( - ip_string, - address_family, - None, - ctypes.byref(addr), - ctypes.byref(addr_size) - ) != 0: - raise socket.error(ctypes.FormatError()) - - if address_family == socket.AF_INET: - return ctypes.string_at(addr.ipv4_addr, 4) - if address_family == socket.AF_INET6: - return ctypes.string_at(addr.ipv6_addr, 16) - - raise socket.error('unknown address family') - - -def inet_ntop(address_family, packed_ip): - addr = sockaddr() - addr.sa_family = address_family - addr_size = ctypes.c_int(ctypes.sizeof(addr)) - ip_string = ctypes.create_string_buffer(128) - ip_string_size = ctypes.c_int(ctypes.sizeof(ip_string)) - - if address_family == socket.AF_INET: - if len(packed_ip) != ctypes.sizeof(addr.ipv4_addr): - raise socket.error('packed IP wrong length for inet_ntoa') - ctypes.memmove(addr.ipv4_addr, packed_ip, 4) - elif address_family == socket.AF_INET6: - if len(packed_ip) != ctypes.sizeof(addr.ipv6_addr): - raise socket.error('packed IP wrong length for inet_ntoa') - ctypes.memmove(addr.ipv6_addr, packed_ip, 16) - else: - raise socket.error('unknown address family') - - if WSAAddressToStringA( - ctypes.byref(addr), - addr_size, - None, - ip_string, - ctypes.byref(ip_string_size) - ) != 0: - raise socket.error(ctypes.FormatError()) - - return ip_string[:ip_string_size.value - 1] - -# Adding our two functions to the socket library -if os.name == 'nt': - socket.inet_pton = inet_pton - socket.inet_ntop = inet_ntop