Coverage for cuda/core/_device.pyx: 92.81%
459 statements
« prev ^ index » next coverage.py v7.15.0, created at 2026-07-03 01:38 +0000
« prev ^ index » next coverage.py v7.15.0, created at 2026-07-03 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
48# TODO: I prefer to type these as "cdef object" and avoid accessing them from within Python,
49# but it seems it is very convenient to expose them for testing purposes...
50_tls = threading.local()
51_lock = threading.Lock()
52cdef bint _is_cuInit = False
55cdef class DeviceProperties:
56 """
57 A class to query various attributes of a CUDA device.
59 Attributes are read-only and provide information about the device.
60 """
61 cdef:
62 int _handle
63 dict _cache
65 def __init__(self, *args, **kwargs) -> None:
66 raise RuntimeError("DeviceProperties cannot be instantiated directly. Please use Device APIs.") 2PH
68 @classmethod
69 def _init(cls, handle: int) -> DeviceProperties:
70 cdef DeviceProperties self = DeviceProperties.__new__(cls) 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7kmqnqzyAyByCyDy8g9g!g#g$g%gEyGpHpIpJpTl$p%pUlVlWlXlYlKpLpMpNpOpPpQpRp'pFyGyHyIyJyKyuovo%e4e8d'gReSe(gAd)g*g+g,g-g'e5e9d.gTeUe/gBd:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhch(e6e!ddhVeWeehCdfhghhhihjh)e7e#dkhXeYelhDdmhnhohphqh*e8e$dwoZe0erhEdshthuhvhwh+e9e%dxh1e2eyhFdzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVh(pLyMyxo)pSp*pyozoAoBoCoDoEoFoGoHoIoJozkAklnmn,kZl0lKo1l2l3l4l5l6lWhXh8k^k7l_k`k{k|k}k9k,e-e.e/e:e;e=eDm?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfk vgm l 0j(j)j*j+j,joq-j8j.jTp9j/j1jI Blqlb GdHd~AaB:jn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdf~krlLoukYh8lsl9lCl!lDltl#l$lBk!k#k-kElZhulFl0h1hGlHl2hvlBgIl3hWxXx%lYx'lZx(l)l0xJl1x4hKlCg*l5h+l,l6h7hLlDg-l8h.l/lMl9hwl3eCk5f.k2x$k3x%k'd(dUp'kxlEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#A9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h)d#h$hLc*d%h'hMcNc(h+d)h*hOc,d+h,hPcId6f7fEg-h.h/hJdFgGg:h;hS g T U c h V W d X Y -d.d/d:d;d=h=d?h@h?d[h]hbg) cgdgJ * egfgK Mes NeOeo t PeQep HgKd8f9fIg^h_h`hLdJgKg{h|h!fZ #f$fv 0 %f'fw Md(f)f}h~haiLgMgbicidi@deifi[dgihi+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|djiki0c}dlimi1cRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiziaeAiBigg[ hgigL ] jgkgM OgTdPgQg%cUdRgSg'cVd.f/fTgCiDiEiWdUgVgFiGi3 i 4 5 e j 6 7 f 8 9 becedeeefeHigeIiJiheKiLilg^ mgngN _ ogpgO wg(cxgyg! )czgAg# WgXd:f;fXgMiNiOiYdYgZgPiQi=f$ ?f@fB % [f]fC Zd^f_fRiSiTi0g1gUiViWiieXiYijeZi0i` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipe2i3i@cqe4i5i[c4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i+ise,i-iqgfbrgsgP gbtgugQ q r H u dded.ite/i:ifdue;i=igdhdidjd3g6d4g5gkd7d6g7gld?ive@i[imdwe]i^ind_ixe`i{iodye|i}ipd~izeajbjqdAecjdjrdejBefjgjsdCehjijtdjjDekjljudEemjnjvdwdojFepjqjxdGerjsjydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f
71 self._handle = handle 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7kmqnqzyAyByCyDy8g9g!g#g$g%gEyGpHpIpJpTl$p%pUlVlWlXlYlKpLpMpNpOpPpQpRp'pFyGyHyIyJyKyuovo%e4e8d'gReSe(gAd)g*g+g,g-g'e5e9d.gTeUe/gBd:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhch(e6e!ddhVeWeehCdfhghhhihjh)e7e#dkhXeYelhDdmhnhohphqh*e8e$dwoZe0erhEdshthuhvhwh+e9e%dxh1e2eyhFdzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVh(pLyMyxo)pSp*pyozoAoBoCoDoEoFoGoHoIoJozkAklnmn,kZl0lKo1l2l3l4l5l6lWhXh8k^k7l_k`k{k|k}k9k,e-e.e/e:e;e=eDm?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfk vgm l 0j(j)j*j+j,joq-j8j.jTp9j/j1jI Blqlb GdHd~AaB:jn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdf~krlLoukYh8lsl9lCl!lDltl#l$lBk!k#k-kElZhulFl0h1hGlHl2hvlBgIl3hWxXx%lYx'lZx(l)l0xJl1x4hKlCg*l5h+l,l6h7hLlDg-l8h.l/lMl9hwl3eCk5f.k2x$k3x%k'd(dUp'kxlEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#A9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h)d#h$hLc*d%h'hMcNc(h+d)h*hOc,d+h,hPcId6f7fEg-h.h/hJdFgGg:h;hS g T U c h V W d X Y -d.d/d:d;d=h=d?h@h?d[h]hbg) cgdgJ * egfgK Mes NeOeo t PeQep HgKd8f9fIg^h_h`hLdJgKg{h|h!fZ #f$fv 0 %f'fw Md(f)f}h~haiLgMgbicidi@deifi[dgihi+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|djiki0c}dlimi1cRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiziaeAiBigg[ hgigL ] jgkgM OgTdPgQg%cUdRgSg'cVd.f/fTgCiDiEiWdUgVgFiGi3 i 4 5 e j 6 7 f 8 9 becedeeefeHigeIiJiheKiLilg^ mgngN _ ogpgO wg(cxgyg! )czgAg# WgXd:f;fXgMiNiOiYdYgZgPiQi=f$ ?f@fB % [f]fC Zd^f_fRiSiTi0g1gUiViWiieXiYijeZi0i` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipe2i3i@cqe4i5i[c4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i+ise,i-iqgfbrgsgP gbtgugQ q r H u dded.ite/i:ifdue;i=igdhdidjd3g6d4g5gkd7d6g7gld?ive@i[imdwe]i^ind_ixe`i{iodye|i}ipd~izeajbjqdAecjdjrdejBefjgjsdCehjijtdjjDekjljudEemjnjvdwdojFepjqjxdGerjsjydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f
72 self._cache = {} 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7kmqnqzyAyByCyDy8g9g!g#g$g%gEyGpHpIpJpTl$p%pUlVlWlXlYlKpLpMpNpOpPpQpRp'pFyGyHyIyJyKyuovo%e4e8d'gReSe(gAd)g*g+g,g-g'e5e9d.gTeUe/gBd:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhch(e6e!ddhVeWeehCdfhghhhihjh)e7e#dkhXeYelhDdmhnhohphqh*e8e$dwoZe0erhEdshthuhvhwh+e9e%dxh1e2eyhFdzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVh(pLyMyxo)pSp*pyozoAoBoCoDoEoFoGoHoIoJozkAklnmn,kZl0lKo1l2l3l4l5l6lWhXh8k^k7l_k`k{k|k}k9k,e-e.e/e:e;e=eDm?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfk vgm l 0j(j)j*j+j,joq-j8j.jTp9j/j1jI Blqlb GdHd~AaB:jn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdf~krlLoukYh8lsl9lCl!lDltl#l$lBk!k#k-kElZhulFl0h1hGlHl2hvlBgIl3hWxXx%lYx'lZx(l)l0xJl1x4hKlCg*l5h+l,l6h7hLlDg-l8h.l/lMl9hwl3eCk5f.k2x$k3x%k'd(dUp'kxlEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#A9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h)d#h$hLc*d%h'hMcNc(h+d)h*hOc,d+h,hPcId6f7fEg-h.h/hJdFgGg:h;hS g T U c h V W d X Y -d.d/d:d;d=h=d?h@h?d[h]hbg) cgdgJ * egfgK Mes NeOeo t PeQep HgKd8f9fIg^h_h`hLdJgKg{h|h!fZ #f$fv 0 %f'fw Md(f)f}h~haiLgMgbicidi@deifi[dgihi+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|djiki0c}dlimi1cRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiziaeAiBigg[ hgigL ] jgkgM OgTdPgQg%cUdRgSg'cVd.f/fTgCiDiEiWdUgVgFiGi3 i 4 5 e j 6 7 f 8 9 becedeeefeHigeIiJiheKiLilg^ mgngN _ ogpgO wg(cxgyg! )czgAg# WgXd:f;fXgMiNiOiYdYgZgPiQi=f$ ?f@fB % [f]fC Zd^f_fRiSiTi0g1gUiViWiieXiYijeZi0i` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipe2i3i@cqe4i5i[c4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i+ise,i-iqgfbrgsgP gbtgugQ q r H u dded.ite/i:ifdue;i=igdhdidjd3g6d4g5gkd7d6g7gld?ive@i[imdwe]i^ind_ixe`i{iodye|i}ipd~izeajbjqdAecjdjrdejBefjgjsdCehjijtdjjDekjljudEemjnjvdwdojFepjqjxdGerjsjydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f
73 return self 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7kmqnqzyAyByCyDy8g9g!g#g$g%gEyGpHpIpJpTl$p%pUlVlWlXlYlKpLpMpNpOpPpQpRp'pFyGyHyIyJyKyuovo%e4e8d'gReSe(gAd)g*g+g,g-g'e5e9d.gTeUe/gBd:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhch(e6e!ddhVeWeehCdfhghhhihjh)e7e#dkhXeYelhDdmhnhohphqh*e8e$dwoZe0erhEdshthuhvhwh+e9e%dxh1e2eyhFdzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVh(pLyMyxo)pSp*pyozoAoBoCoDoEoFoGoHoIoJozkAklnmn,kZl0lKo1l2l3l4l5l6lWhXh8k^k7l_k`k{k|k}k9k,e-e.e/e:e;e=eDm?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfk vgm l 0j(j)j*j+j,joq-j8j.jTp9j/j1jI Blqlb GdHd~AaB:jn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdf~krlLoukYh8lsl9lCl!lDltl#l$lBk!k#k-kElZhulFl0h1hGlHl2hvlBgIl3hWxXx%lYx'lZx(l)l0xJl1x4hKlCg*l5h+l,l6h7hLlDg-l8h.l/lMl9hwl3eCk5f.k2x$k3x%k'd(dUp'kxlEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#A9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h)d#h$hLc*d%h'hMcNc(h+d)h*hOc,d+h,hPcId6f7fEg-h.h/hJdFgGg:h;hS g T U c h V W d X Y -d.d/d:d;d=h=d?h@h?d[h]hbg) cgdgJ * egfgK Mes NeOeo t PeQep HgKd8f9fIg^h_h`hLdJgKg{h|h!fZ #f$fv 0 %f'fw Md(f)f}h~haiLgMgbicidi@deifi[dgihi+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|djiki0c}dlimi1cRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiziaeAiBigg[ hgigL ] jgkgM OgTdPgQg%cUdRgSg'cVd.f/fTgCiDiEiWdUgVgFiGi3 i 4 5 e j 6 7 f 8 9 becedeeefeHigeIiJiheKiLilg^ mgngN _ ogpgO wg(cxgyg! )czgAg# WgXd:f;fXgMiNiOiYdYgZgPiQi=f$ ?f@fB % [f]fC Zd^f_fRiSiTi0g1gUiViWiieXiYijeZi0i` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipe2i3i@cqe4i5i[c4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i+ise,i-iqgfbrgsgP gbtgugQ q r H u dded.ite/i:ifdue;i=igdhdidjd3g6d4g5gkd7d6g7gld?ive@i[imdwe]i^ind_ixe`i{iodye|i}ipd~izeajbjqdAecjdjrdejBefjgjsdCehjijtdjjDekjljudEemjnjvdwdojFepjqjxdGerjsjydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f
75 cdef inline int _get_attribute(self, cydriver.CUdevice_attribute attr, default=0) except? -2:
76 """Retrieve the attribute value directly from the driver."""
77 cdef int val
78 cdef cydriver.CUresult err
79 with nogil: 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kmqnqzyAyByCyDy8g9g!g#g$g%gEyGpHpIpJpTl$p%pUlVlWlXlYlKpLpMpNpOpPpQpRp'pFyGyHyIyJyKyuovo%e4e8d'gReSe(gAd)g*g+g,g-g'e5e9d.gTeUe/gBd:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhch(e6e!ddhVeWeehCdfhghhhihjh)e7e#dkhXeYelhDdmhnhohphqh*e8e$dwoZe0erhEdshthuhvhwh+e9e%dxh1e2eyhFdzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVh(pLyMyxo)pSp*pyozoAoBoCoDoEoFoGoHoIoJozkAklnmn,kZl0lKo1l2l3l4l5l6lNl/kWhXh8k^k7l_k`k{k|k}k9k,eMo-e.e/e:e;e=eDm?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbftj4xk vg;jm l NoVpNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEzI Blqlb GdHd~AaB:jn hbibjbOlkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndf~krlLoukYh8lsl9lCl!lDltl#l$lBk!k#k-kElZhulFl0hWp1hGlHl2hvlBgIl3hWxXpXx%lYx'lZx(lPz)l0xJl1xYpQz+p4hKlCg*l5h+l=j,l6h7hLlDg-lvk8h.l/lMlZp9hwl3e0pCk5f.k2x$kWm3x%k'd(dUp'kxlEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#Amy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`b{b|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h)d#h$hLc*d%h'hMcNc(h+d)h*hOc,d+h,hPcId6f7fEg-h.h/hJdFgGg:h;hS g T U c h V W d X Y -d.d/d:d;d=h=d?h@h?d[h]hbg) cgdgJ * egfgK Mes NeOeo t PeQep HgKd8f9fIg^h_h`hLdJgKg{h|h!fZ #f$fv 0 %f'fw Md(f)f}h~haiLgMgbicidi@deifi[dgihi+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|djiki0c}dlimi1cRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiziaeAiBigg[ hgigL ] jgkgM OgTdPgQg%cUdRgSg'cVd.f/fTgCiDiEiWdUgVgFiGi3 i 4 5 e j 6 7 f 8 9 becedeeefeHigeIiJiheKiLilg^ mgngN _ ogpgO wg(cxgyg! )czgAg# WgXd:f;fXgMiNiOiYdYgZgPiQi=f$ ?f@fB % [f]fC Zd^f_fRiSiTi0g1gUiViWiieXiYijeZi0i` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipe2i3i@cqe4i5i[c4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i+ise,i-iqgfbrgsgP gbtgugQ q r H u dded.ite/i:ifdue;i=igdhdidjd3g6d4g5gkd7d6g7gld?ive@i[imdwe]i^ind_ixe`i{iodye|i}ipd~izeajbjqdAecjdjrdejBefjgjsdCehjijtdjjDekjljudEemjnjvdwdojFepjqjxdGerjsjydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f
80 err = cydriver.cuDeviceGetAttribute(&val, attr, self._handle) 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kmqnqzyAyByCyDy8g9g!g#g$g%gEyGpHpIpJpTl$p%pUlVlWlXlYlKpLpMpNpOpPpQpRp'pFyGyHyIyJyKyuovo%e4e8d'gReSe(gAd)g*g+g,g-g'e5e9d.gTeUe/gBd:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhch(e6e!ddhVeWeehCdfhghhhihjh)e7e#dkhXeYelhDdmhnhohphqh*e8e$dwoZe0erhEdshthuhvhwh+e9e%dxh1e2eyhFdzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVh(pLyMyxo)pSp*pyozoAoBoCoDoEoFoGoHoIoJozkAklnmn,kZl0lKo1l2l3l4l5l6lNl/kWhXh8k^k7l_k`k{k|k}k9k,eMo-e.e/e:e;e=eDm?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbftj4xk vg;jm l NoVpNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEzI Blqlb GdHd~AaB:jn hbibjbOlkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndf~krlLoukYh8lsl9lCl!lDltl#l$lBk!k#k-kElZhulFl0hWp1hGlHl2hvlBgIl3hWxXpXx%lYx'lZx(lPz)l0xJl1xYpQz+p4hKlCg*l5h+l=j,l6h7hLlDg-lvk8h.l/lMlZp9hwl3e0pCk5f.k2x$kWm3x%k'd(dUp'kxlEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#Amy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`b{b|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h)d#h$hLc*d%h'hMcNc(h+d)h*hOc,d+h,hPcId6f7fEg-h.h/hJdFgGg:h;hS g T U c h V W d X Y -d.d/d:d;d=h=d?h@h?d[h]hbg) cgdgJ * egfgK Mes NeOeo t PeQep HgKd8f9fIg^h_h`hLdJgKg{h|h!fZ #f$fv 0 %f'fw Md(f)f}h~haiLgMgbicidi@deifi[dgihi+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|djiki0c}dlimi1cRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiziaeAiBigg[ hgigL ] jgkgM OgTdPgQg%cUdRgSg'cVd.f/fTgCiDiEiWdUgVgFiGi3 i 4 5 e j 6 7 f 8 9 becedeeefeHigeIiJiheKiLilg^ mgngN _ ogpgO wg(cxgyg! )czgAg# WgXd:f;fXgMiNiOiYdYgZgPiQi=f$ ?f@fB % [f]fC Zd^f_fRiSiTi0g1gUiViWiieXiYijeZi0i` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipe2i3i@cqe4i5i[c4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i+ise,i-iqgfbrgsgP gbtgugQ q r H u dded.ite/i:ifdue;i=igdhdidjd3g6d4g5gkd7d6g7gld?ive@i[imdwe]i^ind_ixe`i{iodye|i}ipd~izeajbjqdAecjdjrdejBefjgjsdCehjijtdjjDekjljudEemjnjvdwdojFepjqjxdGerjsjydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f
81 if err == cydriver.CUresult.CUDA_ERROR_INVALID_VALUE and default is not None: 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kmqnqzyAyByCyDy8g9g!g#g$g%gEyGpHpIpJpTl$p%pUlVlWlXlYlKpLpMpNpOpPpQpRp'pFyGyHyIyJyKyuovo%e4e8d'gReSe(gAd)g*g+g,g-g'e5e9d.gTeUe/gBd:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhch(e6e!ddhVeWeehCdfhghhhihjh)e7e#dkhXeYelhDdmhnhohphqh*e8e$dwoZe0erhEdshthuhvhwh+e9e%dxh1e2eyhFdzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVh(pLyMyxo)pSp*pyozoAoBoCoDoEoFoGoHoIoJozkAklnmn,kZl0lKo1l2l3l4l5l6lNl/kWhXh8k^k7l_k`k{k|k}k9k,eMo-e.e/e:e;e=eDm?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbftj4xk vg;jm l NoVpNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEzI Blqlb GdHd~AaB:jn hbibjbOlkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndf~krlLoukYh8lsl9lCl!lDltl#l$lBk!k#k-kElZhulFl0hWp1hGlHl2hvlBgIl3hWxXpXx%lYx'lZx(lPz)l0xJl1xYpQz+p4hKlCg*l5h+l=j,l6h7hLlDg-lvk8h.l/lMlZp9hwl3e0pCk5f.k2x$kWm3x%k'd(dUp'kxlEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#Amy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`b{b|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h)d#h$hLc*d%h'hMcNc(h+d)h*hOc,d+h,hPcId6f7fEg-h.h/hJdFgGg:h;hS g T U c h V W d X Y -d.d/d:d;d=h=d?h@h?d[h]hbg) cgdgJ * egfgK Mes NeOeo t PeQep HgKd8f9fIg^h_h`hLdJgKg{h|h!fZ #f$fv 0 %f'fw Md(f)f}h~haiLgMgbicidi@deifi[dgihi+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|djiki0c}dlimi1cRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiziaeAiBigg[ hgigL ] jgkgM OgTdPgQg%cUdRgSg'cVd.f/fTgCiDiEiWdUgVgFiGi3 i 4 5 e j 6 7 f 8 9 becedeeefeHigeIiJiheKiLilg^ mgngN _ ogpgO wg(cxgyg! )czgAg# WgXd:f;fXgMiNiOiYdYgZgPiQi=f$ ?f@fB % [f]fC Zd^f_fRiSiTi0g1gUiViWiieXiYijeZi0i` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipe2i3i@cqe4i5i[c4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i+ise,i-iqgfbrgsgP gbtgugQ q r H u dded.ite/i:ifdue;i=igdhdidjd3g6d4g5gkd7d6g7gld?ive@i[imdwe]i^ind_ixe`i{iodye|i}ipd~izeajbjqdAecjdjrdejBefjgjsdCehjijtdjjDekjljudEemjnjvdwdojFepjqjxdGerjsjydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f
82 return <int>default
83 HANDLE_RETURN(err) 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kmqnqzyAyByCyDy8g9g!g#g$g%gEyGpHpIpJpTl$p%pUlVlWlXlYlKpLpMpNpOpPpQpRp'pFyGyHyIyJyKyuovo%e4e8d'gReSe(gAd)g*g+g,g-g'e5e9d.gTeUe/gBd:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhch(e6e!ddhVeWeehCdfhghhhihjh)e7e#dkhXeYelhDdmhnhohphqh*e8e$dwoZe0erhEdshthuhvhwh+e9e%dxh1e2eyhFdzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVh(pLyMyxo)pSp*pyozoAoBoCoDoEoFoGoHoIoJozkAklnmn,kZl0lKo1l2l3l4l5l6lNl/kWhXh8k^k7l_k`k{k|k}k9k,eMo-e.e/e:e;e=eDm?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbftj4xk vg;jm l NoVpNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEzI Blqlb GdHd~AaB:jn hbibjbOlkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndf~krlLoukYh8lsl9lCl!lDltl#l$lBk!k#k-kElZhulFl0hWp1hGlHl2hvlBgIl3hWxXpXx%lYx'lZx(lPz)l0xJl1xYpQz+p4hKlCg*l5h+l=j,l6h7hLlDg-lvk8h.l/lMlZp9hwl3e0pCk5f.k2x$kWm3x%k'd(dUp'kxlEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#Amy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`b{b|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h)d#h$hLc*d%h'hMcNc(h+d)h*hOc,d+h,hPcId6f7fEg-h.h/hJdFgGg:h;hS g T U c h V W d X Y -d.d/d:d;d=h=d?h@h?d[h]hbg) cgdgJ * egfgK Mes NeOeo t PeQep HgKd8f9fIg^h_h`hLdJgKg{h|h!fZ #f$fv 0 %f'fw Md(f)f}h~haiLgMgbicidi@deifi[dgihi+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|djiki0c}dlimi1cRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiziaeAiBigg[ hgigL ] jgkgM OgTdPgQg%cUdRgSg'cVd.f/fTgCiDiEiWdUgVgFiGi3 i 4 5 e j 6 7 f 8 9 becedeeefeHigeIiJiheKiLilg^ mgngN _ ogpgO wg(cxgyg! )czgAg# WgXd:f;fXgMiNiOiYdYgZgPiQi=f$ ?f@fB % [f]fC Zd^f_fRiSiTi0g1gUiViWiieXiYijeZi0i` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipe2i3i@cqe4i5i[c4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i+ise,i-iqgfbrgsgP gbtgugQ q r H u dded.ite/i:ifdue;i=igdhdidjd3g6d4g5gkd7d6g7gld?ive@i[imdwe]i^ind_ixe`i{iodye|i}ipd~izeajbjqdAecjdjrdejBefjgjsdCehjijtdjjDekjljudEemjnjvdwdojFepjqjxdGerjsjydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f
84 return val 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kmqnqzyAyByCyDy8g9g!g#g$g%gEyGpHpIpJpTl$p%pUlVlWlXlYlKpLpMpNpOpPpQpRp'pFyGyHyIyJyKyuovo%e4e8d'gReSe(gAd)g*g+g,g-g'e5e9d.gTeUe/gBd:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhch(e6e!ddhVeWeehCdfhghhhihjh)e7e#dkhXeYelhDdmhnhohphqh*e8e$dwoZe0erhEdshthuhvhwh+e9e%dxh1e2eyhFdzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVh(pLyMyxo)pSp*pyozoAoBoCoDoEoFoGoHoIoJozkAklnmn,kZl0lKo1l2l3l4l5l6lNl/kWhXh8k^k7l_k`k{k|k}k9k,eMo-e.e/e:e;e=eDm?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbftj4xk vg;jm l NoVpNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEzI Blqlb GdHd~AaB:jn hbibjbOlkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndf~krlLoukYh8lsl9lCl!lDltl#l$lBk!k#k-kElZhulFl0hWp1hGlHl2hvlBgIl3hWxXpXx%lYx'lZx(lPz)l0xJl1xYpQz+p4hKlCg*l5h+l=j,l6h7hLlDg-lvk8h.l/lMlZp9hwl3e0pCk5f.k2x$kWm3x%k'd(dUp'kxlEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#Amy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`b{b|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h)d#h$hLc*d%h'hMcNc(h+d)h*hOc,d+h,hPcId6f7fEg-h.h/hJdFgGg:h;hS g T U c h V W d X Y -d.d/d:d;d=h=d?h@h?d[h]hbg) cgdgJ * egfgK Mes NeOeo t PeQep HgKd8f9fIg^h_h`hLdJgKg{h|h!fZ #f$fv 0 %f'fw Md(f)f}h~haiLgMgbicidi@deifi[dgihi+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|djiki0c}dlimi1cRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiziaeAiBigg[ hgigL ] jgkgM OgTdPgQg%cUdRgSg'cVd.f/fTgCiDiEiWdUgVgFiGi3 i 4 5 e j 6 7 f 8 9 becedeeefeHigeIiJiheKiLilg^ mgngN _ ogpgO wg(cxgyg! )czgAg# WgXd:f;fXgMiNiOiYdYgZgPiQi=f$ ?f@fB % [f]fC Zd^f_fRiSiTi0g1gUiViWiieXiYijeZi0i` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipe2i3i@cqe4i5i[c4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i+ise,i-iqgfbrgsgP gbtgugQ q r H u dded.ite/i:ifdue;i=igdhdidjd3g6d4g5gkd7d6g7gld?ive@i[imdwe]i^ind_ixe`i{iodye|i}ipd~izeajbjqdAecjdjrdejBefjgjsdCehjijtdjjDekjljudEemjnjvdwdojFepjqjxdGerjsjydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f
86 cdef inline int _get_cached_attribute(self, attr, default=0) except? -2:
87 """Retrieve the attribute value, using cache if applicable."""
88 cached = self._cache.get(attr) 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kmqnqzyAyByCyDy8g9g!g#g$g%gEyGpHpIpJpTl$p%pUlVlWlXlYlKpLpMpNpOpPpQpRp'pFyGyHyIyJyKyuovo%e4e8d'gReSe(gAd)g*g+g,g-g'e5e9d.gTeUe/gBd:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhch(e6e!ddhVeWeehCdfhghhhihjh)e7e#dkhXeYelhDdmhnhohphqh*e8e$dwoZe0erhEdshthuhvhwh+e9e%dxh1e2eyhFdzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVh(pLyMyxo)pSp*pyozoAoBoCoDoEoFoGoHoIoJozkAklnmn,kZl0lKo1l2l3l4l5l6lxAyAzAAABACADANlEAFA/kGAHAIAJAKALAMANAOAPAWhQARASAXh8k^k7l_k`k{k|k}k9k,eMo-e.e/e:e;e=eDm?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbf,p=l-p?l.p@l/p[l:p]l;p^l=p4xk xxyxzxAxBxCxDxExFxGxHxvg;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql gqjmIxJxhqkmiqlmjqmmKxLxMxNxOxPxNoVpNyOyPyQy(x5x)xRySyTy*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkzlz.jmznzozpzqzrzsz$xtzTpuzvzwziyjyky9jxz/jlyyzzz1jAzBzCz%xDzEzI Blqlb GdHd~AaB:jn hbibjbOlkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndf~krlLoukTAYh8lsl9lCl!lDltl#l$lBk!k#k-kElZhulPlFl0hWp1hGlnmHl2hvlBgIl3hUzWxXpXx%lYx'lZx(lPz)l0xJl1xYpQz+p4hKlCg*l5h+l=j,l6hVz7hLlDg-lvk8h.l/lsyMlZp9hwl3e0pCk5f.k2x$kWm3x%k'd(dUp'kxlEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#Amy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`b{b|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcQxRxSxUAR !h)d#h$hLc*d%h'hMcNc(h+d)h*hOc,d+h,hPcId6f7fEg-h.h/hJdFgGg:h;hS g T U c h V W d X Y -d.d/d:d;d=h=d?h@h?d[h]hbg) cgdgJ * egfgK Mes NeOeo t PeQep HgKd8f9fIg^h_h`hLdJgKg{h|h!fZ #f$fv 0 %f'fw Md(f)f}h~haiLgMgbicidi@deifi[dgihi+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|djiki0c}dlimi1cRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiziaeAiBigg[ hgigL ] jgkgM OgTdPgQg%cUdRgSg'cVd.f/fTgCiDiEiWdUgVgFiGi3 i 4 5 e j 6 7 f 8 9 becedeeefeHigeIiJiheKiLilg^ mgngN _ ogpgO wg(cxgyg! )czgAg# WgXd:f;fXgMiNiOiYdYgZgPiQi=f$ ?f@fB % [f]fC Zd^f_fRiSiTi0g1gUiViWiieXiYijeZi0i` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipe2i3i@cqe4i5i[c4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i+ise,i-iqgfbrgsgP gbtgugQ q r H u dded.ite/i:ifdue;i=igdhdidjd3g6d4g5gkd7d6g7gld?ive@i[imdwe]i^ind_ixe`i{iodye|i}ipd~izeajbjqdAecjdjrdejBefjgjsdCehjijtdjjDekjljudEemjnjvdwdojFepjqjxdGerjsjydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsf{BtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f
89 if cached is not None: 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kmqnqzyAyByCyDy8g9g!g#g$g%gEyGpHpIpJpTl$p%pUlVlWlXlYlKpLpMpNpOpPpQpRp'pFyGyHyIyJyKyuovo%e4e8d'gReSe(gAd)g*g+g,g-g'e5e9d.gTeUe/gBd:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhch(e6e!ddhVeWeehCdfhghhhihjh)e7e#dkhXeYelhDdmhnhohphqh*e8e$dwoZe0erhEdshthuhvhwh+e9e%dxh1e2eyhFdzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVh(pLyMyxo)pSp*pyozoAoBoCoDoEoFoGoHoIoJozkAklnmn,kZl0lKo1l2l3l4l5l6lxAyAzAAABACADANlEAFA/kGAHAIAJAKALAMANAOAPAWhQARASAXh8k^k7l_k`k{k|k}k9k,eMo-e.e/e:e;e=eDm?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbf,p=l-p?l.p@l/p[l:p]l;p^l=p4xk xxyxzxAxBxCxDxExFxGxHxvg;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql gqjmIxJxhqkmiqlmjqmmKxLxMxNxOxPxNoVpNyOyPyQy(x5x)xRySyTy*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkzlz.jmznzozpzqzrzsz$xtzTpuzvzwziyjyky9jxz/jlyyzzz1jAzBzCz%xDzEzI Blqlb GdHd~AaB:jn hbibjbOlkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndf~krlLoukTAYh8lsl9lCl!lDltl#l$lBk!k#k-kElZhulPlFl0hWp1hGlnmHl2hvlBgIl3hUzWxXpXx%lYx'lZx(lPz)l0xJl1xYpQz+p4hKlCg*l5h+l=j,l6hVz7hLlDg-lvk8h.l/lsyMlZp9hwl3e0pCk5f.k2x$kWm3x%k'd(dUp'kxlEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#Amy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`b{b|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcQxRxSxUAR !h)d#h$hLc*d%h'hMcNc(h+d)h*hOc,d+h,hPcId6f7fEg-h.h/hJdFgGg:h;hS g T U c h V W d X Y -d.d/d:d;d=h=d?h@h?d[h]hbg) cgdgJ * egfgK Mes NeOeo t PeQep HgKd8f9fIg^h_h`hLdJgKg{h|h!fZ #f$fv 0 %f'fw Md(f)f}h~haiLgMgbicidi@deifi[dgihi+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|djiki0c}dlimi1cRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiziaeAiBigg[ hgigL ] jgkgM OgTdPgQg%cUdRgSg'cVd.f/fTgCiDiEiWdUgVgFiGi3 i 4 5 e j 6 7 f 8 9 becedeeefeHigeIiJiheKiLilg^ mgngN _ ogpgO wg(cxgyg! )czgAg# WgXd:f;fXgMiNiOiYdYgZgPiQi=f$ ?f@fB % [f]fC Zd^f_fRiSiTi0g1gUiViWiieXiYijeZi0i` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipe2i3i@cqe4i5i[c4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i+ise,i-iqgfbrgsgP gbtgugQ q r H u dded.ite/i:ifdue;i=igdhdidjd3g6d4g5gkd7d6g7gld?ive@i[imdwe]i^ind_ixe`i{iodye|i}ipd~izeajbjqdAecjdjrdejBefjgjsdCehjijtdjjDekjljudEemjnjvdwdojFepjqjxdGerjsjydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsf{BtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f
90 return cached 24e5e6e7e8e9exAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASALe,p=l-p?l.p@l/p[l:p]l;p^l=pk xxyxzxAxBxCxDxExFxGxHxvg;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmemfmcqgmdqhmeqimfql gqjmIxJxhqkmiqlmjqmmKxLxMxNxOxPxn nnTAtlPlnmUzPzYpQz=jVzsy$k%k'd(dUp'kRzSzTzQxRxSxUAEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g{B
91 cdef int value = self._get_attribute(attr, default) 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kmqnqzyAyByCyDy8g9g!g#g$g%gEyGpHpIpJpTl$p%pUlVlWlXlYlKpLpMpNpOpPpQpRp'pFyGyHyIyJyKyuovo%e4e8d'gReSe(gAd)g*g+g,g-g'e5e9d.gTeUe/gBd:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhch(e6e!ddhVeWeehCdfhghhhihjh)e7e#dkhXeYelhDdmhnhohphqh*e8e$dwoZe0erhEdshthuhvhwh+e9e%dxh1e2eyhFdzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVh(pLyMyxo)pSp*pyozoAoBoCoDoEoFoGoHoIoJozkAklnmn,kZl0lKo1l2l3l4l5l6lNl/kWhXh8k^k7l_k`k{k|k}k9k,eMo-e.e/e:e;e=eDm?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbf4xk vg;jm l NoVpNyOyPyQy(x5x)xRySyTy*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkzlz.jmznzozpzqzrzsz$xtzTpuzvzwziyjyky9jxz/jlyyzzz1jAzBzCz%xDzEzI Blqlb GdHd~AaB:jn hbibjbOlkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndf~krlLoukYh8lsl9lCl!lDltl#l$lBk!k#k-kElZhulFl0hWp1hGlHl2hvlBgIl3hWxXpXx%lYx'lZx(lPz)l0xJl1xYpQz+p4hKlCg*l5h+l=j,l6h7hLlDg-lvk8h.l/lMlZp9hwl3e0pCk5f.k2x$kWm3x%k'd(dUp'kxlEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#Amy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`b{b|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h)d#h$hLc*d%h'hMcNc(h+d)h*hOc,d+h,hPcId6f7fEg-h.h/hJdFgGg:h;hS g T U c h V W d X Y -d.d/d:d;d=h=d?h@h?d[h]hbg) cgdgJ * egfgK Mes NeOeo t PeQep HgKd8f9fIg^h_h`hLdJgKg{h|h!fZ #f$fv 0 %f'fw Md(f)f}h~haiLgMgbicidi@deifi[dgihi+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|djiki0c}dlimi1cRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiziaeAiBigg[ hgigL ] jgkgM OgTdPgQg%cUdRgSg'cVd.f/fTgCiDiEiWdUgVgFiGi3 i 4 5 e j 6 7 f 8 9 becedeeefeHigeIiJiheKiLilg^ mgngN _ ogpgO wg(cxgyg! )czgAg# WgXd:f;fXgMiNiOiYdYgZgPiQi=f$ ?f@fB % [f]fC Zd^f_fRiSiTi0g1gUiViWiieXiYijeZi0i` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipe2i3i@cqe4i5i[c4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i+ise,i-iqgfbrgsgP gbtgugQ q r H u dded.ite/i:ifdue;i=igdhdidjd3g6d4g5gkd7d6g7gld?ive@i[imdwe]i^ind_ixe`i{iodye|i}ipd~izeajbjqdAecjdjrdejBefjgjsdCehjijtdjjDekjljudEemjnjvdwdojFepjqjxdGerjsjydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f
92 self._cache[attr] = value # setdefault not needed for ints 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kmqnqzyAyByCyDy8g9g!g#g$g%gEyGpHpIpJpTl$p%pUlVlWlXlYlKpLpMpNpOpPpQpRp'pFyGyHyIyJyKyuovo%e4e8d'gReSe(gAd)g*g+g,g-g'e5e9d.gTeUe/gBd:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhch(e6e!ddhVeWeehCdfhghhhihjh)e7e#dkhXeYelhDdmhnhohphqh*e8e$dwoZe0erhEdshthuhvhwh+e9e%dxh1e2eyhFdzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVh(pLyMyxo)pSp*pyozoAoBoCoDoEoFoGoHoIoJozkAklnmn,kZl0lKo1l2l3l4l5l6lNl/kWhXh8k^k7l_k`k{k|k}k9k,eMo-e.e/e:e;e=eDm?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbf4xk vg;jm l NoVpNyOyPyQy(x5x)xRySyTy*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkzlz.jmznzozpzqzrzsz$xtzTpuzvzwziyjyky9jxz/jlyyzzz1jAzBzCz%xDzEzI Blqlb GdHd~AaB:jn hbibjbOlkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndf~krlLoukYh8lsl9lCl!lDltl#l$lBk!k#k-kElZhulFl0hWp1hGlHl2hvlBgIl3hWxXpXx%lYx'lZx(lPz)l0xJl1xYpQz+p4hKlCg*l5h+l=j,l6h7hLlDg-lvk8h.l/lMlZp9hwl3e0pCk5f.k2x$kWm3x%k'd(dUp'kxlEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#Amy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`b{b|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h)d#h$hLc*d%h'hMcNc(h+d)h*hOc,d+h,hPcId6f7fEg-h.h/hJdFgGg:h;hS g T U c h V W d X Y -d.d/d:d;d=h=d?h@h?d[h]hbg) cgdgJ * egfgK Mes NeOeo t PeQep HgKd8f9fIg^h_h`hLdJgKg{h|h!fZ #f$fv 0 %f'fw Md(f)f}h~haiLgMgbicidi@deifi[dgihi+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|djiki0c}dlimi1cRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiziaeAiBigg[ hgigL ] jgkgM OgTdPgQg%cUdRgSg'cVd.f/fTgCiDiEiWdUgVgFiGi3 i 4 5 e j 6 7 f 8 9 becedeeefeHigeIiJiheKiLilg^ mgngN _ ogpgO wg(cxgyg! )czgAg# WgXd:f;fXgMiNiOiYdYgZgPiQi=f$ ?f@fB % [f]fC Zd^f_fRiSiTi0g1gUiViWiieXiYijeZi0i` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipe2i3i@cqe4i5i[c4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i+ise,i-iqgfbrgsgP gbtgugQ q r H u dded.ite/i:ifdue;i=igdhdidjd3g6d4g5gkd7d6g7gld?ive@i[imdwe]i^ind_ixe`i{iodye|i}ipd~izeajbjqdAecjdjrdejBefjgjsdCehjijtdjjDekjljudEemjnjvdwdojFepjqjxdGerjsjydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f
93 return value 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kmqnqzyAyByCyDy8g9g!g#g$g%gEyGpHpIpJpTl$p%pUlVlWlXlYlKpLpMpNpOpPpQpRp'pFyGyHyIyJyKyuovo%e4e8d'gReSe(gAd)g*g+g,g-g'e5e9d.gTeUe/gBd:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhch(e6e!ddhVeWeehCdfhghhhihjh)e7e#dkhXeYelhDdmhnhohphqh*e8e$dwoZe0erhEdshthuhvhwh+e9e%dxh1e2eyhFdzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVh(pLyMyxo)pSp*pyozoAoBoCoDoEoFoGoHoIoJozkAklnmn,kZl0lKo1l2l3l4l5l6lNl/kWhXh8k^k7l_k`k{k|k}k9k,eMo-e.e/e:e;e=eDm?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbf4xk vg;jm l NoVpNyOyPyQy(x5x)xRySyTy*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkzlz.jmznzozpzqzrzsz$xtzTpuzvzwziyjyky9jxz/jlyyzzz1jAzBzCz%xDzEzI Blqlb GdHd~AaB:jn hbibjbOlkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndf~krlLoukYh8lsl9lCl!lDltl#l$lBk!k#k-kElZhulFl0hWp1hGlHl2hvlBgIl3hWxXpXx%lYx'lZx(lPz)l0xJl1xYpQz+p4hKlCg*l5h+l=j,l6h7hLlDg-lvk8h.l/lMlZp9hwl3e0pCk5f.k2x$kWm3x%k'd(dUp'kxlEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#Amy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`b{b|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h)d#h$hLc*d%h'hMcNc(h+d)h*hOc,d+h,hPcId6f7fEg-h.h/hJdFgGg:h;hS g T U c h V W d X Y -d.d/d:d;d=h=d?h@h?d[h]hbg) cgdgJ * egfgK Mes NeOeo t PeQep HgKd8f9fIg^h_h`hLdJgKg{h|h!fZ #f$fv 0 %f'fw Md(f)f}h~haiLgMgbicidi@deifi[dgihi+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|djiki0c}dlimi1cRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiziaeAiBigg[ hgigL ] jgkgM OgTdPgQg%cUdRgSg'cVd.f/fTgCiDiEiWdUgVgFiGi3 i 4 5 e j 6 7 f 8 9 becedeeefeHigeIiJiheKiLilg^ mgngN _ ogpgO wg(cxgyg! )czgAg# WgXd:f;fXgMiNiOiYdYgZgPiQi=f$ ?f@fB % [f]fC Zd^f_fRiSiTi0g1gUiViWiieXiYijeZi0i` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipe2i3i@cqe4i5i[c4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i+ise,i-iqgfbrgsgP gbtgugQ q r H u dded.ite/i:ifdue;i=igdhdidjd3g6d4g5gkd7d6g7gld?ive@i[imdwe]i^ind_ixe`i{iodye|i}ipd~izeajbjqdAecjdjrdejBefjgjsdCehjijtdjjDekjljudEemjnjvdwdojFepjqjxdGerjsjydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f
95 @property
96 def max_threads_per_block(self) -> int:
97 """int: Maximum number of threads per block."""
98 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK) 2:ymynyoypyqyryfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxRz:z;z=z?z@z[zSz]z^z_z`z{z|zTz}z~zaAbAcAdA
100 @property
101 def max_block_dim_x(self) -> int:
102 """int: Maximum block dimension X."""
103 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_X) 2$y
105 @property
106 def max_block_dim_y(self) -> int:
107 """int: Maximum block dimension Y."""
108 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Y) 2%y
110 @property
111 def max_block_dim_z(self) -> int:
112 """int: Maximum block dimension Z."""
113 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Z) 2'y
115 @property
116 def max_grid_dim_x(self) -> int:
117 """int: Maximum grid dimension X."""
118 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X) 2)yn
120 @property
121 def max_grid_dim_y(self) -> int:
122 """int: Maximum grid dimension Y."""
123 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Y) 2*y
125 @property
126 def max_grid_dim_z(self) -> int:
127 """int: Maximum grid dimension Z."""
128 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Z) 2+y
130 @property
131 def max_shared_memory_per_block(self) -> int:
132 """int: Maximum shared memory available per block in bytes."""
133 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK) 2a /ymynyoypyqyryfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxRz:z;z=z?z@z[zSz]z^z_z`z{z|zTz}z~zaAbAcAdA
135 @property
136 def total_constant_memory(self) -> int:
137 """int: Memory available on device for constant variables in a CUDA C kernel in bytes."""
138 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TOTAL_CONSTANT_MEMORY) 2Az
140 @property
141 def warp_size(self) -> int:
142 """int: Warp size in threads."""
143 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_WARP_SIZE) 2Ez
145 @property
146 def max_pitch(self) -> int:
147 """int: Maximum pitch in bytes allowed by memory copies."""
148 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PITCH) 2-y
150 @property
151 def maximum_texture1d_width(self) -> int:
152 """int: Maximum 1D texture width."""
153 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_WIDTH) 2}y
155 @property
156 def maximum_texture1d_linear_width(self) -> int:
157 """int: Maximum width for a 1D texture bound to linear memory."""
158 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LINEAR_WIDTH) 2|y
160 @property
161 def maximum_texture1d_mipmapped_width(self) -> int:
162 """int: Maximum mipmapped 1D texture width."""
163 return self._get_cached_attribute( 2~x
164 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_MIPMAPPED_WIDTH 2~x
165 )
167 @property
168 def maximum_texture2d_width(self) -> int:
169 """int: Maximum 2D texture width."""
170 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_WIDTH) 2-j
172 @property
173 def maximum_texture2d_height(self) -> int:
174 """int: Maximum 2D texture height."""
175 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_HEIGHT) 2,j
177 @property
178 def maximum_texture2d_linear_width(self) -> int:
179 """int: Maximum width for a 2D texture bound to linear memory."""
180 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_WIDTH) 2dz
182 @property
183 def maximum_texture2d_linear_height(self) -> int:
184 """int: Maximum height for a 2D texture bound to linear memory."""
185 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_HEIGHT) 2bz
187 @property
188 def maximum_texture2d_linear_pitch(self) -> int:
189 """int: Maximum pitch in bytes for a 2D texture bound to linear memory."""
190 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_PITCH) 2cz
192 @property
193 def maximum_texture2d_mipmapped_width(self) -> int:
194 """int: Maximum mipmapped 2D texture width."""
195 return self._get_cached_attribute( 2dy
196 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_WIDTH 2dy
197 )
199 @property
200 def maximum_texture2d_mipmapped_height(self) -> int:
201 """int: Maximum mipmapped 2D texture height."""
202 return self._get_cached_attribute( 2cy
203 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_HEIGHT 2cy
204 )
206 @property
207 def maximum_texture3d_width(self) -> int:
208 """int: Maximum 3D texture width."""
209 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH) 2gz
211 @property
212 def maximum_texture3d_height(self) -> int:
213 """int: Maximum 3D texture height."""
214 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT) 2fz
216 @property
217 def maximum_texture3d_depth(self) -> int:
218 """int: Maximum 3D texture depth."""
219 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH) 2ez
221 @property
222 def maximum_texture3d_width_alternate(self) -> int:
223 """int: Alternate maximum 3D texture width, 0 if no alternate maximum 3D texture size is supported."""
224 return self._get_cached_attribute( 28j
225 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH_ALTERNATE 28j
226 )
228 @property
229 def maximum_texture3d_height_alternate(self) -> int:
230 """int: Alternate maximum 3D texture height, 0 if no alternate maximum 3D texture size is supported."""
231 return self._get_cached_attribute( 2fy
232 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT_ALTERNATE 2fy
233 )
235 @property
236 def maximum_texture3d_depth_alternate(self) -> int:
237 """int: Alternate maximum 3D texture depth, 0 if no alternate maximum 3D texture size is supported."""
238 return self._get_cached_attribute( 2ey
239 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH_ALTERNATE 2ey
240 )
242 @property
243 def maximum_texturecubemap_width(self) -> int:
244 """int: Maximum cubemap texture width or height."""
245 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_WIDTH) 2hz
247 @property
248 def maximum_texture1d_layered_width(self) -> int:
249 """int: Maximum 1D layered texture width."""
250 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_WIDTH) 2+j
252 @property
253 def maximum_texture1d_layered_layers(self) -> int:
254 """int: Maximum layers in a 1D layered texture."""
255 return self._get_cached_attribute( 2}x
256 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_LAYERS 2}x
257 )
259 @property
260 def maximum_texture2d_layered_width(self) -> int:
261 """int: Maximum 2D layered texture width."""
262 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_WIDTH) 2oq
264 @property
265 def maximum_texture2d_layered_height(self) -> int:
266 """int: Maximum 2D layered texture height."""
267 return self._get_cached_attribute( 2ay
268 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_HEIGHT 2ay
269 )
271 @property
272 def maximum_texture2d_layered_layers(self) -> int:
273 """int: Maximum layers in a 2D layered texture."""
274 return self._get_cached_attribute( 2by
275 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_LAYERS 2by
276 )
278 @property
279 def maximum_texturecubemap_layered_width(self) -> int:
280 """int: Maximum cubemap layered texture width or height."""
281 return self._get_cached_attribute( 2hy
282 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_WIDTH 2hy
283 )
285 @property
286 def maximum_texturecubemap_layered_layers(self) -> int:
287 """int: Maximum layers in a cubemap layered texture."""
288 return self._get_cached_attribute( 2gy
289 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_LAYERS 2gy
290 )
292 @property
293 def maximum_surface1d_width(self) -> int:
294 """int: Maximum 1D surface width."""
295 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_WIDTH) 2?y
297 @property
298 def maximum_surface2d_width(self) -> int:
299 """int: Maximum 2D surface width."""
300 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_WIDTH) 2]y
302 @property
303 def maximum_surface2d_height(self) -> int:
304 """int: Maximum 2D surface height."""
305 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_HEIGHT) 2@y
307 @property
308 def maximum_surface3d_width(self) -> int:
309 """int: Maximum 3D surface width."""
310 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_WIDTH) 2`y
312 @property
313 def maximum_surface3d_height(self) -> int:
314 """int: Maximum 3D surface height."""
315 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_HEIGHT) 2_y
317 @property
318 def maximum_surface3d_depth(self) -> int:
319 """int: Maximum 3D surface depth."""
320 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_DEPTH) 2^y
322 @property
323 def maximum_surface1d_layered_width(self) -> int:
324 """int: Maximum 1D layered surface width."""
325 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_WIDTH) 2=y
327 @property
328 def maximum_surface1d_layered_layers(self) -> int:
329 """int: Maximum layers in a 1D layered surface."""
330 return self._get_cached_attribute( 2^x
331 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_LAYERS 2^x
332 )
334 @property
335 def maximum_surface2d_layered_width(self) -> int:
336 """int: Maximum 2D layered surface width."""
337 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_WIDTH) 2[y
339 @property
340 def maximum_surface2d_layered_height(self) -> int:
341 """int: Maximum 2D layered surface height."""
342 return self._get_cached_attribute( 2_x
343 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_HEIGHT 2_x
344 )
346 @property
347 def maximum_surface2d_layered_layers(self) -> int:
348 """int: Maximum layers in a 2D layered surface."""
349 return self._get_cached_attribute( 2`x
350 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_LAYERS 2`x
351 )
353 @property
354 def maximum_surfacecubemap_width(self) -> int:
355 """int: Maximum cubemap surface width."""
356 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_WIDTH) 2{y
358 @property
359 def maximum_surfacecubemap_layered_width(self) -> int:
360 """int: Maximum cubemap layered surface width."""
361 return self._get_cached_attribute( 2|x
362 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_WIDTH 2|x
363 )
365 @property
366 def maximum_surfacecubemap_layered_layers(self) -> int:
367 """int: Maximum layers in a cubemap layered surface."""
368 return self._get_cached_attribute( 2{x
369 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_LAYERS 2{x
370 )
372 @property
373 def max_registers_per_block(self) -> int:
374 """int: Maximum number of 32-bit registers available to a thread block."""
375 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK) 2.y
377 @property
378 def clock_rate(self) -> int:
379 """int: Typical clock frequency in kilohertz."""
380 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLOCK_RATE) 2tj4x$AI Bl:j
382 @property
383 def texture_alignment(self) -> int:
384 """int: Alignment requirement for textures."""
385 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT) 2yz
387 @property
388 def texture_pitch_alignment(self) -> int:
389 """int: Pitch alignment requirement for textures."""
390 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_PITCH_ALIGNMENT) 2zz
392 @property
393 def gpu_overlap(self) -> bool:
394 """bool: Device can possibly copy memory and execute a kernel concurrently. Deprecated. Use :attr:`~DeviceProperties.async_engine_count` instead."""
395 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_OVERLAP)) 23y
397 @property
398 def multiprocessor_count(self) -> int:
399 """int: Number of multiprocessors on device."""
400 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT) 2qzn
402 @property
403 def kernel_exec_timeout(self) -> bool:
404 """bool: Specifies whether there is a run time limit on kernels."""
405 return bool(self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT)) 2'A
407 @property
408 def integrated(self) -> bool:
409 """bool: Device is integrated with host memory."""
410 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_INTEGRATED)) 2*j
412 @property
413 def can_map_host_memory(self) -> bool:
414 """bool: Device can map host memory into CUDA address space."""
415 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_MAP_HOST_MEMORY)) 2Py
417 @property
418 def compute_mode(self) -> int:
419 """int: Compute mode (See CUcomputemode for details)."""
420 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_MODE) 2%A
422 @property
423 def concurrent_kernels(self) -> bool:
424 """bool: Device can possibly execute multiple kernels concurrently."""
425 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_KERNELS)) 2Uy
427 @property
428 def ecc_enabled(self) -> bool:
429 """bool: Device has ECC support enabled."""
430 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ECC_ENABLED)) 2Zy
432 @property
433 def pci_bus_id(self) -> int:
434 """int: PCI bus ID of the device."""
435 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_BUS_ID) 2uz
437 @property
438 def pci_device_id(self) -> int:
439 """int: PCI device ID of the device."""
440 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID) 2vz
442 @property
443 def pci_domain_id(self) -> int:
444 """int: PCI domain ID of the device."""
445 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DOMAIN_ID) 2wz
447 @property
448 def tcc_driver(self) -> bool:
449 """bool: Device is using TCC driver model."""
450 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TCC_DRIVER)) 2/j
452 @property
453 def memory_clock_rate(self) -> int:
454 """int: Peak memory clock frequency in kilohertz."""
455 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_CLOCK_RATE) 2(A
457 @property
458 def global_memory_bus_width(self) -> int:
459 """int: Global memory bus width in bits."""
460 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_MEMORY_BUS_WIDTH) 21y
462 @property
463 def l2_cache_size(self) -> int:
464 """int: Size of L2 cache in bytes."""
465 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_L2_CACHE_SIZE) 28y
467 @property
468 def max_threads_per_multiprocessor(self) -> int:
469 """int: Maximum resident threads per multiprocessor."""
470 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_MULTIPROCESSOR) 2;ymynyoypyqyryfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwx
472 @property
473 def unified_addressing(self) -> bool:
474 """bool: Device shares a unified address space with the host."""
475 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING)) 2a Bz
477 @property
478 def compute_capability_major(self) -> int:
479 """int: Major compute capability version number."""
480 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR) 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kTl$p%pUlVlWlXlYl'puovo8dAd9dBd!dCd#dDd$dEd%dFd(pxo)p*pyozoAoBoCoDoEoFoGoHozkAklnmn,kZl0lKo1l2l3l4l5l6lNl/k8k^k7l_k`k{k|k}k9k4xNoVpSyI Blqlb GdHd~AaB:jn hbibjbOlkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#A9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKc)dLc*dMcNc+dOc,dPcIdJdg c h d X Y -d.d/d:d;d=d?d) J * K s o t p KdLdZ v 0 w Md@d[d+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{d|d0c}d1cRdSd: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$c~dae[ L ] M Td%cUd'cVdWdi e j f 8 9 becedeeefegehe^ N _ O (c! )c# XdYd$ B % C Zdieje` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoepe@cqe[c4d5dab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcdresefbP gbQ ddedtefduegdhdidjd6dkd7dldvemdwendxeodyepdzeqdAerdBesdCetdDeudEevdwdFexdGeydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsfHeIeJeKe
482 @property
483 def compute_capability_minor(self) -> int:
484 """int: Minor compute capability version number."""
485 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR) 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kTl$p%pUlVlWlXlYl'puovo8dAd9dBd!dCd#dDd$dEd%dFd(pxo)p*pyozoAoBoCoDoEoFoGoHozkAklnmn,kZl0lKo1l2l3l4l5l6lNl/k8k^k7l_k`k{k|k}k9k4xNoVpTyI Blqlb GdHd~AaB:jn hbibjbOlkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#A9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKc)dLc*dMcNc+dOc,dPcIdJdg c h d X Y -d.d/d:d;d=d?d) J * K s o t p KdLdZ v 0 w Md@d[d+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{d|d0c}d1cRdSd: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$c~dae[ L ] M Td%cUd'cVdWdi e j f 8 9 becedeeefegehe^ N _ O (c! )c# XdYd$ B % C Zdieje` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoepe@cqe[c4d5dab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcdresefbP gbQ ddedtefduegdhdidjd6dkd7dldvemdwendxeodyepdzeqdAerdBesdCetdDeudEevdwdFexdGeydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsfHeIeJeKe
487 @property
488 def global_l1_cache_supported(self) -> bool:
489 """bool: Device supports caching globals in L1."""
490 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_L1_CACHE_SUPPORTED)) 20y
492 @property
493 def local_l1_cache_supported(self) -> bool:
494 """bool: Device supports caching locals in L1."""
495 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_LOCAL_L1_CACHE_SUPPORTED)) 29y
497 @property
498 def max_shared_memory_per_multiprocessor(self) -> int:
499 """int: Maximum shared memory available per multiprocessor in bytes."""
500 return self._get_cached_attribute( 2]xmynyoypyqyryfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwx
501 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR 2]xmynyoypyqyryfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwx
502 )
504 @property
505 def max_registers_per_multiprocessor(self) -> int:
506 """int: Maximum number of 32-bit registers available per multiprocessor."""
507 return self._get_cached_attribute( 2@xfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwx
508 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_MULTIPROCESSOR 2@xfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwx
509 )
511 @property
512 def managed_memory(self) -> bool:
513 """bool: Device can allocate managed memory on this system."""
514 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MANAGED_MEMORY)) 2,eMo-e.e/e:e;e=eDm?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbf!y
516 @property
517 def multi_gpu_board(self) -> bool:
518 """bool: Device is on a multi-GPU board."""
519 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD)) 2nz
521 @property
522 def multi_gpu_board_group_id(self) -> int:
523 """int: Unique id for a group of devices on the same multi-GPU board."""
524 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD_GROUP_ID) 2oz
526 @property
527 def host_native_atomic_supported(self) -> bool:
528 """bool: Link between the device and the host supports all native atomic operations."""
529 return bool( 2;x
530 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NATIVE_ATOMIC_SUPPORTED) 2;x
531 )
533 @property
534 def single_to_double_precision_perf_ratio(self) -> int:
535 """int: Ratio of single precision performance (in floating-point operations per second) to double precision performance."""
536 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SINGLE_TO_DOUBLE_PRECISION_PERF_RATIO) 2)A
538 @property
539 def pageable_memory_access(self) -> bool:
540 """bool: Device supports coherently accessing pageable memory without calling cudaHostRegister on it."""
541 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS)) 2tz
543 @property
544 def concurrent_managed_access(self) -> bool:
545 """bool: Device can coherently access managed memory concurrently with the CPU."""
546 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS)) 24e5e6e7e8e9e,eMo-e.e/e:e;e=e?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfVycfnndf8lsl9lCl!lDltl#l$lBk#kUzWxXpXx%lYx'lZx(lPz)l0xJl1xYpQz.lMl
548 @property
549 def compute_preemption_supported(self) -> bool:
550 """bool: Device supports compute preemption."""
551 return bool( 2*x
552 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_PREEMPTION_SUPPORTED) 2*x
553 )
555 @property
556 def can_use_host_pointer_for_registered_mem(self) -> bool:
557 """bool: Device can access host registered memory at the same virtual address as the CPU."""
558 return bool( 25x
559 self._get_cached_attribute( 25x
560 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_HOST_POINTER_FOR_REGISTERED_MEM 25x
561 )
562 )
564 # TODO: A few attrs are missing here (NVIDIA/cuda-python#675)
566 @property
567 def cooperative_launch(self) -> bool:
568 """bool: Device supports launching cooperative kernels via cuLaunchCooperativeKernel."""
569 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COOPERATIVE_LAUNCH)) 2Wyn
571 # TODO: A few attrs are missing here (NVIDIA/cuda-python#675)
573 @property
574 def max_shared_memory_per_block_optin(self) -> int:
575 """int: Maximum optin shared memory per block."""
576 return self._get_cached_attribute( 2[x
577 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK_OPTIN 2[x
578 )
580 @property
581 def pageable_memory_access_uses_host_page_tables(self) -> bool:
582 """bool: Device accesses pageable memory via the host's page tables."""
583 return bool( 2Tp
584 self._get_cached_attribute( 2Tp
585 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES 2Tp
586 )
587 )
589 @property
590 def direct_managed_mem_access_from_host(self) -> bool:
591 """bool: The host can directly access managed memory on the device without migration."""
592 return bool( 20j
593 self._get_cached_attribute( 20j
594 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DIRECT_MANAGED_MEM_ACCESS_FROM_HOST 20j
595 )
596 )
598 @property
599 def virtual_memory_management_supported(self) -> bool:
600 """bool: Device supports virtual memory management APIs like cuMemAddressReserve, cuMemCreate, cuMemMap and related APIs."""
601 return bool( 2%x%k'd(dUp'kxl
602 self._get_cached_attribute( 2%x%k'd(dUp'kxl
603 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2%x%k'd(dUp'kxl
604 )
605 )
607 @property
608 def handle_type_posix_file_descriptor_supported(self) -> bool:
609 """bool: Device supports exporting memory to a posix file descriptor with cuMemExportToShareableHandle, if requested via cuMemCreate."""
610 return bool( 2,p=l-p?l.p@l/p[l:p]l;p^l=pk xxyxzxAxBxCxDxExFxGxHxvg;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql gqjmIxJxhqkmiqlmjqmmKxLxMxNxOxPx8xQxRxSxR q r H u
611 self._get_cached_attribute( 2,p=l-p?l.p@l/p[l:p]l;p^l=pk xxyxzxAxBxCxDxExFxGxHxvg;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql gqjmIxJxhqkmiqlmjqmmKxLxMxNxOxPx8xQxRxSxR q r H u
612 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR_SUPPORTED 2,p=l-p?l.p@l/p[l:p]l;p^l=pk xxyxzxAxBxCxDxExFxGxHxvg;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql gqjmIxJxhqkmiqlmjqmmKxLxMxNxOxPx8xQxRxSxR q r H u
613 )
614 )
616 @property
617 def handle_type_win32_handle_supported(self) -> bool:
618 """bool: Device supports exporting memory to a Win32 NT handle with cuMemExportToShareableHandle, if requested via cuMemCreate."""
619 return bool( 2.x
620 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_HANDLE_SUPPORTED) 2.x
621 )
623 @property
624 def handle_type_win32_kmt_handle_supported(self) -> bool:
625 """bool: Device supports exporting memory to a Win32 KMT handle with cuMemExportToShareableHandle, if requested via cuMemCreate."""
626 return bool( 29x
627 self._get_cached_attribute( 29x
628 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_KMT_HANDLE_SUPPORTED 29x
629 )
630 )
632 @property
633 def max_blocks_per_multiprocessor(self) -> int:
634 """int: Maximum number of blocks per multiprocessor."""
635 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCKS_PER_MULTIPROCESSOR) 2(y
637 @property
638 def generic_compression_supported(self) -> bool:
639 """bool: Device supports compression of memory."""
640 return bool( 2+x
641 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GENERIC_COMPRESSION_SUPPORTED) 2+x
642 )
644 @property
645 def max_persisting_l2_cache_size(self) -> int:
646 """int: Maximum L2 persisting lines capacity setting in bytes."""
647 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PERSISTING_L2_CACHE_SIZE) 2,y
649 @property
650 def max_access_policy_window_size(self) -> int:
651 """int: Maximum value of CUaccessPolicyWindow.num_bytes."""
652 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_ACCESS_POLICY_WINDOW_SIZE) 2#y
654 @property
655 def gpu_direct_rdma_with_cuda_vmm_supported(self) -> bool:
656 """bool: Device supports specifying the GPUDirect RDMA flag with cuMemCreate."""
657 return bool( 27x
658 self._get_cached_attribute( 27x
659 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WITH_CUDA_VMM_SUPPORTED 27x
660 )
661 )
663 @property
664 def reserved_shared_memory_per_block(self) -> int:
665 """int: Shared memory reserved by CUDA driver per block in bytes."""
666 return self._get_cached_attribute( 2jy
667 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_RESERVED_SHARED_MEMORY_PER_BLOCK 2jy
668 )
670 @property
671 def sparse_cuda_array_supported(self) -> bool:
672 """bool: Device supports sparse CUDA arrays and sparse CUDA mipmapped arrays."""
673 return bool( 2ky
674 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SPARSE_CUDA_ARRAY_SUPPORTED) 2ky
675 )
677 @property
678 def read_only_host_register_supported(self) -> bool:
679 """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."""
680 return bool( 2iy
681 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_READ_ONLY_HOST_REGISTER_SUPPORTED) 2iy
682 )
684 @property
685 def memory_pools_supported(self) -> bool:
686 """bool: Device supports using the cuMemAllocAsync and cuMemPool family of APIs."""
687 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED)) 2mqnqzyAyByCyDy8g9g!g#g$g%gEyGpHpIpJpKpLpMpNpOpPpQpRpFyGyHyIyJyKy%e4e'gReSe(gAd)g*g+g,g-g'e5e.gTeUe/gBd:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhch(e6edhVeWeehCdfhghhhihjh)e7ekhXeYelhDdmhnhohphqh*e8ewoZe0erhEdshthuhvhwh+e9exh1e2eyhFdzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhLyMySpIoJozkAkxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAWhQARASAXh,p=l-p?l.p@l/p[l:p]l;p^l=pk xxyxzxAxBxCxDxExFxGxHxvg;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql gqjmIxJxhqkmiqlmjqmmKxLxMxNxOxPxlzcfnndf~krlLoukTAYh8lsl9lCl!lDltl#l$lBk!k#kElZhulPlFl0hWp1hGlnmHl2hvlBgIl3hUzWxXpXx%lYx'lZx(lPz)l0xJl1xYpQz8h.lsyMl9hwl3eQxRxSxUAR !h#h$h%h'h(h)h*h+h,hId6f7fEg-h.h/hJdFgGg:h;hS T U V W =h?h@h[h]hbgcgdgegfgMeNeOePeQeHgKd8f9fIg^h_h`hLdJgKg{h|h!f#f$f%f'fMd(f)f}h~haiLgMgbicidieifigihi+ , - . / OdPdQdiijikilimiRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: ; = ? @ xiyiziAiBigghgigjgkgOgPgQgRgSgVd.f/fTgCiDiEiWdUgVgFiGi3 4 5 6 7 HiIiJiKiLilgmgngogpgwgxgygzgAgWgXd:f;fXgMiNiOiYdYgZgPiQi=f?f@f[f]fZd^f_fRiSiTi0g1gUiViWiXiYiZi0i` { | } ~ 1d2d3d1i2i3i4i5i4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iabbbcbdbeb)i*i+i,i-iqgrgsgtgugq r H u .i/i:i;i=i3g4g5g6g7g?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsj{B
689 @property
690 def gpu_direct_rdma_supported(self) -> bool:
691 """bool: Device supports GPUDirect RDMA APIs, like nvidia_p2p_get_pages (see https://docs.nvidia.com/cuda/gpudirect-rdma for more information)."""
692 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_SUPPORTED)) 22y'kxl
694 @property
695 def gpu_direct_rdma_flush_writes_options(self) -> int:
696 """int: The returned attribute shall be interpreted as a bitmask, where the individual bits are described by the CUflushGPUDirectRDMAWritesOptions enum."""
697 return self._get_cached_attribute( 2,x
698 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_FLUSH_WRITES_OPTIONS 2,x
699 )
701 @property
702 def gpu_direct_rdma_writes_ordering(self) -> int:
703 """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."""
704 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WRITES_ORDERING) 2(j
706 @property
707 def mempool_supported_handle_types(self) -> int:
708 """int: Handle types supported with mempool based IPC."""
709 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMPOOL_SUPPORTED_HANDLE_TYPES) 2.j
711 @property
712 def deferred_mapping_cuda_array_supported(self) -> bool:
713 """bool: Device supports deferred mapping CUDA arrays and CUDA mipmapped arrays."""
714 return bool( 26x
715 self._get_cached_attribute( 26x
716 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DEFERRED_MAPPING_CUDA_ARRAY_SUPPORTED 26x
717 )
718 )
720 @property
721 def numa_config(self) -> int:
722 """int: NUMA configuration of a device: value is of type CUdeviceNumaConfig enum."""
723 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_CONFIG) 2rz
725 @property
726 def numa_id(self) -> int:
727 """int: NUMA node ID of the GPU memory."""
728 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_ID) 2sz
730 @property
731 def multicast_supported(self) -> bool:
732 """bool: Device supports switch multicast and reduction operations."""
733 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTICAST_SUPPORTED)) 2pz
735 @property
736 def surface_alignment(self) -> int:
737 """int: Surface alignment requirement in bytes."""
738 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SURFACE_ALIGNMENT) 2xz
740 @property
741 def async_engine_count(self) -> int:
742 """int: Number of asynchronous engines."""
743 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT) 2Ny
745 @property
746 def can_tex2d_gather(self) -> bool:
747 """bool: True if device supports 2D texture gather operations, False if not."""
748 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_TEX2D_GATHER)) 2Qy
750 @property
751 def maximum_texture2d_gather_width(self) -> int:
752 """int: Maximum 2D texture gather width."""
753 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_WIDTH) 2az
755 @property
756 def maximum_texture2d_gather_height(self) -> int:
757 """int: Maximum 2D texture gather height."""
758 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_HEIGHT) 2~y
760 @property
761 def stream_priorities_supported(self) -> bool:
762 """bool: True if device supports stream priorities, False if not."""
763 return bool( 29j
764 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_STREAM_PRIORITIES_SUPPORTED) 29j
765 )
767 @property
768 def can_flush_remote_writes(self) -> bool:
769 """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."""
770 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_FLUSH_REMOTE_WRITES)) 2Oy
772 @property
773 def host_register_supported(self) -> bool:
774 """bool: Device supports host memory registration via cudaHostRegister."""
775 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_REGISTER_SUPPORTED)) 2)j
777 @property
778 def timeline_semaphore_interop_supported(self) -> bool:
779 """bool: External timeline semaphore interop is supported on the device."""
780 return bool( 21j
781 self._get_cached_attribute( 21j
782 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TIMELINE_SEMAPHORE_INTEROP_SUPPORTED 21j
783 )
784 )
786 @property
787 def cluster_launch(self) -> bool:
788 """bool: Indicates device supports cluster launch."""
789 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLUSTER_LAUNCH)) 2Ry
791 @property
792 def can_use_64_bit_stream_mem_ops(self) -> bool:
793 """bool: 64-bit operations are supported in cuStreamBatchMemOp and related MemOp APIs."""
794 return bool( 2(x
795 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS) 2(x
796 )
798 @property
799 def can_use_stream_wait_value_nor(self) -> bool:
800 """bool: CU_STREAM_WAIT_VALUE_NOR is supported by MemOp APIs."""
801 return bool( 2)x
802 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR) 2)x
803 )
805 @property
806 def dma_buf_supported(self) -> bool:
807 """bool: Device supports buffer sharing with dma_buf mechanism."""
808 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DMA_BUF_SUPPORTED)) 2Yy
810 # Start of CUDA 12 device attributes
812 @property
813 def ipc_event_supported(self) -> bool:
814 """bool: Device supports IPC Events."""
815 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_IPC_EVENT_SUPPORTED)) 27y
817 @property
818 def mem_sync_domain_count(self) -> int:
819 """int: Number of memory domains the device supports."""
820 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_SYNC_DOMAIN_COUNT, default=1) 2kz
822 @property
823 def tensor_map_access_supported(self) -> bool:
824 """bool: Device supports accessing memory using Tensor Map."""
825 return bool( 2lytfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3f
826 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TENSOR_MAP_ACCESS_SUPPORTED) 2lytfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3f
827 )
829 @property
830 def handle_type_fabric_supported(self) -> bool:
831 """bool: Device supports exporting memory to a fabric handle with cuMemExportToShareableHandle() or requested with cuMemCreate()."""
832 return bool( 2-x
833 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_FABRIC_SUPPORTED) 2-x
834 )
836 @property
837 def unified_function_pointers(self) -> bool:
838 """bool: Device supports unified function pointers."""
839 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_FUNCTION_POINTERS)) 2Cz
841 @property
842 def mps_enabled(self) -> bool:
843 """bool: Indicates if contexts created on this device will be shared via MPS."""
844 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MPS_ENABLED)) 2mz
846 @property
847 def host_numa_id(self) -> int:
848 """int: NUMA ID of the host node closest to the device. Returns -1 when system does not support NUMA."""
849 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_ID, default=-1) 2=l?l@l[l]l^lk ;j_l`l{l|l}l~lambmcmdmm emfmgmhmiml jmkmlmmm6ytl4hCg5h=j6h7hDgvk5f$kWm
851 @property
852 def d3d12_cig_supported(self) -> bool:
853 """bool: Device supports CIG with D3D12."""
854 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_D3D12_CIG_SUPPORTED)) 2Xy
856 @property
857 def mem_decompress_algorithm_mask(self) -> int:
858 """int: The returned value shall be interpreted as a bitmask, where the individual bits are described by the CUmemDecompressAlgorithm enum."""
859 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_ALGORITHM_MASK) 2iz
861 @property
862 def mem_decompress_maximum_length(self) -> int:
863 """int: The returned value is the maximum length in bytes of a single decompress operation that is allowed."""
864 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_MAXIMUM_LENGTH) 2jz
866 @property
867 def vulkan_cig_supported(self) -> bool:
868 """bool: Device supports CIG with Vulkan."""
869 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VULKAN_CIG_SUPPORTED)) 2Dz
871 @property
872 def gpu_pci_device_id(self) -> int:
873 """int: The combined 16-bit PCI device ID and 16-bit PCI vendor ID.
875 Returns 0 if the driver does not support this query.
876 """
877 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_DEVICE_ID) 24y
879 @property
880 def gpu_pci_subsystem_id(self) -> int:
881 """int: The combined 16-bit PCI subsystem ID and 16-bit PCI subsystem vendor ID.
883 Returns 0 if the driver does not support this query.
884 """
885 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_SUBSYSTEM_ID) 25y
887 @property
888 def host_numa_virtual_memory_management_supported(self) -> bool:
889 """bool: Device supports HOST_NUMA location with the virtual memory management APIs like cuMemCreate, cuMemMap and related APIs."""
890 return bool( 2!x
891 self._get_cached_attribute( 2!x
892 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2!x
893 )
894 )
896 @property
897 def host_numa_memory_pools_supported(self) -> bool:
898 """bool: Device supports HOST_NUMA location with the cuMemAllocAsync and cuMemPool family of APIs."""
899 return bool( 2=x
900 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MEMORY_POOLS_SUPPORTED) 2=x
901 )
903 # Start of CUDA 13 device attributes
905 @property
906 def host_numa_multinode_ipc_supported(self) -> bool:
907 """bool: Device supports HOST_NUMA location IPC between nodes in a multi-node system."""
908 return bool( 2?x
909 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MULTINODE_IPC_SUPPORTED) 2?x
910 )
912 @property
913 def host_memory_pools_supported(self) -> bool:
914 """bool: Device supports HOST location with the cuMemAllocAsync and cuMemPool family of APIs."""
915 return bool( 2=l?l@l[l]l^lk ;j_l`l{l|l}l~lambmcmdmm emfmgmhmiml jmkmlmmm:x-k+p4hKlCg*l5h+l=j,l6hVz7hLlDg-lvk/lZp3e0pCk5f.k2x$kWm3x
916 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_MEMORY_POOLS_SUPPORTED) 2=l?l@l[l]l^lk ;j_l`l{l|l}l~lambmcmdmm emfmgmhmiml jmkmlmmm:x-k+p4hKlCg*l5h+l=j,l6hVz7hLlDg-lvk/lZp3e0pCk5f.k2x$kWm3x
917 )
919 @property
920 def host_virtual_memory_management_supported(self) -> bool:
921 """bool: Device supports HOST location with the virtual memory management APIs like cuMemCreate, cuMemMap and related APIs."""
922 return bool( 2#x
923 self._get_cached_attribute( 2#x
924 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2#x
925 )
926 )
928 @property
929 def host_alloc_dma_buf_supported(self) -> bool:
930 """bool: Device supports page-locked host memory buffer sharing with dma_buf mechanism."""
931 return bool( 2/x
932 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_ALLOC_DMA_BUF_SUPPORTED) 2/x
933 )
935 @property
936 def only_partial_host_native_atomic_supported(self) -> bool:
937 """bool: Link between the device and the host supports only some native atomic operations."""
938 return bool( 2$x
939 self._get_cached_attribute( 2$x
940 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ONLY_PARTIAL_HOST_NATIVE_ATOMIC_SUPPORTED 2$x
941 )
942 )
945class Device:
946 """Represent a GPU and act as an entry point for cuda.core features.
948 This is a singleton object that helps ensure interoperability
949 across multiple libraries imported in the process to both see
950 and use the same GPU device.
952 While acting as the entry point, many other CUDA resources can be
953 allocated such as streams and buffers. Any :obj:`~_context.Context` dependent
954 resource created through this device, will continue to refer to
955 this device's context.
957 Newly returned :obj:`~_device.Device` objects are thread-local singletons
958 for a specified device.
960 Note
961 ----
962 Will not initialize the GPU.
964 Parameters
965 ----------
966 device_id : int, optional
967 Device ordinal to return a :obj:`~_device.Device` object for.
968 Default value of `None` return the currently used device.
970 """
971 __slots__ = (
972 "_device_id",
973 "_memory_resource",
974 "_has_inited",
975 "_properties",
976 "_resources",
977 "_uuid",
978 "_context",
979 "__weakref__",
980 )
982 def __new__(cls, device_id: Device | int | None = None) -> Device:
983 if isinstance(device_id, Device): 2a ~fxCyCbEpqcEqqzCrq=ksq?ktqGkuqACvqHkwqRlxqBCyqIkzqSlAqCCBq@kCq[kDq]kEqJkFqKkGqLkHqMkIqNkJqOkKqPkLqQkMqRkNqSkOqTkPqUkQqVkRqWkSq;lDCXkTqYkUqZkVq0kWq1kXq2kYq3kZq4k0q5k1q6k2q7k3qmq4qnq5qzy6q7qFzAy8q9qBy!qCy#qDy$q8g9g!g%q#g$g%gEy'q(q)qdE*q+q,qGp-qHp.qIp/qJp:qTl;qEC=qeE?qfE@q$p[q%p]qUl^qVl_qWl`qXl{qYl|qKp}qLp~qMparNpbrOpcrPpdrQperRpfr'pgrhrirjrFykrGylrHymrIynrJyorKypruoqrvorr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r(p%rLy'rMy(rxo)r)p*r+rSp,r*p-ryo.rzo/rAo:rFCGCBo;rCo=r?r@r[r]rDo^rEo_rFo`rGo{rgE|rhE}rHo~r|DasIobsHCcsICdsJCesJofsKCgszkhsAkislnjsmnks,klsZlms0lnsKoosiEpsqs1lrs2lss3lts4lus5lvswsxsyszs6lAsBsCsLCFFxAGFyAHFzAAABACAtyDANlEAuyFA/kGAvyHAeAIAwyJAxyKAGzLAHzMAIzNAOAPAWh@DQA[DRA]DSA3EMCXh8kDs^kEs7lFs_kGs`kHs{kIs|kJs}kKs9kLs,eMo4EMsfF-eTx.e@A/erB:e;e=eDmNs?e!eLe@e#ejE[ekE$e]egF^e_e`e{e|e}e~eafbf*AOsOo,p=l+A-p,A?lon.p@l[A/p[lXm:phF]l;p^ltj=pk xxyxzxAxBxCxDxExFxGxHxDkvg;j?p_l@p5E[p]p6E^p_p7E`p{p8E|p}p9E~paq!Ebq`l{l|l}l~lambmcmdmm emfmpncqgmdqhmqneqimQlfql #E$EJzPsgqjmKzIxLzJxfAhqkm]AiqlmrnjqmmkqKxlqLx|BMx}BNx~BOxaCPx-AlEQsmENCnERsoESspETsqEUsVsNoVpalbl}DOCrEWsbCPC_EQCbBRC`EXscCSC^A{ETC|EUC^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEzWz.AdCVC}EYsVAWC(kWAylI )k~DZsclXC0ssEYCtE1suE2svE3swE4sxE5sBl6syEZCzE7sAE8sBE0CCE1CDE9sEE!sql#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvj/Ab YmGdzlHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 2C3C4C5C6C_A7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krl~ELouk%CMzaFTAbFYh%E)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CcFEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`CWx{CXp|CXx}C%l@sYx[s'l~CZxaD(lbDPzcD)l]s0x^sJl_s1xdDYpeDQzfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwDLF9hfn@BgnAlwl3e0pxDCkyD5f.k2xat$kzDWmAD3xBDCDDDEDFD%k'd(dUpGD'kxl'E(E)E*E+E,E-ENz.E/E:E;E=EEmbtMFQbaERb[BHDSb:lctTb?EUb@EVbagdtWbefFmetGmftHmgtImhtJmitKmjtLmktMmltNmmtOmntXbYbZb0b1b2b3byy4b5b6b7b8botptmy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`bID{bJD|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAscKDtcfCucgCvchCwciCxcjCyckCzclCAcmCBcnCCcoCDcpCEcqCFcrCGcsCHctCIcuCJcKc]BQxzFRx^BSxUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvPmcvQmdvffRmevSmfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvTmNvUmOv|AgfhfifPvQvRvRDSvTvUvSDTDVvWvXvYvUD}AjfkflfmfnfVmZvofpfqfrfsfvCVD0vWD1vVx2v3v4vXDYD5vwCZD6v7v{B`B8v[E9vFE!v_D#vGE$vHE%vIE'vJE(v`D)vKE*vLE+vME,vNE-vOE.vPE/vQE:vRE;vSE=vTE?vUE@voB0DVE[v{D]vWE^vXE_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwiFcwdw'xewfwOzgwYEhwZEiwjwkwlwmwnw0EowjFpwqwrwsw1EtwuwvwwwxwjAywkAzwlAAwmABwnACwoADwEwpAFwqAGwrAHwsAIwtAJwKwLwuAMwNwOwPwvAQwRwwASwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.wpB/w:wqB;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex
984 return device_id 2zkAkFFGFHFtyNluy/kvyeAwyxy,p+A-p,A.p/pXm:phF;p=pvg?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqKzLzhqiqjqkqlq|B}B~BaCrl~EukaFbF!kElZhulPlFl0hWp1hGlnmHl2hvlBgIl3h8hsyLFwl'd(dUp'kaEfCgChCiCjCkClCmCnCoCpCqCrCsCtCuC]BzF^B_Bq r
986 Device_ensure_cuda_initialized() 2a ~fxCyCbEpqcEqqzCrq=ksq?ktqGkuqACvqHkwqRlxqBCyqIkzqSlAqCCBq@kCq[kDq]kEqJkFqKkGqLkHqMkIqNkJqOkKqPkLqQkMqRkNqSkOqTkPqUkQqVkRqWkSq;lDCXkTqYkUqZkVq0kWq1kXq2kYq3kZq4k0q5k1q6k2q7k3qmq4qnq5qzy6q7qFzAy8q9qBy!qCy#qDy$q8g9g!g%q#g$g%gEy'q(q)qdE*q+q,qGp-qHp.qIp/qJp:qTl;qEC=qeE?qfE@q$p[q%p]qUl^qVl_qWl`qXl{qYl|qKp}qLp~qMparNpbrOpcrPpdrQperRpfr'pgrhrirjrFykrGylrHymrIynrJyorKypruoqrvorr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r(p%rLy'rMy(rxo)r)p*r+rSp,r*p-ryo.rzo/rAo:rFCGCBo;rCo=r?r@r[r]rDo^rEo_rFo`rGo{rgE|rhE}rHo~r|DasIobsHCcsICdsJCesJofsKCgszkhsAkislnjsmnks,klsZlms0lnsKoosiEpsqs1lrs2lss3lts4lus5lvswsxsyszs6lAsBsCsLCxAyAzAAABACAtyDANlEAuyFA/kGAvyHAeAIAwyJAxyKAGzLAHzMAIzNAOAPAWh@DQA[DRA]DSA3EMCXh8kDs^kEs7lFs_kGs`kHs{kIs|kJs}kKs9kLs,eMo4EMsfF-eTx.e@A/erB:e;e=eDmNs?e!eLe@e#ejE[ekE$e]egF^e_e`e{e|e}e~eafbf*AOsOo,p=l+A-p,A?lon.p@l[A/p[lXm:p]l;p^ltj=pk xxyxzxAxBxCxDxExFxGxHxDkvg;j?p_l@p5E[p]p6E^p_p7E`p{p8E|p}p9E~paq!Ebq`l{l|l}l~lambmcmdmm emfmpncqgmdqhmqneqimQlfql #E$EJzPsgqjmKzIxLzJxfAhqkm]AiqlmrnjqmmkqKxlqLx|BMx}BNx~BOxaCPx-AlEQsmENCnERsoESspETsqEUsVsNoVpalbl}DOCrEWsbCPC_EQCbBRC`EXscCSC^A{ETC|EUC^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEzWz.AdCVC}EYsVAWC(kWAylI )k~DZsclXC0ssEYCtE1suE2svE3swE4sxE5sBl6syEZCzE7sAE8sBE0CCE1CDE9sEE!sql#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvj/Ab YmGdzlHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 2C3C4C5C6C_A7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krl~ELouk%CMzaFTAbFYh%E)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CcFEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`CWx{CXp|CXx}C%l@sYx[s'l~CZxaD(lbDPzcD)l]s0x^sJl_s1xdDYpeDQzfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwD9hfn@BgnAlwl3e0pxDCkyD5f.k2xat$kzDWmAD3xBDCDDDEDFD%k'd(dUpGD'kxl'E(E)E*E+E,E-ENz.E/E:E;E=EEmbtMFQbaERb[BHDSb:lctTb?EUb@EVbagdtWbefFmetGmftHmgtImhtJmitKmjtLmktMmltNmmtOmntXbYbZb0b1b2b3byy4b5b6b7b8botptmy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`bID{bJD|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAscKDtcfCucgCvchCwciCxcjCyckCzclCAcmCBcnCCcoCDcpCEcqCFcrCGcsCHctCIcuCJcKc]BQxRx^BSxUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvPmcvQmdvffRmevSmfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvTmNvUmOv|AgfhfifPvQvRvRDSvTvUvSDTDVvWvXvYvUD}AjfkflfmfnfVmZvofpfqfrfsfvCVD0vWD1vVx2v3v4vXDYD5vwCZD6v7v{B`B8v[E9vFE!v_D#vGE$vHE%vIE'vJE(v`D)vKE*vLE+vME,vNE-vOE.vPE/vQE:vRE;vSE=vTE?vUE@voB0DVE[v{D]vWE^vXE_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwiFcwdw'xewfwOzgwYEhwZEiwjwkwlwmwnw0EowjFpwqwrwsw1EtwuwvwwwxwjAywkAzwlAAwmABwnACwoADwEwpAFwqAGwrAHwsAIwtAJwKwLwuAMwNwOwPwvAQwRwwASwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.wpB/w:wqB;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex
987 device_id = Device_resolve_device_id(device_id) 2a ~fxCyCbEpqcEqqzCrq=ksq?ktqGkuqACvqHkwqRlxqBCyqIkzqSlAqCCBq@kCq[kDq]kEqJkFqKkGqLkHqMkIqNkJqOkKqPkLqQkMqRkNqSkOqTkPqUkQqVkRqWkSq;lDCXkTqYkUqZkVq0kWq1kXq2kYq3kZq4k0q5k1q6k2q7k3qmq4qnq5qzy6q7qFzAy8q9qBy!qCy#qDy$q8g9g!g%q#g$g%gEy'q(q)qdE*q+q,qGp-qHp.qIp/qJp:qTl;qEC=qeE?qfE@q$p[q%p]qUl^qVl_qWl`qXl{qYl|qKp}qLp~qMparNpbrOpcrPpdrQperRpfr'pgrhrirjrFykrGylrHymrIynrJyorKypruoqrvorr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r(p%rLy'rMy(rxo)r)p*r+rSp,r*p-ryo.rzo/rAo:rFCGCBo;rCo=r?r@r[r]rDo^rEo_rFo`rGo{rgE|rhE}rHo~r|DasIobsHCcsICdsJCesJofsKCgszkhsAkislnjsmnks,klsZlms0lnsKoosiEpsqs1lrs2lss3lts4lus5lvswsxsyszs6lAsBsCsLCxAyAzAAABACAtyDANlEAuyFA/kGAvyHAeAIAwyJAxyKAGzLAHzMAIzNAOAPAWh@DQA[DRA]DSA3EMCXh8kDs^kEs7lFs_kGs`kHs{kIs|kJs}kKs9kLs,eMo4EMsfF-eTx.e@A/erB:e;e=eDmNs?e!eLe@e#ejE[ekE$e]egF^e_e`e{e|e}e~eafbf*AOsOo,p=l+A-p,A?lon.p@l[A/p[lXm:p]l;p^ltj=pk xxyxzxAxBxCxDxExFxGxHxDkvg;j?p_l@p5E[p]p6E^p_p7E`p{p8E|p}p9E~paq!Ebq`l{l|l}l~lambmcmdmm emfmpncqgmdqhmqneqimQlfql #E$EJzPsgqjmKzIxLzJxfAhqkm]AiqlmrnjqmmkqKxlqLx|BMx}BNx~BOxaCPx-AlEQsmENCnERsoESspETsqEUsVsNoVpalbl}DOCrEWsbCPC_EQCbBRC`EXscCSC^A{ETC|EUC^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEzWz.AdCVC}EYsVAWC(kWAylI )k~DZsclXC0ssEYCtE1suE2svE3swE4sxE5sBl6syEZCzE7sAE8sBE0CCE1CDE9sEE!sql#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvj/Ab YmGdzlHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 2C3C4C5C6C_A7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krl~ELouk%CMzaFTAbFYh%E)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CcFEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`CWx{CXp|CXx}C%l@sYx[s'l~CZxaD(lbDPzcD)l]s0x^sJl_s1xdDYpeDQzfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwD9hfn@BgnAlwl3e0pxDCkyD5f.k2xat$kzDWmAD3xBDCDDDEDFD%k'd(dUpGD'kxl'E(E)E*E+E,E-ENz.E/E:E;E=EEmbtMFQbaERb[BHDSb:lctTb?EUb@EVbagdtWbefFmetGmftHmgtImhtJmitKmjtLmktMmltNmmtOmntXbYbZb0b1b2b3byy4b5b6b7b8botptmy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`bID{bJD|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAscKDtcfCucgCvchCwciCxcjCyckCzclCAcmCBcnCCcoCDcpCEcqCFcrCGcsCHctCIcuCJcKc]BQxRx^BSxUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvPmcvQmdvffRmevSmfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvTmNvUmOv|AgfhfifPvQvRvRDSvTvUvSDTDVvWvXvYvUD}AjfkflfmfnfVmZvofpfqfrfsfvCVD0vWD1vVx2v3v4vXDYD5vwCZD6v7v{B`B8v[E9vFE!v_D#vGE$vHE%vIE'vJE(v`D)vKE*vLE+vME,vNE-vOE.vPE/vQE:vRE;vSE=vTE?vUE@voB0DVE[v{D]vWE^vXE_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwiFcwdw'xewfwOzgwYEhwZEiwjwkwlwmwnw0EowjFpwqwrwsw1EtwuwvwwwxwjAywkAzwlAAwmABwnACwoADwEwpAFwqAGwrAHwsAIwtAJwKwLwuAMwNwOwPwvAQwRwwASwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.wpB/w:wqB;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex
988 devices = Device_ensure_tls_devices(cls) 2a ~fxCyCbEpqcEqqzCrq=ksq?ktqGkuqACvqHkwqRlxqBCyqIkzqSlAqCCBq@kCq[kDq]kEqJkFqKkGqLkHqMkIqNkJqOkKqPkLqQkMqRkNqSkOqTkPqUkQqVkRqWkSq;lDCXkTqYkUqZkVq0kWq1kXq2kYq3kZq4k0q5k1q6k2q7k3qmq4qnq5qzy6q7qFzAy8q9qBy!qCy#qDy$q8g9g!g%q#g$g%gEy'q(q)qdE*q+q,qGp-qHp.qIp/qJp:qTl;qEC=qeE?qfE@q$p[q%p]qUl^qVl_qWl`qXl{qYl|qKp}qLp~qMparNpbrOpcrPpdrQperRpfr'pgrhrirjrFykrGylrHymrIynrJyorKypruoqrvorr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r(p%rLy'rMy(rxo)r)p*r+rSp,r*p-ryo.rzo/rAo:rFCGCBo;rCo=r?r@r[r]rDo^rEo_rFo`rGo{rgE|rhE}rHo~r|DasIobsHCcsICdsJCesJofsKCgszkhsAkislnjsmnks,klsZlms0lnsKoosiEpsqs1lrs2lss3lts4lus5lvswsxsyszs6lAsBsCsLCxAyAzAAABACAtyDANlEAuyFA/kGAvyHAeAIAwyJAxyKAGzLAHzMAIzNAOAPAWh@DQA[DRA]DSA3EMCXh8kDs^kEs7lFs_kGs`kHs{kIs|kJs}kKs9kLs,eMo4EMsfF-eTx.e@A/erB:e;e=eDmNs?e!eLe@e#ejE[ekE$e]egF^e_e`e{e|e}e~eafbf*AOsOo,p=l+A-p,A?lon.p@l[A/p[lXm:p]l;p^ltj=pk xxyxzxAxBxCxDxExFxGxHxDkvg;j?p_l@p5E[p]p6E^p_p7E`p{p8E|p}p9E~paq!Ebq`l{l|l}l~lambmcmdmm emfmpncqgmdqhmqneqimQlfql #E$EJzPsgqjmKzIxLzJxfAhqkm]AiqlmrnjqmmkqKxlqLx|BMx}BNx~BOxaCPx-AlEQsmENCnERsoESspETsqEUsVsNoVpalbl}DOCrEWsbCPC_EQCbBRC`EXscCSC^A{ETC|EUC^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEzWz.AdCVC}EYsVAWC(kWAylI )k~DZsclXC0ssEYCtE1suE2svE3swE4sxE5sBl6syEZCzE7sAE8sBE0CCE1CDE9sEE!sql#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvj/Ab YmGdzlHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 2C3C4C5C6C_A7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krl~ELouk%CMzaFTAbFYh%E)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CcFEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`CWx{CXp|CXx}C%l@sYx[s'l~CZxaD(lbDPzcD)l]s0x^sJl_s1xdDYpeDQzfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwD9hfn@BgnAlwl3e0pxDCkyD5f.k2xat$kzDWmAD3xBDCDDDEDFD%k'd(dUpGD'kxl'E(E)E*E+E,E-ENz.E/E:E;E=EEmbtQbaERb[BHDSb:lctTb?EUb@EVbagdtWbefFmetGmftHmgtImhtJmitKmjtLmktMmltNmmtOmntXbYbZb0b1b2b3byy4b5b6b7b8botptmy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`bID{bJD|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAscKDtcfCucgCvchCwciCxcjCyckCzclCAcmCBcnCCcoCDcpCEcqCFcrCGcsCHctCIcuCJcKc]BQxRx^BSxUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvPmcvQmdvffRmevSmfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvTmNvUmOv|AgfhfifPvQvRvRDSvTvUvSDTDVvWvXvYvUD}AjfkflfmfnfVmZvofpfqfrfsfvCVD0vWD1vVx2v3v4vXDYD5vwCZD6v7v{B`B8v[E9vFE!v_D#vGE$vHE%vIE'vJE(v`D)vKE*vLE+vME,vNE-vOE.vPE/vQE:vRE;vSE=vTE?vUE@voB0DVE[v{D]vWE^vXE_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwiFcwdw'xewfwOzgwYEhwZEiwjwkwlwmwnw0EowjFpwqwrwsw1EtwuwvwwwxwjAywkAzwlAAwmABwnACwoADwEwpAFwqAGwrAHwsAIwtAJwKwLwuAMwNwOwPwvAQwRwwASwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.wpB/w:wqB;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex
990 try: 2a ~fxCyCbEpqcEqqzCrq=ksq?ktqGkuqACvqHkwqRlxqBCyqIkzqSlAqCCBq@kCq[kDq]kEqJkFqKkGqLkHqMkIqNkJqOkKqPkLqQkMqRkNqSkOqTkPqUkQqVkRqWkSq;lDCXkTqYkUqZkVq0kWq1kXq2kYq3kZq4k0q5k1q6k2q7k3qmq4qnq5qzy6q7qFzAy8q9qBy!qCy#qDy$q8g9g!g%q#g$g%gEy'q(q)qdE*q+q,qGp-qHp.qIp/qJp:qTl;qEC=qeE?qfE@q$p[q%p]qUl^qVl_qWl`qXl{qYl|qKp}qLp~qMparNpbrOpcrPpdrQperRpfr'pgrhrirjrFykrGylrHymrIynrJyorKypruoqrvorr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r(p%rLy'rMy(rxo)r)p*r+rSp,r*p-ryo.rzo/rAo:rFCGCBo;rCo=r?r@r[r]rDo^rEo_rFo`rGo{rgE|rhE}rHo~r|DasIobsHCcsICdsJCesJofsKCgszkhsAkislnjsmnks,klsZlms0lnsKoosiEpsqs1lrs2lss3lts4lus5lvswsxsyszs6lAsBsCsLCxAyAzAAABACAtyDANlEAuyFA/kGAvyHAeAIAwyJAxyKAGzLAHzMAIzNAOAPAWh@DQA[DRA]DSA3EMCXh8kDs^kEs7lFs_kGs`kHs{kIs|kJs}kKs9kLs,eMo4EMsfF-eTx.e@A/erB:e;e=eDmNs?e!eLe@e#ejE[ekE$e]egF^e_e`e{e|e}e~eafbf*AOsOo,p=l+A-p,A?lon.p@l[A/p[lXm:p]l;p^ltj=pk xxyxzxAxBxCxDxExFxGxHxDkvg;j?p_l@p5E[p]p6E^p_p7E`p{p8E|p}p9E~paq!Ebq`l{l|l}l~lambmcmdmm emfmpncqgmdqhmqneqimQlfql #E$EJzPsgqjmKzIxLzJxfAhqkm]AiqlmrnjqmmkqKxlqLx|BMx}BNx~BOxaCPx-AlEQsmENCnERsoESspETsqEUsVsNoVpalbl}DOCrEWsbCPC_EQCbBRC`EXscCSC^A{ETC|EUC^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEzWz.AdCVC}EYsVAWC(kWAylI )k~DZsclXC0ssEYCtE1suE2svE3swE4sxE5sBl6syEZCzE7sAE8sBE0CCE1CDE9sEE!sql#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvj/Ab YmGdzlHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 2C3C4C5C6C_A7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krl~ELouk%CMzaFTAbFYh%E)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CcFEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`CWx{CXp|CXx}C%l@sYx[s'l~CZxaD(lbDPzcD)l]s0x^sJl_s1xdDYpeDQzfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwD9hfn@BgnAlwl3e0pxDCkyD5f.k2xat$kzDWmAD3xBDCDDDEDFD%k'd(dUpGD'kxl'E(E)E*E+E,E-ENz.E/E:E;E=EEmbtQbaERb[BHDSb:lctTb?EUb@EVbagdtWbefFmetGmftHmgtImhtJmitKmjtLmktMmltNmmtOmntXbYbZb0b1b2b3byy4b5b6b7b8botptmy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`bID{bJD|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAscKDtcfCucgCvchCwciCxcjCyckCzclCAcmCBcnCCcoCDcpCEcqCFcrCGcsCHctCIcuCJcKc]BQxRx^BSxUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvPmcvQmdvffRmevSmfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvTmNvUmOv|AgfhfifPvQvRvRDSvTvUvSDTDVvWvXvYvUD}AjfkflfmfnfVmZvofpfqfrfsfvCVD0vWD1vVx2v3v4vXDYD5vwCZD6v7v{B`B8v[E9vFE!v_D#vGE$vHE%vIE'vJE(v`D)vKE*vLE+vME,vNE-vOE.vPE/vQE:vRE;vSE=vTE?vUE@voB0DVE[v{D]vWE^vXE_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwiFcwdw'xewfwOzgwYEhwZEiwjwkwlwmwnw0EowjFpwqwrwsw1EtwuwvwwwxwjAywkAzwlAAwmABwnACwoADwEwpAFwqAGwrAHwsAIwtAJwKwLwuAMwNwOwPwvAQwRwwASwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.wpB/w:wqB;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex
991 return devices[device_id] 2a ~fxCyCbEpqcEqqzCrq=ksq?ktqGkuqACvqHkwqRlxqBCyqIkzqSlAqCCBq@kCq[kDq]kEqJkFqKkGqLkHqMkIqNkJqOkKqPkLqQkMqRkNqSkOqTkPqUkQqVkRqWkSq;lDCXkTqYkUqZkVq0kWq1kXq2kYq3kZq4k0q5k1q6k2q7k3qmq4qnq5qzy6q7qFzAy8q9qBy!qCy#qDy$q8g9g!g%q#g$g%gEy'q(q)qdE*q+q,qGp-qHp.qIp/qJp:qTl;qEC=qeE?qfE@q$p[q%p]qUl^qVl_qWl`qXl{qYl|qKp}qLp~qMparNpbrOpcrPpdrQperRpfr'pgrhrirjrFykrGylrHymrIynrJyorKypruoqrvorr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r(p%rLy'rMy(rxo)r)p*r+rSp,r*p-ryo.rzo/rAo:rFCGCBo;rCo=r?r@r[r]rDo^rEo_rFo`rGo{rgE|rhE}rHo~r|DasIobsHCcsICdsJCesJofsKCgszkhsAkislnjsmnks,klsZlms0lnsKoosiEpsqs1lrs2lss3lts4lus5lvswsxsyszs6lAsBsCsLCxAyAzAAABACAtyDANlEAuyFA/kGAvyHAeAIAwyJAxyKAGzLAHzMAIzNAOAPAWh@DQA[DRA]DSA3EMCXh8kDs^kEs7lFs_kGs`kHs{kIs|kJs}kKs9kLs,eMo4EMsfF-eTx.e@A/erB:e;e=eDmNs?e!eLe@e#ejE[ekE$e]egF^e_e`e{e|e}e~eafbf*AOsOo,p=l+A-p,A?lon.p@l[A/p[lXm:p]l;p^ltj=pk xxyxzxAxBxCxDxExFxGxHxDkvg;j?p_l@p5E[p]p6E^p_p7E`p{p8E|p}p9E~paq!Ebq`l{l|l}l~lambmcmdmm emfmpncqgmdqhmqneqimQlfql #E$EJzPsgqjmKzIxLzJxfAhqkm]AiqlmrnjqmmkqKxlqLx|BMx}BNx~BOxaCPx-AlEQsmENCnERsoESspETsqEUsVsNoVpalbl}DOCrEWsbCPC_EQCbBRC`EXscCSC^A{ETC|EUC^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEzWz.AdCVC}EYsVAWC(kWAylI )k~DZsclXC0ssEYCtE1suE2svE3swE4sxE5sBl6syEZCzE7sAE8sBE0CCE1CDE9sEE!sql#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvj/Ab YmGdzlHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 2C3C4C5C6C_A7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krl~ELouk%CMzaFTAbFYh%E)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CcFEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`CWx{CXp|CXx}C%l@sYx[s'l~CZxaD(lbDPzcD)l]s0x^sJl_s1xdDYpeDQzfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwD9hfn@BgnAlwl3e0pxDCkyD5f.k2xat$kzDWmAD3xBDCDDDEDFD%k'd(dUpGD'kxl'E(E)E*E+E,E-ENz.E/E:E;E=EEmbtQbaERb[BHDSb:lctTb?EUb@EVbagdtWbefFmetGmftHmgtImhtJmitKmjtLmktMmltNmmtOmntXbYbZb0b1b2b3byy4b5b6b7b8botptmy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`bID{bJD|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAscKDtcfCucgCvchCwciCxcjCyckCzclCAcmCBcnCCcoCDcpCEcqCFcrCGcsCHctCIcuCJcKc]BQxRx^BSxUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvPmcvQmdvffRmevSmfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvTmNvUmOv|AgfhfifPvQvRvRDSvTvUvSDTDVvWvXvYvUD}AjfkflfmfnfVmZvofpfqfrfsfvCVD0vWD1vVx2v3v4vXDYD5vwCZD6v7v{B`B8v[E9vFE!v_D#vGE$vHE%vIE'vJE(v`D)vKE*vLE+vME,vNE-vOE.vPE/vQE:vRE;vSE=vTE?vUE@voB0DVE[v{D]vWE^vXE_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwiFcwdw'xewfwOzgwYEhwZEiwjwkwlwmwnw0EowjFpwqwrwsw1EtwuwvwwwxwjAywkAzwlAAwmABwnACwoADwEwpAFwqAGwrAHwsAIwtAJwKwLwuAMwNwOwPwvAQwRwwASwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.wpB/w:wqB;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex
992 except IndexError: 2{E|E
993 raise ValueError(f"device_id must be within [0, {len(devices)}), got {device_id}") from None 2{E|E
995 def _check_context_initialized(self) -> None:
996 if not self._has_inited: 2xCbEcEzC=k?kGkACHkRlBCIkSlCC@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kdEGpHpIpJpTlECeEfEUlVlWlXlYlKpLpMpNpOpPpQpRpReSeTeUeVeWeXeYeZe0e1e2eSpgEhE|DIoHCICJCJoKCzkAk,kZl0liE1l2l3l4l5l6lFFGFHFNFOFPFtyNluy/kvyeAwyxyGzHzIzIFJFKF@D[D]D8k^k7l_k`k{k|k}k9kSFTFvGwGUFxGyGjEkEVFWFzGAGBGCGDG*AFGGGHGIGJGKGLGMGNGOGPGQGtjRG4xSGlFmFnFoFpFqFrFsFRFTGUGVGWGXGYGZG0G1G2G3G4G5G6G7G8G9G!G#G$G%G'G(G)G*G+G,G-G.G/G:G;G=G?G@G[GQl]GdF^GPs_G?D`GKzLzfA{GkF|G}G~GaHbHkqlq|B}B~BaClEmEnEoEpEqEalbl}DrEylI )k~DclXCsEtEuEvEwExEBlyEzEAEBECEDEEEqlcBdBeBfBPogBhBiBjBkBlBmBnB/AYmzl:jgA;kn _AhAiAUx?jcHdHXFeHYFfHgHZF0FhHiHjH1FkH2F3F4F5F6F7F8F9F!FlH#F$F%F'FmH(F)FnHoHpHqH*FrH+FsHtH,F-FuHvHwH.FxH/F:F;F=F?F@F[F]F^FyH_F`F{F|FzH}F~FAHBHCHDHaGEHbGFHGHcGdGHHIHJHeGKHfGgGhGiGjGkGlGmGnGLHoGpGqGrGMHsGtGNHOHukBk!k#k-kLFAlCk5f.kCDEDagAF@j9osntnun#o[j$o]j%ovnwnxn'o6f7fS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y `Aynbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:o4fEkwkxkykFk8f9f!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUn(f)fVnWnx y 1 2 XnYn*f+f,f-fz A Zn{Agg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`ock{o0n1n2n|o.f/f3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 3n4nlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgp%jinwmxmymjn:f;f=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?n^f_f@n[nD E ' ( ]n^n`f{f|f}fF G _n`nqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppq r H u mkqp{n|n}nrpnksp~naobotpokupcodoeovppkwpfogohoxpqkypiojokozprkAplomonoBpskCpoopoqoDptkEprosotoFpFE_DGEHEIEJE`DKELEMENEOEPEQERESETEUEVE{DWEXE'xOzYEZE0E1EQF
997 raise CUDAError(
998 f"Device {self._device_id} is not yet initialized, perhaps you forgot to call .set_current() first?"
999 )
1002 @classmethod
1003 def get_all_devices(cls) -> tuple[Device, ...]:
1004 """
1005 Query the available device instances.
1007 Returns
1008 -------
1009 tuple of Device
1010 A tuple containing instances of available devices.
1011 """
1012 from cuda.core import system 2FzLe#E$EJz-A^AMz'E(E)E*E+E,E-ENz.E/E:E;E=EfCgChCiCjCkClCmCnCoCpCqCrCsCtCuC{B
1013 total = system.get_num_devices() 2FzLe#E$EJz-A^AMz'E(E)E*E+E,E-ENz.E/E:E;E=EfCgChCiCjCkClCmCnCoCpCqCrCsCtCuC{B
1014 return tuple(cls(device_id) for device_id in range(total)) 2FzLe#E$EJz-A^AMz'E(E)E*E+E,E-ENz.E/E:E;E=EfCgChCiCjCkClCmCnCoCpCqCrCsCtCuC{B
1016 def to_system_device(self) -> 'cuda.core.system.Device':
1017 """
1018 Get the corresponding :class:`cuda.core.system.Device` (which is used
1019 for NVIDIA Machine Library (NVML) access) for this
1020 :class:`cuda.core.Device` (which is used for CUDA access).
1022 The devices are mapped to one another by their UUID.
1024 Returns
1025 -------
1026 cuda.core.system.Device
1027 The corresponding system-level device instance used for NVML access.
1028 """
1029 from cuda.core.system._system import CUDA_BINDINGS_NVML_IS_COMPATIBLE 2(k
1031 if not CUDA_BINDINGS_NVML_IS_COMPATIBLE: 2(k
1032 raise RuntimeError(
1033 "cuda.core.system.Device requires cuda_bindings 13.1.2+ or 12.9.6+"
1034 )
1036 from cuda.core.system import Device as SystemDevice 2(k
1037 return SystemDevice(uuid=self.uuid) 2(k
1039 @property
1040 def device_id(self) -> int:
1041 """Return device ordinal."""
1042 return self._device_id 2mqnq%e4e'e5e(e6e)e7e*e8e+e9ezkAklnmn,kFFGFHFNFOFPFtyNluy/kvyeAwyxyGzHzIzIFJFKF@D[D]D3EQHSFTF4EfFTx@ArBRHvGwGUFxGyGgFVFWFOo,pBF+A-p,Aon.ptF[A/puFXm:phF;ptj=pDkvg?p@p5E[p]p6E^p_p7E`p{p8E|p}p9E~paq!EbqpncqvFwFdqxFqneqyFQlfqdFPsgqKzLzfAhq]Aiqrnjqkqlq|B}B~BaCVpalbl^AVAWCWA/AYmzlUx?j~krl~EukaFbF%EslDl!k#kElZhulPlFl0hWp1hGlnmHl2hvlBgIl3h8hsyLFwlCDED%k'd(dUp'kaE[B:l?E@EagfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxfCgChCiCjCkClCmCnCoCpCqCrCsCtCuC]BzF^B_B@j[j]jS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbk!j4f4j#jck3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk$j%j7j'j!p#pq r H mknkokpkqkrksktkoB'xOzjAkAlAmAnAoApAqArAsAtAuAvAwAEGSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(HCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVjWjXjYjZjpB)HqBQF
1044 @property
1045 def pci_bus_id(self) -> str:
1046 """Return a PCI Bus Id string for this device."""
1047 bus_id = handle_return(runtime.cudaDeviceGetPCIBusId(13, self._device_id)) 2-AWC(k
1048 return bus_id[:12].decode() 2-AWC(k
1050 def can_access_peer(self, peer: Device | int) -> bool:
1051 """Check if this device can access memory from the specified peer device.
1053 Queries whether peer-to-peer memory access is supported between this
1054 device and the specified peer device.
1056 Parameters
1057 ----------
1058 peer : Device | int
1059 The peer device to check accessibility to. Can be a :obj:`~_device.Device` object or device ID.
1060 """
1061 peer = Device(peer)
1062 cdef int d1 = <int> self.device_id
1063 cdef int d2 = <int> peer.device_id
1064 if d1 == d2:
1065 return True
1066 cdef int value = 0
1067 with nogil:
1068 HANDLE_RETURN(cydriver.cuDeviceCanAccessPeer(&value, d1, d2))
1069 return bool(value)
1071 @property
1072 def uuid(self) -> str:
1073 """Return a UUID for the device.
1075 Returns 16-octets identifying the device. If the device is in
1076 MIG mode, returns its MIG UUID which uniquely identifies the
1077 subscribed MIG compute instance.
1079 Note
1080 ----
1081 MIG UUID is only returned when device is in MIG mode and the
1082 driver is older than CUDA 11.4.
1084 The UUID is cached after first access to avoid repeated CUDA API calls.
1086 """
1087 cdef cydriver.CUuuid uuid
1088 cdef cydriver.CUdevice dev
1089 cdef bytes uuid_b
1090 cdef str uuid_hex
1092 if self._uuid is None: 2Tx@ArB,p=l-p?l.p@l/p[l:p]l;p^l=pk xxyxzxAxBxCxDxExFxGxHxvg;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql gqjmIxJxhqkmiqlmjqmmKxLxMxNxOxPx-AbCbBcCdC(kWAZhPl0h1hnm2hBg3h4hCg5h=j6h7hDgvk8h5f$kWmQxRxSxR dlMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlq r H u olpl*k+k
1093 dev = self._device_id 2Tx@ArBk vgm l -AbCbBcCdC(kWAZhPl0h1hnm2hBg3h4hCg5h=j6h7hDgvk8h5f$kWmR dlMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlq r H u olpl*k+k
1094 with nogil: 2Tx@ArBk vgm l -AbCbBcCdC(kWAZhPl0h1hnm2hBg3h4hCg5h=j6h7hDgvk8h5f$kWmR dlMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlq r H u olpl*k+k
1095 IF CUDA_CORE_BUILD_MAJOR == 12:
1096 HANDLE_RETURN(cydriver.cuDeviceGetUuid_v2(&uuid, dev))
1097 ELSE: # 13.0+
1098 HANDLE_RETURN(cydriver.cuDeviceGetUuid(&uuid, dev)) 2Tx@ArBk vgm l -AbCbBcCdC(kWAZhPl0h1hnm2hBg3h4hCg5h=j6h7hDgvk8h5f$kWmR dlMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlq r H u olpl*k+k
1099 uuid_b = cpython.PyBytes_FromStringAndSize(uuid.bytes, sizeof(uuid.bytes)) 2Tx@ArBk vgm l -AbCbBcCdC(kWAZhPl0h1hnm2hBg3h4hCg5h=j6h7hDgvk8h5f$kWmR dlMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlq r H u olpl*k+k
1100 uuid_hex = uuid_b.hex() 2Tx@ArBk vgm l -AbCbBcCdC(kWAZhPl0h1hnm2hBg3h4hCg5h=j6h7hDgvk8h5f$kWmR dlMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlq r H u olpl*k+k
1101 # 8-4-4-4-12
1102 self._uuid = f"{uuid_hex[:8]}-{uuid_hex[8:12]}-{uuid_hex[12:16]}-{uuid_hex[16:20]}-{uuid_hex[20:]}" 2Tx@ArBk vgm l -AbCbBcCdC(kWAZhPl0h1hnm2hBg3h4hCg5h=j6h7hDgvk8h5f$kWmR dlMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlq r H u olpl*k+k
1103 return self._uuid 2Tx@ArB,p=l-p?l.p@l/p[l:p]l;p^l=pk xxyxzxAxBxCxDxExFxGxHxvg;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql gqjmIxJxhqkmiqlmjqmmKxLxMxNxOxPx-AbCbBcCdC(kWAZhPl0h1hnm2hBg3h4hCg5h=j6h7hDgvk8h5f$kWmQxRxSxR dlMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlq r H u olpl*k+k
1105 @property
1106 def name(self) -> str:
1107 """Return the device name."""
1108 # Use 256 characters to be consistent with CUDA Runtime
1109 cdef int LENGTH = 256 2TxOoBF+A,AontF[AuFXmhFtj4xlFmFnFoFpFqFrFsFDk2EpnvFwFxFqnyFQldFPs?DKzLzfAkF]ADFrnEFWzVAnl
1110 cdef bytes name = bytes(LENGTH) 2TxOoBF+A,AontF[AuFXmhFtj4xlFmFnFoFpFqFrFsFDk2EpnvFwFxFqnyFQldFPs?DKzLzfAkF]ADFrnEFWzVAnl
1111 cdef char* name_ptr = name 2TxOoBF+A,AontF[AuFXmhFtj4xlFmFnFoFpFqFrFsFDk2EpnvFwFxFqnyFQldFPs?DKzLzfAkF]ADFrnEFWzVAnl
1112 cdef cydriver.CUdevice this_dev = self._device_id 2TxOoBF+A,AontF[AuFXmhFtj4xlFmFnFoFpFqFrFsFDk2EpnvFwFxFqnyFQldFPs?DKzLzfAkF]ADFrnEFWzVAnl
1113 with nogil: 2TxOoBF+A,AontF[AuFXmhFtj4xlFmFnFoFpFqFrFsFDk2EpnvFwFxFqnyFQldFPs?DKzLzfAkF]ADFrnEFWzVAnl
1114 HANDLE_RETURN(cydriver.cuDeviceGetName(name_ptr, LENGTH, this_dev)) 2TxOoBF+A,AontF[AuFXmhFtj4xlFmFnFoFpFqFrFsFDk2EpnvFwFxFqnyFQldFPs?DKzLzfAkF]ADFrnEFWzVAnl
1115 name = name.split(b"\0")[0] 2TxOoBF+A,AontF[AuFXmhFtj4xlFmFnFoFpFqFrFsFDk2EpnvFwFxFqnyFQldFPs?DKzLzfAkF]ADFrnEFWzVAnl
1116 return name.decode() 2TxOoBF+A,AontF[AuFXmhFtj4xlFmFnFoFpFqFrFsFDk2EpnvFwFxFqnyFQldFPs?DKzLzfAkF]ADFrnEFWzVAnl
1118 @property
1119 def properties(self) -> DeviceProperties:
1120 """Return a :obj:`~_device.DeviceProperties` class with information about the device."""
1121 if self._properties is None: 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kmqnqzyAyByCyDy8g9g!g#g$g%gEyGpHpIpJpTl$p%pUlVlWlXlYlKpLpMpNpOpPpQpRp'pFyGyHyIyJyKyuovo%e4e8d'gReSe(gAd)g*g+g,g-g'e5e9d.gTeUe/gBd:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhch(e6e!ddhVeWeehCdfhghhhihjh)e7e#dkhXeYelhDdmhnhohphqh*e8e$dwoZe0erhEdshthuhvhwh+e9e%dxh1e2eyhFdzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVh(pLyMyxo)pSp*pyozoAoFCBoCoDoEoFoGoHoIoJozkAklnmn,kZl0lKo1l2l3l4l5l6lxAyAzAAABACAtyDANlEAuyFA/kGAvyHAeAIAwyJAxyKAGzLAHzMAIzNAOAPAWhQARASAXh8k^k7l_k`k{k|k}k9k,eMo-e.e/e:e;e=eDm?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbf,p=l-p?l.p@l/p[l:p]l;p^ltj=p4xk xxyxzxAxBxCxDxExFxGxHxvg;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql gqjmIxJxhqkmiqlmjqmmKxLxMxNxOxPxNoVp^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEzI Blqlb GdHd~AaB:jn 2C5C_AXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndf~krlLoukTAYh8lsl9lCl!lDltl#l$lBk!k#k-kElZhulPlFl0hWp1hGlnmHl2hvlBgIl3hUzWxXpXx%lYx'lZx(lPz)l0xJl1xYpQz+p4hKlCg*l5h+l=j,l6hVz7hLlDg-lvk8h.l/lsyMlZp9hwl3e0pCk5f.k2x$kWm3x%k'd(dUp'kxlEmQbRb[BSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3byy4b5b6b7b8b!A#Amy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`bID{bJD|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAscKDtcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcQxRxSxUAR !h)d#h$hLc*d%h'hMcNc(h+d)h*hOc,d+h,hPcId6f7fEg-h.h/hJdFgGg:h;hS g T U c h V W d X Y -d.d/d:d;d=h=d?h@h?d[h]hbg) cgdgJ * egfgK Mes NeOeo t PeQep HgKd8f9fIg^h_h`hLdJgKg{h|h!fZ #f$fv 0 %f'fw Md(f)f}h~haiLgMgbicidi@deifi[dgihi+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|djiki0c}dlimi1cRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiziaeAiBigg[ hgigL ] jgkgM OgTdPgQg%cUdRgSg'cVd.f/fTgCiDiEiWdUgVgFiGi3 i 4 5 e j 6 7 f 8 9 becedeeefeHigeIiJiheKiLilg^ mgngN _ ogpgO wg(cxgyg! )czgAg# WgXd:f;fXgMiNiOiYdYgZgPiQi=f$ ?f@fB % [f]fC Zd^f_fRiSiTi0g1gUiViWiieXiYijeZi0i` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipe2i3i@cqe4i5i[c4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i+ise,i-iqgfbrgsgP gbtgugQ q r H u dded.ite/i:ifdue;i=igdhdidjd3g6d4g5gkd7d6g7gld?ive@i[imdwe]i^ind_ixe`i{iodye|i}ipd~izeajbjqdAecjdjrdejBefjgjsdCehjijtdjjDekjljudEemjnjvdwdojFepjqjxdGerjsjydzdPmQmffRmSmTmUm|Agfhfif}AjfkflfmfnfVmofpfqfrfsfvCVxwC{BtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f
1122 self._properties = DeviceProperties._init(self._device_id) 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7kmqnqzyAyByCyDy8g9g!g#g$g%gEyGpHpIpJpTl$p%pUlVlWlXlYlKpLpMpNpOpPpQpRp'pFyGyHyIyJyKyuovo%e4e8d'gReSe(gAd)g*g+g,g-g'e5e9d.gTeUe/gBd:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhch(e6e!ddhVeWeehCdfhghhhihjh)e7e#dkhXeYelhDdmhnhohphqh*e8e$dwoZe0erhEdshthuhvhwh+e9e%dxh1e2eyhFdzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVh(pLyMyxo)pSp*pyozoAoBoCoDoEoFoGoHoIoJozkAklnmn,kZl0lKo1l2l3l4l5l6lWhXh8k^k7l_k`k{k|k}k9k,e-e.e/e:e;e=eDm?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfk vgm l 0j(j)j*j+j,joq-j8j.jTp9j/j1jI Blqlb GdHd~AaB:jn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdf~krlLoukYh8lsl9lCl!lDltl#l$lBk!k#k-kElZhulFl0h1hGlHl2hvlBgIl3hWxXx%lYx'lZx(l)l0xJl1x4hKlCg*l5h+l,l6h7hLlDg-l8h.l/lMl9hwl3eCk5f.k2x$k3x%k'd(dUp'kxlEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#A9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h)d#h$hLc*d%h'hMcNc(h+d)h*hOc,d+h,hPcId6f7fEg-h.h/hJdFgGg:h;hS g T U c h V W d X Y -d.d/d:d;d=h=d?h@h?d[h]hbg) cgdgJ * egfgK Mes NeOeo t PeQep HgKd8f9fIg^h_h`hLdJgKg{h|h!fZ #f$fv 0 %f'fw Md(f)f}h~haiLgMgbicidi@deifi[dgihi+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|djiki0c}dlimi1cRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiziaeAiBigg[ hgigL ] jgkgM OgTdPgQg%cUdRgSg'cVd.f/fTgCiDiEiWdUgVgFiGi3 i 4 5 e j 6 7 f 8 9 becedeeefeHigeIiJiheKiLilg^ mgngN _ ogpgO wg(cxgyg! )czgAg# WgXd:f;fXgMiNiOiYdYgZgPiQi=f$ ?f@fB % [f]fC Zd^f_fRiSiTi0g1gUiViWiieXiYijeZi0i` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipe2i3i@cqe4i5i[c4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i+ise,i-iqgfbrgsgP gbtgugQ q r H u dded.ite/i:ifdue;i=igdhdidjd3g6d4g5gkd7d6g7gld?ive@i[imdwe]i^ind_ixe`i{iodye|i}ipd~izeajbjqdAecjdjrdejBefjgjsdCehjijtdjjDekjljudEemjnjvdwdojFepjqjxdGerjsjydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f
1124 return self._properties 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kmqnqzyAyByCyDy8g9g!g#g$g%gEyGpHpIpJpTl$p%pUlVlWlXlYlKpLpMpNpOpPpQpRp'pFyGyHyIyJyKyuovo%e4e8d'gReSe(gAd)g*g+g,g-g'e5e9d.gTeUe/gBd:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhch(e6e!ddhVeWeehCdfhghhhihjh)e7e#dkhXeYelhDdmhnhohphqh*e8e$dwoZe0erhEdshthuhvhwh+e9e%dxh1e2eyhFdzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVh(pLyMyxo)pSp*pyozoAoFCBoCoDoEoFoGoHoIoJozkAklnmn,kZl0lKo1l2l3l4l5l6lxAyAzAAABACAtyDANlEAuyFA/kGAvyHAeAIAwyJAxyKAGzLAHzMAIzNAOAPAWhQARASAXh8k^k7l_k`k{k|k}k9k,eMo-e.e/e:e;e=eDm?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbf,p=l-p?l.p@l/p[l:p]l;p^ltj=p4xk xxyxzxAxBxCxDxExFxGxHxvg;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql gqjmIxJxhqkmiqlmjqmmKxLxMxNxOxPxNoVp^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEzI Blqlb GdHd~AaB:jn 2C5C_AXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndf~krlLoukTAYh8lsl9lCl!lDltl#l$lBk!k#k-kElZhulPlFl0hWp1hGlnmHl2hvlBgIl3hUzWxXpXx%lYx'lZx(lPz)l0xJl1xYpQz+p4hKlCg*l5h+l=j,l6hVz7hLlDg-lvk8h.l/lsyMlZp9hwl3e0pCk5f.k2x$kWm3x%k'd(dUp'kxlEmQbRb[BSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3byy4b5b6b7b8b!A#Amy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`bID{bJD|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAscKDtcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcQxRxSxUAR !h)d#h$hLc*d%h'hMcNc(h+d)h*hOc,d+h,hPcId6f7fEg-h.h/hJdFgGg:h;hS g T U c h V W d X Y -d.d/d:d;d=h=d?h@h?d[h]hbg) cgdgJ * egfgK Mes NeOeo t PeQep HgKd8f9fIg^h_h`hLdJgKg{h|h!fZ #f$fv 0 %f'fw Md(f)f}h~haiLgMgbicidi@deifi[dgihi+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|djiki0c}dlimi1cRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiziaeAiBigg[ hgigL ] jgkgM OgTdPgQg%cUdRgSg'cVd.f/fTgCiDiEiWdUgVgFiGi3 i 4 5 e j 6 7 f 8 9 becedeeefeHigeIiJiheKiLilg^ mgngN _ ogpgO wg(cxgyg! )czgAg# WgXd:f;fXgMiNiOiYdYgZgPiQi=f$ ?f@fB % [f]fC Zd^f_fRiSiTi0g1gUiViWiieXiYijeZi0i` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipe2i3i@cqe4i5i[c4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i+ise,i-iqgfbrgsgP gbtgugQ q r H u dded.ite/i:ifdue;i=igdhdidjd3g6d4g5gkd7d6g7gld?ive@i[imdwe]i^ind_ixe`i{iodye|i}ipd~izeajbjqdAecjdjrdejBefjgjsdCehjijtdjjDekjljudEemjnjvdwdojFepjqjxdGerjsjydzdPmQmffRmSmTmUm|Agfhfif}AjfkflfmfnfVmofpfqfrfsfvCVxwC{BtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f
1126 @property
1127 def resources(self) -> DeviceResources:
1128 """Return the hardware resource query namespace for this device."""
1129 if self._resources is None: 2Qoujvjb GdHdwjxjyjzjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o
1130 self._resources = DeviceResources._init(self._device_id) 2Qoujvjb GdHdwjxjyjzjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o
1131 return self._resources 2Qoujvjb GdHdwjxjyjzjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o
1133 @property
1134 def compute_capability(self) -> ComputeCapability:
1135 """Return a named tuple with 2 fields: major and minor."""
1136 cdef DeviceProperties prop = self.properties 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kTl$p%pUlVlWlXlYl'puovo8dAd9dBd!dCd#dDd$dEd%dFd(pxo)p*pyozoAoFCBoCoDoEoFoGoHozkAklnmn,kZl0lKo1l2l3l4l5l6ltyNluy/kvyeAwyxyGzHzIz8k^k7l_k`k{k|k}k9ktj4xNoVpI Blqlb GdHd~AaB:jn 2C5C_AXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbEmQbRb[BSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3byy4b5b6b7b8b!A#A9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bID{bJD|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcscKDtcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKc)dLc*dMcNc+dOc,dPcIdJdg c h d X Y -d.d/d:d;d=d?d) J * K s o t p KdLdZ v 0 w Md@d[d+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{d|d0c}d1cRdSd: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$c~dae[ L ] M Td%cUd'cVdWdi e j f 8 9 becedeeefegehe^ N _ O (c! )c# XdYd$ B % C Zdieje` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoepe@cqe[c4d5dab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcdresefbP gbQ ddedtefduegdhdidjd6dkd7dldvemdwendxeodyepdzeqdAerdBesdCetdDeudEevdwdFexdGeydzdPmQmffRmSmTmUm|Agfhfif}AjfkflfmfnfVmofpfqfrfsfvCVxwCHeIeJeKe
1137 cached = prop._cache.get("compute_capability") 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kTl$p%pUlVlWlXlYl'puovo8dAd9dBd!dCd#dDd$dEd%dFd(pxo)p*pyozoAoFCBoCoDoEoFoGoHozkAklnmn,kZl0lKo1l2l3l4l5l6ltyNluy/kvyeAwyxyGzHzIz8k^k7l_k`k{k|k}k9ktj4xNoVpI Blqlb GdHd~AaB:jn 2C5C_AXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbEmQbRb[BSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3byy4b5b6b7b8b!A#A9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bID{bJD|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcscKDtcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKc)dLc*dMcNc+dOc,dPcIdJdg c h d X Y -d.d/d:d;d=d?d) J * K s o t p KdLdZ v 0 w Md@d[d+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{d|d0c}d1cRdSd: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$c~dae[ L ] M Td%cUd'cVdWdi e j f 8 9 becedeeefegehe^ N _ O (c! )c# XdYd$ B % C Zdieje` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoepe@cqe[c4d5dab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcdresefbP gbQ ddedtefduegdhdidjd6dkd7dldvemdwendxeodyepdzeqdAerdBesdCetdDeudEevdwdFexdGeydzdPmQmffRmSmTmUm|Agfhfif}AjfkflfmfnfVmofpfqfrfsfvCVxwCHeIeJeKe
1138 if cached is not None: 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kTl$p%pUlVlWlXlYl'puovo8dAd9dBd!dCd#dDd$dEd%dFd(pxo)p*pyozoAoFCBoCoDoEoFoGoHozkAklnmn,kZl0lKo1l2l3l4l5l6ltyNluy/kvyeAwyxyGzHzIz8k^k7l_k`k{k|k}k9ktj4xNoVpI Blqlb GdHd~AaB:jn 2C5C_AXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbEmQbRb[BSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3byy4b5b6b7b8b!A#A9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bID{bJD|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcscKDtcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKc)dLc*dMcNc+dOc,dPcIdJdg c h d X Y -d.d/d:d;d=d?d) J * K s o t p KdLdZ v 0 w Md@d[d+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{d|d0c}d1cRdSd: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$c~dae[ L ] M Td%cUd'cVdWdi e j f 8 9 becedeeefegehe^ N _ O (c! )c# XdYd$ B % C Zdieje` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoepe@cqe[c4d5dab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcdresefbP gbQ ddedtefduegdhdidjd6dkd7dldvemdwendxeodyepdzeqdAerdBesdCetdDeudEevdwdFexdGeydzdPmQmffRmSmTmUm|Agfhfif}AjfkflfmfnfVmofpfqfrfsfvCVxwCHeIeJeKe
1139 return cached 2a FCtyNluy/kvyeAwyxyGzHzIztj4xNoqlb GdHd2C5C_AXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbEmQbRb[BSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3byy4b5b6b7b8b!A#A9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bID{bJD|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcscKDtcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcc d J K o p v w + QcRc, x y - ScTcUcVcWc. / XcYcZcNd0c1c: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cL M Td%cUd'ce f N O ! # B C ` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d@c[cab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcdP Q ddedfdgdhdidjd6dkd7dldmdndodpdqdrdsdtdudvdwdxdydzdPmQmffRmSmTmUm|Agfhfif}AjfkflfmfnfVmofpfqfrfsfvCVxwC
1140 cc = ComputeCapability(prop.compute_capability_major, prop.compute_capability_minor) 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kTl$p%pUlVlWlXlYl'puovo8dAd9dBd!dCd#dDd$dEd%dFd(pxo)p*pyozoAoBoCoDoEoFoGoHozkAklnmn,kZl0lKo1l2l3l4l5l6lNl/k8k^k7l_k`k{k|k}k9k4xNoVpI Blqlb GdHd~AaB:jn hbibjbOlkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#A9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKc)dLc*dMcNc+dOc,dPcIdJdg c h d X Y -d.d/d:d;d=d?d) J * K s o t p KdLdZ v 0 w Md@d[d+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{d|d0c}d1cRdSd: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$c~dae[ L ] M Td%cUd'cVdWdi e j f 8 9 becedeeefegehe^ N _ O (c! )c# XdYd$ B % C Zdieje` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoepe@cqe[c4d5dab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcdresefbP gbQ ddedtefduegdhdidjd6dkd7dldvemdwendxeodyepdzeqdAerdBesdCetdDeudEevdwdFexdGeydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsfHeIeJeKe
1141 return prop._cache.setdefault("compute_capability", cc) 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kTl$p%pUlVlWlXlYl'puovo8dAd9dBd!dCd#dDd$dEd%dFd(pxo)p*pyozoAoBoCoDoEoFoGoHozkAklnmn,kZl0lKo1l2l3l4l5l6lNl/k8k^k7l_k`k{k|k}k9k4xNoVpI Blqlb GdHd~AaB:jn hbibjbOlkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#A9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKc)dLc*dMcNc+dOc,dPcIdJdg c h d X Y -d.d/d:d;d=d?d) J * K s o t p KdLdZ v 0 w Md@d[d+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{d|d0c}d1cRdSd: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$c~dae[ L ] M Td%cUd'cVdWdi e j f 8 9 becedeeefegehe^ N _ O (c! )c# XdYd$ B % C Zdieje` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoepe@cqe[c4d5dab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcdresefbP gbQ ddedtefduegdhdidjd6dkd7dldvemdwendxeodyepdzeqdAerdBesdCetdDeudEevdwdFexdGeydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsfHeIeJeKe
1143 @property
1144 def arch(self) -> str:
1145 """Return compute capability as a string (e.g., '75' for CC 7.5)."""
1146 return f"{self.compute_capability.major}{self.compute_capability.minor}" 2a tyNluy/kvyeAwyxyGzHzIzNoqlb GdHd_AeCkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbEmQbRb[BSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3byy4b5b6b7b8b!A#A9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcc d J K o p v w + QcRc, x y - ScTcUcVcWc. / XcYcZc0c1c: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cL M %c'ce f N O ! # B C ` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c@c[cab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcdP Q ddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdPmQmffRmSmTmUm|Agfhfif}AjfkflfmfnfVmofpfqfrfsfvCVxwC
1148 @property
1149 def context(self) -> Context:
1150 """Return the :obj:`~_context.Context` associated with this device.
1152 Note
1153 ----
1154 Device must be initialized.
1156 """
1157 self._check_context_initialized() 29o%obg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oEkqmhn{olg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpinzmknqpspupwpypApCpEp
1158 return self._context 29o%obg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oEkqmhn{olg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpinzmknqpspupwpypApCpEp
1160 @property
1161 def memory_resource(self) -> MemoryResource:
1162 """Return :obj:`~_memory.MemoryResource` associated with this device."""
1163 cdef int attr, device_id
1164 if self._memory_resource is None: 2albl/AYmzlUx?jag@j[j]jS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbk!j4f4j#jck3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk$j%j7j'jmknkokpkqkrksktk'xOzjAkAlAmAnAoApAqArAsAtAuAvAwAEGCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZjpBqBQF
1165 # If the device is in TCC mode, or does not support memory pools for some other reason,
1166 # use the SynchronousMemoryResource which does not use memory pools.
1167 device_id = self._device_id 2albl/AYmzlUx?jag@j[j]jS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbk!j4f4j#jck3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk$j%j7j'jmknkokpkqkrksktk'xOzjAkAlAmAnAoApAqArAsAtAuAvAwACjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZjpBqB
1168 with nogil: 2albl/AYmzlUx?jag@j[j]jS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbk!j4f4j#jck3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk$j%j7j'jmknkokpkqkrksktk'xOzjAkAlAmAnAoApAqArAsAtAuAvAwACjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZjpBqB
1169 HANDLE_RETURN( 2albl/AYmzlUx?jag@j[j]jS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbk!j4f4j#jck3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk$j%j7j'jmknkokpkqkrksktk'xOzjAkAlAmAnAoApAqArAsAtAuAvAwACjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZjpBqB
1170 cydriver.cuDeviceGetAttribute( 2albl/AYmzlUx?jag@j[j]jS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbk!j4f4j#jck3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk$j%j7j'jmknkokpkqkrksktk'xOzjAkAlAmAnAoApAqArAsAtAuAvAwACjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZjpBqB
1171 &attr, cydriver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED, device_id
1172 )
1173 )
1174 if attr == 1: 2albl/AYmzlUx?jag@j[j]jS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbk!j4f4j#jck3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk$j%j7j'jmknkokpkqkrksktk'xOzjAkAlAmAnAoApAqArAsAtAuAvAwACjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZjpBqB
1175 from cuda.core._memory import DeviceMemoryResource 2albl/AYmzlUx?jag@j[j]jS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbk!j4f4j#jck3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk$j%j7j'jmknkokpkqkrksktk'xOzjAkAlAmAnAoApAqArAsAtAuAvAwACjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZjpBqB
1176 self._memory_resource = DeviceMemoryResource(self._device_id) 2albl/AYmzlUx?jag@j[j]jS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbk!j4f4j#jck3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk$j%j7j'jmknkokpkqkrksktk'xOzjAkAlAmAnAoApAqArAsAtAuAvAwACjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZjpBqB
1177 else:
1178 from cuda.core._memory._legacy import _SynchronousMemoryResource
1179 self._memory_resource = _SynchronousMemoryResource(self._device_id)
1181 return self._memory_resource 2albl/AYmzlUx?jag@j[j]jS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbk!j4f4j#jck3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk$j%j7j'jmknkokpkqkrksktk'xOzjAkAlAmAnAoApAqArAsAtAuAvAwAEGCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZjpBqBQF
1183 @memory_resource.setter
1184 def memory_resource(self, mr: MemoryResource) -> None:
1185 from cuda.core._memory import MemoryResource
1186 assert_type(mr, MemoryResource)
1187 self._memory_resource = mr
1189 @property
1190 def default_stream(self) -> Stream:
1191 """Return default CUDA :obj:`~_stream.Stream` associated with this device.
1193 The type of default stream returned depends on if the environment
1194 variable CUDA_PYTHON_CUDA_PER_THREAD_DEFAULT_STREAM is set.
1196 If set, returns a per-thread default stream. Otherwise returns
1197 the legacy stream.
1199 """
1200 return default_stream() 2zkAkSFTF*H!eUF#e$eVFWFzGAGBGCGDG+A,AontF[AuFXmhF+H,HDk2E-H5E.H6E/H7E:H8E;H9E=H!E?H@H[H]H^H_H`H{H|H}H~HaIpnvFwFxFqnyFQldFPs?DKzLzfAkF]ADFrnEFkqlq|B}B~BaCalblXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zUx?j~krlukslClBk!k#k-kulPlvlBgXpJlKlCgLlDgsyMlZpLFwl3e0pCk5f.kag@j[j]jS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbk!j4f4j#jck3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk$j%j7j'jq r mknkokpkqkrksktk[EOzjAkAlAmAnAoApAqArAsAtAuAvAwAEGCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZjpBqBQF
1202 def __int__(self) -> int:
1203 """Return device_id."""
1204 return self._device_id 2IFJFKF3Ealbl
1206 def __repr__(self) -> str:
1207 return f"<Device {self._device_id} ({self.name})>" 2TxOoBF+A,AontF[AuFXmhFtj4xlFmFnFoFpFqFrFsFDk2EpnvFwFxFqnyFQldFPs?DKzLzfAkF]ADFrnEFWznl
1209 def __hash__(self) -> int:
1210 return hash(self.uuid) 2Tx@ArB,p=l-p?l.p@l/p[l:p]l;p^l=pk xxyxzxAxBxCxDxExFxGxHxvg;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql gqjmIxJxhqkmiqlmjqmmKxLxMxNxOxPxbCbBcCdCZhPl0h1hnm2hBg3h4hCg5h=j6h7hDgvk8h5f$kWmQxRxSxR dlMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlq r H u olpl*k+k
1212 def __eq__(self, other: object) -> bool:
1213 if not isinstance(other, Device): 2Tx@A,p=l-p?l.p@l/p[l:p]l;p^l=pk xxyxzxAxBxCxDxExFxGxHxvg;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql gqjmIxJxhqkmiqlmjqmmKxLxMxNxOxPx_EbB`E}EZhPl0h1hnm2hBg3h4hCg5h=j6h7hDgvk8h5f$kWmQxRxSxR !owg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pq r u *k+k{D
1214 return NotImplemented 2Tx@A}E!owg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9p{D
1215 return self._device_id == other._device_id 2Tx,p=l-p?l.p@l/p[l:p]l;p^l=pk xxyxzxAxBxCxDxExFxGxHxvg;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql gqjmIxJxhqkmiqlmjqmmKxLxMxNxOxPx_EbB`EZhPl0h1hnm2hBg3h4hCg5h=j6h7hDgvk8h5f$kWmQxRxSxR !oq r u *k+k
1217 def __reduce__(self) -> tuple[object, ...]:
1218 return Device, (self.device_id,) 2OoBF+A,AontF[AuFXmhFtjDk5E6E7E8E9E!EpnvFwFxFqnyFQldFPsKzLzfA]Arnkqlq|B}B~BaC!p#p
1220 def set_current(self, ctx: Context | None = None) -> Context | None:
1221 """Set device to be used for GPU executions.
1223 Initializes CUDA and sets the calling thread to a valid CUDA
1224 context. By default the primary context is used, but optional `ctx`
1225 parameter can be used to explicitly supply a :obj:`~_context.Context` object.
1227 Providing a `ctx` causes the previous set context to be popped and returned.
1229 Parameters
1230 ----------
1231 ctx : :obj:`~_context.Context`, optional
1232 Optional context to push onto this device's current thread stack.
1234 Returns
1235 -------
1236 :obj:`~_context.Context`, optional
1237 Popped context.
1239 Examples
1240 --------
1241 Acts as an entry point of this object. Users always start a code by
1242 calling this method, e.g.
1244 >>> from cuda.core import Device
1245 >>> dev0 = Device(0)
1246 >>> dev0.set_current()
1247 >>> # ... do work on device 0 ...
1249 """
1250 cdef ContextHandle h_context
1251 cdef cydriver.CUcontext prev_ctx, curr_ctx
1252 cdef Context prev_owned = None 2yCpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqDCTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:rGC;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsLCxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAWhQARASAMCXhDsEsFsGsHsIsJsKsLs,eMoMs-e.e/e:e;e=eDmNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbf*AOs,p=l-p?l.p@l/p[l:p]l;p^l=pk xxyxzxAxBxCxDxExFxGxHxDkvg2E;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql Psgq?DjmIxJxhqkmiqlmjqmmKxLxMxNxOxPxQsNCRsSsTsUsVsalblOCWsPCQCRCXsSC^ATCUCWz.AVCYsylI )kZscl0sYC1s2s3s4s5s6sZC7s8s0C1C9s!s#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvjb GdHd]Ewjxjyj$szj^EAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 3C4C6C7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krlLouk%CTAYh)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`C{CXp|C}C%l@s[s'l~CaD(lbDcD)l]s^sJl_sdDYpeDfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwD9hfn@BgnAlwl3e0pxDCkyD5f.katzDADBDDDFD%k'd(dGD'kxlbtQbRbHDSbctTbUbVbdtWbetftgthtitjtktltmtntXbYbZb0b1b2b3byy4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKc]BQxzFRx^BSxAFUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvevfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvRDSvTvUvSDTDVvWvXvYvUDZvVD0vWD1vVx2v3v4vXDYD5vZD6v7v`B8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@voB0D[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.w/w:w;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex
1254 if ctx is not None: 2yCpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqDCTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:rGC;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsLCxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAWhQARASAMCXhDsEsFsGsHsIsJsKsLs,eMoMs-e.e/e:e;e=eDmNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbf*AOs,p=l-p?l.p@l/p[l:p]l;p^l=pk xxyxzxAxBxCxDxExFxGxHxDkvg2E;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql Psgq?DjmIxJxhqkmiqlmjqmmKxLxMxNxOxPxQsNCRsSsTsUsVsalblOCWsPCQCRCXsSC^ATCUCWz.AVCYsylI )kZscl0sYC1s2s3s4s5s6sZC7s8s0C1C9s!s#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvjb GdHd]Ewjxjyj$szj^EAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 3C4C6C7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krlLouk%CTAYh)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`C{CXp|C}C%l@s[s'l~CaD(lbDcD)l]s^sJl_sdDYpeDfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwD9hfn@BgnAlwl3e0pxDCkyD5f.katzDADBDDDFD%k'd(dGD'kxlbtQbRbHDSbctTbUbVbdtWbetftgthtitjtktltmtntXbYbZb0b1b2b3byy4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKc]BQxzFRx^BSxAFUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvevfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvRDSvTvUvSDTDVvWvXvYvUDZvVD0vWD1vVx2v3v4vXDYD5vZD6v7v`B8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@voB0D[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.w/w:w;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex
1255 # TODO: revisit once Context is cythonized
1256 assert_type(ctx, Context) 2]E^E
1257 if ctx._device_id != self._device_id: 2]E^E
1258 raise RuntimeError(
1259 "the provided context was created on the device with"
1260 f" id={ctx._device_id}, which is different from the target id={self._device_id}"
1261 )
1262 if self._has_inited and self._context is not None: 2]E^E
1263 prev_owned = self._context 2]E^E
1264 # prev_ctx is the previous context
1265 curr_ctx = as_cu(ctx._h_context) 2]E^E
1266 prev_ctx = NULL 2]E^E
1267 with nogil: 2]E^E
1268 HANDLE_RETURN(cydriver.cuCtxPopCurrent(&prev_ctx)) 2]E^E
1269 HANDLE_RETURN(cydriver.cuCtxPushCurrent(curr_ctx)) 2]E^E
1270 self._has_inited = True 2]E^E
1271 self._context = ctx # Store owning context reference 2]E^E
1272 if prev_ctx != NULL: 2]E^E
1273 if prev_owned is not None and as_cu(prev_owned._h_context) == prev_ctx: 2]E^E
1274 return prev_owned 2]E^E
1275 return Context._from_handle(Context, create_context_handle_ref(prev_ctx), self._device_id)
1276 else:
1277 # use primary ctx
1278 h_context = get_primary_context(self._device_id) 2yCpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqDCTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:rGC;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsLCxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAWhQARASAMCXhDsEsFsGsHsIsJsKsLs,eMoMs-e.e/e:e;e=eDmNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbf*AOs,p=l-p?l.p@l/p[l:p]l;p^l=pk xxyxzxAxBxCxDxExFxGxHxDkvg2E;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql Psgq?DjmIxJxhqkmiqlmjqmmKxLxMxNxOxPxQsNCRsSsTsUsVsalblOCWsPCQCRCXsSC^ATCUCWz.AVCYsylI )kZscl0sYC1s2s3s4s5s6sZC7s8s0C1C9s!s#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 3C4C6C7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krlLouk%CTAYh)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`C{CXp|C}C%l@s[s'l~CaD(lbDcD)l]s^sJl_sdDYpeDfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwD9hfn@BgnAlwl3e0pxDCkyD5f.katzDADBDDDFD%k'd(dGD'kxlbtQbRbHDSbctTbUbVbdtWbetftgthtitjtktltmtntXbYbZb0b1b2b3byy4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKc]BQxzFRx^BSxAFUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvevfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvRDSvTvUvSDTDVvWvXvYvUDZvVD0vWD1vVx2v3v4vXDYD5vZD6v7v`B8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@voB0D[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.w/w:w;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex
1279 if h_context.get() == NULL: 2yCpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqDCTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:rGC;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsLCxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAWhQARASAMCXhDsEsFsGsHsIsJsKsLs,eMoMs-e.e/e:e;e=eDmNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbf*AOs,p=l-p?l.p@l/p[l:p]l;p^l=pk xxyxzxAxBxCxDxExFxGxHxDkvg2E;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql Psgq?DjmIxJxhqkmiqlmjqmmKxLxMxNxOxPxQsNCRsSsTsUsVsalblOCWsPCQCRCXsSC^ATCUCWz.AVCYsylI )kZscl0sYC1s2s3s4s5s6sZC7s8s0C1C9s!s#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 3C4C6C7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krlLouk%CTAYh)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`C{CXp|C}C%l@s[s'l~CaD(lbDcD)l]s^sJl_sdDYpeDfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwD9hfn@BgnAlwl3e0pxDCkyD5f.katzDADBDDDFD%k'd(dGD'kxlbtQbRbHDSbctTbUbVbdtWbetftgthtitjtktltmtntXbYbZb0b1b2b3byy4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKc]BQxzFRx^BSxAFUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvevfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvRDSvTvUvSDTDVvWvXvYvUDZvVD0vWD1vVx2v3v4vXDYD5vZD6v7v`B8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@voB0D[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.w/w:w;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex
1280 raise ValueError("Cannot set NULL context as current")
1281 with nogil: 2yCpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqDCTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:rGC;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsLCxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAWhQARASAMCXhDsEsFsGsHsIsJsKsLs,eMoMs-e.e/e:e;e=eDmNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbf*AOs,p=l-p?l.p@l/p[l:p]l;p^l=pk xxyxzxAxBxCxDxExFxGxHxDkvg2E;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql Psgq?DjmIxJxhqkmiqlmjqmmKxLxMxNxOxPxQsNCRsSsTsUsVsalblOCWsPCQCRCXsSC^ATCUCWz.AVCYsylI )kZscl0sYC1s2s3s4s5s6sZC7s8s0C1C9s!s#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 3C4C6C7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krlLouk%CTAYh)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`C{CXp|C}C%l@s[s'l~CaD(lbDcD)l]s^sJl_sdDYpeDfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwD9hfn@BgnAlwl3e0pxDCkyD5f.katzDADBDDDFD%k'd(dGD'kxlbtQbRbHDSbctTbUbVbdtWbetftgthtitjtktltmtntXbYbZb0b1b2b3byy4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKc]BQxzFRx^BSxAFUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvevfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvRDSvTvUvSDTDVvWvXvYvUDZvVD0vWD1vVx2v3v4vXDYD5vZD6v7v`B8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@voB0D[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.w/w:w;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex
1282 HANDLE_RETURN(cydriver.cuCtxSetCurrent(as_cu(h_context))) 2yCpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqDCTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:rGC;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsLCxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAWhQARASAMCXhDsEsFsGsHsIsJsKsLs,eMoMs-e.e/e:e;e=eDmNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbf*AOs,p=l-p?l.p@l/p[l:p]l;p^l=pk xxyxzxAxBxCxDxExFxGxHxDkvg2E;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql Psgq?DjmIxJxhqkmiqlmjqmmKxLxMxNxOxPxQsNCRsSsTsUsVsalblOCWsPCQCRCXsSC^ATCUCWz.AVCYsylI )kZscl0sYC1s2s3s4s5s6sZC7s8s0C1C9s!s#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 3C4C6C7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krlLouk%CTAYh)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`C{CXp|C}C%l@s[s'l~CaD(lbDcD)l]s^sJl_sdDYpeDfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwD9hfn@BgnAlwl3e0pxDCkyD5f.katzDADBDDDFD%k'd(dGD'kxlbtQbRbHDSbctTbUbVbdtWbetftgthtitjtktltmtntXbYbZb0b1b2b3byy4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKc]BQxzFRx^BSxAFUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvevfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvRDSvTvUvSDTDVvWvXvYvUDZvVD0vWD1vVx2v3v4vXDYD5vZD6v7v`B8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@voB0D[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.w/w:w;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex
1283 self._has_inited = True 2yCpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqDCTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:rGC;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsLCxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAWhQARASAMCXhDsEsFsGsHsIsJsKsLs,eMoMs-e.e/e:e;e=eDmNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbf*AOs,p=l-p?l.p@l/p[l:p]l;p^l=pk xxyxzxAxBxCxDxExFxGxHxDkvg2E;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql Psgq?DjmIxJxhqkmiqlmjqmmKxLxMxNxOxPxQsNCRsSsTsUsVsalblOCWsPCQCRCXsSC^ATCUCWz.AVCYsylI )kZscl0sYC1s2s3s4s5s6sZC7s8s0C1C9s!s#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 3C4C6C7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krlLouk%CTAYh)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`C{CXp|C}C%l@s[s'l~CaD(lbDcD)l]s^sJl_sdDYpeDfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwD9hfn@BgnAlwl3e0pxDCkyD5f.katzDADBDDDFD%k'd(dGD'kxlbtQbRbHDSbctTbUbVbdtWbetftgthtitjtktltmtntXbYbZb0b1b2b3byy4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKc]BQxzFRx^BSxAFUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvevfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvRDSvTvUvSDTDVvWvXvYvUDZvVD0vWD1vVx2v3v4vXDYD5vZD6v7v`B8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@voB0D[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.w/w:w;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex
1284 self._context = Context._from_handle(Context, h_context, self._device_id) # Store owning context 2yCpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqDCTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:rGC;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsLCxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAWhQARASAMCXhDsEsFsGsHsIsJsKsLs,eMoMs-e.e/e:e;e=eDmNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbf*AOs,p=l-p?l.p@l/p[l:p]l;p^l=pk xxyxzxAxBxCxDxExFxGxHxDkvg2E;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql Psgq?DjmIxJxhqkmiqlmjqmmKxLxMxNxOxPxQsNCRsSsTsUsVsalblOCWsPCQCRCXsSC^ATCUCWz.AVCYsylI )kZscl0sYC1s2s3s4s5s6sZC7s8s0C1C9s!s#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 3C4C6C7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krlLouk%CTAYh)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`C{CXp|C}C%l@s[s'l~CaD(lbDcD)l]s^sJl_sdDYpeDfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwD9hfn@BgnAlwl3e0pxDCkyD5f.katzDADBDDDFD%k'd(dGD'kxlbtQbRbHDSbctTbUbVbdtWbetftgthtitjtktltmtntXbYbZb0b1b2b3byy4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKc]BQxzFRx^BSxAFUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvevfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvRDSvTvUvSDTDVvWvXvYvUDZvVD0vWD1vVx2v3v4vXDYD5vZD6v7v`B8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@voB0D[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.w/w:w;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex
1286 def create_context(self, options: ContextOptions | None = None) -> Context:
1287 """Create a new :obj:`~_context.Context` object.
1289 Note
1290 ----
1291 The newly created context will not be set as current.
1293 Parameters
1294 ----------
1295 options : :obj:`~_context.ContextOptions`, optional
1296 Customizable dataclass for context creation options.
1298 Returns
1299 -------
1300 :obj:`~_context.Context`
1301 Newly created context object.
1303 """
1304 cdef int i
1305 cdef object resources
1306 cdef object res
1307 cdef SMResource sm_res
1308 cdef WorkqueueResource wq_res
1309 cdef GreenCtxHandle h_green
1311 if options is None: 2eFujvjb YmzlwjxjyjzjAjBjCFuG
1312 raise ValueError( 2uG
1313 "options with device resources must be provided to create a green context"
1314 )
1316 options = check_or_create_options(ContextOptions, options, "Context options") 2eFujvjb YmzlwjxjyjzjAjBjCFuG
1317 if options.resources is None: 2eFujvjb YmzlwjxjyjzjAjBjCFuG
1318 raise ValueError( 2uG
1319 "ContextOptions.resources must be provided to create a green context"
1320 )
1322 resources = tuple(options.resources) 2eFujvjb YmzlwjxjyjzjAjBjCF
1323 if len(resources) == 0: 2eFujvjb YmzlwjxjyjzjAjBjCF
1324 raise ValueError("ContextOptions.resources must not be empty")
1326 cdef vector[cydriver.CUdevResource] c_resources
1327 c_resources.resize(len(resources)) 2eFujvjb YmzlwjxjyjzjAjBjCF
1329 for i, res in enumerate(resources): 2eFujvjb YmzlwjxjyjzjAjBjCF
1330 if isinstance(res, SMResource): 2eFujvjb YmzlwjxjyjzjAjBjCF
1331 sm_res = <SMResource>res 2eFujvjb YmzlwjxjyjzjAjBjCF
1332 if not sm_res._is_usable: 2eFujvjb YmzlwjxjyjzjAjBjCF
1333 raise ValueError("dry-run SMResource objects cannot be used to create a context") 2CF
1334 c_resources[i] = sm_res._resource 2eFujvjb YmzlwjxjyjzjAjBj
1335 elif isinstance(res, WorkqueueResource): 2zl
1336 wq_res = <WorkqueueResource>res 2zl
1337 c_resources[i] = wq_res._wq_config_resource 2zl
1338 else:
1339 raise TypeError(f"Unsupported context resource type: {type(res)}")
1341 h_green = create_green_ctx_handle( 2eFujvjb YmzlwjxjyjzjAjBj
1342 c_resources.data(),
1343 <unsigned int>(c_resources.size()),
1344 <cydriver.CUdevice>(self._device_id), 2eFujvjb YmzlwjxjyjzjAjBj
1345 <unsigned int>(cydriver.CUgreenCtxCreate_flags.CU_GREEN_CTX_DEFAULT_STREAM),
1346 )
1347 if h_green.get() == NULL: 2eFujvjb YmzlwjxjyjzjAjBj
1348 HANDLE_RETURN(get_last_error())
1349 raise RuntimeError("Failed to create CUDA green context")
1351 return Context._from_green_ctx(Context, h_green, self._device_id) 2eFujvjb YmzlwjxjyjzjAjBj
1353 def create_stream(self, obj: IsStreamType | None = None, options: object = None) -> Stream:
1354 """Create a :obj:`~_stream.Stream` object.
1356 New stream objects can be created in two different ways:
1358 1) Create a new CUDA stream with customizable ``options``.
1359 2) Wrap an existing foreign `obj` supporting the ``__cuda_stream__`` protocol.
1361 Option (2) internally holds a reference to the foreign object
1362 such that the lifetime is managed.
1364 Note
1365 ----
1366 Device must be initialized.
1368 Parameters
1369 ----------
1370 obj : :obj:`~_stream.IsStreamType`, optional
1371 Any object supporting the ``__cuda_stream__`` protocol.
1372 options : :obj:`~_stream.StreamOptions`, optional
1373 Customizable dataclass for stream creation options.
1375 Returns
1376 -------
1377 :obj:`~_stream.Stream`
1378 Newly created stream object.
1380 """
1381 self._check_context_initialized() 2xCbEcEzC=k?kGkACHkRlBCIkSlCC@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kdEGpHpIpJpTlECeEfEUlVlWlXlYlKpLpMpNpOpPpQpRpSpgEhEICJCzkAk,kZl0liE1l2l3l4l5l6lFFGFHFNFOFPFtyNluy/kvyeAwyxyGzHzIzIFJFKF@D[D]D8k^k7l_k`k{k|k}k9kSFTFvGwGUFxGyGjEkEVFWFzGAGBGCGDG*Atj4xlFmFnFoFpFqFrFsFRFTGUGQldFPs?DKzLzfAkFkqlq|B}B~BaClEmEnEoEpEqErEylI )ksEtEuEvEwExEBlyEzEAEBECEDEEEqlcBdBeBfBPogBhBiBjBkBlBmBnB:jgA;kn _AhAiAcHdHXFeHYFfHgHZF0FhHiHjH1FkH2F3F4F5F6F7F8F9F!FlH#F$F%F'FmH(F)FnHoHpHqH*FrH+FsHtH,F-FuHvHwH.FxH/F:F;F=F?F@F[F]F^FyH_F`F{F|FzH}F~FAHBHCHDHaGEHbGFHGHcGdGHHIHJHeGKHfGgGhGiGjGkGlGmGnGLHoGpGqGrGMHsGtGNHOHukBkAlCkCDEDagAF#o$o'oFkgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o|ojnqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppH u rptpvpxpzpBpDpFpFE_DGEHEIEJE`DKELEMENEOEPEQERESETEUEVE{DWEXE'xOzYEZE0E1EQF
1382 return Stream._init(obj=obj, options=options, device_id=self._device_id, ctx=self._context) 2xCbEcEzC=k?kGkACHkRlBCIkSlCC@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kdEGpHpIpJpTlECeEfEUlVlWlXlYlKpLpMpNpOpPpQpRpSpgEhEICJCzkAk,kZl0liE1l2l3l4l5l6lFFGFHFNFOFPFtyNluy/kvyeAwyxyGzHzIzIFJFKF@D[D]D8k^k7l_k`k{k|k}k9kSFTFvGwGUFxGyGjEkEVFWFzGAGBGCGDG*Atj4xlFmFnFoFpFqFrFsFRFTGUGQldFPs?DKzLzfAkFkqlq|B}B~BaClEmEnEoEpEqErEylI )ksEtEuEvEwExEBlyEzEAEBECEDEEEqlcBdBeBfBPogBhBiBjBkBlBmBnB:jgA;kn _AhAiAcHdHXFeHYFfHgHZF0FhHiHjH1FkH2F3F4F5F6F7F8F9F!FlH#F$F%F'FmH(F)FnHoHpHqH*FrH+FsHtH,F-FuHvHwH.FxH/F:F;F=F?F@F[F]F^FyH_F`F{F|FzH}F~FAHBHCHDHaGEHbGFHGHcGdGHHIHJHeGKHfGgGhGiGjGkGlGmGnGLHoGpGqGrGMHsGtGNHOHukBkAlCkCDEDagAF#o$o'oFkgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o|ojnqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppH u rptpvpxpzpBpDpFpFE_DGEHEIEJE`DKELEMENEOEPEQERESETEUEVE{DWEXE'xOzYEZE0E1EQF
1384 def create_event(self, options: EventOptions | None = None) -> Event:
1385 """Create an :obj:`~_event.Event` object without recording it to a :obj:`~_stream.Stream`.
1387 Note
1388 ----
1389 Device must be initialized.
1391 Parameters
1392 ----------
1393 options : :obj:`EventOptions`, optional
1394 Customizable dataclass for event creation options.
1396 Returns
1397 -------
1398 :obj:`~_event.Event`
1399 Newly created event object.
1401 """
1402 self._check_context_initialized() 2ECReSeTeUeVeWeXeYeZe0e1e2e|DIoHCICJCJoKC,kRF}D)k~DclXCsntnunvnwnxn6f7f2j3jX Y `Aynompmwkxkyk8f9f!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUn(f)fVnWnx y 1 2 XnYn*f+f,f-fz A Zn{Armsmtm0n1n2n.f/f5j6j8 9 3n4numvmwmxmym:f;f=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?n^f_f@n[nD E ' ( ]n^n`f{f|f}fF G _n`nAmBmCm{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoto
1403 cdef Context ctx = self._context 2ECReSeTeUeVeWeXeYeZe0e1e2e|DIoHCICJCJoKC,kRF}D)k~DclXCsntnunvnwnxn6f7f2j3jX Y `Aynompmwkxkyk8f9f!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUn(f)fVnWnx y 1 2 XnYn*f+f,f-fz A Zn{Armsmtm0n1n2n.f/f5j6j8 9 3n4numvmwmxmym:f;f=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?n^f_f@n[nD E ' ( ]n^n`f{f|f}fF G _n`nAmBmCm{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoto
1404 return cyEvent._init(cyEvent, self._device_id, ctx._h_context, options, True) 2ECReSeTeUeVeWeXeYeZe0e1e2e|DIoHCICJCJoKC,kRF}D)k~DclXCsntnunvnwnxn6f7f2j3jX Y `Aynompmwkxkyk8f9f!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUn(f)fVnWnx y 1 2 XnYn*f+f,f-fz A Zn{Armsmtm0n1n2n.f/f5j6j8 9 3n4numvmwmxmym:f;f=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?n^f_f@n[nD E ' ( ]n^n`f{f|f}fF G _n`nAmBmCm{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoto
1406 def allocate(self, size: int, *, stream: Stream | GraphBuilder) -> Buffer:
1407 """Allocate device memory from a specified stream.
1409 Allocates device memory of `size` bytes on the specified `stream`
1410 using the memory resource currently associated with this Device.
1412 Note
1413 ----
1414 Device must be initialized.
1416 Parameters
1417 ----------
1418 size : int
1419 Number of bytes to allocate.
1420 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder`
1421 Keyword-only. The stream establishing the stream ordering semantic.
1422 Must be passed explicitly; pass ``self.default_stream`` to use
1423 the default stream.
1425 Returns
1426 -------
1427 :obj:`~_memory.Buffer`
1428 Newly created buffer object.
1430 """
1431 self._check_context_initialized() 2albl/AYmzlUx?j@j[j]jS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbk!j4f4j#jck3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk$j%j7j'jmknkokpkqkrksktk
1432 return self.memory_resource.allocate(size, stream=stream) 2albl/AYmzlUx?j@j[j]jS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbk!j4f4j#jck3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk$j%j7j'jmknkokpkqkrksktk
1434 def sync(self) -> None:
1435 """Synchronize the device.
1437 Note
1438 ----
1439 Device must be initialized.
1441 """
1442 self._check_context_initialized() 2FGGGHGIGJGKGLGMGNGOGPGQGRGSGVGWGXGYGZG0G1G2G3G4G5G6G7G8G9G!G#G$G%G'G(G)G*G+G,G-G.G/G:G;G=G?G@G[G]G^G_G`GKzLz{G|G}G~GaHbHkqlq|B}B~BaCalblgA;khAiAXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F,F-F.F/F:F;F=F?F@F[F]F^F_F`F{F|F}F~FaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGukBk!k#k-kLFCk5f.kq r
1443 handle_return(runtime.cudaDeviceSynchronize()) 2FGGGHGIGJGKGLGMGNGOGPGQGRGSGVGWGXGYGZG0G1G2G3G4G5G6G7G8G9G!G#G$G%G'G(G)G*G+G,G-G.G/G:G;G=G?G@G[G]G^G_G`GKzLz{G|G}G~GaHbHkqlq|B}B~BaCalblgA;khAiAXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F,F-F.F/F:F;F=F?F@F[F]F^F_F`F{F|F}F~FaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGukBk!k#k-kLFCk5f.kq r
1445 def create_graph_builder(self) -> GraphBuilder:
1446 """Create a new :obj:`~graph.GraphBuilder` object.
1448 Returns
1449 -------
1450 :obj:`~graph.GraphBuilder`
1451 Newly created graph builder object.
1453 """
1454 from cuda.core.graph._graph_builder import GraphBuilder 2xCzC=k?kGkACHkBCIkCC@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kFFGFHFNFOFPFtyuy/kvywyxyGzHzIzIFJFKF@D[D]D8k^k_k`k{k|k}k9k'x
1456 self._check_context_initialized() 2xCzC=k?kGkACHkBCIkCC@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kFFGFHFNFOFPFtyuy/kvywyxyGzHzIzIFJFKF@D[D]D8k^k_k`k{k|k}k9k'x
1457 return GraphBuilder._init(self.create_stream()) 2xCzC=k?kGkACHkBCIkCC@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kFFGFHFNFOFPFtyuy/kvywyxyGzHzIzIFJFKF@D[D]D8k^k_k`k{k|k}k9k'x
1460cdef inline int Device_ensure_cuda_initialized() except? -1:
1461 """Initialize CUDA driver and check version compatibility (once per process)."""
1462 global _is_cuInit
1463 if _is_cuInit is False: 2a ~fxCyCbEpqcEqqzCrq=ksq?ktqGkuqACvqHkwqRlxqBCyqIkzqSlAqCCBq@kCq[kDq]kEqJkFqKkGqLkHqMkIqNkJqOkKqPkLqQkMqRkNqSkOqTkPqUkQqVkRqWkSq;lDCXkTqYkUqZkVq0kWq1kXq2kYq3kZq4k0q5k1q6k2q7k3qmq4qnq5qzy6q7qFzAy8q9qBy!qCy#qDy$q8g9g!g%q#g$g%gEy'q(q)qdE*q+q,qGp-qHp.qIp/qJp:qTl;qEC=qeE?qfE@q$p[q%p]qUl^qVl_qWl`qXl{qYl|qKp}qLp~qMparNpbrOpcrPpdrQperRpfr'pgrhrirjrFykrGylrHymrIynrJyorKypruoqrvorr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r(p%rLy'rMy(rxo)r)p*r+rSp,r*p-ryo.rzo/rAo:rFCGCBo;rCo=r?r@r[r]rDo^rEo_rFo`rGo{rgE|rhE}rHo~r|DasIobsHCcsICdsJCesJofsKCgszkhsAkislnjsmnks,klsZlms0lnsKoosiEpsqs1lrs2lss3lts4lus5lvswsxsyszs6lAsBsCsLCxAyAzAAABACAtyDANlEAuyFA/kGAvyHAeAIAwyJAxyKAGzLAHzMAIzNAOAPAWh@DQA[DRA]DSA3EMCXh8kDs^kEs7lFs_kGs`kHs{kIs|kJs}kKs9kLs,eMo4EMsfF-eTx.e@A/erB:e;e=eDmNs?e!eLe@e#ejE[ekE$e]egF^e_e`e{e|e}e~eafbf*AOsOo,p=l+A-p,A?lon.p@l[A/p[lXm:p]l;p^ltj=pk xxyxzxAxBxCxDxExFxGxHxDkvg;j?p_l@p5E[p]p6E^p_p7E`p{p8E|p}p9E~paq!Ebq`l{l|l}l~lambmcmdmm emfmpncqgmdqhmqneqimQlfql #E$EJzPsgqjmKzIxLzJxfAhqkm]AiqlmrnjqmmkqKxlqLx|BMx}BNx~BOxaCPx-AlEQsmENCnERsoESspETsqEUsVsNoVpalbl}DOCrEWsbCPC_EQCbBRC`EXscCSC^A{ETC|EUC^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEzWz.AdCVC}EYsVAWC(kWAylI )k~DZsclXC0ssEYCtE1suE2svE3swE4sxE5sBl6syEZCzE7sAE8sBE0CCE1CDE9sEE!sql#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvj/Ab YmGdzlHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 2C3C4C5C6C_A7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krl~ELouk%CMzaFTAbFYh%E)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CcFEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`CWx{CXp|CXx}C%l@sYx[s'l~CZxaD(lbDPzcD)l]s0x^sJl_s1xdDYpeDQzfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwD9hfn@BgnAlwl3e0pxDCkyD5f.k2xat$kzDWmAD3xBDCDDDEDFD%k'd(dUpGD'kxl'E(E)E*E+E,E-ENz.E/E:E;E=EEmbtMFQbaERb[BHDSb:lctTb?EUb@EVbagdtWbefFmetGmftHmgtImhtJmitKmjtLmktMmltNmmtOmntXbYbZb0b1b2b3byy4b5b6b7b8botptmy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`bID{bJD|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAscKDtcfCucgCvchCwciCxcjCyckCzclCAcmCBcnCCcoCDcpCEcqCFcrCGcsCHctCIcuCJcKc]BQxRx^BSxUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvPmcvQmdvffRmevSmfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvTmNvUmOv|AgfhfifPvQvRvRDSvTvUvSDTDVvWvXvYvUD}AjfkflfmfnfVmZvofpfqfrfsfvCVD0vWD1vVx2v3v4vXDYD5vwCZD6v7v{B`B8v[E9vFE!v_D#vGE$vHE%vIE'vJE(v`D)vKE*vLE+vME,vNE-vOE.vPE/vQE:vRE;vSE=vTE?vUE@voB0DVE[v{D]vWE^vXE_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwiFcwdw'xewfwOzgwYEhwZEiwjwkwlwmwnw0EowjFpwqwrwsw1EtwuwvwwwxwjAywkAzwlAAwmABwnACwoADwEwpAFwqAGwrAHwsAIwtAJwKwLwuAMwNwOwPwvAQwRwwASwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.wpB/w:wqB;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex
1464 with _lock, nogil:
1465 HANDLE_RETURN(cydriver.cuInit(0))
1466 _is_cuInit = True
1467 try:
1468 from cuda.bindings.utils import warn_if_cuda_major_version_mismatch
1469 except ImportError:
1470 pass
1471 else:
1472 warn_if_cuda_major_version_mismatch()
1473 return 0 2a ~fxCyCbEpqcEqqzCrq=ksq?ktqGkuqACvqHkwqRlxqBCyqIkzqSlAqCCBq@kCq[kDq]kEqJkFqKkGqLkHqMkIqNkJqOkKqPkLqQkMqRkNqSkOqTkPqUkQqVkRqWkSq;lDCXkTqYkUqZkVq0kWq1kXq2kYq3kZq4k0q5k1q6k2q7k3qmq4qnq5qzy6q7qFzAy8q9qBy!qCy#qDy$q8g9g!g%q#g$g%gEy'q(q)qdE*q+q,qGp-qHp.qIp/qJp:qTl;qEC=qeE?qfE@q$p[q%p]qUl^qVl_qWl`qXl{qYl|qKp}qLp~qMparNpbrOpcrPpdrQperRpfr'pgrhrirjrFykrGylrHymrIynrJyorKypruoqrvorr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r(p%rLy'rMy(rxo)r)p*r+rSp,r*p-ryo.rzo/rAo:rFCGCBo;rCo=r?r@r[r]rDo^rEo_rFo`rGo{rgE|rhE}rHo~r|DasIobsHCcsICdsJCesJofsKCgszkhsAkislnjsmnks,klsZlms0lnsKoosiEpsqs1lrs2lss3lts4lus5lvswsxsyszs6lAsBsCsLCxAyAzAAABACAtyDANlEAuyFA/kGAvyHAeAIAwyJAxyKAGzLAHzMAIzNAOAPAWh@DQA[DRA]DSA3EMCXh8kDs^kEs7lFs_kGs`kHs{kIs|kJs}kKs9kLs,eMo4EMsfF-eTx.e@A/erB:e;e=eDmNs?e!eLe@e#ejE[ekE$e]egF^e_e`e{e|e}e~eafbf*AOsOo,p=l+A-p,A?lon.p@l[A/p[lXm:p]l;p^ltj=pk xxyxzxAxBxCxDxExFxGxHxDkvg;j?p_l@p5E[p]p6E^p_p7E`p{p8E|p}p9E~paq!Ebq`l{l|l}l~lambmcmdmm emfmpncqgmdqhmqneqimQlfql #E$EJzPsgqjmKzIxLzJxfAhqkm]AiqlmrnjqmmkqKxlqLx|BMx}BNx~BOxaCPx-AlEQsmENCnERsoESspETsqEUsVsNoVpalbl}DOCrEWsbCPC_EQCbBRC`EXscCSC^A{ETC|EUC^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEzWz.AdCVC}EYsVAWC(kWAylI )k~DZsclXC0ssEYCtE1suE2svE3swE4sxE5sBl6syEZCzE7sAE8sBE0CCE1CDE9sEE!sql#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvj/Ab YmGdzlHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 2C3C4C5C6C_A7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krl~ELouk%CMzaFTAbFYh%E)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CcFEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`CWx{CXp|CXx}C%l@sYx[s'l~CZxaD(lbDPzcD)l]s0x^sJl_s1xdDYpeDQzfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwD9hfn@BgnAlwl3e0pxDCkyD5f.k2xat$kzDWmAD3xBDCDDDEDFD%k'd(dUpGD'kxl'E(E)E*E+E,E-ENz.E/E:E;E=EEmbtMFQbaERb[BHDSb:lctTb?EUb@EVbagdtWbefFmetGmftHmgtImhtJmitKmjtLmktMmltNmmtOmntXbYbZb0b1b2b3byy4b5b6b7b8botptmy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`bID{bJD|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAscKDtcfCucgCvchCwciCxcjCyckCzclCAcmCBcnCCcoCDcpCEcqCFcrCGcsCHctCIcuCJcKc]BQxRx^BSxUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvPmcvQmdvffRmevSmfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvTmNvUmOv|AgfhfifPvQvRvRDSvTvUvSDTDVvWvXvYvUD}AjfkflfmfnfVmZvofpfqfrfsfvCVD0vWD1vVx2v3v4vXDYD5vwCZD6v7v{B`B8v[E9vFE!v_D#vGE$vHE%vIE'vJE(v`D)vKE*vLE+vME,vNE-vOE.vPE/vQE:vRE;vSE=vTE?vUE@voB0DVE[v{D]vWE^vXE_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwiFcwdw'xewfwOzgwYEhwZEiwjwkwlwmwnw0EowjFpwqwrwsw1EtwuwvwwwxwjAywkAzwlAAwmABwnACwoADwEwpAFwqAGwrAHwsAIwtAJwKwLwuAMwNwOwPwvAQwRwwASwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.wpB/w:wqB;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex
1476cdef inline int Device_resolve_device_id(device_id) except? -1:
1477 """Resolve device_id, defaulting to current device or 0."""
1478 cdef cydriver.CUdevice dev
1479 cdef cydriver.CUcontext ctx
1480 cdef cydriver.CUresult err
1481 if device_id is None: 2a ~fxCyCbEpqcEqqzCrq=ksq?ktqGkuqACvqHkwqRlxqBCyqIkzqSlAqCCBq@kCq[kDq]kEqJkFqKkGqLkHqMkIqNkJqOkKqPkLqQkMqRkNqSkOqTkPqUkQqVkRqWkSq;lDCXkTqYkUqZkVq0kWq1kXq2kYq3kZq4k0q5k1q6k2q7k3qmq4qnq5qzy6q7qFzAy8q9qBy!qCy#qDy$q8g9g!g%q#g$g%gEy'q(q)qdE*q+q,qGp-qHp.qIp/qJp:qTl;qEC=qeE?qfE@q$p[q%p]qUl^qVl_qWl`qXl{qYl|qKp}qLp~qMparNpbrOpcrPpdrQperRpfr'pgrhrirjrFykrGylrHymrIynrJyorKypruoqrvorr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r(p%rLy'rMy(rxo)r)p*r+rSp,r*p-ryo.rzo/rAo:rFCGCBo;rCo=r?r@r[r]rDo^rEo_rFo`rGo{rgE|rhE}rHo~r|DasIobsHCcsICdsJCesJofsKCgszkhsAkislnjsmnks,klsZlms0lnsKoosiEpsqs1lrs2lss3lts4lus5lvswsxsyszs6lAsBsCsLCxAyAzAAABACAtyDANlEAuyFA/kGAvyHAeAIAwyJAxyKAGzLAHzMAIzNAOAPAWh@DQA[DRA]DSA3EMCXh8kDs^kEs7lFs_kGs`kHs{kIs|kJs}kKs9kLs,eMo4EMsfF-eTx.e@A/erB:e;e=eDmNs?e!eLe@e#ejE[ekE$e]egF^e_e`e{e|e}e~eafbf*AOsOo,p=l+A-p,A?lon.p@l[A/p[lXm:p]l;p^ltj=pk xxyxzxAxBxCxDxExFxGxHxDkvg;j?p_l@p5E[p]p6E^p_p7E`p{p8E|p}p9E~paq!Ebq`l{l|l}l~lambmcmdmm emfmpncqgmdqhmqneqimQlfql #E$EJzPsgqjmKzIxLzJxfAhqkm]AiqlmrnjqmmkqKxlqLx|BMx}BNx~BOxaCPx-AlEQsmENCnERsoESspETsqEUsVsNoVpalbl}DOCrEWsbCPC_EQCbBRC`EXscCSC^A{ETC|EUC^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEzWz.AdCVC}EYsVAWC(kWAylI )k~DZsclXC0ssEYCtE1suE2svE3swE4sxE5sBl6syEZCzE7sAE8sBE0CCE1CDE9sEE!sql#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvj/Ab YmGdzlHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 2C3C4C5C6C_A7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krl~ELouk%CMzaFTAbFYh%E)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CcFEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`CWx{CXp|CXx}C%l@sYx[s'l~CZxaD(lbDPzcD)l]s0x^sJl_s1xdDYpeDQzfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwD9hfn@BgnAlwl3e0pxDCkyD5f.k2xat$kzDWmAD3xBDCDDDEDFD%k'd(dUpGD'kxl'E(E)E*E+E,E-ENz.E/E:E;E=EEmbtMFQbaERb[BHDSb:lctTb?EUb@EVbagdtWbefFmetGmftHmgtImhtJmitKmjtLmktMmltNmmtOmntXbYbZb0b1b2b3byy4b5b6b7b8botptmy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`bID{bJD|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAscKDtcfCucgCvchCwciCxcjCyckCzclCAcmCBcnCCcoCDcpCEcqCFcrCGcsCHctCIcuCJcKc]BQxRx^BSxUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvPmcvQmdvffRmevSmfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvTmNvUmOv|AgfhfifPvQvRvRDSvTvUvSDTDVvWvXvYvUD}AjfkflfmfnfVmZvofpfqfrfsfvCVD0vWD1vVx2v3v4vXDYD5vwCZD6v7v{B`B8v[E9vFE!v_D#vGE$vHE%vIE'vJE(v`D)vKE*vLE+vME,vNE-vOE.vPE/vQE:vRE;vSE=vTE?vUE@voB0DVE[v{D]vWE^vXE_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwiFcwdw'xewfwOzgwYEhwZEiwjwkwlwmwnw0EowjFpwqwrwsw1EtwuwvwwwxwjAywkAzwlAAwmABwnACwoADwEwpAFwqAGwrAHwsAIwtAJwKwLwuAMwNwOwPwvAQwRwwASwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.wpB/w:wqB;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex
1482 with nogil: 2a ~fxCbEcEzC=k?kGkACHkRlBCIkSlCC@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kmqnqdEGpHpIpJpTlECeEfEUlVlWlXlYlKpLpMpNpOpPpQpRpuovo%e4e8dReSeAd'e5e9dTeUeBd(e6e!dVeWeCd)e7e#dXeYeDd*e8e$dZe0eEd+e9e%d1e2eFdxoSpyozoAoFCBoCoDoEoFoGogEhEHo|DIoHCICJCJoKCzkAklnmn,kZl0lKoiE1l2l3l4l5l6ltyNluy/kvyeAwyxyGzHzIz3E8k^k7l_k`k{k|k}k9k,eMo4E-e.e/e:e;e=eDm?e!eLe@e#ejE[ekE$e]e^e_e`e{e|e}e~eafbf*A=l?l@l[l]l^lk ;j_l`l{l|l}l~lambmcmdmm emfmgmhmiml jmkmlmmmlEmEnEoEpEqENoVpalbl}DrE^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEz.AVAWC(kWAylI )k~DclXCsEtEuEvEwExEBlyEzEAEBECEDEEEql:jgA;kn 2C5C_AXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krluk%E8lsl9lCl!lDltl#l$lBk!k#k-kcFElZhulPlFl0hWp1hGlnmHl2hvlBgIl3hUzWxXpXx%lYx'lZx(lPz)l0xJl1xYpQz+p4hKlCg*l5h+l=j,l6hVz7hLlDg-lvk8h.l/lsyMlZpfn@BgnAlwl3e0pCk5f.k2x$kWm3xCDED%k'd(dUp'kxlEmQbaERb[BSb:lTb?EUb@EVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3byy4b5b6b7b8bmy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`bID{bJD|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAscKDtcfCucgCvchCwciCxcjCyckCzclCAcmCBcnCCcoCDcpCEcqCFcrCGcsCHctCIcuCJcKc)dLc*dMcNc+dOc,dPcIdJdg c h d X Y -d.d/d:d;d=d?d) J * K s o t p KdLdZ v 0 w Md@d[d+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{d|d0c}d1cRdSd: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$c~dae[ L ] M Td%cUd'cVdWdi e j f 8 9 becedeeefegehe^ N _ O (c! )c# XdYd$ B % C Zdieje` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoepe@cqe[c4d5dab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcdresefbP gbQ ddedtefduegdhdidjd6dkd7dldvemdwendxeodyepdzeqdAerdBesdCetdDeudEevdwdFexdGeydzdPmQmffRmSmTmUm|Agfhfif}AjfkflfmfnfVmofpfqfrfsfvCVxwC`B[EFE_DGEHEIEJE`DKELEMENEOEPEQERESETEUEoBVE{DWEXEtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f'xOzYEZE0E1EjAkAlAmAnAoApAqArAsAtAuAvAwACjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj
1483 err = cydriver.cuCtxGetDevice(&dev) 2a ~fxCbEcEzC=k?kGkACHkRlBCIkSlCC@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kmqnqdEGpHpIpJpTlECeEfEUlVlWlXlYlKpLpMpNpOpPpQpRpuovo%e4e8dReSeAd'e5e9dTeUeBd(e6e!dVeWeCd)e7e#dXeYeDd*e8e$dZe0eEd+e9e%d1e2eFdxoSpyozoAoFCBoCoDoEoFoGogEhEHo|DIoHCICJCJoKCzkAklnmn,kZl0lKoiE1l2l3l4l5l6ltyNluy/kvyeAwyxyGzHzIz3E8k^k7l_k`k{k|k}k9k,eMo4E-e.e/e:e;e=eDm?e!eLe@e#ejE[ekE$e]e^e_e`e{e|e}e~eafbf*A=l?l@l[l]l^lk ;j_l`l{l|l}l~lambmcmdmm emfmgmhmiml jmkmlmmmlEmEnEoEpEqENoVpalbl}DrE^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEz.AVAWC(kWAylI )k~DclXCsEtEuEvEwExEBlyEzEAEBECEDEEEql:jgA;kn 2C5C_AXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krluk%E8lsl9lCl!lDltl#l$lBk!k#k-kcFElZhulPlFl0hWp1hGlnmHl2hvlBgIl3hUzWxXpXx%lYx'lZx(lPz)l0xJl1xYpQz+p4hKlCg*l5h+l=j,l6hVz7hLlDg-lvk8h.l/lsyMlZpfn@BgnAlwl3e0pCk5f.k2x$kWm3xCDED%k'd(dUp'kxlEmQbaERb[BSb:lTb?EUb@EVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3byy4b5b6b7b8bmy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`bID{bJD|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAscKDtcfCucgCvchCwciCxcjCyckCzclCAcmCBcnCCcoCDcpCEcqCFcrCGcsCHctCIcuCJcKc)dLc*dMcNc+dOc,dPcIdJdg c h d X Y -d.d/d:d;d=d?d) J * K s o t p KdLdZ v 0 w Md@d[d+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{d|d0c}d1cRdSd: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$c~dae[ L ] M Td%cUd'cVdWdi e j f 8 9 becedeeefegehe^ N _ O (c! )c# XdYd$ B % C Zdieje` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoepe@cqe[c4d5dab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcdresefbP gbQ ddedtefduegdhdidjd6dkd7dldvemdwendxeodyepdzeqdAerdBesdCetdDeudEevdwdFexdGeydzdPmQmffRmSmTmUm|Agfhfif}AjfkflfmfnfVmofpfqfrfsfvCVxwC`B[EFE_DGEHEIEJE`DKELEMENEOEPEQERESETEUEoBVE{DWEXEtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f'xOzYEZE0E1EjAkAlAmAnAoApAqArAsAtAuAvAwACjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj
1484 if err == cydriver.CUresult.CUDA_SUCCESS: 2a ~fxCbEcEzC=k?kGkACHkRlBCIkSlCC@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kmqnqdEGpHpIpJpTlECeEfEUlVlWlXlYlKpLpMpNpOpPpQpRpuovo%e4e8dReSeAd'e5e9dTeUeBd(e6e!dVeWeCd)e7e#dXeYeDd*e8e$dZe0eEd+e9e%d1e2eFdxoSpyozoAoFCBoCoDoEoFoGogEhEHo|DIoHCICJCJoKCzkAklnmn,kZl0lKoiE1l2l3l4l5l6ltyNluy/kvyeAwyxyGzHzIz3E8k^k7l_k`k{k|k}k9k,eMo4E-e.e/e:e;e=eDm?e!eLe@e#ejE[ekE$e]e^e_e`e{e|e}e~eafbf*A=l?l@l[l]l^lk ;j_l`l{l|l}l~lambmcmdmm emfmgmhmiml jmkmlmmmlEmEnEoEpEqENoVpalbl}DrE^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEz.AVAWC(kWAylI )k~DclXCsEtEuEvEwExEBlyEzEAEBECEDEEEql:jgA;kn 2C5C_AXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krluk%E8lsl9lCl!lDltl#l$lBk!k#k-kcFElZhulPlFl0hWp1hGlnmHl2hvlBgIl3hUzWxXpXx%lYx'lZx(lPz)l0xJl1xYpQz+p4hKlCg*l5h+l=j,l6hVz7hLlDg-lvk8h.l/lsyMlZpfn@BgnAlwl3e0pCk5f.k2x$kWm3xCDED%k'd(dUp'kxlEmQbaERb[BSb:lTb?EUb@EVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3byy4b5b6b7b8bmy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`bID{bJD|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAscKDtcfCucgCvchCwciCxcjCyckCzclCAcmCBcnCCcoCDcpCEcqCFcrCGcsCHctCIcuCJcKc)dLc*dMcNc+dOc,dPcIdJdg c h d X Y -d.d/d:d;d=d?d) J * K s o t p KdLdZ v 0 w Md@d[d+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{d|d0c}d1cRdSd: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$c~dae[ L ] M Td%cUd'cVdWdi e j f 8 9 becedeeefegehe^ N _ O (c! )c# XdYd$ B % C Zdieje` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoepe@cqe[c4d5dab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcdresefbP gbQ ddedtefduegdhdidjd6dkd7dldvemdwendxeodyepdzeqdAerdBesdCetdDeudEevdwdFexdGeydzdPmQmffRmSmTmUm|Agfhfif}AjfkflfmfnfVmofpfqfrfsfvCVxwC`B[EFE_DGEHEIEJE`DKELEMENEOEPEQERESETEUEoBVE{DWEXEtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f'xOzYEZE0E1EjAkAlAmAnAoApAqArAsAtAuAvAwACjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj
1485 return int(dev) 2xCbEcEzC=k?kGkACHkRlBCIkSlCC@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kmqnqdEGpHpIpJpTlECeEfEUlVlWlXlYlKpLpMpNpOpPpQpRpuovo%e4e8dReSeAd'e5e9dTeUeBd(e6e!dVeWeCd)e7e#dXeYeDd*e8e$dZe0eEd+e9e%d1e2eFdxoSpyozoAoFCBoCoDoEoFoGogEhEHo|DIoHCICJCJoKCzkAklnmn,kZl0lKoiE1l2l3l4l5l6ltyNluy/kvyeAwyxyGzHzIz3E8k^k7l_k`k{k|k}k9k,eMo4E-e.e/e:e;e=eDm?e!eLe@e#ejE[ekE$e]e^e_e`e{e|e}e~eafbf*A=l?l@l[l]l^lk ;j_l`l{l|l}l~lambmcmdmm emfmgmhmiml jmkmlmmmlEmEnEoEpEqE}DrE~DXCsEtEuEvEwExEBlyEzEAEBECEDEEEql:jgAn 2C5C_AXzYzZz0z1z2z3z4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfhAiAsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B~krluk%E8lsl9lCl!lDltl#l$lBk!k#k-kcFElZhulPlFl0hWp1hGlnmHl2hvlBgIl3hUzWxXpXx%lYx'lZx(lPz)l0xJl1xYpQz+p4hKlCg*l5h+l=j,l6hVz7hLlDg-lvk8h.l/lsyMlZp@Bwl0pCk5f.k2x$kWm3xCDED%kUp'kxlEmQbaERb[BSb:lTb?EUb@EVbagWbFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3byy4b5b6b7b8bmy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`bID{bJD|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAscKDtcfCucgCvchCwciCxcjCyckCzclCAcmCBcnCCcoCDcpCEcqCFcrCGcsCHctCIcuCJcKc)dLc*dMcNc+dOc,dPcIdJdg c h d X Y -d.d/d:d;d=d?d) J * K s o t p KdLdZ v 0 w Md@d[d+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{d|d0c}d1cRdSd: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$c~dae[ L ] M Td%cUd'cVdWdi e j f 8 9 becedeeefegehe^ N _ O (c! )c# XdYd$ B % C Zdieje` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoepe@cqe[c4d5dab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcdresefbP gbQ ddedtefduegdhdidjd6dkd7dldvemdwendxeodyepdzeqdAerdBesdCetdDeudEevdwdFexdGeydzdPmQmRmSmTmUmVmvCwC`B[EFE_DGEHEIEJE`DKELEMENEOEPEQERESETEUEoBVE{DWEXEtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f'xOzYEZE0E1EjAkAlAmAnAoApAqArAsAtAuAvAwAXAYAZA0A1A2A3A4A5A6A7A8A9A=A?A
1486 elif err == cydriver.CUresult.CUDA_ERROR_INVALID_CONTEXT:
1487 with nogil: 2a ~fNoVpalbl^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEz.AVAWC(kWAylI )kcl;kn hbibjbZm0m1m2m3m:A4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m;A^m_m`m{m|m}m~manbncndnenfngnAl3e'd(defff|Agfhfif}AjfkflfmfnfofpfqfrfsfVxCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj
1488 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2a ~fNoVpalbl^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEz.AVAWC(kWAylI )kcl;kn hbibjbZm0m1m2m3m:A4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m;A^m_m`m{m|m}m~manbncndnenfngnAl3e'd(defff|Agfhfif}AjfkflfmfnfofpfqfrfsfVxCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj
1489 assert <void*>(ctx) == NULL 2a ~fNoVpalbl^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEz.AVAWC(kWAylI )kcl;kn hbibjbZm0m1m2m3m:A4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m;A^m_m`m{m|m}m~manbncndnenfngnAl3e'd(defff|Agfhfif}AjfkflfmfnfofpfqfrfsfVxCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj
1490 return 0 # cudart behavior 2a ~fNoVpalbl^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEz.AVAWC(kWAylI )kcl;kn hbibjbZm0m1m2m3m:A4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m;A^m_m`m{m|m}m~manbncndnenfngnAl3e'd(defff|Agfhfif}AjfkflfmfnfofpfqfrfsfVxCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj
1491 else:
1492 HANDLE_RETURN(err)
1493 elif device_id < 0: 2a yCpqqqrqsqtqGkuqvqHkwqxqyqIkzqAqBqCqDqEqJkFqKkGqLkHqMkIqNkJqOkKqPkLqQkMqRkNqSkOqTkPqUkQqVkRqWkSq;lDCXkTqYkUqZkVq0kWq1kXq2kYq3kZq4k0q5k1q6k2q7k3qmq4qnq5qzy6q7qFzAy8q9qBy!qCy#qDy$q8g9g!g%q#g$g%gEy'q(q)q*q+q,qGp-qHp.qIp/qJp:q;q=q?q@q$p[q%p]q^q_q`q{q|qKp}qLp~qMparNpbrOpcrPpdrQperRpfr'pgrhrirjrFykrGylrHymrIynrJyorKyprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r(p%rLy'rMy(r)r)p*r+rSp,r*p-r.r/r:rGC;r=r?r@r[r]r^r_r`r{r|r}r~rasIobsHCcsdsesJofsKCgszkhsAkisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsLCxAyAzAAABACAtyDANlEAuyFA/kGAvyHAeAIAwyJAxyKAGzLAHzMAIzNAOAPAWh@DQA[DRA]DSAMCXh8kDsEsFsGsHsIsJsKs9kLs,eMoMsfF-eTx.e@A/erB:e;e=eNs?e!eLe@e#e[e$e]egF^e_e`e{e|e}e~eafbfOsOo,p=l+A-p,A?lon.p@l[A/p[lXm:p]l;p^ltj=pk xxyxzxAxBxCxDxExFxGxHxDkvg;j?p_l@p5E[p]p6E^p_p7E`p{p8E|p}p9E~paq!Ebq`l{l|l}l~lambmcmdmm emfmpncqgmdqhmqneqimQlfql #E$EJzPsgqjmKzIxLzJxfAhqkm]AiqlmrnjqmmkqKxlqLx|BMx}BNx~BOxaCPx-AQsNCRsSsTsUsVsalblOCWsbCPC_EQCbBRC`EXscCSC^A{ETC|EUCWzdCVC}EYsZsXC0sYC1s2s3s4s5s6sZC7s8s0C1C9s!s#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvj/Ab YmGdzlHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%sn 3C4C6C7Ckblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfUx?j's9C!C#C(s$C~k~ELo%CMzaFTAbFYh)s'C*s+s(C)C*C,s+C-s,C.s-C.C/C/s:C:s;C=C?C;s@C=s[C?s]C^C_C`C{C|C}C@s[s~CaDbDcD]s^s_sdDeDfDgD`s{shDiDjD|skD}slDmDnD~soDpDqDrDsDtDuDvDwD9hxDyDatzDADBDCDDDEDFD%kGD'E(E)E*E+E,E-ENz.E/E:E;E=EbtMFQbaERbHDSbctTbUbVbagdtWbetftgthtitjtktltmtntXbYbZb0b1b2b3byy4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcfCucgCvchCwciCxcjCyckCzclCAcmCBcnCCcoCDcpCEcqCFcrCGcsCHctCIcuCJcKc]BQxRx^BSxUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvevfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvRDSvTvUvSDTDVvWvXvYvUDZvVD0vWD1vVx2v3v4vXDYD5vZD6v7v{B8v9v!v_D#v$v%v'v(v`D)v*v+v,v-v.v/v:v;v=v?v@v0D[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwiFcwdw'xewfwOzgwhwiwjwkwlwmwnwowjFpwqwrwswtwuwvwwwxwjAywkAzwlAAwmABwnACwoADwEwpAFwqAGwrAHwsAIwtAJwKwLwuAMwNwOwPwvAQwRwwASwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj!D-w.wpB/w:wqB;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex
1494 raise ValueError(f"device_id must be >= 0, got {device_id}")
1495 return device_id 2a yCpqqqrqsqtqGkuqvqHkwqxqyqIkzqAqBqCqDqEqJkFqKkGqLkHqMkIqNkJqOkKqPkLqQkMqRkNqSkOqTkPqUkQqVkRqWkSq;lDCXkTqYkUqZkVq0kWq1kXq2kYq3kZq4k0q5k1q6k2q7k3qmq4qnq5qzy6q7qFzAy8q9qBy!qCy#qDy$q8g9g!g%q#g$g%gEy'q(q)q*q+q,qGp-qHp.qIp/qJp:q;q=q?q@q$p[q%p]q^q_q`q{q|qKp}qLp~qMparNpbrOpcrPpdrQperRpfr'pgrhrirjrFykrGylrHymrIynrJyorKyprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r(p%rLy'rMy(r)r)p*r+rSp,r*p-r.r/r:rGC;r=r?r@r[r]r^r_r`r{r|r}r~rasIobsHCcsdsesJofsKCgszkhsAkisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsLCxAyAzAAABACAtyDANlEAuyFA/kGAvyHAeAIAwyJAxyKAGzLAHzMAIzNAOAPAWh@DQA[DRA]DSAMCXh8kDsEsFsGsHsIsJsKs9kLs,eMoMsfF-eTx.e@A/erB:e;e=eNs?e!eLe@e#e[e$e]egF^e_e`e{e|e}e~eafbfOsOo,p=l+A-p,A?lon.p@l[A/p[lXm:p]l;p^ltj=pk xxyxzxAxBxCxDxExFxGxHxDkvg;j?p_l@p5E[p]p6E^p_p7E`p{p8E|p}p9E~paq!Ebq`l{l|l}l~lambmcmdmm emfmpncqgmdqhmqneqimQlfql #E$EJzPsgqjmKzIxLzJxfAhqkm]AiqlmrnjqmmkqKxlqLx|BMx}BNx~BOxaCPx-AQsNCRsSsTsUsVsalblOCWsbCPC_EQCbBRC`EXscCSC^A{ETC|EUCWzdCVC}EYsZsXC0sYC1s2s3s4s5s6sZC7s8s0C1C9s!s#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvj/Ab YmGdzlHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%sn 3C4C6C7Ckblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfUx?j's9C!C#C(s$C~k~ELo%CMzaFTAbFYh)s'C*s+s(C)C*C,s+C-s,C.s-C.C/C/s:C:s;C=C?C;s@C=s[C?s]C^C_C`C{C|C}C@s[s~CaDbDcD]s^s_sdDeDfDgD`s{shDiDjD|skD}slDmDnD~soDpDqDrDsDtDuDvDwD9hxDyDatzDADBDCDDDEDFD%kGD'E(E)E*E+E,E-ENz.E/E:E;E=EbtQbaERbHDSbctTbUbVbagdtWbetftgthtitjtktltmtntXbYbZb0b1b2b3byy4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcfCucgCvchCwciCxcjCyckCzclCAcmCBcnCCcoCDcpCEcqCFcrCGcsCHctCIcuCJcKc]BQxRx^BSxUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvevfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvRDSvTvUvSDTDVvWvXvYvUDZvVD0vWD1vVx2v3v4vXDYD5vZD6v7v{B8v9v!v_D#v$v%v'v(v`D)v*v+v,v-v.v/v:v;v=v?v@v0D[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwiFcwdw'xewfwOzgwhwiwjwkwlwmwnwowjFpwqwrwswtwuwvwwwxwjAywkAzwlAAwmABwnACwoADwEwpAFwqAGwrAHwsAIwtAJwKwLwuAMwNwOwPwvAQwRwwASwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj!D-w.wpB/w:wqB;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex
1498cdef inline list Device_ensure_tls_devices(cls):
1499 """Ensure thread-local Device singletons exist, creating if needed."""
1500 cdef int total
1501 try: 2a ~fxCyCbEpqcEqqzCrq=ksq?ktqGkuqACvqHkwqRlxqBCyqIkzqSlAqCCBq@kCq[kDq]kEqJkFqKkGqLkHqMkIqNkJqOkKqPkLqQkMqRkNqSkOqTkPqUkQqVkRqWkSq;lDCXkTqYkUqZkVq0kWq1kXq2kYq3kZq4k0q5k1q6k2q7k3qmq4qnq5qzy6q7qFzAy8q9qBy!qCy#qDy$q8g9g!g%q#g$g%gEy'q(q)qdE*q+q,qGp-qHp.qIp/qJp:qTl;qEC=qeE?qfE@q$p[q%p]qUl^qVl_qWl`qXl{qYl|qKp}qLp~qMparNpbrOpcrPpdrQperRpfr'pgrhrirjrFykrGylrHymrIynrJyorKypruoqrvorr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r(p%rLy'rMy(rxo)r)p*r+rSp,r*p-ryo.rzo/rAo:rFCGCBo;rCo=r?r@r[r]rDo^rEo_rFo`rGo{rgE|rhE}rHo~r|DasIobsHCcsICdsJCesJofsKCgszkhsAkislnjsmnks,klsZlms0lnsKoosiEpsqs1lrs2lss3lts4lus5lvswsxsyszs6lAsBsCsLCxAyAzAAABACAtyDANlEAuyFA/kGAvyHAeAIAwyJAxyKAGzLAHzMAIzNAOAPAWh@DQA[DRA]DSA3EMCXh8kDs^kEs7lFs_kGs`kHs{kIs|kJs}kKs9kLs,eMo4EMsfF-eTx.e@A/erB:e;e=eDmNs?e!eLe@e#ejE[ekE$e]egF^e_e`e{e|e}e~eafbf*AOsOo,p=l+A-p,A?lon.p@l[A/p[lXm:p]l;p^ltj=pk xxyxzxAxBxCxDxExFxGxHxDkvg;j?p_l@p5E[p]p6E^p_p7E`p{p8E|p}p9E~paq!Ebq`l{l|l}l~lambmcmdmm emfmpncqgmdqhmqneqimQlfql #E$EJzPsgqjmKzIxLzJxfAhqkm]AiqlmrnjqmmkqKxlqLx|BMx}BNx~BOxaCPx-AlEQsmENCnERsoESspETsqEUsVsNoVpalbl}DOCrEWsbCPC_EQCbBRC`EXscCSC^A{ETC|EUC^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEzWz.AdCVC}EYsVAWC(kWAylI )k~DZsclXC0ssEYCtE1suE2svE3swE4sxE5sBl6syEZCzE7sAE8sBE0CCE1CDE9sEE!sql#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvj/Ab YmGdzlHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 2C3C4C5C6C_A7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krl~ELouk%CMzaFTAbFYh%E)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CcFEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`CWx{CXp|CXx}C%l@sYx[s'l~CZxaD(lbDPzcD)l]s0x^sJl_s1xdDYpeDQzfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwD9hfn@BgnAlwl3e0pxDCkyD5f.k2xat$kzDWmAD3xBDCDDDEDFD%k'd(dUpGD'kxl'E(E)E*E+E,E-ENz.E/E:E;E=EEmbtQbaERb[BHDSb:lctTb?EUb@EVbagdtWbefFmetGmftHmgtImhtJmitKmjtLmktMmltNmmtOmntXbYbZb0b1b2b3byy4b5b6b7b8botptmy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`bID{bJD|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAscKDtcfCucgCvchCwciCxcjCyckCzclCAcmCBcnCCcoCDcpCEcqCFcrCGcsCHctCIcuCJcKc]BQxRx^BSxUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvPmcvQmdvffRmevSmfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvTmNvUmOv|AgfhfifPvQvRvRDSvTvUvSDTDVvWvXvYvUD}AjfkflfmfnfVmZvofpfqfrfsfvCVD0vWD1vVx2v3v4vXDYD5vwCZD6v7v{B`B8v[E9vFE!v_D#vGE$vHE%vIE'vJE(v`D)vKE*vLE+vME,vNE-vOE.vPE/vQE:vRE;vSE=vTE?vUE@voB0DVE[v{D]vWE^vXE_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwiFcwdw'xewfwOzgwYEhwZEiwjwkwlwmwnw0EowjFpwqwrwsw1EtwuwvwwwxwjAywkAzwlAAwmABwnACwoADwEwpAFwqAGwrAHwsAIwtAJwKwLwuAMwNwOwPwvAQwRwwASwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.wpB/w:wqB;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex
1502 return _tls.devices 2a ~fxCyCbEpqcEqqzCrq=ksq?ktqGkuqACvqHkwqRlxqBCyqIkzqSlAqCCBq@kCq[kDq]kEqJkFqKkGqLkHqMkIqNkJqOkKqPkLqQkMqRkNqSkOqTkPqUkQqVkRqWkSq;lDCXkTqYkUqZkVq0kWq1kXq2kYq3kZq4k0q5k1q6k2q7k3qmq4qnq5qzy6q7qFzAy8q9qBy!qCy#qDy$q8g9g!g%q#g$g%gEy'q(q)qdE*q+q,qGp-qHp.qIp/qJp:qTl;qEC=qeE?qfE@q$p[q%p]qUl^qVl_qWl`qXl{qYl|qKp}qLp~qMparNpbrOpcrPpdrQperRpfr'pgrhrirjrFykrGylrHymrIynrJyorKypruoqrvorr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r(p%rLy'rMy(rxo)r)p*r+rSp,r*p-ryo.rzo/rAo:rFCGCBo;rCo=r?r@r[r]rDo^rEo_rFo`rGo{rgE|rhE}rHo~r|DasIobsHCcsICdsJCesJofsKCgszkhsAkislnjsmnks,klsZlms0lnsKoosiEpsqs1lrs2lss3lts4lus5lvswsxsyszs6lAsBsCsLCxAyAzAAABACAtyDANlEAuyFA/kGAvyHAeAIAwyJAxyKAGzLAHzMAIzNAOAPAWh@DQA[DRA]DSA3EMCXh8kDs^kEs7lFs_kGs`kHs{kIs|kJs}kKs9kLs,eMo4EMsfF-eTx.e@A/erB:e;e=eDmNs?e!eLe@e#ejE[ekE$e]egF^e_e`e{e|e}e~eafbf*AOsOo,p=l+A-p,A?lon.p@l[A/p[lXm:p]l;p^ltj=pk xxyxzxAxBxCxDxExFxGxHxDkvg;j?p_l@p5E[p]p6E^p_p7E`p{p8E|p}p9E~paq!Ebq`l{l|l}l~lambmcmdmm emfmpncqgmdqhmqneqimQlfql #E$EJzPsgqjmKzIxLzJxfAhqkm]AiqlmrnjqmmkqKxlqLx|BMx}BNx~BOxaCPx-AlEQsmENCnERsoESspETsqEUsVsNoVpalbl}DOCrEWsbCPC_EQCbBRC`EXscCSC^A{ETC|EUC^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEzWz.AdCVC}EYsVAWC(kWAylI )k~DZsclXC0ssEYCtE1suE2svE3swE4sxE5sBl6syEZCzE7sAE8sBE0CCE1CDE9sEE!sql#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvj/Ab YmGdzlHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 2C3C4C5C6C_A7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krl~ELouk%CMzaFTAbFYh%E)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CcFEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`CWx{CXp|CXx}C%l@sYx[s'l~CZxaD(lbDPzcD)l]s0x^sJl_s1xdDYpeDQzfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwD9hfn@BgnAlwl3e0pxDCkyD5f.k2xat$kzDWmAD3xBDCDDDEDFD%k'd(dUpGD'kxl'E(E)E*E+E,E-ENz.E/E:E;E=EEmbtQbaERb[BHDSb:lctTb?EUb@EVbagdtWbefFmetGmftHmgtImhtJmitKmjtLmktMmltNmmtOmntXbYbZb0b1b2b3byy4b5b6b7b8botptmy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`bID{bJD|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAscKDtcfCucgCvchCwciCxcjCyckCzclCAcmCBcnCCcoCDcpCEcqCFcrCGcsCHctCIcuCJcKc]BQxRx^BSxUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvPmcvQmdvffRmevSmfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvTmNvUmOv|AgfhfifPvQvRvRDSvTvUvSDTDVvWvXvYvUD}AjfkflfmfnfVmZvofpfqfrfsfvCVD0vWD1vVx2v3v4vXDYD5vwCZD6v7v{B`B8v[E9vFE!v_D#vGE$vHE%vIE'vJE(v`D)vKE*vLE+vME,vNE-vOE.vPE/vQE:vRE;vSE=vTE?vUE@voB0DVE[v{D]vWE^vXE_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwiFcwdw'xewfwOzgwYEhwZEiwjwkwlwmwnw0EowjFpwqwrwsw1EtwuwvwwwxwjAywkAzwlAAwmABwnACwoADwEwpAFwqAGwrAHwsAIwtAJwKwLwuAMwNwOwPwvAQwRwwASwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.wpB/w:wqB;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex
1503 except AttributeError: 2a ~fpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7qFz8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!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~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsWhXhDsEsFsGsHsIsJsKsLs,eMs-e.e/e:e;e=eNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfOsOoonXmtjk Dkm pnqnQll JzrnkqlqQsRsSsTsUsVsWsXs0j(j)j*j+j,j-j8j.j9j/j1jYs(kylI )kZscl0s1s2s3s4s5s6s7s8s9s!s#sPoQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s;kn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdfZm0m1m?j's(s2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenMzYh)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~s9hfngnAl3eat'd(dNzbtQbRbSbctTbUbVbdtWbefetftgthtitjtktltmtntXbYbZb0b1b2b3b4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#owt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?hyn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZnzi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvffevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvgfhfifPvQvRvSvTvUvVvWvXvYvjfkflfmfnfZvofpfqfrfsf0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,wCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxex
1504 with nogil: 2a ~fpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7qFz8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!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~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsWhXhDsEsFsGsHsIsJsKsLs,eMs-e.e/e:e;e=eNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfOsOoonXmtjk Dkm pnqnQll JzrnkqlqQsRsSsTsUsVsWsXs0j(j)j*j+j,j-j8j.j9j/j1jYs(kylI )kZscl0s1s2s3s4s5s6s7s8s9s!s#sPoQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s;kn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdfZm0m1m?j's(s2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenMzYh)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~s9hfngnAl3eat'd(dNzbtQbRbSbctTbUbVbdtWbefetftgthtitjtktltmtntXbYbZb0b1b2b3b4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#owt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?hyn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZnzi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvffevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvgfhfifPvQvRvSvTvUvVvWvXvYvjfkflfmfnfZvofpfqfrfsf0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,wCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxex
1505 HANDLE_RETURN(cydriver.cuDeviceGetCount(&total)) 2a ~fpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7qFz8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!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~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsWhXhDsEsFsGsHsIsJsKsLs,eMs-e.e/e:e;e=eNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfOsOoonXmtjk Dkm pnqnQll JzrnkqlqQsRsSsTsUsVsWsXs0j(j)j*j+j,j-j8j.j9j/j1jYs(kylI )kZscl0s1s2s3s4s5s6s7s8s9s!s#sPoQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s;kn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdfZm0m1m?j's(s2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenMzYh)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~s9hfngnAl3eat'd(dNzbtQbRbSbctTbUbVbdtWbefetftgthtitjtktltmtntXbYbZb0b1b2b3b4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#owt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?hyn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZnzi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvffevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvgfhfifPvQvRvSvTvUvVvWvXvYvjfkflfmfnfZvofpfqfrfsf0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,wCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxex
1506 devices = _tls.devices = [] 2a ~fpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7qFz8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!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~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsWhXhDsEsFsGsHsIsJsKsLs,eMs-e.e/e:e;e=eNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfOsOoonXmtjk Dkm pnqnQll JzrnkqlqQsRsSsTsUsVsWsXs0j(j)j*j+j,j-j8j.j9j/j1jYs(kylI )kZscl0s1s2s3s4s5s6s7s8s9s!s#sPoQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s;kn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdfZm0m1m?j's(s2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenMzYh)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~s9hfngnAl3eat'd(dNzbtQbRbSbctTbUbVbdtWbefetftgthtitjtktltmtntXbYbZb0b1b2b3b4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#owt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?hyn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZnzi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvffevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvgfhfifPvQvRvSvTvUvVvWvXvYvjfkflfmfnfZvofpfqfrfsf0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,wCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxex
1507 for dev_id in range(total): 2a ~fpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7qFz8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!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~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsWhXhDsEsFsGsHsIsJsKsLs,eMs-e.e/e:e;e=eNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfOsOoonXmtjk Dkm pnqnQll JzrnkqlqQsRsSsTsUsVsWsXs0j(j)j*j+j,j-j8j.j9j/j1jYs(kylI )kZscl0s1s2s3s4s5s6s7s8s9s!s#sPoQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s;kn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdfZm0m1m?j's(s2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenMzYh)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~s9hfngnAl3eat'd(dNzbtQbRbSbctTbUbVbdtWbefetftgthtitjtktltmtntXbYbZb0b1b2b3b4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#owt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?hyn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZnzi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvffevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvgfhfifPvQvRvSvTvUvVvWvXvYvjfkflfmfnfZvofpfqfrfsf0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,wCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxex
1508 device = super(Device, cls).__new__(cls) 2a ~fpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7qFz8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!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~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsWhXhDsEsFsGsHsIsJsKsLs,eMs-e.e/e:e;e=eNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfOsOoonXmtjk Dkm pnqnQll JzrnkqlqQsRsSsTsUsVsWsXs0j(j)j*j+j,j-j8j.j9j/j1jYs(kylI )kZscl0s1s2s3s4s5s6s7s8s9s!s#sPoQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s;kn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdfZm0m1m?j's(s2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenMzYh)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~s9hfngnAl3eat'd(dNzbtQbRbSbctTbUbVbdtWbefetftgthtitjtktltmtntXbYbZb0b1b2b3b4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#owt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?hyn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZnzi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvffevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvgfhfifPvQvRvSvTvUvVvWvXvYvjfkflfmfnfZvofpfqfrfsf0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,wCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxex
1509 device._device_id = dev_id 2a ~fpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7qFz8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!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~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsWhXhDsEsFsGsHsIsJsKsLs,eMs-e.e/e:e;e=eNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfOsOoonXmtjk Dkm pnqnQll JzrnkqlqQsRsSsTsUsVsWsXs0j(j)j*j+j,j-j8j.j9j/j1jYs(kylI )kZscl0s1s2s3s4s5s6s7s8s9s!s#sPoQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s;kn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdfZm0m1m?j's(s2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenMzYh)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~s9hfngnAl3eat'd(dNzbtQbRbSbctTbUbVbdtWbefetftgthtitjtktltmtntXbYbZb0b1b2b3b4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#owt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?hyn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZnzi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvffevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvgfhfifPvQvRvSvTvUvVvWvXvYvjfkflfmfnfZvofpfqfrfsf0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,wCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxex
1510 device._memory_resource = None 2a ~fpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7qFz8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!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~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsWhXhDsEsFsGsHsIsJsKsLs,eMs-e.e/e:e;e=eNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfOsOoonXmtjk Dkm pnqnQll JzrnkqlqQsRsSsTsUsVsWsXs0j(j)j*j+j,j-j8j.j9j/j1jYs(kylI )kZscl0s1s2s3s4s5s6s7s8s9s!s#sPoQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s;kn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdfZm0m1m?j's(s2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenMzYh)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~s9hfngnAl3eat'd(dNzbtQbRbSbctTbUbVbdtWbefetftgthtitjtktltmtntXbYbZb0b1b2b3b4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#owt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?hyn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZnzi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvffevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvgfhfifPvQvRvSvTvUvVvWvXvYvjfkflfmfnfZvofpfqfrfsf0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,wCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxex
1511 device._has_inited = False 2a ~fpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7qFz8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!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~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsWhXhDsEsFsGsHsIsJsKsLs,eMs-e.e/e:e;e=eNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfOsOoonXmtjk Dkm pnqnQll JzrnkqlqQsRsSsTsUsVsWsXs0j(j)j*j+j,j-j8j.j9j/j1jYs(kylI )kZscl0s1s2s3s4s5s6s7s8s9s!s#sPoQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s;kn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdfZm0m1m?j's(s2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenMzYh)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~s9hfngnAl3eat'd(dNzbtQbRbSbctTbUbVbdtWbefetftgthtitjtktltmtntXbYbZb0b1b2b3b4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#owt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?hyn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZnzi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvffevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvgfhfifPvQvRvSvTvUvVvWvXvYvjfkflfmfnfZvofpfqfrfsf0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,wCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxex
1512 device._properties = None 2a ~fpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7qFz8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!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~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsWhXhDsEsFsGsHsIsJsKsLs,eMs-e.e/e:e;e=eNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfOsOoonXmtjk Dkm pnqnQll JzrnkqlqQsRsSsTsUsVsWsXs0j(j)j*j+j,j-j8j.j9j/j1jYs(kylI )kZscl0s1s2s3s4s5s6s7s8s9s!s#sPoQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s;kn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdfZm0m1m?j's(s2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenMzYh)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~s9hfngnAl3eat'd(dNzbtQbRbSbctTbUbVbdtWbefetftgthtitjtktltmtntXbYbZb0b1b2b3b4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#owt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?hyn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZnzi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvffevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvgfhfifPvQvRvSvTvUvVvWvXvYvjfkflfmfnfZvofpfqfrfsf0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,wCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxex
1513 device._resources = None 2a ~fpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7qFz8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!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~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsWhXhDsEsFsGsHsIsJsKsLs,eMs-e.e/e:e;e=eNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfOsOoonXmtjk Dkm pnqnQll JzrnkqlqQsRsSsTsUsVsWsXs0j(j)j*j+j,j-j8j.j9j/j1jYs(kylI )kZscl0s1s2s3s4s5s6s7s8s9s!s#sPoQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s;kn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdfZm0m1m?j's(s2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenMzYh)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~s9hfngnAl3eat'd(dNzbtQbRbSbctTbUbVbdtWbefetftgthtitjtktltmtntXbYbZb0b1b2b3b4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#owt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?hyn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZnzi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvffevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvgfhfifPvQvRvSvTvUvVvWvXvYvjfkflfmfnfZvofpfqfrfsf0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,wCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxex
1514 device._uuid = None 2a ~fpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7qFz8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!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~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsWhXhDsEsFsGsHsIsJsKsLs,eMs-e.e/e:e;e=eNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfOsOoonXmtjk Dkm pnqnQll JzrnkqlqQsRsSsTsUsVsWsXs0j(j)j*j+j,j-j8j.j9j/j1jYs(kylI )kZscl0s1s2s3s4s5s6s7s8s9s!s#sPoQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s;kn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdfZm0m1m?j's(s2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenMzYh)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~s9hfngnAl3eat'd(dNzbtQbRbSbctTbUbVbdtWbefetftgthtitjtktltmtntXbYbZb0b1b2b3b4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#owt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?hyn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZnzi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvffevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvgfhfifPvQvRvSvTvUvVvWvXvYvjfkflfmfnfZvofpfqfrfsf0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,wCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxex
1515 device._context = None 2a ~fpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7qFz8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!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~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsWhXhDsEsFsGsHsIsJsKsLs,eMs-e.e/e:e;e=eNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfOsOoonXmtjk Dkm pnqnQll JzrnkqlqQsRsSsTsUsVsWsXs0j(j)j*j+j,j-j8j.j9j/j1jYs(kylI )kZscl0s1s2s3s4s5s6s7s8s9s!s#sPoQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s;kn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdfZm0m1m?j's(s2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenMzYh)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~s9hfngnAl3eat'd(dNzbtQbRbSbctTbUbVbdtWbefetftgthtitjtktltmtntXbYbZb0b1b2b3b4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#owt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?hyn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZnzi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvffevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvgfhfifPvQvRvSvTvUvVvWvXvYvjfkflfmfnfZvofpfqfrfsf0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,wCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxex
1516 devices.append(device) 2a ~fpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7qFz8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!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~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsWhXhDsEsFsGsHsIsJsKsLs,eMs-e.e/e:e;e=eNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfOsOoonXmtjk Dkm pnqnQll JzrnkqlqQsRsSsTsUsVsWsXs0j(j)j*j+j,j-j8j.j9j/j1jYs(kylI )kZscl0s1s2s3s4s5s6s7s8s9s!s#sPoQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s;kn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdfZm0m1m?j's(s2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenMzYh)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~s9hfngnAl3eat'd(dNzbtQbRbSbctTbUbVbdtWbefetftgthtitjtktltmtntXbYbZb0b1b2b3b4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#owt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?hyn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZnzi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvffevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvgfhfifPvQvRvSvTvUvVvWvXvYvjfkflfmfnfZvofpfqfrfsf0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,wCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxex
1517 return devices 2a ~fpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7qFz8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!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~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsWhXhDsEsFsGsHsIsJsKsLs,eMs-e.e/e:e;e=eNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfOsOoonXmtjk Dkm pnqnQll JzrnkqlqQsRsSsTsUsVsWsXs0j(j)j*j+j,j-j8j.j9j/j1jYs(kylI )kZscl0s1s2s3s4s5s6s7s8s9s!s#sPoQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s;kn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdfZm0m1m?j's(s2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenMzYh)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~s9hfngnAl3eat'd(dNzbtQbRbSbctTbUbVbdtWbefetftgthtitjtktltmtntXbYbZb0b1b2b3b4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#owt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?hyn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZnzi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvffevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvgfhfifPvQvRvSvTvUvVvWvXvYvjfkflfmfnfZvofpfqfrfsf0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,wCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxex