@modular-circuit/perc 0.0.51
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.
- package/LICENSE +21 -0
- package/README.md +40 -0
- package/build/erc/connect_graph_visitor/index.d.ts +2 -0
- package/build/erc/connect_graph_visitor/index.d.ts.map +1 -0
- package/build/erc/connect_graph_visitor/index.js +1 -0
- package/build/erc/connect_graph_visitor/visitor.d.ts +5 -0
- package/build/erc/connect_graph_visitor/visitor.d.ts.map +1 -0
- package/build/erc/connect_graph_visitor/visitor.js +0 -0
- package/build/erc/context/connection_graph_builder_ctx.d.ts +7 -0
- package/build/erc/context/connection_graph_builder_ctx.d.ts.map +1 -0
- package/build/erc/context/connection_graph_builder_ctx.js +0 -0
- package/build/erc/context/error_severity.d.ts +11 -0
- package/build/erc/context/error_severity.d.ts.map +1 -0
- package/build/erc/context/error_severity.js +13 -0
- package/build/erc/context/graph.d.ts +3 -0
- package/build/erc/context/graph.d.ts.map +1 -0
- package/build/erc/context/graph.js +0 -0
- package/build/erc/context/graph_converter.d.ts +8 -0
- package/build/erc/context/graph_converter.d.ts.map +1 -0
- package/build/erc/context/graph_converter.js +0 -0
- package/build/erc/context/index.d.ts +6 -0
- package/build/erc/context/index.d.ts.map +1 -0
- package/build/erc/context/index.js +5 -0
- package/build/erc/context/pin_to_pin_test_ctx.d.ts +7 -0
- package/build/erc/context/pin_to_pin_test_ctx.d.ts.map +1 -0
- package/build/erc/context/pin_to_pin_test_ctx.js +0 -0
- package/build/erc/index.d.ts +5 -0
- package/build/erc/index.d.ts.map +1 -0
- package/build/erc/index.js +4 -0
- package/build/erc/netlist/constraints.d.ts +5 -0
- package/build/erc/netlist/constraints.d.ts.map +1 -0
- package/build/erc/netlist/constraints.js +30 -0
- package/build/erc/netlist/index.d.ts +3 -0
- package/build/erc/netlist/index.d.ts.map +1 -0
- package/build/erc/netlist/index.js +2 -0
- package/build/erc/netlist/tester.d.ts +10 -0
- package/build/erc/netlist/tester.d.ts.map +1 -0
- package/build/erc/netlist/tester.js +67 -0
- package/build/erc/parameter_propagation/error_code.d.ts +41 -0
- package/build/erc/parameter_propagation/error_code.d.ts.map +1 -0
- package/build/erc/parameter_propagation/error_code.js +74 -0
- package/build/erc/parameter_propagation/index.d.ts +3 -0
- package/build/erc/parameter_propagation/index.d.ts.map +1 -0
- package/build/erc/parameter_propagation/index.js +2 -0
- package/build/erc/parameter_propagation/link_testers/index.d.ts +2 -0
- package/build/erc/parameter_propagation/link_testers/index.d.ts.map +1 -0
- package/build/erc/parameter_propagation/link_testers/index.js +1 -0
- package/build/erc/parameter_propagation/link_testers/link_tester_base.d.ts +23 -0
- package/build/erc/parameter_propagation/link_testers/link_tester_base.d.ts.map +1 -0
- package/build/erc/parameter_propagation/link_testers/link_tester_base.js +112 -0
- package/build/erc/parameter_propagation/link_testers/tester_impl.d.ts +247 -0
- package/build/erc/parameter_propagation/link_testers/tester_impl.d.ts.map +1 -0
- package/build/erc/parameter_propagation/link_testers/tester_impl.js +1456 -0
- package/build/erc/parameter_propagation/tester.d.ts +16 -0
- package/build/erc/parameter_propagation/tester.d.ts.map +1 -0
- package/build/erc/parameter_propagation/tester.js +215 -0
- package/build/erc/pin_compatibility_matrix/erc_setting.d.ts +29 -0
- package/build/erc/pin_compatibility_matrix/erc_setting.d.ts.map +1 -0
- package/build/erc/pin_compatibility_matrix/erc_setting.js +110 -0
- package/build/erc/pin_compatibility_matrix/error_code.d.ts +55 -0
- package/build/erc/pin_compatibility_matrix/error_code.d.ts.map +1 -0
- package/build/erc/pin_compatibility_matrix/error_code.js +56 -0
- package/build/erc/pin_compatibility_matrix/index.d.ts +5 -0
- package/build/erc/pin_compatibility_matrix/index.d.ts.map +1 -0
- package/build/erc/pin_compatibility_matrix/index.js +4 -0
- package/build/erc/pin_compatibility_matrix/pin_error.d.ts +7 -0
- package/build/erc/pin_compatibility_matrix/pin_error.d.ts.map +1 -0
- package/build/erc/pin_compatibility_matrix/pin_error.js +7 -0
- package/build/erc/pin_compatibility_matrix/tester.d.ts +9 -0
- package/build/erc/pin_compatibility_matrix/tester.d.ts.map +1 -0
- package/build/erc/pin_compatibility_matrix/tester.js +23 -0
- package/build/graphics/index.d.ts +3 -0
- package/build/graphics/index.d.ts.map +1 -0
- package/build/graphics/index.js +2 -0
- package/build/graphics/maker/index.d.ts +4 -0
- package/build/graphics/maker/index.d.ts.map +1 -0
- package/build/graphics/maker/index.js +3 -0
- package/build/graphics/maker/maker_base.d.ts +35 -0
- package/build/graphics/maker/maker_base.d.ts.map +1 -0
- package/build/graphics/maker/maker_base.js +0 -0
- package/build/graphics/maker/maker_type.d.ts +10 -0
- package/build/graphics/maker/maker_type.d.ts.map +1 -0
- package/build/graphics/maker/maker_type.js +10 -0
- package/build/graphics/maker/sch_maker.d.ts +5 -0
- package/build/graphics/maker/sch_maker.d.ts.map +1 -0
- package/build/graphics/maker/sch_maker.js +0 -0
- package/build/graphics/sch_erc_item.d.ts +28 -0
- package/build/graphics/sch_erc_item.d.ts.map +1 -0
- package/build/graphics/sch_erc_item.js +0 -0
- package/build/index.d.ts +6 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +5 -0
- package/build/report/erc_report.d.ts +16 -0
- package/build/report/erc_report.d.ts.map +1 -0
- package/build/report/erc_report.js +16 -0
- package/build/report/erc_reporter.d.ts +88 -0
- package/build/report/erc_reporter.d.ts.map +1 -0
- package/build/report/erc_reporter.js +87 -0
- package/build/report/index.d.ts +3 -0
- package/build/report/index.d.ts.map +1 -0
- package/build/report/index.js +2 -0
- package/build/rule_check_item/erc_item.d.ts +4 -0
- package/build/rule_check_item/erc_item.d.ts.map +1 -0
- package/build/rule_check_item/erc_item.js +0 -0
- package/build/rule_check_item/index.d.ts +3 -0
- package/build/rule_check_item/index.d.ts.map +1 -0
- package/build/rule_check_item/index.js +2 -0
- package/build/rule_check_item/rc_item.d.ts +33 -0
- package/build/rule_check_item/rc_item.d.ts.map +1 -0
- package/build/rule_check_item/rc_item.js +0 -0
- package/build/tester/erc_tester.d.ts +18 -0
- package/build/tester/erc_tester.d.ts.map +1 -0
- package/build/tester/erc_tester.js +66 -0
- package/build/tester/graph/connection_graphs_builder.d.ts +22 -0
- package/build/tester/graph/connection_graphs_builder.d.ts.map +1 -0
- package/build/tester/graph/connection_graphs_builder.js +187 -0
- package/build/tester/graph/graph_erc.d.ts +16 -0
- package/build/tester/graph/graph_erc.d.ts.map +1 -0
- package/build/tester/graph/graph_erc.js +63 -0
- package/build/tester/graph/index.d.ts +4 -0
- package/build/tester/graph/index.d.ts.map +1 -0
- package/build/tester/graph/index.js +3 -0
- package/build/tester/graph/ir_graph_converter.d.ts +30 -0
- package/build/tester/graph/ir_graph_converter.d.ts.map +1 -0
- package/build/tester/graph/ir_graph_converter.js +279 -0
- package/build/tester/index.d.ts +3 -0
- package/build/tester/index.d.ts.map +1 -0
- package/build/tester/index.js +2 -0
- package/build/tsconfig.build.tsbuildinfo +1 -0
- package/build/utils/get_dependent_modules_definition.d.ts +4 -0
- package/build/utils/get_dependent_modules_definition.d.ts.map +1 -0
- package/build/utils/get_dependent_modules_definition.js +145 -0
- package/build/utils/index.d.ts +2 -0
- package/build/utils/index.d.ts.map +1 -0
- package/build/utils/index.js +1 -0
- package/package.json +39 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2022-current Alberto Schiabel
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# PERC
|
|
2
|
+
|
|
3
|
+
This is the Programmable Electrical Rules Checking repository.
|
|
4
|
+
|
|
5
|
+
## Key Points
|
|
6
|
+
|
|
7
|
+
### EESchematic
|
|
8
|
+
|
|
9
|
+
1. Pins are either power connections or belong to a uniquely-annotated symbol, so they don't need a path if they are driving the subgraph.
|
|
10
|
+
2. PT_POWER_IN, ///< power input (GND, VCC for ICs). Must be connected to a power output.
|
|
11
|
+
3. PT_POWER_OUT, ///< output of a regulator: intended to be connected to power input pins
|
|
12
|
+
4. Using PWR_FLAG to tell ERC that the power input is intended to be connected to a regulator.
|
|
13
|
+
|
|
14
|
+
### NetList
|
|
15
|
+
|
|
16
|
+
1. Connected component
|
|
17
|
+
|
|
18
|
+
Each net is a [connected component](<https://en.wikipedia.org/wiki/Component_(graph_theory)>).
|
|
19
|
+
|
|
20
|
+
https://github.com/bloominstituteoftechnology/Graphs.git
|
|
21
|
+
|
|
22
|
+
## References
|
|
23
|
+
|
|
24
|
+
https://www.synopsys.com/glossary/what-is-programmable-electrical-rules-checking.html
|
|
25
|
+
|
|
26
|
+
https://www.allaboutcircuits.com/industry-articles/importance-of-advanced-erc-circuit-design
|
|
27
|
+
|
|
28
|
+
https://aniah.fr
|
|
29
|
+
|
|
30
|
+
https://semiconwiki.com/advanced-reliability-verification-mentors-calibre-perc/
|
|
31
|
+
|
|
32
|
+
https://semiwiki.com/eda/2296-a-programmable-electrical-rule-checker/
|
|
33
|
+
|
|
34
|
+
https://resources.pcb.cadence.com/blog/2023-electrical-rule-check
|
|
35
|
+
|
|
36
|
+
https://eda.sw.siemens.com/en-US/ic/calibre-design/reliability-verification/perc/
|
|
37
|
+
|
|
38
|
+
https://resources.pcb.cadence.com/blog/2023-electrical-rule-check
|
|
39
|
+
|
|
40
|
+
https://zhuanlan.zhihu.com/p/674943393
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/erc/connect_graph_visitor/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './visitor';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visitor.d.ts","sourceRoot":"","sources":["../../../src/erc/connect_graph_visitor/visitor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAA;AAE5E,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,kBAAkB,GAAG,IAAI,CAAA;CACvC"}
|
|
File without changes
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ModuleResolver } from '@modular-circuit/ir';
|
|
2
|
+
export interface CONNECTION_GRAPH_BUILDER_CTX {
|
|
3
|
+
module_resolver: ModuleResolver;
|
|
4
|
+
dependencies: Record<string, string>;
|
|
5
|
+
schematics: Record<string, unknown>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=connection_graph_builder_ctx.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection_graph_builder_ctx.d.ts","sourceRoot":"","sources":["../../../src/erc/context/connection_graph_builder_ctx.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEzD,MAAM,WAAW,4BAA4B;IAC3C,eAAe,EAAE,cAAc,CAAA;IAC/B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACpC"}
|
|
File without changes
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare enum SEVERITY {
|
|
2
|
+
RPT_SEVERITY_UNDEFINED = 1,
|
|
3
|
+
RPT_SEVERITY_INFO = 2,
|
|
4
|
+
RPT_SEVERITY_EXCLUSION = 4,
|
|
5
|
+
RPT_SEVERITY_ACTION = 8,
|
|
6
|
+
RPT_SEVERITY_WARNING = 16,
|
|
7
|
+
RPT_SEVERITY_ERROR = 32,
|
|
8
|
+
RPT_SEVERITY_IGNORE = 64,
|
|
9
|
+
RPT_SEVERITY_DEBUG = 128
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=error_severity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error_severity.d.ts","sourceRoot":"","sources":["../../../src/erc/context/error_severity.ts"],"names":[],"mappings":"AAEA,oBAAY,QAAQ;IAClB,sBAAsB,IAAO;IAC7B,iBAAiB,IAAO;IACxB,sBAAsB,IAAO;IAC7B,mBAAmB,IAAO;IAC1B,oBAAoB,KAAO;IAC3B,kBAAkB,KAAO;IACzB,mBAAmB,KAAO;IAC1B,kBAAkB,MAAO;CAC1B"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// Note: On windows, SEVERITY_ERROR collides with a system declaration,
|
|
2
|
+
// so we used RPT_SEVERITY_xxx instead of SEVERITY_xxx
|
|
3
|
+
export var SEVERITY;
|
|
4
|
+
(function (SEVERITY) {
|
|
5
|
+
SEVERITY[SEVERITY["RPT_SEVERITY_UNDEFINED"] = 1] = "RPT_SEVERITY_UNDEFINED";
|
|
6
|
+
SEVERITY[SEVERITY["RPT_SEVERITY_INFO"] = 2] = "RPT_SEVERITY_INFO";
|
|
7
|
+
SEVERITY[SEVERITY["RPT_SEVERITY_EXCLUSION"] = 4] = "RPT_SEVERITY_EXCLUSION";
|
|
8
|
+
SEVERITY[SEVERITY["RPT_SEVERITY_ACTION"] = 8] = "RPT_SEVERITY_ACTION";
|
|
9
|
+
SEVERITY[SEVERITY["RPT_SEVERITY_WARNING"] = 16] = "RPT_SEVERITY_WARNING";
|
|
10
|
+
SEVERITY[SEVERITY["RPT_SEVERITY_ERROR"] = 32] = "RPT_SEVERITY_ERROR";
|
|
11
|
+
SEVERITY[SEVERITY["RPT_SEVERITY_IGNORE"] = 64] = "RPT_SEVERITY_IGNORE";
|
|
12
|
+
SEVERITY[SEVERITY["RPT_SEVERITY_DEBUG"] = 128] = "RPT_SEVERITY_DEBUG";
|
|
13
|
+
})(SEVERITY || (SEVERITY = {}));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../../src/erc/context/graph.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG,GAAG,CAAC,MAAM,CAAC,CAAA;AAC3C,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA"}
|
|
File without changes
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ConnectionNodeMap } from '@modular-circuit/electronics-model';
|
|
2
|
+
import type { ADT_Graph } from './graph';
|
|
3
|
+
export interface GRAPH_CONVERTER {
|
|
4
|
+
convert_to_graph(design: unknown): true | Error[];
|
|
5
|
+
get_graph(): ADT_Graph;
|
|
6
|
+
get_connection_node_map(): ConnectionNodeMap;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=graph_converter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph_converter.d.ts","sourceRoot":"","sources":["../../../src/erc/context/graph_converter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AAC3E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAExC,MAAM,WAAW,eAAe;IAC9B,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,GAAG,KAAK,EAAE,CAAA;IAEjD,SAAS,IAAI,SAAS,CAAA;IAEtB,uBAAuB,IAAI,iBAAiB,CAAA;CAC7C"}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/erc/context/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,uBAAuB,CAAA;AACrC,cAAc,SAAS,CAAA;AACvB,cAAc,mBAAmB,CAAA;AACjC,cAAc,gCAAgC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pin_to_pin_test_ctx.d.ts","sourceRoot":"","sources":["../../../src/erc/context/pin_to_pin_test_ctx.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAE9D,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,UAAU,CAAA;IAClB,WAAW,EAAE,WAAW,CAAA;CACzB"}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/erc/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,yBAAyB,CAAA;AACvC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,WAAW,CAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { ELECTRICAL_PINTYPE } from '@modular-circuit/electronics-model';
|
|
2
|
+
export declare const DrivingPinTypes: Set<ELECTRICAL_PINTYPE>;
|
|
3
|
+
export declare const PowerDrivingPinTypes: Set<ELECTRICAL_PINTYPE>;
|
|
4
|
+
export declare const DrivenPinTypes: Set<ELECTRICAL_PINTYPE>;
|
|
5
|
+
//# sourceMappingURL=constraints.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constraints.d.ts","sourceRoot":"","sources":["../../../src/erc/netlist/constraints.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAA;AAsBvE,eAAO,MAAM,eAAe,yBAM1B,CAAA;AAMF,eAAO,MAAM,oBAAoB,yBAA6C,CAAA;AAG9E,eAAO,MAAM,cAAc,yBAAyE,CAAA"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ELECTRICAL_PINTYPE } from '@modular-circuit/electronics-model';
|
|
2
|
+
//NOTE https://gitlab.com/kicad/code/kicad/-/blob/8.0.6/eeschema/erc/erc.cpp
|
|
3
|
+
/* ERC tests :
|
|
4
|
+
* 1 - conflicts between connected pins ( example: 2 connected outputs )
|
|
5
|
+
* 2 - minimal connections requirements ( 1 input *must* be connected to an
|
|
6
|
+
* output, or a passive pin )
|
|
7
|
+
*/
|
|
8
|
+
/*
|
|
9
|
+
* Minimal ERC requirements:
|
|
10
|
+
* All pins *must* be connected (except ELECTRICAL_PINTYPE::PT_NC).
|
|
11
|
+
* When a pin is not connected in schematic, the user must place a "non
|
|
12
|
+
* connected" symbol to this pin.
|
|
13
|
+
* This ensures a forgotten connection will be detected.
|
|
14
|
+
*/
|
|
15
|
+
// List of pin types that are considered drivers for usual input pins
|
|
16
|
+
// i.e. pin type = ELECTRICAL_PINTYPE::PT_INPUT, but not PT_POWER_IN
|
|
17
|
+
// that need only a PT_POWER_OUT pin type to be driven
|
|
18
|
+
export var DrivingPinTypes = new Set([
|
|
19
|
+
ELECTRICAL_PINTYPE.PT_OUTPUT,
|
|
20
|
+
ELECTRICAL_PINTYPE.PT_POWER_OUT,
|
|
21
|
+
ELECTRICAL_PINTYPE.PT_PASSIVE,
|
|
22
|
+
ELECTRICAL_PINTYPE.PT_TRISTATE,
|
|
23
|
+
ELECTRICAL_PINTYPE.PT_BIDI,
|
|
24
|
+
]);
|
|
25
|
+
// List of pin types that are considered drivers for power pins
|
|
26
|
+
// In fact only a ELECTRICAL_PINTYPE::PT_POWER_OUT pin type can drive
|
|
27
|
+
// power input pins
|
|
28
|
+
export var PowerDrivingPinTypes = new Set([ELECTRICAL_PINTYPE.PT_POWER_OUT]);
|
|
29
|
+
// List of pin types that require a driver elsewhere on the net
|
|
30
|
+
export var DrivenPinTypes = new Set([ELECTRICAL_PINTYPE.PT_INPUT, ELECTRICAL_PINTYPE.PT_POWER_IN]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/erc/netlist/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type ConnectionSubgraph } from '@modular-circuit/electronics-model';
|
|
2
|
+
import type { CG_Visitor } from '../connect_graph_visitor';
|
|
3
|
+
import type { PIN_TO_PIN_TEST_CONTEXT } from '../context/pin_to_pin_test_ctx';
|
|
4
|
+
export declare class NetlistTester implements CG_Visitor {
|
|
5
|
+
private readonly ctx;
|
|
6
|
+
constructor(ctx: PIN_TO_PIN_TEST_CONTEXT);
|
|
7
|
+
visit_cc(cc: ConnectionSubgraph): void;
|
|
8
|
+
private ercCheckMultipleDrivers;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=tester.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tester.d.ts","sourceRoot":"","sources":["../../../src/erc/netlist/tester.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,kBAAkB,EAAE,MAAM,oCAAoC,CAAA;AAEhG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAA;AAE7E,qBAAa,aAAc,YAAW,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,uBAAuB;IAEzD,QAAQ,CAAC,EAAE,EAAE,kBAAkB;IAStC,OAAO,CAAC,uBAAuB;CAuChC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
var __values = (this && this.__values) || function(o) {
|
|
2
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
3
|
+
if (m) return m.call(o);
|
|
4
|
+
if (o && typeof o.length === "number") return {
|
|
5
|
+
next: function () {
|
|
6
|
+
if (o && i >= o.length) o = void 0;
|
|
7
|
+
return { value: o && o[i++], done: !o };
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
11
|
+
};
|
|
12
|
+
import { ConnectionNodeType } from '@modular-circuit/electronics-model';
|
|
13
|
+
import { ERCE_DRIVER_CONFLICT, ERCE_PIN_NOT_CONNECTED } from '../../report';
|
|
14
|
+
var NetlistTester = /** @class */ (function () {
|
|
15
|
+
function NetlistTester(ctx) {
|
|
16
|
+
this.ctx = ctx;
|
|
17
|
+
}
|
|
18
|
+
NetlistTester.prototype.visit_cc = function (cc) {
|
|
19
|
+
if (cc.nodes.length === 1 && cc.nodes[0].type === ConnectionNodeType.Port) {
|
|
20
|
+
this.ctx.report.erc_errors.push(ERCE_PIN_NOT_CONNECTED(cc.nodes[0].uuid));
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
this.ercCheckMultipleDrivers(cc);
|
|
24
|
+
};
|
|
25
|
+
NetlistTester.prototype.ercCheckMultipleDrivers = function (cc) {
|
|
26
|
+
var e_1, _a;
|
|
27
|
+
if (!cc.net_drivers)
|
|
28
|
+
return;
|
|
29
|
+
var node_map = cc.nodes.reduce(function (map, node) {
|
|
30
|
+
map[node.uuid] = node;
|
|
31
|
+
return map;
|
|
32
|
+
}, {});
|
|
33
|
+
try {
|
|
34
|
+
for (var _b = __values(cc.net_drivers.drivers), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
35
|
+
var driver = _c.value;
|
|
36
|
+
if (driver === cc.net_drivers.primary_driver)
|
|
37
|
+
continue;
|
|
38
|
+
var node = node_map[driver];
|
|
39
|
+
var net_name = cc.name;
|
|
40
|
+
switch (node.type) {
|
|
41
|
+
case ConnectionNodeType.Port:
|
|
42
|
+
case ConnectionNodeType.Graphics:
|
|
43
|
+
break;
|
|
44
|
+
case ConnectionNodeType.NetLabel:
|
|
45
|
+
if (net_name !== node.text) {
|
|
46
|
+
this.ctx.report.erc_errors.push(ERCE_DRIVER_CONFLICT([cc.net_drivers.primary_driver, driver], cc.name, node.text));
|
|
47
|
+
}
|
|
48
|
+
break;
|
|
49
|
+
case ConnectionNodeType.Power:
|
|
50
|
+
if (net_name !== node.value) {
|
|
51
|
+
this.ctx.report.erc_errors.push(ERCE_DRIVER_CONFLICT([cc.net_drivers.primary_driver, driver], cc.name, node.value));
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
58
|
+
finally {
|
|
59
|
+
try {
|
|
60
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
61
|
+
}
|
|
62
|
+
finally { if (e_1) throw e_1.error; }
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
return NetlistTester;
|
|
66
|
+
}());
|
|
67
|
+
export { NetlistTester };
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PolymorphicBlocks blocks error codes start here.
|
|
3
|
+
*
|
|
4
|
+
* See https://github.com/BerkeleyHCI/PolymorphicBlocks/blob/master/compiler/src/main/scala/edg/compiler/CompilerError.scala
|
|
5
|
+
*/
|
|
6
|
+
import { SEVERITY } from '../context';
|
|
7
|
+
export declare enum PP_ERROR {
|
|
8
|
+
UN_COMPILED_BLOCK = "un_compiled_block",
|
|
9
|
+
UN_COMPILED_LINK = "un_compiled_link",
|
|
10
|
+
UN_COMPILED_LINK_ARRAY = "un_compiled_link_array",
|
|
11
|
+
UN_COMPILED_PARAMETER = "un_compiled_parameter",
|
|
12
|
+
UN_COMPILED_INTERNAL_ELEMENT = "un_compiled_internal_element",
|
|
13
|
+
UN_COMPILED_LIBRARY_ELEMENT = "un_compiled_library_element",
|
|
14
|
+
UNDEFINED_PORT_ARRAY = "undefined_port_array",
|
|
15
|
+
LIBRARY_ERROR = "library_error",
|
|
16
|
+
GENERATOR_ERROR = "generator_error",
|
|
17
|
+
REFINEMENT_SUBCLASS_ERROR = "refinement_subclass_error",
|
|
18
|
+
OVER_ASSIGN = "over_assign",
|
|
19
|
+
BAD_REFERENCE = "bad_reference",
|
|
20
|
+
ABSTRACT_BLOCK = "abstract_block",
|
|
21
|
+
FAILED_ASSERTION = "failed_assertion",
|
|
22
|
+
UN_EVALUATED_ASSERTION = "un_evaluated_assertion",
|
|
23
|
+
INCONSISTENT_LINK_ARRAY_ELEMENTS = "inconsistent_link_array_elements",
|
|
24
|
+
PP_UNANNOTATED = "pp_unannotated",
|
|
25
|
+
PP_UNKNOWN_PORT_TYPE = "pp_unknown_port_type",
|
|
26
|
+
INAPPROPRIATE_FUNC = "Functionally inappropriate link",
|
|
27
|
+
NOT_DRIVEN = "pp_not_driven",
|
|
28
|
+
DUPLICATED_PWR_SOURCES = "duplicated_pwr_sources",
|
|
29
|
+
INSUFFICIENT_DRIVER = "Insufficient_driver",
|
|
30
|
+
OVER_DRIVEN = "over_driven",
|
|
31
|
+
IMPEDANCE_SIGNAL_INTEGRITY = "impedance_signal_integrity",
|
|
32
|
+
INCOMPATIBLE_VOLTAGE_LEVELS = "incompatible_voltage_levels",
|
|
33
|
+
SIGNAL_LEVELS_NOT_CONTAINED_WITHIN_VOLTAGE = "signal_levels_not_contained_within_voltage",
|
|
34
|
+
INCOMPATIBLE_SIGNAL_LEVELS = "incompatible_signal_levels",
|
|
35
|
+
OVERCURRENT = "overcurrent",
|
|
36
|
+
INCOMPATIBLE_DIGITAL_THRESHOLDS = "incompatible_digital_thresholds",
|
|
37
|
+
REQUIRES_CONNECTED_SOURCE_OR_BIDIR = "requires_connected_source_or_bidir",
|
|
38
|
+
ILLEGAL_CONNECTION = "Illegal_connection"
|
|
39
|
+
}
|
|
40
|
+
export declare const DEFAULT_PP_ERROR_SEVERITY: Record<PP_ERROR, SEVERITY>;
|
|
41
|
+
//# sourceMappingURL=error_code.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error_code.d.ts","sourceRoot":"","sources":["../../../src/erc/parameter_propagation/error_code.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,oBAAY,QAAQ;IAClB,iBAAiB,sBAAsB;IACvC,gBAAgB,qBAAqB;IACrC,sBAAsB,2BAA2B;IACjD,qBAAqB,0BAA0B;IAC/C,4BAA4B,iCAAiC;IAC7D,2BAA2B,gCAAgC;IAC3D,oBAAoB,yBAAyB;IAC7C,aAAa,kBAAkB;IAC/B,eAAe,oBAAoB;IACnC,yBAAyB,8BAA8B;IACvD,WAAW,gBAAgB;IAC3B,aAAa,kBAAkB;IAC/B,cAAc,mBAAmB;IACjC,gBAAgB,qBAAqB;IACrC,sBAAsB,2BAA2B;IACjD,gCAAgC,qCAAqC;IACrE,cAAc,mBAAmB;IACjC,oBAAoB,yBAAyB;IAC7C,kBAAkB,oCAAoC;IACtD,UAAU,kBAAkB;IAC5B,sBAAsB,2BAA2B;IACjD,mBAAmB,wBAAwB;IAC3C,WAAW,gBAAgB;IAC3B,0BAA0B,+BAA+B;IACzD,2BAA2B,gCAAgC;IAC3D,0CAA0C,+CAA+C;IACzF,0BAA0B,+BAA+B;IACzD,WAAW,gBAAgB;IAC3B,+BAA+B,oCAAoC;IACnE,kCAAkC,uCAAuC;IACzE,kBAAkB,uBAAuB;CAC1C;AAED,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAgChE,CAAA"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PolymorphicBlocks blocks error codes start here.
|
|
3
|
+
*
|
|
4
|
+
* See https://github.com/BerkeleyHCI/PolymorphicBlocks/blob/master/compiler/src/main/scala/edg/compiler/CompilerError.scala
|
|
5
|
+
*/
|
|
6
|
+
var _a;
|
|
7
|
+
import { SEVERITY } from '../context';
|
|
8
|
+
export var PP_ERROR;
|
|
9
|
+
(function (PP_ERROR) {
|
|
10
|
+
PP_ERROR["UN_COMPILED_BLOCK"] = "un_compiled_block";
|
|
11
|
+
PP_ERROR["UN_COMPILED_LINK"] = "un_compiled_link";
|
|
12
|
+
PP_ERROR["UN_COMPILED_LINK_ARRAY"] = "un_compiled_link_array";
|
|
13
|
+
PP_ERROR["UN_COMPILED_PARAMETER"] = "un_compiled_parameter";
|
|
14
|
+
PP_ERROR["UN_COMPILED_INTERNAL_ELEMENT"] = "un_compiled_internal_element";
|
|
15
|
+
PP_ERROR["UN_COMPILED_LIBRARY_ELEMENT"] = "un_compiled_library_element";
|
|
16
|
+
PP_ERROR["UNDEFINED_PORT_ARRAY"] = "undefined_port_array";
|
|
17
|
+
PP_ERROR["LIBRARY_ERROR"] = "library_error";
|
|
18
|
+
PP_ERROR["GENERATOR_ERROR"] = "generator_error";
|
|
19
|
+
PP_ERROR["REFINEMENT_SUBCLASS_ERROR"] = "refinement_subclass_error";
|
|
20
|
+
PP_ERROR["OVER_ASSIGN"] = "over_assign";
|
|
21
|
+
PP_ERROR["BAD_REFERENCE"] = "bad_reference";
|
|
22
|
+
PP_ERROR["ABSTRACT_BLOCK"] = "abstract_block";
|
|
23
|
+
PP_ERROR["FAILED_ASSERTION"] = "failed_assertion";
|
|
24
|
+
PP_ERROR["UN_EVALUATED_ASSERTION"] = "un_evaluated_assertion";
|
|
25
|
+
PP_ERROR["INCONSISTENT_LINK_ARRAY_ELEMENTS"] = "inconsistent_link_array_elements";
|
|
26
|
+
PP_ERROR["PP_UNANNOTATED"] = "pp_unannotated";
|
|
27
|
+
PP_ERROR["PP_UNKNOWN_PORT_TYPE"] = "pp_unknown_port_type";
|
|
28
|
+
PP_ERROR["INAPPROPRIATE_FUNC"] = "Functionally inappropriate link";
|
|
29
|
+
PP_ERROR["NOT_DRIVEN"] = "pp_not_driven";
|
|
30
|
+
PP_ERROR["DUPLICATED_PWR_SOURCES"] = "duplicated_pwr_sources";
|
|
31
|
+
PP_ERROR["INSUFFICIENT_DRIVER"] = "Insufficient_driver";
|
|
32
|
+
PP_ERROR["OVER_DRIVEN"] = "over_driven";
|
|
33
|
+
PP_ERROR["IMPEDANCE_SIGNAL_INTEGRITY"] = "impedance_signal_integrity";
|
|
34
|
+
PP_ERROR["INCOMPATIBLE_VOLTAGE_LEVELS"] = "incompatible_voltage_levels";
|
|
35
|
+
PP_ERROR["SIGNAL_LEVELS_NOT_CONTAINED_WITHIN_VOLTAGE"] = "signal_levels_not_contained_within_voltage";
|
|
36
|
+
PP_ERROR["INCOMPATIBLE_SIGNAL_LEVELS"] = "incompatible_signal_levels";
|
|
37
|
+
PP_ERROR["OVERCURRENT"] = "overcurrent";
|
|
38
|
+
PP_ERROR["INCOMPATIBLE_DIGITAL_THRESHOLDS"] = "incompatible_digital_thresholds";
|
|
39
|
+
PP_ERROR["REQUIRES_CONNECTED_SOURCE_OR_BIDIR"] = "requires_connected_source_or_bidir";
|
|
40
|
+
PP_ERROR["ILLEGAL_CONNECTION"] = "Illegal_connection";
|
|
41
|
+
})(PP_ERROR || (PP_ERROR = {}));
|
|
42
|
+
export var DEFAULT_PP_ERROR_SEVERITY = (_a = {},
|
|
43
|
+
_a[PP_ERROR.UN_COMPILED_BLOCK] = SEVERITY.RPT_SEVERITY_WARNING,
|
|
44
|
+
_a[PP_ERROR.UN_COMPILED_LINK] = SEVERITY.RPT_SEVERITY_WARNING,
|
|
45
|
+
_a[PP_ERROR.UN_COMPILED_LINK_ARRAY] = SEVERITY.RPT_SEVERITY_WARNING,
|
|
46
|
+
_a[PP_ERROR.UN_COMPILED_PARAMETER] = SEVERITY.RPT_SEVERITY_WARNING,
|
|
47
|
+
_a[PP_ERROR.UN_COMPILED_INTERNAL_ELEMENT] = SEVERITY.RPT_SEVERITY_WARNING,
|
|
48
|
+
_a[PP_ERROR.UN_COMPILED_LIBRARY_ELEMENT] = SEVERITY.RPT_SEVERITY_WARNING,
|
|
49
|
+
_a[PP_ERROR.UNDEFINED_PORT_ARRAY] = SEVERITY.RPT_SEVERITY_WARNING,
|
|
50
|
+
_a[PP_ERROR.LIBRARY_ERROR] = SEVERITY.RPT_SEVERITY_WARNING,
|
|
51
|
+
_a[PP_ERROR.GENERATOR_ERROR] = SEVERITY.RPT_SEVERITY_WARNING,
|
|
52
|
+
_a[PP_ERROR.REFINEMENT_SUBCLASS_ERROR] = SEVERITY.RPT_SEVERITY_WARNING,
|
|
53
|
+
_a[PP_ERROR.OVER_ASSIGN] = SEVERITY.RPT_SEVERITY_ERROR,
|
|
54
|
+
_a[PP_ERROR.BAD_REFERENCE] = SEVERITY.RPT_SEVERITY_WARNING,
|
|
55
|
+
_a[PP_ERROR.ABSTRACT_BLOCK] = SEVERITY.RPT_SEVERITY_WARNING,
|
|
56
|
+
_a[PP_ERROR.FAILED_ASSERTION] = SEVERITY.RPT_SEVERITY_ERROR,
|
|
57
|
+
_a[PP_ERROR.UN_EVALUATED_ASSERTION] = SEVERITY.RPT_SEVERITY_ERROR,
|
|
58
|
+
_a[PP_ERROR.INCONSISTENT_LINK_ARRAY_ELEMENTS] = SEVERITY.RPT_SEVERITY_WARNING,
|
|
59
|
+
_a[PP_ERROR.PP_UNANNOTATED] = SEVERITY.RPT_SEVERITY_WARNING,
|
|
60
|
+
_a[PP_ERROR.PP_UNKNOWN_PORT_TYPE] = SEVERITY.RPT_SEVERITY_ERROR,
|
|
61
|
+
_a[PP_ERROR.INAPPROPRIATE_FUNC] = SEVERITY.RPT_SEVERITY_ERROR,
|
|
62
|
+
_a[PP_ERROR.NOT_DRIVEN] = SEVERITY.RPT_SEVERITY_WARNING,
|
|
63
|
+
_a[PP_ERROR.DUPLICATED_PWR_SOURCES] = SEVERITY.RPT_SEVERITY_WARNING,
|
|
64
|
+
_a[PP_ERROR.INSUFFICIENT_DRIVER] = SEVERITY.RPT_SEVERITY_WARNING,
|
|
65
|
+
_a[PP_ERROR.OVER_DRIVEN] = SEVERITY.RPT_SEVERITY_WARNING,
|
|
66
|
+
_a[PP_ERROR.IMPEDANCE_SIGNAL_INTEGRITY] = SEVERITY.RPT_SEVERITY_WARNING,
|
|
67
|
+
_a[PP_ERROR.INCOMPATIBLE_VOLTAGE_LEVELS] = SEVERITY.RPT_SEVERITY_WARNING,
|
|
68
|
+
_a[PP_ERROR.SIGNAL_LEVELS_NOT_CONTAINED_WITHIN_VOLTAGE] = SEVERITY.RPT_SEVERITY_WARNING,
|
|
69
|
+
_a[PP_ERROR.INCOMPATIBLE_SIGNAL_LEVELS] = SEVERITY.RPT_SEVERITY_WARNING,
|
|
70
|
+
_a[PP_ERROR.OVERCURRENT] = SEVERITY.RPT_SEVERITY_WARNING,
|
|
71
|
+
_a[PP_ERROR.INCOMPATIBLE_DIGITAL_THRESHOLDS] = SEVERITY.RPT_SEVERITY_WARNING,
|
|
72
|
+
_a[PP_ERROR.REQUIRES_CONNECTED_SOURCE_OR_BIDIR] = SEVERITY.RPT_SEVERITY_WARNING,
|
|
73
|
+
_a[PP_ERROR.ILLEGAL_CONNECTION] = SEVERITY.RPT_SEVERITY_ERROR,
|
|
74
|
+
_a);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/erc/parameter_propagation/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/erc/parameter_propagation/link_testers/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './tester_impl';
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type PortLike } from '@modular-circuit/electronics-model';
|
|
2
|
+
import type { ERC_REPORT } from '../../../report/erc_report';
|
|
3
|
+
export interface LinkTestContext {
|
|
4
|
+
port_id: Map<PortLike, string>;
|
|
5
|
+
report: ERC_REPORT;
|
|
6
|
+
has_passive_port: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare abstract class LinkTesterBase<LinkT> {
|
|
9
|
+
protected readonly ctx: LinkTestContext;
|
|
10
|
+
protected readonly ports: PortLike[];
|
|
11
|
+
protected link: LinkT | undefined;
|
|
12
|
+
private _all_port_ids?;
|
|
13
|
+
constructor(ctx: LinkTestContext, ports: PortLike[]);
|
|
14
|
+
test(): void;
|
|
15
|
+
get all_port_ids(): string[];
|
|
16
|
+
protected abstract check_parameter_propagation(): void;
|
|
17
|
+
protected abstract init_link(): boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare abstract class CompositePortLinkTesterBase<LinkT> extends LinkTesterBase<LinkT> {
|
|
20
|
+
test(): void;
|
|
21
|
+
private annot_composite_port;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=link_tester_base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link_tester_base.d.ts","sourceRoot":"","sources":["../../../../src/erc/parameter_propagation/link_testers/link_tester_base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AACpF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAE5D,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAC9B,MAAM,EAAE,UAAU,CAAA;IAClB,gBAAgB,EAAE,OAAO,CAAA;CAC1B;AAED,8BAAsB,cAAc,CAAC,KAAK;IAKtC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,eAAe;IACvC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE;IALtC,SAAS,CAAC,IAAI,EAAE,KAAK,GAAG,SAAS,CAAA;IACjC,OAAO,CAAC,aAAa,CAAC,CAAU;gBAGX,GAAG,EAAE,eAAe,EACpB,KAAK,EAAE,QAAQ,EAAE;IAG/B,IAAI;IAKX,IAAW,YAAY,aAGtB;IAED,SAAS,CAAC,QAAQ,CAAC,2BAA2B,IAAI,IAAI;IAEtD,SAAS,CAAC,QAAQ,CAAC,SAAS,IAAI,OAAO;CACxC;AAED,8BAAsB,2BAA2B,CAAC,KAAK,CAAE,SAAQ,cAAc,CAAC,KAAK,CAAC;IACpE,IAAI,IAAI,IAAI;IAQ5B,OAAO,CAAC,oBAAoB;CAS7B"}
|