najaeda 0.1.23__cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl → 0.1.24__cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of najaeda might be problematic. Click here for more details.

najaeda/libnaja_bne.so CHANGED
Binary file
najaeda/libnaja_nl.so CHANGED
Binary file
najaeda/libnaja_opt.so CHANGED
Binary file
najaeda/libnaja_python.so CHANGED
Binary file
najaeda/naja.so CHANGED
Binary file
najaeda/netlist.py CHANGED
@@ -363,7 +363,10 @@ class Net:
363
363
  return sum(1 for _ in self.get_inst_terms())
364
364
 
365
365
  def get_design_terms(self):
366
- """
366
+ """Return an iterator over the design terminals of the net.
367
+ This includes only the terminals that are part of the current design.
368
+ The iterator will yield Term objects bit per bit.
369
+
367
370
  :return: an iterator over the design terminals of the net.
368
371
  :rtype: Iterator[Term]
369
372
  """
@@ -372,8 +375,18 @@ class Net:
372
375
  for term in self.net.getBitTerms():
373
376
  yield Term(self.pathIDs, term)
374
377
 
375
- def get_terms(self):
378
+ def count_design_terms(self) -> int:
379
+ """Count the design terminals of this net.
380
+
381
+ :return: the number of design terminals of this net.
382
+ :rtype: int
376
383
  """
384
+ return sum(1 for _ in self.get_design_terms())
385
+
386
+ def get_terms(self):
387
+ """Return an iterator over the terminals of the net.
388
+ This includes both design and instance terminals.
389
+
377
390
  :return: an iterator over the terminals of the net.
378
391
  :rtype: Iterator[Term]
379
392
  """
@@ -1479,6 +1492,7 @@ class VerilogConfig:
1479
1492
 
1480
1493
  def load_verilog(files: Union[str, List[str]], config: VerilogConfig = None) -> Instance:
1481
1494
  """Load verilog files into the top design.
1495
+
1482
1496
  :param files: a list of verilog files to load or a single file.
1483
1497
  :param config: the configuration to use when loading the files.
1484
1498
  :return: the top Instance.
@@ -1499,6 +1513,7 @@ def load_verilog(files: Union[str, List[str]], config: VerilogConfig = None) ->
1499
1513
 
1500
1514
  def load_liberty(files: Union[str, List[str]]):
1501
1515
  """Load liberty files.
1516
+
1502
1517
  :param files: a list of liberty files to load or a single file.
1503
1518
  """
1504
1519
  if isinstance(files, str):
@@ -1515,11 +1530,14 @@ def load_primitives(name: str):
1515
1530
  Currently supported libraries are:
1516
1531
 
1517
1532
  - xilinx
1533
+ - yosys
1518
1534
  """
1519
1535
  if name == "xilinx":
1520
1536
  from najaeda.primitives import xilinx
1521
-
1522
1537
  xilinx.load(__get_top_db())
1538
+ elif name == "yosys":
1539
+ from najaeda.primitives import yosys
1540
+ yosys.load(__get_top_db())
1523
1541
  else:
1524
1542
  raise ValueError(f"Unknown primitives library: {name}")
1525
1543
 
@@ -0,0 +1,189 @@
1
+ # SPDX-FileCopyrightText: 2024 The Naja authors <https://github.com/najaeda/naja/blob/main/AUTHORS>
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ import logging
6
+ from najaeda import naja
7
+
8
+
9
+ def constructAND(lib):
10
+ and2 = naja.SNLDesign.createPrimitive(lib, "$_AND_")
11
+ naja.SNLScalarTerm.create(and2, naja.SNLTerm.Direction.Input, "A")
12
+ naja.SNLScalarTerm.create(and2, naja.SNLTerm.Direction.Input, "B")
13
+ naja.SNLScalarTerm.create(and2, naja.SNLTerm.Direction.Output, "Y")
14
+ and2.setTruthTable(0x8)
15
+
16
+
17
+ def constructOR(lib):
18
+ or2 = naja.SNLDesign.createPrimitive(lib, "$_OR_")
19
+ naja.SNLScalarTerm.create(or2, naja.SNLTerm.Direction.Input, "A")
20
+ naja.SNLScalarTerm.create(or2, naja.SNLTerm.Direction.Input, "B")
21
+ naja.SNLScalarTerm.create(or2, naja.SNLTerm.Direction.Output, "Y")
22
+ or2.setTruthTable(0xE)
23
+
24
+
25
+ def constructXOR(lib):
26
+ xor2 = naja.SNLDesign.createPrimitive(lib, "$_XOR_")
27
+ naja.SNLScalarTerm.create(xor2, naja.SNLTerm.Direction.Input, "A")
28
+ naja.SNLScalarTerm.create(xor2, naja.SNLTerm.Direction.Input, "B")
29
+ naja.SNLScalarTerm.create(xor2, naja.SNLTerm.Direction.Output, "Y")
30
+ xor2.setTruthTable(0x6)
31
+
32
+
33
+ def constructMUX(lib):
34
+ mux2 = naja.SNLDesign.createPrimitive(lib, "$_MUX_")
35
+ naja.SNLScalarTerm.create(mux2, naja.SNLTerm.Direction.Input, "A")
36
+ naja.SNLScalarTerm.create(mux2, naja.SNLTerm.Direction.Input, "B")
37
+ naja.SNLScalarTerm.create(mux2, naja.SNLTerm.Direction.Input, "S")
38
+ naja.SNLScalarTerm.create(mux2, naja.SNLTerm.Direction.Output, "Y")
39
+ mux2.setTruthTable(0xCA)
40
+
41
+
42
+ def constructNOT(lib):
43
+ not_gate = naja.SNLDesign.createPrimitive(lib, "$_NOT_")
44
+ naja.SNLScalarTerm.create(not_gate, naja.SNLTerm.Direction.Input, "A")
45
+ naja.SNLScalarTerm.create(not_gate, naja.SNLTerm.Direction.Output, "Y")
46
+ not_gate.setTruthTable(0b01)
47
+
48
+
49
+ def constructDFFP(lib):
50
+ dffp = naja.SNLDesign.createPrimitive(lib, "$_DFF_P_")
51
+ naja.SNLScalarTerm.create(dffp, naja.SNLTerm.Direction.Input, "C")
52
+ naja.SNLScalarTerm.create(dffp, naja.SNLTerm.Direction.Input, "D")
53
+ naja.SNLScalarTerm.create(dffp, naja.SNLTerm.Direction.Output, "Q")
54
+
55
+
56
+ def constructDFFE_PP(lib):
57
+ dffe_pp = naja.SNLDesign.createPrimitive(lib, "$_DFFE_PP_")
58
+ naja.SNLScalarTerm.create(dffe_pp, naja.SNLTerm.Direction.Input, "C")
59
+ naja.SNLScalarTerm.create(dffe_pp, naja.SNLTerm.Direction.Input, "D")
60
+ naja.SNLScalarTerm.create(dffe_pp, naja.SNLTerm.Direction.Input, "E")
61
+ naja.SNLScalarTerm.create(dffe_pp, naja.SNLTerm.Direction.Output, "Q")
62
+
63
+
64
+ def constructDFFE_PN(lib):
65
+ dffe_pn = naja.SNLDesign.createPrimitive(lib, "$_DFFE_PN_")
66
+ naja.SNLScalarTerm.create(dffe_pn, naja.SNLTerm.Direction.Input, "C")
67
+ naja.SNLScalarTerm.create(dffe_pn, naja.SNLTerm.Direction.Input, "D")
68
+ naja.SNLScalarTerm.create(dffe_pn, naja.SNLTerm.Direction.Input, "E")
69
+ naja.SNLScalarTerm.create(dffe_pn, naja.SNLTerm.Direction.Output, "Q")
70
+
71
+
72
+ def constructDFF_PP0(lib):
73
+ dffe_pp0 = naja.SNLDesign.createPrimitive(lib, "$_DFF_PP0_")
74
+ naja.SNLScalarTerm.create(dffe_pp0, naja.SNLTerm.Direction.Input, "C")
75
+ naja.SNLScalarTerm.create(dffe_pp0, naja.SNLTerm.Direction.Input, "D")
76
+ naja.SNLScalarTerm.create(dffe_pp0, naja.SNLTerm.Direction.Output, "Q")
77
+ naja.SNLScalarTerm.create(dffe_pp0, naja.SNLTerm.Direction.Input, "R")
78
+
79
+
80
+ def constructDFF_PP1(lib):
81
+ dffe_pp1 = naja.SNLDesign.createPrimitive(lib, "$_DFF_PP1_")
82
+ naja.SNLScalarTerm.create(dffe_pp1, naja.SNLTerm.Direction.Input, "C")
83
+ naja.SNLScalarTerm.create(dffe_pp1, naja.SNLTerm.Direction.Input, "D")
84
+ naja.SNLScalarTerm.create(dffe_pp1, naja.SNLTerm.Direction.Output, "Q")
85
+ naja.SNLScalarTerm.create(dffe_pp1, naja.SNLTerm.Direction.Input, "R")
86
+
87
+
88
+ def constructDFFE_PP0P(lib):
89
+ dffe_pp0p = naja.SNLDesign.createPrimitive(lib, "$_DFFE_PP0P_")
90
+ naja.SNLScalarTerm.create(dffe_pp0p, naja.SNLTerm.Direction.Input, "C")
91
+ naja.SNLScalarTerm.create(dffe_pp0p, naja.SNLTerm.Direction.Input, "D")
92
+ naja.SNLScalarTerm.create(dffe_pp0p, naja.SNLTerm.Direction.Input, "E")
93
+ naja.SNLScalarTerm.create(dffe_pp0p, naja.SNLTerm.Direction.Output, "Q")
94
+ naja.SNLScalarTerm.create(dffe_pp0p, naja.SNLTerm.Direction.Input, "R")
95
+
96
+
97
+ def constructDFFE_PP1P(lib):
98
+ dffe_pp1p = naja.SNLDesign.createPrimitive(lib, "$_DFFE_PP1P_")
99
+ naja.SNLScalarTerm.create(dffe_pp1p, naja.SNLTerm.Direction.Input, "C")
100
+ naja.SNLScalarTerm.create(dffe_pp1p, naja.SNLTerm.Direction.Input, "D")
101
+ naja.SNLScalarTerm.create(dffe_pp1p, naja.SNLTerm.Direction.Input, "E")
102
+ naja.SNLScalarTerm.create(dffe_pp1p, naja.SNLTerm.Direction.Output, "Q")
103
+ naja.SNLScalarTerm.create(dffe_pp1p, naja.SNLTerm.Direction.Input, "R")
104
+
105
+
106
+ def constructDFFE_PP0N(lib):
107
+ dffe_pp0n = naja.SNLDesign.createPrimitive(lib, "$_DFFE_PP0N_")
108
+ naja.SNLScalarTerm.create(dffe_pp0n, naja.SNLTerm.Direction.Input, "C")
109
+ naja.SNLScalarTerm.create(dffe_pp0n, naja.SNLTerm.Direction.Input, "D")
110
+ naja.SNLScalarTerm.create(dffe_pp0n, naja.SNLTerm.Direction.Input, "E")
111
+ naja.SNLScalarTerm.create(dffe_pp0n, naja.SNLTerm.Direction.Output, "Q")
112
+ naja.SNLScalarTerm.create(dffe_pp0n, naja.SNLTerm.Direction.Input, "R")
113
+
114
+
115
+ def constructSDFF_PP0(lib):
116
+ sdff_pp0 = naja.SNLDesign.createPrimitive(lib, "$_SDFF_PP0_")
117
+ naja.SNLScalarTerm.create(sdff_pp0, naja.SNLTerm.Direction.Input, "C")
118
+ naja.SNLScalarTerm.create(sdff_pp0, naja.SNLTerm.Direction.Input, "D")
119
+ naja.SNLScalarTerm.create(sdff_pp0, naja.SNLTerm.Direction.Output, "Q")
120
+ naja.SNLScalarTerm.create(sdff_pp0, naja.SNLTerm.Direction.Input, "R")
121
+
122
+
123
+ def constructSDFFE_PP0N(lib):
124
+ sdffe_pp0n = naja.SNLDesign.createPrimitive(lib, "$_SDFFE_PP0N_")
125
+ naja.SNLScalarTerm.create(sdffe_pp0n, naja.SNLTerm.Direction.Input, "C")
126
+ naja.SNLScalarTerm.create(sdffe_pp0n, naja.SNLTerm.Direction.Input, "D")
127
+ naja.SNLScalarTerm.create(sdffe_pp0n, naja.SNLTerm.Direction.Input, "E")
128
+ naja.SNLScalarTerm.create(sdffe_pp0n, naja.SNLTerm.Direction.Output, "Q")
129
+ naja.SNLScalarTerm.create(sdffe_pp0n, naja.SNLTerm.Direction.Input, "R")
130
+
131
+
132
+ def constructSDFFE_PN0P(lib):
133
+ sdffe_pn0p = naja.SNLDesign.createPrimitive(lib, "$_SDFFE_PN0P_")
134
+ naja.SNLScalarTerm.create(sdffe_pn0p, naja.SNLTerm.Direction.Input, "C")
135
+ naja.SNLScalarTerm.create(sdffe_pn0p, naja.SNLTerm.Direction.Input, "D")
136
+ naja.SNLScalarTerm.create(sdffe_pn0p, naja.SNLTerm.Direction.Input, "E")
137
+ naja.SNLScalarTerm.create(sdffe_pn0p, naja.SNLTerm.Direction.Output, "Q")
138
+ naja.SNLScalarTerm.create(sdffe_pn0p, naja.SNLTerm.Direction.Input, "R")
139
+
140
+
141
+ def constructSDFFE_PN0N(lib):
142
+ sdffe_pn0n = naja.SNLDesign.createPrimitive(lib, "$_SDFFE_PN0N_")
143
+ naja.SNLScalarTerm.create(sdffe_pn0n, naja.SNLTerm.Direction.Input, "C")
144
+ naja.SNLScalarTerm.create(sdffe_pn0n, naja.SNLTerm.Direction.Input, "D")
145
+ naja.SNLScalarTerm.create(sdffe_pn0n, naja.SNLTerm.Direction.Input, "E")
146
+ naja.SNLScalarTerm.create(sdffe_pn0n, naja.SNLTerm.Direction.Output, "Q")
147
+ naja.SNLScalarTerm.create(sdffe_pn0n, naja.SNLTerm.Direction.Input, "R")
148
+
149
+
150
+ def constructSDFFCE_PP0P(lib):
151
+ sdffce_pp0p = naja.SNLDesign.createPrimitive(lib, "$_SDFFCE_PP0P_")
152
+ naja.SNLScalarTerm.create(sdffce_pp0p, naja.SNLTerm.Direction.Input, "C")
153
+ naja.SNLScalarTerm.create(sdffce_pp0p, naja.SNLTerm.Direction.Input, "D")
154
+ naja.SNLScalarTerm.create(sdffce_pp0p, naja.SNLTerm.Direction.Input, "E")
155
+ naja.SNLScalarTerm.create(sdffce_pp0p, naja.SNLTerm.Direction.Output, "Q")
156
+ naja.SNLScalarTerm.create(sdffce_pp0p, naja.SNLTerm.Direction.Input, "R")
157
+
158
+
159
+ def constructSDFFCE_PN0N(lib):
160
+ sdffce_pn0n = naja.SNLDesign.createPrimitive(lib, "$_SDFFCE_PN0N_")
161
+ naja.SNLScalarTerm.create(sdffce_pn0n, naja.SNLTerm.Direction.Input, "C")
162
+ naja.SNLScalarTerm.create(sdffce_pn0n, naja.SNLTerm.Direction.Input, "D")
163
+ naja.SNLScalarTerm.create(sdffce_pn0n, naja.SNLTerm.Direction.Input, "E")
164
+ naja.SNLScalarTerm.create(sdffce_pn0n, naja.SNLTerm.Direction.Output, "Q")
165
+ naja.SNLScalarTerm.create(sdffce_pn0n, naja.SNLTerm.Direction.Input, "R")
166
+
167
+
168
+ def load(db):
169
+ logging.info("Loading Yosys primitives")
170
+ lib = naja.NLLibrary.createPrimitives(db, "yosys")
171
+ constructAND(lib)
172
+ constructOR(lib)
173
+ constructXOR(lib)
174
+ constructMUX(lib)
175
+ constructNOT(lib)
176
+ constructDFFP(lib)
177
+ constructDFFE_PP(lib)
178
+ constructDFFE_PN(lib)
179
+ constructDFF_PP0(lib)
180
+ constructDFF_PP1(lib)
181
+ constructDFFE_PP0P(lib)
182
+ constructDFFE_PP1P(lib)
183
+ constructDFFE_PP0N(lib)
184
+ constructSDFF_PP0(lib)
185
+ constructSDFFE_PP0N(lib)
186
+ constructSDFFE_PN0P(lib)
187
+ constructSDFFE_PN0N(lib)
188
+ constructSDFFCE_PP0P(lib)
189
+ constructSDFFCE_PN0N(lib)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: najaeda
3
- Version: 0.1.23
3
+ Version: 0.1.24
4
4
  Summary: Naja EDA Python package
5
5
  Author-Email: Naja Authors <contact@keplertech.io>
6
6
  License: Apache License 2.0
@@ -1,12 +1,17 @@
1
- najaeda/libnaja_python.so,sha256=DAtUOtN6J-u6yMtHJGm8mqfb_vsgNP1fLKVAqKviKno,1882297
2
- najaeda/libnaja_nl.so,sha256=9njx8rqW1n06PwcjaPPC_u89k0l1zGjL-w1jc_IJ8ec,1581224
3
- najaeda/naja.so,sha256=JEGNGoPD4mdBNyRKDrZjbdcxEM3TQPxXzxURHh-pCbw,206521
1
+ najaeda-0.1.24.dist-info/WHEEL,sha256=A3mvWTV2IcEc7qLoVrqpNTZ0QD1zGDiFoYw9zZpB5kA,158
2
+ najaeda-0.1.24.dist-info/METADATA,sha256=lDGwE7Obzgqwy7l70oK7xEsyYsisAYE1pQJwvbcUV_A,3046
3
+ najaeda-0.1.24.dist-info/RECORD,,
4
+ najaeda-0.1.24.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
5
+ najaeda-0.1.24.dist-info/licenses/AUTHORS,sha256=7NYEGDAX_1QZvCCHfq8YVXC5ZbwH_pbNI8DcSmm70GU,377
6
+ najaeda/libnaja_python.so,sha256=1_Qi0NU7zbDxtIwnUN0A0FWL4krFMsoYVYB-sqZqiJM,1885729
7
+ najaeda/libnaja_nl.so,sha256=jo5MHqPetOFnO5VElmM1bXtna9lk1RCuiU_ScPF97ak,1646832
8
+ najaeda/naja.so,sha256=FlFyOYoOfNiigS7D3dOAEUphQb-G0Ils2Ac3T9ElBxo,206521
4
9
  najaeda/pandas_stats.py,sha256=yOb4ka965U7rN4D6AwvSGmRyeT_O7Ed-5cmT8BFbfeo,1070
5
10
  najaeda/stats.py,sha256=wackXsf0x24ic9v-UifECHj4t5yveUWssMDZp2B057A,16187
6
- najaeda/libnaja_bne.so,sha256=bxIctDmrveTSgKI4YOlhJb06X8PrzoqchQWN0PYNoMc,271329
11
+ najaeda/libnaja_bne.so,sha256=41X1JqKAY6ydVaLZ6NI1qSJgC1MBcIkrCLq0z5nCjNU,272577
7
12
  najaeda/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
- najaeda/libnaja_opt.so,sha256=ByP9waRBJlZ83gRLFqFknM9hsfpFYyN4zib60YaepdQ,346169
9
- najaeda/netlist.py,sha256=RA8jMz9uwwlLSLVli5mzqI5Z3RS6mk9YuFol-7SeEIM,53647
13
+ najaeda/libnaja_opt.so,sha256=l7VnRKnJRRy7IVVNTNjXILZrpgYFes6IlCJ0wK1dOAA,348881
14
+ najaeda/netlist.py,sha256=ZFL00PMhc2pl_uu9_c3_lj65gSjD93zYvfbEFBLZhjg,54309
10
15
  najaeda/net_visitor.py,sha256=P_esjibYb-wBDuF-AyF7es9sJYw1Ha8RhTPu-qKe7G4,1940
11
16
  najaeda/libnaja_dnl.so,sha256=zkSbBWj0qCH6wE2gueif9tKoj6xrN7p9Gk01pHUkGBE,276041
12
17
  najaeda/instance_visitor.py,sha256=JMsPSQaWNiDjxS05rxg83a0PIsrOIuTi9G35hkwdibs,1530
@@ -14,6 +19,7 @@ najaeda/native/stats.py,sha256=t50hhE9pEFNtlssjES0A-K9TsO_2ZSUAb-e9L3Rt6yc,13063
14
19
  najaeda/native/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
20
  najaeda/primitives/xilinx.py,sha256=Ka-jlu-OxixEZ_yR_niXLHtaUL8HxT1Bg9H9Kpnr4ns,26551
16
21
  najaeda/primitives/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
+ najaeda/primitives/yosys.py,sha256=g1L70AUJoPCkd9B-b9aW4Pzc1AeR9KyIHoXvneW_UEU,8584
17
23
  najaeda/docs/requirements.txt,sha256=1XIBGTIplm2arC9HhDCfLuAjozGdVSXkqmOj8ybuT6U,121
18
24
  najaeda/docs/.readthedocs.yaml,sha256=nN_Psro-YdfPcIiueZkJcZepts68g23rqVThhKnmVRw,790
19
25
  najaeda/docs/source/netlist_classes.rst,sha256=Zrha9MQVEdEwxmP2zhgC0K3iioZXXerzeFoOz5SrOXM,132
@@ -29,11 +35,6 @@ najaeda/docs/source/api.rst,sha256=47VCPyF4Py_1cklZ3q9fmOMhqqI17rxwU_VUJETfCwY,1
29
35
  najaeda/docs/source/term.rst,sha256=QKWT6u1xjEjusvcZYknKQ-M83ibohO5y1EYTQnnXqak,690
30
36
  najaeda/docs/source/instance.rst,sha256=7B2IBB0p32Tb4qvOCE77OlrQaYpFADvmTlq1q8eyVqw,458
31
37
  najaeda/docs/source/conf.py,sha256=XqCFo29gZCbaoPe1xEan9ZonYyQW5NZnWHGEWrB7p8Q,2021
32
- najaeda-0.1.23.dist-info/WHEEL,sha256=A3mvWTV2IcEc7qLoVrqpNTZ0QD1zGDiFoYw9zZpB5kA,158
33
- najaeda-0.1.23.dist-info/METADATA,sha256=fUZcD04Cf0r8tlSQgRGVIOQ9NeRfMJYPNLdAR5UcSZE,3046
34
- najaeda-0.1.23.dist-info/RECORD,,
35
- najaeda-0.1.23.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
36
- najaeda-0.1.23.dist-info/licenses/AUTHORS,sha256=7NYEGDAX_1QZvCCHfq8YVXC5ZbwH_pbNI8DcSmm70GU,377
37
38
  najaeda.libs/libtbbmalloc-8bd2c113.so.2.15,sha256=t7EmHeYI7vtRrpUMImjQuzDv3a1gs8-lcUxotcVs3mA,198281
38
39
  najaeda.libs/libcapnp-1-d562dcbf.1.0.so,sha256=oATbFuRyIBdV6dWAaarYlY3DDt3Wvyp1nC5FvgRIyzw,1152985
39
40
  najaeda.libs/libtbb-58378cc2.so.12.15,sha256=yxzhDOGKoZHEHYUULdSu-uH9-Hr1Wh8JygBizKBxc_U,404105