Coverage for cuda/core/_device.pyx: 83.26%
478 statements
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-16 01:23 +0000
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-16 01:23 +0000
1# SPDX-FileCopyrightText: Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2#
3# SPDX-License-Identifier: Apache-2.0
5from __future__ import annotations
7cimport cpython
9from cuda.bindings cimport cydriver
10from cuda.core._utils.cuda_utils cimport check_or_create_options, HANDLE_RETURN
11from libcpp.vector cimport vector
13import threading
15from cuda.core._context cimport Context, Context_check_open
16from cuda.core._context import ContextOptions
17from cuda.core._device_resources cimport DeviceResources, SMResource, WorkqueueResource
18from cuda.core._event cimport Event as cyEvent
19from cuda.core._event import Event, EventOptions
20from cuda.core._memory._buffer cimport Buffer, MemoryResource
21from cuda.core._rt cimport (
22 ContextHandle,
23 GreenCtxHandle,
24 create_context_handle_ref,
25 create_green_ctx_handle,
26 context_synchronize,
27 get_primary_context,
28 get_last_error,
29 as_cu,
30)
32from cuda.core._stream import IsStreamType, Stream, StreamOptions
33from cuda.core._utils.cuda_utils import (
34 ComputeCapability,
35 CUDAError,
36 driver,
37 handle_return,
38 runtime,
39)
40from cuda.core._stream cimport (
41 default_stream,
42)
44from typing import TYPE_CHECKING
46if TYPE_CHECKING:
47 import cuda.core.system # no-cython-lint
48 from cuda.core.graph import GraphBuilder
49 from cuda.core.texture import (
50 MipmappedArray,
51 MipmappedArrayOptions,
52 OpaqueArray,
53 OpaqueArrayOptions,
54 ResourceDescriptor,
55 SurfaceObject,
56 TextureObject,
57 TextureObjectOptions,
58 )
60# TODO: I prefer to type these as "cdef object" and avoid accessing them from within Python,
61# but it seems it is very convenient to expose them for testing purposes...
62_tls = threading.local()
63_lock = threading.Lock()
64cdef bint _is_cuInit = False
66__all__ = ['Device']
69cdef class DeviceProperties:
70 """
71 A class to query various attributes of a CUDA device.
73 Attributes are read-only and provide information about the device.
74 """
75 cdef:
76 int _handle
77 dict _cache
79 def __init__(self, *args, **kwargs) -> None:
80 raise RuntimeError("DeviceProperties cannot be instantiated directly. Please use Device APIs.") 2RO
82 @classmethod
83 def _init(cls, handle: int) -> DeviceProperties:
84 cdef DeviceProperties self = DeviceProperties.__new__(cls) 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoNDODPDQDRDSD/f:f;f=f?f@fTD*m+m,m-mYkDoEoZk0k1k2k3k.m/m:m;m=m?m@m[mFoUDVDWDXDYDZD]m^mte=dKd[f$d%d]fyd^f_f`f{f|fue?dLd}f'd(d~fzdagbgcgdgegfggghgigjgkglgmgngogpgqgve@dMdrg)d*dsgAdtgugvgwgxgwe[dNdyg+d,dzgBdAgBgCgDgEgxe]dOdFg-d.dGgCdHgIgJgKgLgye^dPdMg/d:dNgDdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!gGo0D_m`m{m|m1D}mHo~mIoanbncndnenfnqognhninjnknroAmBmSlTlCmDmjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorlln8k9k!k#k$k%kmn#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCnhF:kvjPj;kQjRjSjTjUjVjwjck=kWj6C7C8C9C!C#C~daezeAeBeCeDeEebeUlce_d;dde`dFeee{dfe|dGeHeIegeheiejekelemeTH:EUHVHkG* f K + g L , h M - i N . j O nb/ k P ob: l Q pbgh; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbDbEbibH $ jbI % kbJ ' JeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbVbHbIbJbKbLbMbNbObPb9eGmOiDiPiQiRiEiFiGiqiXjOoSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8ihhihjhlb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$ekh/C9Glh9imhnhohphqhrhCIWHsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0jFhGh!GMC1jDIti9fGn-CCj2j.CHhyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoRo$j;j}dFjyi%i%j'jXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAircsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTb^cJhQdKhLh_cRdMhNh`c{cOhSdPhQh|cTdRhSh}c$fGd%f'f~cHd(f)fada d e ( ) bdcdThUdUhVhddVdWhXhedfdgdhd*fId+f,fidJd-f.fjdYhWdZh0hkdXd1h2hld3hYd4h5hmdZd6h7hnd8h0d9h!hod1d#h$hpd%h2d'h(hqd3d)h*hrd+h4d,h-hsd5d.h/htdud:h6d;h=hvd7d?h@hwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l;i~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLf
85 self._handle = handle 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoNDODPDQDRDSD/f:f;f=f?f@fTD*m+m,m-mYkDoEoZk0k1k2k3k.m/m:m;m=m?m@m[mFoUDVDWDXDYDZD]m^mte=dKd[f$d%d]fyd^f_f`f{f|fue?dLd}f'd(d~fzdagbgcgdgegfggghgigjgkglgmgngogpgqgve@dMdrg)d*dsgAdtgugvgwgxgwe[dNdyg+d,dzgBdAgBgCgDgEgxe]dOdFg-d.dGgCdHgIgJgKgLgye^dPdMg/d:dNgDdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!gGo0D_m`m{m|m1D}mHo~mIoanbncndnenfnqognhninjnknroAmBmSlTlCmDmjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorlln8k9k!k#k$k%kmn#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCnhF:kvjPj;kQjRjSjTjUjVjwjck=kWj6C7C8C9C!C#C~daezeAeBeCeDeEebeUlce_d;dde`dFeee{dfe|dGeHeIegeheiejekelemeTH:EUHVHkG* f K + g L , h M - i N . j O nb/ k P ob: l Q pbgh; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbDbEbibH $ jbI % kbJ ' JeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbVbHbIbJbKbLbMbNbObPb9eGmOiDiPiQiRiEiFiGiqiXjOoSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8ihhihjhlb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$ekh/C9Glh9imhnhohphqhrhCIWHsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0jFhGh!GMC1jDIti9fGn-CCj2j.CHhyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoRo$j;j}dFjyi%i%j'jXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAircsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTb^cJhQdKhLh_cRdMhNh`c{cOhSdPhQh|cTdRhSh}c$fGd%f'f~cHd(f)fada d e ( ) bdcdThUdUhVhddVdWhXhedfdgdhd*fId+f,fidJd-f.fjdYhWdZh0hkdXd1h2hld3hYd4h5hmdZd6h7hnd8h0d9h!hod1d#h$hpd%h2d'h(hqd3d)h*hrd+h4d,h-hsd5d.h/htdud:h6d;h=hvd7d?h@hwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l;i~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLf
86 self._cache = {} 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoNDODPDQDRDSD/f:f;f=f?f@fTD*m+m,m-mYkDoEoZk0k1k2k3k.m/m:m;m=m?m@m[mFoUDVDWDXDYDZD]m^mte=dKd[f$d%d]fyd^f_f`f{f|fue?dLd}f'd(d~fzdagbgcgdgegfggghgigjgkglgmgngogpgqgve@dMdrg)d*dsgAdtgugvgwgxgwe[dNdyg+d,dzgBdAgBgCgDgEgxe]dOdFg-d.dGgCdHgIgJgKgLgye^dPdMg/d:dNgDdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!gGo0D_m`m{m|m1D}mHo~mIoanbncndnenfnqognhninjnknroAmBmSlTlCmDmjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorlln8k9k!k#k$k%kmn#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCnhF:kvjPj;kQjRjSjTjUjVjwjck=kWj6C7C8C9C!C#C~daezeAeBeCeDeEebeUlce_d;dde`dFeee{dfe|dGeHeIegeheiejekelemeTH:EUHVHkG* f K + g L , h M - i N . j O nb/ k P ob: l Q pbgh; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbDbEbibH $ jbI % kbJ ' JeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbVbHbIbJbKbLbMbNbObPb9eGmOiDiPiQiRiEiFiGiqiXjOoSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8ihhihjhlb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$ekh/C9Glh9imhnhohphqhrhCIWHsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0jFhGh!GMC1jDIti9fGn-CCj2j.CHhyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoRo$j;j}dFjyi%i%j'jXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAircsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTb^cJhQdKhLh_cRdMhNh`c{cOhSdPhQh|cTdRhSh}c$fGd%f'f~cHd(f)fada d e ( ) bdcdThUdUhVhddVdWhXhedfdgdhd*fId+f,fidJd-f.fjdYhWdZh0hkdXd1h2hld3hYd4h5hmdZd6h7hnd8h0d9h!hod1d#h$hpd%h2d'h(hqd3d)h*hrd+h4d,h-hsd5d.h/htdud:h6d;h=hvd7d?h@hwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l;i~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLf
87 return self 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoNDODPDQDRDSD/f:f;f=f?f@fTD*m+m,m-mYkDoEoZk0k1k2k3k.m/m:m;m=m?m@m[mFoUDVDWDXDYDZD]m^mte=dKd[f$d%d]fyd^f_f`f{f|fue?dLd}f'd(d~fzdagbgcgdgegfggghgigjgkglgmgngogpgqgve@dMdrg)d*dsgAdtgugvgwgxgwe[dNdyg+d,dzgBdAgBgCgDgEgxe]dOdFg-d.dGgCdHgIgJgKgLgye^dPdMg/d:dNgDdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!gGo0D_m`m{m|m1D}mHo~mIoanbncndnenfnqognhninjnknroAmBmSlTlCmDmjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorlln8k9k!k#k$k%kmn#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCnhF:kvjPj;kQjRjSjTjUjVjwjck=kWj6C7C8C9C!C#C~daezeAeBeCeDeEebeUlce_d;dde`dFeee{dfe|dGeHeIegeheiejekelemeTH:EUHVHkG* f K + g L , h M - i N . j O nb/ k P ob: l Q pbgh; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbDbEbibH $ jbI % kbJ ' JeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbVbHbIbJbKbLbMbNbObPb9eGmOiDiPiQiRiEiFiGiqiXjOoSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8ihhihjhlb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$ekh/C9Glh9imhnhohphqhrhCIWHsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0jFhGh!GMC1jDIti9fGn-CCj2j.CHhyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoRo$j;j}dFjyi%i%j'jXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAircsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTb^cJhQdKhLh_cRdMhNh`c{cOhSdPhQh|cTdRhSh}c$fGd%f'f~cHd(f)fada d e ( ) bdcdThUdUhVhddVdWhXhedfdgdhd*fId+f,fidJd-f.fjdYhWdZh0hkdXd1h2hld3hYd4h5hmdZd6h7hnd8h0d9h!hod1d#h$hpd%h2d'h(hqd3d)h*hrd+h4d,h-hsd5d.h/htdud:h6d;h=hvd7d?h@hwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l;i~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLf
89 cdef inline int _get_attribute(self, cydriver.CUdevice_attribute attr, default=0) except? -2:
90 """Retrieve the attribute value directly from the driver."""
91 cdef int val
92 cdef cydriver.CUresult err
93 with nogil: 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoNDODPDQDRDSD/f:f;f=f?f@fTD*m+m,m-mYkDoEoZk0k1k2k3k.m/m:m;m=m?m@m[mFoUDVDWDXDYDZD]m^mte=dKd[f$d%d]fyd^f_f`f{f|fue?dLd}f'd(d~fzdagbgcgdgegfggghgigjgkglgmgngogpgqgve@dMdrg)d*dsgAdtgugvgwgxgwe[dNdyg+d,dzgBdAgBgCgDgEgxe]dOdFg-d.dGgCdHgIgJgKgLgye^dPdMg/d:dNgDdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!gGo0D_m`m{m|m1D}mHo~mIoanbncndnenfnqognhninjnknroAmBmSlTlCmDmjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorlln8k9k!k#k$k%kmn#g$g%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhchdhehfhBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCnhF:kvjPj;kQjRjSjTjUjVjwjck=kWj6C7C8C9C!C#C~daezeAeBeCeDeEebeUlce_d;dde`dFeee{dfe|dGeHeIegeheiejekelemeTH:EUHVHkG* f K + g L , 9Eh M - !Ei N . j O nb/ k P ob: l Q pbgh[h; Hnm hGR qbrbsbtbubvbwbxbybzbAb= Son S ? Too T @ p U [ ] ^ _ ` { | } ~ abbbcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 db2DC 7 eb3DD 8 fb4DE 9 gb#EF ! hbUoG # BbCbpGDbqGEbiboFH $ jb;EI % kbpFJ ' JeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbUGVbVGHbIbJbWGKbXGLbMbNbXHObYHPb9eBo5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8ihhihjhlb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$ekh/C9Glh9imhnhohphqhrhCIWHsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0jFhGh!GMC1jDIti9fGn-CCj2j.CHhyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoRo$j;j}dFjyi%i%j'jXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAiBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COcPcQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTb^cJhQdKhLh_cRdMhNh`c{cOhSdPhQh|cTdRhSh}c$fGd%f'f~cHd(f)fada d e ( ) bdcdThUdUhVhddVdWhXhedfdgdhd*fId+f,fidJd-f.fjdYhWdZh0hkdXd1h2hld3hYd4h5hmdZd6h7hnd8h0d9h!hod1d#h$hpd%h2d'h(hqd3d)h*hrd+h4d,h-hsd5d.h/htdud:h6d;h=hvd7d?h@hwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l;i~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLf
94 err = cydriver.cuDeviceGetAttribute(&val, attr, self._handle) 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoNDODPDQDRDSD/f:f;f=f?f@fTD*m+m,m-mYkDoEoZk0k1k2k3k.m/m:m;m=m?m@m[mFoUDVDWDXDYDZD]m^mte=dKd[f$d%d]fyd^f_f`f{f|fue?dLd}f'd(d~fzdagbgcgdgegfggghgigjgkglgmgngogpgqgve@dMdrg)d*dsgAdtgugvgwgxgwe[dNdyg+d,dzgBdAgBgCgDgEgxe]dOdFg-d.dGgCdHgIgJgKgLgye^dPdMg/d:dNgDdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!gGo0D_m`m{m|m1D}mHo~mIoanbncndnenfnqognhninjnknroAmBmSlTlCmDmjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorlln8k9k!k#k$k%kmn#g$g%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhchdhehfhBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCnhF:kvjPj;kQjRjSjTjUjVjwjck=kWj6C7C8C9C!C#C~daezeAeBeCeDeEebeUlce_d;dde`dFeee{dfe|dGeHeIegeheiejekelemeTH:EUHVHkG* f K + g L , 9Eh M - !Ei N . j O nb/ k P ob: l Q pbgh[h; Hnm hGR qbrbsbtbubvbwbxbybzbAb= Son S ? Too T @ p U [ ] ^ _ ` { | } ~ abbbcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 db2DC 7 eb3DD 8 fb4DE 9 gb#EF ! hbUoG # BbCbpGDbqGEbiboFH $ jb;EI % kbpFJ ' JeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbUGVbVGHbIbJbWGKbXGLbMbNbXHObYHPb9eBo5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8ihhihjhlb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$ekh/C9Glh9imhnhohphqhrhCIWHsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0jFhGh!GMC1jDIti9fGn-CCj2j.CHhyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoRo$j;j}dFjyi%i%j'jXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAiBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COcPcQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTb^cJhQdKhLh_cRdMhNh`c{cOhSdPhQh|cTdRhSh}c$fGd%f'f~cHd(f)fada d e ( ) bdcdThUdUhVhddVdWhXhedfdgdhd*fId+f,fidJd-f.fjdYhWdZh0hkdXd1h2hld3hYd4h5hmdZd6h7hnd8h0d9h!hod1d#h$hpd%h2d'h(hqd3d)h*hrd+h4d,h-hsd5d.h/htdud:h6d;h=hvd7d?h@hwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l;i~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLf
95 if err == cydriver.CUresult.CUDA_ERROR_INVALID_VALUE and default is not None: 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoNDODPDQDRDSD/f:f;f=f?f@fTD*m+m,m-mYkDoEoZk0k1k2k3k.m/m:m;m=m?m@m[mFoUDVDWDXDYDZD]m^mte=dKd[f$d%d]fyd^f_f`f{f|fue?dLd}f'd(d~fzdagbgcgdgegfggghgigjgkglgmgngogpgqgve@dMdrg)d*dsgAdtgugvgwgxgwe[dNdyg+d,dzgBdAgBgCgDgEgxe]dOdFg-d.dGgCdHgIgJgKgLgye^dPdMg/d:dNgDdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!gGo0D_m`m{m|m1D}mHo~mIoanbncndnenfnqognhninjnknroAmBmSlTlCmDmjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorlln8k9k!k#k$k%kmn#g$g%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhchdhehfhBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCnhF:kvjPj;kQjRjSjTjUjVjwjck=kWj6C7C8C9C!C#C~daezeAeBeCeDeEebeUlce_d;dde`dFeee{dfe|dGeHeIegeheiejekelemeTH:EUHVHkG* f K + g L , 9Eh M - !Ei N . j O nb/ k P ob: l Q pbgh[h; Hnm hGR qbrbsbtbubvbwbxbybzbAb= Son S ? Too T @ p U [ ] ^ _ ` { | } ~ abbbcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 db2DC 7 eb3DD 8 fb4DE 9 gb#EF ! hbUoG # BbCbpGDbqGEbiboFH $ jb;EI % kbpFJ ' JeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbUGVbVGHbIbJbWGKbXGLbMbNbXHObYHPb9eBo5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8ihhihjhlb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$ekh/C9Glh9imhnhohphqhrhCIWHsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0jFhGh!GMC1jDIti9fGn-CCj2j.CHhyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoRo$j;j}dFjyi%i%j'jXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAiBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COcPcQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTb^cJhQdKhLh_cRdMhNh`c{cOhSdPhQh|cTdRhSh}c$fGd%f'f~cHd(f)fada d e ( ) bdcdThUdUhVhddVdWhXhedfdgdhd*fId+f,fidJd-f.fjdYhWdZh0hkdXd1h2hld3hYd4h5hmdZd6h7hnd8h0d9h!hod1d#h$hpd%h2d'h(hqd3d)h*hrd+h4d,h-hsd5d.h/htdud:h6d;h=hvd7d?h@hwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l;i~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLf
96 return <int>default
97 HANDLE_RETURN(err) 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoNDODPDQDRDSD/f:f;f=f?f@fTD*m+m,m-mYkDoEoZk0k1k2k3k.m/m:m;m=m?m@m[mFoUDVDWDXDYDZD]m^mte=dKd[f$d%d]fyd^f_f`f{f|fue?dLd}f'd(d~fzdagbgcgdgegfggghgigjgkglgmgngogpgqgve@dMdrg)d*dsgAdtgugvgwgxgwe[dNdyg+d,dzgBdAgBgCgDgEgxe]dOdFg-d.dGgCdHgIgJgKgLgye^dPdMg/d:dNgDdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!gGo0D_m`m{m|m1D}mHo~mIoanbncndnenfnqognhninjnknroAmBmSlTlCmDmjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorlln8k9k!k#k$k%kmn#g$g%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhchdhehfhBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCnhF:kvjPj;kQjRjSjTjUjVjwjck=kWj6C7C8C9C!C#C~daezeAeBeCeDeEebeUlce_d;dde`dFeee{dfe|dGeHeIegeheiejekelemeTH:EUHVHkG* f K + g L , 9Eh M - !Ei N . j O nb/ k P ob: l Q pbgh[h; Hnm hGR qbrbsbtbubvbwbxbybzbAb= Son S ? Too T @ p U [ ] ^ _ ` { | } ~ abbbcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 db2DC 7 eb3DD 8 fb4DE 9 gb#EF ! hbUoG # BbCbpGDbqGEbiboFH $ jb;EI % kbpFJ ' JeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbUGVbVGHbIbJbWGKbXGLbMbNbXHObYHPb9eBo5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8ihhihjhlb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$ekh/C9Glh9imhnhohphqhrhCIWHsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0jFhGh!GMC1jDIti9fGn-CCj2j.CHhyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoRo$j;j}dFjyi%i%j'jXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAiBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COcPcQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTb^cJhQdKhLh_cRdMhNh`c{cOhSdPhQh|cTdRhSh}c$fGd%f'f~cHd(f)fada d e ( ) bdcdThUdUhVhddVdWhXhedfdgdhd*fId+f,fidJd-f.fjdYhWdZh0hkdXd1h2hld3hYd4h5hmdZd6h7hnd8h0d9h!hod1d#h$hpd%h2d'h(hqd3d)h*hrd+h4d,h-hsd5d.h/htdud:h6d;h=hvd7d?h@hwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l;i~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLf
98 return val 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoNDODPDQDRDSD/f:f;f=f?f@fTD*m+m,m-mYkDoEoZk0k1k2k3k.m/m:m;m=m?m@m[mFoUDVDWDXDYDZD]m^mte=dKd[f$d%d]fyd^f_f`f{f|fue?dLd}f'd(d~fzdagbgcgdgegfggghgigjgkglgmgngogpgqgve@dMdrg)d*dsgAdtgugvgwgxgwe[dNdyg+d,dzgBdAgBgCgDgEgxe]dOdFg-d.dGgCdHgIgJgKgLgye^dPdMg/d:dNgDdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!gGo0D_m`m{m|m1D}mHo~mIoanbncndnenfnqognhninjnknroAmBmSlTlCmDmjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorlln8k9k!k#k$k%kmn#g$g%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhchdhehfhBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCnhF:kvjPj;kQjRjSjTjUjVjwjck=kWj6C7C8C9C!C#C~daezeAeBeCeDeEebeUlce_d;dde`dFeee{dfe|dGeHeIegeheiejekelemeTH:EUHVHkG* f K + g L , 9Eh M - !Ei N . j O nb/ k P ob: l Q pbgh[h; Hnm hGR qbrbsbtbubvbwbxbybzbAb= Son S ? Too T @ p U [ ] ^ _ ` { | } ~ abbbcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 db2DC 7 eb3DD 8 fb4DE 9 gb#EF ! hbUoG # BbCbpGDbqGEbiboFH $ jb;EI % kbpFJ ' JeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbUGVbVGHbIbJbWGKbXGLbMbNbXHObYHPb9eBo5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8ihhihjhlb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$ekh/C9Glh9imhnhohphqhrhCIWHsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0jFhGh!GMC1jDIti9fGn-CCj2j.CHhyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoRo$j;j}dFjyi%i%j'jXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAiBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COcPcQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTb^cJhQdKhLh_cRdMhNh`c{cOhSdPhQh|cTdRhSh}c$fGd%f'f~cHd(f)fada d e ( ) bdcdThUdUhVhddVdWhXhedfdgdhd*fId+f,fidJd-f.fjdYhWdZh0hkdXd1h2hld3hYd4h5hmdZd6h7hnd8h0d9h!hod1d#h$hpd%h2d'h(hqd3d)h*hrd+h4d,h-hsd5d.h/htdud:h6d;h=hvd7d?h@hwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l;i~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLf
100 cdef inline int _get_cached_attribute(self, attr, default=0) except? -2:
101 """Retrieve the attribute value, using cache if applicable."""
102 cached = self._cache.get(attr) 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoNDODPDQDRDSD/f:f;f=f?f@fTD*m+m,m-mYkDoEoZk0k1k2k3k.m/m:m;m=m?m@m[mFoUDVDWDXDYDZD]m^mte=dKd[f$d%d]fyd^f_f`f{f|fue?dLd}f'd(d~fzdagbgcgdgegfggghgigjgkglgmgngogpgqgve@dMdrg)d*dsgAdtgugvgwgxgwe[dNdyg+d,dzgBdAgBgCgDgEgxe]dOdFg-d.dGgCdHgIgJgKgLgye^dPdMg/d:dNgDdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!gGo0D_m`m{m|m1D}mHo~mIoanbncndnenfnqognhninjnknroAmBmSlTlCmDmjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorlln8k9k!k#k$k%kmn#g$g%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhchdhehfhBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCnhF:kvjPj;kQjRjSjTjUjVjwjck=kWj6C7C8C9C!C#C~daezeAeBeCeDeEebeUlce_d(E;dde`dFeee{dfe|dGeHeIegeheiejekelemeTH:EUHVHkG* f K + g L , 9Eh M - !Ei N . j EKO nb/ k P ob: l Q pbgh[h; Hnm hGR qbrbsbtbubvbwbxbybzbAb= Son S ? Too T @ p U [ ] ^ _ ` { | } ~ abbbcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 db2DC 7 eb3DD 8 fb4DE 9 gb#EF ! hbUoG # BbCbpGDbqGEbiboFH $ jb;EI % kbpFJ ' VKJeKKKeLKLeMKMeWKNeXKOeYKPeNKQeZKReOKSe0KTePKUeQKVe1KWeRKXe2KYe`CZeSK0e#K1e2e3e4e$K5e%K6e'K7eYG8eFbGbUGVbVGHbIbJbWGKbXGLbMbNbXHObYHPb9eBo5D6D7DOicD:CDi8D9DPidD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;D=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwExE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMizDAD5iFENi6i7isiGEHEIE_CJE8ihhihjhlb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$ekh/C9Glh9imhnhohphqhrhCIWHsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0jFhGh!GMC1jDIti9fGn-CCj2j.CHhyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoRo$j;j}dFjyi%i%j'jXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAiBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COcPcQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTb^cJhQdKhLh_cRdMhNh`c{cOhSdPhQh|cTdRhSh}c$fGd%f'f~cHd(f)fada d e ( ) bdcdThUdUhVhddVdWhXhedfdgdhd*fId+f,fidJd-f.fjdYhWdZh0hkdXd1h2hld3hYd4h5hmdZd6h7hnd8h0d9h!hod1d#h$hpd%h2d'h(hqd3d)h*hrd+h4d,h-hsd5d.h/htdud:h6d;h=hvd7d?h@hwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l;i~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLf
103 if cached is not None: 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoNDODPDQDRDSD/f:f;f=f?f@fTD*m+m,m-mYkDoEoZk0k1k2k3k.m/m:m;m=m?m@m[mFoUDVDWDXDYDZD]m^mte=dKd[f$d%d]fyd^f_f`f{f|fue?dLd}f'd(d~fzdagbgcgdgegfggghgigjgkglgmgngogpgqgve@dMdrg)d*dsgAdtgugvgwgxgwe[dNdyg+d,dzgBdAgBgCgDgEgxe]dOdFg-d.dGgCdHgIgJgKgLgye^dPdMg/d:dNgDdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!gGo0D_m`m{m|m1D}mHo~mIoanbncndnenfnqognhninjnknroAmBmSlTlCmDmjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorlln8k9k!k#k$k%kmn#g$g%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhchdhehfhBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCnhF:kvjPj;kQjRjSjTjUjVjwjck=kWj6C7C8C9C!C#C~daezeAeBeCeDeEebeUlce_d(E;dde`dFeee{dfe|dGeHeIegeheiejekelemeTH:EUHVHkG* f K + g L , 9Eh M - !Ei N . j EKO nb/ k P ob: l Q pbgh[h; Hnm hGR qbrbsbtbubvbwbxbybzbAb= Son S ? Too T @ p U [ ] ^ _ ` { | } ~ abbbcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 db2DC 7 eb3DD 8 fb4DE 9 gb#EF ! hbUoG # BbCbpGDbqGEbiboFH $ jb;EI % kbpFJ ' VKJeKKKeLKLeMKMeWKNeXKOeYKPeNKQeZKReOKSe0KTePKUeQKVe1KWeRKXe2KYe`CZeSK0e#K1e2e3e4e$K5e%K6e'K7eYG8eFbGbUGVbVGHbIbJbWGKbXGLbMbNbXHObYHPb9eBo5D6D7DOicD:CDi8D9DPidD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;D=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwExE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMizDAD5iFENi6i7isiGEHEIE_CJE8ihhihjhlb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$ekh/C9Glh9imhnhohphqhrhCIWHsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0jFhGh!GMC1jDIti9fGn-CCj2j.CHhyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoRo$j;j}dFjyi%i%j'jXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAiBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COcPcQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTb^cJhQdKhLh_cRdMhNh`c{cOhSdPhQh|cTdRhSh}c$fGd%f'f~cHd(f)fada d e ( ) bdcdThUdUhVhddVdWhXhedfdgdhd*fId+f,fidJd-f.fjdYhWdZh0hkdXd1h2hld3hYd4h5hmdZd6h7hnd8h0d9h!hod1d#h$hpd%h2d'h(hqd3d)h*hrd+h4d,h-hsd5d.h/htdud:h6d;h=hvd7d?h@hwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l;i~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLf
104 return cached 2=d?d@d[d]d^d4k7kWj~daebece_d(E;dde`dee{dfe|dgeheiejekelemekGK L M N EKO P Q R S T U V W X Y Z 0 1 2 3 4 5 6 2D7 3D8 4D9 ! # pGqG$ ;E% ' VKKKLKMKWKXKYKNKZKOK0KPKQK1KRK2K`CSK#K$K%K'KYGUGVGWGXGXHYHc dk?kek!iYjZj0jMC1jtiGnCjyozoAo3j(eDj4j5jEjuiviwi)e*exi6j7j8j9j!j#j$j;j}dFjyi%i%j'jWb$E%E'E$f%f'f(f)fa *f+f,f-f.f
105 cdef int value = self._get_attribute(attr, default) 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoNDODPDQDRDSD/f:f;f=f?f@fTD*m+m,m-mYkDoEoZk0k1k2k3k.m/m:m;m=m?m@m[mFoUDVDWDXDYDZD]m^mte=dKd[f$d%d]fyd^f_f`f{f|fue?dLd}f'd(d~fzdagbgcgdgegfggghgigjgkglgmgngogpgqgve@dMdrg)d*dsgAdtgugvgwgxgwe[dNdyg+d,dzgBdAgBgCgDgEgxe]dOdFg-d.dGgCdHgIgJgKgLgye^dPdMg/d:dNgDdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!gGo0D_m`m{m|m1D}mHo~mIoanbncndnenfnqognhninjnknroAmBmSlTlCmDmjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorlln8k9k!k#k$k%kmn#g$g%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhchdhehfhBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCnhF:kvjPj;kQjRjSjTjUjVjwjck=kWj6C7C8C9C!C#C~daezeAeBeCeDeEebeUlce_d;dde`dFeee{dfe|dGeHeIegeheiejekelemeTH:EUHVHkG* f K + g L , 9Eh M - !Ei N . j O nb/ k P ob: l Q pbgh[h; Hnm hGR qbrbsbtbubvbwbxbybzbAb= Son S ? Too T @ p U [ ] ^ _ ` { | } ~ abbbcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 db2DC 7 eb3DD 8 fb4DE 9 gb#EF ! hbUoG # BbCbpGDbqGEbiboFH $ jb;EI % kbpFJ ' JeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbUGVbVGHbIbJbWGKbXGLbMbNbXHObYHPb9eBo5D6D7DOicD:CDi8D9DPidD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;D=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwExE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMizDAD5iFENi6i7isiGEHEIE_CJE8ihhihjhlb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$ekh/C9Glh9imhnhohphqhrhCIWHsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0jFhGh!GMC1jDIti9fGn-CCj2j.CHhyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoRo$j;j}dFjyi%i%j'jXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAiBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COcPcQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTb^cJhQdKhLh_cRdMhNh`c{cOhSdPhQh|cTdRhSh}c$fGd%f'f~cHd(f)fada d e ( ) bdcdThUdUhVhddVdWhXhedfdgdhd*fId+f,fidJd-f.fjdYhWdZh0hkdXd1h2hld3hYd4h5hmdZd6h7hnd8h0d9h!hod1d#h$hpd%h2d'h(hqd3d)h*hrd+h4d,h-hsd5d.h/htdud:h6d;h=hvd7d?h@hwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l;i~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLf
106 self._cache[attr] = value # setdefault not needed for ints 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoNDODPDQDRDSD/f:f;f=f?f@fTD*m+m,m-mYkDoEoZk0k1k2k3k.m/m:m;m=m?m@m[mFoUDVDWDXDYDZD]m^mte=dKd[f$d%d]fyd^f_f`f{f|fue?dLd}f'd(d~fzdagbgcgdgegfggghgigjgkglgmgngogpgqgve@dMdrg)d*dsgAdtgugvgwgxgwe[dNdyg+d,dzgBdAgBgCgDgEgxe]dOdFg-d.dGgCdHgIgJgKgLgye^dPdMg/d:dNgDdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!gGo0D_m`m{m|m1D}mHo~mIoanbncndnenfnqognhninjnknroAmBmSlTlCmDmjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorlln8k9k!k#k$k%kmn#g$g%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhchdhehfhBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCnhF:kvjPj;kQjRjSjTjUjVjwjck=kWj6C7C8C9C!C#C~daezeAeBeCeDeEebeUlce_d;dde`dFeee{dfe|dGeHeIegeheiejekelemeTH:EUHVHkG* f K + g L , 9Eh M - !Ei N . j O nb/ k P ob: l Q pbgh[h; Hnm hGR qbrbsbtbubvbwbxbybzbAb= Son S ? Too T @ p U [ ] ^ _ ` { | } ~ abbbcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 db2DC 7 eb3DD 8 fb4DE 9 gb#EF ! hbUoG # BbCbpGDbqGEbiboFH $ jb;EI % kbpFJ ' JeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbUGVbVGHbIbJbWGKbXGLbMbNbXHObYHPb9eBo5D6D7DOicD:CDi8D9DPidD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;D=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwExE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMizDAD5iFENi6i7isiGEHEIE_CJE8ihhihjhlb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$ekh/C9Glh9imhnhohphqhrhCIWHsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0jFhGh!GMC1jDIti9fGn-CCj2j.CHhyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoRo$j;j}dFjyi%i%j'jXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAiBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COcPcQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTb^cJhQdKhLh_cRdMhNh`c{cOhSdPhQh|cTdRhSh}c$fGd%f'f~cHd(f)fada d e ( ) bdcdThUdUhVhddVdWhXhedfdgdhd*fId+f,fidJd-f.fjdYhWdZh0hkdXd1h2hld3hYd4h5hmdZd6h7hnd8h0d9h!hod1d#h$hpd%h2d'h(hqd3d)h*hrd+h4d,h-hsd5d.h/htdud:h6d;h=hvd7d?h@hwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l;i~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLf
107 return value 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoNDODPDQDRDSD/f:f;f=f?f@fTD*m+m,m-mYkDoEoZk0k1k2k3k.m/m:m;m=m?m@m[mFoUDVDWDXDYDZD]m^mte=dKd[f$d%d]fyd^f_f`f{f|fue?dLd}f'd(d~fzdagbgcgdgegfggghgigjgkglgmgngogpgqgve@dMdrg)d*dsgAdtgugvgwgxgwe[dNdyg+d,dzgBdAgBgCgDgEgxe]dOdFg-d.dGgCdHgIgJgKgLgye^dPdMg/d:dNgDdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!gGo0D_m`m{m|m1D}mHo~mIoanbncndnenfnqognhninjnknroAmBmSlTlCmDmjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorlln8k9k!k#k$k%kmn#g$g%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhchdhehfhBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCnhF:kvjPj;kQjRjSjTjUjVjwjck=kWj6C7C8C9C!C#C~daezeAeBeCeDeEebeUlce_d;dde`dFeee{dfe|dGeHeIegeheiejekelemeTH:EUHVHkG* f K + g L , 9Eh M - !Ei N . j O nb/ k P ob: l Q pbgh[h; Hnm hGR qbrbsbtbubvbwbxbybzbAb= Son S ? Too T @ p U [ ] ^ _ ` { | } ~ abbbcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 db2DC 7 eb3DD 8 fb4DE 9 gb#EF ! hbUoG # BbCbpGDbqGEbiboFH $ jb;EI % kbpFJ ' JeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbUGVbVGHbIbJbWGKbXGLbMbNbXHObYHPb9eBo5D6D7DOicD:CDi8D9DPidD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;D=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwExE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMizDAD5iFENi6i7isiGEHEIE_CJE8ihhihjhlb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$ekh/C9Glh9imhnhohphqhrhCIWHsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0jFhGh!GMC1jDIti9fGn-CCj2j.CHhyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoRo$j;j}dFjyi%i%j'jXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAiBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COcPcQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTb^cJhQdKhLh_cRdMhNh`c{cOhSdPhQh|cTdRhSh}c$fGd%f'f~cHd(f)fada d e ( ) bdcdThUdUhVhddVdWhXhedfdgdhd*fId+f,fidJd-f.fjdYhWdZh0hkdXd1h2hld3hYd4h5hmdZd6h7hnd8h0d9h!hod1d#h$hpd%h2d'h(hqd3d)h*hrd+h4d,h-hsd5d.h/htdud:h6d;h=hvd7d?h@hwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l;i~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLf
109 @property
110 def max_threads_per_block(self) -> int:
111 """int: Maximum number of threads per block."""
112 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK) 2bEBDCDDDEDFDGDNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C$E=E?E@E[E]E^E%E_E`E{E|E}E~E'EaFbFcFdFeFfF
114 @property
115 def max_block_dim_x(self) -> int:
116 """int: Maximum block dimension X."""
117 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_X) 2Si
119 @property
120 def max_block_dim_y(self) -> int:
121 """int: Maximum block dimension Y."""
122 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Y) 2[D
124 @property
125 def max_block_dim_z(self) -> int:
126 """int: Maximum block dimension Z."""
127 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Z) 2]D
129 @property
130 def max_grid_dim_x(self) -> int:
131 """int: Maximum grid dimension X."""
132 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X) 2_Dc
134 @property
135 def max_grid_dim_y(self) -> int:
136 """int: Maximum grid dimension Y."""
137 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Y) 2`D
139 @property
140 def max_grid_dim_z(self) -> int:
141 """int: Maximum grid dimension Z."""
142 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Z) 2{D
144 @property
145 def max_shared_memory_per_block(self) -> int:
146 """int: Maximum shared memory available per block in bytes."""
147 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK) 2aEBDCDDDEDFDGDNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C$E=E?E@E[E]E^E%E_E`E{E|E}E~E'EaFbFcFdFeFfF
149 @property
150 def total_constant_memory(self) -> int:
151 """int: Memory available on device for constant variables in a CUDA C kernel in bytes."""
152 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TOTAL_CONSTANT_MEMORY) 2GE
154 @property
155 def warp_size(self) -> int:
156 """int: Warp size in threads."""
157 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_WARP_SIZE) 28i
159 @property
160 def max_pitch(self) -> int:
161 """int: Maximum pitch in bytes allowed by memory copies."""
162 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PITCH) 2}D
164 @property
165 def maximum_texture1d_width(self) -> int:
166 """int: Maximum 1D texture width."""
167 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_WIDTH) 2mE
169 @property
170 def maximum_texture1d_linear_width(self) -> int:
171 """int: Maximum width for a 1D texture bound to linear memory."""
172 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LINEAR_WIDTH) 2lE
174 @property
175 def maximum_texture1d_mipmapped_width(self) -> int:
176 """int: Maximum mipmapped 1D texture width."""
177 return self._get_cached_attribute( 2sD
178 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_MIPMAPPED_WIDTH 2sD
179 )
181 @property
182 def maximum_texture2d_width(self) -> int:
183 """int: Maximum 2D texture width."""
184 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_WIDTH) 2qE
186 @property
187 def maximum_texture2d_height(self) -> int:
188 """int: Maximum 2D texture height."""
189 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_HEIGHT) 2oE
191 @property
192 def maximum_texture2d_linear_width(self) -> int:
193 """int: Maximum width for a 2D texture bound to linear memory."""
194 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_WIDTH) 2Yi
196 @property
197 def maximum_texture2d_linear_height(self) -> int:
198 """int: Maximum height for a 2D texture bound to linear memory."""
199 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_HEIGHT) 2Wi
201 @property
202 def maximum_texture2d_linear_pitch(self) -> int:
203 """int: Maximum pitch in bytes for a 2D texture bound to linear memory."""
204 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_PITCH) 2Xi
206 @property
207 def maximum_texture2d_mipmapped_width(self) -> int:
208 """int: Maximum mipmapped 2D texture width."""
209 return self._get_cached_attribute( 2uD
210 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_WIDTH 2uD
211 )
213 @property
214 def maximum_texture2d_mipmapped_height(self) -> int:
215 """int: Maximum mipmapped 2D texture height."""
216 return self._get_cached_attribute( 2Ji
217 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_HEIGHT 2Ji
218 )
220 @property
221 def maximum_texture3d_width(self) -> int:
222 """int: Maximum 3D texture width."""
223 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH) 2sE
225 @property
226 def maximum_texture3d_height(self) -> int:
227 """int: Maximum 3D texture height."""
228 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT) 2Zi
230 @property
231 def maximum_texture3d_depth(self) -> int:
232 """int: Maximum 3D texture depth."""
233 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH) 2rE
235 @property
236 def maximum_texture3d_width_alternate(self) -> int:
237 """int: Alternate maximum 3D texture width, 0 if no alternate maximum 3D texture size is supported."""
238 return self._get_cached_attribute( 2Ki
239 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH_ALTERNATE 2Ki
240 )
242 @property
243 def maximum_texture3d_height_alternate(self) -> int:
244 """int: Alternate maximum 3D texture height, 0 if no alternate maximum 3D texture size is supported."""
245 return self._get_cached_attribute( 2wD
246 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT_ALTERNATE 2wD
247 )
249 @property
250 def maximum_texture3d_depth_alternate(self) -> int:
251 """int: Alternate maximum 3D texture depth, 0 if no alternate maximum 3D texture size is supported."""
252 return self._get_cached_attribute( 2vD
253 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH_ALTERNATE 2vD
254 )
256 @property
257 def maximum_texturecubemap_width(self) -> int:
258 """int: Maximum cubemap texture width or height."""
259 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_WIDTH) 2tE
261 @property
262 def maximum_texture1d_layered_width(self) -> int:
263 """int: Maximum 1D layered texture width."""
264 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_WIDTH) 2kE
266 @property
267 def maximum_texture1d_layered_layers(self) -> int:
268 """int: Maximum layers in a 1D layered texture."""
269 return self._get_cached_attribute( 2rD
270 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_LAYERS 2rD
271 )
273 @property
274 def maximum_texture2d_layered_width(self) -> int:
275 """int: Maximum 2D layered texture width."""
276 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_WIDTH) 2pE
278 @property
279 def maximum_texture2d_layered_height(self) -> int:
280 """int: Maximum 2D layered texture height."""
281 return self._get_cached_attribute( 2tD
282 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_HEIGHT 2tD
283 )
285 @property
286 def maximum_texture2d_layered_layers(self) -> int:
287 """int: Maximum layers in a 2D layered texture."""
288 return self._get_cached_attribute( 2Ii
289 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_LAYERS 2Ii
290 )
292 @property
293 def maximum_texturecubemap_layered_width(self) -> int:
294 """int: Maximum cubemap layered texture width or height."""
295 return self._get_cached_attribute( 2xD
296 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_WIDTH 2xD
297 )
299 @property
300 def maximum_texturecubemap_layered_layers(self) -> int:
301 """int: Maximum layers in a cubemap layered texture."""
302 return self._get_cached_attribute( 2Li
303 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_LAYERS 2Li
304 )
306 @property
307 def maximum_surface1d_width(self) -> int:
308 """int: Maximum 1D surface width."""
309 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_WIDTH) 2dE
311 @property
312 def maximum_surface2d_width(self) -> int:
313 """int: Maximum 2D surface width."""
314 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_WIDTH) 2Ui
316 @property
317 def maximum_surface2d_height(self) -> int:
318 """int: Maximum 2D surface height."""
319 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_HEIGHT) 2eE
321 @property
322 def maximum_surface3d_width(self) -> int:
323 """int: Maximum 3D surface width."""
324 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_WIDTH) 2iE
326 @property
327 def maximum_surface3d_height(self) -> int:
328 """int: Maximum 3D surface height."""
329 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_HEIGHT) 2hE
331 @property
332 def maximum_surface3d_depth(self) -> int:
333 """int: Maximum 3D surface depth."""
334 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_DEPTH) 2gE
336 @property
337 def maximum_surface1d_layered_width(self) -> int:
338 """int: Maximum 1D layered surface width."""
339 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_WIDTH) 2cE
341 @property
342 def maximum_surface1d_layered_layers(self) -> int:
343 """int: Maximum layers in a 1D layered surface."""
344 return self._get_cached_attribute( 2Hi
345 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_LAYERS 2Hi
346 )
348 @property
349 def maximum_surface2d_layered_width(self) -> int:
350 """int: Maximum 2D layered surface width."""
351 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_WIDTH) 2fE
353 @property
354 def maximum_surface2d_layered_height(self) -> int:
355 """int: Maximum 2D layered surface height."""
356 return self._get_cached_attribute( 2nD
357 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_HEIGHT 2nD
358 )
360 @property
361 def maximum_surface2d_layered_layers(self) -> int:
362 """int: Maximum layers in a 2D layered surface."""
363 return self._get_cached_attribute( 2oD
364 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_LAYERS 2oD
365 )
367 @property
368 def maximum_surfacecubemap_width(self) -> int:
369 """int: Maximum cubemap surface width."""
370 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_WIDTH) 2jE
372 @property
373 def maximum_surfacecubemap_layered_width(self) -> int:
374 """int: Maximum cubemap layered surface width."""
375 return self._get_cached_attribute( 2qD
376 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_WIDTH 2qD
377 )
379 @property
380 def maximum_surfacecubemap_layered_layers(self) -> int:
381 """int: Maximum layers in a cubemap layered surface."""
382 return self._get_cached_attribute( 2pD
383 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_LAYERS 2pD
384 )
386 @property
387 def max_registers_per_block(self) -> int:
388 """int: Maximum number of 32-bit registers available to a thread block."""
389 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK) 2~D
391 @property
392 def clock_rate(self) -> int:
393 """int: Typical clock frequency in kilohertz."""
394 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLOCK_RATE) 2[hHnhG:Flb+j8E
396 @property
397 def texture_alignment(self) -> int:
398 """int: Alignment requirement for textures."""
399 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT) 26i
401 @property
402 def texture_pitch_alignment(self) -> int:
403 """int: Pitch alignment requirement for textures."""
404 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_PITCH_ALIGNMENT) 27i
406 @property
407 def gpu_overlap(self) -> bool:
408 """bool: Device can possibly copy memory and execute a kernel concurrently. Deprecated. Use :attr:`~DeviceProperties.async_engine_count` instead."""
409 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_OVERLAP)) 2+D
411 @property
412 def multiprocessor_count(self) -> int:
413 """int: Number of multiprocessors on device."""
414 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT) 2BEc
416 @property
417 def kernel_exec_timeout(self) -> bool:
418 """bool: Specifies whether there is a run time limit on kernels."""
419 return bool(self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT)) 2Xj
421 @property
422 def integrated(self) -> bool:
423 """bool: Device is integrated with host memory."""
424 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_INTEGRATED)) 2:D
426 @property
427 def can_map_host_memory(self) -> bool:
428 """bool: Device can map host memory into CUDA address space."""
429 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_MAP_HOST_MEMORY)) 27D
431 @property
432 def compute_mode(self) -> int:
433 """int: Compute mode (See CUcomputemode for details)."""
434 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_MODE) 2;F
436 @property
437 def concurrent_kernels(self) -> bool:
438 """bool: Device can possibly execute multiple kernels concurrently."""
439 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_KERNELS)) 2!D
441 @property
442 def ecc_enabled(self) -> bool:
443 """bool: Device has ECC support enabled."""
444 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ECC_ENABLED)) 2Ri
446 @property
447 def pci_bus_id(self) -> int:
448 """int: PCI bus ID of the device."""
449 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_BUS_ID) 2CE
451 @property
452 def pci_device_id(self) -> int:
453 """int: PCI device ID of the device."""
454 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID) 2DE
456 @property
457 def pci_domain_id(self) -> int:
458 """int: PCI domain ID of the device."""
459 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DOMAIN_ID) 2EE
461 @property
462 def tcc_driver(self) -> bool:
463 """bool: Device is using TCC driver model."""
464 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TCC_DRIVER)) 2FE
466 @property
467 def memory_clock_rate(self) -> int:
468 """int: Peak memory clock frequency in kilohertz."""
469 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_CLOCK_RATE) 2=F
471 @property
472 def global_memory_bus_width(self) -> int:
473 """int: Global memory bus width in bits."""
474 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_MEMORY_BUS_WIDTH) 2(D
476 @property
477 def l2_cache_size(self) -> int:
478 """int: Size of L2 cache in bytes."""
479 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_L2_CACHE_SIZE) 2=D
481 @property
482 def max_threads_per_multiprocessor(self) -> int:
483 """int: Maximum resident threads per multiprocessor."""
484 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_MULTIPROCESSOR) 2TiBDCDDDEDFDGDNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C
486 @property
487 def unified_addressing(self) -> bool:
488 """bool: Device shares a unified address space with the host."""
489 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING)) 2UbHE
491 @property
492 def compute_capability_major(self) -> int:
493 """int: Major compute capability version number."""
494 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR) 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujYkDoEoZk0k1k2k3kFo]m^mKdydLdzdMdAdNdBdOdCdPdDdGo_m`m{m|m}mHoIoanbncndnenfngnhninjnkn-i.iEmFmBj5k6kln8k9k!k#k$k%kkklkmknkokpkqkrkdlelflBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCn:kvjPj;kQjRjSjTjUjVjwj[hHnhG9eBo9Dlb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b(e)e*eXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAircsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^cQd_cRd`c{cSd|cTd}cGd~cHdada bdcdUdddVdedfdgdhdIdidJdjdWdkdXdldYdmdZdnd0dod1dpd2dqd3drd4dsd5dtdud6dvd7dwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l8d9d!d#d
496 @property
497 def compute_capability_minor(self) -> int:
498 """int: Minor compute capability version number."""
499 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR) 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujYkDoEoZk0k1k2k3kFo]m^mKdydLdzdMdAdNdBdOdCdPdDdGo_m`m{m|m}mHoIoanbncndnenfngnhninjnkn-i.iEmFmBj5k6kln8k9k!k#k$k%kkklkmknkokpkqkrkdlelflBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCn:kvjPj;kQjRjSjTjUjVjwj[hHnhG9eBoPilb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b(e)e*eXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAircsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^cQd_cRd`c{cSd|cTd}cGd~cHdada bdcdUdddVdedfdgdhdIdidJdjdWdkdXdldYdmdZdnd0dod1dpd2dqd3drd4dsd5dtdud6dvd7dwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l8d9d!d#d
501 @property
502 def global_l1_cache_supported(self) -> bool:
503 """bool: Device supports caching globals in L1."""
504 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_L1_CACHE_SUPPORTED)) 2'D
506 @property
507 def local_l1_cache_supported(self) -> bool:
508 """bool: Device supports caching locals in L1."""
509 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_LOCAL_L1_CACHE_SUPPORTED)) 2?D
511 @property
512 def max_shared_memory_per_multiprocessor(self) -> int:
513 """int: Maximum shared memory available per multiprocessor in bytes."""
514 return self._get_cached_attribute( 2mDBDCDDDEDFDGDNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C
515 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR 2mDBDCDDDEDFDGDNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C
516 )
518 @property
519 def max_registers_per_multiprocessor(self) -> int:
520 """int: Maximum number of 32-bit registers available per multiprocessor."""
521 return self._get_cached_attribute( 2kDNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C
522 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_MULTIPROCESSOR 2kDNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C
523 )
525 @property
526 def managed_memory(self) -> bool:
527 """bool: Device can allocate managed memory on this system."""
528 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MANAGED_MEMORY)) 2~daezeAeBeCeDeEebeUlce_d;dde`dFeee{dfe|dGeHeIegeheiejekelemeOo
530 @property
531 def multi_gpu_board(self) -> bool:
532 """bool: Device is on a multi-GPU board."""
533 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD)) 2yE
535 @property
536 def multi_gpu_board_group_id(self) -> int:
537 """int: Unique id for a group of devices on the same multi-GPU board."""
538 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD_GROUP_ID) 2zE
540 @property
541 def host_native_atomic_supported(self) -> bool:
542 """bool: Link between the device and the host supports all native atomic operations."""
543 return bool( 2Fi
544 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NATIVE_ATOMIC_SUPPORTED) 2Fi
545 )
547 @property
548 def single_to_double_precision_perf_ratio(self) -> int:
549 """int: Ratio of single precision performance (in floating-point operations per second) to double precision performance."""
550 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SINGLE_TO_DOUBLE_PRECISION_PERF_RATIO) 2?F
552 @property
553 def pageable_memory_access(self) -> bool:
554 """bool: Device supports coherently accessing pageable memory without calling cudaHostRegister on it."""
555 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS)) 24i
557 @property
558 def concurrent_managed_access(self) -> bool:
559 """bool: Device can coherently access managed memory concurrently with the CPU."""
560 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS)) 2=d?d@d[d]d^dSl=k6C7C8C9C!C#C~daezeAeBeCeDeEebece_d(E;dde`dFeee{dfe|dGeHeIegeheiejekeleme#D8E!e#e$eCIWHsldk?k@kektlul$i:ivl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CHl~k
562 @property
563 def compute_preemption_supported(self) -> bool:
564 """bool: Device supports compute preemption."""
565 return bool( 2dD
566 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_PREEMPTION_SUPPORTED) 2dD
567 )
569 @property
570 def can_use_host_pointer_for_registered_mem(self) -> bool:
571 """bool: Device can access host registered memory at the same virtual address as the CPU."""
572 return bool( 2:C
573 self._get_cached_attribute( 2:C
574 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_HOST_POINTER_FOR_REGISTERED_MEM 2:C
575 )
576 )
578 # TODO: A few attrs are missing here (NVIDIA/cuda-python#675)
580 @property
581 def cooperative_launch(self) -> bool:
582 """bool: Device supports launching cooperative kernels via cuLaunchCooperativeKernel."""
583 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COOPERATIVE_LAUNCH)) 2$Dc
585 # TODO: A few attrs are missing here (NVIDIA/cuda-python#675)
587 @property
588 def max_shared_memory_per_block_optin(self) -> int:
589 """int: Maximum optin shared memory per block."""
590 return self._get_cached_attribute( 2lD
591 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK_OPTIN 2lD
592 )
594 @property
595 def pageable_memory_access_uses_host_page_tables(self) -> bool:
596 """bool: Device accesses pageable memory via the host's page tables."""
597 return bool( 2^C
598 self._get_cached_attribute( 2^C
599 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES 2^C
600 )
601 )
603 @property
604 def direct_managed_mem_access_from_host(self) -> bool:
605 """bool: The host can directly access managed memory on the device without migration."""
606 return bool( 2=C
607 self._get_cached_attribute( 2=C
608 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DIRECT_MANAGED_MEM_ACCESS_FROM_HOST 2=C
609 )
610 )
612 @property
613 def virtual_memory_management_supported(self) -> bool:
614 """bool: Device supports virtual memory management APIs like cuMemAddressReserve, cuMemCreate, cuMemMap and related APIs."""
615 return bool( 24k7kkGK L M N EKO P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # pGqG$ % ' VKJeKKKeLKLeMKMeWKNeXKOeYKPeNKQeZKReOKSe0KTePKUeQKVe1KWeRKXe2KYe`CZeSK0e#K1e2e3e4e$K5e%K6e'K7eYG8eUGVGWGXGXHYH_CyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#j$j;j}dFjyi%i%j'j
616 self._get_cached_attribute( 24k7kkGK L M N EKO P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # pGqG$ % ' VKJeKKKeLKLeMKMeWKNeXKOeYKPeNKQeZKReOKSe0KTePKUeQKVe1KWeRKXe2KYe`CZeSK0e#K1e2e3e4e$K5e%K6e'K7eYG8eUGVGWGXGXHYH_CyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#j$j;j}dFjyi%i%j'j
617 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 24k7kkGK L M N EKO P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # pGqG$ % ' VKJeKKKeLKLeMKMeWKNeXKOeYKPeNKQeZKReOKSe0KTePKUeQKVe1KWeRKXe2KYe`CZeSK0e#K1e2e3e4e$K5e%K6e'K7eYG8eUGVGWGXGXHYH_CyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#j$j;j}dFjyi%i%j'j
618 )
619 )
621 @property
622 def handle_type_posix_file_descriptor_supported(self) -> bool:
623 """bool: Device supports exporting memory to a posix file descriptor with cuMemExportToShareableHandle, if requested via cuMemCreate."""
624 return bool( 2* f K + g L , h M - i N . j O nb/ k P ob: l Q pb; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbpGDbqGEbibH $ jbI % kbJ ' JeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbUGVbVGHbIbJbWGKbXGLbMbNbXHObYHPb@CQbRbSbTbd e ( )
625 self._get_cached_attribute( 2* f K + g L , h M - i N . j O nb/ k P ob: l Q pb; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbpGDbqGEbibH $ jbI % kbJ ' JeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbUGVbVGHbIbJbWGKbXGLbMbNbXHObYHPb@CQbRbSbTbd e ( )
626 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR_SUPPORTED 2* f K + g L , h M - i N . j O nb/ k P ob: l Q pb; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbpGDbqGEbibH $ jbI % kbJ ' JeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbUGVbVGHbIbJbWGKbXGLbMbNbXHObYHPb@CQbRbSbTbd e ( )
627 )
628 )
630 @property
631 def handle_type_win32_handle_supported(self) -> bool:
632 """bool: Device supports exporting memory to a Win32 NT handle with cuMemExportToShareableHandle, if requested via cuMemCreate."""
633 return bool( 2gD
634 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_HANDLE_SUPPORTED) 2gD
635 )
637 @property
638 def handle_type_win32_kmt_handle_supported(self) -> bool:
639 """bool: Device supports exporting memory to a Win32 KMT handle with cuMemExportToShareableHandle, if requested via cuMemCreate."""
640 return bool( 2[C
641 self._get_cached_attribute( 2[C
642 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_KMT_HANDLE_SUPPORTED 2[C
643 )
644 )
646 @property
647 def max_blocks_per_multiprocessor(self) -> int:
648 """int: Maximum number of blocks per multiprocessor."""
649 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCKS_PER_MULTIPROCESSOR) 2^D
651 @property
652 def generic_compression_supported(self) -> bool:
653 """bool: Device supports compression of memory."""
654 return bool( 2Ei
655 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GENERIC_COMPRESSION_SUPPORTED) 2Ei
656 )
658 @property
659 def max_persisting_l2_cache_size(self) -> int:
660 """int: Maximum L2 persisting lines capacity setting in bytes."""
661 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PERSISTING_L2_CACHE_SIZE) 2|D
663 @property
664 def max_access_policy_window_size(self) -> int:
665 """int: Maximum value of CUaccessPolicyWindow.num_bytes."""
666 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_ACCESS_POLICY_WINDOW_SIZE) 2@D
668 @property
669 def gpu_direct_rdma_with_cuda_vmm_supported(self) -> bool:
670 """bool: Device supports specifying the GPUDirect RDMA flag with cuMemCreate."""
671 return bool( 2?C
672 self._get_cached_attribute( 2?C
673 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WITH_CUDA_VMM_SUPPORTED 2?C
674 )
675 )
677 @property
678 def reserved_shared_memory_per_block(self) -> int:
679 """int: Shared memory reserved by CUDA driver per block in bytes."""
680 return self._get_cached_attribute( 2Mi
681 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_RESERVED_SHARED_MEMORY_PER_BLOCK 2Mi
682 )
684 @property
685 def sparse_cuda_array_supported(self) -> bool:
686 """bool: Device supports sparse CUDA arrays and sparse CUDA mipmapped arrays."""
687 return bool( 2zD
688 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SPARSE_CUDA_ARRAY_SUPPORTED) 2zD
689 )
691 @property
692 def read_only_host_register_supported(self) -> bool:
693 """bool: True if device supports using the cuMemHostRegister flag CU_MEMHOSTREGISTER_READ_ONLY to register memory that must be mapped as read-only to the GPU, False if not."""
694 return bool( 2yD
695 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_READ_ONLY_HOST_REGISTER_SUPPORTED) 2yD
696 )
698 @property
699 def memory_pools_supported(self) -> bool:
700 """bool: Device supports using the cuMemAllocAsync and cuMemPool family of APIs."""
701 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED)) 2MoNoNDODPDQDRDSD/f:f;f=f?f@fTD*m+m,m-m.m/m:m;m=m?m@m[mUDVDWDXDYDZDte=d[f$d%d]fyd^f_f`f{f|fue?d}f'd(d~fzdagbgcgdgegfggghgigjgkglgmgngogpgqgve@drg)d*dsgAdtgugvgwgxgwe[dyg+d,dzgBdAgBgCgDgEgxe]dFg-d.dGgCdHgIgJgKgLgye^dMg/d:dNgDdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g0D1D~mqoroAmBmSlTlCmDmjl-i.isotouoklllmlvonlolplqlwoxorlmn#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhhFck=kTH:EUHVH* f K + g L , h M - i N . j O nb/ k P ob: l Q pbgh; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbDbEbibH $ jbI % kbJ ' FbGbVbHbIbJbKbLbMbNbObPbxEhhihjh!e#e$ekh/C9Glh9imhnhohphqhrhCIWHsldk?k@kektlul$i/i:i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CEhHlhk~kFhGh!GMCHhQbRbSbIhTbJhKhLhMhNhOhPhQhRhSh$f%f'f(f)fa d e ( ) ThUhVhWhXh*f+f,f-f.fYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h;i
703 @property
704 def gpu_direct_rdma_supported(self) -> bool:
705 """bool: Device supports GPUDirect RDMA APIs, like nvidia_p2p_get_pages (see https://docs.nvidia.com/cuda/gpudirect-rdma for more information)."""
706 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_SUPPORTED)) 2)DEjikFj
708 @property
709 def gpu_direct_rdma_flush_writes_options(self) -> int:
710 """int: The returned attribute shall be interpreted as a bitmask, where the individual bits are described by the CUflushGPUDirectRDMAWritesOptions enum."""
711 return self._get_cached_attribute( 2eD
712 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_FLUSH_WRITES_OPTIONS 2eD
713 )
715 @property
716 def gpu_direct_rdma_writes_ordering(self) -> int:
717 """int: GPUDirect RDMA writes to the device do not need to be flushed for consumers within the scope indicated by the returned attribute. See CUGPUDirectRDMAWritesOrdering for the numerical values returned here."""
718 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WRITES_ORDERING) 2*D
720 @property
721 def mempool_supported_handle_types(self) -> int:
722 """int: Handle types supported with mempool based IPC."""
723 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMPOOL_SUPPORTED_HANDLE_TYPES) 20i
725 @property
726 def deferred_mapping_cuda_array_supported(self) -> bool:
727 """bool: Device supports deferred mapping CUDA arrays and CUDA mipmapped arrays."""
728 return bool( 2;C
729 self._get_cached_attribute( 2;C
730 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DEFERRED_MAPPING_CUDA_ARRAY_SUPPORTED 2;C
731 )
732 )
734 @property
735 def numa_config(self) -> int:
736 """int: NUMA configuration of a device: value is of type CUdeviceNumaConfig enum."""
737 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_CONFIG) 22i
739 @property
740 def numa_id(self) -> int:
741 """int: NUMA node ID of the GPU memory."""
742 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_ID) 23i
744 @property
745 def multicast_supported(self) -> bool:
746 """bool: Device supports switch multicast and reduction operations."""
747 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTICAST_SUPPORTED)) 2AE
749 @property
750 def surface_alignment(self) -> int:
751 """int: Surface alignment requirement in bytes."""
752 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SURFACE_ALIGNMENT) 25i
754 @property
755 def async_engine_count(self) -> int:
756 """int: Number of asynchronous engines."""
757 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT) 25D
759 @property
760 def can_tex2d_gather(self) -> bool:
761 """bool: True if device supports 2D texture gather operations, False if not."""
762 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_TEX2D_GATHER)) 2Oi
764 @property
765 def maximum_texture2d_gather_width(self) -> int:
766 """int: Maximum 2D texture gather width."""
767 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_WIDTH) 2nE
769 @property
770 def maximum_texture2d_gather_height(self) -> int:
771 """int: Maximum 2D texture gather height."""
772 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_HEIGHT) 2Vi
774 @property
775 def stream_priorities_supported(self) -> bool:
776 """bool: True if device supports stream priorities, False if not."""
777 return bool( 2AD
778 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_STREAM_PRIORITIES_SUPPORTED) 2AD
779 )
781 @property
782 def can_flush_remote_writes(self) -> bool:
783 """bool: The CU_STREAM_WAIT_VALUE_FLUSH flag and the CU_STREAM_MEM_OP_FLUSH_REMOTE_WRITES MemOp are supported on the device. See Stream Memory Operations for additional details."""
784 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_FLUSH_REMOTE_WRITES)) 26D
786 @property
787 def host_register_supported(self) -> bool:
788 """bool: Device supports host memory registration via cudaHostRegister."""
789 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_REGISTER_SUPPORTED)) 2/D
791 @property
792 def timeline_semaphore_interop_supported(self) -> bool:
793 """bool: External timeline semaphore interop is supported on the device."""
794 return bool( 2si
795 self._get_cached_attribute( 2si
796 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TIMELINE_SEMAPHORE_INTEROP_SUPPORTED 2si
797 )
798 )
800 @property
801 def cluster_launch(self) -> bool:
802 """bool: Indicates device supports cluster launch."""
803 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLUSTER_LAUNCH)) 28D
805 @property
806 def can_use_64_bit_stream_mem_ops(self) -> bool:
807 """bool: 64-bit operations are supported in cuStreamBatchMemOp and related MemOp APIs."""
808 return bool( 2cD
809 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS) 2cD
810 )
812 @property
813 def can_use_stream_wait_value_nor(self) -> bool:
814 """bool: CU_STREAM_WAIT_VALUE_NOR is supported by MemOp APIs."""
815 return bool( 2Di
816 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR) 2Di
817 )
819 @property
820 def dma_buf_supported(self) -> bool:
821 """bool: Device supports buffer sharing with dma_buf mechanism."""
822 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DMA_BUF_SUPPORTED)) 2Qi
824 # Start of CUDA 12 device attributes
826 @property
827 def ipc_event_supported(self) -> bool:
828 """bool: Device supports IPC Events."""
829 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_IPC_EVENT_SUPPORTED)) 2;D
831 @property
832 def mem_sync_domain_count(self) -> int:
833 """int: Number of memory domains the device supports."""
834 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_SYNC_DOMAIN_COUNT, default=1) 2wE
836 @property
837 def tensor_map_access_supported(self) -> bool:
838 """bool: Device supports accessing memory using Tensor Map."""
839 return bool( 2Ni~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLf
840 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TENSOR_MAP_ACCESS_SUPPORTED) 2Ni~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLf
841 )
843 @property
844 def handle_type_fabric_supported(self) -> bool:
845 """bool: Device supports exporting memory to a fabric handle with cuMemExportToShareableHandle() or requested with cuMemCreate()."""
846 return bool( 2fD
847 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_FABRIC_SUPPORTED) 2fD
848 )
850 @property
851 def unified_function_pointers(self) -> bool:
852 """bool: Device supports unified function pointers."""
853 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_FUNCTION_POINTERS)) 2IE
855 @property
856 def mps_enabled(self) -> bool:
857 """bool: Indicates if contexts created on this device will be shared via MPS."""
858 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MPS_ENABLED)) 21i
860 @property
861 def host_numa_id(self) -> int:
862 """int: NUMA ID of the host node closest to the device. Returns -1 when system does not support NUMA."""
863 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_ID, default=-1) 26C7C9C!Cf g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J .Dekyh%ezhAhBhCh'eDh9fCj2j
865 @property
866 def d3d12_cig_supported(self) -> bool:
867 """bool: Device supports CIG with D3D12."""
868 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_D3D12_CIG_SUPPORTED)) 2%D
870 @property
871 def mem_decompress_algorithm_mask(self) -> int:
872 """int: The returned value shall be interpreted as a bitmask, where the individual bits are described by the CUmemDecompressAlgorithm enum."""
873 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_ALGORITHM_MASK) 2uE
875 @property
876 def mem_decompress_maximum_length(self) -> int:
877 """int: The returned value is the maximum length in bytes of a single decompress operation that is allowed."""
878 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_MAXIMUM_LENGTH) 2vE
880 @property
881 def vulkan_cig_supported(self) -> bool:
882 """bool: Device supports CIG with Vulkan."""
883 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VULKAN_CIG_SUPPORTED)) 2JE
885 @property
886 def gpu_pci_device_id(self) -> int:
887 """int: The combined 16-bit PCI device ID and 16-bit PCI vendor ID.
889 Returns 0 if the driver does not support this query.
890 """
891 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_DEVICE_ID) 2,D
893 @property
894 def gpu_pci_subsystem_id(self) -> int:
895 """int: The combined 16-bit PCI subsystem ID and 16-bit PCI subsystem vendor ID.
897 Returns 0 if the driver does not support this query.
898 """
899 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_SUBSYSTEM_ID) 2-D
901 @property
902 def host_numa_virtual_memory_management_supported(self) -> bool:
903 """bool: Device supports HOST_NUMA location with the virtual memory management APIs like cuMemCreate, cuMemMap and related APIs."""
904 return bool( 2]C
905 self._get_cached_attribute( 2]C
906 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2]C
907 )
908 )
910 @property
911 def host_numa_memory_pools_supported(self) -> bool:
912 """bool: Device supports HOST_NUMA location with the cuMemAllocAsync and cuMemPool family of APIs."""
913 return bool( 29E!EHnSoToiFjFkFlFmFnF2D3D4D#EUooF;EpFjD%e'e9f
914 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MEMORY_POOLS_SUPPORTED) 29E!EHnSoToiFjFkFlFmFnF2D3D4D#EUooF;EpFjD%e'e9f
915 )
917 # Start of CUDA 13 device attributes
919 @property
920 def host_numa_multinode_ipc_supported(self) -> bool:
921 """bool: Device supports HOST_NUMA location IPC between nodes in a multi-node system."""
922 return bool( 2Gi
923 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MULTINODE_IPC_SUPPORTED) 2Gi
924 )
926 @property
927 def host_memory_pools_supported(self) -> bool:
928 """bool: Device supports HOST location with the cuMemAllocAsync and cuMemPool family of APIs."""
929 IF CUDA_CORE_BUILD_MAJOR < 13:
930 return False
931 ELSE:
932 return bool( 2Wjf g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J iD!iBlyhYj%eClzhDlAhElBhFlChZj'eGlDhIl0jMC1jDIti9fGn-CCj2j.C
933 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_MEMORY_POOLS_SUPPORTED) 2Wjf g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J iD!iBlyhYj%eClzhDlAhElBhFlChZj'eGlDhIl0jMC1jDIti9fGn-CCj2j.C
934 )
936 @property
937 def host_virtual_memory_management_supported(self) -> bool:
938 """bool: Device supports HOST location with the virtual memory management APIs like cuMemCreate, cuMemMap and related APIs."""
939 IF CUDA_CORE_BUILD_MAJOR < 13:
940 return False
941 ELSE:
942 return bool( 2qiPoQoRo
943 self._get_cached_attribute( 2qiPoQoRo
944 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2qiPoQoRo
945 )
946 )
948 @property
949 def host_alloc_dma_buf_supported(self) -> bool:
950 """bool: Device supports page-locked host memory buffer sharing with dma_buf mechanism."""
951 IF CUDA_CORE_BUILD_MAJOR < 13:
952 return False
953 ELSE:
954 return bool( 2hD
955 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_ALLOC_DMA_BUF_SUPPORTED) 2hD
956 )
958 @property
959 def only_partial_host_native_atomic_supported(self) -> bool:
960 """bool: Link between the device and the host supports only some native atomic operations."""
961 IF CUDA_CORE_BUILD_MAJOR < 13:
962 return False
963 ELSE:
964 return bool( 2ri
965 self._get_cached_attribute( 2ri
966 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ONLY_PARTIAL_HOST_NATIVE_ATOMIC_SUPPORTED 2ri
967 )
968 )
971class Device:
972 """Represent a GPU and act as an entry point for cuda.core features.
974 This is a singleton object that helps ensure interoperability
975 across multiple libraries imported in the process to both see
976 and use the same GPU device.
978 While acting as the entry point, many other CUDA resources can be
979 allocated such as streams and buffers. Any :obj:`~_context.Context` dependent
980 resource created through this device, will continue to refer to
981 this device's context.
983 Newly returned :obj:`~_device.Device` objects are thread-local singletons
984 for a specified device.
986 Note
987 ----
988 Will not initialize the GPU.
990 Parameters
991 ----------
992 device_id : int, optional
993 Device ordinal to return a :obj:`~_device.Device` object for.
994 Default value of `None` return the currently used device.
996 """
997 __slots__ = (
998 "_device_id",
999 "_memory_resource",
1000 "_has_inited",
1001 "_properties",
1002 "_resources",
1003 "_uuid",
1004 "_context",
1005 "__weakref__",
1006 )
1008 def __new__(cls, device_id: Device | int | None = None) -> Device:
1009 if isinstance(device_id, Device): 2Ub#GVo$GWoqFXo%GYo'GZo(G0o)G1o*G2o+G3orG4o,G5o-G6o.G7o/G8o:G9oTk!oEI#oFI$oGI%oHI'oII(o;G)oHj*oIj+o=i,o?i-osG.o@i/oJj:o=G;o?G=o[i?oKj@oUk[oLj]o@G^o]i_oVk`oJI{o[G|o^i}o_i~otGapWkbp]GcpMjdpNjepOjfp^Ggp_GhpXkip)mjp`ikp{ilp|imp}inp~iopajppbjqpcjrpdjspejtpfjupgjvphjwpijxpjjypkjzpljApmjBpnjCpojDppjEpqjFprjGpsjHptjIpujJpMoKpNoLpNDMpODNpOpInPDPpQpQDRpRDSpSDTp/f:f;fUp=f?f@fTDVpWpXpKIYpLIZpMI0pNI1pOI2p3p4p5p6p7p8p9p!p*m#p+m$p,m%p-m'pYk(p`G)pPI*pQI+pDo,pEo-pZk.p0k/p1k:p2k;p3k=p.m?p/m@p:m[p;m]p=m^p?m_p@m`p[m{pFo|p}p~paqUDbqVDcqWDdqXDeqYDfqZDgqhqiqjq]mkq^mlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6qGo7q0D8q_m9q`m!q{m#q|m$q1D%q}m'qHo(q)q~m*qIo+qan,qbn-qcn.qdn/qen:qfn;qqo=qrF?q@q[q]q^qgn_qhn`qin{qjn|qKE}qsF~qtFarRIbrSIcrkndrerrofrgrhrirjrkrlrmrnrorprqr?HrrAmsr{Gtr|Gur}GvrBmwr~GxrSlyrTlzr@HAr[HBrCmCrDmDr]HErjlFr4kGr-iHr.iIrEmJrFmKrBjLr5kMr6kNrsoOrtoPruoQrklRrllSrmlTrvoUrnlVr7kWrolXrplYrqlZrwo0rxo1rrl2r3rln4ruF5r6r7rTI8r9r!r#r$r8k%r9k'r!k(r#k)r$k*r+r,r-r.r%k/r:r;r=r?r@rmn[r]r'i#g(i$g)i%gbL'gcL(gdL)geL*gfL+ggL,ghL-giL.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhZHch0Hdh1HehIJ^rfh_rBi`r{rUI|raH}rbH~rVIasWIbs'kcs(kds)kesXIfsYIgsZIhs0Iis1Ijs?Jks^Hls_Hms@Jns[Josnnpsonqspnrs]Jss^Jts_Jus`Jvs{Jws|Jxs`Hys{Hzs}JAs~JBsqnCsrnDssnEsaKFsbKGscKHsdKIseKJsKstnLsunMsvnNswnOsxnPs{CQsynRsSsTsznUs2IVscHWsdHXs3IYs4IZs*k0s+k1s,k2s5I3s6I4s7I5s8I6s9I7sAn8s9s!I!seH#sfH$s#I%s$I's-k(s.k)s/k*s%I+s'I,s(I-s)I.s*I/s:sCi;sBn=sCn?s)E@s*E[s2H]shF^s|C_s}C`s~C{s|s}s~s:katbtctvFdtwFetvjftPjgt;khtxFitQjjtRjktSjltTjmtUjntVjotwjptckqt=krtWjstJJMfNfKJOf+Esk,EtkPfQf@FukRfSfTfLJUfaDHmVfMJWf6Cvk7Cwk8CxkbDImNJXfOJYfPJZfQJ0f1f2f3f4f5f6f7f8f[Fyk]FzkAkBkCkDk^FEkFkGk9CHk!CIkJm#CJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~d|HaeZJytBKze5CAeZGBeiGCe0GDeEebeUlztce_d(E;d}Hde~H`dFeee{dAt+Ife,I|dGeCKHeIeaIgebIheiejekelemeAFBtTHCt:EDtUHEtVHFtkGGt-E* f K RJ+ `Lg L LE, 9Eh M 0J- !Ei N HD. {Lj EKO hOnb/ k P FNob: l Q iOpbjOgh[h; Hnm R qbrbsbtbubvbwbxbybzbAbJn= Son S Kn? Too T @ p U [ 1J] ^ 2J_ ` 3J{ | 4J} ~ 5Jabbb6Jcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 MEdb2DC 7 eb3DD 8 NEfb4DE 9 OEgb#EF ! LnMnNnuGhbUoG # SJBbTJCbpGDbqGEb7JiboFH $ 8Jjb;EI % PEkbpFJ ' VKJeKKKeLKLeMKMeWKNeXKOeYKPeNKQeOnZKReOKSe0KTePKUeQKVe1KWeRKXe2KYe`CZeSK0e#K1exO2eyO3ezO4e$K5e%K6e'K7eYG8eIDFbJDGbUGVbVGHbUJIbVJJbWGKbXGLbWJMbXJNbXHObYHPb3HHtItJt-IKt.ILt/IMt:INt;IOt=IPtQt9eBo*i+icI4HvG?I5HgHRtfKStwG6HgKTthH7HhKUtiK8H#iPnGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8ixG.E_FiH9HQnjK!HBF#H$HyGzG%HCFkOhhVtlOihCJWtmOjhRnXtYtZtjH0t=jlbzjdI1t(jkH2t@I3t[I4t]I5t^I6t_I7t`I8t+j9t{I!t|I#t}I$t~I%taJ'tbJ(tcJ)t,j*teI+tfI,t9J-tgI.thI/tiI:tjI;tkI=t!J?t#J@tlI[t$J]tmI^tnI_t%J`t'J{t(J|t)J}t*J~t+JauoIbupIcu,Jdu-JeuSn]hTnDJUn^h/Eb ?jEdAjFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nDK,n-nhuci.niujuglLlc DnkuEnlumuFnnuoupuquxjruyjsu-jtuuuvuwuxuyuzuAuBuCuDuEuFuGu.jHu/jIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXboe]upe^uYbZbqe_ure`ulH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVl{uWl|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jGNkh?nPl/Cww9GxwkKlh9iywnOmhHNnhoOohph@nlKqhmKrh;l=lzwAw{j|j?lQl}j~jakbk.JBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w$C!w|k#w%C$wwl%w'C'wxl(w(C)wyl*w)C+wzl,w*C-w}k.w+C/wAl:w,C;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjx,KFh@lRljLGh*jkxlx[n]nmxnx!GoxMCpx1jqxrxtisx9ftxGnux-CvxCjwx2jxx.Cyx^nkLHhzx_nmHAxnHBx`n{n|nyoCxzoDxAoEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1xPo2xQo3xCG4xDG5xEG6xRo7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojokoXl)xlL|bdJ}b~bJl*xacKl+xbc/Jcc:Jdcse,xWb+eYl-xZl.x0l/x1l:x2l;x3l=x4l?x5l@x6l[x7l]x8l^xecfcgchcicjckclcmcncocpcqczi_xAi`xBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COc)HPc*HQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c+H$coH%cpH'cqH(crH)csH*ctH+cuH,cvH-cwH.cxH/cyH:czH;cAH=cBH?cCH@cDH[c]c1GQb3KRb2GSbIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya nKxyoKyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjG9ljz!lkz,e#llz$lmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz%lZz'l0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e(l:z_e`e{e|e}e)l;z*lmb+l=z,l?z@z[z]z,i^z_z`z{z|zEH,H-l}z~zaA;i4GbA5GcA6GdAeJeA;JfA7GgAFHhAfJiA-HjAgJkAhJlAiJmAjJnA.HoAkJpAlJqAmJrAnJsAoJtApJuAqJvArJ/HsJwAtJxAuJyAvJzAwJAAxJBAyFCAyJDA:HEAzJFAAJGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpfQE!mRE#mSE$mqfrfsftfufTE%mUE'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfFGMAGGNAHGOAIGPAJGQAGHRAqISArITAsIUAtIVAuIWAvIXA(mYAHHZAwI0ACo1AIH2AJH3ApK4AqK5ArK6AsK7AtK8AuK9AxI!AKH#AgF$ALH%AyI'AzI(AAI)AMH*AvK+AwK,AxK-AyK.AVE/AWE:AXE;AYE=AZE?A0E@ABI[A1E]A2E^A3E_A4E`A5E{AKG|ALG}AJo~AMGaBNGbBzFcBoo;HdBOGeBKofBPGgBLohBQGiBRGjBkBlBSGmBnBTGoB=HpBGjpo6EqBDFrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBEFRBFFSBGFTBHFUBIFVBJFWBKFXBLFYBMFZBNF0BOF1BPF2BQF3BRF4BSF5BTF6BUF7BVF8BWF9BXF!BYF#BZF$B0F%B1F'B2F(B3F)B4F*B5F+B6F,B7F-B8F.B9F/B!F:B#F;B$F=B%F?B'F@B(F[B)F]B^B_B`B*F{B|B}B+F~BaC7EbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFC,FGC-FHCICJC.FKC
1010 return device_id 2qorojl4k-i.isotouoklllmlvonl7kolplqlwoxorlbLcLdLeLfLgLhLiLkklkmknkokpkqkrkhFckTH:EUHVHkG* K RJ+ `LL , M - N HD. {LEKO hO/ P FN: Q iOjO; R = S ? T @ U [ ] ^ _ ` { | } ~ abbbcbV W X Y Z 0 1 2 3 4 5 6 db7 eb8 fb9 gb! hb# SJTJpGqGib$ jb% kb' VKKKLKMKWKXKYKNKZKOK0KPKQK1KRK2K`CSK#KxOyOzO$K%K'KYGIDJDUGVGUJVJWGXGWJXJXHYHkOlOmOGN9GkK9inOHNoOlKmK/i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhEhhk,KjL!GkLyozoAo3j(e4j5jEjuiviwi)e*exi6j7j8j9j!j#jPoQoCGDGEGRo$j;j}dFjyi%i%j'jdJoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDH1G3K2G3Gd e
1012 Device_ensure_cuda_initialized() 2Ub#GVo$GWoqFXo%GYo'GZo(G0o)G1o*G2o+G3orG4o,G5o-G6o.G7o/G8o:G9oTk!oEI#oFI$oGI%oHI'oII(o;G)oHj*oIj+o=i,o?i-osG.o@i/oJj:o=G;o?G=o[i?oKj@oUk[oLj]o@G^o]i_oVk`oJI{o[G|o^i}o_i~otGapWkbp]GcpMjdpNjepOjfp^Ggp_GhpXkip)mjp`ikp{ilp|imp}inp~iopajppbjqpcjrpdjspejtpfjupgjvphjwpijxpjjypkjzpljApmjBpnjCpojDppjEpqjFprjGpsjHptjIpujJpMoKpNoLpNDMpODNpOpInPDPpQpQDRpRDSpSDTp/f:f;fUp=f?f@fTDVpWpXpKIYpLIZpMI0pNI1pOI2p3p4p5p6p7p8p9p!p*m#p+m$p,m%p-m'pYk(p`G)pPI*pQI+pDo,pEo-pZk.p0k/p1k:p2k;p3k=p.m?p/m@p:m[p;m]p=m^p?m_p@m`p[m{pFo|p}p~paqUDbqVDcqWDdqXDeqYDfqZDgqhqiqjq]mkq^mlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6qGo7q0D8q_m9q`m!q{m#q|m$q1D%q}m'qHo(q)q~m*qIo+qan,qbn-qcn.qdn/qen:qfn;qqo=qrF?q@q[q]q^qgn_qhn`qin{qjn|qKE}qsF~qtFarRIbrSIcrkndrerrofrgrhrirjrkrlrmrnrorprqr?HrrAmsr{Gtr|Gur}GvrBmwr~GxrSlyrTlzr@HAr[HBrCmCrDmDr]HErjlFr4kGr-iHr.iIrEmJrFmKrBjLr5kMr6kNrsoOrtoPruoQrklRrllSrmlTrvoUrnlVr7kWrolXrplYrqlZrwo0rxo1rrl2r3rln4ruF5r6r7rTI8r9r!r#r$r8k%r9k'r!k(r#k)r$k*r+r,r-r.r%k/r:r;r=r?r@rmn[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhZHch0Hdh1HehIJ^rfh_rBi`r{rUI|raH}rbH~rVIasWIbs'kcs(kds)kesXIfsYIgsZIhs0Iis1Ijs?Jks^Hls_Hms@Jns[Josnnpsonqspnrs]Jss^Jts_Jus`Jvs{Jws|Jxs`Hys{Hzs}JAs~JBsqnCsrnDssnEsaKFsbKGscKHsdKIseKJsKstnLsunMsvnNswnOsxnPs{CQsynRsSsTsznUs2IVscHWsdHXs3IYs4IZs*k0s+k1s,k2s5I3s6I4s7I5s8I6s9I7sAn8s9s!I!seH#sfH$s#I%s$I's-k(s.k)s/k*s%I+s'I,s(I-s)I.s*I/s:sCi;sBn=sCn?s)E@s*E[s2H]s^s|C_s}C`s~C{s|s}s~s:katbtctvFdtwFetvjftPjgt;khtxFitQjjtRjktSjltTjmtUjntVjotwjptckqt=krtWjstJJMfNfKJOf+Esk,EtkPfQf@FukRfSfTfLJUfaDHmVfMJWf6Cvk7Cwk8CxkbDImNJXfOJYfPJZfQJ0f1f2f3f4f5f6f7f8f[Fyk]FzkAkBkCkDk^FEkFkGk9CHk!CIkJm#CJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~d|HaeZJytBKze5CAeZGBeiGCe0GDeEebeUlztce_d(E;d}Hde~H`dFeee{dAt+Ife,I|dGeCKHeIeaIgebIheiejekelemeAFBtCtDtEtFtGt-E* f K RJ+ g L LE, 9Eh M 0J- !Ei N HD. j O nb/ k P ob: l Q pbgh[h; Hnm R qbrbsbtbubvbwbxbybzbAbJn= Son S Kn? Too T @ p U [ 1J] ^ 2J_ ` 3J{ | 4J} ~ 5Jabbb6Jcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 MEdb2DC 7 eb3DD 8 NEfb4DE 9 OEgb#EF ! LnMnNnuGhbUoG # SJBbTJCbDbEb7JiboFH $ 8Jjb;EI % PEkbpFJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYe`CZe0e1e2e3e4e5e6e7eYG8eIDFbJDGbVbHbUJIbVJJbKbLbWJMbXJNbObPb3HHtItJt-IKt.ILt/IMt:INt;IOt=IPtQt9eBo*i+icI4HvG?I5HgHRtfKStwG6HgKTthH7HhKUtiK8H#iPnGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8ixG.E_FiH9HQnjK!HBF#H$HyGzG%HCFhhVtihCJWtjhRnXtYtZtjH0t=jlbzjdI1t(jkH2t@I3t[I4t]I5t^I6t_I7t`I8t+j9t{I!t|I#t}I$t~I%taJ'tbJ(tcJ)t,j*teI+tfI,t9J-tgI.thI/tiI:tjI;tkI=t!J?t#J@tlI[t$J]tmI^tnI_t%J`t'J{t(J|t)J}t*J~t+JauoIbupIcu,Jdu-JeuSn]hTnDJUn^h/Eb ?jEdAjFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nDK,n-nhuci.niujuglLlc DnkuEnlumuFnnuoupuquxjruyjsu-jtuuuvuwuxuyuzuAuBuCuDuEuFuGu.jHu/jIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXboe]upe^uYbZbqe_ure`ulH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVl{uWl|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPl/CwwxwkKlh9iywmhnhohph@nlKqhmKrh;l=lzwAw{j|j?lQl}j~jakbk.JBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w$C!w|k#w%C$wwl%w'C'wxl(w(C)wyl*w)C+wzl,w*C-w}k.w+C/wAl:w,C;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjxFh@lRlGh*jkxlx[n]nmxnxoxMCpx1jqxrxtisx9ftxGnux-CvxCjwx2jxx.Cyx^nHhzx_nmHAxnHBx`n{n|nyoCxzoDxAoEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1xPo2xQo3xCG4xDG5xEG6xRo7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojokoXl)xlL|bdJ}b~bJl*xacKl+xbc/Jcc:Jdcse,xWb+eYl-xZl.x0l/x1l:x2l;x3l=x4l?x5l@x6l[x7l]x8l^xecfcgchcicjckclcmcncocpcqczi_xAi`xBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COc)HPc*HQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c+H$coH%cpH'cqH(crH)csH*ctH+cuH,cvH-cwH.cxH/cyH:czH;cAH=cBH?cCH@cDH[c]c1GQbRb2GSbIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya nKxyoKyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjG9ljz!lkz,e#llz$lmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz%lZz'l0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e(l:z_e`e{e|e}e)l;z*lmb+l=z,l?z@z[z]z,i^z_z`z{z|zEH,H-l}z~zaA;i4GbA5GcA6GdAeJeA;JfA7GgAFHhAfJiA-HjAgJkAhJlAiJmAjJnA.HoAkJpAlJqAmJrAnJsAoJtApJuAqJvArJ/HsJwAtJxAuJyAvJzAwJAAxJBAyFCAyJDA:HEAzJFAAJGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpfQE!mRE#mSE$mqfrfsftfufTE%mUE'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfFGMAGGNAHGOAIGPAJGQAGHRAqISArITAsIUAtIVAuIWAvIXA(mYAHHZAwI0ACo1AIH2AJH3ApK4AqK5ArK6AsK7AtK8AuK9AxI!AKH#AgF$ALH%AyI'AzI(AAI)AMH*AvK+AwK,AxK-AyK.AVE/AWE:AXE;AYE=AZE?A0E@ABI[A1E]A2E^A3E_A4E`A5E{AKG|ALG}AJo~AMGaBNGbBzFcBoo;HdBOGeBKofBPGgBLohBQGiBRGjBkBlBSGmBnBTGoB=HpBGjpo6EqBDFrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBEFRBFFSBGFTBHFUBIFVBJFWBKFXBLFYBMFZBNF0BOF1BPF2BQF3BRF4BSF5BTF6BUF7BVF8BWF9BXF!BYF#BZF$B0F%B1F'B2F(B3F)B4F*B5F+B6F,B7F-B8F.B9F/B!F:B#F;B$F=B%F?B'F@B(F[B)F]B^B_B`B*F{B|B}B+F~BaC7EbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFC,FGC-FHCICJC.FKC
1013 device_id = Device_resolve_device_id(device_id) 2Ub#GVo$GWoqFXo%GYo'GZo(G0o)G1o*G2o+G3orG4o,G5o-G6o.G7o/G8o:G9oTk!oEI#oFI$oGI%oHI'oII(o;G)oHj*oIj+o=i,o?i-osG.o@i/oJj:o=G;o?G=o[i?oKj@oUk[oLj]o@G^o]i_oVk`oJI{o[G|o^i}o_i~otGapWkbp]GcpMjdpNjepOjfp^Ggp_GhpXkip)mjp`ikp{ilp|imp}inp~iopajppbjqpcjrpdjspejtpfjupgjvphjwpijxpjjypkjzpljApmjBpnjCpojDppjEpqjFprjGpsjHptjIpujJpMoKpNoLpNDMpODNpOpInPDPpQpQDRpRDSpSDTp/f:f;fUp=f?f@fTDVpWpXpKIYpLIZpMI0pNI1pOI2p3p4p5p6p7p8p9p!p*m#p+m$p,m%p-m'pYk(p`G)pPI*pQI+pDo,pEo-pZk.p0k/p1k:p2k;p3k=p.m?p/m@p:m[p;m]p=m^p?m_p@m`p[m{pFo|p}p~paqUDbqVDcqWDdqXDeqYDfqZDgqhqiqjq]mkq^mlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6qGo7q0D8q_m9q`m!q{m#q|m$q1D%q}m'qHo(q)q~m*qIo+qan,qbn-qcn.qdn/qen:qfn;qqo=qrF?q@q[q]q^qgn_qhn`qin{qjn|qKE}qsF~qtFarRIbrSIcrkndrerrofrgrhrirjrkrlrmrnrorprqr?HrrAmsr{Gtr|Gur}GvrBmwr~GxrSlyrTlzr@HAr[HBrCmCrDmDr]HErjlFr4kGr-iHr.iIrEmJrFmKrBjLr5kMr6kNrsoOrtoPruoQrklRrllSrmlTrvoUrnlVr7kWrolXrplYrqlZrwo0rxo1rrl2r3rln4ruF5r6r7rTI8r9r!r#r$r8k%r9k'r!k(r#k)r$k*r+r,r-r.r%k/r:r;r=r?r@rmn[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhZHch0Hdh1HehIJ^rfh_rBi`r{rUI|raH}rbH~rVIasWIbs'kcs(kds)kesXIfsYIgsZIhs0Iis1Ijs?Jks^Hls_Hms@Jns[Josnnpsonqspnrs]Jss^Jts_Jus`Jvs{Jws|Jxs`Hys{Hzs}JAs~JBsqnCsrnDssnEsaKFsbKGscKHsdKIseKJsKstnLsunMsvnNswnOsxnPs{CQsynRsSsTsznUs2IVscHWsdHXs3IYs4IZs*k0s+k1s,k2s5I3s6I4s7I5s8I6s9I7sAn8s9s!I!seH#sfH$s#I%s$I's-k(s.k)s/k*s%I+s'I,s(I-s)I.s*I/s:sCi;sBn=sCn?s)E@s*E[s2H]s^s|C_s}C`s~C{s|s}s~s:katbtctvFdtwFetvjftPjgt;khtxFitQjjtRjktSjltTjmtUjntVjotwjptckqt=krtWjstJJMfNfKJOf+Esk,EtkPfQf@FukRfSfTfLJUfaDHmVfMJWf6Cvk7Cwk8CxkbDImNJXfOJYfPJZfQJ0f1f2f3f4f5f6f7f8f[Fyk]FzkAkBkCkDk^FEkFkGk9CHk!CIkJm#CJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~d|HaeZJytBKze5CAeZGBeiGCe0GDeEebeUlztce_d(E;d}Hde~H`dFeee{dAt+Ife,I|dGeCKHeIeaIgebIheiejekelemeAFBtCtDtEtFtGt-E* f K RJ+ g L LE, 9Eh M 0J- !Ei N HD. j O nb/ k P ob: l Q pbgh[h; Hnm R qbrbsbtbubvbwbxbybzbAbJn= Son S Kn? Too T @ p U [ 1J] ^ 2J_ ` 3J{ | 4J} ~ 5Jabbb6Jcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 MEdb2DC 7 eb3DD 8 NEfb4DE 9 OEgb#EF ! LnMnNnuGhbUoG # SJBbTJCbDbEb7JiboFH $ 8Jjb;EI % PEkbpFJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYe`CZe0e1e2e3e4e5e6e7eYG8eIDFbJDGbVbHbUJIbVJJbKbLbWJMbXJNbObPb3HHtItJt-IKt.ILt/IMt:INt;IOt=IPtQt9eBo*i+icI4HvG?I5HgHRtfKStwG6HgKTthH7HhKUtiK8H#iPnGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8ixG.E_FiH9HQnjK!HBF#H$HyGzG%HCFhhVtihCJWtjhRnXtYtZtjH0t=jlbzjdI1t(jkH2t@I3t[I4t]I5t^I6t_I7t`I8t+j9t{I!t|I#t}I$t~I%taJ'tbJ(tcJ)t,j*teI+tfI,t9J-tgI.thI/tiI:tjI;tkI=t!J?t#J@tlI[t$J]tmI^tnI_t%J`t'J{t(J|t)J}t*J~t+JauoIbupIcu,Jdu-JeuSn]hTnDJUn^h/Eb ?jEdAjFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nDK,n-nhuci.niujuglLlc DnkuEnlumuFnnuoupuquxjruyjsu-jtuuuvuwuxuyuzuAuBuCuDuEuFuGu.jHu/jIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXboe]upe^uYbZbqe_ure`ulH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVl{uWl|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPl/CwwxwkKlh9iywmhnhohph@nlKqhmKrh;l=lzwAw{j|j?lQl}j~jakbk.JBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w$C!w|k#w%C$wwl%w'C'wxl(w(C)wyl*w)C+wzl,w*C-w}k.w+C/wAl:w,C;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjxFh@lRlGh*jkxlx[n]nmxnxoxMCpx1jqxrxtisx9ftxGnux-CvxCjwx2jxx.Cyx^nHhzx_nmHAxnHBx`n{n|nyoCxzoDxAoEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1xPo2xQo3xCG4xDG5xEG6xRo7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojokoXl)xlL|bdJ}b~bJl*xacKl+xbc/Jcc:Jdcse,xWb+eYl-xZl.x0l/x1l:x2l;x3l=x4l?x5l@x6l[x7l]x8l^xecfcgchcicjckclcmcncocpcqczi_xAi`xBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COc)HPc*HQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c+H$coH%cpH'cqH(crH)csH*ctH+cuH,cvH-cwH.cxH/cyH:czH;cAH=cBH?cCH@cDH[c]c1GQbRb2GSbIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya nKxyoKyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjG9ljz!lkz,e#llz$lmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz%lZz'l0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e(l:z_e`e{e|e}e)l;z*lmb+l=z,l?z@z[z]z,i^z_z`z{z|zEH,H-l}z~zaA;i4GbA5GcA6GdAeJeA;JfA7GgAFHhAfJiA-HjAgJkAhJlAiJmAjJnA.HoAkJpAlJqAmJrAnJsAoJtApJuAqJvArJ/HsJwAtJxAuJyAvJzAwJAAxJBAyFCAyJDA:HEAzJFAAJGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpfQE!mRE#mSE$mqfrfsftfufTE%mUE'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfFGMAGGNAHGOAIGPAJGQAGHRAqISArITAsIUAtIVAuIWAvIXA(mYAHHZAwI0ACo1AIH2AJH3ApK4AqK5ArK6AsK7AtK8AuK9AxI!AKH#AgF$ALH%AyI'AzI(AAI)AMH*AvK+AwK,AxK-AyK.AVE/AWE:AXE;AYE=AZE?A0E@ABI[A1E]A2E^A3E_A4E`A5E{AKG|ALG}AJo~AMGaBNGbBzFcBoo;HdBOGeBKofBPGgBLohBQGiBRGjBkBlBSGmBnBTGoB=HpBGjpo6EqBDFrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBEFRBFFSBGFTBHFUBIFVBJFWBKFXBLFYBMFZBNF0BOF1BPF2BQF3BRF4BSF5BTF6BUF7BVF8BWF9BXF!BYF#BZF$B0F%B1F'B2F(B3F)B4F*B5F+B6F,B7F-B8F.B9F/B!F:B#F;B$F=B%F?B'F@B(F[B)F]B^B_B`B*F{B|B}B+F~BaC7EbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFC,FGC-FHCICJC.FKC
1014 devices = Device_ensure_tls_devices(cls) 2Ub#GVo$GWoqFXo%GYo'GZo(G0o)G1o*G2o+G3orG4o,G5o-G6o.G7o/G8o:G9oTk!oEI#oFI$oGI%oHI'oII(o;G)oHj*oIj+o=i,o?i-osG.o@i/oJj:o=G;o?G=o[i?oKj@oUk[oLj]o@G^o]i_oVk`oJI{o[G|o^i}o_i~otGapWkbp]GcpMjdpNjepOjfp^Ggp_GhpXkip)mjp`ikp{ilp|imp}inp~iopajppbjqpcjrpdjspejtpfjupgjvphjwpijxpjjypkjzpljApmjBpnjCpojDppjEpqjFprjGpsjHptjIpujJpMoKpNoLpNDMpODNpOpInPDPpQpQDRpRDSpSDTp/f:f;fUp=f?f@fTDVpWpXpKIYpLIZpMI0pNI1pOI2p3p4p5p6p7p8p9p!p*m#p+m$p,m%p-m'pYk(p`G)pPI*pQI+pDo,pEo-pZk.p0k/p1k:p2k;p3k=p.m?p/m@p:m[p;m]p=m^p?m_p@m`p[m{pFo|p}p~paqUDbqVDcqWDdqXDeqYDfqZDgqhqiqjq]mkq^mlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6qGo7q0D8q_m9q`m!q{m#q|m$q1D%q}m'qHo(q)q~m*qIo+qan,qbn-qcn.qdn/qen:qfn;qqo=qrF?q@q[q]q^qgn_qhn`qin{qjn|qKE}qsF~qtFarRIbrSIcrkndrerrofrgrhrirjrkrlrmrnrorprqr?HrrAmsr{Gtr|Gur}GvrBmwr~GxrSlyrTlzr@HAr[HBrCmCrDmDr]HErjlFr4kGr-iHr.iIrEmJrFmKrBjLr5kMr6kNrsoOrtoPruoQrklRrllSrmlTrvoUrnlVr7kWrolXrplYrqlZrwo0rxo1rrl2r3rln4ruF5r6r7rTI8r9r!r#r$r8k%r9k'r!k(r#k)r$k*r+r,r-r.r%k/r:r;r=r?r@rmn[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhZHch0Hdh1HehIJ^rfh_rBi`r{rUI|raH}rbH~rVIasWIbs'kcs(kds)kesXIfsYIgsZIhs0Iis1Ijs?Jks^Hls_Hms@Jns[Josnnpsonqspnrs]Jss^Jts_Jus`Jvs{Jws|Jxs`Hys{Hzs}JAs~JBsqnCsrnDssnEsaKFsbKGscKHsdKIseKJsKstnLsunMsvnNswnOsxnPs{CQsynRsSsTsznUs2IVscHWsdHXs3IYs4IZs*k0s+k1s,k2s5I3s6I4s7I5s8I6s9I7sAn8s9s!I!seH#sfH$s#I%s$I's-k(s.k)s/k*s%I+s'I,s(I-s)I.s*I/s:sCi;sBn=sCn?s)E@s*E[s2H]s^s|C_s}C`s~C{s|s}s~s:katbtctvFdtwFetvjftPjgt;khtxFitQjjtRjktSjltTjmtUjntVjotwjptckqt=krtWjstJJMfNfKJOf+Esk,EtkPfQf@FukRfSfTfLJUfaDHmVfMJWf6Cvk7Cwk8CxkbDImNJXfOJYfPJZfQJ0f1f2f3f4f5f6f7f8f[Fyk]FzkAkBkCkDk^FEkFkGk9CHk!CIkJm#CJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~d|HaeZJytBKze5CAeZGBeiGCe0GDeEebeUlztce_d(E;d}Hde~H`dFeee{dAt+Ife,I|dGeCKHeIeaIgebIheiejekelemeAFBtCtDtEtFtGt-E* f K RJ+ g L LE, 9Eh M 0J- !Ei N HD. j O nb/ k P ob: l Q pbgh[h; Hnm R qbrbsbtbubvbwbxbybzbAbJn= Son S Kn? Too T @ p U [ 1J] ^ 2J_ ` 3J{ | 4J} ~ 5Jabbb6Jcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 MEdb2DC 7 eb3DD 8 NEfb4DE 9 OEgb#EF ! LnMnNnuGhbUoG # SJBbTJCbDbEb7JiboFH $ 8Jjb;EI % PEkbpFJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYe`CZe0e1e2e3e4e5e6e7eYG8eIDFbJDGbVbHbUJIbVJJbKbLbWJMbXJNbObPb3HHtItJt-IKt.ILt/IMt:INt;IOt=IPtQt9eBo*i+icI4HvG?I5HgHRtfKStwG6HgKTthH7HhKUtiK8H#iPnGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8ixG.E_FiH9HQnjK!HBF#H$HyGzG%HCFhhVtihCJWtjhRnXtYtZtjH0t=jlbzjdI1t(jkH2t@I3t[I4t]I5t^I6t_I7t`I8t+j9t{I!t|I#t}I$t~I%taJ'tbJ(tcJ)t,j*teI+tfI,t9J-tgI.thI/tiI:tjI;tkI=t!J?t#J@tlI[t$J]tmI^tnI_t%J`t'J{t(J|t)J}t*J~t+JauoIbupIcu,Jdu-JeuSn]hTnDJUn^h/Eb ?jEdAjFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nDK,n-nhuci.niujuglLlc DnkuEnlumuFnnuoupuquxjruyjsu-jtuuuvuwuxuyuzuAuBuCuDuEuFuGu.jHu/jIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXboe]upe^uYbZbqe_ure`ulH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVl{uWl|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPl/CwwxwkKlh9iywmhnhohph@nlKqhmKrh;l=lzwAw{j|j?lQl}j~jakbk.JBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w$C!w|k#w%C$wwl%w'C'wxl(w(C)wyl*w)C+wzl,w*C-w}k.w+C/wAl:w,C;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjxFh@lRlGh*jkxlx[n]nmxnxoxMCpx1jqxrxtisx9ftxGnux-CvxCjwx2jxx.Cyx^nHhzx_nmHAxnHBx`n{n|nyoCxzoDxAoEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1xPo2xQo3xCG4xDG5xEG6xRo7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojokoXl)x|bdJ}b~bJl*xacKl+xbc/Jcc:Jdcse,xWb+eYl-xZl.x0l/x1l:x2l;x3l=x4l?x5l@x6l[x7l]x8l^xecfcgchcicjckclcmcncocpcqczi_xAi`xBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COc)HPc*HQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c+H$coH%cpH'cqH(crH)csH*ctH+cuH,cvH-cwH.cxH/cyH:czH;cAH=cBH?cCH@cDH[c]c1GQbRb2GSbIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya nKxyoKyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjG9ljz!lkz,e#llz$lmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz%lZz'l0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e(l:z_e`e{e|e}e)l;z*lmb+l=z,l?z@z[z]z,i^z_z`z{z|zEH,H-l}z~zaA;i4GbA5GcA6GdAeJeA;JfA7GgAFHhAfJiA-HjAgJkAhJlAiJmAjJnA.HoAkJpAlJqAmJrAnJsAoJtApJuAqJvArJ/HsJwAtJxAuJyAvJzAwJAAxJBAyFCAyJDA:HEAzJFAAJGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpfQE!mRE#mSE$mqfrfsftfufTE%mUE'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfFGMAGGNAHGOAIGPAJGQAGHRAqISArITAsIUAtIVAuIWAvIXA(mYAHHZAwI0ACo1AIH2AJH3ApK4AqK5ArK6AsK7AtK8AuK9AxI!AKH#AgF$ALH%AyI'AzI(AAI)AMH*AvK+AwK,AxK-AyK.AVE/AWE:AXE;AYE=AZE?A0E@ABI[A1E]A2E^A3E_A4E`A5E{AKG|ALG}AJo~AMGaBNGbBzFcBoo;HdBOGeBKofBPGgBLohBQGiBRGjBkBlBSGmBnBTGoB=HpBGjpo6EqBDFrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBEFRBFFSBGFTBHFUBIFVBJFWBKFXBLFYBMFZBNF0BOF1BPF2BQF3BRF4BSF5BTF6BUF7BVF8BWF9BXF!BYF#BZF$B0F%B1F'B2F(B3F)B4F*B5F+B6F,B7F-B8F.B9F/B!F:B#F;B$F=B%F?B'F@B(F[B)F]B^B_B`B*F{B|B}B+F~BaC7EbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFC,FGC-FHCICJC.FKC
1016 try: 2Ub#GVo$GWoqFXo%GYo'GZo(G0o)G1o*G2o+G3orG4o,G5o-G6o.G7o/G8o:G9oTk!oEI#oFI$oGI%oHI'oII(o;G)oHj*oIj+o=i,o?i-osG.o@i/oJj:o=G;o?G=o[i?oKj@oUk[oLj]o@G^o]i_oVk`oJI{o[G|o^i}o_i~otGapWkbp]GcpMjdpNjepOjfp^Ggp_GhpXkip)mjp`ikp{ilp|imp}inp~iopajppbjqpcjrpdjspejtpfjupgjvphjwpijxpjjypkjzpljApmjBpnjCpojDppjEpqjFprjGpsjHptjIpujJpMoKpNoLpNDMpODNpOpInPDPpQpQDRpRDSpSDTp/f:f;fUp=f?f@fTDVpWpXpKIYpLIZpMI0pNI1pOI2p3p4p5p6p7p8p9p!p*m#p+m$p,m%p-m'pYk(p`G)pPI*pQI+pDo,pEo-pZk.p0k/p1k:p2k;p3k=p.m?p/m@p:m[p;m]p=m^p?m_p@m`p[m{pFo|p}p~paqUDbqVDcqWDdqXDeqYDfqZDgqhqiqjq]mkq^mlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6qGo7q0D8q_m9q`m!q{m#q|m$q1D%q}m'qHo(q)q~m*qIo+qan,qbn-qcn.qdn/qen:qfn;qqo=qrF?q@q[q]q^qgn_qhn`qin{qjn|qKE}qsF~qtFarRIbrSIcrkndrerrofrgrhrirjrkrlrmrnrorprqr?HrrAmsr{Gtr|Gur}GvrBmwr~GxrSlyrTlzr@HAr[HBrCmCrDmDr]HErjlFr4kGr-iHr.iIrEmJrFmKrBjLr5kMr6kNrsoOrtoPruoQrklRrllSrmlTrvoUrnlVr7kWrolXrplYrqlZrwo0rxo1rrl2r3rln4ruF5r6r7rTI8r9r!r#r$r8k%r9k'r!k(r#k)r$k*r+r,r-r.r%k/r:r;r=r?r@rmn[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhZHch0Hdh1HehIJ^rfh_rBi`r{rUI|raH}rbH~rVIasWIbs'kcs(kds)kesXIfsYIgsZIhs0Iis1Ijs?Jks^Hls_Hms@Jns[Josnnpsonqspnrs]Jss^Jts_Jus`Jvs{Jws|Jxs`Hys{Hzs}JAs~JBsqnCsrnDssnEsaKFsbKGscKHsdKIseKJsKstnLsunMsvnNswnOsxnPs{CQsynRsSsTsznUs2IVscHWsdHXs3IYs4IZs*k0s+k1s,k2s5I3s6I4s7I5s8I6s9I7sAn8s9s!I!seH#sfH$s#I%s$I's-k(s.k)s/k*s%I+s'I,s(I-s)I.s*I/s:sCi;sBn=sCn?s)E@s*E[s2H]s^s|C_s}C`s~C{s|s}s~s:katbtctvFdtwFetvjftPjgt;khtxFitQjjtRjktSjltTjmtUjntVjotwjptckqt=krtWjstJJMfNfKJOf+Esk,EtkPfQf@FukRfSfTfLJUfaDHmVfMJWf6Cvk7Cwk8CxkbDImNJXfOJYfPJZfQJ0f1f2f3f4f5f6f7f8f[Fyk]FzkAkBkCkDk^FEkFkGk9CHk!CIkJm#CJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~d|HaeZJytBKze5CAeZGBeiGCe0GDeEebeUlztce_d(E;d}Hde~H`dFeee{dAt+Ife,I|dGeCKHeIeaIgebIheiejekelemeAFBtCtDtEtFtGt-E* f K RJ+ g L LE, 9Eh M 0J- !Ei N HD. j O nb/ k P ob: l Q pbgh[h; Hnm R qbrbsbtbubvbwbxbybzbAbJn= Son S Kn? Too T @ p U [ 1J] ^ 2J_ ` 3J{ | 4J} ~ 5Jabbb6Jcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 MEdb2DC 7 eb3DD 8 NEfb4DE 9 OEgb#EF ! LnMnNnuGhbUoG # SJBbTJCbDbEb7JiboFH $ 8Jjb;EI % PEkbpFJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYe`CZe0e1e2e3e4e5e6e7eYG8eIDFbJDGbVbHbUJIbVJJbKbLbWJMbXJNbObPb3HHtItJt-IKt.ILt/IMt:INt;IOt=IPtQt9eBo*i+icI4HvG?I5HgHRtfKStwG6HgKTthH7HhKUtiK8H#iPnGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8ixG.E_FiH9HQnjK!HBF#H$HyGzG%HCFhhVtihCJWtjhRnXtYtZtjH0t=jlbzjdI1t(jkH2t@I3t[I4t]I5t^I6t_I7t`I8t+j9t{I!t|I#t}I$t~I%taJ'tbJ(tcJ)t,j*teI+tfI,t9J-tgI.thI/tiI:tjI;tkI=t!J?t#J@tlI[t$J]tmI^tnI_t%J`t'J{t(J|t)J}t*J~t+JauoIbupIcu,Jdu-JeuSn]hTnDJUn^h/Eb ?jEdAjFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nDK,n-nhuci.niujuglLlc DnkuEnlumuFnnuoupuquxjruyjsu-jtuuuvuwuxuyuzuAuBuCuDuEuFuGu.jHu/jIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXboe]upe^uYbZbqe_ure`ulH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVl{uWl|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPl/CwwxwkKlh9iywmhnhohph@nlKqhmKrh;l=lzwAw{j|j?lQl}j~jakbk.JBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w$C!w|k#w%C$wwl%w'C'wxl(w(C)wyl*w)C+wzl,w*C-w}k.w+C/wAl:w,C;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjxFh@lRlGh*jkxlx[n]nmxnxoxMCpx1jqxrxtisx9ftxGnux-CvxCjwx2jxx.Cyx^nHhzx_nmHAxnHBx`n{n|nyoCxzoDxAoEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1xPo2xQo3xCG4xDG5xEG6xRo7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojokoXl)x|bdJ}b~bJl*xacKl+xbc/Jcc:Jdcse,xWb+eYl-xZl.x0l/x1l:x2l;x3l=x4l?x5l@x6l[x7l]x8l^xecfcgchcicjckclcmcncocpcqczi_xAi`xBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COc)HPc*HQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c+H$coH%cpH'cqH(crH)csH*ctH+cuH,cvH-cwH.cxH/cyH:czH;cAH=cBH?cCH@cDH[c]c1GQbRb2GSbIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya nKxyoKyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjG9ljz!lkz,e#llz$lmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz%lZz'l0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e(l:z_e`e{e|e}e)l;z*lmb+l=z,l?z@z[z]z,i^z_z`z{z|zEH,H-l}z~zaA;i4GbA5GcA6GdAeJeA;JfA7GgAFHhAfJiA-HjAgJkAhJlAiJmAjJnA.HoAkJpAlJqAmJrAnJsAoJtApJuAqJvArJ/HsJwAtJxAuJyAvJzAwJAAxJBAyFCAyJDA:HEAzJFAAJGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpfQE!mRE#mSE$mqfrfsftfufTE%mUE'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfFGMAGGNAHGOAIGPAJGQAGHRAqISArITAsIUAtIVAuIWAvIXA(mYAHHZAwI0ACo1AIH2AJH3ApK4AqK5ArK6AsK7AtK8AuK9AxI!AKH#AgF$ALH%AyI'AzI(AAI)AMH*AvK+AwK,AxK-AyK.AVE/AWE:AXE;AYE=AZE?A0E@ABI[A1E]A2E^A3E_A4E`A5E{AKG|ALG}AJo~AMGaBNGbBzFcBoo;HdBOGeBKofBPGgBLohBQGiBRGjBkBlBSGmBnBTGoB=HpBGjpo6EqBDFrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBEFRBFFSBGFTBHFUBIFVBJFWBKFXBLFYBMFZBNF0BOF1BPF2BQF3BRF4BSF5BTF6BUF7BVF8BWF9BXF!BYF#BZF$B0F%B1F'B2F(B3F)B4F*B5F+B6F,B7F-B8F.B9F/B!F:B#F;B$F=B%F?B'F@B(F[B)F]B^B_B`B*F{B|B}B+F~BaC7EbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFC,FGC-FHCICJC.FKC
1017 return devices[device_id] 2Ub#GVo$GWoqFXo%GYo'GZo(G0o)G1o*G2o+G3orG4o,G5o-G6o.G7o/G8o:G9oTk!oEI#oFI$oGI%oHI'oII(o;G)oHj*oIj+o=i,o?i-osG.o@i/oJj:o=G;o?G=o[i?oKj@oUk[oLj]o@G^o]i_oVk`oJI{o[G|o^i}o_i~otGapWkbp]GcpMjdpNjepOjfp^Ggp_GhpXkip)mjp`ikp{ilp|imp}inp~iopajppbjqpcjrpdjspejtpfjupgjvphjwpijxpjjypkjzpljApmjBpnjCpojDppjEpqjFprjGpsjHptjIpujJpMoKpNoLpNDMpODNpOpInPDPpQpQDRpRDSpSDTp/f:f;fUp=f?f@fTDVpWpXpKIYpLIZpMI0pNI1pOI2p3p4p5p6p7p8p9p!p*m#p+m$p,m%p-m'pYk(p`G)pPI*pQI+pDo,pEo-pZk.p0k/p1k:p2k;p3k=p.m?p/m@p:m[p;m]p=m^p?m_p@m`p[m{pFo|p}p~paqUDbqVDcqWDdqXDeqYDfqZDgqhqiqjq]mkq^mlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6qGo7q0D8q_m9q`m!q{m#q|m$q1D%q}m'qHo(q)q~m*qIo+qan,qbn-qcn.qdn/qen:qfn;qqo=qrF?q@q[q]q^qgn_qhn`qin{qjn|qKE}qsF~qtFarRIbrSIcrkndrerrofrgrhrirjrkrlrmrnrorprqr?HrrAmsr{Gtr|Gur}GvrBmwr~GxrSlyrTlzr@HAr[HBrCmCrDmDr]HErjlFr4kGr-iHr.iIrEmJrFmKrBjLr5kMr6kNrsoOrtoPruoQrklRrllSrmlTrvoUrnlVr7kWrolXrplYrqlZrwo0rxo1rrl2r3rln4ruF5r6r7rTI8r9r!r#r$r8k%r9k'r!k(r#k)r$k*r+r,r-r.r%k/r:r;r=r?r@rmn[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhZHch0Hdh1HehIJ^rfh_rBi`r{rUI|raH}rbH~rVIasWIbs'kcs(kds)kesXIfsYIgsZIhs0Iis1Ijs?Jks^Hls_Hms@Jns[Josnnpsonqspnrs]Jss^Jts_Jus`Jvs{Jws|Jxs`Hys{Hzs}JAs~JBsqnCsrnDssnEsaKFsbKGscKHsdKIseKJsKstnLsunMsvnNswnOsxnPs{CQsynRsSsTsznUs2IVscHWsdHXs3IYs4IZs*k0s+k1s,k2s5I3s6I4s7I5s8I6s9I7sAn8s9s!I!seH#sfH$s#I%s$I's-k(s.k)s/k*s%I+s'I,s(I-s)I.s*I/s:sCi;sBn=sCn?s)E@s*E[s2H]s^s|C_s}C`s~C{s|s}s~s:katbtctvFdtwFetvjftPjgt;khtxFitQjjtRjktSjltTjmtUjntVjotwjptckqt=krtWjstJJMfNfKJOf+Esk,EtkPfQf@FukRfSfTfLJUfaDHmVfMJWf6Cvk7Cwk8CxkbDImNJXfOJYfPJZfQJ0f1f2f3f4f5f6f7f8f[Fyk]FzkAkBkCkDk^FEkFkGk9CHk!CIkJm#CJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~d|HaeZJytBKze5CAeZGBeiGCe0GDeEebeUlztce_d(E;d}Hde~H`dFeee{dAt+Ife,I|dGeCKHeIeaIgebIheiejekelemeAFBtCtDtEtFtGt-E* f K RJ+ g L LE, 9Eh M 0J- !Ei N HD. j O nb/ k P ob: l Q pbgh[h; Hnm R qbrbsbtbubvbwbxbybzbAbJn= Son S Kn? Too T @ p U [ 1J] ^ 2J_ ` 3J{ | 4J} ~ 5Jabbb6Jcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 MEdb2DC 7 eb3DD 8 NEfb4DE 9 OEgb#EF ! LnMnNnuGhbUoG # SJBbTJCbDbEb7JiboFH $ 8Jjb;EI % PEkbpFJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYe`CZe0e1e2e3e4e5e6e7eYG8eIDFbJDGbVbHbUJIbVJJbKbLbWJMbXJNbObPb3HHtItJt-IKt.ILt/IMt:INt;IOt=IPtQt9eBo*i+icI4HvG?I5HgHRtfKStwG6HgKTthH7HhKUtiK8H#iPnGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8ixG.E_FiH9HQnjK!HBF#H$HyGzG%HCFhhVtihCJWtjhRnXtYtZtjH0t=jlbzjdI1t(jkH2t@I3t[I4t]I5t^I6t_I7t`I8t+j9t{I!t|I#t}I$t~I%taJ'tbJ(tcJ)t,j*teI+tfI,t9J-tgI.thI/tiI:tjI;tkI=t!J?t#J@tlI[t$J]tmI^tnI_t%J`t'J{t(J|t)J}t*J~t+JauoIbupIcu,Jdu-JeuSn]hTnDJUn^h/Eb ?jEdAjFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nDK,n-nhuci.niujuglLlc DnkuEnlumuFnnuoupuquxjruyjsu-jtuuuvuwuxuyuzuAuBuCuDuEuFuGu.jHu/jIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXboe]upe^uYbZbqe_ure`ulH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVl{uWl|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPl/CwwxwkKlh9iywmhnhohph@nlKqhmKrh;l=lzwAw{j|j?lQl}j~jakbk.JBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w$C!w|k#w%C$wwl%w'C'wxl(w(C)wyl*w)C+wzl,w*C-w}k.w+C/wAl:w,C;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjxFh@lRlGh*jkxlx[n]nmxnxoxMCpx1jqxrxtisx9ftxGnux-CvxCjwx2jxx.Cyx^nHhzx_nmHAxnHBx`n{n|nyoCxzoDxAoEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1xPo2xQo3xCG4xDG5xEG6xRo7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojokoXl)x|bdJ}b~bJl*xacKl+xbc/Jcc:Jdcse,xWb+eYl-xZl.x0l/x1l:x2l;x3l=x4l?x5l@x6l[x7l]x8l^xecfcgchcicjckclcmcncocpcqczi_xAi`xBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COc)HPc*HQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c+H$coH%cpH'cqH(crH)csH*ctH+cuH,cvH-cwH.cxH/cyH:czH;cAH=cBH?cCH@cDH[c]c1GQbRb2GSbIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya nKxyoKyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjG9ljz!lkz,e#llz$lmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz%lZz'l0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e(l:z_e`e{e|e}e)l;z*lmb+l=z,l?z@z[z]z,i^z_z`z{z|zEH,H-l}z~zaA;i4GbA5GcA6GdAeJeA;JfA7GgAFHhAfJiA-HjAgJkAhJlAiJmAjJnA.HoAkJpAlJqAmJrAnJsAoJtApJuAqJvArJ/HsJwAtJxAuJyAvJzAwJAAxJBAyFCAyJDA:HEAzJFAAJGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpfQE!mRE#mSE$mqfrfsftfufTE%mUE'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfFGMAGGNAHGOAIGPAJGQAGHRAqISArITAsIUAtIVAuIWAvIXA(mYAHHZAwI0ACo1AIH2AJH3ApK4AqK5ArK6AsK7AtK8AuK9AxI!AKH#AgF$ALH%AyI'AzI(AAI)AMH*AvK+AwK,AxK-AyK.AVE/AWE:AXE;AYE=AZE?A0E@ABI[A1E]A2E^A3E_A4E`A5E{AKG|ALG}AJo~AMGaBNGbBzFcBoo;HdBOGeBKofBPGgBLohBQGiBRGjBkBlBSGmBnBTGoB=HpBGjpo6EqBDFrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBEFRBFFSBGFTBHFUBIFVBJFWBKFXBLFYBMFZBNF0BOF1BPF2BQF3BRF4BSF5BTF6BUF7BVF8BWF9BXF!BYF#BZF$B0F%B1F'B2F(B3F)B4F*B5F+B6F,B7F-B8F.B9F/B!F:B#F;B$F=B%F?B'F@B(F[B)F]B^B_B`B*F{B|B}B+F~BaC7EbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFC,FGC-FHCICJC.FKC
1018 except IndexError: 2hKiK
1019 raise ValueError(f"device_id must be within [0, {len(devices)}), got {device_id}") from None 2hKiK
1021 def _check_context_initialized(self) -> None:
1022 if not self._has_inited: 2#G$GqF%G'G(G)G*G+GrG,G-G.G/G:GTkEIFIGIHIII;GHjIj=i?isG@iJj=G?G[iKjUkLj@G]iVkJI[G^i_itGWk]GMjNjOj^G_GXk`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujKILIMINIOI*m+m,m-mYk`GPIQIZk0k1k2k3k.m/m:m;m=m?m@m[m$d%d'd(d)d*d+d,d-d.d/d:d~mrFKEsFtFRISI?HAm{G|G}GBm~GSlTl@H[HCmDm]Hjl4k-i.iBj5k6kklllmlnl7kolplqlrluFTI8k9k!k#k$k%kmn'i(i)ibLcLdLeLfLgLhLiL|L}L~Lkklkmknkokpkqkrkdlelfl-K.K/KZH0H1HFKBiUIaHbHVIWI'k(k)kXIYIZI0I1I^H_H`H{HGK{C2IcHdH3I4I*k+k,k5I6I7I8I9IIN!IeHfH#I$I-k.k/k%I'I(I)I*IHKCi)E*E2HhF|C}C~C:kIKJKvFwFvjPj;kxFQjRjSjTjUjVjwjJJMfNfKJOf+Esk,EtkPfQfukmLRfnLSfTfLJUfaDVfMJWfvkwkxkbDNJXfOJYfPJZfQJ0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkaMJkKkJNLkKNMkNkLNOkbMPkQkRkSkcM|HdMeM(E}H~HMNNN+I,IaIbIfMgMhMiMjMAFkMlMmMnMoMpMqMrMsMtMuMvMwMxMyMzMAMBMCMDMEM[hFMHnGMhGHMONPNQNRNSNTNUNVNoLWNXNIMJMKMLMMMNMOMPMQMRMSMTMUMVMWMXMYMZM0M1M2M3M4M5M6M7M8M9M!M#M$M%M'M(M)M*M+M,M-M.M/M:M;M=M?M@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNpNqNrNsNtNuNvNwNxNyNzNANBNCNDN-I.I/I:I;I=I*i+icI?I#i_LCJBJpLYNjH=jlbzjdI(jkH@I[I]I^I_I`I+j{I|I}I~IaJbJcJ,jeIfIgIhIiIjIkIlImInIoIpIZNDJ/E?jAjLC/F8Ec -j.j/joepeqere0NqL1NrL)j@j[j]j^jNlOl2N3NsL4NtL5N6NuLvL7N8N9NwL!NxLyLzLALBLCLDLELFL#NGLHLILJL$NKLLL%N'N(N)NML*NNL+N,NOLPL-N.N/NQL:NRLSLTLULVLWLXLYLZL;N0L1L2L3L=N4L5L?N@N[N]N6L^N7L_N`N8L9L{N|N}N!L~N#L$L%L'L(L)L*L+L,LaO-L.L/L:LbO;L=LcOdOeO_j`j9i{j|j}j~jakbk$i/i:i!i,KjL*jfOti9fGnkLgOmHnH(euiviwi)e*exi}dyi%iseziAiTKdi[lOmeiPm]l^l_lQmfiRmgiSm`l{l|lTmhihl}l~lamUma d e ( ) iiVmbmcmdmWmjiilemfmgmXmkiYmhmimjmZmli0mkmlmmm1mmi2mnmompm3mni4mqmrmsm5moi6mtmumvm7mpi8mwmxmym9meJFHfJ-HgJhJiJjJ.HkJlJmJnJoJpJqJrJsJtJuJvJwJxJyFyJ:HzJAJQERESETEUEFGGGHGIGJGGHqIrIsItIuIvI(mHHwICoIHJHxIKHgFLHyIzIAIMHBIKGLGJoMGNGzF;HOGKoPGLoQGRGSGTG=HGj6E7E
1023 raise CUDAError(
1024 f"Device {self._device_id} is not yet initialized, perhaps you forgot to call .set_current() first?"
1025 )
1026 Context_check_open(self._context) 2#G$GqF%G'G(G)G*G+GrG,G-G.G/G:GTkEIFIGIHIII;GHjIj=i?isG@iJj=G?G[iKjUkLj@G]iVkJI[G^i_itGWk]GMjNjOj^G_GXk`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujKILIMINIOI*m+m,m-mYk`GPIQIZk0k1k2k3k.m/m:m;m=m?m@m[m$d%d'd(d)d*d+d,d-d.d/d:d~mrFKEsFtFRISI?HAm{G|G}GBm~GSlTl@H[HCmDm]Hjl4k-i.iBj5k6kklllmlnl7kolplqlrluFTI8k9k!k#k$k%kmn'i(i)ibLcLdLeLfLgLhLiL|L}L~Lkklkmknkokpkqkrkdlelfl-K.K/KZH0H1HFKBiUIaHbHVIWI'k(k)kXIYIZI0I1I^H_H`H{HGK{C2IcHdH3I4I*k+k,k5I6I7I8I9IIN!IeHfH#I$I-k.k/k%I'I(I)I*IHKCi)E*E2HhF|C}C~C:kIKJKvFwFvjPj;kxFQjRjSjTjUjVjwjJJMfNfKJOf+Esk,EtkPfQfukmLRfnLSfTfLJUfaDVfMJWfvkwkxkbDNJXfOJYfPJZfQJ0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkaMJkKkJNLkKNMkNkLNOkbMPkQkRkSkcM|HdMeM(E}H~HMNNN+I,IaIbIfMgMhMiMjMAFkMlMmMnMoMpMqMrMsMtMuMvMwMxMyMzMAMBMCMDMEM[hFMHnGMhGHMONPNQNRNSNTNUNVNoLWNXNIMJMKMLMMMNMOMPMQMRMSMTMUMVMWMXMYMZM0M1M2M3M4M5M6M7M8M9M!M#M$M%M'M(M)M*M+M,M-M.M/M:M;M=M?M@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNpNqNrNsNtNuNvNwNxNyNzNANBNCNDN-I.I/I:I;I=I*i+icI?I#i_LCJBJpLYNjH=jlbzjdI(jkH@I[I]I^I_I`I+j{I|I}I~IaJbJcJ,jeIfIgIhIiIjIkIlImInIoIpIZNDJ/E?jAjLC/F8Ec -j.j/joepeqere0NqL1NrL)j@j[j]j^jNlOl2N3NsL4NtL5N6NuLvL7N8N9NwL!NxLyLzLALBLCLDLELFL#NGLHLILJL$NKLLL%N'N(N)NML*NNL+N,NOLPL-N.N/NQL:NRLSLTLULVLWLXLYLZL;N0L1L2L3L=N4L5L?N@N[N]N6L^N7L_N`N8L9L{N|N}N!L~N#L$L%L'L(L)L*L+L,LaO-L.L/L:LbO;L=LcOdOeO_j`j9i{j|j}j~jakbk$i/i:i!i,KjL*jfOti9fGnkLgOmHnH(euiviwi)e*exi}dyi%iseziAiTKdi[lOmeiPm]l^l_lQmfiRmgiSm`l{l|lTmhihl}l~lamUma d e ( ) iiVmbmcmdmWmjiilemfmgmXmkiYmhmimjmZmli0mkmlmmm1mmi2mnmompm3mni4mqmrmsm5moi6mtmumvm7mpi8mwmxmym9meJFHfJ-HgJhJiJjJ.HkJlJmJnJoJpJqJrJsJtJuJvJwJxJyFyJ:HzJAJQERESETEUEFGGGHGIGJGGHqIrIsItIuIvI(mHHwICoIHJHxIKHgFLHyIzIAIMHBIKGLGJoMGNGzF;HOGKoPGLoQGRGSGTG=HGj6E7E
1029 @classmethod
1030 def get_all_devices(cls) -> tuple[Device, ...]:
1031 """
1032 Query the available device instances.
1034 Returns
1035 -------
1036 tuple of Device
1037 A tuple containing instances of available devices.
1038 """
1039 return cls._get_all_devices_from_cuda_driver() 2In;dLnMnNnOnYJ4K5KKDLD6K7KMDvG=JPnxGQnNH8GyGzGRnOHNlOl/n:nAGBG;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokooHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHhlloilmo;iPHQHRHSHno?L@L[L]L^Loopo
1041 @classmethod
1042 def _get_all_devices_from_cuda_driver(cls):
1043 Device_ensure_cuda_initialized() 2In;dLnMnNnOnYJ4K5KKDLD6K7KMDvG=JPnxGQnNH8GyGzGRnOHNlOl/n:nAGBG;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokooHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHhlloilmo;iPHQHRHSHno?L@L[L]L^Loopo
1044 return tuple(Device_ensure_tls_devices(cls)) 2In;dLnMnNnOnYJ4K5KKDLD6K7KMDvG=JPnxGQnNH8GyGzGRnOHNlOl/n:nAGBG;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokooHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHhlloilmo;iPHQHRHSHno?L@L[L]L^Loopo
1046 def to_system_device(self) -> 'cuda.core.system.Device':
1047 """
1048 Get the corresponding :class:`cuda.core.system.Device` (which is used
1049 for NVIDIA Management Library (NVML) access) for this
1050 :class:`cuda.core.Device` (which is used for CUDA access).
1052 The devices are mapped to one another by their UUID.
1054 Returns
1055 -------
1056 cuda.core.system.Device
1057 The corresponding system-level device instance used for NVML access.
1058 """
1059 from cuda.core.system import Device as SystemDevice 2YJ4K5KKDLD6KMD(K)KUK
1060 return SystemDevice(uuid=self.uuid) 2YJ4K5KKDLD6KMD(K)KUK
1062 @property
1063 def device_id(self) -> int:
1064 """Return device ordinal."""
1065 return self._device_id 2MoNote=due?dve@dwe[dxe]dye^dqoroTljl4k-i.iEmFmBjsotouoklllmlvonl7kolplqlwoxorl'i(i)ibLcLdLeLfLgLhLiL|L}L~Lkklkmknkokpkqkrkdlelfl-K.K/KZH0H1HIJSO{C)E*E2HhF|C}C~CckMfNfOf+E,EPfQf@FRfSfTfUfaDVfWf8CbDXfYfZf0f1f2f3f4f5f6f7f8f[F]F^F#CcM|HZJBK5CZGiG0GTOdMeM(E}H~HCKaIbITH:EUHVHkG-E* AOBORJ+ `LLE, 9EpO0J- !EqOHD. {LEKhO/ FN: iOjO[h; hGJn= *KKn? +K@ [ 1J] ^ 2J_ ` 3J{ | 4J} ~ 5Jabbb6JcbCODOEOFOGOHOIOJOKOMEdb2DrOsOeb3DtONEfb4DuOOEgb#EvOuGhbSJTJpGqG7JibLO8JjbMOPEkbNOVKKKLKMKWKXKYKNKZKOK0KPKQK1KRK2K`CSKYGIDJDUGVbVGUJVJWGXGWJXJBo*i+i=J8GBF#HCFkOlOCJmOeIfI9JgIhIiIjIkI!J#JlI$JmInI%J'J(J)J*J+JoIpI,J-JDJ/E?jAjLCDKoepeqereNlOlGN/C9GkK9inOHNoOlKmK.JWH@k/i:i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhEhhk,KjL!GkLmHnHyozoAo3j(eDj4j5jEjjkuiviwi)e*exi6j7j8j9j!j#j$j}dFjyi%i%j'jdJJlKl/J:JseziAiNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4CoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDH1G3K2G3Gdieifigihia nKoKd e iijikiliminioipiyFQERESETEUE(mCoVEWEXEYEZE0E1E2E3E4E5EJoKoLoDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*FUO+F7E,F-F.F
1067 @property
1068 def pci_bus_id(self) -> str:
1069 """Return a PCI Bus Id string for this device."""
1070 bus_id = handle_return(runtime.cudaDeviceGetPCIBusId(13, self._device_id)) 27K#HUK
1071 return bus_id[:12].decode() 27K#HUK
1073 def can_access_peer(self, peer: Device | int) -> bool:
1074 """Check if this device can access memory from the specified peer device.
1076 Queries whether peer-to-peer memory access is supported between this
1077 device and the specified peer device.
1079 Parameters
1080 ----------
1081 peer : Device | int
1082 The peer device to check accessibility to. Can be a :obj:`~_device.Device` object or device ID.
1083 """
1084 peer = Device(peer)
1085 cdef int d1 = <int> self.device_id
1086 cdef int d2 = <int> peer.device_id
1087 if d1 == d2:
1088 return True
1089 cdef int value = 0
1090 with nogil:
1091 HANDLE_RETURN(cydriver.cuDeviceCanAccessPeer(&value, d1, d2))
1092 return bool(value)
1094 @property
1095 def uuid(self) -> str:
1096 """Return a UUID for the device.
1098 Returns 16-octets identifying the device. If the device is in
1099 MIG mode, returns its MIG UUID which uniquely identifies the
1100 subscribed MIG compute instance.
1102 Note
1103 ----
1104 MIG UUID is only returned when device is in MIG mode and the
1105 driver is older than CUDA 11.4.
1107 The UUID is cached after first access to avoid repeated CUDA API calls.
1109 """
1110 cdef cydriver.CUuuid uuid
1111 cdef cydriver.CUdevice dev
1112 cdef bytes uuid_b
1113 cdef str uuid_hex
1115 if self._uuid is None: 25CZGiG0G* f K + g L , h M - i N . j O nb/ k P ob: l Q pb; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbDbEbibH $ jbI % kbJ ' FbGbVbHbIbJbKbLbMbNbObPbYJ4K5KKDLD6K7KMD(K)KgHwGhHiHUKCFsh!fthuhvhwh#fxhyh%ezhAhBhCh'eDhEh9fCj2jQbRbSbTb:Kd e ( ) ;K=K8K9K
1116 dev = self._device_id 25CZGiG0G* f K + g L , h M - i N . j O nb/ k P ob: l Q pb; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbDbEbibH $ jbI % kbJ ' FbGbVbHbIbJbKbLbMbNbObPbYJKDLDMD(K)KgHwGhHiHUKCFsh!fthuhvhwh#fxhyh%ezhAhBhCh'eDhEh9fCj2jQbRbSbTb:Kd e ( ) ;K=K8K9K
1117 with nogil: 25CZGiG0G* f K + g L , h M - i N . j O nb/ k P ob: l Q pb; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbDbEbibH $ jbI % kbJ ' FbGbVbHbIbJbKbLbMbNbObPbYJKDLDMD(K)KgHwGhHiHUKCFsh!fthuhvhwh#fxhyh%ezhAhBhCh'eDhEh9fCj2jQbRbSbTb:Kd e ( ) ;K=K8K9K
1118 IF CUDA_CORE_BUILD_MAJOR == 12:
1119 HANDLE_RETURN(cydriver.cuDeviceGetUuid_v2(&uuid, dev))
1120 ELSE: # 13.0+
1121 HANDLE_RETURN(cydriver.cuDeviceGetUuid(&uuid, dev)) 25CZGiG0G* f K + g L , h M - i N . j O nb/ k P ob: l Q pb; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbDbEbibH $ jbI % kbJ ' FbGbVbHbIbJbKbLbMbNbObPbYJKDLDMD(K)KgHwGhHiHUKCFsh!fthuhvhwh#fxhyh%ezhAhBhCh'eDhEh9fCj2jQbRbSbTb:Kd e ( ) ;K=K8K9K
1122 uuid_b = cpython.PyBytes_FromStringAndSize(uuid.bytes, sizeof(uuid.bytes)) 25CZGiG0G* f K + g L , h M - i N . j O nb/ k P ob: l Q pb; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbDbEbibH $ jbI % kbJ ' FbGbVbHbIbJbKbLbMbNbObPbYJKDLDMD(K)KgHwGhHiHUKCFsh!fthuhvhwh#fxhyh%ezhAhBhCh'eDhEh9fCj2jQbRbSbTb:Kd e ( ) ;K=K8K9K
1123 uuid_hex = uuid_b.hex() 25CZGiG0G* f K + g L , h M - i N . j O nb/ k P ob: l Q pb; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbDbEbibH $ jbI % kbJ ' FbGbVbHbIbJbKbLbMbNbObPbYJKDLDMD(K)KgHwGhHiHUKCFsh!fthuhvhwh#fxhyh%ezhAhBhCh'eDhEh9fCj2jQbRbSbTb:Kd e ( ) ;K=K8K9K
1124 # 8-4-4-4-12
1125 self._uuid = f"{uuid_hex[:8]}-{uuid_hex[8:12]}-{uuid_hex[12:16]}-{uuid_hex[16:20]}-{uuid_hex[20:]}" 25CZGiG0G* f K + g L , h M - i N . j O nb/ k P ob: l Q pb; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbDbEbibH $ jbI % kbJ ' FbGbVbHbIbJbKbLbMbNbObPbYJKDLDMD(K)KgHwGhHiHUKCFsh!fthuhvhwh#fxhyh%ezhAhBhCh'eDhEh9fCj2jQbRbSbTb:Kd e ( ) ;K=K8K9K
1126 return self._uuid 25CZGiG0G* f K + g L , h M - i N . j O nb/ k P ob: l Q pb; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbDbEbibH $ jbI % kbJ ' FbGbVbHbIbJbKbLbMbNbObPbYJ4K5KKDLD6K7KMD(K)KgHwGhHiHUKCFsh!fthuhvhwh#fxhyh%ezhAhBhCh'eDhEh9fCj2jQbRbSbTb:Kd e ( ) ;K=K8K9K
1128 @property
1129 def name(self) -> str:
1130 """Return the device name."""
1131 # Use 256 characters to be consistent with CUDA Runtime
1132 cdef int LENGTH = 256 2qFrFKEsFtF?K@K[K]K^K_K`KuF{K|K}KFKBiGKHKCiIKJKvFwFxF5C.EBF~K
1133 cdef bytes name = bytes(LENGTH) 2qFrFKEsFtF?K@K[K]K^K_K`KuF{K|K}KFKBiGKHKCiIKJKvFwFxF5C.EBF~K
1134 cdef char* name_ptr = name 2qFrFKEsFtF?K@K[K]K^K_K`KuF{K|K}KFKBiGKHKCiIKJKvFwFxF5C.EBF~K
1135 cdef cydriver.CUdevice this_dev = self._device_id 2qFrFKEsFtF?K@K[K]K^K_K`KuF{K|K}KFKBiGKHKCiIKJKvFwFxF5C.EBF~K
1136 with nogil: 2qFrFKEsFtF?K@K[K]K^K_K`KuF{K|K}KFKBiGKHKCiIKJKvFwFxF5C.EBF~K
1137 HANDLE_RETURN(cydriver.cuDeviceGetName(name_ptr, LENGTH, this_dev)) 2qFrFKEsFtF?K@K[K]K^K_K`KuF{K|K}KFKBiGKHKCiIKJKvFwFxF5C.EBF~K
1138 name = name.split(b"\0")[0] 2qFrFKEsFtF?K@K[K]K^K_K`KuF{K|K}KFKBiGKHKCiIKJKvFwFxF5C.EBF~K
1139 return name.decode() 2qFrFKEsFtF?K@K[K]K^K_K`KuF{K|K}KFKBiGKHKCiIKJKvFwFxF5C.EBF~K
1141 @property
1142 def properties(self) -> DeviceProperties:
1143 """Return a :obj:`~_device.DeviceProperties` class with information about the device."""
1144 if self._properties is None: 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoNDODPDQDRDSD/f:f;f=f?f@fTD*m+m,m-mYkDoEoZk0k1k2k3k.m/m:m;m=m?m@m[mFoUDVDWDXDYDZD]m^mte=dKd[f$d%d]fyd^f_f`f{f|fue?dLd}f'd(d~fzdagbgcgdgegfggghgigjgkglgmgngogpgqgve@dMdrg)d*dsgAdtgugvgwgxgwe[dNdyg+d,dzgBdAgBgCgDgEgxe]dOdFg-d.dGgCdHgIgJgKgLgye^dPdMg/d:dNgDdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!gGo0D_m`m{m|m1D}mHo~mIoanbncndnenfnqognhninjnknroAmBmSlTlCmDmjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorlln8k9k!k#k$k%kmn#g$g%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhchdhehfhBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCnhF:kvjPj;kQjRjSjTjUjVjwjck=kWj6C7C8C9C!C#C~daezeAeBeCeDeEebeUlce_d(E;dde`dFeee{dfe|dGeHeIegeheiejekelemeTH:EUHVHkG* f K + g L , 9Eh M - !Ei N . j EKO nb/ k P ob: l Q pbgh[h; Hnm hGR qbrbsbtbubvbwbxbybzbAb= Son S ? Too T @ p U [ ] ^ _ ` { | } ~ abbbcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 db2DC 7 eb3DD 8 fb4DE 9 gb#EF ! hbUoG # BbCbpGDbqGEbiboFH $ jb;EI % kbpFJ ' VKJeKKKeLKLeMKMeWKNeXKOeYKPeNKQeZKReOKSe0KTePKUeQKVe1KWeRKXe2KYe`CZeSK0e#K1e2e3e4e$K5e%K6e'K7eYG8eFbGbUGVbVGHbIbJbWGKbXGLbMbNbXHObYHPb9eBoGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8ihhihjhlb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqerelH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$ekh/C9Glh9imhnhohphqhrhCIWHsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0jFhGh!GMC1jDIti9fGn-CCj2j.CHhyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoRo$j;j}dFjyi%i%j'jXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAiBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COc)HPc*HQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c+H$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTb^cJhQdKhLh_cRdMhNh`c{cOhSdPhQh|cTdRhSh}c$fGd%f'f~cHd(f)fada d e ( ) bdcdThUdUhVhddVdWhXhedfdgdhd*fId+f,fidJd-f.fjdYhWdZh0hkdXd1h2hld3hYd4h5hmdZd6h7hnd8h0d9h!hod1d#h$hpd%h2d'h(hqd3d)h*hrd+h4d,h-hsd5d.h/htdud:h6d;h=hvd7d?h@hwdxdjG9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l,iEH-l;i~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLf
1145 self._properties = DeviceProperties._init(self._device_id) 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoNDODPDQDRDSD/f:f;f=f?f@fTD*m+m,m-mYkDoEoZk0k1k2k3k.m/m:m;m=m?m@m[mFoUDVDWDXDYDZD]m^mte=dKd[f$d%d]fyd^f_f`f{f|fue?dLd}f'd(d~fzdagbgcgdgegfggghgigjgkglgmgngogpgqgve@dMdrg)d*dsgAdtgugvgwgxgwe[dNdyg+d,dzgBdAgBgCgDgEgxe]dOdFg-d.dGgCdHgIgJgKgLgye^dPdMg/d:dNgDdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!gGo0D_m`m{m|m1D}mHo~mIoanbncndnenfnqognhninjnknroAmBmSlTlCmDmjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorlln8k9k!k#k$k%kmn#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCnhF:kvjPj;kQjRjSjTjUjVjwjck=kWj6C7C8C9C!C#C~daezeAeBeCeDeEebeUlce_d;dde`dFeee{dfe|dGeHeIegeheiejekelemeTH:EUHVHkG* f K + g L , h M - i N . j O nb/ k P ob: l Q pbgh; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbDbEbibH $ jbI % kbJ ' JeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbVbHbIbJbKbLbMbNbObPb9eGmOiDiPiQiRiEiFiGiqiXjOoSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8ihhihjhlb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$ekh/C9Glh9imhnhohphqhrhCIWHsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0jFhGh!GMC1jDIti9fGn-CCj2j.CHhyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoRo$j;j}dFjyi%i%j'jXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAircsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTb^cJhQdKhLh_cRdMhNh`c{cOhSdPhQh|cTdRhSh}c$fGd%f'f~cHd(f)fada d e ( ) bdcdThUdUhVhddVdWhXhedfdgdhd*fId+f,fidJd-f.fjdYhWdZh0hkdXd1h2hld3hYd4h5hmdZd6h7hnd8h0d9h!hod1d#h$hpd%h2d'h(hqd3d)h*hrd+h4d,h-hsd5d.h/htdud:h6d;h=hvd7d?h@hwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l;i~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLf
1147 return self._properties 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoNDODPDQDRDSD/f:f;f=f?f@fTD*m+m,m-mYkDoEoZk0k1k2k3k.m/m:m;m=m?m@m[mFoUDVDWDXDYDZD]m^mte=dKd[f$d%d]fyd^f_f`f{f|fue?dLd}f'd(d~fzdagbgcgdgegfggghgigjgkglgmgngogpgqgve@dMdrg)d*dsgAdtgugvgwgxgwe[dNdyg+d,dzgBdAgBgCgDgEgxe]dOdFg-d.dGgCdHgIgJgKgLgye^dPdMg/d:dNgDdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!gGo0D_m`m{m|m1D}mHo~mIoanbncndnenfnqognhninjnknroAmBmSlTlCmDmjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorlln8k9k!k#k$k%kmn#g$g%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhchdhehfhBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCnhF:kvjPj;kQjRjSjTjUjVjwjck=kWj6C7C8C9C!C#C~daezeAeBeCeDeEebeUlce_d(E;dde`dFeee{dfe|dGeHeIegeheiejekelemeTH:EUHVHkG* f K + g L , 9Eh M - !Ei N . j EKO nb/ k P ob: l Q pbgh[h; Hnm hGR qbrbsbtbubvbwbxbybzbAb= Son S ? Too T @ p U [ ] ^ _ ` { | } ~ abbbcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 db2DC 7 eb3DD 8 fb4DE 9 gb#EF ! hbUoG # BbCbpGDbqGEbiboFH $ jb;EI % kbpFJ ' VKJeKKKeLKLeMKMeWKNeXKOeYKPeNKQeZKReOKSe0KTePKUeQKVe1KWeRKXe2KYe`CZeSK0e#K1e2e3e4e$K5e%K6e'K7eYG8eFbGbUGVbVGHbIbJbWGKbXGLbMbNbXHObYHPb9eBoGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8ihhihjhlb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqerelH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$ekh/C9Glh9imhnhohphqhrhCIWHsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0jFhGh!GMC1jDIti9fGn-CCj2j.CHhyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoRo$j;j}dFjyi%i%j'jXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAiBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COc)HPc*HQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c+H$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTb^cJhQdKhLh_cRdMhNh`c{cOhSdPhQh|cTdRhSh}c$fGd%f'f~cHd(f)fada d e ( ) bdcdThUdUhVhddVdWhXhedfdgdhd*fId+f,fidJd-f.fjdYhWdZh0hkdXd1h2hld3hYd4h5hmdZd6h7hnd8h0d9h!hod1d#h$hpd%h2d'h(hqd3d)h*hrd+h4d,h-hsd5d.h/htdud:h6d;h=hvd7d?h@hwdxdjG9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l,iEH-l;i~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLf
1149 @property
1150 def resources(self) -> DeviceResources:
1151 """Return the hardware resource query namespace for this device."""
1152 if self._resources is None: 2Sn]hTnUn^hb EdFd_h`h{h|h}h~haibiVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-nci.n
1153 self._resources = DeviceResources._init(self._device_id) 2Sn]hTnUn^hb EdFd_h`h{h|h}h~haibiVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-nci.n
1154 return self._resources 2Sn]hTnUn^hb EdFd_h`h{h|h}h~haibiVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-nci.n
1156 @property
1157 def compute_capability(self) -> ComputeCapability:
1158 """Return a named tuple with 2 fields: major and minor."""
1159 cdef DeviceProperties prop = self.properties 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujYkDoEoZk0k1k2k3kFo]m^mKdydLdzdMdAdNdBdOdCdPdDdGo_m`m{m|m}mHoIoanbncndnenfngnhninjnkn-i.iEmFmBj5k6kln8k9k!k#k$k%kkklkmknkokpkqkrkdlelflBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCn:kvjPj;kQjRjSjTjUjVjwj[hHnhG9eBolb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqerelH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b(e)e*eXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAircsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOc)HPc*HQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c+H$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^cQd_cRd`c{cSd|cTd}cGd~cHdada bdcdUdddVdedfdgdhdIdidJdjdWdkdXdldYdmdZdnd0dod1dpd2dqd3drd4dsd5dtdud6dvd7dwdxdjG9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l,iEH-l8d9d!d#d
1160 cached = prop._cache.get("compute_capability") 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujYkDoEoZk0k1k2k3kFo]m^mKdydLdzdMdAdNdBdOdCdPdDdGo_m`m{m|m}mHoIoanbncndnenfngnhninjnkn-i.iEmFmBj5k6kln8k9k!k#k$k%kkklkmknkokpkqkrkdlelflBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCn:kvjPj;kQjRjSjTjUjVjwj[hHnhG9eBolb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqerelH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b(e)e*eXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAircsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOc)HPc*HQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c+H$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^cQd_cRd`c{cSd|cTd}cGd~cHdada bdcdUdddVdedfdgdhdIdidJdjdWdkdXdldYdmdZdnd0dod1dpd2dqd3drd4dsd5dtdud6dvd7dwdxdjG9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l,iEH-l8d9d!d#d
1161 if cached is not None: 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujYkDoEoZk0k1k2k3kFo]m^mKdydLdzdMdAdNdBdOdCdPdDdGo_m`m{m|m}mHoIoanbncndnenfngnhninjnkn-i.iEmFmBj5k6kln8k9k!k#k$k%kkklkmknkokpkqkrkdlelflBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCn:kvjPj;kQjRjSjTjUjVjwj[hHnhG9eBolb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqerelH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b(e)e*eXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAircsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOc)HPc*HQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c+H$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^cQd_cRd`c{cSd|cTd}cGd~cHdada bdcdUdddVdedfdgdhdIdidJdjdWdkdXdldYdmdZdnd0dod1dpd2dqd3drd4dsd5dtdud6dvd7dwdxdjG9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l,iEH-l8d9d!d#d
1162 return cached 2Ubkklkmknkokpkqkrkdlelfl9e+j,jb EdFd-j.j/jXboepeYbZbqerelH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b(e)e*eXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAircsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOc)HPc*HQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c+H$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}cGd~cHdada bdcdddedfdgdhdIdidJdjdkdldmdndodpdqdrdsdtdudvdwdxdjG9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l,iEH-l
1163 cc = ComputeCapability(prop.compute_capability_major, prop.compute_capability_minor) 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujYkDoEoZk0k1k2k3kFo]m^mKdydLdzdMdAdNdBdOdCdPdDdGo_m`m{m|m}mHoIoanbncndnenfngnhninjnkn-i.iEmFmBj5k6kln8k9k!k#k$k%kkklkmknkokpkqkrkdlelflBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCn:kvjPj;kQjRjSjTjUjVjwj[hHnhG9eBolb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b(e)e*eXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAircsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^cQd_cRd`c{cSd|cTd}cGd~cHdada bdcdUdddVdedfdgdhdIdidJdjdWdkdXdldYdmdZdnd0dod1dpd2dqd3drd4dsd5dtdud6dvd7dwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l8d9d!d#d
1164 return prop._cache.setdefault("compute_capability", cc) 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujYkDoEoZk0k1k2k3kFo]m^mKdydLdzdMdAdNdBdOdCdPdDdGo_m`m{m|m}mHoIoanbncndnenfngnhninjnkn-i.iEmFmBj5k6kln8k9k!k#k$k%kkklkmknkokpkqkrkdlelflBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCn:kvjPj;kQjRjSjTjUjVjwj[hHnhG9eBolb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b(e)e*eXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAircsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^cQd_cRd`c{cSd|cTd}cGd~cHdada bdcdUdddVdedfdgdhdIdidJdjdWdkdXdldYdmdZdnd0dod1dpd2dqd3drd4dsd5dtdud6dvd7dwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l8d9d!d#d
1166 @property
1167 def arch(self) -> str:
1168 """Return compute capability as a string (e.g., '75' for CC 7.5)."""
1169 return f"{self.compute_capability.major}{self.compute_capability.minor}" 2Ubkklkmknkokpkqkrkdlelfl9e,jb EdFd-j.j/jXboepeYbZbqerelH0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b(e)e*eXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAircsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cada bdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdjG9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l,iEH-l
1171 @property
1172 def context(self) -> Context:
1173 """Return the :obj:`~_context.Context` associated with this device.
1175 Note
1176 ----
1177 Device must be initialized.
1179 """
1180 self._check_context_initialized() 2#i_LCJBJpLLCPmSmhla VmilYm0m2m4m6m8myF
1181 return self._context 2#i_LCJBJpLLCPmSmhla VmilYm0m2m4m6m8myF
1183 @property
1184 def memory_resource(self) -> MemoryResource:
1185 """Return :obj:`~_memory.MemoryResource` associated with this device."""
1186 cdef int attr, device_id
1187 if self._memory_resource is None: 2'i(i)i{C)E*E|C}C~CMfNfOf+E,EOOPfPOQf@FRfSfTfUfaDVfWfbDXfYfZf0f1f2f3f4f5f6f7f8f[F]F^F`C*i+i/E?jAjoepeqereNlOl}dseziAidieifigihia iijikiliminioipiQERESETEUE(mCoVEWEXEYEZE0E1E2E3E4E5EJoKoLoDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F7E,F-F.F
1188 # If the device is in TCC mode, or does not support memory pools for some other reason,
1189 # use the SynchronousMemoryResource which does not use memory pools.
1190 device_id = self._device_id 2'i(i)i{C)E*E|C}C~CMfNfOf+E,EPfQf@FRfSfTfUfaDVfWfbDXfYfZf0f1f2f3f4f5f6f7f8f[F]F^F`C*i+i/E?jAjoepeqereNlOl}dseziAidieifigihia iijikiliminioipiQERESETEUE(mCoVEWEXEYEZE0E1E2E3E4E5EJoKoLoDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F7E,F-F.F
1191 with nogil: 2'i(i)i{C)E*E|C}C~CMfNfOf+E,EPfQf@FRfSfTfUfaDVfWfbDXfYfZf0f1f2f3f4f5f6f7f8f[F]F^F`C*i+i/E?jAjoepeqereNlOl}dseziAidieifigihia iijikiliminioipiQERESETEUE(mCoVEWEXEYEZE0E1E2E3E4E5EJoKoLoDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F7E,F-F.F
1192 HANDLE_RETURN( 2'i(i)i{C)E*E|C}C~CMfNfOf+E,EPfQf@FRfSfTfUfaDVfWfbDXfYfZf0f1f2f3f4f5f6f7f8f[F]F^F`C*i+i/E?jAjoepeqereNlOl}dseziAidieifigihia iijikiliminioipiQERESETEUE(mCoVEWEXEYEZE0E1E2E3E4E5EJoKoLoDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F7E,F-F.F
1193 cydriver.cuDeviceGetAttribute( 2'i(i)i{C)E*E|C}C~CMfNfOf+E,EPfQf@FRfSfTfUfaDVfWfbDXfYfZf0f1f2f3f4f5f6f7f8f[F]F^F`C*i+i/E?jAjoepeqereNlOl}dseziAidieifigihia iijikiliminioipiQERESETEUE(mCoVEWEXEYEZE0E1E2E3E4E5EJoKoLoDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F7E,F-F.F
1194 &attr, cydriver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED, device_id
1195 )
1196 )
1197 if attr == 1: 2'i(i)i{C)E*E|C}C~CMfNfOf+E,EPfQf@FRfSfTfUfaDVfWfbDXfYfZf0f1f2f3f4f5f6f7f8f[F]F^F`C*i+i/E?jAjoepeqereNlOl}dseziAidieifigihia iijikiliminioipiQERESETEUE(mCoVEWEXEYEZE0E1E2E3E4E5EJoKoLoDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F7E,F-F.F
1198 from cuda.core._memory import DeviceMemoryResource 2'i(i)i{C)E*E|C}C~CMfNfOf+E,EPfQf@FRfSfTfUfaDVfWfbDXfYfZf0f1f2f3f4f5f6f7f8f[F]F^F`C*i+i/E?jAjoepeqereNlOl}dseziAidieifigihia iijikiliminioipiQERESETEUE(mCoVEWEXEYEZE0E1E2E3E4E5EJoKoLoDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F7E,F-F.F
1199 self._memory_resource = DeviceMemoryResource(self._device_id) 2'i(i)i{C)E*E|C}C~CMfNfOf+E,EPfQf@FRfSfTfUfaDVfWfbDXfYfZf0f1f2f3f4f5f6f7f8f[F]F^F`C*i+i/E?jAjoepeqereNlOl}dseziAidieifigihia iijikiliminioipiQERESETEUE(mCoVEWEXEYEZE0E1E2E3E4E5EJoKoLoDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F7E,F-F.F
1200 else:
1201 from cuda.core._memory._synchronous_memory_resource import ( 2{C)E*E|C}C~CMfNfOf+E,EPfQf@FRfSfTfUfaDVfWfbDXfYfZf0f1f2f3f4f5f6f7f8f[F]F^F*i+i/E?jAjoepeqereNlOlsedieifigihia iijikiliminioipiQERESETEUE(mCoVEWEXEYEZE0E1E2E3E4E5EJoKoLoDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F7E,F-F.F
1202 _SynchronousMemoryResource,
1203 )
1204 self._memory_resource = _SynchronousMemoryResource( 2{C)E*E|C}C~CMfNfOf+E,EPfQf@FRfSfTfUfaDVfWfbDXfYfZf0f1f2f3f4f5f6f7f8f[F]F^F*i+i/E?jAjoepeqereNlOlsedieifigihia iijikiliminioipiQERESETEUE(mCoVEWEXEYEZE0E1E2E3E4E5EJoKoLoDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F7E,F-F.F
1205 self._device_id, self._context) 2{C)E*E|C}C~CMfNfOf+E,EPfQf@FRfSfTfUfaDVfWfbDXfYfZf0f1f2f3f4f5f6f7f8f[F]F^F*i+i/E?jAjoepeqereNlOlsedieifigihia iijikiliminioipiQERESETEUE(mCoVEWEXEYEZE0E1E2E3E4E5EJoKoLoDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F7E,F-F.F
1207 return self._memory_resource 2'i(i)i{C)E*E|C}C~CMfNfOf+E,EOOPfPOQf@FRfSfTfUfaDVfWfbDXfYfZf0f1f2f3f4f5f6f7f8f[F]F^F`C*i+i/E?jAjoepeqereNlOl}dseziAidieifigihia iijikiliminioipiQERESETEUE(mCoVEWEXEYEZE0E1E2E3E4E5EJoKoLoDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F7E,F-F.F
1209 @memory_resource.setter
1210 def memory_resource(self, MemoryResource mr not None: MemoryResource) -> None:
1211 self._memory_resource = mr
1213 @property
1214 def default_stream(self) -> Stream:
1215 """Return a default CUDA :obj:`~_stream.Stream` token.
1217 The type of default stream returned depends on if the environment
1218 variable CUDA_PYTHON_CUDA_PER_THREAD_DEFAULT_STREAM is set.
1220 If set, returns a per-thread default stream. Otherwise returns
1221 the legacy stream.
1223 A default-stream token uses the device that is current when the token
1224 is used.
1226 """
1227 return default_stream() 2qorojl4k-i.isotouoklllmlvonl7kolplqlwoxorlck=kWjVO_d`d{d|dfMgMhMiMjMRJ`LLE9EpO0J!EqOHD{LEKFNWOXOYOJnSo*KKnTo+KZO1J0O2J1O3J2O4J3O5J4O6J5OiFjF6O7OkFlF8O9OmFnF!O#OCODOEO$OFOGOHO%OIOJOKOME2DrOsO3DtONE4DuOOE#EvOuGUoSJTJpGqG7JoFLO8J;EMOPEpFNOKKLKMKNKOKPKQKRK`CSKIDJDUGVGUJVJWGXGWJXJ*i+iglLlxjyj'O(O)O*O+O,O-O.O/O:O;O=O?O@O[O]O^O_O`O{O|O}O~OaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvP`F{F|F}F~FaGbGcGdGeGfGgGwPNlOlGNPl/C9G9iHNWHdk$ixP/i:i!ifk!fgk#f|k}kYj%eZj'ehk~k0j,K!GMC1jti9fGndieifigihia d e iijikiliminioipi;JQERESETEUECoVEWEXEYEZE0E1E2E3E4E5EJoKoLoDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F7E,F-F.F
1229 def __int__(self) -> int:
1230 """Return device_id."""
1231 return self._device_id 2-K.K/KIJ*i+i
1233 def __repr__(self) -> str:
1234 return f"<Device {self._device_id} ({self.name})>" 2qFrFKEsFtF?K@K[K]K^K_K`KuF{K|K}KFKBiGKHKCiIKJKvFwFxF5C.E~K
1236 def __hash__(self) -> int:
1237 return hash(self.uuid) 25CZGiG0G* f K + g L , h M - i N . j O nb/ k P ob: l Q pb; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbDbEbibH $ jbI % kbJ ' FbGbVbHbIbJbKbLbMbNbObPbgHwGhHiHsh!fthuhvhwh#fxhyh%ezhAhBhCh'eDhEh9fCj2jQbRbSbTb:Kd e ( ) ;K=K8K9K
1239 def __eq__(self, other: object) -> bool:
1240 if not isinstance(other, Device): 2|H5CiG(E}H~HaIbI* f K + g L , h M - i N . j O nb/ k P ob: l Q pb; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbDbEbibH $ jbI % kbJ ' FbGbHbIbJbKbLbMbNbObPbfKwGgKjKsh!fthuhvhwh#fxhyh%ezhAhBhCh'eDhEh9fCj2jQbRbSbTbwOQOd e ( ) 8K9K:H;HGj
1241 return NotImplemented 25CiGjKwOQO:H
1242 return self._device_id == other._device_id 2|H5C(E}H~HaIbI* f K + g L , h M - i N . j O nb/ k P ob: l Q pb; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbDbEbibH $ jbI % kbJ ' FbGbHbIbJbKbLbMbNbObPbfKwGgKsh!fthuhvhwh#fxhyh%ezhAhBhCh'eDhEh9fCj2jQbRbSbTbwOd e ( ) 8K9K;HGj
1244 def __reduce__(self) -> tuple[object, ...]:
1245 return Device, (self.device_id,) 2-EAOBORJ`LLE9EpO0J!EqOHD{LEK[hJnKn1J2J3J4J5J6JME2DrOsO3DtONE4DuOOE#EvOuGSJTJpGqG7J8JPEIDJDUJVJWJXJnKoK
1247 def set_current(self, Context ctx: Context | None = None) -> Context | None:
1248 """Set device to be used for GPU executions.
1250 Initializes CUDA and sets the calling thread to a valid CUDA
1251 context. By default the primary context is used, but optional `ctx`
1252 parameter can be used to explicitly supply a :obj:`~_context.Context` object.
1254 Providing a `ctx` causes the previous set context to be popped and returned.
1256 If `ctx` was created on a different device than this receiver, the call
1257 is delegated to that device's own :meth:`set_current`. This keeps the
1258 owning device's bookkeeping consistent and lets a context this method
1259 handed out for a foreign device be pushed back through any ``Device``
1260 object, matching the CUDA context stack's own thread-wide semantics.
1262 Parameters
1263 ----------
1264 ctx : :obj:`~_context.Context`, optional
1265 Optional context to push onto this device's current thread stack.
1267 Returns
1268 -------
1269 :obj:`~_context.Context`, optional
1270 The previous context, or ``None`` if no context was current. When
1271 returned, its ``device_id`` identifies the device that was
1272 previously current.
1274 Examples
1275 --------
1276 Acts as an entry point of this object. Users always start a code by
1277 calling this method, e.g.
1279 >>> from cuda.core import Device
1280 >>> dev0 = Device(0)
1281 >>> dev0.set_current()
1282 >>> # ... do work on device 0 ...
1284 """
1285 cdef ContextHandle h_context
1286 cdef cydriver.CUcontext prev_ctx, curr_ctx
1287 cdef cydriver.CUdevice prev_dev
1288 cdef Context prev_owned = None 2VoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptckqt=krtWjstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeUlztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeAFBtCt:EDtEtFtGt* f K + g L , h M - i N . j O nb/ k P ob: l Q pbgh; m R qbrbsbtbubvbwbxbybzbAbJn= Son *KS Kn? Too +KT @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! LnMnNnuGhbUoG aL# BbCbDbEbibH $ jbI % kbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbVbHbIbJbKbLbMbNbObPb3HHtItJtKtLtMtNtOtPtQt*i+i4HvG5HRtSt6HTt7H=JUt8H#iPnxG.E_F9HQn!H$HyGzG%HhhVtihWtjhRnBJXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueuSn]hTnUn^hb EdFdEJ_h`h{hfuLC|h}hFJ~hai/FbiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-nhuGJciHJ.niujuglLlc kulumunuoupuquxjruyjsutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlh9iywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w!w|k#w$wwl%w'wxl(w)wyl*w+wzl,w-w}k.w/wAl:w;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjxFh@lRlGh*jkxlx[n]nmxnxoxpx1jqxrxtisxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1x2x3xCG4xDG5xEG6x7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c1GQb3KRb2GSbTKIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;zmb=z?z@z[z]z,i^z_z`z{z|z,H}z~zaA4GbA5GcA6GdAeAfA7GgAhAiAjAkAlAmAnAoApAqArAsAtAuAvA/HwAxAyAzAAABAyFCADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC
1290 if ctx is not None: 2VoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptckqt=krtWjstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeUlztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeAFBtCt:EDtEtFtGt* f K + g L , h M - i N . j O nb/ k P ob: l Q pbgh; m R qbrbsbtbubvbwbxbybzbAbJn= Son *KS Kn? Too +KT @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! LnMnNnuGhbUoG aL# BbCbDbEbibH $ jbI % kbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbVbHbIbJbKbLbMbNbObPb3HHtItJtKtLtMtNtOtPtQt*i+i4HvG5HRtSt6HTt7H=JUt8H#iPnxG.E_F9HQn!H$HyGzG%HhhVtihWtjhRnBJXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueuSn]hTnUn^hb EdFdEJ_h`h{hfuLC|h}hFJ~hai/FbiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-nhuGJciHJ.niujuglLlc kulumunuoupuquxjruyjsutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlh9iywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w!w|k#w$wwl%w'wxl(w)wyl*w+wzl,w-w}k.w/wAl:w;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjxFh@lRlGh*jkxlx[n]nmxnxoxpx1jqxrxtisxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1x2x3xCG4xDG5xEG6x7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c1GQb3KRb2GSbTKIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;zmb=z?z@z[z]z,i^z_z`z{z|z,H}z~zaA4GbA5GcA6GdAeAfA7GgAhAiAjAkAlAmAnAoApAqArAsAtAuAvA/HwAxAyAzAAABAyFCADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC
1291 Context_check_open(ctx) 2BJEJLCFJ/FGJHJ
1292 if ctx._device_id != self._device_id: 2BJEJLCFJ/FGJ
1293 # The CUDA context stack is per-thread, not per-Device-object,
1294 # so pushing/popping a foreign-device context is delegated to
1295 # the device that owns it; its own bookkeeping (_context,
1296 # _has_inited) is what should track this push, not ours.
1297 return Device(ctx._device_id).set_current(ctx)
1298 if self._has_inited and self._context is not None: 2BJEJLCFJ/FGJ
1299 prev_owned = self._context 2BJEJLCFJ/FGJ
1300 curr_ctx = as_cu(ctx._h_context) 2BJEJLCFJ/FGJ
1301 prev_ctx = NULL 2BJEJLCFJ/FGJ
1302 with nogil: 2BJEJLCFJ/FGJ
1303 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&prev_ctx)) 2BJEJLCFJ/FGJ
1304 if prev_ctx != NULL: 2BJEJLCFJ/FGJ
1305 HANDLE_RETURN(cydriver.cuCtxGetDevice(&prev_dev)) 2EJLCFJ/FGJ
1306 # cuCtxSetCurrent replaces the top of the thread's context stack
1307 # in one driver call (or binds ctx when nothing is current), so
1308 # a failure leaves the previous context current instead of
1309 # leaving the thread with no context, as a failed pop-then-push
1310 # would.
1311 HANDLE_RETURN(cydriver.cuCtxSetCurrent(curr_ctx)) 2BJEJLCFJ/FGJ
1312 self._has_inited = True 2BJEJLCFJ/FGJ
1313 self._context = ctx # Store owning context reference 2BJEJLCFJ/FGJ
1314 if prev_ctx != NULL: 2BJEJLCFJ/FGJ
1315 if prev_owned is not None and as_cu(prev_owned._h_context) == prev_ctx: 2EJLCFJ/FGJ
1316 return prev_owned 2EJLCFJ/FGJ
1317 return Context._from_handle( 2LC
1318 Context, create_context_handle_ref(prev_ctx), <int>prev_dev) 2LC
1319 else:
1320 # use primary ctx
1321 h_context = get_primary_context(self._device_id) 2VoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptckqt=krtWjstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeUlztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeAFBtCt:EDtEtFtGt* f K + g L , h M - i N . j O nb/ k P ob: l Q pbgh; m R qbrbsbtbubvbwbxbybzbAbJn= Son *KS Kn? Too +KT @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! LnMnNnuGhbUoG aL# BbCbDbEbibH $ jbI % kbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbVbHbIbJbKbLbMbNbObPb3HHtItJtKtLtMtNtOtPtQt*i+i4HvG5HRtSt6HTt7H=JUt8H#iPnxG.E_F9HQn!H$HyGzG%HhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-nhuci.niujuglLlc kulumunuoupuquxjruyjsutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlh9iywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w!w|k#w$wwl%w'wxl(w)wyl*w+wzl,w-w}k.w/wAl:w;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjxFh@lRlGh*jkxlx[n]nmxnxoxpx1jqxrxtisxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1x2x3xCG4xDG5xEG6x7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c1GQb3KRb2GSbTKIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;zmb=z?z@z[z]z,i^z_z`z{z|z,H}z~zaA4GbA5GcA6GdAeAfA7GgAhAiAjAkAlAmAnAoApAqArAsAtAuAvA/HwAxAyAzAAABAyFCADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC
1322 if h_context.get() == NULL: 2VoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptckqt=krtWjstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeUlztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeAFBtCt:EDtEtFtGt* f K + g L , h M - i N . j O nb/ k P ob: l Q pbgh; m R qbrbsbtbubvbwbxbybzbAbJn= Son *KS Kn? Too +KT @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! LnMnNnuGhbUoG aL# BbCbDbEbibH $ jbI % kbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbVbHbIbJbKbLbMbNbObPb3HHtItJtKtLtMtNtOtPtQt*i+i4HvG5HRtSt6HTt7H=JUt8H#iPnxG.E_F9HQn!H$HyGzG%HhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-nhuci.niujuglLlc kulumunuoupuquxjruyjsutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlh9iywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w!w|k#w$wwl%w'wxl(w)wyl*w+wzl,w-w}k.w/wAl:w;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjxFh@lRlGh*jkxlx[n]nmxnxoxpx1jqxrxtisxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1x2x3xCG4xDG5xEG6x7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c1GQb3KRb2GSbTKIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;zmb=z?z@z[z]z,i^z_z`z{z|z,H}z~zaA4GbA5GcA6GdAeAfA7GgAhAiAjAkAlAmAnAoApAqArAsAtAuAvA/HwAxAyAzAAABAyFCADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC
1323 HANDLE_RETURN(get_last_error())
1324 raise RuntimeError(
1325 f"Failed to retain the primary context for device {self._device_id}"
1326 )
1327 with nogil: 2VoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptckqt=krtWjstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeUlztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeAFBtCt:EDtEtFtGt* f K + g L , h M - i N . j O nb/ k P ob: l Q pbgh; m R qbrbsbtbubvbwbxbybzbAbJn= Son *KS Kn? Too +KT @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! LnMnNnuGhbUoG aL# BbCbDbEbibH $ jbI % kbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbVbHbIbJbKbLbMbNbObPb3HHtItJtKtLtMtNtOtPtQt*i+i4HvG5HRtSt6HTt7H=JUt8H#iPnxG.E_F9HQn!H$HyGzG%HhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-nhuci.niujuglLlc kulumunuoupuquxjruyjsutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlh9iywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w!w|k#w$wwl%w'wxl(w)wyl*w+wzl,w-w}k.w/wAl:w;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjxFh@lRlGh*jkxlx[n]nmxnxoxpx1jqxrxtisxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1x2x3xCG4xDG5xEG6x7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c1GQb3KRb2GSbTKIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;zmb=z?z@z[z]z,i^z_z`z{z|z,H}z~zaA4GbA5GcA6GdAeAfA7GgAhAiAjAkAlAmAnAoApAqArAsAtAuAvA/HwAxAyAzAAABAyFCADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC
1328 HANDLE_RETURN(cydriver.cuCtxSetCurrent(as_cu(h_context))) 2VoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptckqt=krtWjstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeUlztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeAFBtCt:EDtEtFtGt* f K + g L , h M - i N . j O nb/ k P ob: l Q pbgh; m R qbrbsbtbubvbwbxbybzbAbJn= Son *KS Kn? Too +KT @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! LnMnNnuGhbUoG aL# BbCbDbEbibH $ jbI % kbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbVbHbIbJbKbLbMbNbObPb3HHtItJtKtLtMtNtOtPtQt*i+i4HvG5HRtSt6HTt7H=JUt8H#iPnxG.E_F9HQn!H$HyGzG%HhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-nhuci.niujuglLlc kulumunuoupuquxjruyjsutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlh9iywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w!w|k#w$wwl%w'wxl(w)wyl*w+wzl,w-w}k.w/wAl:w;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjxFh@lRlGh*jkxlx[n]nmxnxoxpx1jqxrxtisxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1x2x3xCG4xDG5xEG6x7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c1GQb3KRb2GSbTKIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;zmb=z?z@z[z]z,i^z_z`z{z|z,H}z~zaA4GbA5GcA6GdAeAfA7GgAhAiAjAkAlAmAnAoApAqArAsAtAuAvA/HwAxAyAzAAABAyFCADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC
1329 self._has_inited = True 2VoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptckqt=krtWjstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeUlztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeAFBtCt:EDtEtFtGt* f K + g L , h M - i N . j O nb/ k P ob: l Q pbgh; m R qbrbsbtbubvbwbxbybzbAbJn= Son *KS Kn? Too +KT @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! LnMnNnuGhbUoG aL# BbCbDbEbibH $ jbI % kbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbVbHbIbJbKbLbMbNbObPb3HHtItJtKtLtMtNtOtPtQt*i+i4HvG5HRtSt6HTt7H=JUt8H#iPnxG.E_F9HQn!H$HyGzG%HhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-nhuci.niujuglLlc kulumunuoupuquxjruyjsutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlh9iywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w!w|k#w$wwl%w'wxl(w)wyl*w+wzl,w-w}k.w/wAl:w;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjxFh@lRlGh*jkxlx[n]nmxnxoxpx1jqxrxtisxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1x2x3xCG4xDG5xEG6x7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c1GQb3KRb2GSbTKIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;zmb=z?z@z[z]z,i^z_z`z{z|z,H}z~zaA4GbA5GcA6GdAeAfA7GgAhAiAjAkAlAmAnAoApAqArAsAtAuAvA/HwAxAyAzAAABAyFCADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC
1330 self._context = Context._from_handle(Context, h_context, self._device_id) # Store owning context 2VoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptckqt=krtWjstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeUlztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeAFBtCt:EDtEtFtGt* f K + g L , h M - i N . j O nb/ k P ob: l Q pbgh; m R qbrbsbtbubvbwbxbybzbAbJn= Son *KS Kn? Too +KT @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! LnMnNnuGhbUoG aL# BbCbDbEbibH $ jbI % kbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbVbHbIbJbKbLbMbNbObPb3HHtItJtKtLtMtNtOtPtQt*i+i4HvG5HRtSt6HTt7H=JUt8H#iPnxG.E_F9HQn!H$HyGzG%HhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-nhuci.niujuglLlc kulumunuoupuquxjruyjsutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlh9iywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w!w|k#w$wwl%w'wxl(w)wyl*w+wzl,w-w}k.w/wAl:w;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjxFh@lRlGh*jkxlx[n]nmxnxoxpx1jqxrxtisxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1x2x3xCG4xDG5xEG6x7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c1GQb3KRb2GSbTKIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;zmb=z?z@z[z]z,i^z_z`z{z|z,H}z~zaA4GbA5GcA6GdAeAfA7GgAhAiAjAkAlAmAnAoApAqArAsAtAuAvA/HwAxAyAzAAABAyFCADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC
1332 def create_context(self, options: ContextOptions | None = None) -> Context:
1333 """Create a new :obj:`~_context.Context` object.
1335 Note
1336 ----
1337 The newly created context will not be set as current.
1339 Parameters
1340 ----------
1341 options : :obj:`~_context.ContextOptions`, optional
1342 Customizable dataclass for context creation options.
1344 Returns
1345 -------
1346 :obj:`~_context.Context`
1347 Newly created context object.
1349 """
1350 cdef int i
1351 cdef object resources
1352 cdef object res
1353 cdef SMResource sm_res
1354 cdef WorkqueueResource wq_res
1356 if options is None: 2zK]h^hb ?jAj_h`h{h|h}h~haibi!KAKENciHJ
1357 raise ValueError( 2EN
1358 "options with device resources must be provided to create a green context"
1359 )
1361 options = check_or_create_options(ContextOptions, options, "Context options") 2zK]h^hb ?jAj_h`h{h|h}h~haibi!KAKENciHJ
1362 if options.resources is None: 2zK]h^hb ?jAj_h`h{h|h}h~haibi!KAKENciHJ
1363 raise ValueError( 2EN
1364 "ContextOptions.resources must be provided to create a green context"
1365 )
1367 resources = tuple(options.resources) 2zK]h^hb ?jAj_h`h{h|h}h~haibi!KAKciHJ
1368 if len(resources) == 0: 2zK]h^hb ?jAj_h`h{h|h}h~haibi!KAKciHJ
1369 raise ValueError("ContextOptions.resources must not be empty")
1371 cdef vector[cydriver.CUdevResource] c_resources
1372 c_resources.resize(len(resources)) 2zK]h^hb ?jAj_h`h{h|h}h~haibi!KAKciHJ
1374 for i, res in enumerate(resources): 2zK]h^hb ?jAj_h`h{h|h}h~haibi!KAKciHJ
1375 if isinstance(res, SMResource): 2zK]h^hb ?jAj_h`h{h|h}h~haibi!KAKciHJ
1376 sm_res = <SMResource>res 2zK]h^hb ?jAj_h`h{h|h}h~haibi!KAKciHJ
1377 if not sm_res._is_usable: 2zK]h^hb ?jAj_h`h{h|h}h~haibi!KAKciHJ
1378 raise ValueError("dry-run SMResource objects cannot be used to create a context") 2!K
1379 c_resources[i] = sm_res._resource 2zK]h^hb ?jAj_h`h{h|h}h~haibiAKciHJ
1380 elif isinstance(res, WorkqueueResource): 2Aj
1381 wq_res = <WorkqueueResource>res 2Aj
1382 c_resources[i] = wq_res._wq_config_resource 2Aj
1383 else:
1384 raise TypeError(f"Unsupported context resource type: {type(res)}")
1386 cdef GreenCtxHandle h_green = create_green_ctx_handle( 2zK]h^hb ?jAj_h`h{h|h}h~haibiAKciHJ
1387 c_resources.data(),
1388 <unsigned int>(c_resources.size()),
1389 <cydriver.CUdevice>(self._device_id), 2zK]h^hb ?jAj_h`h{h|h}h~haibiAKciHJ
1390 <unsigned int>(cydriver.CUgreenCtxCreate_flags.CU_GREEN_CTX_DEFAULT_STREAM),
1391 )
1392 if h_green.get() == NULL: 2zK]h^hb ?jAj_h`h{h|h}h~haibiAKciHJ
1393 HANDLE_RETURN(get_last_error())
1394 raise RuntimeError("Failed to create CUDA green context")
1396 return Context._from_green_ctx(Context, h_green, self._device_id) 2zK]h^hb ?jAj_h`h{h|h}h~haibiAKciHJ
1398 def create_stream(self, obj: IsStreamType | None = None, options: StreamOptions | None = None) -> Stream:
1399 """Create or wrap a :obj:`~_stream.Stream` object.
1401 New stream objects can be created in two different ways:
1403 1) Create a new CUDA stream with customizable ``options``.
1404 2) Wrap an existing foreign `obj` supporting the ``__cuda_stream__`` protocol.
1406 Option (2) internally holds a reference to the foreign object
1407 such that the lifetime is managed.
1409 Note
1410 ----
1411 Device must be initialized. New streams are created on this device.
1413 Parameters
1414 ----------
1415 obj : :obj:`~_stream.IsStreamType`, optional
1416 Any object supporting the ``__cuda_stream__`` protocol.
1417 options : :obj:`~_stream.StreamOptions`, optional
1418 Customizable dataclass for stream creation options.
1420 Returns
1421 -------
1422 :obj:`~_stream.Stream`
1423 Newly created stream object.
1425 """
1426 self._check_context_initialized() 2#G$GqF%G'G(G)G*G+GrG,G-G.G/G:GTkEIFIGIHIII;GHjIj=i?isG@iJj=G?G[iKjUkLj@G]iVkJI[G^i_itGWk]GMjNjOj^G_GXk`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujKILIMINIOI*m+m,m-mYk`GPIQIZk0k1k2k3k.m/m:m;m=m?m@m[m~mrFKEsFtFRISI|G}Gjl4k-i.iBj5k6kklllmlnl7kolplqlrluFTI8k9k!k#k$k%kmn'i(i)ibLcLdLeLfLgLhLiL|L}L~Lkklkmknkokpkqkrkdlelfl-K.K/KZH0H1HFKBiUIaHbHVIWI'k(k)kXIYIZI0I1IGK{C2IcHdH3I4I*k+k,k5I6I7I8I9IIN!IeHfH#I$I-k.k/k%I'I(I)I*IHKCi)E*E2HhF|C}C~C:kIKJKvFwFvjPj;kxFQjRjSjTjUjVjwjJJMfNfKJOf+Esk,EtkPfQfukmLRfnLSfTfLJUfaDVfMJWfvkwkxkbDNJXfOJYfPJZfQJ0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJkKkJNLkKNMkNkLNOkPkQkRkSkcM|HdMeM(E}H~HMNNN+I,IaIbIfMgMhMiMjMAF[hHnhGONPNQNRNSNTNUNVNoLWNXN-I.I/I:I;I=I?I#i_LYNjH=jlbzj@I[I]I^I_I`I+j{I|I}I~IaJbJcJ,jeIfIgIhIiIjIkIlImInIoIpIZNDJLC8Ec -j.j/joepeqere0NqL1NrL)j@j[j]j^j2N3NsL4NtL5N6NuLvL7N8N9NwL!NxLyLzLALBLCLDLELFL#NGLHLILJL$NKLLL%N'N(N)NML*NNL+N,NOLPL-N.N/NQL:NRLSLTLULVLWLXLYLZL;N0L1L2L3L=N4L5L?N@N[N]N6L^N7L_N`N8L9L{N|N}N!L~N#L$L%L'L(L)L*L+L,LaO-L.L/L:LbO;L=LcOdOeO_j`j9i{j|j}j~jakbk$ijL*jfOtikLgOmHnH(euiviwi)e*exi}dyi%iseziAiTKOmQmRmTmUma ( ) WmXmZm1m3m5m7m9meJFHfJ-HgJhJiJjJ.HkJlJmJnJoJpJqJrJsJtJuJvJwJxJyJ:HzJAJ(mHHCoIHJHKHgFMH7E
1427 return Stream._init(obj=obj, options=options, device_id=self._device_id, ctx=self._context) 2#G$GqF%G'G(G)G*G+GrG,G-G.G/G:GTkEIFIGIHIII;GHjIj=i?isG@iJj=G?G[iKjUkLj@G]iVkJI[G^i_itGWk]GMjNjOj^G_GXk`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujKILIMINIOI*m+m,m-mYk`GPIQIZk0k1k2k3k.m/m:m;m=m?m@m[m~mrFKEsFtFRISI|G}Gjl4k-i.iBj5k6kklllmlnl7kolplqlrluFTI8k9k!k#k$k%kmn'i(i)ibLcLdLeLfLgLhLiL|L}L~Lkklkmknkokpkqkrkdlelfl-K.K/KZH0H1HFKBiUIaHbHVIWI'k(k)kXIYIZI0I1IGK{C2IcHdH3I4I*k+k,k5I6I7I8I9IIN!IeHfH#I$I-k.k/k%I'I(I)I*IHKCi)E*E2HhF|C}C~C:kIKJKvFwFvjPj;kxFQjRjSjTjUjVjwjJJMfNfKJOf+Esk,EtkPfQfukmLRfnLSfTfLJUfaDVfMJWfvkwkxkbDNJXfOJYfPJZfQJ0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJkKkJNLkKNMkNkLNOkPkQkRkSkcM|HdMeM(E}H~HMNNN+I,IaIbIfMgMhMiMjMAF[hHnhGONPNQNRNSNTNUNVNoLWNXN-I.I/I:I;I=I?I#i_LYNjH=jlbzj@I[I]I^I_I`I+j{I|I}I~IaJbJcJ,jeIfIgIhIiIjIkIlImInIoIpIZNDJLC8Ec -j.j/joepeqere0NqL1NrL)j@j[j]j^j2N3NsL4NtL5N6NuLvL7N8N9NwL!NxLyLzLALBLCLDLELFL#NGLHLILJL$NKLLL%N'N(N)NML*NNL+N,NOLPL-N.N/NQL:NRLSLTLULVLWLXLYLZL;N0L1L2L3L=N4L5L?N@N[N]N6L^N7L_N`N8L9L{N|N}N!L~N#L$L%L'L(L)L*L+L,LaO-L.L/L:LbO;L=LcOdOeO_j`j9i{j|j}j~jakbk$ijL*jfOtikLgOmHnH(euiviwi)e*exi}dyi%iseziAiTKOmQmRmTmUma ( ) WmXmZm1m3m5m7m9meJFHfJ-HgJhJiJjJ.HkJlJmJnJoJpJqJrJsJtJuJvJwJxJyJ:HzJAJ(mHHCoIHJHKHgFMH7E
1429 def create_event(self, options: EventOptions | None = None) -> Event:
1430 """Create an :obj:`~_event.Event` on this device without recording it to a :obj:`~_stream.Stream`.
1432 Note
1433 ----
1434 Device must be initialized.
1436 Parameters
1437 ----------
1438 options : :obj:`EventOptions`, optional
1439 Customizable dataclass for event creation options.
1441 Returns
1442 -------
1443 :obj:`~_event.Event`
1444 Newly created event object.
1446 """
1447 self._check_context_initialized() 2`G$d%d'd(d)d*d+d,d-d.d/d:d?HAm{G|G}GBm~GSlTl@H[HCmDm]HBjaHbH^H_H`H{HcHdHeHfHoLcI#ijHzjdI(jkHLC[l]l^l_l`l{l|l}l~lama bmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmym
1448 cdef Context ctx = self._context 2`G$d%d'd(d)d*d+d,d-d.d/d:d?HAm{G|G}GBm~GSlTl@H[HCmDm]HBjaHbH^H_H`H{HcHdHeHfHoLcI#ijHzjdI(jkHLC[l]l^l_l`l{l|l}l~lama bmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmym
1449 return cyEvent._init(cyEvent, self._device_id, ctx._h_context, options, True) 2`G$d%d'd(d)d*d+d,d-d.d/d:d?HAm{G|G}GBm~GSlTl@H[HCmDm]HBjaHbH^H_H`H{HcHdHeHfHoLcI#ijHzjdI(jkHLC[l]l^l_l`l{l|l}l~lama bmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmym
1451 def allocate(self, size: int, *, stream: Stream | GraphBuilder) -> Buffer:
1452 """Allocate device memory from a specified stream.
1454 Allocates device memory of `size` bytes on the specified `stream`
1455 using the memory resource currently associated with this Device.
1457 Note
1458 ----
1459 Device must be initialized.
1461 Parameters
1462 ----------
1463 size : int
1464 Number of bytes to allocate.
1465 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder`
1466 Keyword-only. The stream establishing the stream ordering semantic.
1467 Must be passed explicitly; pass ``self.default_stream`` to use
1468 the default stream.
1470 Returns
1471 -------
1472 :obj:`~_memory.Buffer`
1473 Newly created buffer object.
1475 """
1476 self._check_context_initialized() 2*i+i/E?jAjNlOldieifigihia iijikiliminioipiQERESETEUE
1477 return self.memory_resource.allocate(size, stream=stream) 2*i+i/E?jAjNlOldieifigihia iijikiliminioipiQERESETEUE
1479 def sync(self) -> None:
1480 """Synchronize this device's bound context.
1482 Waits for all preceding work in this device's bound :obj:`~_context.Context`
1483 to complete. Only that context is synchronized, not the device as a
1484 whole; work queued in a different context on the same device (e.g. a
1485 green context) is unaffected.
1487 Note
1488 ----
1489 Device must be initialized.
1491 """
1492 self._check_context_initialized() 2%G(G,G-G.GaDbDaMbMkMlMmMnMoMpMqMrMsMtMuMvMwMxMyMzMAMBMCMDMEMFMGMHMIMJMKMLMMMNMOMPMQMRMSMTMUMVMWMXMYMZM0M1M2M3M4M5M6M7M8M9M!M#M$M%M'M(M)M*M+M,M-M.M/M:M;M=M?M@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNpNqNrNsNtNuNvNwNxNyNzNANBNCNDN*i+i#ipLLCqLrLsLtLuLvLwLxLyLzLALBLCLDLELFLGLHLILJLKLLLMLNLOLPLQLRLSLTLULVLWLXLYLZL0L1L2L3L4L5L6L7L8L9L!L#L$L%L'L(L)L*L+L,L-L.L/L:L;L=L9i$i/i:i!i,Kti9fGnd e
1493 cdef Context ctx = self._context 2%G(G,G-G.GaDbDaMbMkMlMmMnMoMpMqMrMsMtMuMvMwMxMyMzMAMBMCMDMEMFMGMHMIMJMKMLMMMNMOMPMQMRMSMTMUMVMWMXMYMZM0M1M2M3M4M5M6M7M8M9M!M#M$M%M'M(M)M*M+M,M-M.M/M:M;M=M?M@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNpNqNrNsNtNuNvNwNxNyNzNANBNCNDN*i+i#ipLLCqLrLsLtLuLvLwLxLyLzLALBLCLDLELFLGLHLILJLKLLLMLNLOLPLQLRLSLTLULVLWLXLYLZL0L1L2L3L4L5L6L7L8L9L!L#L$L%L'L(L)L*L+L,L-L.L/L:L;L=L9i$i/i:i!i,Kti9fGnd e
1494 HANDLE_RETURN(context_synchronize(ctx._h_context)) 2%G(G,G-G.GaDbDaMbMkMlMmMnMoMpMqMrMsMtMuMvMwMxMyMzMAMBMCMDMEMFMGMHMIMJMKMLMMMNMOMPMQMRMSMTMUMVMWMXMYMZM0M1M2M3M4M5M6M7M8M9M!M#M$M%M'M(M)M*M+M,M-M.M/M:M;M=M?M@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNpNqNrNsNtNuNvNwNxNyNzNANBNCNDN*i+i#ipLLCqLrLsLtLuLvLwLxLyLzLALBLCLDLELFLGLHLILJLKLLLMLNLOLPLQLRLSLTLULVLWLXLYLZL0L1L2L3L4L5L6L7L8L9L!L#L$L%L'L(L)L*L+L,L-L.L/L:L;L=L9i$i/i:i!i,Kti9fGnd e
1496 def create_graph_builder(self) -> GraphBuilder:
1497 """Create a new :obj:`~graph.GraphBuilder` on this device.
1499 Returns
1500 -------
1501 :obj:`~graph.GraphBuilder`
1502 Newly created graph builder object.
1504 """
1505 from cuda.core.graph._graph_builder import GraphBuilder 2#G$G'G)G*G+GrG/G:G;GHjIj=i?isG@iJj=G?G[iKjLj@G]i[G^i_itG]GMjNjOj^G_G`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujKE-K.K/KZH0H1H{C2HhF|C}C~CvjPjQjRjSjTjUjVjwjmLnL#iLCuiviwixiyiFH(m
1507 self._check_context_initialized() 2#G$G'G)G*G+GrG/G:G;GHjIj=i?isG@iJj=G?G[iKjLj@G]i[G^i_itG]GMjNjOj^G_G`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujKE-K.K/KZH0H1H{C2HhF|C}C~CvjPjQjRjSjTjUjVjwjmLnL#iLCuiviwixiyiFH(m
1508 return GraphBuilder._init(self.create_stream()) 2#G$G'G)G*G+GrG/G:G;GHjIj=i?isG@iJj=G?G[iKjLj@G]i[G^i_itG]GMjNjOj^G_G`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujKE-K.K/KZH0H1H{C2HhF|C}C~CvjPjQjRjSjTjUjVjwjmLnL#iLCuiviwixiyiFH(m
1510 def create_opaque_array(self, options: OpaqueArrayOptions) -> OpaqueArray:
1511 """Create an :obj:`~cuda.core.texture.OpaqueArray` on this device.
1513 Allocates an opaque, hardware-laid-out CUDA array for texture/surface
1514 access.
1516 Note
1517 ----
1518 Device must be initialized.
1520 Parameters
1521 ----------
1522 options : :obj:`~cuda.core.texture.OpaqueArrayOptions`
1523 Allocation options (shape, format, channels, surface flag).
1525 Returns
1526 -------
1527 :obj:`~cuda.core.texture.OpaqueArray`
1528 Newly created opaque array.
1530 .. versionadded:: 1.1.0
1531 """
1532 from cuda.core.texture._array import _create_opaque_array 2/FFGGGHGIGJGGHqIrIsItIuIvI(mHHwICoIHJHxIKHgFKGLGNGzFOGQGRGSGTGGj6E
1534 self._check_context_initialized() 2/FFGGGHGIGJGGHqIrIsItIuIvI(mHHwICoIHJHxIKHgFKGLGNGzFOGQGRGSGTGGj6E
1535 return _create_opaque_array(options, self._context, self._device_id) 2/FFGGGHGIGJGGHqIrIsItIuIvI(mHHwICoIHJHxIKHgFKGLGNGzFOGQGRGSGTGGj6E
1537 def create_mipmapped_array(self, options: MipmappedArrayOptions) -> MipmappedArray:
1538 """Create a :obj:`~cuda.core.texture.MipmappedArray` on this device.
1540 Allocates a mipmapped CUDA array for texture/surface access across
1541 levels.
1543 Note
1544 ----
1545 Device must be initialized.
1547 Parameters
1548 ----------
1549 options : :obj:`~cuda.core.texture.MipmappedArrayOptions`
1550 Allocation options (shape, format, channels, levels, surface flag).
1552 Returns
1553 -------
1554 :obj:`~cuda.core.texture.MipmappedArray`
1555 Newly created mipmapped array.
1557 .. versionadded:: 1.1.0
1558 """
1559 from cuda.core.texture._mipmapped_array import _create_mipmapped_array 2gFLHyIzIAIMHBIMGPG6E
1561 self._check_context_initialized() 2gFLHyIzIAIMHBIMGPG6E
1562 return _create_mipmapped_array(options, self._context, self._device_id) 2gFLHyIzIAIMHBIMGPG6E
1564 def create_texture_object(
1565 self, *, resource: ResourceDescriptor, options: TextureObjectOptions | None = None
1566 ) -> TextureObject:
1567 """Create a :obj:`~cuda.core.texture.TextureObject` on this device.
1569 Binds a resource (an :obj:`~cuda.core.texture.OpaqueArray` /
1570 :obj:`~cuda.core.texture.MipmappedArray` / linear or pitch2d
1571 :obj:`~cuda.core.Buffer`, wrapped in a
1572 :obj:`~cuda.core.texture.ResourceDescriptor`) as a bindless texture for
1573 kernel-side sampled reads. The resource must belong to this device.
1575 Note
1576 ----
1577 Device must be initialized.
1579 Parameters
1580 ----------
1581 resource : :obj:`~cuda.core.texture.ResourceDescriptor`
1582 The memory backing the texture.
1583 options : :obj:`~cuda.core.texture.TextureObjectOptions`
1584 Sampling state (address/filter/read modes, normalization, etc.).
1586 Returns
1587 -------
1588 :obj:`~cuda.core.texture.TextureObject`
1589 Newly created texture object.
1591 .. versionadded:: 1.1.0
1592 """
1593 from cuda.core.texture._texture import _create_texture_object 2/FFGGGHGIGJGgFzF;HOGKoPGLoQGRGSGTG=HGj6E
1595 self._check_context_initialized() 2/FFGGGHGIGJGgFzF;HOGKoPGLoQGRGSGTG=HGj6E
1596 return _create_texture_object( 2/FFGGGHGIGJGgFzF;HOGKoPGLoQGRGSGTG=HGj6E
1597 resource, options, self._context, self._device_id) 2/FFGGGHGIGJGgFzF;HOGKoPGLoQGRGSGTG=HGj6E
1599 def create_surface_object(self, *, resource: ResourceDescriptor) -> SurfaceObject:
1600 """Create a :obj:`~cuda.core.texture.SurfaceObject` on this device.
1602 Binds an :obj:`~cuda.core.texture.OpaqueArray` (via a
1603 :obj:`~cuda.core.texture.ResourceDescriptor`) as a bindless surface for
1604 kernel-side typed load/store. The backing array must have been created
1605 with ``is_surface_load_store=True`` and must belong to this device.
1607 Note
1608 ----
1609 Device must be initialized.
1611 Parameters
1612 ----------
1613 resource : :obj:`~cuda.core.texture.ResourceDescriptor`
1614 Must wrap an :obj:`~cuda.core.texture.OpaqueArray` allocated with
1615 ``is_surface_load_store=True``.
1617 Returns
1618 -------
1619 :obj:`~cuda.core.texture.SurfaceObject`
1620 Newly created surface object.
1622 .. versionadded:: 1.1.0
1623 """
1624 from cuda.core.texture._surface import _create_surface_object 2KGLGJoMGNGzF6E
1626 self._check_context_initialized() 2KGLGJoMGNGzF6E
1627 return _create_surface_object( 2KGLGJoMGNGzF6E
1628 resource, self._context, self._device_id) 2KGLGJoMGNGzF6E
1631cdef inline int Device_ensure_cuda_initialized() except? -1:
1632 """Initialize CUDA driver and check version compatibility (once per process)."""
1633 global _is_cuInit
1634 if _is_cuInit is False: 2Ub#GVo$GWoqFXo%GYo'GZo(G0o)G1o*G2o+G3orG4o,G5o-G6o.G7o/G8o:G9oTk!oEI#oFI$oGI%oHI'oII(o;G)oHj*oIj+o=i,o?i-osG.o@i/oJj:o=G;o?G=o[i?oKj@oUk[oLj]o@G^o]i_oVk`oJI{o[G|o^i}o_i~otGapWkbp]GcpMjdpNjepOjfp^Ggp_GhpXkip)mjp`ikp{ilp|imp}inp~iopajppbjqpcjrpdjspejtpfjupgjvphjwpijxpjjypkjzpljApmjBpnjCpojDppjEpqjFprjGpsjHptjIpujJpMoKpNoLpNDMpODNpOpInPDPpQpQDRpRDSpSDTp/f:f;fUp=f?f@fTDVpWpXpKIYpLIZpMI0pNI1pOI2p3p4p5p6p7p8p9p!p*m#p+m$p,m%p-m'pYk(p`G)pPI*pQI+pDo,pEo-pZk.p0k/p1k:p2k;p3k=p.m?p/m@p:m[p;m]p=m^p?m_p@m`p[m{pFo|p}p~paqUDbqVDcqWDdqXDeqYDfqZDgqhqiqjq]mkq^mlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6qGo7q0D8q_m9q`m!q{m#q|m$q1D%q}m'qHo(q)q~m*qIo+qan,qbn-qcn.qdn/qen:qfn;qqo=qrF?q@q[q]q^qgn_qhn`qin{qjn|qKE}qsF~qtFarRIbrSIcrkndrerrofrgrhrirjrkrlrmrnrorprqr?HrrAmsr{Gtr|Gur}GvrBmwr~GxrSlyrTlzr@HAr[HBrCmCrDmDr]HErjlFr4kGr-iHr.iIrEmJrFmKrBjLr5kMr6kNrsoOrtoPruoQrklRrllSrmlTrvoUrnlVr7kWrolXrplYrqlZrwo0rxo1rrl2r3rln4ruF5r6r7rTI8r9r!r#r$r8k%r9k'r!k(r#k)r$k*r+r,r-r.r%k/r:r;r=r?r@rmn[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhZHch0Hdh1HehIJ^rfh_rBi`r{rUI|raH}rbH~rVIasWIbs'kcs(kds)kesXIfsYIgsZIhs0Iis1Ijs?Jks^Hls_Hms@Jns[Josnnpsonqspnrs]Jss^Jts_Jus`Jvs{Jws|Jxs`Hys{Hzs}JAs~JBsqnCsrnDssnEsaKFsbKGscKHsdKIseKJsKstnLsunMsvnNswnOsxnPs{CQsynRsSsTsznUs2IVscHWsdHXs3IYs4IZs*k0s+k1s,k2s5I3s6I4s7I5s8I6s9I7sAn8s9s!I!seH#sfH$s#I%s$I's-k(s.k)s/k*s%I+s'I,s(I-s)I.s*I/s:sCi;sBn=sCn?s)E@s*E[s2H]s^s|C_s}C`s~C{s|s}s~s:katbtctvFdtwFetvjftPjgt;khtxFitQjjtRjktSjltTjmtUjntVjotwjptckqt=krtWjstJJMfNfKJOf+Esk,EtkPfQf@FukRfSfTfLJUfaDHmVfMJWf6Cvk7Cwk8CxkbDImNJXfOJYfPJZfQJ0f1f2f3f4f5f6f7f8f[Fyk]FzkAkBkCkDk^FEkFkGk9CHk!CIkJm#CJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~d|HaeZJytBKze5CAeZGBeiGCe0GDeEebeUlztce_d(E;d}Hde~H`dFeee{dAt+Ife,I|dGeCKHeIeaIgebIheiejekelemeAFBtCtDtEtFtGt-E* f K RJ+ g L LE, 9Eh M 0J- !Ei N HD. j O nb/ k P ob: l Q pbgh[h; Hnm R qbrbsbtbubvbwbxbybzbAbJn= Son S Kn? Too T @ p U [ 1J] ^ 2J_ ` 3J{ | 4J} ~ 5Jabbb6Jcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 MEdb2DC 7 eb3DD 8 NEfb4DE 9 OEgb#EF ! LnMnNnuGhbUoG # SJBbTJCbDbEb7JiboFH $ 8Jjb;EI % PEkbpFJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYe`CZe0e1e2e3e4e5e6e7eYG8eIDFbJDGbVbHbUJIbVJJbKbLbWJMbXJNbObPbYJ4K5KKDLD6K7K3HMDHtItJt-IKt.ILt/IMt:INt;IOt=IPtQt9eBo*i+icI4HvG?I5HgHRtfKStwG6HgKTthH7H=JhKUtiK8H#iPnGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8ixG.E_FiH9HQnjK!HNH8GBF#H$HyGzG%HCFhhVtihCJWtjhRnXtYtZtjH0t=jlbzjdI1t(jkH2t@I3t[I4t]I5t^I6t_I7t`I8t+j9t{I!t|I#t}I$t~I%taJ'tbJ(tcJ)t,j*teI+tfI,t9J-tgI.thI/tiI:tjI;tkI=t!J?t#J@tlI[t$J]tmI^tnI_t%J`t'J{t(J|t)J}t*J~t+JauoIbupIcu,Jdu-JeuSn]hTnDJUn^h/Eb ?jEdAjFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOHDK,n-nhuci.niujuglLlc DnkuEnlumuFnnuoupuquxjruyjsu-jtuuuvuwuxuyuzuAuBuCuDuEuFuGu.jHu/jIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXboe]upe^uYbZbqe_ure`ulH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVl{uWl|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPl/CwwxwkKlh9iywmhnhohph@nlKqhmKrh;l=lzwAw{j|j?lQl}j~jakbk.JBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w$C!w|k#w%C$wwl%w'C'wxl(w(C)wyl*w)C+wzl,w*C-w}k.w+C/wAl:w,C;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjxFh@lRlGh*jkxlx[n]nmxnxoxMCpx1jqxrxtisx9ftxGnux-CvxCjwx2jxx.Cyx^nHhzx_nmHAxnHBx`n{n|nyoCxzoDxAoEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1xPo2xQo3xCG4xDG5xEG6xRo7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojokoXl)xlL|bdJ}b~bJl*xacKl+xbc/Jcc:Jdcse,xWb+eYl-xZl.x0l/x1l:x2l;x3l=x4l?x5l@x6l[x7l]x8l^xecfcgchcicjckclcmcncocpcqczi_xAi`xBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COc)HPc*HQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c+H$coH%cpH'cqH(crH)csH*ctH+cuH,cvH-cwH.cxH/cyH:czH;cAH=cBH?cCH@cDH[c]c1GQbRb2GSbIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya nKxyoKyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjG9ljz!lkz,e#llz$lmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz%lZz'l0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e(l:z_e`e{e|e}e)l;z*lmb+l=z,l?z@z[z]z,i^z_z`z{z|zEH,H-l}z~zaA;i4GbA5GcA6GdAeJeAPH;JfAQHRHSH7GgAFHhAfJiA-HjAgJkAhJlAiJmAjJnA.HoAkJpAlJqAmJrAnJsAoJtApJuAqJvArJ/HsJwAtJxAuJyAvJzAwJAAxJBAyFCAyJDA:HEAzJFAAJGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpfQE!mRE#mSE$mqfrfsftfufTE%mUE'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#d?LHA@LIA[LJA]LKA^LLAJfKfLfFGMAGGNAHGOAIGPAJGQAGHRAqISArITAsIUAtIVAuIWAvIXA(mYAHHZAwI0ACo1AIH2AJH3ApK4AqK5ArK6AsK7AtK8AuK9AxI!AKH#AgF$ALH%AyI'AzI(AAI)AMH*AvK+AwK,AxK-AyK.AVE/AWE:AXE;AYE=AZE?A0E@ABI[A1E]A2E^A3E_A4E`A5E{AKG|ALG}AJo~AMGaBNGbBzFcBoo;HdBOGeBKofBPGgBLohBQGiBRGjBkBlBSGmBnBTGoB=HpBGjpo6EqBDFrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBEFRBFFSBGFTBHFUBIFVBJFWBKFXBLFYBMFZBNF0BOF1BPF2BQF3BRF4BSF5BTF6BUF7BVF8BWF9BXF!BYF#BZF$B0F%B1F'B2F(B3F)B4F*B5F+B6F,B7F-B8F.B9F/B!F:B#F;B$F=B%F?B'F@B(F[B)F]B^B_B`B*F{B|B}B+F~BaC7EbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFC,FGC-FHCICJC.FKC
1635 with _lock, nogil:
1636 HANDLE_RETURN(cydriver.cuInit(0))
1637 _is_cuInit = True
1638 IF CUDA_CORE_BUILD_MAJOR >= 13:
1639 # cuda-bindings 13.3 added this function. The 12.x line does not have it.
1640 from cuda.bindings.utils import warn_if_cuda_major_version_mismatch
1641 warn_if_cuda_major_version_mismatch()
1642 return 0 2Ub#GVo$GWoqFXo%GYo'GZo(G0o)G1o*G2o+G3orG4o,G5o-G6o.G7o/G8o:G9oTk!oEI#oFI$oGI%oHI'oII(o;G)oHj*oIj+o=i,o?i-osG.o@i/oJj:o=G;o?G=o[i?oKj@oUk[oLj]o@G^o]i_oVk`oJI{o[G|o^i}o_i~otGapWkbp]GcpMjdpNjepOjfp^Ggp_GhpXkip)mjp`ikp{ilp|imp}inp~iopajppbjqpcjrpdjspejtpfjupgjvphjwpijxpjjypkjzpljApmjBpnjCpojDppjEpqjFprjGpsjHptjIpujJpMoKpNoLpNDMpODNpOpInPDPpQpQDRpRDSpSDTp/f:f;fUp=f?f@fTDVpWpXpKIYpLIZpMI0pNI1pOI2p3p4p5p6p7p8p9p!p*m#p+m$p,m%p-m'pYk(p`G)pPI*pQI+pDo,pEo-pZk.p0k/p1k:p2k;p3k=p.m?p/m@p:m[p;m]p=m^p?m_p@m`p[m{pFo|p}p~paqUDbqVDcqWDdqXDeqYDfqZDgqhqiqjq]mkq^mlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6qGo7q0D8q_m9q`m!q{m#q|m$q1D%q}m'qHo(q)q~m*qIo+qan,qbn-qcn.qdn/qen:qfn;qqo=qrF?q@q[q]q^qgn_qhn`qin{qjn|qKE}qsF~qtFarRIbrSIcrkndrerrofrgrhrirjrkrlrmrnrorprqr?HrrAmsr{Gtr|Gur}GvrBmwr~GxrSlyrTlzr@HAr[HBrCmCrDmDr]HErjlFr4kGr-iHr.iIrEmJrFmKrBjLr5kMr6kNrsoOrtoPruoQrklRrllSrmlTrvoUrnlVr7kWrolXrplYrqlZrwo0rxo1rrl2r3rln4ruF5r6r7rTI8r9r!r#r$r8k%r9k'r!k(r#k)r$k*r+r,r-r.r%k/r:r;r=r?r@rmn[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhZHch0Hdh1HehIJ^rfh_rBi`r{rUI|raH}rbH~rVIasWIbs'kcs(kds)kesXIfsYIgsZIhs0Iis1Ijs?Jks^Hls_Hms@Jns[Josnnpsonqspnrs]Jss^Jts_Jus`Jvs{Jws|Jxs`Hys{Hzs}JAs~JBsqnCsrnDssnEsaKFsbKGscKHsdKIseKJsKstnLsunMsvnNswnOsxnPs{CQsynRsSsTsznUs2IVscHWsdHXs3IYs4IZs*k0s+k1s,k2s5I3s6I4s7I5s8I6s9I7sAn8s9s!I!seH#sfH$s#I%s$I's-k(s.k)s/k*s%I+s'I,s(I-s)I.s*I/s:sCi;sBn=sCn?s)E@s*E[s2H]s^s|C_s}C`s~C{s|s}s~s:katbtctvFdtwFetvjftPjgt;khtxFitQjjtRjktSjltTjmtUjntVjotwjptckqt=krtWjstJJMfNfKJOf+Esk,EtkPfQf@FukRfSfTfLJUfaDHmVfMJWf6Cvk7Cwk8CxkbDImNJXfOJYfPJZfQJ0f1f2f3f4f5f6f7f8f[Fyk]FzkAkBkCkDk^FEkFkGk9CHk!CIkJm#CJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~d|HaeZJytBKze5CAeZGBeiGCe0GDeEebeUlztce_d(E;d}Hde~H`dFeee{dAt+Ife,I|dGeCKHeIeaIgebIheiejekelemeAFBtCtDtEtFtGt-E* f K RJ+ g L LE, 9Eh M 0J- !Ei N HD. j O nb/ k P ob: l Q pbgh[h; Hnm R qbrbsbtbubvbwbxbybzbAbJn= Son S Kn? Too T @ p U [ 1J] ^ 2J_ ` 3J{ | 4J} ~ 5Jabbb6Jcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 MEdb2DC 7 eb3DD 8 NEfb4DE 9 OEgb#EF ! LnMnNnuGhbUoG # SJBbTJCbDbEb7JiboFH $ 8Jjb;EI % PEkbpFJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYe`CZe0e1e2e3e4e5e6e7eYG8eIDFbJDGbVbHbUJIbVJJbKbLbWJMbXJNbObPbYJ4K5KKDLD6K7K3HMDHtItJt-IKt.ILt/IMt:INt;IOt=IPtQt9eBo*i+icI4HvG?I5HgHRtfKStwG6HgKTthH7H=JhKUtiK8H#iPnGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8ixG.E_FiH9HQnjK!HNH8GBF#H$HyGzG%HCFhhVtihCJWtjhRnXtYtZtjH0t=jlbzjdI1t(jkH2t@I3t[I4t]I5t^I6t_I7t`I8t+j9t{I!t|I#t}I$t~I%taJ'tbJ(tcJ)t,j*teI+tfI,t9J-tgI.thI/tiI:tjI;tkI=t!J?t#J@tlI[t$J]tmI^tnI_t%J`t'J{t(J|t)J}t*J~t+JauoIbupIcu,Jdu-JeuSn]hTnDJUn^h/Eb ?jEdAjFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOHDK,n-nhuci.niujuglLlc DnkuEnlumuFnnuoupuquxjruyjsu-jtuuuvuwuxuyuzuAuBuCuDuEuFuGu.jHu/jIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXboe]upe^uYbZbqe_ure`ulH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVl{uWl|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPl/CwwxwkKlh9iywmhnhohph@nlKqhmKrh;l=lzwAw{j|j?lQl}j~jakbk.JBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w$C!w|k#w%C$wwl%w'C'wxl(w(C)wyl*w)C+wzl,w*C-w}k.w+C/wAl:w,C;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjxFh@lRlGh*jkxlx[n]nmxnxoxMCpx1jqxrxtisx9ftxGnux-CvxCjwx2jxx.Cyx^nHhzx_nmHAxnHBx`n{n|nyoCxzoDxAoEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1xPo2xQo3xCG4xDG5xEG6xRo7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojokoXl)xlL|bdJ}b~bJl*xacKl+xbc/Jcc:Jdcse,xWb+eYl-xZl.x0l/x1l:x2l;x3l=x4l?x5l@x6l[x7l]x8l^xecfcgchcicjckclcmcncocpcqczi_xAi`xBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COc)HPc*HQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c+H$coH%cpH'cqH(crH)csH*ctH+cuH,cvH-cwH.cxH/cyH:czH;cAH=cBH?cCH@cDH[c]c1GQbRb2GSbIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya nKxyoKyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjG9ljz!lkz,e#llz$lmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz%lZz'l0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e(l:z_e`e{e|e}e)l;z*lmb+l=z,l?z@z[z]z,i^z_z`z{z|zEH,H-l}z~zaA;i4GbA5GcA6GdAeJeAPH;JfAQHRHSH7GgAFHhAfJiA-HjAgJkAhJlAiJmAjJnA.HoAkJpAlJqAmJrAnJsAoJtApJuAqJvArJ/HsJwAtJxAuJyAvJzAwJAAxJBAyFCAyJDA:HEAzJFAAJGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpfQE!mRE#mSE$mqfrfsftfufTE%mUE'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#d?LHA@LIA[LJA]LKA^LLAJfKfLfFGMAGGNAHGOAIGPAJGQAGHRAqISArITAsIUAtIVAuIWAvIXA(mYAHHZAwI0ACo1AIH2AJH3ApK4AqK5ArK6AsK7AtK8AuK9AxI!AKH#AgF$ALH%AyI'AzI(AAI)AMH*AvK+AwK,AxK-AyK.AVE/AWE:AXE;AYE=AZE?A0E@ABI[A1E]A2E^A3E_A4E`A5E{AKG|ALG}AJo~AMGaBNGbBzFcBoo;HdBOGeBKofBPGgBLohBQGiBRGjBkBlBSGmBnBTGoB=HpBGjpo6EqBDFrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBEFRBFFSBGFTBHFUBIFVBJFWBKFXBLFYBMFZBNF0BOF1BPF2BQF3BRF4BSF5BTF6BUF7BVF8BWF9BXF!BYF#BZF$B0F%B1F'B2F(B3F)B4F*B5F+B6F,B7F-B8F.B9F/B!F:B#F;B$F=B%F?B'F@B(F[B)F]B^B_B`B*F{B|B}B+F~BaC7EbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFC,FGC-FHCICJC.FKC
1645cdef inline int Device_resolve_device_id(device_id) except? -1:
1646 """Resolve device_id, defaulting to current device or 0."""
1647 cdef cydriver.CUdevice dev
1648 cdef cydriver.CUcontext ctx
1649 cdef cydriver.CUresult err
1650 if device_id is None: 2Ub#GVo$GWoqFXo%GYo'GZo(G0o)G1o*G2o+G3orG4o,G5o-G6o.G7o/G8o:G9oTk!oEI#oFI$oGI%oHI'oII(o;G)oHj*oIj+o=i,o?i-osG.o@i/oJj:o=G;o?G=o[i?oKj@oUk[oLj]o@G^o]i_oVk`oJI{o[G|o^i}o_i~otGapWkbp]GcpMjdpNjepOjfp^Ggp_GhpXkip)mjp`ikp{ilp|imp}inp~iopajppbjqpcjrpdjspejtpfjupgjvphjwpijxpjjypkjzpljApmjBpnjCpojDppjEpqjFprjGpsjHptjIpujJpMoKpNoLpNDMpODNpOpInPDPpQpQDRpRDSpSDTp/f:f;fUp=f?f@fTDVpWpXpKIYpLIZpMI0pNI1pOI2p3p4p5p6p7p8p9p!p*m#p+m$p,m%p-m'pYk(p`G)pPI*pQI+pDo,pEo-pZk.p0k/p1k:p2k;p3k=p.m?p/m@p:m[p;m]p=m^p?m_p@m`p[m{pFo|p}p~paqUDbqVDcqWDdqXDeqYDfqZDgqhqiqjq]mkq^mlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6qGo7q0D8q_m9q`m!q{m#q|m$q1D%q}m'qHo(q)q~m*qIo+qan,qbn-qcn.qdn/qen:qfn;qqo=qrF?q@q[q]q^qgn_qhn`qin{qjn|qKE}qsF~qtFarRIbrSIcrkndrerrofrgrhrirjrkrlrmrnrorprqr?HrrAmsr{Gtr|Gur}GvrBmwr~GxrSlyrTlzr@HAr[HBrCmCrDmDr]HErjlFr4kGr-iHr.iIrEmJrFmKrBjLr5kMr6kNrsoOrtoPruoQrklRrllSrmlTrvoUrnlVr7kWrolXrplYrqlZrwo0rxo1rrl2r3rln4ruF5r6r7rTI8r9r!r#r$r8k%r9k'r!k(r#k)r$k*r+r,r-r.r%k/r:r;r=r?r@rmn[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhZHch0Hdh1HehIJ^rfh_rBi`r{rUI|raH}rbH~rVIasWIbs'kcs(kds)kesXIfsYIgsZIhs0Iis1Ijs?Jks^Hls_Hms@Jns[Josnnpsonqspnrs]Jss^Jts_Jus`Jvs{Jws|Jxs`Hys{Hzs}JAs~JBsqnCsrnDssnEsaKFsbKGscKHsdKIseKJsKstnLsunMsvnNswnOsxnPs{CQsynRsSsTsznUs2IVscHWsdHXs3IYs4IZs*k0s+k1s,k2s5I3s6I4s7I5s8I6s9I7sAn8s9s!I!seH#sfH$s#I%s$I's-k(s.k)s/k*s%I+s'I,s(I-s)I.s*I/s:sCi;sBn=sCn?s)E@s*E[s2H]s^s|C_s}C`s~C{s|s}s~s:katbtctvFdtwFetvjftPjgt;khtxFitQjjtRjktSjltTjmtUjntVjotwjptckqt=krtWjstJJMfNfKJOf+Esk,EtkPfQf@FukRfSfTfLJUfaDHmVfMJWf6Cvk7Cwk8CxkbDImNJXfOJYfPJZfQJ0f1f2f3f4f5f6f7f8f[Fyk]FzkAkBkCkDk^FEkFkGk9CHk!CIkJm#CJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~d|HaeZJytBKze5CAeZGBeiGCe0GDeEebeUlztce_d(E;d}Hde~H`dFeee{dAt+Ife,I|dGeCKHeIeaIgebIheiejekelemeAFBtCtDtEtFtGt-E* f K RJ+ g L LE, 9Eh M 0J- !Ei N HD. j O nb/ k P ob: l Q pbgh[h; Hnm R qbrbsbtbubvbwbxbybzbAbJn= Son S Kn? Too T @ p U [ 1J] ^ 2J_ ` 3J{ | 4J} ~ 5Jabbb6Jcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 MEdb2DC 7 eb3DD 8 NEfb4DE 9 OEgb#EF ! LnMnNnuGhbUoG # SJBbTJCbDbEb7JiboFH $ 8Jjb;EI % PEkbpFJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYe`CZe0e1e2e3e4e5e6e7eYG8eIDFbJDGbVbHbUJIbVJJbKbLbWJMbXJNbObPb3HHtItJt-IKt.ILt/IMt:INt;IOt=IPtQt9eBo*i+icI4HvG?I5HgHRtfKStwG6HgKTthH7HhKUtiK8H#iPnGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8ixG.E_FiH9HQnjK!HBF#H$HyGzG%HCFhhVtihCJWtjhRnXtYtZtjH0t=jlbzjdI1t(jkH2t@I3t[I4t]I5t^I6t_I7t`I8t+j9t{I!t|I#t}I$t~I%taJ'tbJ(tcJ)t,j*teI+tfI,t9J-tgI.thI/tiI:tjI;tkI=t!J?t#J@tlI[t$J]tmI^tnI_t%J`t'J{t(J|t)J}t*J~t+JauoIbupIcu,Jdu-JeuSn]hTnDJUn^h/Eb ?jEdAjFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nDK,n-nhuci.niujuglLlc DnkuEnlumuFnnuoupuquxjruyjsu-jtuuuvuwuxuyuzuAuBuCuDuEuFuGu.jHu/jIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXboe]upe^uYbZbqe_ure`ulH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVl{uWl|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPl/CwwxwkKlh9iywmhnhohph@nlKqhmKrh;l=lzwAw{j|j?lQl}j~jakbk.JBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w$C!w|k#w%C$wwl%w'C'wxl(w(C)wyl*w)C+wzl,w*C-w}k.w+C/wAl:w,C;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjxFh@lRlGh*jkxlx[n]nmxnxoxMCpx1jqxrxtisx9ftxGnux-CvxCjwx2jxx.Cyx^nHhzx_nmHAxnHBx`n{n|nyoCxzoDxAoEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1xPo2xQo3xCG4xDG5xEG6xRo7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojokoXl)xlL|bdJ}b~bJl*xacKl+xbc/Jcc:Jdcse,xWb+eYl-xZl.x0l/x1l:x2l;x3l=x4l?x5l@x6l[x7l]x8l^xecfcgchcicjckclcmcncocpcqczi_xAi`xBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COc)HPc*HQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c+H$coH%cpH'cqH(crH)csH*ctH+cuH,cvH-cwH.cxH/cyH:czH;cAH=cBH?cCH@cDH[c]c1GQbRb2GSbIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya nKxyoKyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjG9ljz!lkz,e#llz$lmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz%lZz'l0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e(l:z_e`e{e|e}e)l;z*lmb+l=z,l?z@z[z]z,i^z_z`z{z|zEH,H-l}z~zaA;i4GbA5GcA6GdAeJeA;JfA7GgAFHhAfJiA-HjAgJkAhJlAiJmAjJnA.HoAkJpAlJqAmJrAnJsAoJtApJuAqJvArJ/HsJwAtJxAuJyAvJzAwJAAxJBAyFCAyJDA:HEAzJFAAJGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpfQE!mRE#mSE$mqfrfsftfufTE%mUE'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfFGMAGGNAHGOAIGPAJGQAGHRAqISArITAsIUAtIVAuIWAvIXA(mYAHHZAwI0ACo1AIH2AJH3ApK4AqK5ArK6AsK7AtK8AuK9AxI!AKH#AgF$ALH%AyI'AzI(AAI)AMH*AvK+AwK,AxK-AyK.AVE/AWE:AXE;AYE=AZE?A0E@ABI[A1E]A2E^A3E_A4E`A5E{AKG|ALG}AJo~AMGaBNGbBzFcBoo;HdBOGeBKofBPGgBLohBQGiBRGjBkBlBSGmBnBTGoB=HpBGjpo6EqBDFrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBEFRBFFSBGFTBHFUBIFVBJFWBKFXBLFYBMFZBNF0BOF1BPF2BQF3BRF4BSF5BTF6BUF7BVF8BWF9BXF!BYF#BZF$B0F%B1F'B2F(B3F)B4F*B5F+B6F,B7F-B8F.B9F/B!F:B#F;B$F=B%F?B'F@B(F[B)F]B^B_B`B*F{B|B}B+F~BaC7EbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFC,FGC-FHCICJC.FKC
1651 with nogil: 2Ub#G$GqF%G'G(G)G*G+GrG,G-G.G/G:GTkEIFIGIHIII;GHjIj=i?isG@iJj=G?G[iKjUkLj@G]iVkJI[G^i_itGWk]GMjNjOj^G_GXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoKILIMINIOI*m+m,m-mYk`GPIQIZk0k1k2k3k.m/m:m;m=m?m@m[m]m^mte=dKd$d%dydue?dLd'd(dzdve@dMd)d*dAdwe[dNd+d,dBdxe]dOd-d.dCdye^dPd/d:dDd_m`m{m|m}m~manbncndnenfnqorFgnhninjnKEsFtFRISIknro?HAm{G|G}GBm~GSlTl@H[HCmDm]Hjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorllnuFTI8k9k!k#k$k%kmnkklkmknkokpkqkrkdlelflIJBiUIaHbHVIWI'k(k)kXIYIZI0I1I?J^H_H@J[Jnnonpn]J^J_J`J{J|J`H{H}J~JqnrnsnaKbKcKdKeKtnunvnwnxnynzn2IcHdH3I4I*k+k,k5I6I7I8I9IAn!IeHfH#I$I-k.k/k%I'I(I)I*ICiBnCn:kvFwFvjPj;kxFQjRjSjTjUjVjwjck=kWjMfNfOfsktkPfQfukRfSfTfUfHmVfWf6Cvk7Cwk8CxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGk9CHk!CIkJm#CJkKkKmLkLmMkNkMmOkNmPkQkRkSk~daeZJzeAeBeCeDeEebeUlce_d(E;dde`dFeee{d+Ife,I|dGeHeIegeheiejekelemeAFf g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J -I.I/I:I;I=I9eBo*i+icI?IGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8i_FBF#HCFjH=jlbzjdI(jkH@I[I]I^I_I`I+j{I|I}I~IaJbJcJ,jeIfI9JgIhIiIjIkI!J#JlI$JmInI%J'J(J)J*J+JoIpI,J-JglLlc DnEnFnxjyj-j.j/jXboepeYbZbqerelH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$e)j@j[j]j^j.lMl/l:l_j`jPl9i;l=l{j|j?lQl}j~jakbk.Jsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0j@lRl*j1jti9f-CCj2j.CmHnHyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoCGDGEGRo$j;j}dFjyi%i%j'jXl|bdJ}b~bJlacKlbc/Jcc:JdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COc)HPc*HQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c+H$coH%cpH'cqH(crH)csH*ctH+cuH,cvH-cwH.cxH/cyH:czH;cAH=cBH?cCH@cDH[c]c^cQd_cRd`c{cSd|cTd}cGd~cHdada bdcdUdddVdedfdgdhdIdidJdjdWdkdXdldYdmdZdnd0dod1dpd2dqd3drd4dsd5dtdud6dvd7dwdxdjG9l!l,e#l$l%l'lzm-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l,iEH-l4G5G6GeJ;J7GFHfJ-HgJhJiJjJ.HkJlJmJnJoJpJqJrJsJtJuJvJwJxJyFyJ:HzJAJ~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLfFGGGHGIGJGGHqIrIsItIuIvI(mHHwICoIHJHpKqKrKsKtKuKxIKHgFLHyIzIAIMHvKwKxKyKVEWEXEYEZE0EBI1E2E3E4E5EKGLGJoMGNGzFOGKoPGLoQGRGSGTG=H6E
1652 err = cydriver.cuCtxGetDevice(&dev) 2Ub#G$GqF%G'G(G)G*G+GrG,G-G.G/G:GTkEIFIGIHIII;GHjIj=i?isG@iJj=G?G[iKjUkLj@G]iVkJI[G^i_itGWk]GMjNjOj^G_GXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoKILIMINIOI*m+m,m-mYk`GPIQIZk0k1k2k3k.m/m:m;m=m?m@m[m]m^mte=dKd$d%dydue?dLd'd(dzdve@dMd)d*dAdwe[dNd+d,dBdxe]dOd-d.dCdye^dPd/d:dDd_m`m{m|m}m~manbncndnenfnqorFgnhninjnKEsFtFRISIknro?HAm{G|G}GBm~GSlTl@H[HCmDm]Hjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorllnuFTI8k9k!k#k$k%kmnkklkmknkokpkqkrkdlelflIJBiUIaHbHVIWI'k(k)kXIYIZI0I1I?J^H_H@J[Jnnonpn]J^J_J`J{J|J`H{H}J~JqnrnsnaKbKcKdKeKtnunvnwnxnynzn2IcHdH3I4I*k+k,k5I6I7I8I9IAn!IeHfH#I$I-k.k/k%I'I(I)I*ICiBnCn:kvFwFvjPj;kxFQjRjSjTjUjVjwjck=kWjMfNfOfsktkPfQfukRfSfTfUfHmVfWf6Cvk7Cwk8CxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGk9CHk!CIkJm#CJkKkKmLkLmMkNkMmOkNmPkQkRkSk~daeZJzeAeBeCeDeEebeUlce_d(E;dde`dFeee{d+Ife,I|dGeHeIegeheiejekelemeAFf g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J -I.I/I:I;I=I9eBo*i+icI?IGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8i_FBF#HCFjH=jlbzjdI(jkH@I[I]I^I_I`I+j{I|I}I~IaJbJcJ,jeIfI9JgIhIiIjIkI!J#JlI$JmInI%J'J(J)J*J+JoIpI,J-JglLlc DnEnFnxjyj-j.j/jXboepeYbZbqerelH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$e)j@j[j]j^j.lMl/l:l_j`jPl9i;l=l{j|j?lQl}j~jakbk.Jsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0j@lRl*j1jti9f-CCj2j.CmHnHyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoCGDGEGRo$j;j}dFjyi%i%j'jXl|bdJ}b~bJlacKlbc/Jcc:JdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COc)HPc*HQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c+H$coH%cpH'cqH(crH)csH*ctH+cuH,cvH-cwH.cxH/cyH:czH;cAH=cBH?cCH@cDH[c]c^cQd_cRd`c{cSd|cTd}cGd~cHdada bdcdUdddVdedfdgdhdIdidJdjdWdkdXdldYdmdZdnd0dod1dpd2dqd3drd4dsd5dtdud6dvd7dwdxdjG9l!l,e#l$l%l'lzm-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l,iEH-l4G5G6GeJ;J7GFHfJ-HgJhJiJjJ.HkJlJmJnJoJpJqJrJsJtJuJvJwJxJyFyJ:HzJAJ~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLfFGGGHGIGJGGHqIrIsItIuIvI(mHHwICoIHJHpKqKrKsKtKuKxIKHgFLHyIzIAIMHvKwKxKyKVEWEXEYEZE0EBI1E2E3E4E5EKGLGJoMGNGzFOGKoPGLoQGRGSGTG=H6E
1653 if err == cydriver.CUresult.CUDA_SUCCESS: 2Ub#G$GqF%G'G(G)G*G+GrG,G-G.G/G:GTkEIFIGIHIII;GHjIj=i?isG@iJj=G?G[iKjUkLj@G]iVkJI[G^i_itGWk]GMjNjOj^G_GXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoKILIMINIOI*m+m,m-mYk`GPIQIZk0k1k2k3k.m/m:m;m=m?m@m[m]m^mte=dKd$d%dydue?dLd'd(dzdve@dMd)d*dAdwe[dNd+d,dBdxe]dOd-d.dCdye^dPd/d:dDd_m`m{m|m}m~manbncndnenfnqorFgnhninjnKEsFtFRISIknro?HAm{G|G}GBm~GSlTl@H[HCmDm]Hjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorllnuFTI8k9k!k#k$k%kmnkklkmknkokpkqkrkdlelflIJBiUIaHbHVIWI'k(k)kXIYIZI0I1I?J^H_H@J[Jnnonpn]J^J_J`J{J|J`H{H}J~JqnrnsnaKbKcKdKeKtnunvnwnxnynzn2IcHdH3I4I*k+k,k5I6I7I8I9IAn!IeHfH#I$I-k.k/k%I'I(I)I*ICiBnCn:kvFwFvjPj;kxFQjRjSjTjUjVjwjck=kWjMfNfOfsktkPfQfukRfSfTfUfHmVfWf6Cvk7Cwk8CxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGk9CHk!CIkJm#CJkKkKmLkLmMkNkMmOkNmPkQkRkSk~daeZJzeAeBeCeDeEebeUlce_d(E;dde`dFeee{d+Ife,I|dGeHeIegeheiejekelemeAFf g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J -I.I/I:I;I=I9eBo*i+icI?IGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8i_FBF#HCFjH=jlbzjdI(jkH@I[I]I^I_I`I+j{I|I}I~IaJbJcJ,jeIfI9JgIhIiIjIkI!J#JlI$JmInI%J'J(J)J*J+JoIpI,J-JglLlc DnEnFnxjyj-j.j/jXboepeYbZbqerelH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$e)j@j[j]j^j.lMl/l:l_j`jPl9i;l=l{j|j?lQl}j~jakbk.Jsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0j@lRl*j1jti9f-CCj2j.CmHnHyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoCGDGEGRo$j;j}dFjyi%i%j'jXl|bdJ}b~bJlacKlbc/Jcc:JdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COc)HPc*HQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c+H$coH%cpH'cqH(crH)csH*ctH+cuH,cvH-cwH.cxH/cyH:czH;cAH=cBH?cCH@cDH[c]c^cQd_cRd`c{cSd|cTd}cGd~cHdada bdcdUdddVdedfdgdhdIdidJdjdWdkdXdldYdmdZdnd0dod1dpd2dqd3drd4dsd5dtdud6dvd7dwdxdjG9l!l,e#l$l%l'lzm-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l,iEH-l4G5G6GeJ;J7GFHfJ-HgJhJiJjJ.HkJlJmJnJoJpJqJrJsJtJuJvJwJxJyFyJ:HzJAJ~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLfFGGGHGIGJGGHqIrIsItIuIvI(mHHwICoIHJHpKqKrKsKtKuKxIKHgFLHyIzIAIMHvKwKxKyKVEWEXEYEZE0EBI1E2E3E4E5EKGLGJoMGNGzFOGKoPGLoQGRGSGTG=H6E
1654 return int(dev) 2#G$GqF%G'G(G)G*G+GrG,G-G.G/G:GTkEIFIGIHIII;GHjIj=i?isG@iJj=G?G[iKjUkLj@G]iVkJI[G^i_itGWk]GMjNjOj^G_GXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoKILIMINIOI*m+m,m-mYk`GPIQIZk0k1k2k3k.m/m:m;m=m?m@m[m]m^mte=dKd$d%dydue?dLd'd(dzdve@dMd)d*dAdwe[dNd+d,dBdxe]dOd-d.dCdye^dPd/d:dDd_m`m{m|m}m~manbncndnenfnqorFgnhninjnKEsFtFRISIknro?HAm{G|G}GBm~GSlTl@H[HCmDm]Hjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorllnuFTI8k9k!k#k$k%kmnkklkmknkokpkqkrkdlelflIJBiUIaHbHVIWI'k(k)kXIYIZI0I1I?J^H_H@J[Jnnonpn]J^J_J`J{J|J`H{H}J~JqnrnsnaKbKcKdKeKtnunvnwnxnynzn2IcHdH3I4I*k+k,k5I6I7I8I9IAn!IeHfH#I$I-k.k/k%I'I(I)I*ICiBnCn:kvFwFvjPj;kxFQjRjSjTjUjVjwjck=kWjMfNfOfsktkPfQfukRfSfTfUfHmVfWf6Cvk7Cwk8CxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGk9CHk!CIkJm#CJkKkKmLkLmMkNkMmOkNmPkQkRkSk~daeZJzeAeBeCeDeEebeUlce_d(E;dde`dFeee{d+Ife,I|dGeHeIegeheiejekelemeAFf g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J -I.I/I:I;I=IcI?IjHdIkH@I[I]I^I_I`I+j{I|I}I~IaJbJcJ,jeIfI9JgIhIiIjIkI!J#JlI$JmInI%J'J(J)J*J+JoIpI,J-Jglc DnEnFnxjyj-j.j/jXboepeYbZbqerelH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$e)jMl9iQl.Jsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0jRl*j1jti9f-CCj2j.CmHnHyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoCGDGEGRo$j;j}dFjyi%i%j'jXl|bdJ}b~bJlacKlbc/Jcc:JdcseWbYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COc)HPc*HQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c+H$coH%cpH'cqH(crH)csH*ctH+cuH,cvH-cwH.cxH/cyH:czH;cAH=cBH?cCH@cDH[c]c^cQd_cRd`c{cSd|cTd}cGd~cHdada bdcdUdddVdedfdgdhdIdidJdjdWdkdXdldYdmdZdnd0dod1dpd2dqd3drd4dsd5dtdud6dvd7dwdxd9l!l#l$l%l'l(l)l*l+l,lEH-l4G5G6GeJ;J7GFHfJ-HgJhJiJjJ.HkJlJmJnJoJpJqJrJsJtJuJvJwJxJyFyJ:HzJAJ~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLfFGGGHGIGJGGHqIrIsItIuIvI(mHHwICoIHJHpKqKrKsKtKuKxIKHgFLHyIzIAIMHvKwKxKyKVEWEXEYEZE0EBI1E2E3E4E5EKGLGJoMGNGzFOGKoPGLoQGRGSGTG=H6E
1655 elif err == cydriver.CUresult.CUDA_ERROR_INVALID_CONTEXT:
1656 with nogil: 2Ub9eBo*i+iGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8i_FBF#HCF=jlbzj(jglLlc )j@j[j]j^j.lMl/l:l_j`jPl;l=l{j|j?lQl}j~jakbk@lRl*j+ejG,ezm-e.e/e:e;e=e?e@e[e]e^e_e`e{e|e}emb,i
1657 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2Ub9eBo*i+iGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8i_FBF#HCF=jlbzj(jglLlc )j@j[j]j^j.lMl/l:l_j`jPl;l=l{j|j?lQl}j~jakbk@lRl*j+ejG,ezm-e.e/e:e;e=e?e@e[e]e^e_e`e{e|e}emb,i
1658 assert <void*>(ctx) == NULL 2Ub9eBo*i+iGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8i_FBF#HCF=jlbzj(jglLlc )j@j[j]j^j.lMl/l:l_j`jPl;l=l{j|j?lQl}j~jakbk@lRl*j+ejG,ezm-e.e/e:e;e=e?e@e[e]e^e_e`e{e|e}emb,i
1659 return 0 # cudart behavior 2Ub9eBo*i+iGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8i_FBF#HCF=jlbzj(jglLlc )j@j[j]j^j.lMl/l:l_j`jPl;l=l{j|j?lQl}j~jakbk@lRl*j+ejG,ezm-e.e/e:e;e=e?e@e[e]e^e_e`e{e|e}emb,i
1660 else:
1661 HANDLE_RETURN(err)
1662 elif device_id < 0: 2UbVoWoXoYoZo0o1o2o3orG4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o=i,o?i-osG.o@i/o:o;o=o[i?o@o[o]o^o]i_o`o{o|o^i}o_i~otGapbpcpdpepfpgphpipjp`ikp{ilp|imp}inp~iopajppbjqpcjrpdjspejtpfjupgjvphjwpijxpjjypkjzpljApmjBpnjCpojDppjEpqjFprjGpsjHptjIpujJpMoKpNoLpNDMpODNpOpInPDPpQpQDRpRDSpSDTp/f:f;fUp=f?f@fTDVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p*m#p+m$p,m%p-m'p(p)p*p+pDo,pEo-p.p/p:p;p=p.m?p/m@p:m[p;m]p=m^p?m_p@m`p[m{pFo|p}p~paqUDbqVDcqWDdqXDeqYDfqZDgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6qGo7q0D8q9q!q#q$q1D%q'qHo(q)q~m*qIo+q,q-q.q/q:q;qqo=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerrofrgrhrirjrkrlrmrnrorprqrrrAmsr{GtrurvrBmwr~GxrSlyrTlzrArBrCmCrDmDrErjlFrGr-iHr.iIrJrKrLrMrNrsoOrtoPruoQrklRrllSrmlTrvoUrnlVrWrolXrplYrqlZrwo0rxo1rrl2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@rmn[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhZHch0Hdh1Heh^rfh_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPs{CQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s)E@s*E[s2H]s^s|C_s}C`s~C{s|s}s~satbtctdtetvjftgthtitjtktltmtntotwjptqtrtWjstJJMfNfKJOf+Esk,EtkPfQf@FukRfSfTfLJUfaDHmVfMJWfvkwkxkbDImNJXfOJYfPJZfQJ0f1f2f3f4f5f6f7f8f[Fyk]FzkAkBkCkDk^FEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~d|HaeytBKze5CAeZGBeiGCe0GDeEebeztce_d(E;d}Hde~H`dFeee{dAtfe|dGeCKHeIeaIgebIheiejekelemeBtCtDtEtFtGt-E* f K RJ+ g L LE, 9Eh M 0J- !Ei N HD. j O nb/ k P ob: l Q pbgh[h; Hnm R qbrbsbtbubvbwbxbybzbAbJn= Son S Kn? Too T @ p U [ 1J] ^ 2J_ ` 3J{ | 4J} ~ 5Jabbb6Jcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 MEdb2DC 7 eb3DD 8 NEfb4DE 9 OEgb#EF ! LnMnNnuGhbUoG # SJBbTJCbDbEb7JiboFH $ 8Jjb;EI % PEkbpFJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYe`CZe0e1e2e3e4e5e6e7eYG8eIDFbJDGbVbHbUJIbVJJbKbLbWJMbXJNbObPb3HHtItJtKtLtMtNtOtPtQt*i+i4HvG5HgHRtfKStwG6HgKTthH7HhKUtiK8H#iPnxG.EiH9HQnjK!H$HyGzG%HhhVtihCJWtjhRnXtYtZt0t1tkH2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueuSn]hTnDJUn^h/Eb ?jEdAjFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nDK,n-nhuci.niujuc kulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXboe]upe^uYbZbqe_ure`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdvevfvgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwkh?n/CwwxwkKlhywmhnhohph@nlKqhmKrhzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQw!iRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?wYj@w%e[w]w^w_w`w{w|w}w~wZjax'ebxcxdxexfxgxhxix0jjxFhGhkxlx[n]nmxnxoxMCpx1jqxrxtisx9ftxGnuxvxwxxxyx^nHhzx_nmHAxnHBx`n{n|nCxDxExFxGxDjHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x}d!x#x$x%x'x(x}n~naobocodoeofogohoiojoko)xlL|bdJ}b~b*xac+xbcccdcse,xWb-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqczi_xAi`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$coH%cpH'cqH(crH)csH*ctH+cuH,cvH-cwH.cxH/cyH:czH;cAH=cBH?cCH@cDH[c]c1GQbRb2GSbIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya nKxyoKyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;zmb=z?z@z[z]z,i^z_z`z{z|z,H}z~zaA;ibAcAdAeAfAgAhAiA-HjAkAlAmAnA.HoApAqArAsAtAuAvA/HwAxAyAzAAABACADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpfQE!mRE#mSE$mqfrfsftfufTE%mUE'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQAGHRASATAUAVAWAXA(mYAZA0ACo1A2A3A4A5A6A7A8A9A!A#A$ALH%A'A(A)A*A+A,A-A.AVE/AWE:AXE;AYE=AZE?A0E@A[A1E]A2E^A3E_A4E`A5E{A|A}AJo~AaBbBcBoo;HdBeBKofBgBLohBiBjBkBlBmBnBoBpBGjpoqBDFrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBEFRBFFSBGFTBHFUBIFVBJFWBKFXBLFYBMFZBNF0BOF1BPF2BQF3BRF4BSF5BTF6BUF7BVF8BWF9BXF!BYF#BZF$B0F%B1F'B2F(B3F)B4F*B5F+B6F,B7F-B8F.B9F/B!F:B#F;B$F=B%F?B'F@B(F[B)F]B^B_B`B*F{B|B}B+F~BaC7EbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFC,FGC-FHCICJC.FKC
1663 raise ValueError(f"device_id must be >= 0, got {device_id}")
1664 return device_id 2UbVoWoXoYoZo0o1o2o3orG4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o=i,o?i-osG.o@i/o:o;o=o[i?o@o[o]o^o]i_o`o{o|o^i}o_i~otGapbpcpdpepfpgphpipjp`ikp{ilp|imp}inp~iopajppbjqpcjrpdjspejtpfjupgjvphjwpijxpjjypkjzpljApmjBpnjCpojDppjEpqjFprjGpsjHptjIpujJpMoKpNoLpNDMpODNpOpInPDPpQpQDRpRDSpSDTp/f:f;fUp=f?f@fTDVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p*m#p+m$p,m%p-m'p(p)p*p+pDo,pEo-p.p/p:p;p=p.m?p/m@p:m[p;m]p=m^p?m_p@m`p[m{pFo|p}p~paqUDbqVDcqWDdqXDeqYDfqZDgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6qGo7q0D8q9q!q#q$q1D%q'qHo(q)q~m*qIo+q,q-q.q/q:q;qqo=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerrofrgrhrirjrkrlrmrnrorprqrrrAmsr{GtrurvrBmwr~GxrSlyrTlzrArBrCmCrDmDrErjlFrGr-iHr.iIrJrKrLrMrNrsoOrtoPruoQrklRrllSrmlTrvoUrnlVrWrolXrplYrqlZrwo0rxo1rrl2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@rmn[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhZHch0Hdh1Heh^rfh_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPs{CQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s)E@s*E[s2H]s^s|C_s}C`s~C{s|s}s~satbtctdtetvjftgthtitjtktltmtntotwjptqtrtWjstJJMfNfKJOf+Esk,EtkPfQf@FukRfSfTfLJUfaDHmVfMJWfvkwkxkbDImNJXfOJYfPJZfQJ0f1f2f3f4f5f6f7f8f[Fyk]FzkAkBkCkDk^FEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~d|HaeytBKze5CAeZGBeiGCe0GDeEebeztce_d(E;d}Hde~H`dFeee{dAtfe|dGeCKHeIeaIgebIheiejekelemeBtCtDtEtFtGt-E* f K RJ+ g L LE, 9Eh M 0J- !Ei N HD. j O nb/ k P ob: l Q pbgh[h; Hnm R qbrbsbtbubvbwbxbybzbAbJn= Son S Kn? Too T @ p U [ 1J] ^ 2J_ ` 3J{ | 4J} ~ 5Jabbb6Jcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 MEdb2DC 7 eb3DD 8 NEfb4DE 9 OEgb#EF ! LnMnNnuGhbUoG # SJBbTJCbDbEb7JiboFH $ 8Jjb;EI % PEkbpFJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYe`CZe0e1e2e3e4e5e6e7eYG8eIDFbJDGbVbHbUJIbVJJbKbLbWJMbXJNbObPb3HHtItJtKtLtMtNtOtPtQt*i+i4HvG5HgHRtfKStwG6HgKTthH7HhKUtiK8H#iPnxG.EiH9HQnjK!H$HyGzG%HhhVtihCJWtjhRnXtYtZt0t1tkH2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueuSn]hTnDJUn^h/Eb ?jEdAjFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nDK,n-nhuci.niujuc kulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXboe]upe^uYbZbqe_ure`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdvevfvgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwkh?n/CwwxwkKlhywmhnhohph@nlKqhmKrhzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQw!iRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?wYj@w%e[w]w^w_w`w{w|w}w~wZjax'ebxcxdxexfxgxhxix0jjxFhGhkxlx[n]nmxnxoxMCpx1jqxrxtisx9ftxGnuxvxwxxxyx^nHhzx_nmHAxnHBx`n{n|nCxDxExFxGxDjHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x}d!x#x$x%x'x(x}n~naobocodoeofogohoiojoko)x|bdJ}b~b*xac+xbcccdcse,xWb-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqczi_xAi`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$coH%cpH'cqH(crH)csH*ctH+cuH,cvH-cwH.cxH/cyH:czH;cAH=cBH?cCH@cDH[c]c1GQbRb2GSbIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya nKxyoKyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;zmb=z?z@z[z]z,i^z_z`z{z|z,H}z~zaA;ibAcAdAeAfAgAhAiA-HjAkAlAmAnA.HoApAqArAsAtAuAvA/HwAxAyAzAAABACADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpfQE!mRE#mSE$mqfrfsftfufTE%mUE'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQAGHRASATAUAVAWAXA(mYAZA0ACo1A2A3A4A5A6A7A8A9A!A#A$ALH%A'A(A)A*A+A,A-A.AVE/AWE:AXE;AYE=AZE?A0E@A[A1E]A2E^A3E_A4E`A5E{A|A}AJo~AaBbBcBoo;HdBeBKofBgBLohBiBjBkBlBmBnBoBpBGjpoqBDFrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBEFRBFFSBGFTBHFUBIFVBJFWBKFXBLFYBMFZBNF0BOF1BPF2BQF3BRF4BSF5BTF6BUF7BVF8BWF9BXF!BYF#BZF$B0F%B1F'B2F(B3F)B4F*B5F+B6F,B7F-B8F.B9F/B!F:B#F;B$F=B%F?B'F@B(F[B)F]B^B_B`B*F{B|B}B+F~BaC7EbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFC,FGC-FHCICJC.FKC
1667cdef inline list Device_ensure_tls_devices(cls):
1668 """Ensure thread-local Device singletons exist, creating if needed."""
1669 cdef int total
1670 try: 2Ub#GVo$GWoqFXo%GYo'GZo(G0o)G1o*G2o+G3orG4o,G5o-G6o.G7o/G8o:G9oTk!oEI#oFI$oGI%oHI'oII(o;G)oHj*oIj+o=i,o?i-osG.o@i/oJj:o=G;o?G=o[i?oKj@oUk[oLj]o@G^o]i_oVk`oJI{o[G|o^i}o_i~otGapWkbp]GcpMjdpNjepOjfp^Ggp_GhpXkip)mjp`ikp{ilp|imp}inp~iopajppbjqpcjrpdjspejtpfjupgjvphjwpijxpjjypkjzpljApmjBpnjCpojDppjEpqjFprjGpsjHptjIpujJpMoKpNoLpNDMpODNpOpInPDPpQpQDRpRDSpSDTp/f:f;fUp=f?f@fTDVpWpXpKIYpLIZpMI0pNI1pOI2p3p4p5p6p7p8p9p!p*m#p+m$p,m%p-m'pYk(p`G)pPI*pQI+pDo,pEo-pZk.p0k/p1k:p2k;p3k=p.m?p/m@p:m[p;m]p=m^p?m_p@m`p[m{pFo|p}p~paqUDbqVDcqWDdqXDeqYDfqZDgqhqiqjq]mkq^mlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6qGo7q0D8q_m9q`m!q{m#q|m$q1D%q}m'qHo(q)q~m*qIo+qan,qbn-qcn.qdn/qen:qfn;qqo=qrF?q@q[q]q^qgn_qhn`qin{qjn|qKE}qsF~qtFarRIbrSIcrkndrerrofrgrhrirjrkrlrmrnrorprqr?HrrAmsr{Gtr|Gur}GvrBmwr~GxrSlyrTlzr@HAr[HBrCmCrDmDr]HErjlFr4kGr-iHr.iIrEmJrFmKrBjLr5kMr6kNrsoOrtoPruoQrklRrllSrmlTrvoUrnlVr7kWrolXrplYrqlZrwo0rxo1rrl2r3rln4ruF5r6r7rTI8r9r!r#r$r8k%r9k'r!k(r#k)r$k*r+r,r-r.r%k/r:r;r=r?r@rmn[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhZHch0Hdh1HehIJ^rfh_rBi`r{rUI|raH}rbH~rVIasWIbs'kcs(kds)kesXIfsYIgsZIhs0Iis1Ijs?Jks^Hls_Hms@Jns[Josnnpsonqspnrs]Jss^Jts_Jus`Jvs{Jws|Jxs`Hys{Hzs}JAs~JBsqnCsrnDssnEsaKFsbKGscKHsdKIseKJsKstnLsunMsvnNswnOsxnPs{CQsynRsSsTsznUs2IVscHWsdHXs3IYs4IZs*k0s+k1s,k2s5I3s6I4s7I5s8I6s9I7sAn8s9s!I!seH#sfH$s#I%s$I's-k(s.k)s/k*s%I+s'I,s(I-s)I.s*I/s:sCi;sBn=sCn?s)E@s*E[s2H]s^s|C_s}C`s~C{s|s}s~s:katbtctvFdtwFetvjftPjgt;khtxFitQjjtRjktSjltTjmtUjntVjotwjptckqt=krtWjstJJMfNfKJOf+Esk,EtkPfQf@FukRfSfTfLJUfaDHmVfMJWf6Cvk7Cwk8CxkbDImNJXfOJYfPJZfQJ0f1f2f3f4f5f6f7f8f[Fyk]FzkAkBkCkDk^FEkFkGk9CHk!CIkJm#CJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~d|HaeZJytBKze5CAeZGBeiGCe0GDeEebeUlztce_d(E;d}Hde~H`dFeee{dAt+Ife,I|dGeCKHeIeaIgebIheiejekelemeAFBtCtDtEtFtGt-E* f K RJ+ g L LE, 9Eh M 0J- !Ei N HD. j O nb/ k P ob: l Q pbgh[h; Hnm R qbrbsbtbubvbwbxbybzbAbJn= Son S Kn? Too T @ p U [ 1J] ^ 2J_ ` 3J{ | 4J} ~ 5Jabbb6Jcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 MEdb2DC 7 eb3DD 8 NEfb4DE 9 OEgb#EF ! LnMnNnuGhbUoG # SJBbTJCbDbEb7JiboFH $ 8Jjb;EI % PEkbpFJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYe`CZe0e1e2e3e4e5e6e7eYG8eIDFbJDGbVbHbUJIbVJJbKbLbWJMbXJNbObPbYJ4K5KKDLD6K7K3HMDHtItJt-IKt.ILt/IMt:INt;IOt=IPtQt9eBo*i+icI4HvG?I5HgHRtfKStwG6HgKTthH7H=JhKUtiK8H#iPnGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8ixG.E_FiH9HQnjK!HNH8GBF#H$HyGzG%HCFhhVtihCJWtjhRnXtYtZtjH0t=jlbzjdI1t(jkH2t@I3t[I4t]I5t^I6t_I7t`I8t+j9t{I!t|I#t}I$t~I%taJ'tbJ(tcJ)t,j*teI+tfI,t9J-tgI.thI/tiI:tjI;tkI=t!J?t#J@tlI[t$J]tmI^tnI_t%J`t'J{t(J|t)J}t*J~t+JauoIbupIcu,Jdu-JeuSn]hTnDJUn^h/Eb ?jEdAjFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOHDK,n-nhuci.niujuglLlc DnkuEnlumuFnnuoupuquxjruyjsu-jtuuuvuwuxuyuzuAuBuCuDuEuFuGu.jHu/jIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXboe]upe^uYbZbqe_ure`ulH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVl{uWl|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPl/CwwxwkKlh9iywmhnhohph@nlKqhmKrh;l=lzwAw{j|j?lQl}j~jakbk.JBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w$C!w|k#w%C$wwl%w'C'wxl(w(C)wyl*w)C+wzl,w*C-w}k.w+C/wAl:w,C;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjxFh@lRlGh*jkxlx[n]nmxnxoxMCpx1jqxrxtisx9ftxGnux-CvxCjwx2jxx.Cyx^nHhzx_nmHAxnHBx`n{n|nyoCxzoDxAoEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1xPo2xQo3xCG4xDG5xEG6xRo7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojokoXl)x|bdJ}b~bJl*xacKl+xbc/Jcc:Jdcse,xWb+eYl-xZl.x0l/x1l:x2l;x3l=x4l?x5l@x6l[x7l]x8l^xecfcgchcicjckclcmcncocpcqczi_xAi`xBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COc)HPc*HQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c+H$coH%cpH'cqH(crH)csH*ctH+cuH,cvH-cwH.cxH/cyH:czH;cAH=cBH?cCH@cDH[c]c1GQbRb2GSbIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya nKxyoKyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjG9ljz!lkz,e#llz$lmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz%lZz'l0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e(l:z_e`e{e|e}e)l;z*lmb+l=z,l?z@z[z]z,i^z_z`z{z|zEH,H-l}z~zaA;i4GbA5GcA6GdAeJeAPH;JfAQHRHSH7GgAFHhAfJiA-HjAgJkAhJlAiJmAjJnA.HoAkJpAlJqAmJrAnJsAoJtApJuAqJvArJ/HsJwAtJxAuJyAvJzAwJAAxJBAyFCAyJDA:HEAzJFAAJGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpfQE!mRE#mSE$mqfrfsftfufTE%mUE'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#d?LHA@LIA[LJA]LKA^LLAJfKfLfFGMAGGNAHGOAIGPAJGQAGHRAqISArITAsIUAtIVAuIWAvIXA(mYAHHZAwI0ACo1AIH2AJH3ApK4AqK5ArK6AsK7AtK8AuK9AxI!AKH#AgF$ALH%AyI'AzI(AAI)AMH*AvK+AwK,AxK-AyK.AVE/AWE:AXE;AYE=AZE?A0E@ABI[A1E]A2E^A3E_A4E`A5E{AKG|ALG}AJo~AMGaBNGbBzFcBoo;HdBOGeBKofBPGgBLohBQGiBRGjBkBlBSGmBnBTGoB=HpBGjpo6EqBDFrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBEFRBFFSBGFTBHFUBIFVBJFWBKFXBLFYBMFZBNF0BOF1BPF2BQF3BRF4BSF5BTF6BUF7BVF8BWF9BXF!BYF#BZF$B0F%B1F'B2F(B3F)B4F*B5F+B6F,B7F-B8F.B9F/B!F:B#F;B$F=B%F?B'F@B(F[B)F]B^B_B`B*F{B|B}B+F~BaC7EbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFC,FGC-FHCICJC.FKC
1671 return _tls.devices 2Ub#GVo$GWoqFXo%GYo'GZo(G0o)G1o*G2o+G3orG4o,G5o-G6o.G7o/G8o:G9oTk!oEI#oFI$oGI%oHI'oII(o;G)oHj*oIj+o=i,o?i-osG.o@i/oJj:o=G;o?G=o[i?oKj@oUk[oLj]o@G^o]i_oVk`oJI{o[G|o^i}o_i~otGapWkbp]GcpMjdpNjepOjfp^Ggp_GhpXkip)mjp`ikp{ilp|imp}inp~iopajppbjqpcjrpdjspejtpfjupgjvphjwpijxpjjypkjzpljApmjBpnjCpojDppjEpqjFprjGpsjHptjIpujJpMoKpNoLpNDMpODNpOpInPDPpQpQDRpRDSpSDTp/f:f;fUp=f?f@fTDVpWpXpKIYpLIZpMI0pNI1pOI2p3p4p5p6p7p8p9p!p*m#p+m$p,m%p-m'pYk(p`G)pPI*pQI+pDo,pEo-pZk.p0k/p1k:p2k;p3k=p.m?p/m@p:m[p;m]p=m^p?m_p@m`p[m{pFo|p}p~paqUDbqVDcqWDdqXDeqYDfqZDgqhqiqjq]mkq^mlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6qGo7q0D8q_m9q`m!q{m#q|m$q1D%q}m'qHo(q)q~m*qIo+qan,qbn-qcn.qdn/qen:qfn;qqo=qrF?q@q[q]q^qgn_qhn`qin{qjn|qKE}qsF~qtFarRIbrSIcrkndrerrofrgrhrirjrkrlrmrnrorprqr?HrrAmsr{Gtr|Gur}GvrBmwr~GxrSlyrTlzr@HAr[HBrCmCrDmDr]HErjlFr4kGr-iHr.iIrEmJrFmKrBjLr5kMr6kNrsoOrtoPruoQrklRrllSrmlTrvoUrnlVr7kWrolXrplYrqlZrwo0rxo1rrl2r3rln4ruF5r6r7rTI8r9r!r#r$r8k%r9k'r!k(r#k)r$k*r+r,r-r.r%k/r:r;r=r?r@rmn[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhZHch0Hdh1HehIJ^rfh_rBi`r{rUI|raH}rbH~rVIasWIbs'kcs(kds)kesXIfsYIgsZIhs0Iis1Ijs?Jks^Hls_Hms@Jns[Josnnpsonqspnrs]Jss^Jts_Jus`Jvs{Jws|Jxs`Hys{Hzs}JAs~JBsqnCsrnDssnEsaKFsbKGscKHsdKIseKJsKstnLsunMsvnNswnOsxnPs{CQsynRsSsTsznUs2IVscHWsdHXs3IYs4IZs*k0s+k1s,k2s5I3s6I4s7I5s8I6s9I7sAn8s9s!I!seH#sfH$s#I%s$I's-k(s.k)s/k*s%I+s'I,s(I-s)I.s*I/s:sCi;sBn=sCn?s)E@s*E[s2H]s^s|C_s}C`s~C{s|s}s~s:katbtctvFdtwFetvjftPjgt;khtxFitQjjtRjktSjltTjmtUjntVjotwjptckqt=krtWjstJJMfNfKJOf+Esk,EtkPfQf@FukRfSfTfLJUfaDHmVfMJWf6Cvk7Cwk8CxkbDImNJXfOJYfPJZfQJ0f1f2f3f4f5f6f7f8f[Fyk]FzkAkBkCkDk^FEkFkGk9CHk!CIkJm#CJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~d|HaeZJytBKze5CAeZGBeiGCe0GDeEebeUlztce_d(E;d}Hde~H`dFeee{dAt+Ife,I|dGeCKHeIeaIgebIheiejekelemeAFBtCtDtEtFtGt-E* f K RJ+ g L LE, 9Eh M 0J- !Ei N HD. j O nb/ k P ob: l Q pbgh[h; Hnm R qbrbsbtbubvbwbxbybzbAbJn= Son S Kn? Too T @ p U [ 1J] ^ 2J_ ` 3J{ | 4J} ~ 5Jabbb6Jcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 MEdb2DC 7 eb3DD 8 NEfb4DE 9 OEgb#EF ! LnMnNnuGhbUoG # SJBbTJCbDbEb7JiboFH $ 8Jjb;EI % PEkbpFJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYe`CZe0e1e2e3e4e5e6e7eYG8eIDFbJDGbVbHbUJIbVJJbKbLbWJMbXJNbObPbYJ4K5KKDLD6K7K3HMDHtItJt-IKt.ILt/IMt:INt;IOt=IPtQt9eBo*i+icI4HvG?I5HgHRtfKStwG6HgKTthH7H=JhKUtiK8H#iPnGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8ixG.E_FiH9HQnjK!HNH8GBF#H$HyGzG%HCFhhVtihCJWtjhRnXtYtZtjH0t=jlbzjdI1t(jkH2t@I3t[I4t]I5t^I6t_I7t`I8t+j9t{I!t|I#t}I$t~I%taJ'tbJ(tcJ)t,j*teI+tfI,t9J-tgI.thI/tiI:tjI;tkI=t!J?t#J@tlI[t$J]tmI^tnI_t%J`t'J{t(J|t)J}t*J~t+JauoIbupIcu,Jdu-JeuSn]hTnDJUn^h/Eb ?jEdAjFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOHDK,n-nhuci.niujuglLlc DnkuEnlumuFnnuoupuquxjruyjsu-jtuuuvuwuxuyuzuAuBuCuDuEuFuGu.jHu/jIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXboe]upe^uYbZbqe_ure`ulH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVl{uWl|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPl/CwwxwkKlh9iywmhnhohph@nlKqhmKrh;l=lzwAw{j|j?lQl}j~jakbk.JBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w$C!w|k#w%C$wwl%w'C'wxl(w(C)wyl*w)C+wzl,w*C-w}k.w+C/wAl:w,C;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjxFh@lRlGh*jkxlx[n]nmxnxoxMCpx1jqxrxtisx9ftxGnux-CvxCjwx2jxx.Cyx^nHhzx_nmHAxnHBx`n{n|nyoCxzoDxAoEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1xPo2xQo3xCG4xDG5xEG6xRo7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojokoXl)x|bdJ}b~bJl*xacKl+xbc/Jcc:Jdcse,xWb+eYl-xZl.x0l/x1l:x2l;x3l=x4l?x5l@x6l[x7l]x8l^xecfcgchcicjckclcmcncocpcqczi_xAi`xBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COc)HPc*HQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c+H$coH%cpH'cqH(crH)csH*ctH+cuH,cvH-cwH.cxH/cyH:czH;cAH=cBH?cCH@cDH[c]c1GQbRb2GSbIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya nKxyoKyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjG9ljz!lkz,e#llz$lmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz%lZz'l0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e(l:z_e`e{e|e}e)l;z*lmb+l=z,l?z@z[z]z,i^z_z`z{z|zEH,H-l}z~zaA;i4GbA5GcA6GdAeJeAPH;JfAQHRHSH7GgAFHhAfJiA-HjAgJkAhJlAiJmAjJnA.HoAkJpAlJqAmJrAnJsAoJtApJuAqJvArJ/HsJwAtJxAuJyAvJzAwJAAxJBAyFCAyJDA:HEAzJFAAJGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpfQE!mRE#mSE$mqfrfsftfufTE%mUE'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#d?LHA@LIA[LJA]LKA^LLAJfKfLfFGMAGGNAHGOAIGPAJGQAGHRAqISArITAsIUAtIVAuIWAvIXA(mYAHHZAwI0ACo1AIH2AJH3ApK4AqK5ArK6AsK7AtK8AuK9AxI!AKH#AgF$ALH%AyI'AzI(AAI)AMH*AvK+AwK,AxK-AyK.AVE/AWE:AXE;AYE=AZE?A0E@ABI[A1E]A2E^A3E_A4E`A5E{AKG|ALG}AJo~AMGaBNGbBzFcBoo;HdBOGeBKofBPGgBLohBQGiBRGjBkBlBSGmBnBTGoB=HpBGjpo6EqBDFrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBEFRBFFSBGFTBHFUBIFVBJFWBKFXBLFYBMFZBNF0BOF1BPF2BQF3BRF4BSF5BTF6BUF7BVF8BWF9BXF!BYF#BZF$B0F%B1F'B2F(B3F)B4F*B5F+B6F,B7F-B8F.B9F/B!F:B#F;B$F=B%F?B'F@B(F[B)F]B^B_B`B*F{B|B}B+F~BaC7EbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFC,FGC-FHCICJC.FKC
1672 except AttributeError: 2UbVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeBtCtDtEtFtGt-E* f K + g L LE, h M - i N HD. j O nb/ k P ob: l Q pbgh[h; m R qbrbsbtbubvbwbxbybzbAbJn= n S Kn? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 MEdbC 7 ebD 8 NEfbE 9 OEgbF ! LnMnNnhbG # BbCbDbEbibH $ jbI % PEkbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eIDFbJDGbVbHbIbJbKbLbMbNbObPbKDLDMDHtItJtKtLtMtNtOtPtQt9eRtStTtUt#iPnGmOiDiPiQiRiEiFiGiqiXjSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8iQnNH8GhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOH,n-nhuci.niujuglLlc kulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvhviv/n:njvkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlhywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxFh@lRlGh*jkxlx[n]nmxnxoxpxqxrxsxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb+e-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkz,elzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e:z_e`e{e|e}e;zmb=z?z@z[z]z,i^z_z`z{z|z}z~zaA;ibAcAdAeAPHfAQHRHSHgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC
1673 with nogil: 2UbVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeBtCtDtEtFtGt-E* f K + g L LE, h M - i N HD. j O nb/ k P ob: l Q pbgh[h; m R qbrbsbtbubvbwbxbybzbAbJn= n S Kn? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 MEdbC 7 ebD 8 NEfbE 9 OEgbF ! LnMnNnhbG # BbCbDbEbibH $ jbI % PEkbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eIDFbJDGbVbHbIbJbKbLbMbNbObPbKDLDMDHtItJtKtLtMtNtOtPtQt9eRtStTtUt#iPnGmOiDiPiQiRiEiFiGiqiXjSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8iQnNH8GhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOH,n-nhuci.niujuglLlc kulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvhviv/n:njvkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlhywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxFh@lRlGh*jkxlx[n]nmxnxoxpxqxrxsxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb+e-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkz,elzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e:z_e`e{e|e}e;zmb=z?z@z[z]z,i^z_z`z{z|z}z~zaA;ibAcAdAeAPHfAQHRHSHgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC
1674 HANDLE_RETURN(cydriver.cuDeviceGetCount(&total)) 2UbVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeBtCtDtEtFtGt-E* f K + g L LE, h M - i N HD. j O nb/ k P ob: l Q pbgh[h; m R qbrbsbtbubvbwbxbybzbAbJn= n S Kn? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 MEdbC 7 ebD 8 NEfbE 9 OEgbF ! LnMnNnhbG # BbCbDbEbibH $ jbI % PEkbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eIDFbJDGbVbHbIbJbKbLbMbNbObPbKDLDMDHtItJtKtLtMtNtOtPtQt9eRtStTtUt#iPnGmOiDiPiQiRiEiFiGiqiXjSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8iQnNH8GhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOH,n-nhuci.niujuglLlc kulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvhviv/n:njvkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlhywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxFh@lRlGh*jkxlx[n]nmxnxoxpxqxrxsxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb+e-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkz,elzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e:z_e`e{e|e}e;zmb=z?z@z[z]z,i^z_z`z{z|z}z~zaA;ibAcAdAeAPHfAQHRHSHgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC
1675 devices = _tls.devices = [] 2UbVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeBtCtDtEtFtGt-E* f K + g L LE, h M - i N HD. j O nb/ k P ob: l Q pbgh[h; m R qbrbsbtbubvbwbxbybzbAbJn= n S Kn? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 MEdbC 7 ebD 8 NEfbE 9 OEgbF ! LnMnNnhbG # BbCbDbEbibH $ jbI % PEkbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eIDFbJDGbVbHbIbJbKbLbMbNbObPbKDLDMDHtItJtKtLtMtNtOtPtQt9eRtStTtUt#iPnGmOiDiPiQiRiEiFiGiqiXjSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8iQnNH8GhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOH,n-nhuci.niujuglLlc kulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvhviv/n:njvkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlhywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxFh@lRlGh*jkxlx[n]nmxnxoxpxqxrxsxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb+e-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkz,elzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e:z_e`e{e|e}e;zmb=z?z@z[z]z,i^z_z`z{z|z}z~zaA;ibAcAdAeAPHfAQHRHSHgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC
1676 for dev_id in range(total): 2UbVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeBtCtDtEtFtGt-E* f K + g L LE, h M - i N HD. j O nb/ k P ob: l Q pbgh[h; m R qbrbsbtbubvbwbxbybzbAbJn= n S Kn? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 MEdbC 7 ebD 8 NEfbE 9 OEgbF ! LnMnNnhbG # BbCbDbEbibH $ jbI % PEkbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eIDFbJDGbVbHbIbJbKbLbMbNbObPbKDLDMDHtItJtKtLtMtNtOtPtQt9eRtStTtUt#iPnGmOiDiPiQiRiEiFiGiqiXjSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8iQnNH8GhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOH,n-nhuci.niujuglLlc kulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvhviv/n:njvkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlhywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxFh@lRlGh*jkxlx[n]nmxnxoxpxqxrxsxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb+e-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkz,elzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e:z_e`e{e|e}e;zmb=z?z@z[z]z,i^z_z`z{z|z}z~zaA;ibAcAdAeAPHfAQHRHSHgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC
1677 device = super(Device, cls).__new__(cls) 2UbVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeBtCtDtEtFtGt-E* f K + g L LE, h M - i N HD. j O nb/ k P ob: l Q pbgh[h; m R qbrbsbtbubvbwbxbybzbAbJn= n S Kn? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 MEdbC 7 ebD 8 NEfbE 9 OEgbF ! LnMnNnhbG # BbCbDbEbibH $ jbI % PEkbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eIDFbJDGbVbHbIbJbKbLbMbNbObPbKDLDMDHtItJtKtLtMtNtOtPtQt9eRtStTtUt#iPnGmOiDiPiQiRiEiFiGiqiXjSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8iQnNH8GhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOH,n-nhuci.niujuglLlc kulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvhviv/n:njvkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlhywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxFh@lRlGh*jkxlx[n]nmxnxoxpxqxrxsxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb+e-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkz,elzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e:z_e`e{e|e}e;zmb=z?z@z[z]z,i^z_z`z{z|z}z~zaA;ibAcAdAeAPHfAQHRHSHgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC
1678 device._device_id = dev_id 2UbVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeBtCtDtEtFtGt-E* f K + g L LE, h M - i N HD. j O nb/ k P ob: l Q pbgh[h; m R qbrbsbtbubvbwbxbybzbAbJn= n S Kn? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 MEdbC 7 ebD 8 NEfbE 9 OEgbF ! LnMnNnhbG # BbCbDbEbibH $ jbI % PEkbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eIDFbJDGbVbHbIbJbKbLbMbNbObPbKDLDMDHtItJtKtLtMtNtOtPtQt9eRtStTtUt#iPnGmOiDiPiQiRiEiFiGiqiXjSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8iQnNH8GhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOH,n-nhuci.niujuglLlc kulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvhviv/n:njvkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlhywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxFh@lRlGh*jkxlx[n]nmxnxoxpxqxrxsxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb+e-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkz,elzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e:z_e`e{e|e}e;zmb=z?z@z[z]z,i^z_z`z{z|z}z~zaA;ibAcAdAeAPHfAQHRHSHgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC
1679 device._memory_resource = None 2UbVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeBtCtDtEtFtGt-E* f K + g L LE, h M - i N HD. j O nb/ k P ob: l Q pbgh[h; m R qbrbsbtbubvbwbxbybzbAbJn= n S Kn? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 MEdbC 7 ebD 8 NEfbE 9 OEgbF ! LnMnNnhbG # BbCbDbEbibH $ jbI % PEkbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eIDFbJDGbVbHbIbJbKbLbMbNbObPbKDLDMDHtItJtKtLtMtNtOtPtQt9eRtStTtUt#iPnGmOiDiPiQiRiEiFiGiqiXjSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8iQnNH8GhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOH,n-nhuci.niujuglLlc kulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvhviv/n:njvkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlhywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxFh@lRlGh*jkxlx[n]nmxnxoxpxqxrxsxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb+e-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkz,elzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e:z_e`e{e|e}e;zmb=z?z@z[z]z,i^z_z`z{z|z}z~zaA;ibAcAdAeAPHfAQHRHSHgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC
1680 device._has_inited = False 2UbVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeBtCtDtEtFtGt-E* f K + g L LE, h M - i N HD. j O nb/ k P ob: l Q pbgh[h; m R qbrbsbtbubvbwbxbybzbAbJn= n S Kn? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 MEdbC 7 ebD 8 NEfbE 9 OEgbF ! LnMnNnhbG # BbCbDbEbibH $ jbI % PEkbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eIDFbJDGbVbHbIbJbKbLbMbNbObPbKDLDMDHtItJtKtLtMtNtOtPtQt9eRtStTtUt#iPnGmOiDiPiQiRiEiFiGiqiXjSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8iQnNH8GhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOH,n-nhuci.niujuglLlc kulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvhviv/n:njvkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlhywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxFh@lRlGh*jkxlx[n]nmxnxoxpxqxrxsxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb+e-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkz,elzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e:z_e`e{e|e}e;zmb=z?z@z[z]z,i^z_z`z{z|z}z~zaA;ibAcAdAeAPHfAQHRHSHgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC
1681 device._properties = None 2UbVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeBtCtDtEtFtGt-E* f K + g L LE, h M - i N HD. j O nb/ k P ob: l Q pbgh[h; m R qbrbsbtbubvbwbxbybzbAbJn= n S Kn? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 MEdbC 7 ebD 8 NEfbE 9 OEgbF ! LnMnNnhbG # BbCbDbEbibH $ jbI % PEkbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eIDFbJDGbVbHbIbJbKbLbMbNbObPbKDLDMDHtItJtKtLtMtNtOtPtQt9eRtStTtUt#iPnGmOiDiPiQiRiEiFiGiqiXjSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8iQnNH8GhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOH,n-nhuci.niujuglLlc kulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvhviv/n:njvkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlhywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxFh@lRlGh*jkxlx[n]nmxnxoxpxqxrxsxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb+e-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkz,elzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e:z_e`e{e|e}e;zmb=z?z@z[z]z,i^z_z`z{z|z}z~zaA;ibAcAdAeAPHfAQHRHSHgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC
1682 device._resources = None 2UbVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeBtCtDtEtFtGt-E* f K + g L LE, h M - i N HD. j O nb/ k P ob: l Q pbgh[h; m R qbrbsbtbubvbwbxbybzbAbJn= n S Kn? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 MEdbC 7 ebD 8 NEfbE 9 OEgbF ! LnMnNnhbG # BbCbDbEbibH $ jbI % PEkbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eIDFbJDGbVbHbIbJbKbLbMbNbObPbKDLDMDHtItJtKtLtMtNtOtPtQt9eRtStTtUt#iPnGmOiDiPiQiRiEiFiGiqiXjSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8iQnNH8GhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOH,n-nhuci.niujuglLlc kulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvhviv/n:njvkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlhywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxFh@lRlGh*jkxlx[n]nmxnxoxpxqxrxsxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb+e-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkz,elzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e:z_e`e{e|e}e;zmb=z?z@z[z]z,i^z_z`z{z|z}z~zaA;ibAcAdAeAPHfAQHRHSHgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC
1683 device._uuid = None 2UbVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeBtCtDtEtFtGt-E* f K + g L LE, h M - i N HD. j O nb/ k P ob: l Q pbgh[h; m R qbrbsbtbubvbwbxbybzbAbJn= n S Kn? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 MEdbC 7 ebD 8 NEfbE 9 OEgbF ! LnMnNnhbG # BbCbDbEbibH $ jbI % PEkbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eIDFbJDGbVbHbIbJbKbLbMbNbObPbKDLDMDHtItJtKtLtMtNtOtPtQt9eRtStTtUt#iPnGmOiDiPiQiRiEiFiGiqiXjSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8iQnNH8GhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOH,n-nhuci.niujuglLlc kulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvhviv/n:njvkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlhywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxFh@lRlGh*jkxlx[n]nmxnxoxpxqxrxsxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb+e-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkz,elzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e:z_e`e{e|e}e;zmb=z?z@z[z]z,i^z_z`z{z|z}z~zaA;ibAcAdAeAPHfAQHRHSHgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC
1684 device._context = None 2UbVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeBtCtDtEtFtGt-E* f K + g L LE, h M - i N HD. j O nb/ k P ob: l Q pbgh[h; m R qbrbsbtbubvbwbxbybzbAbJn= n S Kn? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 MEdbC 7 ebD 8 NEfbE 9 OEgbF ! LnMnNnhbG # BbCbDbEbibH $ jbI % PEkbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eIDFbJDGbVbHbIbJbKbLbMbNbObPbKDLDMDHtItJtKtLtMtNtOtPtQt9eRtStTtUt#iPnGmOiDiPiQiRiEiFiGiqiXjSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8iQnNH8GhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOH,n-nhuci.niujuglLlc kulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvhviv/n:njvkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlhywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxFh@lRlGh*jkxlx[n]nmxnxoxpxqxrxsxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb+e-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkz,elzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e:z_e`e{e|e}e;zmb=z?z@z[z]z,i^z_z`z{z|z}z~zaA;ibAcAdAeAPHfAQHRHSHgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC
1685 devices.append(device) 2UbVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeBtCtDtEtFtGt-E* f K + g L LE, h M - i N HD. j O nb/ k P ob: l Q pbgh[h; m R qbrbsbtbubvbwbxbybzbAbJn= n S Kn? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 MEdbC 7 ebD 8 NEfbE 9 OEgbF ! LnMnNnhbG # BbCbDbEbibH $ jbI % PEkbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eIDFbJDGbVbHbIbJbKbLbMbNbObPbKDLDMDHtItJtKtLtMtNtOtPtQt9eRtStTtUt#iPnGmOiDiPiQiRiEiFiGiqiXjSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8iQnNH8GhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOH,n-nhuci.niujuglLlc kulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvhviv/n:njvkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlhywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxFh@lRlGh*jkxlx[n]nmxnxoxpxqxrxsxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb+e-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkz,elzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e:z_e`e{e|e}e;zmb=z?z@z[z]z,i^z_z`z{z|z}z~zaA;ibAcAdAeAPHfAQHRHSHgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC
1686 return devices 2UbVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeBtCtDtEtFtGt-E* f K + g L LE, h M - i N HD. j O nb/ k P ob: l Q pbgh[h; m R qbrbsbtbubvbwbxbybzbAbJn= n S Kn? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 MEdbC 7 ebD 8 NEfbE 9 OEgbF ! LnMnNnhbG # BbCbDbEbibH $ jbI % PEkbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eIDFbJDGbVbHbIbJbKbLbMbNbObPbKDLDMDHtItJtKtLtMtNtOtPtQt9eRtStTtUt#iPnGmOiDiPiQiRiEiFiGiqiXjSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8iQnNH8GhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOH,n-nhuci.niujuglLlc kulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvhviv/n:njvkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlhywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxFh@lRlGh*jkxlx[n]nmxnxoxpxqxrxsxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb+e-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkz,elzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e:z_e`e{e|e}e;zmb=z?z@z[z]z,i^z_z`z{z|z}z~zaA;ibAcAdAeAPHfAQHRHSHgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC