diff options
author | Kristóf Marussy <kris7topher@gmail.com> | 2019-08-01 14:49:53 +0200 |
---|---|---|
committer | Kristóf Marussy <kris7topher@gmail.com> | 2019-08-01 14:49:53 +0200 |
commit | 972baab642bd889d2c3476c0c9e17a6929e0c318 (patch) | |
tree | 8f724cb348c60e4fc45d446d8532988ed8e40748 /Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src-gen/hu/bme/mit/inf/dslreasoner/faulttree/components/serializer/CftLanguageSemanticSequencer.java | |
parent | Counting scope propagator (simpler than BasicTypeHierarchy) (diff) | |
download | VIATRA-Generator-972baab642bd889d2c3476c0c9e17a6929e0c318.tar.gz VIATRA-Generator-972baab642bd889d2c3476c0c9e17a6929e0c318.tar.zst VIATRA-Generator-972baab642bd889d2c3476c0c9e17a6929e0c318.zip |
[Stochastic] Remove fault tree support for now
Diffstat (limited to 'Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src-gen/hu/bme/mit/inf/dslreasoner/faulttree/components/serializer/CftLanguageSemanticSequencer.java')
-rw-r--r-- | Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src-gen/hu/bme/mit/inf/dslreasoner/faulttree/components/serializer/CftLanguageSemanticSequencer.java | 383 |
1 files changed, 0 insertions, 383 deletions
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src-gen/hu/bme/mit/inf/dslreasoner/faulttree/components/serializer/CftLanguageSemanticSequencer.java b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src-gen/hu/bme/mit/inf/dslreasoner/faulttree/components/serializer/CftLanguageSemanticSequencer.java deleted file mode 100644 index fe329903..00000000 --- a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src-gen/hu/bme/mit/inf/dslreasoner/faulttree/components/serializer/CftLanguageSemanticSequencer.java +++ /dev/null | |||
@@ -1,383 +0,0 @@ | |||
1 | /* | ||
2 | * generated by Xtext 2.16.0 | ||
3 | */ | ||
4 | package hu.bme.mit.inf.dslreasoner.faulttree.components.serializer; | ||
5 | |||
6 | import com.google.inject.Inject; | ||
7 | import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.Assignment; | ||
8 | import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.CftLanguagePackage; | ||
9 | import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.CftModel; | ||
10 | import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.ComponentInstance; | ||
11 | import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.EventReference; | ||
12 | import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.ImportDeclaration; | ||
13 | import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.LookupDefinition; | ||
14 | import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.MappingDefinition; | ||
15 | import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.MappingParameter; | ||
16 | import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.TransformationDefinition; | ||
17 | import hu.bme.mit.inf.dslreasoner.faulttree.components.services.CftLanguageGrammarAccess; | ||
18 | import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.AndGateDefinition; | ||
19 | import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.BasicEventDefinition; | ||
20 | import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.CftPackage; | ||
21 | import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.ComponentDefinition; | ||
22 | import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.InputEvent; | ||
23 | import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.KOfMGateDefinition; | ||
24 | import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.OrGateDefinition; | ||
25 | import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.ConstantDistribution; | ||
26 | import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.ExponentialDistribution; | ||
27 | import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.FtPackage; | ||
28 | import java.util.Set; | ||
29 | import org.eclipse.emf.ecore.EObject; | ||
30 | import org.eclipse.emf.ecore.EPackage; | ||
31 | import org.eclipse.xtext.Action; | ||
32 | import org.eclipse.xtext.Parameter; | ||
33 | import org.eclipse.xtext.ParserRule; | ||
34 | import org.eclipse.xtext.serializer.ISerializationContext; | ||
35 | import org.eclipse.xtext.serializer.acceptor.SequenceFeeder; | ||
36 | import org.eclipse.xtext.serializer.sequencer.AbstractDelegatingSemanticSequencer; | ||
37 | import org.eclipse.xtext.serializer.sequencer.ITransientValueService.ValueTransient; | ||
38 | |||
39 | @SuppressWarnings("all") | ||
40 | public class CftLanguageSemanticSequencer extends AbstractDelegatingSemanticSequencer { | ||
41 | |||
42 | @Inject | ||
43 | private CftLanguageGrammarAccess grammarAccess; | ||
44 | |||
45 | @Override | ||
46 | public void sequence(ISerializationContext context, EObject semanticObject) { | ||
47 | EPackage epackage = semanticObject.eClass().getEPackage(); | ||
48 | ParserRule rule = context.getParserRule(); | ||
49 | Action action = context.getAssignedAction(); | ||
50 | Set<Parameter> parameters = context.getEnabledBooleanParameters(); | ||
51 | if (epackage == CftPackage.eINSTANCE) | ||
52 | switch (semanticObject.eClass().getClassifierID()) { | ||
53 | case CftPackage.AND_GATE_DEFINITION: | ||
54 | sequence_AndGateDefinition(context, (AndGateDefinition) semanticObject); | ||
55 | return; | ||
56 | case CftPackage.BASIC_EVENT_DEFINITION: | ||
57 | sequence_BasicEventDefinition(context, (BasicEventDefinition) semanticObject); | ||
58 | return; | ||
59 | case CftPackage.COMPONENT_DEFINITION: | ||
60 | sequence_ComponentDefinition(context, (ComponentDefinition) semanticObject); | ||
61 | return; | ||
62 | case CftPackage.INPUT_EVENT: | ||
63 | sequence_InputEvent(context, (InputEvent) semanticObject); | ||
64 | return; | ||
65 | case CftPackage.KOF_MGATE_DEFINITION: | ||
66 | sequence_KOfMGateDefinition(context, (KOfMGateDefinition) semanticObject); | ||
67 | return; | ||
68 | case CftPackage.OR_GATE_DEFINITION: | ||
69 | sequence_OrGateDefinition(context, (OrGateDefinition) semanticObject); | ||
70 | return; | ||
71 | } | ||
72 | else if (epackage == CftLanguagePackage.eINSTANCE) | ||
73 | switch (semanticObject.eClass().getClassifierID()) { | ||
74 | case CftLanguagePackage.ASSIGNMENT: | ||
75 | sequence_Assignment(context, (Assignment) semanticObject); | ||
76 | return; | ||
77 | case CftLanguagePackage.CFT_MODEL: | ||
78 | sequence_CftModel(context, (CftModel) semanticObject); | ||
79 | return; | ||
80 | case CftLanguagePackage.COMPONENT_INSTANCE: | ||
81 | sequence_ComponentInstance(context, (ComponentInstance) semanticObject); | ||
82 | return; | ||
83 | case CftLanguagePackage.EVENT_REFERENCE: | ||
84 | sequence_EventReference(context, (EventReference) semanticObject); | ||
85 | return; | ||
86 | case CftLanguagePackage.IMPORT_DECLARATION: | ||
87 | sequence_ImportDeclaration(context, (ImportDeclaration) semanticObject); | ||
88 | return; | ||
89 | case CftLanguagePackage.LOOKUP_DEFINITION: | ||
90 | sequence_LookupDefinition(context, (LookupDefinition) semanticObject); | ||
91 | return; | ||
92 | case CftLanguagePackage.MAPPING_DEFINITION: | ||
93 | sequence_MappingDefinition(context, (MappingDefinition) semanticObject); | ||
94 | return; | ||
95 | case CftLanguagePackage.MAPPING_PARAMETER: | ||
96 | sequence_MappingParameter(context, (MappingParameter) semanticObject); | ||
97 | return; | ||
98 | case CftLanguagePackage.TRANSFORMATION_DEFINITION: | ||
99 | sequence_TransformationDefinition(context, (TransformationDefinition) semanticObject); | ||
100 | return; | ||
101 | } | ||
102 | else if (epackage == FtPackage.eINSTANCE) | ||
103 | switch (semanticObject.eClass().getClassifierID()) { | ||
104 | case FtPackage.CONSTANT_DISTRIBUTION: | ||
105 | sequence_ConstantDistribution(context, (ConstantDistribution) semanticObject); | ||
106 | return; | ||
107 | case FtPackage.EXPONENTIAL_DISTRIBUTION: | ||
108 | sequence_ExponentialDistribution(context, (ExponentialDistribution) semanticObject); | ||
109 | return; | ||
110 | } | ||
111 | if (errorAcceptor != null) | ||
112 | errorAcceptor.accept(diagnosticProvider.createInvalidContextOrTypeDiagnostic(semanticObject, context)); | ||
113 | } | ||
114 | |||
115 | /** | ||
116 | * Contexts: | ||
117 | * EventDefinition returns AndGateDefinition | ||
118 | * GateDefinition returns AndGateDefinition | ||
119 | * AndGateDefinition returns AndGateDefinition | ||
120 | * | ||
121 | * Constraint: | ||
122 | * (name=ValidId inputEvents+=[EventDeclaration|ValidId]*) | ||
123 | */ | ||
124 | protected void sequence_AndGateDefinition(ISerializationContext context, AndGateDefinition semanticObject) { | ||
125 | genericSequencer.createSequence(context, semanticObject); | ||
126 | } | ||
127 | |||
128 | |||
129 | /** | ||
130 | * Contexts: | ||
131 | * Assignment returns Assignment | ||
132 | * | ||
133 | * Constraint: | ||
134 | * (input=EventReference multiple?='+='? output=EventReference) | ||
135 | */ | ||
136 | protected void sequence_Assignment(ISerializationContext context, Assignment semanticObject) { | ||
137 | genericSequencer.createSequence(context, semanticObject); | ||
138 | } | ||
139 | |||
140 | |||
141 | /** | ||
142 | * Contexts: | ||
143 | * EventDefinition returns BasicEventDefinition | ||
144 | * BasicEventDefinition returns BasicEventDefinition | ||
145 | * | ||
146 | * Constraint: | ||
147 | * (name=ValidId distribution=Distribution) | ||
148 | */ | ||
149 | protected void sequence_BasicEventDefinition(ISerializationContext context, BasicEventDefinition semanticObject) { | ||
150 | if (errorAcceptor != null) { | ||
151 | if (transientValues.isValueTransient(semanticObject, CftPackage.Literals.EVENT_DECLARATION__NAME) == ValueTransient.YES) | ||
152 | errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, CftPackage.Literals.EVENT_DECLARATION__NAME)); | ||
153 | if (transientValues.isValueTransient(semanticObject, CftPackage.Literals.BASIC_EVENT_DEFINITION__DISTRIBUTION) == ValueTransient.YES) | ||
154 | errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, CftPackage.Literals.BASIC_EVENT_DEFINITION__DISTRIBUTION)); | ||
155 | } | ||
156 | SequenceFeeder feeder = createSequencerFeeder(context, semanticObject); | ||
157 | feeder.accept(grammarAccess.getBasicEventDefinitionAccess().getNameValidIdParserRuleCall_0_0(), semanticObject.getName()); | ||
158 | feeder.accept(grammarAccess.getBasicEventDefinitionAccess().getDistributionDistributionParserRuleCall_1_0(), semanticObject.getDistribution()); | ||
159 | feeder.finish(); | ||
160 | } | ||
161 | |||
162 | |||
163 | /** | ||
164 | * Contexts: | ||
165 | * CftModel returns CftModel | ||
166 | * | ||
167 | * Constraint: | ||
168 | * ( | ||
169 | * packageName=QualifiedName | ||
170 | * imports+=ImportDeclaration* | ||
171 | * (componentDefinitions+=ComponentDefinition | transformationDefinitions+=TransformationDefinition)* | ||
172 | * ) | ||
173 | */ | ||
174 | protected void sequence_CftModel(ISerializationContext context, CftModel semanticObject) { | ||
175 | genericSequencer.createSequence(context, semanticObject); | ||
176 | } | ||
177 | |||
178 | |||
179 | /** | ||
180 | * Contexts: | ||
181 | * ComponentDefinition returns ComponentDefinition | ||
182 | * | ||
183 | * Constraint: | ||
184 | * (name=ValidId (inputEvents+=InputEvent | outputEvents+=[EventDeclaration|ValidId])* eventDefinitions+=EventDefinition*) | ||
185 | */ | ||
186 | protected void sequence_ComponentDefinition(ISerializationContext context, ComponentDefinition semanticObject) { | ||
187 | genericSequencer.createSequence(context, semanticObject); | ||
188 | } | ||
189 | |||
190 | |||
191 | /** | ||
192 | * Contexts: | ||
193 | * Variable returns ComponentInstance | ||
194 | * ComponentInstance returns ComponentInstance | ||
195 | * | ||
196 | * Constraint: | ||
197 | * (componentType=[ComponentDefinition|QualifiedName] name=ValidId?) | ||
198 | */ | ||
199 | protected void sequence_ComponentInstance(ISerializationContext context, ComponentInstance semanticObject) { | ||
200 | genericSequencer.createSequence(context, semanticObject); | ||
201 | } | ||
202 | |||
203 | |||
204 | /** | ||
205 | * Contexts: | ||
206 | * Distribution returns ConstantDistribution | ||
207 | * ConstantDistribution returns ConstantDistribution | ||
208 | * | ||
209 | * Constraint: | ||
210 | * p=Double | ||
211 | */ | ||
212 | protected void sequence_ConstantDistribution(ISerializationContext context, ConstantDistribution semanticObject) { | ||
213 | if (errorAcceptor != null) { | ||
214 | if (transientValues.isValueTransient(semanticObject, FtPackage.Literals.CONSTANT_DISTRIBUTION__P) == ValueTransient.YES) | ||
215 | errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, FtPackage.Literals.CONSTANT_DISTRIBUTION__P)); | ||
216 | } | ||
217 | SequenceFeeder feeder = createSequencerFeeder(context, semanticObject); | ||
218 | feeder.accept(grammarAccess.getConstantDistributionAccess().getPDoubleParserRuleCall_2_0(), semanticObject.getP()); | ||
219 | feeder.finish(); | ||
220 | } | ||
221 | |||
222 | |||
223 | /** | ||
224 | * Contexts: | ||
225 | * EventReference returns EventReference | ||
226 | * | ||
227 | * Constraint: | ||
228 | * (component=[Variable|ValidId] event=[EventDeclaration|ValidId]) | ||
229 | */ | ||
230 | protected void sequence_EventReference(ISerializationContext context, EventReference semanticObject) { | ||
231 | if (errorAcceptor != null) { | ||
232 | if (transientValues.isValueTransient(semanticObject, CftLanguagePackage.Literals.EVENT_REFERENCE__COMPONENT) == ValueTransient.YES) | ||
233 | errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, CftLanguagePackage.Literals.EVENT_REFERENCE__COMPONENT)); | ||
234 | if (transientValues.isValueTransient(semanticObject, CftLanguagePackage.Literals.EVENT_REFERENCE__EVENT) == ValueTransient.YES) | ||
235 | errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, CftLanguagePackage.Literals.EVENT_REFERENCE__EVENT)); | ||
236 | } | ||
237 | SequenceFeeder feeder = createSequencerFeeder(context, semanticObject); | ||
238 | feeder.accept(grammarAccess.getEventReferenceAccess().getComponentVariableValidIdParserRuleCall_0_0_1(), semanticObject.eGet(CftLanguagePackage.Literals.EVENT_REFERENCE__COMPONENT, false)); | ||
239 | feeder.accept(grammarAccess.getEventReferenceAccess().getEventEventDeclarationValidIdParserRuleCall_2_0_1(), semanticObject.eGet(CftLanguagePackage.Literals.EVENT_REFERENCE__EVENT, false)); | ||
240 | feeder.finish(); | ||
241 | } | ||
242 | |||
243 | |||
244 | /** | ||
245 | * Contexts: | ||
246 | * Distribution returns ExponentialDistribution | ||
247 | * ExponentialDistribution returns ExponentialDistribution | ||
248 | * | ||
249 | * Constraint: | ||
250 | * lambda=Double | ||
251 | */ | ||
252 | protected void sequence_ExponentialDistribution(ISerializationContext context, ExponentialDistribution semanticObject) { | ||
253 | if (errorAcceptor != null) { | ||
254 | if (transientValues.isValueTransient(semanticObject, FtPackage.Literals.EXPONENTIAL_DISTRIBUTION__LAMBDA) == ValueTransient.YES) | ||
255 | errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, FtPackage.Literals.EXPONENTIAL_DISTRIBUTION__LAMBDA)); | ||
256 | } | ||
257 | SequenceFeeder feeder = createSequencerFeeder(context, semanticObject); | ||
258 | feeder.accept(grammarAccess.getExponentialDistributionAccess().getLambdaDoubleParserRuleCall_2_0(), semanticObject.getLambda()); | ||
259 | feeder.finish(); | ||
260 | } | ||
261 | |||
262 | |||
263 | /** | ||
264 | * Contexts: | ||
265 | * ImportDeclaration returns ImportDeclaration | ||
266 | * | ||
267 | * Constraint: | ||
268 | * importedNamespace=QualifiedNameWithWildcard | ||
269 | */ | ||
270 | protected void sequence_ImportDeclaration(ISerializationContext context, ImportDeclaration semanticObject) { | ||
271 | if (errorAcceptor != null) { | ||
272 | if (transientValues.isValueTransient(semanticObject, CftLanguagePackage.Literals.IMPORT_DECLARATION__IMPORTED_NAMESPACE) == ValueTransient.YES) | ||
273 | errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, CftLanguagePackage.Literals.IMPORT_DECLARATION__IMPORTED_NAMESPACE)); | ||
274 | } | ||
275 | SequenceFeeder feeder = createSequencerFeeder(context, semanticObject); | ||
276 | feeder.accept(grammarAccess.getImportDeclarationAccess().getImportedNamespaceQualifiedNameWithWildcardParserRuleCall_1_0(), semanticObject.getImportedNamespace()); | ||
277 | feeder.finish(); | ||
278 | } | ||
279 | |||
280 | |||
281 | /** | ||
282 | * Contexts: | ||
283 | * InputEvent returns InputEvent | ||
284 | * | ||
285 | * Constraint: | ||
286 | * (name=ValidId multiple?='[]'?) | ||
287 | */ | ||
288 | protected void sequence_InputEvent(ISerializationContext context, InputEvent semanticObject) { | ||
289 | genericSequencer.createSequence(context, semanticObject); | ||
290 | } | ||
291 | |||
292 | |||
293 | /** | ||
294 | * Contexts: | ||
295 | * EventDefinition returns KOfMGateDefinition | ||
296 | * GateDefinition returns KOfMGateDefinition | ||
297 | * KOfMGateDefinition returns KOfMGateDefinition | ||
298 | * | ||
299 | * Constraint: | ||
300 | * (name=ValidId k=INT (m=INT | m=OF_INT) inputEvents+=[EventDeclaration|ValidId]*) | ||
301 | */ | ||
302 | protected void sequence_KOfMGateDefinition(ISerializationContext context, KOfMGateDefinition semanticObject) { | ||
303 | genericSequencer.createSequence(context, semanticObject); | ||
304 | } | ||
305 | |||
306 | |||
307 | /** | ||
308 | * Contexts: | ||
309 | * LookupDefinition returns LookupDefinition | ||
310 | * Variable returns LookupDefinition | ||
311 | * | ||
312 | * Constraint: | ||
313 | * (mapping=[MappingDefinition|QualifiedName] arguments+=[MappingParameter|ValidId] arguments+=[MappingParameter|ValidId]* name=ValidId) | ||
314 | */ | ||
315 | protected void sequence_LookupDefinition(ISerializationContext context, LookupDefinition semanticObject) { | ||
316 | genericSequencer.createSequence(context, semanticObject); | ||
317 | } | ||
318 | |||
319 | |||
320 | /** | ||
321 | * Contexts: | ||
322 | * MappingDefinition returns MappingDefinition | ||
323 | * | ||
324 | * Constraint: | ||
325 | * ( | ||
326 | * topLevel?='toplevel'? | ||
327 | * pattern=[Pattern|QualifiedName] | ||
328 | * parameters+=MappingParameter | ||
329 | * parameters+=MappingParameter* | ||
330 | * componentInstance=ComponentInstance? | ||
331 | * (lookupDefinitions+=LookupDefinition | assignments+=Assignment)* | ||
332 | * ) | ||
333 | */ | ||
334 | protected void sequence_MappingDefinition(ISerializationContext context, MappingDefinition semanticObject) { | ||
335 | genericSequencer.createSequence(context, semanticObject); | ||
336 | } | ||
337 | |||
338 | |||
339 | /** | ||
340 | * Contexts: | ||
341 | * MappingParameter returns MappingParameter | ||
342 | * | ||
343 | * Constraint: | ||
344 | * name=ValidId | ||
345 | */ | ||
346 | protected void sequence_MappingParameter(ISerializationContext context, MappingParameter semanticObject) { | ||
347 | if (errorAcceptor != null) { | ||
348 | if (transientValues.isValueTransient(semanticObject, CftLanguagePackage.Literals.MAPPING_PARAMETER__NAME) == ValueTransient.YES) | ||
349 | errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, CftLanguagePackage.Literals.MAPPING_PARAMETER__NAME)); | ||
350 | } | ||
351 | SequenceFeeder feeder = createSequencerFeeder(context, semanticObject); | ||
352 | feeder.accept(grammarAccess.getMappingParameterAccess().getNameValidIdParserRuleCall_0(), semanticObject.getName()); | ||
353 | feeder.finish(); | ||
354 | } | ||
355 | |||
356 | |||
357 | /** | ||
358 | * Contexts: | ||
359 | * EventDefinition returns OrGateDefinition | ||
360 | * GateDefinition returns OrGateDefinition | ||
361 | * OrGateDefinition returns OrGateDefinition | ||
362 | * | ||
363 | * Constraint: | ||
364 | * (name=ValidId inputEvents+=[EventDeclaration|ValidId]*) | ||
365 | */ | ||
366 | protected void sequence_OrGateDefinition(ISerializationContext context, OrGateDefinition semanticObject) { | ||
367 | genericSequencer.createSequence(context, semanticObject); | ||
368 | } | ||
369 | |||
370 | |||
371 | /** | ||
372 | * Contexts: | ||
373 | * TransformationDefinition returns TransformationDefinition | ||
374 | * | ||
375 | * Constraint: | ||
376 | * (name=ValidId mappingDefinitions+=MappingDefinition*) | ||
377 | */ | ||
378 | protected void sequence_TransformationDefinition(ISerializationContext context, TransformationDefinition semanticObject) { | ||
379 | genericSequencer.createSequence(context, semanticObject); | ||
380 | } | ||
381 | |||
382 | |||
383 | } | ||