Coverage for cuda/core/_device.pyx: 92.87%
477 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-07-29 01:38 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-07-29 01:38 +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
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._resource_handles cimport (
22 ContextHandle,
23 GreenCtxHandle,
24 create_context_handle_ref,
25 create_green_ctx_handle,
26 get_primary_context,
27 get_last_error,
28 as_cu,
29)
31from cuda.core._stream import IsStreamType, Stream
32from cuda.core._utils.clear_error_support import assert_type
33from cuda.core._utils.cuda_utils import (
34 ComputeCapability,
35 CUDAError,
36 driver,
37 handle_return,
38 runtime,
39)
40from cuda.core._stream cimport default_stream
42from typing import TYPE_CHECKING
44if TYPE_CHECKING:
45 import cuda.core.system # no-cython-lint
46 from cuda.core.graph import GraphBuilder
47 from cuda.core.texture import (
48 MipmappedArray,
49 MipmappedArrayOptions,
50 OpaqueArray,
51 OpaqueArrayOptions,
52 ResourceDescriptor,
53 SurfaceObject,
54 TextureObject,
55 TextureObjectOptions,
56 )
58# TODO: I prefer to type these as "cdef object" and avoid accessing them from within Python,
59# but it seems it is very convenient to expose them for testing purposes...
60_tls = threading.local()
61_lock = threading.Lock()
62cdef bint _is_cuInit = False
65cdef class DeviceProperties:
66 """
67 A class to query various attributes of a CUDA device.
69 Attributes are read-only and provide information about the device.
70 """
71 cdef:
72 int _handle
73 dict _cache
75 def __init__(self, *args, **kwargs) -> None:
76 raise RuntimeError("DeviceProperties cannot be instantiated directly. Please use Device APIs.") 2hJ
78 @classmethod
79 def _init(cls, handle: int) -> DeviceProperties:
80 cdef DeviceProperties self = DeviceProperties.__new__(cls) 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMrgAhAiAjAkA1h2h3h4h5h6hlA@q[q]q^q;mBrCr=m?m@m[m_q`q{q|q}q~qarbrDrmAnAoApAqArATpUp6fXf1e7hKfLf8hse9h!h#h$h%h7fYf2e'hMfNf(hte)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|hue}h~haibici9f0f4ediQfRfeivefigihiiiji!f1f5ekiSfTfliweminioipiqi#f2f6eriUfVfsixetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiErsAtAVpFrcrGrWpXpYpZp0p1pdr2p3p4p5p6per7p8pMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p_m`m{m|m}m~mlrQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i{lwmanxmymzmAm|l$f%f'f(f)f*f+f,fVn-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBbalblcldlelfl[kgl]k^kHrhl,kil~ 2mUmb yezexCyC_k`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fEfVm'iNl!p#pbnWm3mcn4mXmdnenVl}l~lem5m(ith6m)i7m*i8m+iuh9mfn!mAzgnBzhnCzinDzEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrn'm(m$pYmZm)mWlYg7eHzIzfmgmmrAeWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@i8e[i]iDd9e^i_iEdFd`i!e{i|iGd#e}i~iHdBeZg0gxhajbjcjCeyhzhdjejGbg HbIbc h JbKbd LbMb$e%e'e(e)efj*egjhj+eijjj_g4b`g{gab5b|g}gbbFfR GfHfN S IfJfO AhDe1g2gBhkjljmjEeChDhnjoj3gNb4g5g; Ob6g7g= Fe8g9gpjqjrjEhFhsjtjuj,evjwj-exjyj6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eAjBjSd@eCjDjTdKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePjQj]eRjSj~g)bahbhcb*bchdhdbHhMeIhJh5dNeKhLh6dOe'g(gMhTjUjVjPeNhOhWjXjRbi SbTbe j UbVbf WbXb^e_e`e{e|eYj}eZj0j~e1j2jeh+bfhgheb,bhhihfboh7dphqhYb8drhshZbPhQe)g*gQh3j4j5jReRhSh6j7j+g0b,g-g^ 1b.g/g_ Se:g;g8j9j!jThUh#j$j%jaf'j(jbf)j*j-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhf,j-j,dif.j/j-dXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|j}jkf~jakjh^bkhlhgb_bmhnhhbP Q T U `d{dbklfckdk|dmfekfk}d~daebeWhZeXhYhce0eZh0hdegknfhkikeeofjkkkfelkpfmknkgeqfokpkheqkrfrkskiesftkukjevktfwkxkkeufykzkleAkvfBkCkmewfDkEkneoeFkxfGkHkpeyfIkJkqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nOlmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWg
81 self._handle = handle 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMrgAhAiAjAkA1h2h3h4h5h6hlA@q[q]q^q;mBrCr=m?m@m[m_q`q{q|q}q~qarbrDrmAnAoApAqArATpUp6fXf1e7hKfLf8hse9h!h#h$h%h7fYf2e'hMfNf(hte)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|hue}h~haibici9f0f4ediQfRfeivefigihiiiji!f1f5ekiSfTfliweminioipiqi#f2f6eriUfVfsixetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiErsAtAVpFrcrGrWpXpYpZp0p1pdr2p3p4p5p6per7p8pMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p_m`m{m|m}m~mlrQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i{lwmanxmymzmAm|l$f%f'f(f)f*f+f,fVn-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBbalblcldlelfl[kgl]k^kHrhl,kil~ 2mUmb yezexCyC_k`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fEfVm'iNl!p#pbnWm3mcn4mXmdnenVl}l~lem5m(ith6m)i7m*i8m+iuh9mfn!mAzgnBzhnCzinDzEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrn'm(m$pYmZm)mWlYg7eHzIzfmgmmrAeWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@i8e[i]iDd9e^i_iEdFd`i!e{i|iGd#e}i~iHdBeZg0gxhajbjcjCeyhzhdjejGbg HbIbc h JbKbd LbMb$e%e'e(e)efj*egjhj+eijjj_g4b`g{gab5b|g}gbbFfR GfHfN S IfJfO AhDe1g2gBhkjljmjEeChDhnjoj3gNb4g5g; Ob6g7g= Fe8g9gpjqjrjEhFhsjtjuj,evjwj-exjyj6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eAjBjSd@eCjDjTdKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePjQj]eRjSj~g)bahbhcb*bchdhdbHhMeIhJh5dNeKhLh6dOe'g(gMhTjUjVjPeNhOhWjXjRbi SbTbe j UbVbf WbXb^e_e`e{e|eYj}eZj0j~e1j2jeh+bfhgheb,bhhihfboh7dphqhYb8drhshZbPhQe)g*gQh3j4j5jReRhSh6j7j+g0b,g-g^ 1b.g/g_ Se:g;g8j9j!jThUh#j$j%jaf'j(jbf)j*j-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhf,j-j,dif.j/j-dXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|j}jkf~jakjh^bkhlhgb_bmhnhhbP Q T U `d{dbklfckdk|dmfekfk}d~daebeWhZeXhYhce0eZh0hdegknfhkikeeofjkkkfelkpfmknkgeqfokpkheqkrfrkskiesftkukjevktfwkxkkeufykzkleAkvfBkCkmewfDkEkneoeFkxfGkHkpeyfIkJkqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nOlmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWg
82 self._cache = {} 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMrgAhAiAjAkA1h2h3h4h5h6hlA@q[q]q^q;mBrCr=m?m@m[m_q`q{q|q}q~qarbrDrmAnAoApAqArATpUp6fXf1e7hKfLf8hse9h!h#h$h%h7fYf2e'hMfNf(hte)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|hue}h~haibici9f0f4ediQfRfeivefigihiiiji!f1f5ekiSfTfliweminioipiqi#f2f6eriUfVfsixetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiErsAtAVpFrcrGrWpXpYpZp0p1pdr2p3p4p5p6per7p8pMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p_m`m{m|m}m~mlrQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i{lwmanxmymzmAm|l$f%f'f(f)f*f+f,fVn-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBbalblcldlelfl[kgl]k^kHrhl,kil~ 2mUmb yezexCyC_k`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fEfVm'iNl!p#pbnWm3mcn4mXmdnenVl}l~lem5m(ith6m)i7m*i8m+iuh9mfn!mAzgnBzhnCzinDzEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrn'm(m$pYmZm)mWlYg7eHzIzfmgmmrAeWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@i8e[i]iDd9e^i_iEdFd`i!e{i|iGd#e}i~iHdBeZg0gxhajbjcjCeyhzhdjejGbg HbIbc h JbKbd LbMb$e%e'e(e)efj*egjhj+eijjj_g4b`g{gab5b|g}gbbFfR GfHfN S IfJfO AhDe1g2gBhkjljmjEeChDhnjoj3gNb4g5g; Ob6g7g= Fe8g9gpjqjrjEhFhsjtjuj,evjwj-exjyj6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eAjBjSd@eCjDjTdKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePjQj]eRjSj~g)bahbhcb*bchdhdbHhMeIhJh5dNeKhLh6dOe'g(gMhTjUjVjPeNhOhWjXjRbi SbTbe j UbVbf WbXb^e_e`e{e|eYj}eZj0j~e1j2jeh+bfhgheb,bhhihfboh7dphqhYb8drhshZbPhQe)g*gQh3j4j5jReRhSh6j7j+g0b,g-g^ 1b.g/g_ Se:g;g8j9j!jThUh#j$j%jaf'j(jbf)j*j-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhf,j-j,dif.j/j-dXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|j}jkf~jakjh^bkhlhgb_bmhnhhbP Q T U `d{dbklfckdk|dmfekfk}d~daebeWhZeXhYhce0eZh0hdegknfhkikeeofjkkkfelkpfmknkgeqfokpkheqkrfrkskiesftkukjevktfwkxkkeufykzkleAkvfBkCkmewfDkEkneoeFkxfGkHkpeyfIkJkqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nOlmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWg
83 return self 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMrgAhAiAjAkA1h2h3h4h5h6hlA@q[q]q^q;mBrCr=m?m@m[m_q`q{q|q}q~qarbrDrmAnAoApAqArATpUp6fXf1e7hKfLf8hse9h!h#h$h%h7fYf2e'hMfNf(hte)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|hue}h~haibici9f0f4ediQfRfeivefigihiiiji!f1f5ekiSfTfliweminioipiqi#f2f6eriUfVfsixetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiErsAtAVpFrcrGrWpXpYpZp0p1pdr2p3p4p5p6per7p8pMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p_m`m{m|m}m~mlrQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i{lwmanxmymzmAm|l$f%f'f(f)f*f+f,fVn-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBbalblcldlelfl[kgl]k^kHrhl,kil~ 2mUmb yezexCyC_k`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fEfVm'iNl!p#pbnWm3mcn4mXmdnenVl}l~lem5m(ith6m)i7m*i8m+iuh9mfn!mAzgnBzhnCzinDzEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrn'm(m$pYmZm)mWlYg7eHzIzfmgmmrAeWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@i8e[i]iDd9e^i_iEdFd`i!e{i|iGd#e}i~iHdBeZg0gxhajbjcjCeyhzhdjejGbg HbIbc h JbKbd LbMb$e%e'e(e)efj*egjhj+eijjj_g4b`g{gab5b|g}gbbFfR GfHfN S IfJfO AhDe1g2gBhkjljmjEeChDhnjoj3gNb4g5g; Ob6g7g= Fe8g9gpjqjrjEhFhsjtjuj,evjwj-exjyj6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eAjBjSd@eCjDjTdKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePjQj]eRjSj~g)bahbhcb*bchdhdbHhMeIhJh5dNeKhLh6dOe'g(gMhTjUjVjPeNhOhWjXjRbi SbTbe j UbVbf WbXb^e_e`e{e|eYj}eZj0j~e1j2jeh+bfhgheb,bhhihfboh7dphqhYb8drhshZbPhQe)g*gQh3j4j5jReRhSh6j7j+g0b,g-g^ 1b.g/g_ Se:g;g8j9j!jThUh#j$j%jaf'j(jbf)j*j-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhf,j-j,dif.j/j-dXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|j}jkf~jakjh^bkhlhgb_bmhnhhbP Q T U `d{dbklfckdk|dmfekfk}d~daebeWhZeXhYhce0eZh0hdegknfhkikeeofjkkkfelkpfmknkgeqfokpkheqkrfrkskiesftkukjevktfwkxkkeufykzkleAkvfBkCkmewfDkEkneoeFkxfGkHkpeyfIkJkqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nOlmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWg
85 cdef inline int _get_attribute(self, cydriver.CUdevice_attribute attr, default=0) except? -2:
86 """Retrieve the attribute value directly from the driver."""
87 cdef int val
88 cdef cydriver.CUresult err
89 with nogil: 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMrgAhAiAjAkA1h2h3h4h5h6hlA@q[q]q^q;mBrCrIr=m?m@m[m_q`q{q|q}q~qarbrDrmAnAoApAqArATpUp6fXf1e7hKfLf8hse9h!h#h$h%h7fYf2e'hMfNf(hte)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|hue}h~haibici9f0f4ediQfRfeivefigihiiiji!f1f5ekiSfTfliweminioipiqi#f2f6eriUfVfsixetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiErsAtAVpFrcrGrWpXpYpZp0p1pdr2p3p4p5p6per7p8pMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p_m`m{m|m}m~mlrQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9i!i#i$i%i{lwmanxmymzmAm|l$f%f'f(f)f*f+f,fVn-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fV l W m X n Y o Z p 0 q Wf1 Xzr jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb%pnruAvAwAxAYzLzZzcCyAaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkB~ 2mUmb yezexCyC_kXl`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fEfVm'iNl!p#pbnWmor3mcn4mXmdnenVl}l~lem5m(ith6m)i7m*i8m+iPluh9m,mfnRB!mAzgnBzhnCzinDzprEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrn'm(m$pYmZm)mWlYg7eHzunvnIzfmgmmrAe'pWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c=c?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9BkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@i8e[i]iDd9e^i_iEdFd`i!e{i|iGd#e}i~iHdBeZg0gxhajbjcjCeyhzhdjejGbg HbIbc h JbKbd LbMb$e%e'e(e)efj*egjhj+eijjj_g4b`g{gab5b|g}gbbFfR GfHfN S IfJfO AhDe1g2gBhkjljmjEeChDhnjoj3gNb4g5g; Ob6g7g= Fe8g9gpjqjrjEhFhsjtjuj,evjwj-exjyj6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eAjBjSd@eCjDjTdKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePjQj]eRjSj~g)bahbhcb*bchdhdbHhMeIhJh5dNeKhLh6dOe'g(gMhTjUjVjPeNhOhWjXjRbi SbTbe j UbVbf WbXb^e_e`e{e|eYj}eZj0j~e1j2jeh+bfhgheb,bhhihfboh7dphqhYb8drhshZbPhQe)g*gQh3j4j5jReRhSh6j7j+g0b,g-g^ 1b.g/g_ Se:g;g8j9j!jThUh#j$j%jaf'j(jbf)j*j-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhf,j-j,dif.j/j-dXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|j}jkf~jakjh^bkhlhgb_bmhnhhbP Q T U `d{dbklfckdk|dmfekfk}d~daebeWhZeXhYhce0eZh0hdegknfhkikeeofjkkkfelkpfmknkgeqfokpkheqkrfrkskiesftkukjevktfwkxkkeufykzkleAkvfBkCkmewfDkEkneoeFkxfGkHkpeyfIkJkqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nOlmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWg
90 err = cydriver.cuDeviceGetAttribute(&val, attr, self._handle) 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMrgAhAiAjAkA1h2h3h4h5h6hlA@q[q]q^q;mBrCrIr=m?m@m[m_q`q{q|q}q~qarbrDrmAnAoApAqArATpUp6fXf1e7hKfLf8hse9h!h#h$h%h7fYf2e'hMfNf(hte)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|hue}h~haibici9f0f4ediQfRfeivefigihiiiji!f1f5ekiSfTfliweminioipiqi#f2f6eriUfVfsixetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiErsAtAVpFrcrGrWpXpYpZp0p1pdr2p3p4p5p6per7p8pMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p_m`m{m|m}m~mlrQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9i!i#i$i%i{lwmanxmymzmAm|l$f%f'f(f)f*f+f,fVn-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fV l W m X n Y o Z p 0 q Wf1 Xzr jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb%pnruAvAwAxAYzLzZzcCyAaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkB~ 2mUmb yezexCyC_kXl`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fEfVm'iNl!p#pbnWmor3mcn4mXmdnenVl}l~lem5m(ith6m)i7m*i8m+iPluh9m,mfnRB!mAzgnBzhnCzinDzprEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrn'm(m$pYmZm)mWlYg7eHzunvnIzfmgmmrAe'pWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c=c?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9BkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@i8e[i]iDd9e^i_iEdFd`i!e{i|iGd#e}i~iHdBeZg0gxhajbjcjCeyhzhdjejGbg HbIbc h JbKbd LbMb$e%e'e(e)efj*egjhj+eijjj_g4b`g{gab5b|g}gbbFfR GfHfN S IfJfO AhDe1g2gBhkjljmjEeChDhnjoj3gNb4g5g; Ob6g7g= Fe8g9gpjqjrjEhFhsjtjuj,evjwj-exjyj6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eAjBjSd@eCjDjTdKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePjQj]eRjSj~g)bahbhcb*bchdhdbHhMeIhJh5dNeKhLh6dOe'g(gMhTjUjVjPeNhOhWjXjRbi SbTbe j UbVbf WbXb^e_e`e{e|eYj}eZj0j~e1j2jeh+bfhgheb,bhhihfboh7dphqhYb8drhshZbPhQe)g*gQh3j4j5jReRhSh6j7j+g0b,g-g^ 1b.g/g_ Se:g;g8j9j!jThUh#j$j%jaf'j(jbf)j*j-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhf,j-j,dif.j/j-dXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|j}jkf~jakjh^bkhlhgb_bmhnhhbP Q T U `d{dbklfckdk|dmfekfk}d~daebeWhZeXhYhce0eZh0hdegknfhkikeeofjkkkfelkpfmknkgeqfokpkheqkrfrkskiesftkukjevktfwkxkkeufykzkleAkvfBkCkmewfDkEkneoeFkxfGkHkpeyfIkJkqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nOlmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWg
91 if err == cydriver.CUresult.CUDA_ERROR_INVALID_VALUE and default is not None: 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMrgAhAiAjAkA1h2h3h4h5h6hlA@q[q]q^q;mBrCrIr=m?m@m[m_q`q{q|q}q~qarbrDrmAnAoApAqArATpUp6fXf1e7hKfLf8hse9h!h#h$h%h7fYf2e'hMfNf(hte)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|hue}h~haibici9f0f4ediQfRfeivefigihiiiji!f1f5ekiSfTfliweminioipiqi#f2f6eriUfVfsixetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiErsAtAVpFrcrGrWpXpYpZp0p1pdr2p3p4p5p6per7p8pMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p_m`m{m|m}m~mlrQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9i!i#i$i%i{lwmanxmymzmAm|l$f%f'f(f)f*f+f,fVn-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fV l W m X n Y o Z p 0 q Wf1 Xzr jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb%pnruAvAwAxAYzLzZzcCyAaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkB~ 2mUmb yezexCyC_kXl`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fEfVm'iNl!p#pbnWmor3mcn4mXmdnenVl}l~lem5m(ith6m)i7m*i8m+iPluh9m,mfnRB!mAzgnBzhnCzinDzprEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrn'm(m$pYmZm)mWlYg7eHzunvnIzfmgmmrAe'pWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c=c?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9BkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@i8e[i]iDd9e^i_iEdFd`i!e{i|iGd#e}i~iHdBeZg0gxhajbjcjCeyhzhdjejGbg HbIbc h JbKbd LbMb$e%e'e(e)efj*egjhj+eijjj_g4b`g{gab5b|g}gbbFfR GfHfN S IfJfO AhDe1g2gBhkjljmjEeChDhnjoj3gNb4g5g; Ob6g7g= Fe8g9gpjqjrjEhFhsjtjuj,evjwj-exjyj6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eAjBjSd@eCjDjTdKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePjQj]eRjSj~g)bahbhcb*bchdhdbHhMeIhJh5dNeKhLh6dOe'g(gMhTjUjVjPeNhOhWjXjRbi SbTbe j UbVbf WbXb^e_e`e{e|eYj}eZj0j~e1j2jeh+bfhgheb,bhhihfboh7dphqhYb8drhshZbPhQe)g*gQh3j4j5jReRhSh6j7j+g0b,g-g^ 1b.g/g_ Se:g;g8j9j!jThUh#j$j%jaf'j(jbf)j*j-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhf,j-j,dif.j/j-dXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|j}jkf~jakjh^bkhlhgb_bmhnhhbP Q T U `d{dbklfckdk|dmfekfk}d~daebeWhZeXhYhce0eZh0hdegknfhkikeeofjkkkfelkpfmknkgeqfokpkheqkrfrkskiesftkukjevktfwkxkkeufykzkleAkvfBkCkmewfDkEkneoeFkxfGkHkpeyfIkJkqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nOlmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWg
92 return <int>default
93 HANDLE_RETURN(err) 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMrgAhAiAjAkA1h2h3h4h5h6hlA@q[q]q^q;mBrCrIr=m?m@m[m_q`q{q|q}q~qarbrDrmAnAoApAqArATpUp6fXf1e7hKfLf8hse9h!h#h$h%h7fYf2e'hMfNf(hte)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|hue}h~haibici9f0f4ediQfRfeivefigihiiiji!f1f5ekiSfTfliweminioipiqi#f2f6eriUfVfsixetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiErsAtAVpFrcrGrWpXpYpZp0p1pdr2p3p4p5p6per7p8pMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p_m`m{m|m}m~mlrQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9i!i#i$i%i{lwmanxmymzmAm|l$f%f'f(f)f*f+f,fVn-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fV l W m X n Y o Z p 0 q Wf1 Xzr jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb%pnruAvAwAxAYzLzZzcCyAaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkB~ 2mUmb yezexCyC_kXl`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fEfVm'iNl!p#pbnWmor3mcn4mXmdnenVl}l~lem5m(ith6m)i7m*i8m+iPluh9m,mfnRB!mAzgnBzhnCzinDzprEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrn'm(m$pYmZm)mWlYg7eHzunvnIzfmgmmrAe'pWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c=c?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9BkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@i8e[i]iDd9e^i_iEdFd`i!e{i|iGd#e}i~iHdBeZg0gxhajbjcjCeyhzhdjejGbg HbIbc h JbKbd LbMb$e%e'e(e)efj*egjhj+eijjj_g4b`g{gab5b|g}gbbFfR GfHfN S IfJfO AhDe1g2gBhkjljmjEeChDhnjoj3gNb4g5g; Ob6g7g= Fe8g9gpjqjrjEhFhsjtjuj,evjwj-exjyj6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eAjBjSd@eCjDjTdKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePjQj]eRjSj~g)bahbhcb*bchdhdbHhMeIhJh5dNeKhLh6dOe'g(gMhTjUjVjPeNhOhWjXjRbi SbTbe j UbVbf WbXb^e_e`e{e|eYj}eZj0j~e1j2jeh+bfhgheb,bhhihfboh7dphqhYb8drhshZbPhQe)g*gQh3j4j5jReRhSh6j7j+g0b,g-g^ 1b.g/g_ Se:g;g8j9j!jThUh#j$j%jaf'j(jbf)j*j-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhf,j-j,dif.j/j-dXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|j}jkf~jakjh^bkhlhgb_bmhnhhbP Q T U `d{dbklfckdk|dmfekfk}d~daebeWhZeXhYhce0eZh0hdegknfhkikeeofjkkkfelkpfmknkgeqfokpkheqkrfrkskiesftkukjevktfwkxkkeufykzkleAkvfBkCkmewfDkEkneoeFkxfGkHkpeyfIkJkqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nOlmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWg
94 return val 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMrgAhAiAjAkA1h2h3h4h5h6hlA@q[q]q^q;mBrCrIr=m?m@m[m_q`q{q|q}q~qarbrDrmAnAoApAqArATpUp6fXf1e7hKfLf8hse9h!h#h$h%h7fYf2e'hMfNf(hte)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|hue}h~haibici9f0f4ediQfRfeivefigihiiiji!f1f5ekiSfTfliweminioipiqi#f2f6eriUfVfsixetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiErsAtAVpFrcrGrWpXpYpZp0p1pdr2p3p4p5p6per7p8pMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p_m`m{m|m}m~mlrQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9i!i#i$i%i{lwmanxmymzmAm|l$f%f'f(f)f*f+f,fVn-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fV l W m X n Y o Z p 0 q Wf1 Xzr jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb%pnruAvAwAxAYzLzZzcCyAaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkB~ 2mUmb yezexCyC_kXl`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fEfVm'iNl!p#pbnWmor3mcn4mXmdnenVl}l~lem5m(ith6m)i7m*i8m+iPluh9m,mfnRB!mAzgnBzhnCzinDzprEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrn'm(m$pYmZm)mWlYg7eHzunvnIzfmgmmrAe'pWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c=c?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9BkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@i8e[i]iDd9e^i_iEdFd`i!e{i|iGd#e}i~iHdBeZg0gxhajbjcjCeyhzhdjejGbg HbIbc h JbKbd LbMb$e%e'e(e)efj*egjhj+eijjj_g4b`g{gab5b|g}gbbFfR GfHfN S IfJfO AhDe1g2gBhkjljmjEeChDhnjoj3gNb4g5g; Ob6g7g= Fe8g9gpjqjrjEhFhsjtjuj,evjwj-exjyj6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eAjBjSd@eCjDjTdKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePjQj]eRjSj~g)bahbhcb*bchdhdbHhMeIhJh5dNeKhLh6dOe'g(gMhTjUjVjPeNhOhWjXjRbi SbTbe j UbVbf WbXb^e_e`e{e|eYj}eZj0j~e1j2jeh+bfhgheb,bhhihfboh7dphqhYb8drhshZbPhQe)g*gQh3j4j5jReRhSh6j7j+g0b,g-g^ 1b.g/g_ Se:g;g8j9j!jThUh#j$j%jaf'j(jbf)j*j-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhf,j-j,dif.j/j-dXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|j}jkf~jakjh^bkhlhgb_bmhnhhbP Q T U `d{dbklfckdk|dmfekfk}d~daebeWhZeXhYhce0eZh0hdegknfhkikeeofjkkkfelkpfmknkgeqfokpkheqkrfrkskiesftkukjevktfwkxkkeufykzkleAkvfBkCkmewfDkEkneoeFkxfGkHkpeyfIkJkqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nOlmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWg
96 cdef inline int _get_cached_attribute(self, attr, default=0) except? -2:
97 """Retrieve the attribute value, using cache if applicable."""
98 cached = self._cache.get(attr) 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMrgAhAiAjAkA1h2h3h4h5h6hlA@q[q]q^q;mBrCrIr=m?m@m[m_q`q{q|q}q~qarbrDrmAnAoApAqArATpUp6fXf1e7hKfLf8hse9h!h#h$h%h7fYf2e'hMfNf(hte)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|hue}h~haibici9f0f4ediQfRfeivefigihiiiji!f1f5ekiSfTfliweminioipiqi#f2f6eriUfVfsixetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiErsAtAVpFrcrGrWpXpYpZp0p1pdr2p3p4p5p6per7p8pMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p_m`m{m|m}m~mlrQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9i!i#i$i%i{lwmanxmymzmAm|l$f%f'f(f)f*f+f,fVn-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fV l W m X n Y o Z p 0 q Wf1 Xzr jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb%pnruAvAwAxAYzLzZzyAzCal0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?Ahl@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?z@z[zcBdB]zeBfBUzgBhBiBVzjBkB~ 2mUmb yezexCyC_kXl`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fEfVm'iNl!p#pbnWmor3mcn4mXmdnenVl}l~lem5m(i~zth6m)i7m*i8m+ilBPlaAuh9m,mfnRB!mAzgnBzhnCzinDzprEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrnbA'm(m$pYmZm)mWlYg7eHzunvnIzJzfmgmmrAe'pWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c=c?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9BkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@i8e[i]iDd9e^i_iEdFd`i!e{i|iGd#e}i~iHdBeZg0gxhajbjcjCeyhzhdjejGbg HbIbc h JbKbd LbMb$e%e'e(e)efj*egjhj+eijjj_g4b`g{gab5b|g}gbbFfR GfHfN S IfJfO AhDe1g2gBhkjljmjEeChDhnjoj3gNb4g5g; Ob6g7g= Fe8g9gpjqjrjEhFhsjtjuj,evjwj-exjyj6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eAjBjSd@eCjDjTdKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePjQj]eRjSj~g)bahbhcb*bchdhdbHhMeIhJh5dNeKhLh6dOe'g(gMhTjUjVjPeNhOhWjXjRbi SbTbe j UbVbf WbXb^e_e`e{e|eYj}eZj0j~e1j2jeh+bfhgheb,bhhihfboh7dphqhYb8drhshZbPhQe)g*gQh3j4j5jReRhSh6j7j+g0b,g-g^ 1b.g/g_ Se:g;g8j9j!jThUh#j$j%jaf'j(jbf)j*j-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhf,j-j,dif.j/j-dXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|j}jkf~jakjh^bkhlhgb_bmhnhhbP Q T U `d{dbklfckdk|dmfekfk}d~daebeWhZeXhYhce0eZh0hdegknfhkikeeofjkkkfelkpfmknkgeqfokpkheqkrfrkskiesftkukjevktfwkxkkeufykzkleAkvfBkCkmewfDkEkneoeFkxfGkHkpeyfIkJkqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nOlmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWg
99 if cached is not None: 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMrgAhAiAjAkA1h2h3h4h5h6hlA@q[q]q^q;mBrCrIr=m?m@m[m_q`q{q|q}q~qarbrDrmAnAoApAqArATpUp6fXf1e7hKfLf8hse9h!h#h$h%h7fYf2e'hMfNf(hte)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|hue}h~haibici9f0f4ediQfRfeivefigihiiiji!f1f5ekiSfTfliweminioipiqi#f2f6eriUfVfsixetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiErsAtAVpFrcrGrWpXpYpZp0p1pdr2p3p4p5p6per7p8pMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p_m`m{m|m}m~mlrQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9i!i#i$i%i{lwmanxmymzmAm|l$f%f'f(f)f*f+f,fVn-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fV l W m X n Y o Z p 0 q Wf1 Xzr jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb%pnruAvAwAxAYzLzZzyAzCal0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?Ahl@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?z@z[zcBdB]zeBfBUzgBhBiBVzjBkB~ 2mUmb yezexCyC_kXl`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fEfVm'iNl!p#pbnWmor3mcn4mXmdnenVl}l~lem5m(i~zth6m)i7m*i8m+ilBPlaAuh9m,mfnRB!mAzgnBzhnCzinDzprEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrnbA'm(m$pYmZm)mWlYg7eHzunvnIzJzfmgmmrAe'pWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c=c?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9BkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@i8e[i]iDd9e^i_iEdFd`i!e{i|iGd#e}i~iHdBeZg0gxhajbjcjCeyhzhdjejGbg HbIbc h JbKbd LbMb$e%e'e(e)efj*egjhj+eijjj_g4b`g{gab5b|g}gbbFfR GfHfN S IfJfO AhDe1g2gBhkjljmjEeChDhnjoj3gNb4g5g; Ob6g7g= Fe8g9gpjqjrjEhFhsjtjuj,evjwj-exjyj6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eAjBjSd@eCjDjTdKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePjQj]eRjSj~g)bahbhcb*bchdhdbHhMeIhJh5dNeKhLh6dOe'g(gMhTjUjVjPeNhOhWjXjRbi SbTbe j UbVbf WbXb^e_e`e{e|eYj}eZj0j~e1j2jeh+bfhgheb,bhhihfboh7dphqhYb8drhshZbPhQe)g*gQh3j4j5jReRhSh6j7j+g0b,g-g^ 1b.g/g_ Se:g;g8j9j!jThUh#j$j%jaf'j(jbf)j*j-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhf,j-j,dif.j/j-dXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|j}jkf~jakjh^bkhlhgb_bmhnhhbP Q T U `d{dbklfckdk|dmfekfk}d~daebeWhZeXhYhce0eZh0hdegknfhkikeeofjkkkfelkpfmknkgeqfokpkheqkrfrkskiesftkukjevktfwkxkkeufykzkleAkvfBkCkmewfDkEkneoeFkxfGkHkpeyfIkJkqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nOlmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWg
100 return cached 2XfYfZf0f1f2fDfzCXlorXm~zlBaAprbAunvnJzfmgmmrAeoBpBqBxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h
101 cdef int value = self._get_attribute(attr, default) 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMrgAhAiAjAkA1h2h3h4h5h6hlA@q[q]q^q;mBrCrIr=m?m@m[m_q`q{q|q}q~qarbrDrmAnAoApAqArATpUp6fXf1e7hKfLf8hse9h!h#h$h%h7fYf2e'hMfNf(hte)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|hue}h~haibici9f0f4ediQfRfeivefigihiiiji!f1f5ekiSfTfliweminioipiqi#f2f6eriUfVfsixetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiErsAtAVpFrcrGrWpXpYpZp0p1pdr2p3p4p5p6per7p8pMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p_m`m{m|m}m~mlrQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9i!i#i$i%i{lwmanxmymzmAm|l$f%f'f(f)f*f+f,fVn-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fV l W m X n Y o Z p 0 q Wf1 Xzr jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb%pnruAvAwAxAYzLzZzyAal0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?Ahl@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?z@z[zcBdB]zeBfBUzgBhBiBVzjBkB~ 2mUmb yezexCyC_kXl`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fEfVm'iNl!p#pbnWmor3mcn4mXmdnenVl}l~lem5m(ith6m)i7m*i8m+iPluh9m,mfnRB!mAzgnBzhnCzinDzprEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrn'm(m$pYmZm)mWlYg7eHzunvnIzfmgmmrAe'pWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c=c?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9BkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@i8e[i]iDd9e^i_iEdFd`i!e{i|iGd#e}i~iHdBeZg0gxhajbjcjCeyhzhdjejGbg HbIbc h JbKbd LbMb$e%e'e(e)efj*egjhj+eijjj_g4b`g{gab5b|g}gbbFfR GfHfN S IfJfO AhDe1g2gBhkjljmjEeChDhnjoj3gNb4g5g; Ob6g7g= Fe8g9gpjqjrjEhFhsjtjuj,evjwj-exjyj6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eAjBjSd@eCjDjTdKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePjQj]eRjSj~g)bahbhcb*bchdhdbHhMeIhJh5dNeKhLh6dOe'g(gMhTjUjVjPeNhOhWjXjRbi SbTbe j UbVbf WbXb^e_e`e{e|eYj}eZj0j~e1j2jeh+bfhgheb,bhhihfboh7dphqhYb8drhshZbPhQe)g*gQh3j4j5jReRhSh6j7j+g0b,g-g^ 1b.g/g_ Se:g;g8j9j!jThUh#j$j%jaf'j(jbf)j*j-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhf,j-j,dif.j/j-dXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|j}jkf~jakjh^bkhlhgb_bmhnhhbP Q T U `d{dbklfckdk|dmfekfk}d~daebeWhZeXhYhce0eZh0hdegknfhkikeeofjkkkfelkpfmknkgeqfokpkheqkrfrkskiesftkukjevktfwkxkkeufykzkleAkvfBkCkmewfDkEkneoeFkxfGkHkpeyfIkJkqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nOlmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWg
102 self._cache[attr] = value # setdefault not needed for ints 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMrgAhAiAjAkA1h2h3h4h5h6hlA@q[q]q^q;mBrCrIr=m?m@m[m_q`q{q|q}q~qarbrDrmAnAoApAqArATpUp6fXf1e7hKfLf8hse9h!h#h$h%h7fYf2e'hMfNf(hte)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|hue}h~haibici9f0f4ediQfRfeivefigihiiiji!f1f5ekiSfTfliweminioipiqi#f2f6eriUfVfsixetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiErsAtAVpFrcrGrWpXpYpZp0p1pdr2p3p4p5p6per7p8pMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p_m`m{m|m}m~mlrQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9i!i#i$i%i{lwmanxmymzmAm|l$f%f'f(f)f*f+f,fVn-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fV l W m X n Y o Z p 0 q Wf1 Xzr jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb%pnruAvAwAxAYzLzZzyAal0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?Ahl@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?z@z[zcBdB]zeBfBUzgBhBiBVzjBkB~ 2mUmb yezexCyC_kXl`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fEfVm'iNl!p#pbnWmor3mcn4mXmdnenVl}l~lem5m(ith6m)i7m*i8m+iPluh9m,mfnRB!mAzgnBzhnCzinDzprEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrn'm(m$pYmZm)mWlYg7eHzunvnIzfmgmmrAe'pWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c=c?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9BkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@i8e[i]iDd9e^i_iEdFd`i!e{i|iGd#e}i~iHdBeZg0gxhajbjcjCeyhzhdjejGbg HbIbc h JbKbd LbMb$e%e'e(e)efj*egjhj+eijjj_g4b`g{gab5b|g}gbbFfR GfHfN S IfJfO AhDe1g2gBhkjljmjEeChDhnjoj3gNb4g5g; Ob6g7g= Fe8g9gpjqjrjEhFhsjtjuj,evjwj-exjyj6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eAjBjSd@eCjDjTdKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePjQj]eRjSj~g)bahbhcb*bchdhdbHhMeIhJh5dNeKhLh6dOe'g(gMhTjUjVjPeNhOhWjXjRbi SbTbe j UbVbf WbXb^e_e`e{e|eYj}eZj0j~e1j2jeh+bfhgheb,bhhihfboh7dphqhYb8drhshZbPhQe)g*gQh3j4j5jReRhSh6j7j+g0b,g-g^ 1b.g/g_ Se:g;g8j9j!jThUh#j$j%jaf'j(jbf)j*j-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhf,j-j,dif.j/j-dXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|j}jkf~jakjh^bkhlhgb_bmhnhhbP Q T U `d{dbklfckdk|dmfekfk}d~daebeWhZeXhYhce0eZh0hdegknfhkikeeofjkkkfelkpfmknkgeqfokpkheqkrfrkskiesftkukjevktfwkxkkeufykzkleAkvfBkCkmewfDkEkneoeFkxfGkHkpeyfIkJkqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nOlmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWg
103 return value 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMrgAhAiAjAkA1h2h3h4h5h6hlA@q[q]q^q;mBrCrIr=m?m@m[m_q`q{q|q}q~qarbrDrmAnAoApAqArATpUp6fXf1e7hKfLf8hse9h!h#h$h%h7fYf2e'hMfNf(hte)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|hue}h~haibici9f0f4ediQfRfeivefigihiiiji!f1f5ekiSfTfliweminioipiqi#f2f6eriUfVfsixetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiErsAtAVpFrcrGrWpXpYpZp0p1pdr2p3p4p5p6per7p8pMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p_m`m{m|m}m~mlrQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9i!i#i$i%i{lwmanxmymzmAm|l$f%f'f(f)f*f+f,fVn-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fV l W m X n Y o Z p 0 q Wf1 Xzr jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb%pnruAvAwAxAYzLzZzyAal0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?Ahl@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?z@z[zcBdB]zeBfBUzgBhBiBVzjBkB~ 2mUmb yezexCyC_kXl`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fEfVm'iNl!p#pbnWmor3mcn4mXmdnenVl}l~lem5m(ith6m)i7m*i8m+iPluh9m,mfnRB!mAzgnBzhnCzinDzprEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrn'm(m$pYmZm)mWlYg7eHzunvnIzfmgmmrAe'pWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c=c?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9BkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@i8e[i]iDd9e^i_iEdFd`i!e{i|iGd#e}i~iHdBeZg0gxhajbjcjCeyhzhdjejGbg HbIbc h JbKbd LbMb$e%e'e(e)efj*egjhj+eijjj_g4b`g{gab5b|g}gbbFfR GfHfN S IfJfO AhDe1g2gBhkjljmjEeChDhnjoj3gNb4g5g; Ob6g7g= Fe8g9gpjqjrjEhFhsjtjuj,evjwj-exjyj6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eAjBjSd@eCjDjTdKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePjQj]eRjSj~g)bahbhcb*bchdhdbHhMeIhJh5dNeKhLh6dOe'g(gMhTjUjVjPeNhOhWjXjRbi SbTbe j UbVbf WbXb^e_e`e{e|eYj}eZj0j~e1j2jeh+bfhgheb,bhhihfboh7dphqhYb8drhshZbPhQe)g*gQh3j4j5jReRhSh6j7j+g0b,g-g^ 1b.g/g_ Se:g;g8j9j!jThUh#j$j%jaf'j(jbf)j*j-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhf,j-j,dif.j/j-dXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|j}jkf~jakjh^bkhlhgb_bmhnhhbP Q T U `d{dbklfckdk|dmfekfk}d~daebeWhZeXhYhce0eZh0hdegknfhkikeeofjkkkfelkpfmknkgeqfokpkheqkrfrkskiesftkukjevktfwkxkkeufykzkleAkvfBkCkmewfDkEkneoeFkxfGkHkpeyfIkJkqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nOlmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWg
105 @property
106 def max_threads_per_block(self) -> int:
107 """int: Maximum number of threads per block."""
108 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK) 2dl^z_z`z{z|z}zfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzoBSBTBUBVBWBXBpBYBZB0B1B2B3BqB4B5B6B7B8B9B
110 @property
111 def max_block_dim_x(self) -> int:
112 """int: Maximum block dimension X."""
113 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_X) 2TA
115 @property
116 def max_block_dim_y(self) -> int:
117 """int: Maximum block dimension Y."""
118 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Y) 2UA
120 @property
121 def max_block_dim_z(self) -> int:
122 """int: Maximum block dimension Z."""
123 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Z) 2VA
125 @property
126 def max_grid_dim_x(self) -> int:
127 """int: Maximum grid dimension X."""
128 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X) 2XAXl
130 @property
131 def max_grid_dim_y(self) -> int:
132 """int: Maximum grid dimension Y."""
133 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Y) 2a YA
135 @property
136 def max_grid_dim_z(self) -> int:
137 """int: Maximum grid dimension Z."""
138 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Z) 2ZA
140 @property
141 def max_shared_memory_per_block(self) -> int:
142 """int: Maximum shared memory available per block in bytes."""
143 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK) 22A^z_z`z{z|z}zfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzoBSBTBUBVBWBXBpBYBZB0B1B2B3BqB4B5B6B7B8B9B
145 @property
146 def total_constant_memory(self) -> int:
147 """int: Memory available on device for constant variables in a CUDA C kernel in bytes."""
148 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TOTAL_CONSTANT_MEMORY) 2gB
150 @property
151 def warp_size(self) -> int:
152 """int: Warp size in threads."""
153 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_WARP_SIZE) 2kB
155 @property
156 def max_pitch(self) -> int:
157 """int: Maximum pitch in bytes allowed by memory copies."""
158 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PITCH) 21A
160 @property
161 def maximum_texture1d_width(self) -> int:
162 """int: Maximum 1D texture width."""
163 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_WIDTH) 2$A
165 @property
166 def maximum_texture1d_linear_width(self) -> int:
167 """int: Maximum width for a 1D texture bound to linear memory."""
168 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LINEAR_WIDTH) 2gl
170 @property
171 def maximum_texture1d_mipmapped_width(self) -> int:
172 """int: Maximum mipmapped 1D texture width."""
173 return self._get_cached_attribute( 2+z
174 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_MIPMAPPED_WIDTH 2+z
175 )
177 @property
178 def maximum_texture2d_width(self) -> int:
179 """int: Maximum 2D texture width."""
180 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_WIDTH) 2-A
182 @property
183 def maximum_texture2d_height(self) -> int:
184 """int: Maximum 2D texture height."""
185 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_HEIGHT) 2(A
187 @property
188 def maximum_texture2d_linear_width(self) -> int:
189 """int: Maximum width for a 2D texture bound to linear memory."""
190 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_WIDTH) 2,A
192 @property
193 def maximum_texture2d_linear_height(self) -> int:
194 """int: Maximum height for a 2D texture bound to linear memory."""
195 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_HEIGHT) 2*A
197 @property
198 def maximum_texture2d_linear_pitch(self) -> int:
199 """int: Maximum pitch in bytes for a 2D texture bound to linear memory."""
200 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_PITCH) 2+A
202 @property
203 def maximum_texture2d_mipmapped_width(self) -> int:
204 """int: Maximum mipmapped 2D texture width."""
205 return self._get_cached_attribute( 2]k
206 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_WIDTH 2]k
207 )
209 @property
210 def maximum_texture2d_mipmapped_height(self) -> int:
211 """int: Maximum mipmapped 2D texture height."""
212 return self._get_cached_attribute( 2.z
213 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_HEIGHT 2.z
214 )
216 @property
217 def maximum_texture3d_width(self) -> int:
218 """int: Maximum 3D texture width."""
219 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH) 2:A
221 @property
222 def maximum_texture3d_height(self) -> int:
223 """int: Maximum 3D texture height."""
224 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT) 2/A
226 @property
227 def maximum_texture3d_depth(self) -> int:
228 """int: Maximum 3D texture depth."""
229 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH) 2.A
231 @property
232 def maximum_texture3d_width_alternate(self) -> int:
233 """int: Alternate maximum 3D texture width, 0 if no alternate maximum 3D texture size is supported."""
234 return self._get_cached_attribute( 2/z
235 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH_ALTERNATE 2/z
236 )
238 @property
239 def maximum_texture3d_height_alternate(self) -> int:
240 """int: Alternate maximum 3D texture height, 0 if no alternate maximum 3D texture size is supported."""
241 return self._get_cached_attribute( 2Hr
242 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT_ALTERNATE 2Hr
243 )
245 @property
246 def maximum_texture3d_depth_alternate(self) -> int:
247 """int: Alternate maximum 3D texture depth, 0 if no alternate maximum 3D texture size is supported."""
248 return self._get_cached_attribute( 2^k
249 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH_ALTERNATE 2^k
250 )
252 @property
253 def maximum_texturecubemap_width(self) -> int:
254 """int: Maximum cubemap texture width or height."""
255 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_WIDTH) 2;A
257 @property
258 def maximum_texture1d_layered_width(self) -> int:
259 """int: Maximum 1D layered texture width."""
260 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_WIDTH) 2#A
262 @property
263 def maximum_texture1d_layered_layers(self) -> int:
264 """int: Maximum layers in a 1D layered texture."""
265 return self._get_cached_attribute( 2[k
266 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_LAYERS 2[k
267 )
269 @property
270 def maximum_texture2d_layered_width(self) -> int:
271 """int: Maximum 2D layered texture width."""
272 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_WIDTH) 2)A
274 @property
275 def maximum_texture2d_layered_height(self) -> int:
276 """int: Maximum 2D layered texture height."""
277 return self._get_cached_attribute( 2,z
278 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_HEIGHT 2,z
279 )
281 @property
282 def maximum_texture2d_layered_layers(self) -> int:
283 """int: Maximum layers in a 2D layered texture."""
284 return self._get_cached_attribute( 2-z
285 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_LAYERS 2-z
286 )
288 @property
289 def maximum_texturecubemap_layered_width(self) -> int:
290 """int: Maximum cubemap layered texture width or height."""
291 return self._get_cached_attribute( 2;z
292 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_WIDTH 2;z
293 )
295 @property
296 def maximum_texturecubemap_layered_layers(self) -> int:
297 """int: Maximum layers in a cubemap layered texture."""
298 return self._get_cached_attribute( 2:z
299 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_LAYERS 2:z
300 )
302 @property
303 def maximum_surface1d_width(self) -> int:
304 """int: Maximum 1D surface width."""
305 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_WIDTH) 25A
307 @property
308 def maximum_surface2d_width(self) -> int:
309 """int: Maximum 2D surface width."""
310 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_WIDTH) 27A
312 @property
313 def maximum_surface2d_height(self) -> int:
314 """int: Maximum 2D surface height."""
315 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_HEIGHT) 26A
317 @property
318 def maximum_surface3d_width(self) -> int:
319 """int: Maximum 3D surface width."""
320 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_WIDTH) 29A
322 @property
323 def maximum_surface3d_height(self) -> int:
324 """int: Maximum 3D surface height."""
325 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_HEIGHT) 2fl
327 @property
328 def maximum_surface3d_depth(self) -> int:
329 """int: Maximum 3D surface depth."""
330 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_DEPTH) 28A
332 @property
333 def maximum_surface1d_layered_width(self) -> int:
334 """int: Maximum 1D layered surface width."""
335 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_WIDTH) 24A
337 @property
338 def maximum_surface1d_layered_layers(self) -> int:
339 """int: Maximum layers in a 1D layered surface."""
340 return self._get_cached_attribute( 2%z
341 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_LAYERS 2%z
342 )
344 @property
345 def maximum_surface2d_layered_width(self) -> int:
346 """int: Maximum 2D layered surface width."""
347 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_WIDTH) 2el
349 @property
350 def maximum_surface2d_layered_height(self) -> int:
351 """int: Maximum 2D layered surface height."""
352 return self._get_cached_attribute( 2'z
353 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_HEIGHT 2'z
354 )
356 @property
357 def maximum_surface2d_layered_layers(self) -> int:
358 """int: Maximum layers in a 2D layered surface."""
359 return self._get_cached_attribute( 2(z
360 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_LAYERS 2(z
361 )
363 @property
364 def maximum_surfacecubemap_width(self) -> int:
365 """int: Maximum cubemap surface width."""
366 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_WIDTH) 2!A
368 @property
369 def maximum_surfacecubemap_layered_width(self) -> int:
370 """int: Maximum cubemap layered surface width."""
371 return self._get_cached_attribute( 2*z
372 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_WIDTH 2*z
373 )
375 @property
376 def maximum_surfacecubemap_layered_layers(self) -> int:
377 """int: Maximum layers in a cubemap layered surface."""
378 return self._get_cached_attribute( 2)z
379 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_LAYERS 2)z
380 )
382 @property
383 def max_registers_per_block(self) -> int:
384 """int: Maximum number of 32-bit registers available to a thread block."""
385 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK) 2cl
387 @property
388 def clock_rate(self) -> int:
389 """int: Typical clock frequency in kilohertz."""
390 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLOCK_RATE) 2WfXzcC~ 2m_k
392 @property
393 def texture_alignment(self) -> int:
394 """int: Alignment requirement for textures."""
395 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT) 2eB
397 @property
398 def texture_pitch_alignment(self) -> int:
399 """int: Pitch alignment requirement for textures."""
400 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_PITCH_ALIGNMENT) 2fB
402 @property
403 def gpu_overlap(self) -> bool:
404 """bool: Device can possibly copy memory and execute a kernel concurrently. Deprecated. Use :attr:`~DeviceProperties.async_engine_count` instead."""
405 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_OVERLAP)) 2IA
407 @property
408 def multiprocessor_count(self) -> int:
409 """int: Number of multiprocessors on device."""
410 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT) 2{AXl
412 @property
413 def kernel_exec_timeout(self) -> bool:
414 """bool: Specifies whether there is a run time limit on kernels."""
415 return bool(self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT)) 2eC
417 @property
418 def integrated(self) -> bool:
419 """bool: Device is integrated with host memory."""
420 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_INTEGRATED)) 2NA
422 @property
423 def can_map_host_memory(self) -> bool:
424 """bool: Device can map host memory into CUDA address space."""
425 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_MAP_HOST_MEMORY)) 2wA
427 @property
428 def compute_mode(self) -> int:
429 """int: Compute mode (See CUcomputemode for details)."""
430 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_MODE) 2dC
432 @property
433 def concurrent_kernels(self) -> bool:
434 """bool: Device can possibly execute multiple kernels concurrently."""
435 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_KERNELS)) 2zA
437 @property
438 def ecc_enabled(self) -> bool:
439 """bool: Device has ECC support enabled."""
440 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ECC_ENABLED)) 2EA
442 @property
443 def pci_bus_id(self) -> int:
444 """int: PCI bus ID of the device."""
445 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_BUS_ID) 2aB
447 @property
448 def pci_device_id(self) -> int:
449 """int: PCI device ID of the device."""
450 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID) 2bB
452 @property
453 def pci_domain_id(self) -> int:
454 """int: PCI domain ID of the device."""
455 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DOMAIN_ID) 2il
457 @property
458 def tcc_driver(self) -> bool:
459 """bool: Device is using TCC driver model."""
460 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TCC_DRIVER)) 2dB
462 @property
463 def memory_clock_rate(self) -> int:
464 """int: Peak memory clock frequency in kilohertz."""
465 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_CLOCK_RATE) 2fC
467 @property
468 def global_memory_bus_width(self) -> int:
469 """int: Global memory bus width in bits."""
470 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_MEMORY_BUS_WIDTH) 2GA
472 @property
473 def l2_cache_size(self) -> int:
474 """int: Size of L2 cache in bytes."""
475 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_L2_CACHE_SIZE) 2PA
477 @property
478 def max_threads_per_multiprocessor(self) -> int:
479 """int: Maximum resident threads per multiprocessor."""
480 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_MULTIPROCESSOR) 23A^z_z`z{z|z}zfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwz
482 @property
483 def unified_addressing(self) -> bool:
484 """bool: Device shares a unified address space with the host."""
485 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING)) 2a hB
487 @property
488 def compute_capability_major(self) -> int:
489 """int: Major compute capability version number."""
490 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR) 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l;mBrCrIr=m?m@m[mDrTpUp1ese2ete3eue4eve5ewe6exeErVpFrGrWpXpYpZp0p1p2p3p4p5p6pTlUlIoJodm]m^m9p_m`m{m|m}m~mhm*mimjmkm+mlmmmBmCmDm{lwmanxmymzmAm|lWfXz%pnrzC~ 2mUmb yezexCyC_k`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCd8eDd9eEdFd!eGd#eHdBeCeg c h d LbMb$e%e'e(e)e*e+e4bab5bbbR N S O DeEeNb; Ob= Fe,e-e6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=e?eSd@eTdKeLe#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4d[e]e)bcb*bdbMe5dNe6dOePei e j f WbXb^e_e`e{e|e}e~e+beb,bfb7dYb8dZbQeRe0b^ 1b_ Seafbf-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgfhf,dif-dXeYe=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_djfkf^bgb_bhb`d{dlf|dmf}d~daebeZece0edenfeeoffepfgeqfherfiesfjetfkeuflevfmewfneoexfpeyfqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nzfAfBfCf
492 @property
493 def compute_capability_minor(self) -> int:
494 """int: Minor compute capability version number."""
495 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR) 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l;mBrCrIr=m?m@m[mDrTpUp1ese2ete3eue4eve5ewe6exeErVpFrGrWpXpYpZp0p1p2p3p4p5p6pTlUlIoJodm]m^m9p_m`m{m|m}m~mhm*mimjmkm+mlmmmBmCmDm{lwmanxmymzmAm|lWfXz%pnral~ 2mUmb yezexCyC_k`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCd8eDd9eEdFd!eGd#eHdBeCeg c h d LbMb$e%e'e(e)e*e+e4bab5bbbR N S O DeEeNb; Ob= Fe,e-e6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=e?eSd@eTdKeLe#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4d[e]e)bcb*bdbMe5dNe6dOePei e j f WbXb^e_e`e{e|e}e~e+beb,bfb7dYb8dZbQeRe0b^ 1b_ Seafbf-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgfhf,dif-dXeYe=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_djfkf^bgb_bhb`d{dlf|dmf}d~daebeZece0edenfeeoffepfgeqfherfiesfjetfkeuflevfmewfneoexfpeyfqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nzfAfBfCf
497 @property
498 def global_l1_cache_supported(self) -> bool:
499 """bool: Device supports caching globals in L1."""
500 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_L1_CACHE_SUPPORTED)) 2FA
502 @property
503 def local_l1_cache_supported(self) -> bool:
504 """bool: Device supports caching locals in L1."""
505 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_LOCAL_L1_CACHE_SUPPORTED)) 2QA
507 @property
508 def max_shared_memory_per_multiprocessor(self) -> int:
509 """int: Maximum shared memory available per multiprocessor in bytes."""
510 return self._get_cached_attribute( 2$z^z_z`z{z|z}zfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwz
511 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR 2$z^z_z`z{z|z}zfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwz
512 )
514 @property
515 def max_registers_per_multiprocessor(self) -> int:
516 """int: Maximum number of 32-bit registers available per multiprocessor."""
517 return self._get_cached_attribute( 2!zfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwz
518 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_MULTIPROCESSOR 2!zfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwz
519 )
521 @property
522 def managed_memory(self) -> bool:
523 """bool: Device can allocate managed memory on this system."""
524 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MANAGED_MEMORY)) 2$f%f'f(f)f*f+f,fVn-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fRA
526 @property
527 def multi_gpu_board(self) -> bool:
528 """bool: Device is on a multi-GPU board."""
529 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD)) 2^A
531 @property
532 def multi_gpu_board_group_id(self) -> int:
533 """int: Unique id for a group of devices on the same multi-GPU board."""
534 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD_GROUP_ID) 2_A
536 @property
537 def host_native_atomic_supported(self) -> bool:
538 """bool: Link between the device and the host supports all native atomic operations."""
539 return bool( 27z
540 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NATIVE_ATOMIC_SUPPORTED) 27z
541 )
543 @property
544 def single_to_double_precision_perf_ratio(self) -> int:
545 """int: Ratio of single precision performance (in floating-point operations per second) to double precision performance."""
546 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SINGLE_TO_DOUBLE_PRECISION_PERF_RATIO) 2gC
548 @property
549 def pageable_memory_access(self) -> bool:
550 """bool: Device supports coherently accessing pageable memory without calling cudaHostRegister on it."""
551 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS)) 2~A
553 @property
554 def concurrent_managed_access(self) -> bool:
555 """bool: Device can coherently access managed memory concurrently with the CPU."""
556 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS)) 2XfYfZf0f1f2f$f%f'f(f)f*f+f,f-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fAA_k{f|f}fbnWmor3mcn4mXmdnenVl~lfnRB!mAzgnBzhnCzinDzprEz#mFzjnGzqn'm
558 @property
559 def compute_preemption_supported(self) -> bool:
560 """bool: Device supports compute preemption."""
561 return bool( 20z
562 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_PREEMPTION_SUPPORTED) 20z
563 )
565 @property
566 def can_use_host_pointer_for_registered_mem(self) -> bool:
567 """bool: Device can access host registered memory at the same virtual address as the CPU."""
568 return bool( 2Lz
569 self._get_cached_attribute( 2Lz
570 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_HOST_POINTER_FOR_REGISTERED_MEM 2Lz
571 )
572 )
574 # TODO: A few attrs are missing here (NVIDIA/cuda-python#675)
576 @property
577 def cooperative_launch(self) -> bool:
578 """bool: Device supports launching cooperative kernels via cuLaunchCooperativeKernel."""
579 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COOPERATIVE_LAUNCH)) 2BAXl
581 # TODO: A few attrs are missing here (NVIDIA/cuda-python#675)
583 @property
584 def max_shared_memory_per_block_optin(self) -> int:
585 """int: Maximum optin shared memory per block."""
586 return self._get_cached_attribute( 2#z
587 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK_OPTIN 2#z
588 )
590 @property
591 def pageable_memory_access_uses_host_page_tables(self) -> bool:
592 """bool: Device accesses pageable memory via the host's page tables."""
593 return bool( 2,k
594 self._get_cached_attribute( 2,k
595 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES 2,k
596 )
597 )
599 @property
600 def direct_managed_mem_access_from_host(self) -> bool:
601 """bool: The host can directly access managed memory on the device without migration."""
602 return bool( 2Nz
603 self._get_cached_attribute( 2Nz
604 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DIRECT_MANAGED_MEM_ACCESS_FROM_HOST 2Nz
605 )
606 )
608 @property
609 def virtual_memory_management_supported(self) -> bool:
610 """bool: Device supports virtual memory management APIs like cuMemAddressReserve, cuMemCreate, cuMemMap and related APIs."""
611 return bool( 2VzJzfmgmmrAe'p
612 self._get_cached_attribute( 2VzJzfmgmmrAe'p
613 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2VzJzfmgmmrAe'p
614 )
615 )
617 @property
618 def handle_type_posix_file_descriptor_supported(self) -> bool:
619 """bool: Device supports exporting memory to a posix file descriptor with cuMemExportToShareableHandle, if requested via cuMemCreate."""
620 return bool( 2V l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBbPzCbDbEbFbP Q T U
621 self._get_cached_attribute( 2V l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBbPzCbDbEbFbP Q T U
622 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR_SUPPORTED 2V l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBbPzCbDbEbFbP Q T U
623 )
624 )
626 @property
627 def handle_type_win32_handle_supported(self) -> bool:
628 """bool: Device supports exporting memory to a Win32 NT handle with cuMemExportToShareableHandle, if requested via cuMemCreate."""
629 return bool( 24z
630 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_HANDLE_SUPPORTED) 24z
631 )
633 @property
634 def handle_type_win32_kmt_handle_supported(self) -> bool:
635 """bool: Device supports exporting memory to a Win32 KMT handle with cuMemExportToShareableHandle, if requested via cuMemCreate."""
636 return bool( 2Qz
637 self._get_cached_attribute( 2Qz
638 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_KMT_HANDLE_SUPPORTED 2Qz
639 )
640 )
642 @property
643 def max_blocks_per_multiprocessor(self) -> int:
644 """int: Maximum number of blocks per multiprocessor."""
645 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCKS_PER_MULTIPROCESSOR) 2WA
647 @property
648 def generic_compression_supported(self) -> bool:
649 """bool: Device supports compression of memory."""
650 return bool( 21z
651 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GENERIC_COMPRESSION_SUPPORTED) 21z
652 )
654 @property
655 def max_persisting_l2_cache_size(self) -> int:
656 """int: Maximum L2 persisting lines capacity setting in bytes."""
657 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PERSISTING_L2_CACHE_SIZE) 20A
659 @property
660 def max_access_policy_window_size(self) -> int:
661 """int: Maximum value of CUaccessPolicyWindow.num_bytes."""
662 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_ACCESS_POLICY_WINDOW_SIZE) 2SA
664 @property
665 def gpu_direct_rdma_with_cuda_vmm_supported(self) -> bool:
666 """bool: Device supports specifying the GPUDirect RDMA flag with cuMemCreate."""
667 return bool( 2Oz
668 self._get_cached_attribute( 2Oz
669 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WITH_CUDA_VMM_SUPPORTED 2Oz
670 )
671 )
673 @property
674 def reserved_shared_memory_per_block(self) -> int:
675 """int: Shared memory reserved by CUDA driver per block in bytes."""
676 return self._get_cached_attribute( 2?z
677 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_RESERVED_SHARED_MEMORY_PER_BLOCK 2?z
678 )
680 @property
681 def sparse_cuda_array_supported(self) -> bool:
682 """bool: Device supports sparse CUDA arrays and sparse CUDA mipmapped arrays."""
683 return bool( 2@z
684 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SPARSE_CUDA_ARRAY_SUPPORTED) 2@z
685 )
687 @property
688 def read_only_host_register_supported(self) -> bool:
689 """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."""
690 return bool( 2=z
691 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_READ_ONLY_HOST_REGISTER_SUPPORTED) 2=z
692 )
694 @property
695 def memory_pools_supported(self) -> bool:
696 """bool: Device supports using the cuMemAllocAsync and cuMemPool family of APIs."""
697 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED)) 2LrMrgAhAiAjAkA1h2h3h4h5h6hlA@q[q]q^q_q`q{q|q}q~qarbrmAnAoApAqArA6fXf7hKfLf8hse9h!h#h$h%h7fYf'hMfNf(hte)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h8fZf{hOfPf|hue}h~haibici9f0fdiQfRfeivefigihiiiji!f1fkiSfTfliweminioipiqi#f2friUfVfsixetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPisAtAcrdrer7p8pMnTlUlfrgrhrNnOnPnirQnRnSnTnjrkrUnlrQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%iV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb@A{f|f}fEfVm'iNl!p#pbnWmor3mcn4mXmdnenVl}l~l5m(i~zth6m)i7m*i8m+ilBPlaAuh9m,mfnRB!mAzgnBzhnCzinDzprEz#mFzjnGz=iqnbA'm$pYmZmCbDbEb?iFb@i[i]i^i_i`i{i|i}i~iBeZg0gxhajbjcjCeyhzhdjejGbHbIbJbKbfjgjhjijjj_g`g{g|g}gFfGfHfIfJfAhDe1g2gBhkjljmjEeChDhnjoj3g4g5g6g7gFe8g9gpjqjrjEhFhsjtjujvjwjxjyj6b7b8b9b!bHeIeJezjAjBjCjDjKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#b$b%b'b(bOjPjQjRjSj~gahbhchdhHhIhJhKhLhOe'g(gMhTjUjVjPeNhOhWjXjRbSbTbUbVbYjZj0j1j2jehfhghhhihohphqhrhshPhQe)g*gQh3j4j5jReRhSh6j7j+g,g-g.g/gSe:g;g8j9j!jThUh#j$j%j'j(j)j*j-b.b/b:b;bUeVeWe+j,j-j.j/jXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b?b@b[b]b{j|j}j~jakjhkhlhmhnhP Q T U bkckdkekfkWhXhYhZh0hgkhkikjkkklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkOl
699 @property
700 def gpu_direct_rdma_supported(self) -> bool:
701 """bool: Device supports GPUDirect RDMA APIs, like nvidia_p2p_get_pages (see https://docs.nvidia.com/cuda/gpudirect-rdma for more information)."""
702 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_SUPPORTED)) 2blAe'p
704 @property
705 def gpu_direct_rdma_flush_writes_options(self) -> int:
706 """int: The returned attribute shall be interpreted as a bitmask, where the individual bits are described by the CUflushGPUDirectRDMAWritesOptions enum."""
707 return self._get_cached_attribute( 22z
708 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_FLUSH_WRITES_OPTIONS 22z
709 )
711 @property
712 def gpu_direct_rdma_writes_ordering(self) -> int:
713 """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."""
714 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WRITES_ORDERING) 2HA
716 @property
717 def mempool_supported_handle_types(self) -> int:
718 """int: Handle types supported with mempool based IPC."""
719 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMPOOL_SUPPORTED_HANDLE_TYPES) 2[A
721 @property
722 def deferred_mapping_cuda_array_supported(self) -> bool:
723 """bool: Device supports deferred mapping CUDA arrays and CUDA mipmapped arrays."""
724 return bool( 2Mz
725 self._get_cached_attribute( 2Mz
726 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DEFERRED_MAPPING_CUDA_ARRAY_SUPPORTED 2Mz
727 )
728 )
730 @property
731 def numa_config(self) -> int:
732 """int: NUMA configuration of a device: value is of type CUdeviceNumaConfig enum."""
733 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_CONFIG) 2|A
735 @property
736 def numa_id(self) -> int:
737 """int: NUMA node ID of the GPU memory."""
738 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_ID) 2}A
740 @property
741 def multicast_supported(self) -> bool:
742 """bool: Device supports switch multicast and reduction operations."""
743 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTICAST_SUPPORTED)) 2`A
745 @property
746 def surface_alignment(self) -> int:
747 """int: Surface alignment requirement in bytes."""
748 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SURFACE_ALIGNMENT) 2cB
750 @property
751 def async_engine_count(self) -> int:
752 """int: Number of asynchronous engines."""
753 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT) 2uA
755 @property
756 def can_tex2d_gather(self) -> bool:
757 """bool: True if device supports 2D texture gather operations, False if not."""
758 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_TEX2D_GATHER)) 2xA
760 @property
761 def maximum_texture2d_gather_width(self) -> int:
762 """int: Maximum 2D texture gather width."""
763 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_WIDTH) 2'A
765 @property
766 def maximum_texture2d_gather_height(self) -> int:
767 """int: Maximum 2D texture gather height."""
768 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_HEIGHT) 2%A
770 @property
771 def stream_priorities_supported(self) -> bool:
772 """bool: True if device supports stream priorities, False if not."""
773 return bool( 2[z
774 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_STREAM_PRIORITIES_SUPPORTED) 2[z
775 )
777 @property
778 def can_flush_remote_writes(self) -> bool:
779 """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."""
780 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_FLUSH_REMOTE_WRITES)) 2vA
782 @property
783 def host_register_supported(self) -> bool:
784 """bool: Device supports host memory registration via cudaHostRegister."""
785 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_REGISTER_SUPPORTED)) 2MA
787 @property
788 def timeline_semaphore_interop_supported(self) -> bool:
789 """bool: External timeline semaphore interop is supported on the device."""
790 return bool( 2Uz
791 self._get_cached_attribute( 2Uz
792 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TIMELINE_SEMAPHORE_INTEROP_SUPPORTED 2Uz
793 )
794 )
796 @property
797 def cluster_launch(self) -> bool:
798 """bool: Indicates device supports cluster launch."""
799 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLUSTER_LAUNCH)) 2yA
801 @property
802 def can_use_64_bit_stream_mem_ops(self) -> bool:
803 """bool: 64-bit operations are supported in cuStreamBatchMemOp and related MemOp APIs."""
804 return bool( 2Yz
805 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS) 2Yz
806 )
808 @property
809 def can_use_stream_wait_value_nor(self) -> bool:
810 """bool: CU_STREAM_WAIT_VALUE_NOR is supported by MemOp APIs."""
811 return bool( 2Zz
812 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR) 2Zz
813 )
815 @property
816 def dma_buf_supported(self) -> bool:
817 """bool: Device supports buffer sharing with dma_buf mechanism."""
818 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DMA_BUF_SUPPORTED)) 2DA
820 # Start of CUDA 12 device attributes
822 @property
823 def ipc_event_supported(self) -> bool:
824 """bool: Device supports IPC Events."""
825 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_IPC_EVENT_SUPPORTED)) 2OA
827 @property
828 def mem_sync_domain_count(self) -> int:
829 """int: Number of memory domains the device supports."""
830 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_SYNC_DOMAIN_COUNT, default=1) 2hl
832 @property
833 def tensor_map_access_supported(self) -> bool:
834 """bool: Device supports accessing memory using Tensor Map."""
835 return bool( 2]zmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWg
836 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TENSOR_MAP_ACCESS_SUPPORTED) 2]zmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWg
837 )
839 @property
840 def handle_type_fabric_supported(self) -> bool:
841 """bool: Device supports exporting memory to a fabric handle with cuMemExportToShareableHandle() or requested with cuMemCreate()."""
842 return bool( 23z
843 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_FABRIC_SUPPORTED) 23z
844 )
846 @property
847 def unified_function_pointers(self) -> bool:
848 """bool: Device supports unified function pointers."""
849 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_FUNCTION_POINTERS)) 2iB
851 @property
852 def mps_enabled(self) -> bool:
853 """bool: Indicates if contexts created on this device will be shared via MPS."""
854 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MPS_ENABLED)) 2]A
856 @property
857 def host_numa_id(self) -> int:
858 """int: NUMA ID of the host node closest to the device. Returns -1 when system does not support NUMA."""
859 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_ID, default=-1) 2l m n o p q r s t u v w x y z A B C D E F G k H I J K L M LAXm,ivh-i.i/i:iwh;iYgunvn
861 @property
862 def d3d12_cig_supported(self) -> bool:
863 """bool: Device supports CIG with D3D12."""
864 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_D3D12_CIG_SUPPORTED)) 2CA
866 @property
867 def mem_decompress_algorithm_mask(self) -> int:
868 """int: The returned value shall be interpreted as a bitmask, where the individual bits are described by the CUmemDecompressAlgorithm enum."""
869 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_ALGORITHM_MASK) 2=A
871 @property
872 def mem_decompress_maximum_length(self) -> int:
873 """int: The returned value is the maximum length in bytes of a single decompress operation that is allowed."""
874 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_MAXIMUM_LENGTH) 2?A
876 @property
877 def vulkan_cig_supported(self) -> bool:
878 """bool: Device supports CIG with Vulkan."""
879 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VULKAN_CIG_SUPPORTED)) 2jB
881 @property
882 def gpu_pci_device_id(self) -> int:
883 """int: The combined 16-bit PCI device ID and 16-bit PCI vendor ID.
885 Returns 0 if the driver does not support this query.
886 """
887 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_DEVICE_ID) 2JA
889 @property
890 def gpu_pci_subsystem_id(self) -> int:
891 """int: The combined 16-bit PCI subsystem ID and 16-bit PCI subsystem vendor ID.
893 Returns 0 if the driver does not support this query.
894 """
895 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_SUBSYSTEM_ID) 2KA
897 @property
898 def host_numa_virtual_memory_management_supported(self) -> bool:
899 """bool: Device supports HOST_NUMA location with the virtual memory management APIs like cuMemCreate, cuMemMap and related APIs."""
900 return bool( 2Rz
901 self._get_cached_attribute( 2Rz
902 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2Rz
903 )
904 )
906 @property
907 def host_numa_memory_pools_supported(self) -> bool:
908 """bool: Device supports HOST_NUMA location with the cuMemAllocAsync and cuMemPool family of APIs."""
909 return bool( 28z
910 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MEMORY_POOLS_SUPPORTED) 28z
911 )
913 # Start of CUDA 13 device attributes
915 @property
916 def host_numa_multinode_ipc_supported(self) -> bool:
917 """bool: Device supports HOST_NUMA location IPC between nodes in a multi-node system."""
918 return bool( 29z
919 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MULTINODE_IPC_SUPPORTED) 29z
920 )
922 @property
923 def host_memory_pools_supported(self) -> bool:
924 """bool: Device supports HOST location with the cuMemAllocAsync and cuMemPool family of APIs."""
925 return bool( 2l m n o p q r s t u v w x y z A B C D E F G k H I J K L M 6zemkn,i$mvhln-imn.inn/ion:i%mwhpn;irn(mZm)mWlYg7eHzunvnIz
926 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_MEMORY_POOLS_SUPPORTED) 2l m n o p q r s t u v w x y z A B C D E F G k H I J K L M 6zemkn,i$mvhln-imn.inn/ion:i%mwhpn;irn(mZm)mWlYg7eHzunvnIz
927 )
929 @property
930 def host_virtual_memory_management_supported(self) -> bool:
931 """bool: Device supports HOST location with the virtual memory management APIs like cuMemCreate, cuMemMap and related APIs."""
932 return bool( 2Sz
933 self._get_cached_attribute( 2Sz
934 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2Sz
935 )
936 )
938 @property
939 def host_alloc_dma_buf_supported(self) -> bool:
940 """bool: Device supports page-locked host memory buffer sharing with dma_buf mechanism."""
941 return bool( 25z
942 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_ALLOC_DMA_BUF_SUPPORTED) 25z
943 )
945 @property
946 def only_partial_host_native_atomic_supported(self) -> bool:
947 """bool: Link between the device and the host supports only some native atomic operations."""
948 return bool( 2Tz
949 self._get_cached_attribute( 2Tz
950 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ONLY_PARTIAL_HOST_NATIVE_ATOMIC_SUPPORTED 2Tz
951 )
952 )
955class Device:
956 """Represent a GPU and act as an entry point for cuda.core features.
958 This is a singleton object that helps ensure interoperability
959 across multiple libraries imported in the process to both see
960 and use the same GPU device.
962 While acting as the entry point, many other CUDA resources can be
963 allocated such as streams and buffers. Any :obj:`~_context.Context` dependent
964 resource created through this device, will continue to refer to
965 this device's context.
967 Newly returned :obj:`~_device.Device` objects are thread-local singletons
968 for a specified device.
970 Note
971 ----
972 Will not initialize the GPU.
974 Parameters
975 ----------
976 device_id : int, optional
977 Device ordinal to return a :obj:`~_device.Device` object for.
978 Default value of `None` return the currently used device.
980 """
981 __slots__ = (
982 "_device_id",
983 "_memory_resource",
984 "_has_inited",
985 "_properties",
986 "_resources",
987 "_uuid",
988 "_context",
989 "__weakref__",
990 )
992 def __new__(cls, device_id: Device | int | None = None) -> Device:
993 if isinstance(device_id, Device): 2a ]g4FNr8DOr5FPr6FQr7FRr8FSr9DTromUrpmVr1lWr2lXrRCYr3lZrqm0r!D1r#D2r4l3rrm4r.m5rsm6r$D7r5l8r/m9r%D!r6l#r:m$r'D%rtm'rum(rvm)r7l*r8l+r9l,r!l-r#l.r$l/r%l:r'l;r(l=r)l?r*l@r+l[r,l]r-l^r.l_r/l`r:l{r;l|r=l}r?l~r@las[lbs]lcs^lds_les`lfsLrgsMrhsgAisjs(phAkslsiAmsjAnskAos1h2h3hps4h5h6hlAqsrsss9Ftsusvs@qws[qxs]qys^qzs;mAs(DBs!FCs#FDsBrEsCrFsIr)D=mGs?mHs@mIs[mJs_qKs`qLs{qMs|qNs}qOs~qPsarQsbrRsDrSsTsUsVsmAWsnAXsoAYspAZsqA0srA1sTp2sUp3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntErotsApttAqtVprtFrstttcrutGrvtWpwtXpxtYpytZpzt0pAt1pBtdrCt$FDtEtFtGtHt2pIt3pJt4pKt5pLt*DMt%FNt'FOt(FPt)FQt6pRterStTtUtVtWtXtYtZt0t1t2t3tOF4t7p5t+D6t,D7t-D8t8p9t.D!tMn#tTl$tUl%tIo'tJo(tdm)t]m*t^m+tfr,tgr-thr.tNn/tOn:tPn;tir=tQn?tRn@tSn[tTn]tjr^tkr_tUn`t{t9p|t*F}t~tau+Fbucudueu_mfu`mgu{mhu|miu}mjukulumunu~mou/Dpulrquru}GQi~GRiaHSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9iHF!iIF#iJF$iBGsu%i,Ftu-Fuu{lvuwmwuanxu.FyuxmzuymAuzm:D?B;DAmBu|lCu$f%fCGDu!G'fxz(fpC)fSC*f+f,fVnEu-f3fDf.f4f/F/f:F5f:f#G;f=f?f@f[f]f^f_f`fhC=D)pV l iCW jCm KoX n qCY o 'nZ $Gp 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 DG5 6 EG7 8 FG9 ! GG# $ HG% ' IG( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,pFu- J mBubnBvb!B. K rC/ L No: M JrwbKrxbtDybuDzbvDAbwDBb(n;FGu=FHu?FIu@FJu[FKu]FLuMu%pnrEmFmPF?D^F@DxDNuQG[DAC]DRG^DJG_DOoSG`DTG{DKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkBrBkCyD|DUG}Dwn~DcA@B0m~ amQFaEGmbEOu_FcE`FPu{FQu|FRu}FSu~FTu2mUuaGVubGWucGdEdGeEeGXufGYugGZuUm0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLklCb )nye1mzeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdq%Geq2u_k#BnmXlfEgEhEiEjEsCkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVmVG'iNlrEfqWG!pXG#pKG4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8uWz5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uRBOE!m$uAzPEgnQEBzREhn%uCzSEin'uDzTEprUEEz(u#m)uFzVEjnWEGzXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;ueH$pnDDooDmCYmZm)m=uWl$EYg7eHz?uun%Evn'EIz@u(E)E*E+EJzfmgmmr[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsqWn]ufHHcRFIcsn^uJctn_uKcLGLcMGMc^g`uNc~fXn{uYn|uZn}u0n~u1nav2nbv3ncvAD,E4ndv5nev6nfvOcPcQcRcScTcUcVcWcXcYcZc0c-kgv.khv^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c-E=c.E?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9Bkd/EldBDmdCDndDDodEDpdFDqdGDrdHDsdIDtdJDudKDvdLDwdMDxdNDydODzdPDAdQDBdCdpDCb]GDbqDEb?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w7n{w8n|wagRD:E9n}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxEx!nFx#nGxbgtCcgdgHxIx]EJxKxLxMxNxOxPxQxRxSxTxuCegvCfgggwCSD^Ehgigjgkglg$nUx_EVxWxXx`E{EYxib|EZx%n0x1x2xOlsD3xNG4xhG5xLF6xiG7xjG8xkG9xlG!xMF#xmG$xnG%xoG'xpG(xqG)xrG*xsG+xtG,xuG-xvG.xwG/xOC:xxG;xNF=xyG?xzG@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWgTD_xUD`xVD{xWD|xXD}x}E~xSFayTFbyUFcyVFdyWFeyXFfygyhyYFiyKzjy~EkyaFlyYGmyZGny0Goy1Gpy2Gqy3GrybFsycFtyZFuy0Fvy1FwydFxy4Gyy5Gzy6GAy7GBy'BCy(BDy)BEy*BFy+BGy,BHy2FIy-BJy.BKy/BLy:BMy;BeFYDNyZDOydAPy0DQy1DRy2DSyeATy3DUyfAVy4DWy5DXyYyZy6D0y1y7D2y3F3y=B4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsFPC-ytFQC.y/ybC:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez
994 return device_id 2drerMnTlUlfrgrhrNnOnPnirQnRnSnTnjrkrUn}G~GaHhm*mimjmkm+mlmmmV iCW jCX Y 'nZ $G0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - mBnB. / : JrKrtDuDvDwDVmVGNlWGXG}l5m(i~zth6m)i7m*i8m+ilBPlaAuh9m,m=ibAeHYmfmgmmrAeRFBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDpD]GqDrDP Q
996 Device_ensure_cuda_initialized() 2a ]g4FNr8DOr5FPr6FQr7FRr8FSr9DTromUrpmVr1lWr2lXrRCYr3lZrqm0r!D1r#D2r4l3rrm4r.m5rsm6r$D7r5l8r/m9r%D!r6l#r:m$r'D%rtm'rum(rvm)r7l*r8l+r9l,r!l-r#l.r$l/r%l:r'l;r(l=r)l?r*l@r+l[r,l]r-l^r.l_r/l`r:l{r;l|r=l}r?l~r@las[lbs]lcs^lds_les`lfsLrgsMrhsgAisjs(phAkslsiAmsjAnskAos1h2h3hps4h5h6hlAqsrsss9Ftsusvs@qws[qxs]qys^qzs;mAs(DBs!FCs#FDsBrEsCrFsIr)D=mGs?mHs@mIs[mJs_qKs`qLs{qMs|qNs}qOs~qPsarQsbrRsDrSsTsUsVsmAWsnAXsoAYspAZsqA0srA1sTp2sUp3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntErotsApttAqtVprtFrstttcrutGrvtWpwtXpxtYpytZpzt0pAt1pBtdrCt$FDtEtFtGtHt2pIt3pJt4pKt5pLt*DMt%FNt'FOt(FPt)FQt6pRterStTtUtVtWtXtYtZt0t1t2t3tOF4t7p5t+D6t,D7t-D8t8p9t.D!tMn#tTl$tUl%tIo'tJo(tdm)t]m*t^m+tfr,tgr-thr.tNn/tOn:tPn;tir=tQn?tRn@tSn[tTn]tjr^tkr_tUn`t{t9p|t*F}t~tau+Fbucudueu_mfu`mgu{mhu|miu}mjukulumunu~mou/DpulrquruQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9iHF!iIF#iJF$iBGsu%i,Ftu-Fuu{lvuwmwuanxu.FyuxmzuymAuzm:D?B;DAmBu|lCu$f%fCGDu!G'fxz(fpC)fSC*f+f,fVnEu-f3fDf.f4f/F/f:F5f:f#G;f=f?f@f[f]f^f_f`fhC=D)pV l iCW jCm KoX n qCY o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 DG5 6 EG7 8 FG9 ! GG# $ HG% ' IG( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,pFu- J mBubnBvb!B. K rC/ L No: M JrwbKrxbtDybuDzbvDAbwDBb(n;FGu=FHu?FIu@FJu[FKu]FLuMu%pnrEmFmPF?D^F@DxDNuQG[DAC]DRG^DJG_DOoSG`DTG{DKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkBrBkCyD|DUG}Dwn~DcA@B0m~ amQFaEGmbEOu_FcE`FPu{FQu|FRu}FSu~FTu2mUuaGVubGWucGdEdGeEeGXufGYugGZuUm0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLklCb )nye1mzeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdq%Geq2u_k#BnmXlfEgEhEiEjEsCkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVmVG'iNlrEfqWG!pXG#pKG4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8uWz5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uRBOE!m$uAzPEgnQEBzREhn%uCzSEin'uDzTEprUEEz(u#m)uFzVEjnWEGzXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;u$pnDDooDmCYmZm)m=uWl$EYg7eHz?uun%Evn'EIz@u(E)E*E+EJzfmgmmr[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsqWn]ufHHcRFIcsn^uJctn_uKcLGLcMGMc^g`uNc~fXn{uYn|uZn}u0n~u1nav2nbv3ncvAD,E4ndv5nev6nfvOcPcQcRcScTcUcVcWcXcYcZc0c-kgv.khv^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c-E=c.E?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9Bkd/EldBDmdCDndDDodEDpdFDqdGDrdHDsdIDtdJDudKDvdLDwdMDxdNDydODzdPDAdQDBdCdpDCbDbqDEb?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w7n{w8n|wagRD:E9n}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxEx!nFx#nGxbgtCcgdgHxIx]EJxKxLxMxNxOxPxQxRxSxTxuCegvCfgggwCSD^Ehgigjgkglg$nUx_EVxWxXx`E{EYxib|EZx%n0x1x2xOlsD3xNG4xhG5xLF6xiG7xjG8xkG9xlG!xMF#xmG$xnG%xoG'xpG(xqG)xrG*xsG+xtG,xuG-xvG.xwG/xOC:xxG;xNF=xyG?xzG@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWgTD_xUD`xVD{xWD|xXD}x}E~xSFayTFbyUFcyVFdyWFeyXFfygyhyYFiyKzjy~EkyaFlyYGmyZGny0Goy1Gpy2Gqy3GrybFsycFtyZFuy0Fvy1FwydFxy4Gyy5Gzy6GAy7GBy'BCy(BDy)BEy*BFy+BGy,BHy2FIy-BJy.BKy/BLy:BMy;BeFYDNyZDOydAPy0DQy1DRy2DSyeATy3DUyfAVy4DWy5DXyYyZy6D0y1y7D2y3F3y=B4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsFPC-ytFQC.y/ybC:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez
997 device_id = Device_resolve_device_id(device_id) 2a ]g4FNr8DOr5FPr6FQr7FRr8FSr9DTromUrpmVr1lWr2lXrRCYr3lZrqm0r!D1r#D2r4l3rrm4r.m5rsm6r$D7r5l8r/m9r%D!r6l#r:m$r'D%rtm'rum(rvm)r7l*r8l+r9l,r!l-r#l.r$l/r%l:r'l;r(l=r)l?r*l@r+l[r,l]r-l^r.l_r/l`r:l{r;l|r=l}r?l~r@las[lbs]lcs^lds_les`lfsLrgsMrhsgAisjs(phAkslsiAmsjAnskAos1h2h3hps4h5h6hlAqsrsss9Ftsusvs@qws[qxs]qys^qzs;mAs(DBs!FCs#FDsBrEsCrFsIr)D=mGs?mHs@mIs[mJs_qKs`qLs{qMs|qNs}qOs~qPsarQsbrRsDrSsTsUsVsmAWsnAXsoAYspAZsqA0srA1sTp2sUp3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntErotsApttAqtVprtFrstttcrutGrvtWpwtXpxtYpytZpzt0pAt1pBtdrCt$FDtEtFtGtHt2pIt3pJt4pKt5pLt*DMt%FNt'FOt(FPt)FQt6pRterStTtUtVtWtXtYtZt0t1t2t3tOF4t7p5t+D6t,D7t-D8t8p9t.D!tMn#tTl$tUl%tIo'tJo(tdm)t]m*t^m+tfr,tgr-thr.tNn/tOn:tPn;tir=tQn?tRn@tSn[tTn]tjr^tkr_tUn`t{t9p|t*F}t~tau+Fbucudueu_mfu`mgu{mhu|miu}mjukulumunu~mou/DpulrquruQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9iHF!iIF#iJF$iBGsu%i,Ftu-Fuu{lvuwmwuanxu.FyuxmzuymAuzm:D?B;DAmBu|lCu$f%fCGDu!G'fxz(fpC)fSC*f+f,fVnEu-f3fDf.f4f/F/f:F5f:f#G;f=f?f@f[f]f^f_f`fhC=D)pV l iCW jCm KoX n qCY o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 DG5 6 EG7 8 FG9 ! GG# $ HG% ' IG( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,pFu- J mBubnBvb!B. K rC/ L No: M JrwbKrxbtDybuDzbvDAbwDBb(n;FGu=FHu?FIu@FJu[FKu]FLuMu%pnrEmFmPF?D^F@DxDNuQG[DAC]DRG^DJG_DOoSG`DTG{DKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkBrBkCyD|DUG}Dwn~DcA@B0m~ amQFaEGmbEOu_FcE`FPu{FQu|FRu}FSu~FTu2mUuaGVubGWucGdEdGeEeGXufGYugGZuUm0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLklCb )nye1mzeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdq%Geq2u_k#BnmXlfEgEhEiEjEsCkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVmVG'iNlrEfqWG!pXG#pKG4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8uWz5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uRBOE!m$uAzPEgnQEBzREhn%uCzSEin'uDzTEprUEEz(u#m)uFzVEjnWEGzXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;u$pnDDooDmCYmZm)m=uWl$EYg7eHz?uun%Evn'EIz@u(E)E*E+EJzfmgmmr[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsqWn]ufHHcRFIcsn^uJctn_uKcLGLcMGMc^g`uNc~fXn{uYn|uZn}u0n~u1nav2nbv3ncvAD,E4ndv5nev6nfvOcPcQcRcScTcUcVcWcXcYcZc0c-kgv.khv^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c-E=c.E?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9Bkd/EldBDmdCDndDDodEDpdFDqdGDrdHDsdIDtdJDudKDvdLDwdMDxdNDydODzdPDAdQDBdCdpDCbDbqDEb?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w7n{w8n|wagRD:E9n}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxEx!nFx#nGxbgtCcgdgHxIx]EJxKxLxMxNxOxPxQxRxSxTxuCegvCfgggwCSD^Ehgigjgkglg$nUx_EVxWxXx`E{EYxib|EZx%n0x1x2xOlsD3xNG4xhG5xLF6xiG7xjG8xkG9xlG!xMF#xmG$xnG%xoG'xpG(xqG)xrG*xsG+xtG,xuG-xvG.xwG/xOC:xxG;xNF=xyG?xzG@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWgTD_xUD`xVD{xWD|xXD}x}E~xSFayTFbyUFcyVFdyWFeyXFfygyhyYFiyKzjy~EkyaFlyYGmyZGny0Goy1Gpy2Gqy3GrybFsycFtyZFuy0Fvy1FwydFxy4Gyy5Gzy6GAy7GBy'BCy(BDy)BEy*BFy+BGy,BHy2FIy-BJy.BKy/BLy:BMy;BeFYDNyZDOydAPy0DQy1DRy2DSyeATy3DUyfAVy4DWy5DXyYyZy6D0y1y7D2y3F3y=B4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsFPC-ytFQC.y/ybC:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez
998 devices = Device_ensure_tls_devices(cls) 2a ]g4FNr8DOr5FPr6FQr7FRr8FSr9DTromUrpmVr1lWr2lXrRCYr3lZrqm0r!D1r#D2r4l3rrm4r.m5rsm6r$D7r5l8r/m9r%D!r6l#r:m$r'D%rtm'rum(rvm)r7l*r8l+r9l,r!l-r#l.r$l/r%l:r'l;r(l=r)l?r*l@r+l[r,l]r-l^r.l_r/l`r:l{r;l|r=l}r?l~r@las[lbs]lcs^lds_les`lfsLrgsMrhsgAisjs(phAkslsiAmsjAnskAos1h2h3hps4h5h6hlAqsrsss9Ftsusvs@qws[qxs]qys^qzs;mAs(DBs!FCs#FDsBrEsCrFsIr)D=mGs?mHs@mIs[mJs_qKs`qLs{qMs|qNs}qOs~qPsarQsbrRsDrSsTsUsVsmAWsnAXsoAYspAZsqA0srA1sTp2sUp3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntErotsApttAqtVprtFrstttcrutGrvtWpwtXpxtYpytZpzt0pAt1pBtdrCt$FDtEtFtGtHt2pIt3pJt4pKt5pLt*DMt%FNt'FOt(FPt)FQt6pRterStTtUtVtWtXtYtZt0t1t2t3tOF4t7p5t+D6t,D7t-D8t8p9t.D!tMn#tTl$tUl%tIo'tJo(tdm)t]m*t^m+tfr,tgr-thr.tNn/tOn:tPn;tir=tQn?tRn@tSn[tTn]tjr^tkr_tUn`t{t9p|t*F}t~tau+Fbucudueu_mfu`mgu{mhu|miu}mjukulumunu~mou/DpulrquruQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9iHF!iIF#iJF$iBGsu%i,Ftu-Fuu{lvuwmwuanxu.FyuxmzuymAuzm:D?B;DAmBu|lCu$f%fCGDu!G'fxz(fpC)fSC*f+f,fVnEu-f3fDf.f4f/F/f:F5f:f#G;f=f?f@f[f]f^f_f`fhC=D)pV l iCW jCm KoX n qCY o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 DG5 6 EG7 8 FG9 ! GG# $ HG% ' IG( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,pFu- J mBubnBvb!B. K rC/ L No: M JrwbKrxbtDybuDzbvDAbwDBb(n;FGu=FHu?FIu@FJu[FKu]FLuMu%pnrEmFmPF?D^F@DxDNuQG[DAC]DRG^DJG_DOoSG`DTG{DKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkBrBkCyD|DUG}Dwn~DcA@B0m~ amQFaEGmbEOu_FcE`FPu{FQu|FRu}FSu~FTu2mUuaGVubGWucGdEdGeEeGXufGYugGZuUm0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLklCb )nye1mzeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdq%Geq2u_k#BnmXlfEgEhEiEjEsCkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVmVG'iNlrEfqWG!pXG#pKG4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8uWz5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uRBOE!m$uAzPEgnQEBzREhn%uCzSEin'uDzTEprUEEz(u#m)uFzVEjnWEGzXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;u$pnDDooDmCYmZm)m=uWl$EYg7eHz?uun%Evn'EIz@u(E)E*E+EJzfmgmmr[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsqWn]uHcRFIcsn^uJctn_uKcLGLcMGMc^g`uNc~fXn{uYn|uZn}u0n~u1nav2nbv3ncvAD,E4ndv5nev6nfvOcPcQcRcScTcUcVcWcXcYcZc0c-kgv.khv^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c-E=c.E?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9Bkd/EldBDmdCDndDDodEDpdFDqdGDrdHDsdIDtdJDudKDvdLDwdMDxdNDydODzdPDAdQDBdCdpDCbDbqDEb?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w7n{w8n|wagRD:E9n}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxEx!nFx#nGxbgtCcgdgHxIx]EJxKxLxMxNxOxPxQxRxSxTxuCegvCfgggwCSD^Ehgigjgkglg$nUx_EVxWxXx`E{EYxib|EZx%n0x1x2xOlsD3xNG4xhG5xLF6xiG7xjG8xkG9xlG!xMF#xmG$xnG%xoG'xpG(xqG)xrG*xsG+xtG,xuG-xvG.xwG/xOC:xxG;xNF=xyG?xzG@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWgTD_xUD`xVD{xWD|xXD}x}E~xSFayTFbyUFcyVFdyWFeyXFfygyhyYFiyKzjy~EkyaFlyYGmyZGny0Goy1Gpy2Gqy3GrybFsycFtyZFuy0Fvy1FwydFxy4Gyy5Gzy6GAy7GBy'BCy(BDy)BEy*BFy+BGy,BHy2FIy-BJy.BKy/BLy:BMy;BeFYDNyZDOydAPy0DQy1DRy2DSyeATy3DUyfAVy4DWy5DXyYyZy6D0y1y7D2y3F3y=B4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsFPC-ytFQC.y/ybC:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez
1000 try: 2a ]g4FNr8DOr5FPr6FQr7FRr8FSr9DTromUrpmVr1lWr2lXrRCYr3lZrqm0r!D1r#D2r4l3rrm4r.m5rsm6r$D7r5l8r/m9r%D!r6l#r:m$r'D%rtm'rum(rvm)r7l*r8l+r9l,r!l-r#l.r$l/r%l:r'l;r(l=r)l?r*l@r+l[r,l]r-l^r.l_r/l`r:l{r;l|r=l}r?l~r@las[lbs]lcs^lds_les`lfsLrgsMrhsgAisjs(phAkslsiAmsjAnskAos1h2h3hps4h5h6hlAqsrsss9Ftsusvs@qws[qxs]qys^qzs;mAs(DBs!FCs#FDsBrEsCrFsIr)D=mGs?mHs@mIs[mJs_qKs`qLs{qMs|qNs}qOs~qPsarQsbrRsDrSsTsUsVsmAWsnAXsoAYspAZsqA0srA1sTp2sUp3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntErotsApttAqtVprtFrstttcrutGrvtWpwtXpxtYpytZpzt0pAt1pBtdrCt$FDtEtFtGtHt2pIt3pJt4pKt5pLt*DMt%FNt'FOt(FPt)FQt6pRterStTtUtVtWtXtYtZt0t1t2t3tOF4t7p5t+D6t,D7t-D8t8p9t.D!tMn#tTl$tUl%tIo'tJo(tdm)t]m*t^m+tfr,tgr-thr.tNn/tOn:tPn;tir=tQn?tRn@tSn[tTn]tjr^tkr_tUn`t{t9p|t*F}t~tau+Fbucudueu_mfu`mgu{mhu|miu}mjukulumunu~mou/DpulrquruQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9iHF!iIF#iJF$iBGsu%i,Ftu-Fuu{lvuwmwuanxu.FyuxmzuymAuzm:D?B;DAmBu|lCu$f%fCGDu!G'fxz(fpC)fSC*f+f,fVnEu-f3fDf.f4f/F/f:F5f:f#G;f=f?f@f[f]f^f_f`fhC=D)pV l iCW jCm KoX n qCY o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 DG5 6 EG7 8 FG9 ! GG# $ HG% ' IG( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,pFu- J mBubnBvb!B. K rC/ L No: M JrwbKrxbtDybuDzbvDAbwDBb(n;FGu=FHu?FIu@FJu[FKu]FLuMu%pnrEmFmPF?D^F@DxDNuQG[DAC]DRG^DJG_DOoSG`DTG{DKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkBrBkCyD|DUG}Dwn~DcA@B0m~ amQFaEGmbEOu_FcE`FPu{FQu|FRu}FSu~FTu2mUuaGVubGWucGdEdGeEeGXufGYugGZuUm0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLklCb )nye1mzeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdq%Geq2u_k#BnmXlfEgEhEiEjEsCkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVmVG'iNlrEfqWG!pXG#pKG4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8uWz5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uRBOE!m$uAzPEgnQEBzREhn%uCzSEin'uDzTEprUEEz(u#m)uFzVEjnWEGzXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;u$pnDDooDmCYmZm)m=uWl$EYg7eHz?uun%Evn'EIz@u(E)E*E+EJzfmgmmr[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsqWn]uHcRFIcsn^uJctn_uKcLGLcMGMc^g`uNc~fXn{uYn|uZn}u0n~u1nav2nbv3ncvAD,E4ndv5nev6nfvOcPcQcRcScTcUcVcWcXcYcZc0c-kgv.khv^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c-E=c.E?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9Bkd/EldBDmdCDndDDodEDpdFDqdGDrdHDsdIDtdJDudKDvdLDwdMDxdNDydODzdPDAdQDBdCdpDCbDbqDEb?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w7n{w8n|wagRD:E9n}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxEx!nFx#nGxbgtCcgdgHxIx]EJxKxLxMxNxOxPxQxRxSxTxuCegvCfgggwCSD^Ehgigjgkglg$nUx_EVxWxXx`E{EYxib|EZx%n0x1x2xOlsD3xNG4xhG5xLF6xiG7xjG8xkG9xlG!xMF#xmG$xnG%xoG'xpG(xqG)xrG*xsG+xtG,xuG-xvG.xwG/xOC:xxG;xNF=xyG?xzG@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWgTD_xUD`xVD{xWD|xXD}x}E~xSFayTFbyUFcyVFdyWFeyXFfygyhyYFiyKzjy~EkyaFlyYGmyZGny0Goy1Gpy2Gqy3GrybFsycFtyZFuy0Fvy1FwydFxy4Gyy5Gzy6GAy7GBy'BCy(BDy)BEy*BFy+BGy,BHy2FIy-BJy.BKy/BLy:BMy;BeFYDNyZDOydAPy0DQy1DRy2DSyeATy3DUyfAVy4DWy5DXyYyZy6D0y1y7D2y3F3y=B4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsFPC-ytFQC.y/ybC:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez
1001 return devices[device_id] 2a ]g4FNr8DOr5FPr6FQr7FRr8FSr9DTromUrpmVr1lWr2lXrRCYr3lZrqm0r!D1r#D2r4l3rrm4r.m5rsm6r$D7r5l8r/m9r%D!r6l#r:m$r'D%rtm'rum(rvm)r7l*r8l+r9l,r!l-r#l.r$l/r%l:r'l;r(l=r)l?r*l@r+l[r,l]r-l^r.l_r/l`r:l{r;l|r=l}r?l~r@las[lbs]lcs^lds_les`lfsLrgsMrhsgAisjs(phAkslsiAmsjAnskAos1h2h3hps4h5h6hlAqsrsss9Ftsusvs@qws[qxs]qys^qzs;mAs(DBs!FCs#FDsBrEsCrFsIr)D=mGs?mHs@mIs[mJs_qKs`qLs{qMs|qNs}qOs~qPsarQsbrRsDrSsTsUsVsmAWsnAXsoAYspAZsqA0srA1sTp2sUp3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntErotsApttAqtVprtFrstttcrutGrvtWpwtXpxtYpytZpzt0pAt1pBtdrCt$FDtEtFtGtHt2pIt3pJt4pKt5pLt*DMt%FNt'FOt(FPt)FQt6pRterStTtUtVtWtXtYtZt0t1t2t3tOF4t7p5t+D6t,D7t-D8t8p9t.D!tMn#tTl$tUl%tIo'tJo(tdm)t]m*t^m+tfr,tgr-thr.tNn/tOn:tPn;tir=tQn?tRn@tSn[tTn]tjr^tkr_tUn`t{t9p|t*F}t~tau+Fbucudueu_mfu`mgu{mhu|miu}mjukulumunu~mou/DpulrquruQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9iHF!iIF#iJF$iBGsu%i,Ftu-Fuu{lvuwmwuanxu.FyuxmzuymAuzm:D?B;DAmBu|lCu$f%fCGDu!G'fxz(fpC)fSC*f+f,fVnEu-f3fDf.f4f/F/f:F5f:f#G;f=f?f@f[f]f^f_f`fhC=D)pV l iCW jCm KoX n qCY o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 DG5 6 EG7 8 FG9 ! GG# $ HG% ' IG( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,pFu- J mBubnBvb!B. K rC/ L No: M JrwbKrxbtDybuDzbvDAbwDBb(n;FGu=FHu?FIu@FJu[FKu]FLuMu%pnrEmFmPF?D^F@DxDNuQG[DAC]DRG^DJG_DOoSG`DTG{DKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkBrBkCyD|DUG}Dwn~DcA@B0m~ amQFaEGmbEOu_FcE`FPu{FQu|FRu}FSu~FTu2mUuaGVubGWucGdEdGeEeGXufGYugGZuUm0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLklCb )nye1mzeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdq%Geq2u_k#BnmXlfEgEhEiEjEsCkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVmVG'iNlrEfqWG!pXG#pKG4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8uWz5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uRBOE!m$uAzPEgnQEBzREhn%uCzSEin'uDzTEprUEEz(u#m)uFzVEjnWEGzXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;u$pnDDooDmCYmZm)m=uWl$EYg7eHz?uun%Evn'EIz@u(E)E*E+EJzfmgmmr[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsqWn]uHcRFIcsn^uJctn_uKcLGLcMGMc^g`uNc~fXn{uYn|uZn}u0n~u1nav2nbv3ncvAD,E4ndv5nev6nfvOcPcQcRcScTcUcVcWcXcYcZc0c-kgv.khv^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c-E=c.E?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9Bkd/EldBDmdCDndDDodEDpdFDqdGDrdHDsdIDtdJDudKDvdLDwdMDxdNDydODzdPDAdQDBdCdpDCbDbqDEb?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w7n{w8n|wagRD:E9n}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxEx!nFx#nGxbgtCcgdgHxIx]EJxKxLxMxNxOxPxQxRxSxTxuCegvCfgggwCSD^Ehgigjgkglg$nUx_EVxWxXx`E{EYxib|EZx%n0x1x2xOlsD3xNG4xhG5xLF6xiG7xjG8xkG9xlG!xMF#xmG$xnG%xoG'xpG(xqG)xrG*xsG+xtG,xuG-xvG.xwG/xOC:xxG;xNF=xyG?xzG@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWgTD_xUD`xVD{xWD|xXD}x}E~xSFayTFbyUFcyVFdyWFeyXFfygyhyYFiyKzjy~EkyaFlyYGmyZGny0Goy1Gpy2Gqy3GrybFsycFtyZFuy0Fvy1FwydFxy4Gyy5Gzy6GAy7GBy'BCy(BDy)BEy*BFy+BGy,BHy2FIy-BJy.BKy/BLy:BMy;BeFYDNyZDOydAPy0DQy1DRy2DSyeATy3DUyfAVy4DWy5DXyYyZy6D0y1y7D2y3F3y=B4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsFPC-ytFQC.y/ybC:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez
1002 except IndexError: 2SGTG
1003 raise ValueError(f"device_id must be within [0, {len(devices)}), got {device_id}") from None 2SGTG
1005 def _check_context_initialized(self) -> None:
1006 if not self._has_inited: 24F8D5F6F7F8F9Dompm1l2lRC3lqm!D#D4lrm.msm$D5l/m%D6l:m'Dtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l9F@q[q]q^q;m(D!F#FIr=m?m@m[m_q`q{q|q}q~qarbrKfLfMfNfOfPfQfRfSfTfUfVfcr$F*D%F'F(F)FOF7p+D,D-D8p.DMnTlUldm]m^mNnOnPnQnRnSnTnUn*F+F_m`m{m|m}m~mlr}G~GaHgHhHiHhm*mimjmkm+mlmmmBmCmDmbHcHdHHFIFJF,F-F{lwman.Fxmymzm?BAm|lkHlH;H=HmH?H@H/F:FnHoH[H]H^H_H`HhC|H}H~HaIbIcIdIeIfIgIhIiIWfjIXzkI(G)G*G+G,G-G.G/GjHlImInIoIpIqIrIsItIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQIRISITIUI-mVI8GWIFuXIGFYImBnB!BZI'G0I1I2I3I4IJrKrtDuDvDwD;F=F?F@F[F]FEmFmPF^F0m~ amQFGmbE_F`F{F|F}F~F2maGbGcGdGeGfGgGUmBCCCDCECFCGCHCICJCKCLCMCNClC)n1m_k#BnmXlsC$B%Byzzz5I6IpH7IqH8I9IrHsH!I#I$ItH%IuHvHwHxHyHzHAHBHCH'IDHEHFHGH(IHHIH)I*I+I,IJH-IKH.I/ILHMH:I;I=INH?IOHPHQHRHSHTHUHVHWH@IXHYHZH0H[I1H2H]I^I_I`I3H{I4H|I}I5H6H~IaJbJ7HcJ8H9H!H#H$H%H'H(H)HdJ*H+H,H-HeJ.H/HfJgJNlVl}l~lemeHmCWlYg7e(E*E^g-k.k^GjltqPoQoRovqklwqllxqSoToUoyqZg0gGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMbVoWo_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqXgZlQlRlSl0l1g2g3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+o8g9g,o-o? @ PbQb.o/o!g#g$g%g[ ] :o;o~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQqvlRq=o?o@oSq'g(gRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb[o]oeh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1q}kFoFnGnHnGo)g*g+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpop:g;gppqp` { 2b3brpsp=g?g@g[g| } tpupjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qP Q T U Fl#qvpwpxp$qGl%qypzpAp'qHl(qBpCpDp)qIl*qEpFpGp+qJl,qHpIpJp-qKl.qKpLpMp/qLl:qNpOpPp;qMl=qQpRpSp?qhGLFiGjGkGlGMFmGnGoGpGqGrGsGtGuGvGwGxGNFyGzGTDUDVDWDXD}ESFTFUFVFWFXFgyYFKz~EaFbFcFZF0F1FdF2FYDZDdA0D1D2DeA3DfA4D5D6D7D3F=BbC
1007 raise CUDAError(
1008 f"Device {self._device_id} is not yet initialized, perhaps you forgot to call .set_current() first?"
1009 )
1012 @classmethod
1013 def get_all_devices(cls) -> tuple[Device, ...]:
1014 """
1015 Query the available device instances.
1017 Returns
1018 -------
1019 tuple of Device
1020 A tuple containing instances of available devices.
1021 """
1022 from cuda.core import system 2(pDf*p+p,p(nOofqgqhqiqjqkqlqmqnqoqpqqqrqsqBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDOl
1023 total = system.get_num_devices() 2(pDf*p+p,p(nOofqgqhqiqjqkqlqmqnqoqpqqqrqsqBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDOl
1024 return tuple(cls(device_id) for device_id in range(total)) 2(pDf*p+p,p(nOofqgqhqiqjqkqlqmqnqoqpqqqrqsqBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDOl
1026 def to_system_device(self) -> 'cuda.core.system.Device':
1027 """
1028 Get the corresponding :class:`cuda.core.system.Device` (which is used
1029 for NVIDIA Management Library (NVML) access) for this
1030 :class:`cuda.core.Device` (which is used for CUDA access).
1032 The devices are mapped to one another by their UUID.
1034 Returns
1035 -------
1036 cuda.core.system.Device
1037 The corresponding system-level device instance used for NVML access.
1038 """
1039 from cuda.core.system._system import CUDA_BINDINGS_NVML_IS_COMPATIBLE 2cA
1041 if not CUDA_BINDINGS_NVML_IS_COMPATIBLE: 2cA
1042 raise RuntimeError(
1043 "cuda.core.system.Device requires cuda-bindings 12.9.6+ for CUDA 12.x, or cuda-bindings 13.2.0+ for CUDA 13.x"
1044 )
1046 from cuda.core.system import Device as SystemDevice 2cA
1047 return SystemDevice(uuid=self.uuid) 2cA
1049 @property
1050 def device_id(self) -> int:
1051 """Return device ordinal."""
1052 return self._device_id 2LrMr6fXf7fYf8fZf9f0f!f1f#f2fdrerMnTlUlIoJodmfrgrhrNnOnPnirQnRnSnTnjrkrUn}G~GaHgHhHiHhm*mimjmkm+mlmmmBmCmDmbHcHdHHFIFJFBGiJkHlHCG!GxzpCSCjJ;H=HmH?H@H#GnHoH)pV _GiCW jCKoX :GqCY ;G'nZ $G0 Wf1 Yl2 3 4 DG5 6 EG7 8 FG9 ! GG# $ HG% ' IG( Lo) =G?G* @Gk Mo+ [G-m, 8GFu- mBnB!B. rC/ No: JrKrtDuDvDwDnrEmFmOown~D@BlC)n1m%GyzzzEfVmVGNlWGXGKGWm4m}l~l5m(i~zth6m)i7m*i8m+ilBPlaAuh9m,m=ibAeHYm(E*EJzfmgmmrAeRFsntnLGMG^g-k.kfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDpD]GqDrDjlklllGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlul`kXg;k{kvlRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlEl|k}k@k~kzrArP Q FlGlHlIlJlKlLlMlOCgyKz'B(B)B*B+B,B-B.B/B:B;BdAeAfA{HkJlJmJnJoJpJqJrJsJtJuJvJwJxJyJzJAJBJCJDJEJFJGJHJSk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)k*k+kPCIJQCbC
1054 @property
1055 def pci_bus_id(self) -> str:
1056 """Return a PCI Bus Id string for this device."""
1057 bus_id = handle_return(runtime.cudaDeviceGetPCIBusId(13, self._device_id)) 2(n~DcA
1058 return bus_id[:12].decode() 2(n~DcA
1060 def can_access_peer(self, peer: Device | int) -> bool:
1061 """Check if this device can access memory from the specified peer device.
1063 Queries whether peer-to-peer memory access is supported between this
1064 device and the specified peer device.
1066 Parameters
1067 ----------
1068 peer : Device | int
1069 The peer device to check accessibility to. Can be a :obj:`~_device.Device` object or device ID.
1070 """
1071 peer = Device(peer)
1072 cdef int d1 = <int> self.device_id
1073 cdef int d2 = <int> peer.device_id
1074 if d1 == d2:
1075 return True
1076 cdef int value = 0
1077 with nogil:
1078 HANDLE_RETURN(cydriver.cuDeviceCanAccessPeer(&value, d1, d2))
1079 return bool(value)
1081 @property
1082 def uuid(self) -> str:
1083 """Return a UUID for the device.
1085 Returns 16-octets identifying the device. If the device is in
1086 MIG mode, returns its MIG UUID which uniquely identifies the
1087 subscribed MIG compute instance.
1089 Note
1090 ----
1091 MIG UUID is only returned when device is in MIG mode and the
1092 driver is older than CUDA 11.4.
1094 The UUID is cached after first access to avoid repeated CUDA API calls.
1096 """
1097 cdef cydriver.CUuuid uuid
1098 cdef cydriver.CUdevice dev
1099 cdef bytes uuid_b
1100 cdef str uuid_hex
1102 if self._uuid is None: 2xzpCSCV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb(nxDACJGyDcA@B(ith)i*i+iPluh,m,ivh-i.i/i:iwh;i=iYgunvnCbDbEbFbHmFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmP Q T U SmTmbmcm
1103 dev = self._device_id 2xzpCSCV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb(nxDACyDcA@B(ith)i*i+iPluh,ivh-i.i/i:iwh;i=iYgunvnCbDbEbFbHmFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmP Q T U SmTmbmcm
1104 with nogil: 2xzpCSCV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb(nxDACyDcA@B(ith)i*i+iPluh,ivh-i.i/i:iwh;i=iYgunvnCbDbEbFbHmFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmP Q T U SmTmbmcm
1105 IF CUDA_CORE_BUILD_MAJOR == 12:
1106 HANDLE_RETURN(cydriver.cuDeviceGetUuid_v2(&uuid, dev))
1107 ELSE: # 13.0+
1108 HANDLE_RETURN(cydriver.cuDeviceGetUuid(&uuid, dev)) 2xzpCSCV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb(nxDACyDcA@B(ith)i*i+iPluh,ivh-i.i/i:iwh;i=iYgunvnCbDbEbFbHmFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmP Q T U SmTmbmcm
1109 uuid_b = cpython.PyBytes_FromStringAndSize(uuid.bytes, sizeof(uuid.bytes)) 2xzpCSCV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb(nxDACyDcA@B(ith)i*i+iPluh,ivh-i.i/i:iwh;i=iYgunvnCbDbEbFbHmFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmP Q T U SmTmbmcm
1110 uuid_hex = uuid_b.hex() 2xzpCSCV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb(nxDACyDcA@B(ith)i*i+iPluh,ivh-i.i/i:iwh;i=iYgunvnCbDbEbFbHmFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmP Q T U SmTmbmcm
1111 # 8-4-4-4-12
1112 self._uuid = f"{uuid_hex[:8]}-{uuid_hex[8:12]}-{uuid_hex[12:16]}-{uuid_hex[16:20]}-{uuid_hex[20:]}" 2xzpCSCV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb(nxDACyDcA@B(ith)i*i+iPluh,ivh-i.i/i:iwh;i=iYgunvnCbDbEbFbHmFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmP Q T U SmTmbmcm
1113 return self._uuid 2xzpCSCV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb(nxDACJGyDcA@B(ith)i*i+iPluh,m,ivh-i.i/i:iwh;i=iYgunvnCbDbEbFbHmFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmP Q T U SmTmbmcm
1115 @property
1116 def name(self) -> str:
1117 """Return the device name."""
1118 # Use 256 characters to be consistent with CUDA Runtime
1119 cdef int LENGTH = 256 2xz)p_GiCjCKo:GqC;G'n$GWfXz(G)G*G+G,G-G.G/GYlAGLo=G?G@GMo[G-m8GFuGFmBnB!B'GrC{GNo|GrBwnRm
1120 cdef bytes name = bytes(LENGTH) 2xz)p_GiCjCKo:GqC;G'n$GWfXz(G)G*G+G,G-G.G/GYlAGLo=G?G@GMo[G-m8GFuGFmBnB!B'GrC{GNo|GrBwnRm
1121 cdef char* name_ptr = name 2xz)p_GiCjCKo:GqC;G'n$GWfXz(G)G*G+G,G-G.G/GYlAGLo=G?G@GMo[G-m8GFuGFmBnB!B'GrC{GNo|GrBwnRm
1122 cdef cydriver.CUdevice this_dev = self._device_id 2xz)p_GiCjCKo:GqC;G'n$GWfXz(G)G*G+G,G-G.G/GYlAGLo=G?G@GMo[G-m8GFuGFmBnB!B'GrC{GNo|GrBwnRm
1123 with nogil: 2xz)p_GiCjCKo:GqC;G'n$GWfXz(G)G*G+G,G-G.G/GYlAGLo=G?G@GMo[G-m8GFuGFmBnB!B'GrC{GNo|GrBwnRm
1124 HANDLE_RETURN(cydriver.cuDeviceGetName(name_ptr, LENGTH, this_dev)) 2xz)p_GiCjCKo:GqC;G'n$GWfXz(G)G*G+G,G-G.G/GYlAGLo=G?G@GMo[G-m8GFuGFmBnB!B'GrC{GNo|GrBwnRm
1125 name = name.split(b"\0")[0] 2xz)p_GiCjCKo:GqC;G'n$GWfXz(G)G*G+G,G-G.G/GYlAGLo=G?G@GMo[G-m8GFuGFmBnB!B'GrC{GNo|GrBwnRm
1126 return name.decode() 2xz)p_GiCjCKo:GqC;G'n$GWfXz(G)G*G+G,G-G.G/GYlAGLo=G?G@GMo[G-m8GFuGFmBnB!B'GrC{GNo|GrBwnRm
1128 @property
1129 def properties(self) -> DeviceProperties:
1130 """Return a :obj:`~_device.DeviceProperties` class with information about the device."""
1131 if self._properties is None: 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMrgAhAiAjAkA1h2h3h4h5h6hlA@q[q]q^q;mBrCrIr=m?m@m[m_q`q{q|q}q~qarbrDrmAnAoApAqArATpUp6fXf1e7hKfLf8hse9h!h#h$h%h7fYf2e'hMfNf(hte)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|hue}h~haibici9f0f4ediQfRfeivefigihiiiji!f1f5ekiSfTfliweminioipiqi#f2f6eriUfVfsixetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiErsAtAVpFrcrGrWpXpYpZp0p1pdr2p3p4p5p6per7p8pMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p_m`m{m|m}m~mlrQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9i!i#i$i%i{lwmanxmymzm?BAm|l$f%f'f(f)f*f+f,fVn-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fV l W m X n Y o Z p 0 q Wf1 Xzr jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb%pnrKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkB~ 2mUmb yezexCyC_kXlfEiEsCsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fEfVm'iNl!p#pbnWmor3mcn4mXmdnenVl}l~lem5m(i~zth6m)i7m*i8m+ilBPlaAuh9m,mfnRB!mAzgnBzhnCzinDzprEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrnbA'm(m$pYmZm)mWlYg7eHzunvnIzJzfmgmmrAe'pWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3nAD4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c-E=c.E?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9Bkd/EldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@i8e[i]iDd9e^i_iEdFd`i!e{i|iGd#e}i~iHdBeZg0gxhajbjcjCeyhzhdjejGbg HbIbc h JbKbd LbMb$e%e'e(e)efj*egjhj+eijjj_g4b`g{gab5b|g}gbbFfR GfHfN S IfJfO AhDe1g2gBhkjljmjEeChDhnjoj3gNb4g5g; Ob6g7g= Fe8g9gpjqjrjEhFhsjtjuj,evjwj-exjyj6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eAjBjSd@eCjDjTdKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePjQj]eRjSj~g)bahbhcb*bchdhdbHhMeIhJh5dNeKhLh6dOe'g(gMhTjUjVjPeNhOhWjXjRbi SbTbe j UbVbf WbXb^e_e`e{e|eYj}eZj0j~e1j2jeh+bfhgheb,bhhihfboh7dphqhYb8drhshZbPhQe)g*gQh3j4j5jReRhSh6j7j+g0b,g-g^ 1b.g/g_ Se:g;g8j9j!jThUh#j$j%jaf'j(jbf)j*j-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhf,j-j,dif.j/j-dXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|j}jkf~jakjh^bkhlhgb_bmhnhhbP Q T U `d{dbklfckdk|dmfekfk}d~daebeWhZeXhYhce0eZh0hdegknfhkikeeofjkkkfelkpfmknkgeqfokpkheqkrfrkskiesftkukjevktfwkxkkeufykzkleAkvfBkCkmewfDkEkneoeFkxfGkHkpeyfIkJkqere7n8nagRD9n!n#nbgtCcgdguCegvCfgggwCSDhgigjgkglg$nib%nOlmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWg
1132 self._properties = DeviceProperties._init(self._device_id) 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMrgAhAiAjAkA1h2h3h4h5h6hlA@q[q]q^q;mBrCr=m?m@m[m_q`q{q|q}q~qarbrDrmAnAoApAqArATpUp6fXf1e7hKfLf8hse9h!h#h$h%h7fYf2e'hMfNf(hte)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|hue}h~haibici9f0f4ediQfRfeivefigihiiiji!f1f5ekiSfTfliweminioipiqi#f2f6eriUfVfsixetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiErsAtAVpFrcrGrWpXpYpZp0p1pdr2p3p4p5p6per7p8pMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p_m`m{m|m}m~mlrQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i{lwmanxmymzmAm|l$f%f'f(f)f*f+f,fVn-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBbalblcldlelfl[kgl]k^kHrhl,kil~ 2mUmb yezexCyC_k`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fEfVm'iNl!p#pbnWm3mcn4mXmdnenVl}l~lem5m(ith6m)i7m*i8m+iuh9mfn!mAzgnBzhnCzinDzEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrn'm(m$pYmZm)mWlYg7eHzIzfmgmmrAeWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@i8e[i]iDd9e^i_iEdFd`i!e{i|iGd#e}i~iHdBeZg0gxhajbjcjCeyhzhdjejGbg HbIbc h JbKbd LbMb$e%e'e(e)efj*egjhj+eijjj_g4b`g{gab5b|g}gbbFfR GfHfN S IfJfO AhDe1g2gBhkjljmjEeChDhnjoj3gNb4g5g; Ob6g7g= Fe8g9gpjqjrjEhFhsjtjuj,evjwj-exjyj6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eAjBjSd@eCjDjTdKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePjQj]eRjSj~g)bahbhcb*bchdhdbHhMeIhJh5dNeKhLh6dOe'g(gMhTjUjVjPeNhOhWjXjRbi SbTbe j UbVbf WbXb^e_e`e{e|eYj}eZj0j~e1j2jeh+bfhgheb,bhhihfboh7dphqhYb8drhshZbPhQe)g*gQh3j4j5jReRhSh6j7j+g0b,g-g^ 1b.g/g_ Se:g;g8j9j!jThUh#j$j%jaf'j(jbf)j*j-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhf,j-j,dif.j/j-dXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|j}jkf~jakjh^bkhlhgb_bmhnhhbP Q T U `d{dbklfckdk|dmfekfk}d~daebeWhZeXhYhce0eZh0hdegknfhkikeeofjkkkfelkpfmknkgeqfokpkheqkrfrkskiesftkukjevktfwkxkkeufykzkleAkvfBkCkmewfDkEkneoeFkxfGkHkpeyfIkJkqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nOlmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWg
1134 return self._properties 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMrgAhAiAjAkA1h2h3h4h5h6hlA@q[q]q^q;mBrCrIr=m?m@m[m_q`q{q|q}q~qarbrDrmAnAoApAqArATpUp6fXf1e7hKfLf8hse9h!h#h$h%h7fYf2e'hMfNf(hte)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|hue}h~haibici9f0f4ediQfRfeivefigihiiiji!f1f5ekiSfTfliweminioipiqi#f2f6eriUfVfsixetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiErsAtAVpFrcrGrWpXpYpZp0p1pdr2p3p4p5p6per7p8pMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p_m`m{m|m}m~mlrQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9i!i#i$i%i{lwmanxmymzm?BAm|l$f%f'f(f)f*f+f,fVn-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fV l W m X n Y o Z p 0 q Wf1 Xzr jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb%pnrKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkB~ 2mUmb yezexCyC_kXlfEiEsCsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fEfVm'iNl!p#pbnWmor3mcn4mXmdnenVl}l~lem5m(i~zth6m)i7m*i8m+ilBPlaAuh9m,mfnRB!mAzgnBzhnCzinDzprEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrnbA'm(m$pYmZm)mWlYg7eHzunvnIzJzfmgmmrAe'pWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3nAD4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c-E=c.E?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9Bkd/EldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@i8e[i]iDd9e^i_iEdFd`i!e{i|iGd#e}i~iHdBeZg0gxhajbjcjCeyhzhdjejGbg HbIbc h JbKbd LbMb$e%e'e(e)efj*egjhj+eijjj_g4b`g{gab5b|g}gbbFfR GfHfN S IfJfO AhDe1g2gBhkjljmjEeChDhnjoj3gNb4g5g; Ob6g7g= Fe8g9gpjqjrjEhFhsjtjuj,evjwj-exjyj6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eAjBjSd@eCjDjTdKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePjQj]eRjSj~g)bahbhcb*bchdhdbHhMeIhJh5dNeKhLh6dOe'g(gMhTjUjVjPeNhOhWjXjRbi SbTbe j UbVbf WbXb^e_e`e{e|eYj}eZj0j~e1j2jeh+bfhgheb,bhhihfboh7dphqhYb8drhshZbPhQe)g*gQh3j4j5jReRhSh6j7j+g0b,g-g^ 1b.g/g_ Se:g;g8j9j!jThUh#j$j%jaf'j(jbf)j*j-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhf,j-j,dif.j/j-dXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|j}jkf~jakjh^bkhlhgb_bmhnhhbP Q T U `d{dbklfckdk|dmfekfk}d~daebeWhZeXhYhce0eZh0hdegknfhkikeeofjkkkfelkpfmknkgeqfokpkheqkrfrkskiesftkukjevktfwkxkkeufykzkleAkvfBkCkmewfDkEkneoeFkxfGkHkpeyfIkJkqere7n8nagRD9n!n#nbgtCcgdguCegvCfgggwCSDhgigjgkglg$nib%nOlmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWg
1136 @property
1137 def resources(self) -> DeviceResources:
1138 """Return the hardware resource query namespace for this device."""
1139 if self._resources is None: 2-pKkLkb yezeMkNkOkPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq
1140 self._resources = DeviceResources._init(self._device_id) 2-pKkLkb yezeMkNkOkPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq
1141 return self._resources 2-pKkLkb yezeMkNkOkPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq
1143 @property
1144 def compute_capability(self) -> ComputeCapability:
1145 """Return a named tuple with 2 fields: major and minor."""
1146 cdef DeviceProperties prop = self.properties 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l;mBrCrIr=m?m@m[mDrTpUp1ese2ete3eue4eve5ewe6exeErVpFrGrWpXpYpZp0p1p2p3p4p5p6pTlUlIoJodm]m^m9p_m`m{m|m}m~mhm*mimjmkm+mlmmmBmCmDm{lwmanxmymzm?BAm|lWfXz%pnr~ 2mUmb yezexCyC_kXlfEiEsCsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3nAD4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c-E=c.E?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkd/EldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCd8eDd9eEdFd!eGd#eHdBeCeg c h d LbMb$e%e'e(e)e*e+e4bab5bbbR N S O DeEeNb; Ob= Fe,e-e6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=e?eSd@eTdKeLe#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4d[e]e)bcb*bdbMe5dNe6dOePei e j f WbXb^e_e`e{e|e}e~e+beb,bfb7dYb8dZbQeRe0b^ 1b_ Seafbf-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgfhf,dif-dXeYe=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_djfkf^bgb_bhb`d{dlf|dmf}d~daebeZece0edenfeeoffepfgeqfherfiesfjetfkeuflevfmewfneoexfpeyfqere7n8nagRD9n!n#nbgtCcgdguCegvCfgggwCSDhgigjgkglg$nib%nzfAfBfCf
1147 cached = prop._cache.get("compute_capability") 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l;mBrCrIr=m?m@m[mDrTpUp1ese2ete3eue4eve5ewe6exeErVpFrGrWpXpYpZp0p1p2p3p4p5p6pTlUlIoJodm]m^m9p_m`m{m|m}m~mhm*mimjmkm+mlmmmBmCmDm{lwmanxmymzm?BAm|lWfXz%pnr~ 2mUmb yezexCyC_kXlfEiEsCsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3nAD4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c-E=c.E?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkd/EldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCd8eDd9eEdFd!eGd#eHdBeCeg c h d LbMb$e%e'e(e)e*e+e4bab5bbbR N S O DeEeNb; Ob= Fe,e-e6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=e?eSd@eTdKeLe#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4d[e]e)bcb*bdbMe5dNe6dOePei e j f WbXb^e_e`e{e|e}e~e+beb,bfb7dYb8dZbQeRe0b^ 1b_ Seafbf-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgfhf,dif-dXeYe=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_djfkf^bgb_bhb`d{dlf|dmf}d~daebeZece0edenfeeoffepfgeqfherfiesfjetfkeuflevfmewfneoexfpeyfqere7n8nagRD9n!n#nbgtCcgdguCegvCfgggwCSDhgigjgkglg$nib%nzfAfBfCf
1148 if cached is not None: 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l;mBrCrIr=m?m@m[mDrTpUp1ese2ete3eue4eve5ewe6exeErVpFrGrWpXpYpZp0p1p2p3p4p5p6pTlUlIoJodm]m^m9p_m`m{m|m}m~mhm*mimjmkm+mlmmmBmCmDm{lwmanxmymzm?BAm|lWfXz%pnr~ 2mUmb yezexCyC_kXlfEiEsCsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3nAD4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c-E=c.E?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkd/EldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCd8eDd9eEdFd!eGd#eHdBeCeg c h d LbMb$e%e'e(e)e*e+e4bab5bbbR N S O DeEeNb; Ob= Fe,e-e6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=e?eSd@eTdKeLe#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4d[e]e)bcb*bdbMe5dNe6dOePei e j f WbXb^e_e`e{e|e}e~e+beb,bfb7dYb8dZbQeRe0b^ 1b_ Seafbf-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgfhf,dif-dXeYe=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_djfkf^bgb_bhb`d{dlf|dmf}d~daebeZece0edenfeeoffepfgeqfherfiesfjetfkeuflevfmewfneoexfpeyfqere7n8nagRD9n!n#nbgtCcgdguCegvCfgggwCSDhgigjgkglg$nib%nzfAfBfCf
1149 return cached 2a hm*mimjmkm+mlmmmBmCmDm?B%pUmb yezeXlfEiEsCsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3nAD4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c-E=c.E?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkd/EldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdc d abbbN O ; = 6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGeSdTd#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dcbdbMe5dNe6de f ebfbYbZb^ _ -b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe,d-d=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_dgbhb`d{d|d}d~daebeZece0edeeefegeheiejekelemeneoepeqere7n8nagRD9n!n#nbgtCcgdguCegvCfgggwCSDhgigjgkglg$nib%n
1150 cc = ComputeCapability(prop.compute_capability_major, prop.compute_capability_minor) 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l;mBrCrIr=m?m@m[mDrTpUp1ese2ete3eue4eve5ewe6exeErVpFrGrWpXpYpZp0p1p2p3p4p5p6pTlUlIoJodm]m^m9p_m`m{m|m}m~mhm*mimjmkm+mlmmmBmCmDm{lwmanxmymzmAm|lWfXz%pnr~ 2mUmb yezexCyC_k`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCd8eDd9eEdFd!eGd#eHdBeCeg c h d LbMb$e%e'e(e)e*e+e4bab5bbbR N S O DeEeNb; Ob= Fe,e-e6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=e?eSd@eTdKeLe#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4d[e]e)bcb*bdbMe5dNe6dOePei e j f WbXb^e_e`e{e|e}e~e+beb,bfb7dYb8dZbQeRe0b^ 1b_ Seafbf-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgfhf,dif-dXeYe=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_djfkf^bgb_bhb`d{dlf|dmf}d~daebeZece0edenfeeoffepfgeqfherfiesfjetfkeuflevfmewfneoexfpeyfqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nzfAfBfCf
1151 return prop._cache.setdefault("compute_capability", cc) 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l;mBrCrIr=m?m@m[mDrTpUp1ese2ete3eue4eve5ewe6exeErVpFrGrWpXpYpZp0p1p2p3p4p5p6pTlUlIoJodm]m^m9p_m`m{m|m}m~mhm*mimjmkm+mlmmmBmCmDm{lwmanxmymzmAm|lWfXz%pnr~ 2mUmb yezexCyC_k`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCd8eDd9eEdFd!eGd#eHdBeCeg c h d LbMb$e%e'e(e)e*e+e4bab5bbbR N S O DeEeNb; Ob= Fe,e-e6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=e?eSd@eTdKeLe#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4d[e]e)bcb*bdbMe5dNe6dOePei e j f WbXb^e_e`e{e|e}e~e+beb,bfb7dYb8dZbQeRe0b^ 1b_ Seafbf-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgfhf,dif-dXeYe=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_djfkf^bgb_bhb`d{dlf|dmf}d~daebeZece0edenfeeoffepfgeqfherfiesfjetfkeuflevfmewfneoexfpeyfqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nzfAfBfCf
1153 @property
1154 def arch(self) -> str:
1155 """Return compute capability as a string (e.g., '75' for CC 7.5)."""
1156 return f"{self.compute_capability.major}{self.compute_capability.minor}" 2a hm*mimjmkm+mlmmmBmCmDm%pUmb yezesCzDacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3nAD4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdc d abbbN O ; = 6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdSdTd#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dcbdb5d6de f ebfbYbZb^ _ -b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+d,d-d=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_dgbhb`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqere7n8nagRD9n!n#nbgtCcgdguCegvCfgggwCSDhgigjgkglg$nib%n
1158 @property
1159 def context(self) -> Context:
1160 """Return the :obj:`~_context.Context` associated with this device.
1162 Note
1163 ----
1164 Device must be initialized.
1166 """
1167 self._check_context_initialized() 2tqxq_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqZlznEoRqeh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qFoInHo#q%q(q*q,q.q:q=q
1168 return self._context 2tqxq_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqZlznEoRqeh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qFoInHo#q%q(q*q,q.q:q=q
1170 @property
1171 def memory_resource(self) -> MemoryResource:
1172 """Return :obj:`~_memory.MemoryResource` associated with this device."""
1173 cdef int attr, device_id
1174 if self._memory_resource is None: 2EmFmlC)n1myzzz^g-k.kjlklllGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlul`kXg;k{kvlRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlEl|k}k@k~kFlGlHlIlJlKlLlMlgyKz'B(B)B*B+B,B-B.B/B:B;BdAeAfA{HSk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCPCQCbC
1175 # If the device is in TCC mode, or does not support memory pools for some other reason,
1176 # use the SynchronousMemoryResource which does not use memory pools.
1177 device_id = self._device_id 2EmFmlC)n1myzzz^g-k.kjlklllGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlul`kXg;k{kvlRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlEl|k}k@k~kFlGlHlIlJlKlLlMlgyKz'B(B)B*B+B,B-B.B/B:B;BdAeAfASkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+kPCQCbC
1178 with nogil: 2EmFmlC)n1myzzz^g-k.kjlklllGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlul`kXg;k{kvlRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlEl|k}k@k~kFlGlHlIlJlKlLlMlgyKz'B(B)B*B+B,B-B.B/B:B;BdAeAfASkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+kPCQCbC
1179 HANDLE_RETURN( 2EmFmlC)n1myzzz^g-k.kjlklllGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlul`kXg;k{kvlRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlEl|k}k@k~kFlGlHlIlJlKlLlMlgyKz'B(B)B*B+B,B-B.B/B:B;BdAeAfASkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+kPCQCbC
1180 cydriver.cuDeviceGetAttribute( 2EmFmlC)n1myzzz^g-k.kjlklllGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlul`kXg;k{kvlRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlEl|k}k@k~kFlGlHlIlJlKlLlMlgyKz'B(B)B*B+B,B-B.B/B:B;BdAeAfASkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+kPCQCbC
1181 &attr, cydriver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED, device_id
1182 )
1183 )
1184 if attr == 1: 2EmFmlC)n1myzzz^g-k.kjlklllGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlul`kXg;k{kvlRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlEl|k}k@k~kFlGlHlIlJlKlLlMlgyKz'B(B)B*B+B,B-B.B/B:B;BdAeAfASkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+kPCQCbC
1185 from cuda.core._memory import DeviceMemoryResource 2EmFmlC)n1myzzz^g-k.kjlklllGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlul`kXg;k{kvlRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlEl|k}k@k~kFlGlHlIlJlKlLlMlgyKz'B(B)B*B+B,B-B.B/B:B;BdAeAfASkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+kPCQCbC
1186 self._memory_resource = DeviceMemoryResource(self._device_id) 2EmFmlC)n1myzzz^g-k.kjlklllGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlul`kXg;k{kvlRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlEl|k}k@k~kFlGlHlIlJlKlLlMlgyKz'B(B)B*B+B,B-B.B/B:B;BdAeAfASkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+kPCQCbC
1187 else:
1188 from cuda.core._memory._legacy import _SynchronousMemoryResource
1189 self._memory_resource = _SynchronousMemoryResource(self._device_id)
1191 return self._memory_resource 2EmFmlC)n1myzzz^g-k.kjlklllGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlul`kXg;k{kvlRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlEl|k}k@k~kFlGlHlIlJlKlLlMlgyKz'B(B)B*B+B,B-B.B/B:B;BdAeAfA{HSk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCPCQCbC
1193 @memory_resource.setter
1194 def memory_resource(self, mr: MemoryResource) -> None:
1195 from cuda.core._memory import MemoryResource
1196 assert_type(mr, MemoryResource)
1197 self._memory_resource = mr
1199 @property
1200 def default_stream(self) -> Stream:
1201 """Return default CUDA :obj:`~_stream.Stream` associated with this device.
1203 The type of default stream returned depends on if the environment
1204 variable CUDA_PYTHON_CUDA_PER_THREAD_DEFAULT_STREAM is set.
1206 If set, returns a per-thread default stream. Otherwise returns
1207 the legacy stream.
1209 """
1210 return default_stream() 2drerMnTlUlfrgrhrNnOnPnirQnRnSnTnjrkrUnkHlHJJ3fmH4f5fnHoH[H]H^H_H`HiCjCKo:GqC;G'n$GKJLJYlAGMJDGNJEGOJFGPJGGQJHGRJIGSJTJUJVJWJXJYJZJ0J1J2J3JLo=G?G@GMo[G-m8GFuGFmBnB!B'GrC{GNo|GJrKrtDuDvDwDEmFmsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQByzzzEfVmNlWm3mVl}l~lem~zthaAuh!m#m$mvh%mwhbA'm(meHYmZm)mWlYg7e^g-k.kjlklllGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlul`kXg;k{kvlRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlEl|k}k@k~kP Q FlGlHlIlJlKlLlMlNGKz'B(B)B*B+B,B-B.B/B:B;BdAeAfA{HSk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCPCQCbC
1212 def __int__(self) -> int:
1213 """Return device_id."""
1214 return self._device_id 2bHcHdHBGEmFm
1216 def __repr__(self) -> str:
1217 return f"<Device {self._device_id} ({self.name})>" 2xz)p_GiCjCKo:GqC;G'n$GWfXz(G)G*G+G,G-G.G/GYlAGLo=G?G@GMo[G-m8GFuGFmBnB!B'GrC{GNo|GrBRm
1219 def __hash__(self) -> int:
1220 return hash(self.uuid) 2xzpCSCV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBbxDACJGyD(ith)i*i+iPluh,m,ivh-i.i/i:iwh;i=iYgunvnCbDbEbFbHmFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmP Q T U SmTmbmcm
1222 def __eq__(self, other: object) -> bool:
1223 if not isinstance(other, Device): 2xzpCV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBbQGACRGUG(ith)i*i+iPluh,m,ivh-i.i/i:iwh;i=iYgunvnCbDbEbFbuqoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrP Q T U bmcmNF
1224 return NotImplemented 2xzpCUGuqoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrNF
1225 return self._device_id == other._device_id 2xzV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBbQGACRG(ith)i*i+iPluh,m,ivh-i.i/i:iwh;i=iYgunvnCbDbEbFbuqP Q T U bmcm
1227 def __reduce__(self) -> tuple[object, ...]:
1228 return Device, (self.device_id,) 2)p_GiCjCKo:GqC;G'n$GWfYlDGEGFGGGHGIGLo=G?G@GMo[G-m8GFumBnB!BrCNoJrKrtDuDvDwDzrAr
1230 def set_current(self, ctx: Context | None = None) -> Context | None:
1231 """Set device to be used for GPU executions.
1233 Initializes CUDA and sets the calling thread to a valid CUDA
1234 context. By default the primary context is used, but optional `ctx`
1235 parameter can be used to explicitly supply a :obj:`~_context.Context` object.
1237 Providing a `ctx` causes the previous set context to be popped and returned.
1239 Parameters
1240 ----------
1241 ctx : :obj:`~_context.Context`, optional
1242 Optional context to push onto this device's current thread stack.
1244 Returns
1245 -------
1246 :obj:`~_context.Context`, optional
1247 Popped context.
1249 Examples
1250 --------
1251 Acts as an entry point of this object. Users always start a code by
1252 calling this method, e.g.
1254 >>> from cuda.core import Device
1255 >>> dev0 = Device(0)
1256 >>> dev0.set_current()
1257 >>> # ... do work on device 0 ...
1259 """
1260 cdef ContextHandle h_context
1261 cdef cydriver.CUcontext prev_ctx, curr_ctx
1262 cdef Context prev_owned = None 2NrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFs)DGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuou/DpuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAu:D;DBuCu$f%fDu'f(f)f*f+f,fVnEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fhC=DV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtbYl2 AGs 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I *p+p,pFu- GFJ ubvb. K / L : M wbxbybzbAbBbGuHuIuJuKuLuMuEmFm?D@DNu[D]D^D_DOo`D{DrBkC|D}D0m~ amaEGmOucEPuQuRuSuTuUuVuWudEeEXuYuZu0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLkb yezeOGMkNkOk1uPkPGQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2u_k#BnmXlgEhEjEkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVm'iNlrEfq!p#p4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8u5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uOE!m$uPEgnQEREhn%uSEin'uTEprUE(u#m)uVEjnWEXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;u$pnDDooDmCYmZm)m=uWl$EYg7e?u%E'E@u)E+EJzfmgm[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc{u|u}u~uavbvcv,EdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdpDCb]GDbqDEb^G?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|w:E}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIx]EJxKxLxMxNxOxPxQxRxSxTx^EUx_EVxWxXx`E{EYxib|EZx0x1x2xsD3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/xOC:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyeFNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsF-ytF.y/y:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez
1264 if ctx is not None: 2NrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFs)DGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuou/DpuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAu:D;DBuCu$f%fDu'f(f)f*f+f,fVnEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fhC=DV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtbYl2 AGs 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I *p+p,pFu- GFJ ubvb. K / L : M wbxbybzbAbBbGuHuIuJuKuLuMuEmFm?D@DNu[D]D^D_DOo`D{DrBkC|D}D0m~ amaEGmOucEPuQuRuSuTuUuVuWudEeEXuYuZu0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLkb yezeOGMkNkOk1uPkPGQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2u_k#BnmXlgEhEjEkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVm'iNlrEfq!p#p4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8u5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uOE!m$uPEgnQEREhn%uSEin'uTEprUE(u#m)uVEjnWEXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;u$pnDDooDmCYmZm)m=uWl$EYg7e?u%E'E@u)E+EJzfmgm[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc{u|u}u~uavbvcv,EdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdpDCb]GDbqDEb^G?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|w:E}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIx]EJxKxLxMxNxOxPxQxRxSxTx^EUx_EVxWxXx`E{EYxib|EZx0x1x2xsD3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/xOC:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyeFNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsF-ytF.y/y:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez
1265 # TODO: revisit once Context is cythonized
1266 assert_type(ctx, Context) 2OGPG
1267 if ctx._device_id != self._device_id: 2OGPG
1268 raise RuntimeError(
1269 "the provided context was created on the device with"
1270 f" id={ctx._device_id}, which is different from the target id={self._device_id}"
1271 )
1272 if self._has_inited and self._context is not None: 2OGPG
1273 prev_owned = self._context 2OGPG
1274 # prev_ctx is the previous context
1275 curr_ctx = as_cu(ctx._h_context) 2OGPG
1276 prev_ctx = NULL 2OGPG
1277 with nogil: 2OGPG
1278 HANDLE_RETURN(cydriver.cuCtxPopCurrent(&prev_ctx)) 2OGPG
1279 HANDLE_RETURN(cydriver.cuCtxPushCurrent(curr_ctx)) 2OGPG
1280 self._has_inited = True 2OGPG
1281 self._context = ctx # Store owning context reference 2OGPG
1282 if prev_ctx != NULL: 2OGPG
1283 if prev_owned is not None and as_cu(prev_owned._h_context) == prev_ctx: 2OGPG
1284 return prev_owned 2OGPG
1285 return Context._from_handle(Context, create_context_handle_ref(prev_ctx), self._device_id)
1286 else:
1287 # use primary ctx
1288 h_context = get_primary_context(self._device_id) 2NrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFs)DGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuou/DpuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAu:D;DBuCu$f%fDu'f(f)f*f+f,fVnEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fhC=DV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtbYl2 AGs 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I *p+p,pFu- GFJ ubvb. K / L : M wbxbybzbAbBbGuHuIuJuKuLuMuEmFm?D@DNu[D]D^D_DOo`D{DrBkC|D}D0m~ amaEGmOucEPuQuRuSuTuUuVuWudEeEXuYuZu0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2u_k#BnmXlgEhEjEkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVm'iNlrEfq!p#p4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8u5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uOE!m$uPEgnQEREhn%uSEin'uTEprUE(u#m)uVEjnWEXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;u$pnDDooDmCYmZm)m=uWl$EYg7e?u%E'E@u)E+EJzfmgm[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc{u|u}u~uavbvcv,EdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdpDCb]GDbqDEb^G?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|w:E}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIx]EJxKxLxMxNxOxPxQxRxSxTx^EUx_EVxWxXx`E{EYxib|EZx0x1x2xsD3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/xOC:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyeFNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsF-ytF.y/y:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez
1289 if h_context.get() == NULL: 2NrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFs)DGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuou/DpuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAu:D;DBuCu$f%fDu'f(f)f*f+f,fVnEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fhC=DV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtbYl2 AGs 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I *p+p,pFu- GFJ ubvb. K / L : M wbxbybzbAbBbGuHuIuJuKuLuMuEmFm?D@DNu[D]D^D_DOo`D{DrBkC|D}D0m~ amaEGmOucEPuQuRuSuTuUuVuWudEeEXuYuZu0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2u_k#BnmXlgEhEjEkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVm'iNlrEfq!p#p4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8u5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uOE!m$uPEgnQEREhn%uSEin'uTEprUE(u#m)uVEjnWEXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;u$pnDDooDmCYmZm)m=uWl$EYg7e?u%E'E@u)E+EJzfmgm[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc{u|u}u~uavbvcv,EdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdpDCb]GDbqDEb^G?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|w:E}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIx]EJxKxLxMxNxOxPxQxRxSxTx^EUx_EVxWxXx`E{EYxib|EZx0x1x2xsD3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/xOC:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyeFNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsF-ytF.y/y:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez
1290 raise ValueError("Cannot set NULL context as current")
1291 with nogil: 2NrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFs)DGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuou/DpuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAu:D;DBuCu$f%fDu'f(f)f*f+f,fVnEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fhC=DV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtbYl2 AGs 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I *p+p,pFu- GFJ ubvb. K / L : M wbxbybzbAbBbGuHuIuJuKuLuMuEmFm?D@DNu[D]D^D_DOo`D{DrBkC|D}D0m~ amaEGmOucEPuQuRuSuTuUuVuWudEeEXuYuZu0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2u_k#BnmXlgEhEjEkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVm'iNlrEfq!p#p4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8u5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uOE!m$uPEgnQEREhn%uSEin'uTEprUE(u#m)uVEjnWEXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;u$pnDDooDmCYmZm)m=uWl$EYg7e?u%E'E@u)E+EJzfmgm[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc{u|u}u~uavbvcv,EdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdpDCb]GDbqDEb^G?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|w:E}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIx]EJxKxLxMxNxOxPxQxRxSxTx^EUx_EVxWxXx`E{EYxib|EZx0x1x2xsD3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/xOC:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyeFNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsF-ytF.y/y:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez
1292 HANDLE_RETURN(cydriver.cuCtxSetCurrent(as_cu(h_context))) 2NrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFs)DGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuou/DpuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAu:D;DBuCu$f%fDu'f(f)f*f+f,fVnEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fhC=DV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtbYl2 AGs 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I *p+p,pFu- GFJ ubvb. K / L : M wbxbybzbAbBbGuHuIuJuKuLuMuEmFm?D@DNu[D]D^D_DOo`D{DrBkC|D}D0m~ amaEGmOucEPuQuRuSuTuUuVuWudEeEXuYuZu0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2u_k#BnmXlgEhEjEkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVm'iNlrEfq!p#p4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8u5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uOE!m$uPEgnQEREhn%uSEin'uTEprUE(u#m)uVEjnWEXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;u$pnDDooDmCYmZm)m=uWl$EYg7e?u%E'E@u)E+EJzfmgm[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc{u|u}u~uavbvcv,EdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdpDCb]GDbqDEb^G?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|w:E}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIx]EJxKxLxMxNxOxPxQxRxSxTx^EUx_EVxWxXx`E{EYxib|EZx0x1x2xsD3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/xOC:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyeFNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsF-ytF.y/y:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez
1293 self._has_inited = True 2NrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFs)DGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuou/DpuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAu:D;DBuCu$f%fDu'f(f)f*f+f,fVnEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fhC=DV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtbYl2 AGs 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I *p+p,pFu- GFJ ubvb. K / L : M wbxbybzbAbBbGuHuIuJuKuLuMuEmFm?D@DNu[D]D^D_DOo`D{DrBkC|D}D0m~ amaEGmOucEPuQuRuSuTuUuVuWudEeEXuYuZu0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2u_k#BnmXlgEhEjEkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVm'iNlrEfq!p#p4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8u5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uOE!m$uPEgnQEREhn%uSEin'uTEprUE(u#m)uVEjnWEXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;u$pnDDooDmCYmZm)m=uWl$EYg7e?u%E'E@u)E+EJzfmgm[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc{u|u}u~uavbvcv,EdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdpDCb]GDbqDEb^G?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|w:E}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIx]EJxKxLxMxNxOxPxQxRxSxTx^EUx_EVxWxXx`E{EYxib|EZx0x1x2xsD3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/xOC:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyeFNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsF-ytF.y/y:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez
1294 self._context = Context._from_handle(Context, h_context, self._device_id) # Store owning context 2NrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFs)DGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuou/DpuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAu:D;DBuCu$f%fDu'f(f)f*f+f,fVnEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fhC=DV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtbYl2 AGs 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I *p+p,pFu- GFJ ubvb. K / L : M wbxbybzbAbBbGuHuIuJuKuLuMuEmFm?D@DNu[D]D^D_DOo`D{DrBkC|D}D0m~ amaEGmOucEPuQuRuSuTuUuVuWudEeEXuYuZu0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2u_k#BnmXlgEhEjEkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVm'iNlrEfq!p#p4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8u5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uOE!m$uPEgnQEREhn%uSEin'uTEprUE(u#m)uVEjnWEXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;u$pnDDooDmCYmZm)m=uWl$EYg7e?u%E'E@u)E+EJzfmgm[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc{u|u}u~uavbvcv,EdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdpDCb]GDbqDEb^G?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|w:E}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIx]EJxKxLxMxNxOxPxQxRxSxTx^EUx_EVxWxXx`E{EYxib|EZx0x1x2xsD3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/xOC:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyeFNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsF-ytF.y/y:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez
1296 def create_context(self, options: ContextOptions | None = None) -> Context:
1297 """Create a new :obj:`~_context.Context` object.
1299 Note
1300 ----
1301 The newly created context will not be set as current.
1303 Parameters
1304 ----------
1305 options : :obj:`~_context.ContextOptions`, optional
1306 Customizable dataclass for context creation options.
1308 Returns
1309 -------
1310 :obj:`~_context.Context`
1311 Newly created context object.
1313 """
1314 cdef int i
1315 cdef object resources
1316 cdef object res
1317 cdef SMResource sm_res
1318 cdef WorkqueueResource wq_res
1320 if options is None: 29GKkLkb )n1mMkNkOkPkQkRk`G:H
1321 raise ValueError( 2:H
1322 "options with device resources must be provided to create a green context"
1323 )
1325 options = check_or_create_options(ContextOptions, options, "Context options") 29GKkLkb )n1mMkNkOkPkQkRk`G:H
1326 if options.resources is None: 29GKkLkb )n1mMkNkOkPkQkRk`G:H
1327 raise ValueError( 2:H
1328 "ContextOptions.resources must be provided to create a green context"
1329 )
1331 resources = tuple(options.resources) 29GKkLkb )n1mMkNkOkPkQkRk`G
1332 if len(resources) == 0: 29GKkLkb )n1mMkNkOkPkQkRk`G
1333 raise ValueError("ContextOptions.resources must not be empty")
1335 cdef vector[cydriver.CUdevResource] c_resources
1336 c_resources.resize(len(resources)) 29GKkLkb )n1mMkNkOkPkQkRk`G
1338 for i, res in enumerate(resources): 29GKkLkb )n1mMkNkOkPkQkRk`G
1339 if isinstance(res, SMResource): 29GKkLkb )n1mMkNkOkPkQkRk`G
1340 sm_res = <SMResource>res 29GKkLkb )n1mMkNkOkPkQkRk`G
1341 if not sm_res._is_usable: 29GKkLkb )n1mMkNkOkPkQkRk`G
1342 raise ValueError("dry-run SMResource objects cannot be used to create a context") 2`G
1343 c_resources[i] = sm_res._resource 29GKkLkb )n1mMkNkOkPkQkRk
1344 elif isinstance(res, WorkqueueResource): 21m
1345 wq_res = <WorkqueueResource>res 21m
1346 c_resources[i] = wq_res._wq_config_resource 21m
1347 else:
1348 raise TypeError(f"Unsupported context resource type: {type(res)}")
1350 cdef GreenCtxHandle h_green = create_green_ctx_handle( 29GKkLkb )n1mMkNkOkPkQkRk
1351 c_resources.data(),
1352 <unsigned int>(c_resources.size()),
1353 <cydriver.CUdevice>(self._device_id), 29GKkLkb )n1mMkNkOkPkQkRk
1354 <unsigned int>(cydriver.CUgreenCtxCreate_flags.CU_GREEN_CTX_DEFAULT_STREAM),
1355 )
1356 if h_green.get() == NULL: 29GKkLkb )n1mMkNkOkPkQkRk
1357 HANDLE_RETURN(get_last_error())
1358 raise RuntimeError("Failed to create CUDA green context")
1360 return Context._from_green_ctx(Context, h_green, self._device_id) 29GKkLkb )n1mMkNkOkPkQkRk
1362 def create_stream(self, obj: IsStreamType | None = None, options: object = None) -> Stream:
1363 """Create a :obj:`~_stream.Stream` object.
1365 New stream objects can be created in two different ways:
1367 1) Create a new CUDA stream with customizable ``options``.
1368 2) Wrap an existing foreign `obj` supporting the ``__cuda_stream__`` protocol.
1370 Option (2) internally holds a reference to the foreign object
1371 such that the lifetime is managed.
1373 Note
1374 ----
1375 Device must be initialized.
1377 Parameters
1378 ----------
1379 obj : :obj:`~_stream.IsStreamType`, optional
1380 Any object supporting the ``__cuda_stream__`` protocol.
1381 options : :obj:`~_stream.StreamOptions`, optional
1382 Customizable dataclass for stream creation options.
1384 Returns
1385 -------
1386 :obj:`~_stream.Stream`
1387 Newly created stream object.
1389 """
1390 self._check_context_initialized() 24F8D5F6F7F8F9Dompm1l2lRC3lqm!D#D4lrm.msm$D5l/m%D6l:m'Dtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l9F@q[q]q^q;m(D!F#FIr=m?m@m[m_q`q{q|q}q~qarbrcr$F*D%F'F(F)F,D-DMnTlUldm]m^mNnOnPnQnRnSnTnUn*F+F_m`m{m|m}m~mlr}G~GaHgHhHiHhm*mimjmkm+mlmmmBmCmDmbHcHdHHFIFJF,F-F{lwman.Fxmymzm?BAm|lkHlH;H=HmH?H@H/F:FnHoH[H]H^H_H`HhCWfXz(G)G*G+G,G-G.G/GjHlImI-m8GFuGFmBnB!B'GJrKrtDuDvDwD;F=F?F@F[F]F^F0m~ am_F`F{F|F}F~F2maGbGcGdGeGfGgGUmBCCCDCECFCGCHCICJCKCLCMCNC_k#BnmXlsC$B%B5I6IpH7IqH8I9IrHsH!I#I$ItH%IuHvHwHxHyHzHAHBHCH'IDHEHFHGH(IHHIH)I*I+I,IJH-IKH.I/ILHMH:I;I=INH?IOHPHQHRHSHTHUHVHWH@IXHYHZH0H[I1H2H]I^I_I`I3H{I4H|I}I5H6H~IaJbJ7HcJ8H9H!H#H$H%H'H(H)HdJ*H+H,H-HeJ.H/HfJgJNlVlmCWl(E*E^g-k.k^Gvqwqyq0l~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQqSqGojh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qT U $q'q)q+q-q/q;q?qhGLFiGjGkGlGMFmGnGoGpGqGrGsGtGuGvGwGxGNFyGzGgyKz~EaFbFdFbC
1391 return Stream._init(obj=obj, options=options, device_id=self._device_id, ctx=self._context) 24F8D5F6F7F8F9Dompm1l2lRC3lqm!D#D4lrm.msm$D5l/m%D6l:m'Dtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l9F@q[q]q^q;m(D!F#FIr=m?m@m[m_q`q{q|q}q~qarbrcr$F*D%F'F(F)F,D-DMnTlUldm]m^mNnOnPnQnRnSnTnUn*F+F_m`m{m|m}m~mlr}G~GaHgHhHiHhm*mimjmkm+mlmmmBmCmDmbHcHdHHFIFJF,F-F{lwman.Fxmymzm?BAm|lkHlH;H=HmH?H@H/F:FnHoH[H]H^H_H`HhCWfXz(G)G*G+G,G-G.G/GjHlImI-m8GFuGFmBnB!B'GJrKrtDuDvDwD;F=F?F@F[F]F^F0m~ am_F`F{F|F}F~F2maGbGcGdGeGfGgGUmBCCCDCECFCGCHCICJCKCLCMCNC_k#BnmXlsC$B%B5I6IpH7IqH8I9IrHsH!I#I$ItH%IuHvHwHxHyHzHAHBHCH'IDHEHFHGH(IHHIH)I*I+I,IJH-IKH.I/ILHMH:I;I=INH?IOHPHQHRHSHTHUHVHWH@IXHYHZH0H[I1H2H]I^I_I`I3H{I4H|I}I5H6H~IaJbJ7HcJ8H9H!H#H$H%H'H(H)HdJ*H+H,H-HeJ.H/HfJgJNlVlmCWl(E*E^g-k.k^Gvqwqyq0l~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQqSqGojh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qT U $q'q)q+q-q/q;q?qhGLFiGjGkGlGMFmGnGoGpGqGrGsGtGuGvGwGxGNFyGzGgyKz~EaFbFdFbC
1393 def create_event(self, options: EventOptions | None = None) -> Event:
1394 """Create an :obj:`~_event.Event` object without recording it to a :obj:`~_stream.Stream`.
1396 Note
1397 ----
1398 Device must be initialized.
1400 Parameters
1401 ----------
1402 options : :obj:`EventOptions`, optional
1403 Customizable dataclass for event creation options.
1405 Returns
1406 -------
1407 :obj:`~_event.Event`
1408 Newly created event object.
1410 """
1411 self._check_context_initialized() 2(DKfLfMfNfOfPfQfRfSfTfUfVfOF7p+D,D-D8p.DdmjHPFamQFGmbEPoQoRoSoToUoZg0g/k:kLbMbVoWoxnynQlRlSl1g2g3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+o8g9g,o-o? @ PbQb.o/o!g#g$g%g[ ] :o;oAnBnCn=o?o@o'g(g=k?kWbXb[o]oDnEnFnGnHn)g*g+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpop:g;gppqp` { 2b3brpsp=g?g@g[g| } tpupJnKnLnvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSp
1412 cdef Context ctx = self._context 2(DKfLfMfNfOfPfQfRfSfTfUfVfOF7p+D,D-D8p.DdmjHPFamQFGmbEPoQoRoSoToUoZg0g/k:kLbMbVoWoxnynQlRlSl1g2g3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+o8g9g,o-o? @ PbQb.o/o!g#g$g%g[ ] :o;oAnBnCn=o?o@o'g(g=k?kWbXb[o]oDnEnFnGnHn)g*g+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpop:g;gppqp` { 2b3brpsp=g?g@g[g| } tpupJnKnLnvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSp
1413 return cyEvent._init(cyEvent, self._device_id, ctx._h_context, options, True) 2(DKfLfMfNfOfPfQfRfSfTfUfVfOF7p+D,D-D8p.DdmjHPFamQFGmbEPoQoRoSoToUoZg0g/k:kLbMbVoWoxnynQlRlSl1g2g3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+o8g9g,o-o? @ PbQb.o/o!g#g$g%g[ ] :o;oAnBnCn=o?o@o'g(g=k?kWbXb[o]oDnEnFnGnHn)g*g+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpop:g;gppqp` { 2b3brpsp=g?g@g[g| } tpupJnKnLnvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSp
1415 def allocate(self, size: int, *, stream: Stream | GraphBuilder) -> Buffer:
1416 """Allocate device memory from a specified stream.
1418 Allocates device memory of `size` bytes on the specified `stream`
1419 using the memory resource currently associated with this Device.
1421 Note
1422 ----
1423 Device must be initialized.
1425 Parameters
1426 ----------
1427 size : int
1428 Number of bytes to allocate.
1429 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder`
1430 Keyword-only. The stream establishing the stream ordering semantic.
1431 Must be passed explicitly; pass ``self.default_stream`` to use
1432 the default stream.
1434 Returns
1435 -------
1436 :obj:`~_memory.Buffer`
1437 Newly created buffer object.
1439 """
1440 self._check_context_initialized() 2EmFmlC)n1myzzzjlklllGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlul`kXg;k{kvlRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlEl|k}k@k~kFlGlHlIlJlKlLlMl
1441 return self.memory_resource.allocate(size, stream=stream) 2EmFmlC)n1myzzzjlklllGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlul`kXg;k{kvlRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlEl|k}k@k~kFlGlHlIlJlKlLlMl
1443 def sync(self) -> None:
1444 """Synchronize the device.
1446 Note
1447 ----
1448 Device must be initialized.
1450 """
1451 self._check_context_initialized() 2|H}H~HaIbIcIdIeIfIgIhIiIjIkInIoIpIqIrIsItIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQIRISITIUIVIWIXIYImBnBZI0I1I2I3I4IJrKrtDuDvDwDEmFm#Bnm$B%BpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/HNlVl}l~lemeHWlYg7eP Q
1452 handle_return(runtime.cudaDeviceSynchronize()) 2|H}H~HaIbIcIdIeIfIgIhIiIjIkInIoIpIqIrIsItIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQIRISITIUIVIWIXIYImBnBZI0I1I2I3I4IJrKrtDuDvDwDEmFm#Bnm$B%BpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/HNlVl}l~lemeHWlYg7eP Q
1454 def create_graph_builder(self) -> GraphBuilder:
1455 """Create a new :obj:`~graph.GraphBuilder` object.
1457 Returns
1458 -------
1459 :obj:`~graph.GraphBuilder`
1460 Newly created graph builder object.
1462 """
1463 from cuda.core.graph._graph_builder import GraphBuilder 28D9Dompm1l2lRC3lqm!D#D4lrmsm$D5l%D6l'Dtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l*D}G~GaHgHhHiHhmimjmkmlmmmBmCmDmbHcHdHHFIFJF{lwmxmymzm?BAm|lgy
1465 self._check_context_initialized() 28D9Dompm1l2lRC3lqm!D#D4lrmsm$D5l%D6l'Dtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l*D}G~GaHgHhHiHhmimjmkmlmmmBmCmDmbHcHdHHFIFJF{lwmxmymzm?BAm|lgy
1466 return GraphBuilder._init(self.create_stream()) 28D9Dompm1l2lRC3lqm!D#D4lrmsm$D5l%D6l'Dtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l*D}G~GaHgHhHiHhmimjmkmlmmmBmCmDmbHcHdHHFIFJF{lwmxmymzm?BAm|lgy
1468 def create_opaque_array(self, options: OpaqueArrayOptions) -> OpaqueArray:
1469 """Create an :obj:`~cuda.core.texture.OpaqueArray` on the current device.
1471 Allocates an opaque, hardware-laid-out CUDA array for texture/surface
1472 access. The array is created in the current CUDA context, so make this
1473 device current with :meth:`set_current` before calling (mirroring
1474 :meth:`create_stream` / :meth:`create_event`).
1476 Note
1477 ----
1478 Device must be initialized.
1480 Parameters
1481 ----------
1482 options : :obj:`~cuda.core.texture.OpaqueArrayOptions`
1483 Allocation options (shape, format, channels, surface flag).
1485 Returns
1486 -------
1487 :obj:`~cuda.core.texture.OpaqueArray`
1488 Newly created opaque array.
1490 .. versionadded:: 1.1.0
1491 """
1492 from cuda.core.texture._array import _create_opaque_array 2TDUDVDWDXD}ESFTFUFVFWFXFgyYFKz~EaFbFYDZD1D2D4D5D6D7D=B
1494 self._check_context_initialized() 2TDUDVDWDXD}ESFTFUFVFWFXFgyYFKz~EaFbFYDZD1D2D4D5D6D7D=B
1495 return _create_opaque_array(options) 2TDUDVDWDXD}ESFTFUFVFWFXFgyYFKz~EaFbFYDZD1D2D4D5D6D7D=B
1497 def create_mipmapped_array(self, options: MipmappedArrayOptions) -> MipmappedArray:
1498 """Create a :obj:`~cuda.core.texture.MipmappedArray` on the current device.
1500 Allocates a mipmapped CUDA array for texture/surface access across
1501 levels. The array is created in the current CUDA context, so make this
1502 device current with :meth:`set_current` before calling (mirroring
1503 :meth:`create_stream` / :meth:`create_event`).
1505 Note
1506 ----
1507 Device must be initialized.
1509 Parameters
1510 ----------
1511 options : :obj:`~cuda.core.texture.MipmappedArrayOptions`
1512 Allocation options (shape, format, channels, levels, surface flag).
1514 Returns
1515 -------
1516 :obj:`~cuda.core.texture.MipmappedArray`
1517 Newly created mipmapped array.
1519 .. versionadded:: 1.1.0
1520 """
1521 from cuda.core.texture._mipmapped_array import _create_mipmapped_array 2cFZF0F1FdF2F0D3D=B
1523 self._check_context_initialized() 2cFZF0F1FdF2F0D3D=B
1524 return _create_mipmapped_array(options) 2cFZF0F1FdF2F0D3D=B
1526 def create_texture_object(
1527 self, *, resource: ResourceDescriptor, options: TextureObjectOptions | None = None
1528 ) -> TextureObject:
1529 """Create a :obj:`~cuda.core.texture.TextureObject` on the current device.
1531 Binds a resource (an :obj:`~cuda.core.texture.OpaqueArray` /
1532 :obj:`~cuda.core.texture.MipmappedArray` / linear or pitch2d
1533 :obj:`~cuda.core.Buffer`, wrapped in a
1534 :obj:`~cuda.core.texture.ResourceDescriptor`) as a bindless texture for
1535 kernel-side sampled reads. The object is created in the current CUDA
1536 context, so make this device current with :meth:`set_current` before
1537 calling (mirroring :meth:`create_stream` / :meth:`create_event`).
1539 Note
1540 ----
1541 Device must be initialized.
1543 Parameters
1544 ----------
1545 resource : :obj:`~cuda.core.texture.ResourceDescriptor`
1546 The memory backing the texture.
1547 options : :obj:`~cuda.core.texture.TextureObjectOptions`
1548 Sampling state (address/filter/read modes, normalization, etc.).
1550 Returns
1551 -------
1552 :obj:`~cuda.core.texture.TextureObject`
1553 Newly created texture object.
1555 .. versionadded:: 1.1.0
1556 """
1557 from cuda.core.texture._texture import _create_texture_object 2TDUDVDWDXD2DeA3DfA4D5D6D7D3F=B
1559 self._check_context_initialized() 2TDUDVDWDXD2DeA3DfA4D5D6D7D3F=B
1560 return _create_texture_object(resource, options) 2TDUDVDWDXD2DeA3DfA4D5D6D7D3F=B
1562 def create_surface_object(self, *, resource: ResourceDescriptor) -> SurfaceObject:
1563 """Create a :obj:`~cuda.core.texture.SurfaceObject` on the current device.
1565 Binds an :obj:`~cuda.core.texture.OpaqueArray` (via a
1566 :obj:`~cuda.core.texture.ResourceDescriptor`) as a bindless surface for
1567 kernel-side typed load/store. The backing array must have been created
1568 with ``is_surface_load_store=True``. The object is created in the
1569 current CUDA context, so make this device current with
1570 :meth:`set_current` before calling (mirroring :meth:`create_stream` /
1571 :meth:`create_event`).
1573 Note
1574 ----
1575 Device must be initialized.
1577 Parameters
1578 ----------
1579 resource : :obj:`~cuda.core.texture.ResourceDescriptor`
1580 Must wrap an :obj:`~cuda.core.texture.OpaqueArray` allocated with
1581 ``is_surface_load_store=True``.
1583 Returns
1584 -------
1585 :obj:`~cuda.core.texture.SurfaceObject`
1586 Newly created surface object.
1588 .. versionadded:: 1.1.0
1589 """
1590 from cuda.core.texture._surface import _create_surface_object 2YDZDdA0D1D=B
1592 self._check_context_initialized() 2YDZDdA0D1D=B
1593 return _create_surface_object(resource) 2YDZDdA0D1D=B
1596cdef inline int Device_ensure_cuda_initialized() except? -1:
1597 """Initialize CUDA driver and check version compatibility (once per process)."""
1598 global _is_cuInit
1599 if _is_cuInit is False: 2a ]g4FNr8DOr5FPr6FQr7FRr8FSr9DTromUrpmVr1lWr2lXrRCYr3lZrqm0r!D1r#D2r4l3rrm4r.m5rsm6r$D7r5l8r/m9r%D!r6l#r:m$r'D%rtm'rum(rvm)r7l*r8l+r9l,r!l-r#l.r$l/r%l:r'l;r(l=r)l?r*l@r+l[r,l]r-l^r.l_r/l`r:l{r;l|r=l}r?l~r@las[lbs]lcs^lds_les`lfsLrgsMrhsgAisjs(phAkslsiAmsjAnskAos1h2h3hps4h5h6hlAqsrsss9Ftsusvs@qws[qxs]qys^qzs;mAs(DBs!FCs#FDsBrEsCrFsIr)D=mGs?mHs@mIs[mJs_qKs`qLs{qMs|qNs}qOs~qPsarQsbrRsDrSsTsUsVsmAWsnAXsoAYspAZsqA0srA1sTp2sUp3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntErotsApttAqtVprtFrstttcrutGrvtWpwtXpxtYpytZpzt0pAt1pBtdrCt$FDtEtFtGtHt2pIt3pJt4pKt5pLt*DMt%FNt'FOt(FPt)FQt6pRterStTtUtVtWtXtYtZt0t1t2t3tOF4t7p5t+D6t,D7t-D8t8p9t.D!tMn#tTl$tUl%tIo'tJo(tdm)t]m*t^m+tfr,tgr-thr.tNn/tOn:tPn;tir=tQn?tRn@tSn[tTn]tjr^tkr_tUn`t{t9p|t*F}t~tau+Fbucudueu_mfu`mgu{mhu|miu}mjukulumunu~mou/DpulrquruQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9iHF!iIF#iJF$iBGsu%i,Ftu-Fuu{lvuwmwuanxu.FyuxmzuymAuzm:D?B;DAmBu|lCu$f%fCGDu!G'fxz(fpC)fSC*f+f,fVnEu-f3fDf.f4f/F/f:F5f:f#G;f=f?f@f[f]f^f_f`fhC=D)pV l iCW jCm KoX n qCY o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 DG5 6 EG7 8 FG9 ! GG# $ HG% ' IG( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,pFu- J mBubnBvb!B. K rC/ L No: M JrwbKrxbtDybuDzbvDAbwDBb(n;FGu=FHu?FIu@FJu[FKu]FLuMu%pnrEmFmPF?D^F@DxDNuQG[DAC]DRG^DJG_DOoSG`DTG{DKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkBrBkCyD|DUG}Dwn~DcA@B0m~ amQFaEGmbEOu_FcE`FPu{FQu|FRu}FSu~FTu2mUuaGVubGWucGdEdGeEeGXufGYugGZuUm0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLklCb )nye1mzeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdq%Geq2u_k#BnmXlfEgEhEiEjEsCkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVmVG'iNlrEfqWG!pXG#pKG4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8uWz5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uRBOE!m$uAzPEgnQEBzREhn%uCzSEin'uDzTEprUEEz(u#m)uFzVEjnWEGzXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;u$pnDDooDmCYmZm)m=uWl$EYg7eHz?uun%Evn'EIz@u(E)E*E+EJzfmgmmr[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsqWn]ufHHcRFIcsn^uJctn_uKcLGLcMGMc^g`uNc~fXn{uYn|uZn}u0n~u1nav2nbv3ncvAD,E4ndv5nev6nfvOcPcQcRcScTcUcVcWcXcYcZc0c-kgv.khv^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c-E=c.E?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9Bkd/EldBDmdCDndDDodEDpdFDqdGDrdHDsdIDtdJDudKDvdLDwdMDxdNDydODzdPDAdQDBdCdpDCbDbqDEb?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w7n{w8n|wagRD:E9n}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxEx!nFx#nGxbgtCcgdgHxIx]EJxKxLxMxNxOxPxQxRxSxTxuCegvCfgggwCSD^Ehgigjgkglg$nUx_EVxWxXx`E{EYxib|EZx%n0x1x2xOlsD3xNG4xhG5xLF6xiG7xjG8xkG9xlG!xMF#xmG$xnG%xoG'xpG(xqG)xrG*xsG+xtG,xuG-xvG.xwG/xOC:xxG;xNF=xyG?xzG@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWgTD_xUD`xVD{xWD|xXD}x}E~xSFayTFbyUFcyVFdyWFeyXFfygyhyYFiyKzjy~EkyaFlyYGmyZGny0Goy1Gpy2Gqy3GrybFsycFtyZFuy0Fvy1FwydFxy4Gyy5Gzy6GAy7GBy'BCy(BDy)BEy*BFy+BGy,BHy2FIy-BJy.BKy/BLy:BMy;BeFYDNyZDOydAPy0DQy1DRy2DSyeATy3DUyfAVy4DWy5DXyYyZy6D0y1y7D2y3F3y=B4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsFPC-ytFQC.y/ybC:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez
1600 with _lock, nogil:
1601 HANDLE_RETURN(cydriver.cuInit(0))
1602 _is_cuInit = True
1603 try:
1604 from cuda.bindings.utils import warn_if_cuda_major_version_mismatch
1605 except ImportError:
1606 pass
1607 else:
1608 warn_if_cuda_major_version_mismatch()
1609 return 0 2a ]g4FNr8DOr5FPr6FQr7FRr8FSr9DTromUrpmVr1lWr2lXrRCYr3lZrqm0r!D1r#D2r4l3rrm4r.m5rsm6r$D7r5l8r/m9r%D!r6l#r:m$r'D%rtm'rum(rvm)r7l*r8l+r9l,r!l-r#l.r$l/r%l:r'l;r(l=r)l?r*l@r+l[r,l]r-l^r.l_r/l`r:l{r;l|r=l}r?l~r@las[lbs]lcs^lds_les`lfsLrgsMrhsgAisjs(phAkslsiAmsjAnskAos1h2h3hps4h5h6hlAqsrsss9Ftsusvs@qws[qxs]qys^qzs;mAs(DBs!FCs#FDsBrEsCrFsIr)D=mGs?mHs@mIs[mJs_qKs`qLs{qMs|qNs}qOs~qPsarQsbrRsDrSsTsUsVsmAWsnAXsoAYspAZsqA0srA1sTp2sUp3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntErotsApttAqtVprtFrstttcrutGrvtWpwtXpxtYpytZpzt0pAt1pBtdrCt$FDtEtFtGtHt2pIt3pJt4pKt5pLt*DMt%FNt'FOt(FPt)FQt6pRterStTtUtVtWtXtYtZt0t1t2t3tOF4t7p5t+D6t,D7t-D8t8p9t.D!tMn#tTl$tUl%tIo'tJo(tdm)t]m*t^m+tfr,tgr-thr.tNn/tOn:tPn;tir=tQn?tRn@tSn[tTn]tjr^tkr_tUn`t{t9p|t*F}t~tau+Fbucudueu_mfu`mgu{mhu|miu}mjukulumunu~mou/DpulrquruQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9iHF!iIF#iJF$iBGsu%i,Ftu-Fuu{lvuwmwuanxu.FyuxmzuymAuzm:D?B;DAmBu|lCu$f%fCGDu!G'fxz(fpC)fSC*f+f,fVnEu-f3fDf.f4f/F/f:F5f:f#G;f=f?f@f[f]f^f_f`fhC=D)pV l iCW jCm KoX n qCY o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 DG5 6 EG7 8 FG9 ! GG# $ HG% ' IG( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,pFu- J mBubnBvb!B. K rC/ L No: M JrwbKrxbtDybuDzbvDAbwDBb(n;FGu=FHu?FIu@FJu[FKu]FLuMu%pnrEmFmPF?D^F@DxDNuQG[DAC]DRG^DJG_DOoSG`DTG{DKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkBrBkCyD|DUG}Dwn~DcA@B0m~ amQFaEGmbEOu_FcE`FPu{FQu|FRu}FSu~FTu2mUuaGVubGWucGdEdGeEeGXufGYugGZuUm0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLklCb )nye1mzeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdq%Geq2u_k#BnmXlfEgEhEiEjEsCkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVmVG'iNlrEfqWG!pXG#pKG4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8uWz5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uRBOE!m$uAzPEgnQEBzREhn%uCzSEin'uDzTEprUEEz(u#m)uFzVEjnWEGzXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;u$pnDDooDmCYmZm)m=uWl$EYg7eHz?uun%Evn'EIz@u(E)E*E+EJzfmgmmr[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsqWn]ufHHcRFIcsn^uJctn_uKcLGLcMGMc^g`uNc~fXn{uYn|uZn}u0n~u1nav2nbv3ncvAD,E4ndv5nev6nfvOcPcQcRcScTcUcVcWcXcYcZc0c-kgv.khv^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c-E=c.E?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9Bkd/EldBDmdCDndDDodEDpdFDqdGDrdHDsdIDtdJDudKDvdLDwdMDxdNDydODzdPDAdQDBdCdpDCbDbqDEb?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w7n{w8n|wagRD:E9n}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxEx!nFx#nGxbgtCcgdgHxIx]EJxKxLxMxNxOxPxQxRxSxTxuCegvCfgggwCSD^Ehgigjgkglg$nUx_EVxWxXx`E{EYxib|EZx%n0x1x2xOlsD3xNG4xhG5xLF6xiG7xjG8xkG9xlG!xMF#xmG$xnG%xoG'xpG(xqG)xrG*xsG+xtG,xuG-xvG.xwG/xOC:xxG;xNF=xyG?xzG@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWgTD_xUD`xVD{xWD|xXD}x}E~xSFayTFbyUFcyVFdyWFeyXFfygyhyYFiyKzjy~EkyaFlyYGmyZGny0Goy1Gpy2Gqy3GrybFsycFtyZFuy0Fvy1FwydFxy4Gyy5Gzy6GAy7GBy'BCy(BDy)BEy*BFy+BGy,BHy2FIy-BJy.BKy/BLy:BMy;BeFYDNyZDOydAPy0DQy1DRy2DSyeATy3DUyfAVy4DWy5DXyYyZy6D0y1y7D2y3F3y=B4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsFPC-ytFQC.y/ybC:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez
1612cdef inline int Device_resolve_device_id(device_id) except? -1:
1613 """Resolve device_id, defaulting to current device or 0."""
1614 cdef cydriver.CUdevice dev
1615 cdef cydriver.CUcontext ctx
1616 cdef cydriver.CUresult err
1617 if device_id is None: 2a ]g4FNr8DOr5FPr6FQr7FRr8FSr9DTromUrpmVr1lWr2lXrRCYr3lZrqm0r!D1r#D2r4l3rrm4r.m5rsm6r$D7r5l8r/m9r%D!r6l#r:m$r'D%rtm'rum(rvm)r7l*r8l+r9l,r!l-r#l.r$l/r%l:r'l;r(l=r)l?r*l@r+l[r,l]r-l^r.l_r/l`r:l{r;l|r=l}r?l~r@las[lbs]lcs^lds_les`lfsLrgsMrhsgAisjs(phAkslsiAmsjAnskAos1h2h3hps4h5h6hlAqsrsss9Ftsusvs@qws[qxs]qys^qzs;mAs(DBs!FCs#FDsBrEsCrFsIr)D=mGs?mHs@mIs[mJs_qKs`qLs{qMs|qNs}qOs~qPsarQsbrRsDrSsTsUsVsmAWsnAXsoAYspAZsqA0srA1sTp2sUp3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntErotsApttAqtVprtFrstttcrutGrvtWpwtXpxtYpytZpzt0pAt1pBtdrCt$FDtEtFtGtHt2pIt3pJt4pKt5pLt*DMt%FNt'FOt(FPt)FQt6pRterStTtUtVtWtXtYtZt0t1t2t3tOF4t7p5t+D6t,D7t-D8t8p9t.D!tMn#tTl$tUl%tIo'tJo(tdm)t]m*t^m+tfr,tgr-thr.tNn/tOn:tPn;tir=tQn?tRn@tSn[tTn]tjr^tkr_tUn`t{t9p|t*F}t~tau+Fbucudueu_mfu`mgu{mhu|miu}mjukulumunu~mou/DpulrquruQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9iHF!iIF#iJF$iBGsu%i,Ftu-Fuu{lvuwmwuanxu.FyuxmzuymAuzm:D?B;DAmBu|lCu$f%fCGDu!G'fxz(fpC)fSC*f+f,fVnEu-f3fDf.f4f/F/f:F5f:f#G;f=f?f@f[f]f^f_f`fhC=D)pV l iCW jCm KoX n qCY o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 DG5 6 EG7 8 FG9 ! GG# $ HG% ' IG( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,pFu- J mBubnBvb!B. K rC/ L No: M JrwbKrxbtDybuDzbvDAbwDBb(n;FGu=FHu?FIu@FJu[FKu]FLuMu%pnrEmFmPF?D^F@DxDNuQG[DAC]DRG^DJG_DOoSG`DTG{DKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkBrBkCyD|DUG}Dwn~DcA@B0m~ amQFaEGmbEOu_FcE`FPu{FQu|FRu}FSu~FTu2mUuaGVubGWucGdEdGeEeGXufGYugGZuUm0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLklCb )nye1mzeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdq%Geq2u_k#BnmXlfEgEhEiEjEsCkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVmVG'iNlrEfqWG!pXG#pKG4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8uWz5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uRBOE!m$uAzPEgnQEBzREhn%uCzSEin'uDzTEprUEEz(u#m)uFzVEjnWEGzXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;u$pnDDooDmCYmZm)m=uWl$EYg7eHz?uun%Evn'EIz@u(E)E*E+EJzfmgmmr[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsqWn]ufHHcRFIcsn^uJctn_uKcLGLcMGMc^g`uNc~fXn{uYn|uZn}u0n~u1nav2nbv3ncvAD,E4ndv5nev6nfvOcPcQcRcScTcUcVcWcXcYcZc0c-kgv.khv^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c-E=c.E?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9Bkd/EldBDmdCDndDDodEDpdFDqdGDrdHDsdIDtdJDudKDvdLDwdMDxdNDydODzdPDAdQDBdCdpDCbDbqDEb?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w7n{w8n|wagRD:E9n}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxEx!nFx#nGxbgtCcgdgHxIx]EJxKxLxMxNxOxPxQxRxSxTxuCegvCfgggwCSD^Ehgigjgkglg$nUx_EVxWxXx`E{EYxib|EZx%n0x1x2xOlsD3xNG4xhG5xLF6xiG7xjG8xkG9xlG!xMF#xmG$xnG%xoG'xpG(xqG)xrG*xsG+xtG,xuG-xvG.xwG/xOC:xxG;xNF=xyG?xzG@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWgTD_xUD`xVD{xWD|xXD}x}E~xSFayTFbyUFcyVFdyWFeyXFfygyhyYFiyKzjy~EkyaFlyYGmyZGny0Goy1Gpy2Gqy3GrybFsycFtyZFuy0Fvy1FwydFxy4Gyy5Gzy6GAy7GBy'BCy(BDy)BEy*BFy+BGy,BHy2FIy-BJy.BKy/BLy:BMy;BeFYDNyZDOydAPy0DQy1DRy2DSyeATy3DUyfAVy4DWy5DXyYyZy6D0y1y7D2y3F3y=B4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsFPC-ytFQC.y/ybC:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez
1618 with nogil: 2a ]g4F8D5F6F7F8F9Dompm1l2lRC3lqm!D#D4lrm.msm$D5l/m%D6l:m'Dtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMr9F@q[q]q^q;m(D!F#FIr=m?m@m[m_q`q{q|q}q~qarbrTpUp6fXf1eKfLfse7fYf2eMfNfte8fZf3eOfPfue9f0f4eQfRfve!f1f5eSfTfwe#f2f6eUfVfxeVpcrWpXpYpZp0p1pdr$F2p3p4p5p*D%F'F(F)F6perOF7p+D,D-D8p.DMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p*F+F_m`m{m|m}m~mlrhm*mimjmkm+mlmmmBmCmDmBG,F-F{lwman.Fxmymzm?BAm|l$f%fCG'f(f)f*f+f,fVn-f3fDf.f4f/F/f:F5f:f;f=f?f@f[f]f^f_f`fhCl m n o p q r s t u v w x y z A B C D E F G k H I J K L M ;F=F?F@F[F]F%pnrEmFmPF^FKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkBkCwn~DcA@B0m~ amQFGmbE_F`F{F|F}F~F2maGbGcGdGeGfGgGUm_k#BnmXlfEiEsCsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXC+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVmNlKGbnWmor3mcn4mXmdnenVl}l~lemWz5m(i~zth6m)i7m*i8m+ilBPlaAuh9m,mfnRB!mAzgnBzhnCzinDzprEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrnbA'm(mnDDooDmCYmZm)mWlYg7eHzunvnIz(E*EJzfmgmmrAe'pWnHcRFIcsnJctnKcLGLcMGMc^gNc~fXnYnZn0n1n2n3nAD4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c-E=c.E?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9Bkd/EldBDmdCDndDDodEDpdFDqdGDrdHDsdIDtdJDudKDvdLDwdMDxdNDydODzdPDAdQDBdCd8eDd9eEdFd!eGd#eHdBeCeg c h d LbMb$e%e'e(e)e*e+e4bab5bbbR N S O DeEeNb; Ob= Fe,e-e6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=e?eSd@eTdKeLe#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4d[e]e)bcb*bdbMe5dNe6dOePei e j f WbXb^e_e`e{e|e}e~e+beb,bfb7dYb8dZbQeRe0b^ 1b_ Seafbf-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgfhf,dif-dXeYe=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_djfkf^bgb_bhb`d{dlf|dmf}d~daebeZece0edenfeeoffepfgeqfherfiesfjetfkeuflevfmewfneoexfpeyfqere7n8nagRD9n!n#nbgtCcgdguCegvCfgggwCSDhgigjgkglg$nib%nsDNGhGLFiGjGkGlGMFmGnGoGpGqGrGsGtGuGvGwGOCxGNFyGzGmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWgTDUDVDWDXD}ESFTFUFVFWFXFgyYFKz~EaFYGZG0G1G2G3GbFcFZF0F1FdF4G5G6G7G'B(B)B*B+B,B2F-B.B/B:B;BYDZDdA0D1D2DeA3DfA4D5D6D7D3F=BSk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koC
1619 err = cydriver.cuCtxGetDevice(&dev) 2a ]g4F8D5F6F7F8F9Dompm1l2lRC3lqm!D#D4lrm.msm$D5l/m%D6l:m'Dtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMr9F@q[q]q^q;m(D!F#FIr=m?m@m[m_q`q{q|q}q~qarbrTpUp6fXf1eKfLfse7fYf2eMfNfte8fZf3eOfPfue9f0f4eQfRfve!f1f5eSfTfwe#f2f6eUfVfxeVpcrWpXpYpZp0p1pdr$F2p3p4p5p*D%F'F(F)F6perOF7p+D,D-D8p.DMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p*F+F_m`m{m|m}m~mlrhm*mimjmkm+mlmmmBmCmDmBG,F-F{lwman.Fxmymzm?BAm|l$f%fCG'f(f)f*f+f,fVn-f3fDf.f4f/F/f:F5f:f;f=f?f@f[f]f^f_f`fhCl m n o p q r s t u v w x y z A B C D E F G k H I J K L M ;F=F?F@F[F]F%pnrEmFmPF^FKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkBkCwn~DcA@B0m~ amQFGmbE_F`F{F|F}F~F2maGbGcGdGeGfGgGUm_k#BnmXlfEiEsCsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXC+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVmNlKGbnWmor3mcn4mXmdnenVl}l~lemWz5m(i~zth6m)i7m*i8m+ilBPlaAuh9m,mfnRB!mAzgnBzhnCzinDzprEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrnbA'm(mnDDooDmCYmZm)mWlYg7eHzunvnIz(E*EJzfmgmmrAe'pWnHcRFIcsnJctnKcLGLcMGMc^gNc~fXnYnZn0n1n2n3nAD4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c-E=c.E?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9Bkd/EldBDmdCDndDDodEDpdFDqdGDrdHDsdIDtdJDudKDvdLDwdMDxdNDydODzdPDAdQDBdCd8eDd9eEdFd!eGd#eHdBeCeg c h d LbMb$e%e'e(e)e*e+e4bab5bbbR N S O DeEeNb; Ob= Fe,e-e6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=e?eSd@eTdKeLe#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4d[e]e)bcb*bdbMe5dNe6dOePei e j f WbXb^e_e`e{e|e}e~e+beb,bfb7dYb8dZbQeRe0b^ 1b_ Seafbf-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgfhf,dif-dXeYe=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_djfkf^bgb_bhb`d{dlf|dmf}d~daebeZece0edenfeeoffepfgeqfherfiesfjetfkeuflevfmewfneoexfpeyfqere7n8nagRD9n!n#nbgtCcgdguCegvCfgggwCSDhgigjgkglg$nib%nsDNGhGLFiGjGkGlGMFmGnGoGpGqGrGsGtGuGvGwGOCxGNFyGzGmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWgTDUDVDWDXD}ESFTFUFVFWFXFgyYFKz~EaFYGZG0G1G2G3GbFcFZF0F1FdF4G5G6G7G'B(B)B*B+B,B2F-B.B/B:B;BYDZDdA0D1D2DeA3DfA4D5D6D7D3F=BSk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koC
1620 if err == cydriver.CUresult.CUDA_SUCCESS: 2a ]g4F8D5F6F7F8F9Dompm1l2lRC3lqm!D#D4lrm.msm$D5l/m%D6l:m'Dtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMr9F@q[q]q^q;m(D!F#FIr=m?m@m[m_q`q{q|q}q~qarbrTpUp6fXf1eKfLfse7fYf2eMfNfte8fZf3eOfPfue9f0f4eQfRfve!f1f5eSfTfwe#f2f6eUfVfxeVpcrWpXpYpZp0p1pdr$F2p3p4p5p*D%F'F(F)F6perOF7p+D,D-D8p.DMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p*F+F_m`m{m|m}m~mlrhm*mimjmkm+mlmmmBmCmDmBG,F-F{lwman.Fxmymzm?BAm|l$f%fCG'f(f)f*f+f,fVn-f3fDf.f4f/F/f:F5f:f;f=f?f@f[f]f^f_f`fhCl m n o p q r s t u v w x y z A B C D E F G k H I J K L M ;F=F?F@F[F]F%pnrEmFmPF^FKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkBkCwn~DcA@B0m~ amQFGmbE_F`F{F|F}F~F2maGbGcGdGeGfGgGUm_k#BnmXlfEiEsCsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXC+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVmNlKGbnWmor3mcn4mXmdnenVl}l~lemWz5m(i~zth6m)i7m*i8m+ilBPlaAuh9m,mfnRB!mAzgnBzhnCzinDzprEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrnbA'm(mnDDooDmCYmZm)mWlYg7eHzunvnIz(E*EJzfmgmmrAe'pWnHcRFIcsnJctnKcLGLcMGMc^gNc~fXnYnZn0n1n2n3nAD4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c-E=c.E?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9Bkd/EldBDmdCDndDDodEDpdFDqdGDrdHDsdIDtdJDudKDvdLDwdMDxdNDydODzdPDAdQDBdCd8eDd9eEdFd!eGd#eHdBeCeg c h d LbMb$e%e'e(e)e*e+e4bab5bbbR N S O DeEeNb; Ob= Fe,e-e6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=e?eSd@eTdKeLe#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4d[e]e)bcb*bdbMe5dNe6dOePei e j f WbXb^e_e`e{e|e}e~e+beb,bfb7dYb8dZbQeRe0b^ 1b_ Seafbf-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgfhf,dif-dXeYe=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_djfkf^bgb_bhb`d{dlf|dmf}d~daebeZece0edenfeeoffepfgeqfherfiesfjetfkeuflevfmewfneoexfpeyfqere7n8nagRD9n!n#nbgtCcgdguCegvCfgggwCSDhgigjgkglg$nib%nsDNGhGLFiGjGkGlGMFmGnGoGpGqGrGsGtGuGvGwGOCxGNFyGzGmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWgTDUDVDWDXD}ESFTFUFVFWFXFgyYFKz~EaFYGZG0G1G2G3GbFcFZF0F1FdF4G5G6G7G'B(B)B*B+B,B2F-B.B/B:B;BYDZDdA0D1D2DeA3DfA4D5D6D7D3F=BSk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koC
1621 return int(dev) 24F8D5F6F7F8F9Dompm1l2lRC3lqm!D#D4lrm.msm$D5l/m%D6l:m'Dtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMr9F@q[q]q^q;m(D!F#FIr=m?m@m[m_q`q{q|q}q~qarbrTpUp6fXf1eKfLfse7fYf2eMfNfte8fZf3eOfPfue9f0f4eQfRfve!f1f5eSfTfwe#f2f6eUfVfxeVpcrWpXpYpZp0p1pdr$F2p3p4p5p*D%F'F(F)F6perOF7p+D,D-D8p.DMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p*F+F_m`m{m|m}m~mlrhm*mimjmkm+mlmmmBmCmDmBG,F-F{lwman.Fxmymzm?BAm|l$f%fCG'f(f)f*f+f,fVn-f3fDf.f4f/F/f:F5f:f;f=f?f@f[f]f^f_f`fhCl m n o p q r s t u v w x y z A B C D E F G k H I J K L M ;F=F?F@F[F]FPF^FQFbE_F`F{F|F}F~F2maGbGcGdGeGfGgGUm_k#BXlfEiEsCsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWCXCYCZC0C1C2C3C4C5C6C7C8C9C!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~CaDbDcDdDeDfDgDhDiDjDkDlDmDVmNlKGbnWmor3mcn4mXmdnenVl}l~lem5m(i~zth6m)i7m*i8m+ilBPlaAuh9m,mfnRB!mAzgnBzhnCzinDzprEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrnbA'm(mnDoDmCYmZm)mWlYgHzunvnIz(E*EJzfmgmmr'pWnHcRFIcsnJctnKcLGLcMGMc^gNcXnYnZn0n1n2n3nAD4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c-E=c.E?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9Bkd/EldBDmdCDndDDodEDpdFDqdGDrdHDsdIDtdJDudKDvdLDwdMDxdNDydODzdPDAdQDBdCd8eDd9eEdFd!eGd#eHdBeCeg c h d LbMb$e%e'e(e)e*e+e4bab5bbbR N S O DeEeNb; Ob= Fe,e-e6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=e?eSd@eTdKeLe#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4d[e]e)bcb*bdbMe5dNe6dOePei e j f WbXb^e_e`e{e|e}e~e+beb,bfb7dYb8dZbQeRe0b^ 1b_ Seafbf-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgfhf,dif-dXeYe=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_djfkf^bgb_bhb`d{dlf|dmf}d~daebeZece0edenfeeoffepfgeqfherfiesfjetfkeuflevfmewfneoexfpeyfqere7n8nRD9n!n#nSD$n%nsDNGhGLFiGjGkGlGMFmGnGoGpGqGrGsGtGuGvGwGOCxGNFyGzGmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWgTDUDVDWDXD}ESFTFUFVFWFXFgyYFKz~EaFYGZG0G1G2G3GbFcFZF0F1FdF4G5G6G7G'B(B)B*B+B,B2F-B.B/B:B;BYDZDdA0D1D2DeA3DfA4D5D6D7D3F=B[B]B^B_B`B{B|B}B~BaCnCoC
1622 elif err == cydriver.CUresult.CUDA_ERROR_INVALID_CONTEXT:
1623 with nogil: 2a ]g%pnrEmFmKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkBkCwn~DcA@B0m~ amGmnm`b{b|b}b~b*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEfWzDo7eAe~fagbgtCcgdguCegvCfgggwChgigjgkglgibSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k
1624 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2a ]g%pnrEmFmKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkBkCwn~DcA@B0m~ amGmnm`b{b|b}b~b*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEfWzDo7eAe~fagbgtCcgdguCegvCfgggwChgigjgkglgibSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k
1625 assert <void*>(ctx) == NULL 2a ]g%pnrEmFmKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkBkCwn~DcA@B0m~ amGmnm`b{b|b}b~b*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEfWzDo7eAe~fagbgtCcgdguCegvCfgggwChgigjgkglgibSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k
1626 return 0 # cudart behavior 2a ]g%pnrEmFmKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkBkCwn~DcA@B0m~ amGmnm`b{b|b}b~b*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEfWzDo7eAe~fagbgtCcgdguCegvCfgggwChgigjgkglgibSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k
1627 else:
1628 HANDLE_RETURN(err)
1629 elif device_id < 0: 2a NrOrPrQrRrSrTrUrVr1lWr2lXrRCYr3lZr0r1r2r4l3r4r5r6r7r5l8r9r!r6l#r$r%r'r(r)r7l*r8l+r9l,r!l-r#l.r$l/r%l:r'l;r(l=r)l?r*l@r+l[r,l]r-l^r.l_r/l`r:l{r;l|r=l}r?l~r@las[lbs]lcs^lds_les`lfsLrgsMrhsgAisjs(phAkslsiAmsjAnskAos1h2h3hps4h5h6hlAqsrssstsusvs@qws[qxs]qys^qzsAsBsCsDsBrEsCrFs)DGsHsIsJs_qKs`qLs{qMs|qNs}qOs~qPsarQsbrRsDrSsTsUsVsmAWsnAXsoAYspAZsqA0srA1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntErotsApttAqtrtFrstttcrutGrvtwtxtytztAtBtdrCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRterStTtUtVtWtXtYtZt0t1t2t3t4t7p5t+D6t7t8t8p9t.D!tMn#tTl$tUl%t't(t)t*t+tfr,tgr-thr.tNn/tOn:tPn;tir=tQn?tRn@tSn[tTn]tjr^tkr_tUn`t{t|t}t~taubucudueufuguhuiujukulumunuou/DpulrquruQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9iHF!iIF#iJF$isu%ituuu{lvuwuxuyuzuAu:D;DBu|lCu$f%fDu!G'fxz(fpC)fSC*f+f,fEu-f3fDf.f4f/f5f:f#G;f=f?f@f[f]f^f_f`f=D)pV l iCW jCm KoX n qCY o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 DG5 6 EG7 8 FG9 ! GG# $ HG% ' IG( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,pFu- J mBubnBvb!B. K rC/ L No: M JrwbKrxbtDybuDzbvDAbwDBb(nGuHuIuJuKuLuMuEmFm?D@DxDNuQG[DAC]DRG^DJG_DOoSG`DTG{DrByD|DUG}DaEbEOucEPuQuRuSuTuUuVuWudEeEXuYuZu0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLklCb )nye1mzeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdq%Geq2uXlgEhEjEkEacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fyzzz3umEnEoEpEqEEfVG'irEfqWG!pXG#p4usEtEuEvE5u6uwE7uxEyEzE8u9u!uAEBECEDEEEFEGEHEIEJEKELEMENE#uOE$uPEQERE%uSE'uTEUE(u)uVEWEXEYEZE0E*u+u1E,u2E3E4E-u5E6E7E8E9E.u/u!E#E:u;u$p=u$E?u%E'E@u(E)E*E+EJz[ugqhqiqjqkqlqmqnqoqpqqqrqsq]ufHHcRFIc^uJc_uKcLcMc^g`uNc{u|u}u~uavbvcv,EdvevfvOcPcQcRcScTcUcVcWcXcYcZc0c-kgv.khv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldBDmdCDndDDodEDpdFDqdGDrdHDsdIDtdJDudKDvdLDwdMDxdNDydODzdPDAdQDBdCdpDCbDbqDEb?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|w:E}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIx]EJxKxLxMxNxOxPxQxRxSxTx^EUx_EVxWxXx`E{EYxib|EZx0x1x2xOl3x4x5xLF6x7x8x9x!xMF#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x}E~xaybycydyeyfygyhyiyKzjykylymynyoypyqyrysycFtyuyvywyxyyyzyAyBy'BCy(BDy)BEy*BFy+BGy,BHyIy-BJy.BKy/BLy:BMy;BeFNyOydAPyQyRySyeATyUyfAVyWyXyYyZy0y1y2y3y4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+kqFrFsFPC-ytFQC.y/ybC:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez
1630 raise ValueError(f"device_id must be >= 0, got {device_id}")
1631 return device_id 2a NrOrPrQrRrSrTrUrVr1lWr2lXrRCYr3lZr0r1r2r4l3r4r5r6r7r5l8r9r!r6l#r$r%r'r(r)r7l*r8l+r9l,r!l-r#l.r$l/r%l:r'l;r(l=r)l?r*l@r+l[r,l]r-l^r.l_r/l`r:l{r;l|r=l}r?l~r@las[lbs]lcs^lds_les`lfsLrgsMrhsgAisjs(phAkslsiAmsjAnskAos1h2h3hps4h5h6hlAqsrssstsusvs@qws[qxs]qys^qzsAsBsCsDsBrEsCrFs)DGsHsIsJs_qKs`qLs{qMs|qNs}qOs~qPsarQsbrRsDrSsTsUsVsmAWsnAXsoAYspAZsqA0srA1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntErotsApttAqtrtFrstttcrutGrvtwtxtytztAtBtdrCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRterStTtUtVtWtXtYtZt0t1t2t3t4t7p5t+D6t7t8t8p9t.D!tMn#tTl$tUl%t't(t)t*t+tfr,tgr-thr.tNn/tOn:tPn;tir=tQn?tRn@tSn[tTn]tjr^tkr_tUn`t{t|t}t~taubucudueufuguhuiujukulumunuou/DpulrquruQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9iHF!iIF#iJF$isu%ituuu{lvuwuxuyuzuAu:D;DBu|lCu$f%fDu!G'fxz(fpC)fSC*f+f,fEu-f3fDf.f4f/f5f:f#G;f=f?f@f[f]f^f_f`f=D)pV l iCW jCm KoX n qCY o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 DG5 6 EG7 8 FG9 ! GG# $ HG% ' IG( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,pFu- J mBubnBvb!B. K rC/ L No: M JrwbKrxbtDybuDzbvDAbwDBb(nGuHuIuJuKuLuMuEmFm?D@DxDNuQG[DAC]DRG^DJG_DOoSG`DTG{DrByD|DUG}DaEbEOucEPuQuRuSuTuUuVuWudEeEXuYuZu0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLklCb )nye1mzeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdq%Geq2uXlgEhEjEkEacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fyzzz3umEnEoEpEqEEfVG'irEfqWG!pXG#p4usEtEuEvE5u6uwE7uxEyEzE8u9u!uAEBECEDEEEFEGEHEIEJEKELEMENE#uOE$uPEQERE%uSE'uTEUE(u)uVEWEXEYEZE0E*u+u1E,u2E3E4E-u5E6E7E8E9E.u/u!E#E:u;u$p=u$E?u%E'E@u(E)E*E+EJz[ugqhqiqjqkqlqmqnqoqpqqqrqsq]uHcRFIc^uJc_uKcLcMc^g`uNc{u|u}u~uavbvcv,EdvevfvOcPcQcRcScTcUcVcWcXcYcZc0c-kgv.khv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldBDmdCDndDDodEDpdFDqdGDrdHDsdIDtdJDudKDvdLDwdMDxdNDydODzdPDAdQDBdCdpDCbDbqDEb?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|w:E}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIx]EJxKxLxMxNxOxPxQxRxSxTx^EUx_EVxWxXx`E{EYxib|EZx0x1x2xOl3x4x5xLF6x7x8x9x!xMF#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x}E~xaybycydyeyfygyhyiyKzjykylymynyoypyqyrysycFtyuyvywyxyyyzyAyBy'BCy(BDy)BEy*BFy+BGy,BHyIy-BJy.BKy/BLy:BMy;BeFNyOydAPyQyRySyeATyUyfAVyWyXyYyZy0y1y2y3y4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+kqFrFsFPC-ytFQC.y/ybC:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez
1634cdef inline list Device_ensure_tls_devices(cls):
1635 """Ensure thread-local Device singletons exist, creating if needed."""
1636 cdef int total
1637 try: 2a ]g4FNr8DOr5FPr6FQr7FRr8FSr9DTromUrpmVr1lWr2lXrRCYr3lZrqm0r!D1r#D2r4l3rrm4r.m5rsm6r$D7r5l8r/m9r%D!r6l#r:m$r'D%rtm'rum(rvm)r7l*r8l+r9l,r!l-r#l.r$l/r%l:r'l;r(l=r)l?r*l@r+l[r,l]r-l^r.l_r/l`r:l{r;l|r=l}r?l~r@las[lbs]lcs^lds_les`lfsLrgsMrhsgAisjs(phAkslsiAmsjAnskAos1h2h3hps4h5h6hlAqsrsss9Ftsusvs@qws[qxs]qys^qzs;mAs(DBs!FCs#FDsBrEsCrFsIr)D=mGs?mHs@mIs[mJs_qKs`qLs{qMs|qNs}qOs~qPsarQsbrRsDrSsTsUsVsmAWsnAXsoAYspAZsqA0srA1sTp2sUp3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntErotsApttAqtVprtFrstttcrutGrvtWpwtXpxtYpytZpzt0pAt1pBtdrCt$FDtEtFtGtHt2pIt3pJt4pKt5pLt*DMt%FNt'FOt(FPt)FQt6pRterStTtUtVtWtXtYtZt0t1t2t3tOF4t7p5t+D6t,D7t-D8t8p9t.D!tMn#tTl$tUl%tIo'tJo(tdm)t]m*t^m+tfr,tgr-thr.tNn/tOn:tPn;tir=tQn?tRn@tSn[tTn]tjr^tkr_tUn`t{t9p|t*F}t~tau+Fbucudueu_mfu`mgu{mhu|miu}mjukulumunu~mou/DpulrquruQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9iHF!iIF#iJF$iBGsu%i,Ftu-Fuu{lvuwmwuanxu.FyuxmzuymAuzm:D?B;DAmBu|lCu$f%fCGDu!G'fxz(fpC)fSC*f+f,fVnEu-f3fDf.f4f/F/f:F5f:f#G;f=f?f@f[f]f^f_f`fhC=D)pV l iCW jCm KoX n qCY o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 DG5 6 EG7 8 FG9 ! GG# $ HG% ' IG( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,pFu- J mBubnBvb!B. K rC/ L No: M JrwbKrxbtDybuDzbvDAbwDBb(n;FGu=FHu?FIu@FJu[FKu]FLuMu%pnrEmFmPF?D^F@DxDNuQG[DAC]DRG^DJG_DOoSG`DTG{DKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkBrBkCyD|DUG}Dwn~DcA@B0m~ amQFaEGmbEOu_FcE`FPu{FQu|FRu}FSu~FTu2mUuaGVubGWucGdEdGeEeGXufGYugGZuUm0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLklCb )nye1mzeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdq%Geq2u_k#BnmXlfEgEhEiEjEsCkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVmVG'iNlrEfqWG!pXG#pKG4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8uWz5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uRBOE!m$uAzPEgnQEBzREhn%uCzSEin'uDzTEprUEEz(u#m)uFzVEjnWEGzXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;u$pnDDooDmCYmZm)m=uWl$EYg7eHz?uun%Evn'EIz@u(E)E*E+EJzfmgmmr[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsqWn]uHcRFIcsn^uJctn_uKcLGLcMGMc^g`uNc~fXn{uYn|uZn}u0n~u1nav2nbv3ncvAD,E4ndv5nev6nfvOcPcQcRcScTcUcVcWcXcYcZc0c-kgv.khv^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c-E=c.E?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9Bkd/EldBDmdCDndDDodEDpdFDqdGDrdHDsdIDtdJDudKDvdLDwdMDxdNDydODzdPDAdQDBdCdpDCbDbqDEb?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w7n{w8n|wagRD:E9n}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxEx!nFx#nGxbgtCcgdgHxIx]EJxKxLxMxNxOxPxQxRxSxTxuCegvCfgggwCSD^Ehgigjgkglg$nUx_EVxWxXx`E{EYxib|EZx%n0x1x2xOlsD3xNG4xhG5xLF6xiG7xjG8xkG9xlG!xMF#xmG$xnG%xoG'xpG(xqG)xrG*xsG+xtG,xuG-xvG.xwG/xOC:xxG;xNF=xyG?xzG@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWgTD_xUD`xVD{xWD|xXD}x}E~xSFayTFbyUFcyVFdyWFeyXFfygyhyYFiyKzjy~EkyaFlyYGmyZGny0Goy1Gpy2Gqy3GrybFsycFtyZFuy0Fvy1FwydFxy4Gyy5Gzy6GAy7GBy'BCy(BDy)BEy*BFy+BGy,BHy2FIy-BJy.BKy/BLy:BMy;BeFYDNyZDOydAPy0DQy1DRy2DSyeATy3DUyfAVy4DWy5DXyYyZy6D0y1y7D2y3F3y=B4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsFPC-ytFQC.y/ybC:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez
1638 return _tls.devices 2a ]g4FNr8DOr5FPr6FQr7FRr8FSr9DTromUrpmVr1lWr2lXrRCYr3lZrqm0r!D1r#D2r4l3rrm4r.m5rsm6r$D7r5l8r/m9r%D!r6l#r:m$r'D%rtm'rum(rvm)r7l*r8l+r9l,r!l-r#l.r$l/r%l:r'l;r(l=r)l?r*l@r+l[r,l]r-l^r.l_r/l`r:l{r;l|r=l}r?l~r@las[lbs]lcs^lds_les`lfsLrgsMrhsgAisjs(phAkslsiAmsjAnskAos1h2h3hps4h5h6hlAqsrsss9Ftsusvs@qws[qxs]qys^qzs;mAs(DBs!FCs#FDsBrEsCrFsIr)D=mGs?mHs@mIs[mJs_qKs`qLs{qMs|qNs}qOs~qPsarQsbrRsDrSsTsUsVsmAWsnAXsoAYspAZsqA0srA1sTp2sUp3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntErotsApttAqtVprtFrstttcrutGrvtWpwtXpxtYpytZpzt0pAt1pBtdrCt$FDtEtFtGtHt2pIt3pJt4pKt5pLt*DMt%FNt'FOt(FPt)FQt6pRterStTtUtVtWtXtYtZt0t1t2t3tOF4t7p5t+D6t,D7t-D8t8p9t.D!tMn#tTl$tUl%tIo'tJo(tdm)t]m*t^m+tfr,tgr-thr.tNn/tOn:tPn;tir=tQn?tRn@tSn[tTn]tjr^tkr_tUn`t{t9p|t*F}t~tau+Fbucudueu_mfu`mgu{mhu|miu}mjukulumunu~mou/DpulrquruQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9iHF!iIF#iJF$iBGsu%i,Ftu-Fuu{lvuwmwuanxu.FyuxmzuymAuzm:D?B;DAmBu|lCu$f%fCGDu!G'fxz(fpC)fSC*f+f,fVnEu-f3fDf.f4f/F/f:F5f:f#G;f=f?f@f[f]f^f_f`fhC=D)pV l iCW jCm KoX n qCY o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 DG5 6 EG7 8 FG9 ! GG# $ HG% ' IG( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,pFu- J mBubnBvb!B. K rC/ L No: M JrwbKrxbtDybuDzbvDAbwDBb(n;FGu=FHu?FIu@FJu[FKu]FLuMu%pnrEmFmPF?D^F@DxDNuQG[DAC]DRG^DJG_DOoSG`DTG{DKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkBrBkCyD|DUG}Dwn~DcA@B0m~ amQFaEGmbEOu_FcE`FPu{FQu|FRu}FSu~FTu2mUuaGVubGWucGdEdGeEeGXufGYugGZuUm0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLklCb )nye1mzeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdq%Geq2u_k#BnmXlfEgEhEiEjEsCkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVmVG'iNlrEfqWG!pXG#pKG4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8uWz5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uRBOE!m$uAzPEgnQEBzREhn%uCzSEin'uDzTEprUEEz(u#m)uFzVEjnWEGzXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;u$pnDDooDmCYmZm)m=uWl$EYg7eHz?uun%Evn'EIz@u(E)E*E+EJzfmgmmr[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsqWn]uHcRFIcsn^uJctn_uKcLGLcMGMc^g`uNc~fXn{uYn|uZn}u0n~u1nav2nbv3ncvAD,E4ndv5nev6nfvOcPcQcRcScTcUcVcWcXcYcZc0c-kgv.khv^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c-E=c.E?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9Bkd/EldBDmdCDndDDodEDpdFDqdGDrdHDsdIDtdJDudKDvdLDwdMDxdNDydODzdPDAdQDBdCdpDCbDbqDEb?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w7n{w8n|wagRD:E9n}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxEx!nFx#nGxbgtCcgdgHxIx]EJxKxLxMxNxOxPxQxRxSxTxuCegvCfgggwCSD^Ehgigjgkglg$nUx_EVxWxXx`E{EYxib|EZx%n0x1x2xOlsD3xNG4xhG5xLF6xiG7xjG8xkG9xlG!xMF#xmG$xnG%xoG'xpG(xqG)xrG*xsG+xtG,xuG-xvG.xwG/xOC:xxG;xNF=xyG?xzG@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWgTD_xUD`xVD{xWD|xXD}x}E~xSFayTFbyUFcyVFdyWFeyXFfygyhyYFiyKzjy~EkyaFlyYGmyZGny0Goy1Gpy2Gqy3GrybFsycFtyZFuy0Fvy1FwydFxy4Gyy5Gzy6GAy7GBy'BCy(BDy)BEy*BFy+BGy,BHy2FIy-BJy.BKy/BLy:BMy;BeFYDNyZDOydAPy0DQy1DRy2DSyeATy3DUyfAVy4DWy5DXyYyZy6D0y1y7D2y3F3y=B4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsFPC-ytFQC.y/ybC:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez
1639 except AttributeError: 2a ]gNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAuBuCu$f%fDu'f(f)f*f+f,fEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`f)pV l W m KoX n Y o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,p- J ubvb. K / L No: M JrwbKrxbybzbAbBb(nGuHuIuJuKuLuMuNuOoalblcldlelfl[kgl]k^khl,kilwn0m~ amGmOuPuQuRuSuTuUuVuWuXuYuZu0u-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2unm`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}f*n3u+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEf'ifq4u5u6u7u8uWz9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;uDo=u7e?u@u[uAegqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc~f{u|u}u~uavbvcvdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|wag}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxbgcgdgHxIxJxKxLxMxNxOxPxQxRxSxTxegfggghgigjgkglgUxVxWxXxYxibZx0x1x2xOl3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,ySkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzez
1640 with nogil: 2a ]gNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAuBuCu$f%fDu'f(f)f*f+f,fEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`f)pV l W m KoX n Y o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,p- J ubvb. K / L No: M JrwbKrxbybzbAbBb(nGuHuIuJuKuLuMuNuOoalblcldlelfl[kgl]k^khl,kilwn0m~ amGmOuPuQuRuSuTuUuVuWuXuYuZu0u-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2unm`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}f*n3u+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEf'ifq4u5u6u7u8uWz9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;uDo=u7e?u@u[uAegqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc~f{u|u}u~uavbvcvdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|wag}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxbgcgdgHxIxJxKxLxMxNxOxPxQxRxSxTxegfggghgigjgkglgUxVxWxXxYxibZx0x1x2xOl3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,ySkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzez
1641 HANDLE_RETURN(cydriver.cuDeviceGetCount(&total)) 2a ]gNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAuBuCu$f%fDu'f(f)f*f+f,fEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`f)pV l W m KoX n Y o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,p- J ubvb. K / L No: M JrwbKrxbybzbAbBb(nGuHuIuJuKuLuMuNuOoalblcldlelfl[kgl]k^khl,kilwn0m~ amGmOuPuQuRuSuTuUuVuWuXuYuZu0u-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2unm`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}f*n3u+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEf'ifq4u5u6u7u8uWz9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;uDo=u7e?u@u[uAegqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc~f{u|u}u~uavbvcvdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|wag}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxbgcgdgHxIxJxKxLxMxNxOxPxQxRxSxTxegfggghgigjgkglgUxVxWxXxYxibZx0x1x2xOl3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,ySkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzez
1642 devices = _tls.devices = [] 2a ]gNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAuBuCu$f%fDu'f(f)f*f+f,fEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`f)pV l W m KoX n Y o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,p- J ubvb. K / L No: M JrwbKrxbybzbAbBb(nGuHuIuJuKuLuMuNuOoalblcldlelfl[kgl]k^khl,kilwn0m~ amGmOuPuQuRuSuTuUuVuWuXuYuZu0u-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2unm`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}f*n3u+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEf'ifq4u5u6u7u8uWz9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;uDo=u7e?u@u[uAegqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc~f{u|u}u~uavbvcvdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|wag}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxbgcgdgHxIxJxKxLxMxNxOxPxQxRxSxTxegfggghgigjgkglgUxVxWxXxYxibZx0x1x2xOl3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,ySkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzez
1643 for dev_id in range(total): 2a ]gNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAuBuCu$f%fDu'f(f)f*f+f,fEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`f)pV l W m KoX n Y o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,p- J ubvb. K / L No: M JrwbKrxbybzbAbBb(nGuHuIuJuKuLuMuNuOoalblcldlelfl[kgl]k^khl,kilwn0m~ amGmOuPuQuRuSuTuUuVuWuXuYuZu0u-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2unm`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}f*n3u+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEf'ifq4u5u6u7u8uWz9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;uDo=u7e?u@u[uAegqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc~f{u|u}u~uavbvcvdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|wag}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxbgcgdgHxIxJxKxLxMxNxOxPxQxRxSxTxegfggghgigjgkglgUxVxWxXxYxibZx0x1x2xOl3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,ySkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzez
1644 device = super(Device, cls).__new__(cls) 2a ]gNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAuBuCu$f%fDu'f(f)f*f+f,fEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`f)pV l W m KoX n Y o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,p- J ubvb. K / L No: M JrwbKrxbybzbAbBb(nGuHuIuJuKuLuMuNuOoalblcldlelfl[kgl]k^khl,kilwn0m~ amGmOuPuQuRuSuTuUuVuWuXuYuZu0u-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2unm`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}f*n3u+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEf'ifq4u5u6u7u8uWz9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;uDo=u7e?u@u[uAegqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc~f{u|u}u~uavbvcvdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|wag}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxbgcgdgHxIxJxKxLxMxNxOxPxQxRxSxTxegfggghgigjgkglgUxVxWxXxYxibZx0x1x2xOl3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,ySkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzez
1645 device._device_id = dev_id 2a ]gNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAuBuCu$f%fDu'f(f)f*f+f,fEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`f)pV l W m KoX n Y o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,p- J ubvb. K / L No: M JrwbKrxbybzbAbBb(nGuHuIuJuKuLuMuNuOoalblcldlelfl[kgl]k^khl,kilwn0m~ amGmOuPuQuRuSuTuUuVuWuXuYuZu0u-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2unm`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}f*n3u+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEf'ifq4u5u6u7u8uWz9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;uDo=u7e?u@u[uAegqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc~f{u|u}u~uavbvcvdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|wag}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxbgcgdgHxIxJxKxLxMxNxOxPxQxRxSxTxegfggghgigjgkglgUxVxWxXxYxibZx0x1x2xOl3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,ySkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzez
1646 device._memory_resource = None 2a ]gNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAuBuCu$f%fDu'f(f)f*f+f,fEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`f)pV l W m KoX n Y o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,p- J ubvb. K / L No: M JrwbKrxbybzbAbBb(nGuHuIuJuKuLuMuNuOoalblcldlelfl[kgl]k^khl,kilwn0m~ amGmOuPuQuRuSuTuUuVuWuXuYuZu0u-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2unm`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}f*n3u+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEf'ifq4u5u6u7u8uWz9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;uDo=u7e?u@u[uAegqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc~f{u|u}u~uavbvcvdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|wag}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxbgcgdgHxIxJxKxLxMxNxOxPxQxRxSxTxegfggghgigjgkglgUxVxWxXxYxibZx0x1x2xOl3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,ySkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzez
1647 device._has_inited = False 2a ]gNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAuBuCu$f%fDu'f(f)f*f+f,fEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`f)pV l W m KoX n Y o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,p- J ubvb. K / L No: M JrwbKrxbybzbAbBb(nGuHuIuJuKuLuMuNuOoalblcldlelfl[kgl]k^khl,kilwn0m~ amGmOuPuQuRuSuTuUuVuWuXuYuZu0u-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2unm`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}f*n3u+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEf'ifq4u5u6u7u8uWz9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;uDo=u7e?u@u[uAegqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc~f{u|u}u~uavbvcvdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|wag}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxbgcgdgHxIxJxKxLxMxNxOxPxQxRxSxTxegfggghgigjgkglgUxVxWxXxYxibZx0x1x2xOl3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,ySkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzez
1648 device._properties = None 2a ]gNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAuBuCu$f%fDu'f(f)f*f+f,fEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`f)pV l W m KoX n Y o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,p- J ubvb. K / L No: M JrwbKrxbybzbAbBb(nGuHuIuJuKuLuMuNuOoalblcldlelfl[kgl]k^khl,kilwn0m~ amGmOuPuQuRuSuTuUuVuWuXuYuZu0u-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2unm`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}f*n3u+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEf'ifq4u5u6u7u8uWz9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;uDo=u7e?u@u[uAegqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc~f{u|u}u~uavbvcvdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|wag}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxbgcgdgHxIxJxKxLxMxNxOxPxQxRxSxTxegfggghgigjgkglgUxVxWxXxYxibZx0x1x2xOl3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,ySkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzez
1649 device._resources = None 2a ]gNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAuBuCu$f%fDu'f(f)f*f+f,fEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`f)pV l W m KoX n Y o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,p- J ubvb. K / L No: M JrwbKrxbybzbAbBb(nGuHuIuJuKuLuMuNuOoalblcldlelfl[kgl]k^khl,kilwn0m~ amGmOuPuQuRuSuTuUuVuWuXuYuZu0u-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2unm`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}f*n3u+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEf'ifq4u5u6u7u8uWz9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;uDo=u7e?u@u[uAegqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc~f{u|u}u~uavbvcvdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|wag}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxbgcgdgHxIxJxKxLxMxNxOxPxQxRxSxTxegfggghgigjgkglgUxVxWxXxYxibZx0x1x2xOl3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,ySkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzez
1650 device._uuid = None 2a ]gNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAuBuCu$f%fDu'f(f)f*f+f,fEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`f)pV l W m KoX n Y o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,p- J ubvb. K / L No: M JrwbKrxbybzbAbBb(nGuHuIuJuKuLuMuNuOoalblcldlelfl[kgl]k^khl,kilwn0m~ amGmOuPuQuRuSuTuUuVuWuXuYuZu0u-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2unm`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}f*n3u+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEf'ifq4u5u6u7u8uWz9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;uDo=u7e?u@u[uAegqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc~f{u|u}u~uavbvcvdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|wag}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxbgcgdgHxIxJxKxLxMxNxOxPxQxRxSxTxegfggghgigjgkglgUxVxWxXxYxibZx0x1x2xOl3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,ySkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzez
1651 device._context = None 2a ]gNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAuBuCu$f%fDu'f(f)f*f+f,fEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`f)pV l W m KoX n Y o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,p- J ubvb. K / L No: M JrwbKrxbybzbAbBb(nGuHuIuJuKuLuMuNuOoalblcldlelfl[kgl]k^khl,kilwn0m~ amGmOuPuQuRuSuTuUuVuWuXuYuZu0u-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2unm`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}f*n3u+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEf'ifq4u5u6u7u8uWz9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;uDo=u7e?u@u[uAegqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc~f{u|u}u~uavbvcvdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|wag}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxbgcgdgHxIxJxKxLxMxNxOxPxQxRxSxTxegfggghgigjgkglgUxVxWxXxYxibZx0x1x2xOl3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,ySkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzez
1652 devices.append(device) 2a ]gNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAuBuCu$f%fDu'f(f)f*f+f,fEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`f)pV l W m KoX n Y o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,p- J ubvb. K / L No: M JrwbKrxbybzbAbBb(nGuHuIuJuKuLuMuNuOoalblcldlelfl[kgl]k^khl,kilwn0m~ amGmOuPuQuRuSuTuUuVuWuXuYuZu0u-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2unm`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}f*n3u+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEf'ifq4u5u6u7u8uWz9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;uDo=u7e?u@u[uAegqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc~f{u|u}u~uavbvcvdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|wag}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxbgcgdgHxIxJxKxLxMxNxOxPxQxRxSxTxegfggghgigjgkglgUxVxWxXxYxibZx0x1x2xOl3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,ySkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzez
1653 return devices 2a ]gNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAuBuCu$f%fDu'f(f)f*f+f,fEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`f)pV l W m KoX n Y o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,p- J ubvb. K / L No: M JrwbKrxbybzbAbBb(nGuHuIuJuKuLuMuNuOoalblcldlelfl[kgl]k^khl,kilwn0m~ amGmOuPuQuRuSuTuUuVuWuXuYuZu0u-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2unm`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}f*n3u+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEf'ifq4u5u6u7u8uWz9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;uDo=u7e?u@u[uAegqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc~f{u|u}u~uavbvcvdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|wag}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxbgcgdgHxIxJxKxLxMxNxOxPxQxRxSxTxegfggghgigjgkglgUxVxWxXxYxibZx0x1x2xOl3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,ySkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzez