@zenuml/core 2.0.0
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/Integration/vanilla-js/index.html +31 -0
- package/LICENSE +21 -0
- package/README.md +81 -0
- package/README_CN.md +15 -0
- package/antlr/antlr-4.8-complete.jar +0 -0
- package/coverage/clover.xml +6 -0
- package/coverage/coverage-final.json +1 -0
- package/coverage/lcov-report/Interaction.vue.html +532 -0
- package/coverage/lcov-report/Owner.js.html +175 -0
- package/coverage/lcov-report/base.css +224 -0
- package/coverage/lcov-report/block-navigation.js +79 -0
- package/coverage/lcov-report/components/interaction/Interaction.vue.html +544 -0
- package/coverage/lcov-report/components/interaction/index.html +110 -0
- package/coverage/lcov-report/index.html +95 -0
- package/coverage/lcov-report/positioning/david/DavidEisenstat2.ts.html +196 -0
- package/coverage/lcov-report/positioning/david/index.html +110 -0
- package/coverage/lcov-report/prettify.css +1 -0
- package/coverage/lcov-report/prettify.js +2 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +170 -0
- package/coverage/lcov.info +0 -0
- package/cypress/fixtures/example.json +5 -0
- package/cypress/fixtures/profile.json +5 -0
- package/cypress/fixtures/users.json +232 -0
- package/cypress/integration/__image_snapshots__/Smoke test creation #0.png +0 -0
- package/cypress/integration/__image_snapshots__/Smoke test fragment #0.png +0 -0
- package/cypress/integration/__image_snapshots__/Smoke test fragmentIssue #0.png +0 -0
- package/cypress/integration/__image_snapshots__/Smoke test interaction #0.png +0 -0
- package/cypress/integration/__image_snapshots__/Smoke test return #0.png +0 -0
- package/cypress/integration/__image_snapshots__/Smoke test return #1.png +0 -0
- package/cypress/integration/__image_snapshots__/Smoke test should load the home page #0.png +0 -0
- package/cypress/integration/smoke.spec.js +64 -0
- package/cypress/plugins/index.js +30 -0
- package/cypress/support/commands.js +25 -0
- package/cypress/support/index.js +20 -0
- package/cypress/videos/smoke.spec.js.mp4 +0 -0
- package/cypress.json +7 -0
- package/dist/fonts/kalam-v15-latin-300.00bd845e.woff2 +0 -0
- package/dist/fonts/kalam-v15-latin-300.1c36b0ad.woff +0 -0
- package/dist/fonts/kalam-v15-latin-700.2a87f463.woff2 +0 -0
- package/dist/fonts/kalam-v15-latin-700.9ec0bbf1.woff +0 -0
- package/dist/fonts/kalam-v15-latin-regular.4c0c4df4.woff +0 -0
- package/dist/fonts/kalam-v15-latin-regular.e4d4907f.woff2 +0 -0
- package/dist/vue-sequence.css +7 -0
- package/dist/vue-sequence.umd.min.js +12 -0
- package/docs/asciidoc/contributor.adoc +79 -0
- package/docs/asciidoc/create-my-own-theme.adoc +25 -0
- package/docs/asciidoc/images/creation-component.png +0 -0
- package/docs/asciidoc/images/creation-rtl.png +0 -0
- package/docs/asciidoc/images/message-arrow-rtl.png +0 -0
- package/docs/asciidoc/images/occurrence.png +0 -0
- package/docs/asciidoc/images/return-message-conflict.png +0 -0
- package/docs/asciidoc/images/shift-up-half-the-height.png +0 -0
- package/docs/asciidoc/images/vertical-alignment.svg +1 -0
- package/docs/asciidoc/images/vertically-aligning.png +0 -0
- package/docs/asciidoc/index.adoc +277 -0
- package/docs/asciidoc/integration-guide.adoc +121 -0
- package/docs/asciidoc/tutorial.adoc +22 -0
- package/docs/async-vs-sync-parser-rules.md +78 -0
- package/docs/handling-starter.png +0 -0
- package/docs/highlighting-messages.md +47 -0
- package/docs/inherited-vs-provided-from.md +59 -0
- package/docs/invalid-host-header-error.md +20 -0
- package/docs/osx-unsupported-arm64-node12.md +13 -0
- package/docs/participants-function.md +27 -0
- package/docs/responsive-participant-margin.md +52 -0
- package/docs/starter.md +8 -0
- package/docs/testing-minified-lib.md +29 -0
- package/docs/watch.md +1 -0
- package/docs/why-we-publish-embed-view-to-github-pages.md +15 -0
- package/docs/width-translate-and-offsets.md +54 -0
- package/gen/css3.interp +214 -0
- package/gen/css3.tokens +92 -0
- package/gen/css3BaseListener.java +1106 -0
- package/gen/css3BaseVisitor.java +636 -0
- package/gen/css3Lexer.interp +251 -0
- package/gen/css3Lexer.java +672 -0
- package/gen/css3Lexer.tokens +92 -0
- package/gen/css3Listener.java +939 -0
- package/gen/css3Parser.java +8113 -0
- package/gen/css3Visitor.java +566 -0
- package/gen/sequenceLexer.interp +206 -0
- package/gen/sequenceLexer.java +419 -0
- package/gen/sequenceLexer.tokens +104 -0
- package/gen/sequenceParser.interp +180 -0
- package/gen/sequenceParser.java +4659 -0
- package/gen/sequenceParser.tokens +101 -0
- package/gen/sequenceParserBaseListener.java +830 -0
- package/gen/sequenceParserBaseVisitor.java +475 -0
- package/gen/sequenceParserListener.java +703 -0
- package/gen/sequenceParserVisitor.java +425 -0
- package/package.json +133 -0
- package/playground/creation.html +32 -0
- package/playground/message.html +39 -0
- package/tailwind.config.js +15 -0
- package/types/index.d.ts +34 -0
- package/vue.config.spec.js +53 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
What we should be looking at is `statement` which can be one of:
|
|
2
|
+
1. Alt/Par/Opt/Loop
|
|
3
|
+
1. Message
|
|
4
|
+
1. Creation
|
|
5
|
+
|
|
6
|
+
`stat`'s parent is always `block`. `block`'s parent is either `braceBlock`
|
|
7
|
+
or `prog`. If it is `prog` we are looking the `starter`; if it is `braceBlock`,
|
|
8
|
+
we need to find its parent message or creation and get their owners.
|
|
9
|
+
|
|
10
|
+
There are two ways to decide where the message is from.
|
|
11
|
+
One way is to deduce from its parent context - inherited from;
|
|
12
|
+
the other way is to explicitly define it from its own context -
|
|
13
|
+
provided from.
|
|
14
|
+
|
|
15
|
+
## Inherited
|
|
16
|
+
|
|
17
|
+
Sync message
|
|
18
|
+
```
|
|
19
|
+
A.m1 {
|
|
20
|
+
// m2 has an "inherited from" as `A`
|
|
21
|
+
m2
|
|
22
|
+
}
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Async message
|
|
26
|
+
```
|
|
27
|
+
A.m1 {
|
|
28
|
+
// m2 has an "inherited from" as `A`
|
|
29
|
+
B:m2
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Provided
|
|
34
|
+
|
|
35
|
+
Sync message
|
|
36
|
+
```
|
|
37
|
+
A.m1 {
|
|
38
|
+
// m2 has a "provided from" as `B`
|
|
39
|
+
B->C.m2
|
|
40
|
+
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Async message
|
|
45
|
+
```
|
|
46
|
+
A.m1 {
|
|
47
|
+
// m2 has a "provided from" as `B`
|
|
48
|
+
B->C:m2
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
It is allowed to have a `provided from` that equals to its
|
|
53
|
+
`inherited from`.
|
|
54
|
+
|
|
55
|
+
# Discussion
|
|
56
|
+
|
|
57
|
+
By definition, a root method has an `inherited from` as `Starter` or otherwise specified by `@StarterExp()`.
|
|
58
|
+
|
|
59
|
+
`Starter`, unless it is explicitly defined, will not be displayed on the lifeline layer.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Error message: Invalid Host header
|
|
2
|
+
|
|
3
|
+
It appears when we expose http://localhost:8080 as https://air.zenuml.com via Cloudflare
|
|
4
|
+
tunnels. We see this error on Chrome, Safari and Firefox.
|
|
5
|
+
|
|
6
|
+
## Where is this from?
|
|
7
|
+
|
|
8
|
+
It only happens when the site is served via `yarn start` and not when we serve it via
|
|
9
|
+
`http-server dist`. So it is most likely a configuration with the dev server.
|
|
10
|
+
|
|
11
|
+
## Solution
|
|
12
|
+
|
|
13
|
+
According to [this answer on StackOverflow](https://stackoverflow.com/a/43647767/529187),
|
|
14
|
+
we can add the following to `vue.config.js`:
|
|
15
|
+
|
|
16
|
+
```js
|
|
17
|
+
devServer: {
|
|
18
|
+
allowedHosts: ["air.zenuml.com"]
|
|
19
|
+
}
|
|
20
|
+
```
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
Error when running 'yarn build'
|
|
2
|
+
|
|
3
|
+
```shell
|
|
4
|
+
ERROR Failed to compile with 1 error 10:15:37 AM
|
|
5
|
+
|
|
6
|
+
error in ./src/components/theme-blue-river.scss
|
|
7
|
+
|
|
8
|
+
Syntax Error: ModuleError: Module Error (from ./node_modules/sass-loader/dist/cjs.js):
|
|
9
|
+
Missing binding /Users/pengxiao/workspaces/zenuml/vue-sequence/node_modules/node-sass/vendor/darwin-x64-83/binding.node
|
|
10
|
+
Node Sass could not find a binding for your current environment: OS X 64-bit with Node.js 14.x
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Remove 'node_modules' and re-run 'yarn build' under node 14.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Shall `Participants` return with `Starter`?
|
|
2
|
+
|
|
3
|
+
`Participants` function takes a context as an input and returns
|
|
4
|
+
all the participants of this context. It should return the `from`
|
|
5
|
+
not the `Starter` unless `Starter` IS the `from`.
|
|
6
|
+
|
|
7
|
+
If we do include `from` (`Starter` in some cases) in `Participant`
|
|
8
|
+
we have to ensure that they are the first participant, even if it
|
|
9
|
+
is not at the left.
|
|
10
|
+
|
|
11
|
+
Currently `LifelineLayer` uses it to get implicitly declared
|
|
12
|
+
participants for the root context; `FragmentXXX` use it to get
|
|
13
|
+
all involved participants of a sub context.
|
|
14
|
+
|
|
15
|
+
Related logic is in `ToCollector`. We can initialise `descendantTos`
|
|
16
|
+
with `from` before `walker.walk`. We need to consider that `from`
|
|
17
|
+
may be included in participant declaration and even in group.
|
|
18
|
+
So `onParticipant` must overwrite that.
|
|
19
|
+
|
|
20
|
+
`context` has the knowledge of `from`. So far we only expose the
|
|
21
|
+
`getInheritedFrom` function. It will be convenient that it returns
|
|
22
|
+
`from` directly.
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
However, we also need the `InheritedFrom` and `ProvidedFrom`
|
|
26
|
+
to calculate the translateX for Interactions.
|
|
27
|
+
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
This is to adjust the margin of the lifelines based on the message length.
|
|
2
|
+
For example, if the message is long, the margin of the lifelines will be increased.
|
|
3
|
+
|
|
4
|
+
A.method() {
|
|
5
|
+
B.aLongMethodName_and_we_want_to_adjust_the_margin_of_the_lifelines_based_on_the_message_length();
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
# Strategy A
|
|
9
|
+
|
|
10
|
+
Step 1. We need to know the width of the method box is shorter than the
|
|
11
|
+
width of the message label. We only need to compare the scrollWidth and the width.
|
|
12
|
+
|
|
13
|
+
# Strategy B
|
|
14
|
+
|
|
15
|
+
Instead of rendering message layer based on lifeline's position, we render
|
|
16
|
+
the lifelines based on message occurrence's positions.
|
|
17
|
+
|
|
18
|
+
There is a problem of this strategy. If we pre-declare the order of the participants,
|
|
19
|
+
for example, `B A A.method()`, we have to render B on the left of A.
|
|
20
|
+
|
|
21
|
+
So maybe, we could implement it in two rounds. First, we define the order of participants.
|
|
22
|
+
Then we calculate the position of the lifelines based on the order.
|
|
23
|
+
|
|
24
|
+
Note that `mounted` is only called when we "mount" the element,
|
|
25
|
+
not when we "move" or "relayout" the element.
|
|
26
|
+
|
|
27
|
+
When we change the code, it may NOT trigger mounted. It may not even
|
|
28
|
+
trigger the update of Occurrence.
|
|
29
|
+
|
|
30
|
+
We cannot just clear the stored positions, because we will have no other chance
|
|
31
|
+
to refresh the positions again. So another option is to refresh the positions
|
|
32
|
+
when we after mounted and/or updated MessageLayer.
|
|
33
|
+
|
|
34
|
+
It looks promising now. The current challenge is to render lifelines
|
|
35
|
+
according to the positions of participants. A particularly interesting part
|
|
36
|
+
is participant group. We may need to render it on a different layer.
|
|
37
|
+
|
|
38
|
+
Strategy B relies on the browser's behavior on 'width: auto'. So we need
|
|
39
|
+
to know when we should set it as auto. Pre-assign positions is in conflict
|
|
40
|
+
of this approach, unless we could tell whether it is pre-assigned or not.
|
|
41
|
+
|
|
42
|
+
What if we always set interaction width to auto first and then update according
|
|
43
|
+
to calculated positions?
|
|
44
|
+
|
|
45
|
+
One of the most tricky part is when a message is removed. To make sure we know
|
|
46
|
+
the gap between two participants, we need to know the width of message. However,
|
|
47
|
+
if the message is removed, we need to clear the gap we saved because of this message.
|
|
48
|
+
This is particularly trick because we may not receive a message for it. Vue may not
|
|
49
|
+
destroy the message but just trigger an update and render a different message on it.
|
|
50
|
+
|
|
51
|
+
In the new try, we will try to generate the positions based on antlr root context
|
|
52
|
+
and two width providers - message width provider and participant width provider.
|
package/docs/starter.md
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
There are two ways for the context to get declared Starter:
|
|
2
|
+
1. @Starter(X)
|
|
3
|
+
2. X->A:m or X->A.m
|
|
4
|
+
|
|
5
|
+
As long as the starter's name is not \_STARTER_, it is treated as declared.
|
|
6
|
+
|
|
7
|
+
Then we check whether the Starter is a declared participant by its `explicit`
|
|
8
|
+
field.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
```html
|
|
2
|
+
<meta charset="utf-8">
|
|
3
|
+
<title>vue-sequence demo</title>
|
|
4
|
+
<script src="https://unpkg.com/vue@2.6.12/dist/vue.js"></script>
|
|
5
|
+
<script src="https://unpkg.com/vuex@3.6.2/dist/vuex.js"></script>
|
|
6
|
+
<script src="./vue-sequence.umd.min.js"></script>
|
|
7
|
+
|
|
8
|
+
<link rel="stylesheet" href="./vue-sequence.css">
|
|
9
|
+
|
|
10
|
+
<div id="mounting-point"></div>
|
|
11
|
+
|
|
12
|
+
<script>
|
|
13
|
+
|
|
14
|
+
window.addEventListener("load", function(event) {
|
|
15
|
+
console.log("window loaded");
|
|
16
|
+
Vue.use(Vuex);
|
|
17
|
+
let { SeqDiagram, Store } = window['vue-sequence'];
|
|
18
|
+
let storeConfig = Store();
|
|
19
|
+
storeConfig.state.code = "A.method";
|
|
20
|
+
Vue.component("seq-diagram", SeqDiagram);
|
|
21
|
+
window.app = new Vue({
|
|
22
|
+
el: document.getElementById('mounting-point'),
|
|
23
|
+
store: new Vuex.Store(storeConfig),
|
|
24
|
+
render: (h) => h('seq-diagram')
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
</script>
|
|
28
|
+
|
|
29
|
+
```
|
package/docs/watch.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
watch 'yarn antlr' src/g4
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
We have got two options to host the embed view: on GitHub pages or
|
|
2
|
+
Cloudflare pages (or other third party).
|
|
3
|
+
|
|
4
|
+
The benefit of Cloudflare pages is:
|
|
5
|
+
1. It offers multiple versions. Basically every publish will generate
|
|
6
|
+
a standalone url with current commit hash.
|
|
7
|
+
2. It does not require commit the `dist` folder to the repository.
|
|
8
|
+
|
|
9
|
+
The benefit of using GitHub Pages:
|
|
10
|
+
1. It will definitely be easier to set up for collaborators on GitHub,
|
|
11
|
+
because they do not need a Cloudflare account.
|
|
12
|
+
|
|
13
|
+
Easy collaboration is more important to us, so we will host this on
|
|
14
|
+
GitHub Pages.
|
|
15
|
+
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Interaction width
|
|
2
|
+
|
|
3
|
+
Interaction width, in the most simple scenario, is defined by the distance of two participants -
|
|
4
|
+
`from` and `to`.
|
|
5
|
+
|
|
6
|
+
## Simple case
|
|
7
|
+
### Width
|
|
8
|
+
In the following
|
|
9
|
+
Each '◻' is a pixel
|
|
10
|
+
```
|
|
11
|
+
| A | | B |
|
|
12
|
+
1 2 3 4 5 6 7 8 9 a b c d e f g h
|
|
13
|
+
◻ ◻ ◻ ◻ ◻ ◻ ◻ ◻ ◻ ◻ ◻ ◻ ◻ ◻ ◻ ◻ ◻
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
#### 1. Interaction width
|
|
17
|
+
|
|
18
|
+
Interaction will overlap the left lifeline but not the right.
|
|
19
|
+
A has left as 2, center as 4 and right as 6; B has a/c/e. For Interaction `m2` in (A.m1{B.m2}),
|
|
20
|
+
the width should be 4 to c (inclusive) that is 9 (`c - 4 + 1`). This is `distance(from, to)`.
|
|
21
|
+
|
|
22
|
+
#### 2. Message width
|
|
23
|
+
Message width should be 100% content + interactionBorderWidthx2 - ((OccurrenceWidth - 1)/2)x2 - interactionBorderWidth.
|
|
24
|
+
|
|
25
|
+
### Left
|
|
26
|
+
#### 1. Message left
|
|
27
|
+
```
|
|
28
|
+
100% // content width of interaction
|
|
29
|
+
+ InteractionBorderWidth x 2
|
|
30
|
+
- ((OccurrenceWidth-1)/2) x 2
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
#### 2. Self Occurrence Left
|
|
34
|
+
```
|
|
35
|
+
left: width of InteractionBorderWidth
|
|
36
|
+
```
|
|
37
|
+
### Offset
|
|
38
|
+
There are a few ways to implement offset, we have to combine them.
|
|
39
|
+
|
|
40
|
+
#### 1. Padding of occurance
|
|
41
|
+
> Suppose the width of an occurance is 5 (border width 1x2, content 3)
|
|
42
|
+
|
|
43
|
+
To aligh Occurance's center, we need to set its left. An occurance
|
|
44
|
+
at `left: 100%` will be from c to g. Note that the 100% only consider
|
|
45
|
+
the content width.
|
|
46
|
+
|
|
47
|
+
To align its center to c, we
|
|
48
|
+
have to move back by 3 (`(occuranceWidth-1)/2 - interactionBorderWidth - LifelineWidth`).
|
|
49
|
+
|
|
50
|
+
occurance must have a padding of 1 that is (width - boarder x 2 - 1) / 2.
|
|
51
|
+
|
|
52
|
+
## Self call indent
|
|
53
|
+
|
|
54
|
+
|
package/gen/css3.interp
ADDED
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
token literal names:
|
|
2
|
+
null
|
|
3
|
+
';'
|
|
4
|
+
'('
|
|
5
|
+
':'
|
|
6
|
+
')'
|
|
7
|
+
'{'
|
|
8
|
+
'}'
|
|
9
|
+
'*'
|
|
10
|
+
'|'
|
|
11
|
+
'.'
|
|
12
|
+
'['
|
|
13
|
+
'='
|
|
14
|
+
']'
|
|
15
|
+
'/'
|
|
16
|
+
'_'
|
|
17
|
+
'@'
|
|
18
|
+
null
|
|
19
|
+
null
|
|
20
|
+
'<!--'
|
|
21
|
+
'-->'
|
|
22
|
+
'~='
|
|
23
|
+
'|='
|
|
24
|
+
null
|
|
25
|
+
null
|
|
26
|
+
null
|
|
27
|
+
null
|
|
28
|
+
null
|
|
29
|
+
'@charset '
|
|
30
|
+
null
|
|
31
|
+
null
|
|
32
|
+
null
|
|
33
|
+
null
|
|
34
|
+
null
|
|
35
|
+
null
|
|
36
|
+
null
|
|
37
|
+
null
|
|
38
|
+
null
|
|
39
|
+
'+'
|
|
40
|
+
'-'
|
|
41
|
+
'>'
|
|
42
|
+
','
|
|
43
|
+
'~'
|
|
44
|
+
null
|
|
45
|
+
null
|
|
46
|
+
null
|
|
47
|
+
'^='
|
|
48
|
+
'$='
|
|
49
|
+
'*='
|
|
50
|
+
null
|
|
51
|
+
null
|
|
52
|
+
null
|
|
53
|
+
null
|
|
54
|
+
null
|
|
55
|
+
null
|
|
56
|
+
'calc('
|
|
57
|
+
null
|
|
58
|
+
null
|
|
59
|
+
null
|
|
60
|
+
null
|
|
61
|
+
null
|
|
62
|
+
'var('
|
|
63
|
+
null
|
|
64
|
+
null
|
|
65
|
+
|
|
66
|
+
token symbolic names:
|
|
67
|
+
null
|
|
68
|
+
null
|
|
69
|
+
null
|
|
70
|
+
null
|
|
71
|
+
null
|
|
72
|
+
null
|
|
73
|
+
null
|
|
74
|
+
null
|
|
75
|
+
null
|
|
76
|
+
null
|
|
77
|
+
null
|
|
78
|
+
null
|
|
79
|
+
null
|
|
80
|
+
null
|
|
81
|
+
null
|
|
82
|
+
null
|
|
83
|
+
Comment
|
|
84
|
+
Space
|
|
85
|
+
Cdo
|
|
86
|
+
Cdc
|
|
87
|
+
Includes
|
|
88
|
+
DashMatch
|
|
89
|
+
Hash
|
|
90
|
+
Import
|
|
91
|
+
Page
|
|
92
|
+
Media
|
|
93
|
+
Namespace
|
|
94
|
+
Charset
|
|
95
|
+
Important
|
|
96
|
+
Percentage
|
|
97
|
+
Uri
|
|
98
|
+
UnicodeRange
|
|
99
|
+
MediaOnly
|
|
100
|
+
Not
|
|
101
|
+
And
|
|
102
|
+
Dimension
|
|
103
|
+
UnknownDimension
|
|
104
|
+
Plus
|
|
105
|
+
Minus
|
|
106
|
+
Greater
|
|
107
|
+
Comma
|
|
108
|
+
Tilde
|
|
109
|
+
PseudoNot
|
|
110
|
+
Number
|
|
111
|
+
String_
|
|
112
|
+
PrefixMatch
|
|
113
|
+
SuffixMatch
|
|
114
|
+
SubstringMatch
|
|
115
|
+
FontFace
|
|
116
|
+
Supports
|
|
117
|
+
Or
|
|
118
|
+
Keyframes
|
|
119
|
+
From
|
|
120
|
+
To
|
|
121
|
+
Calc
|
|
122
|
+
Viewport
|
|
123
|
+
CounterStyle
|
|
124
|
+
FontFeatureValues
|
|
125
|
+
DxImageTransform
|
|
126
|
+
Variable
|
|
127
|
+
Var
|
|
128
|
+
Ident
|
|
129
|
+
Function_
|
|
130
|
+
|
|
131
|
+
rule names:
|
|
132
|
+
stylesheet
|
|
133
|
+
charset
|
|
134
|
+
imports
|
|
135
|
+
namespace_
|
|
136
|
+
namespacePrefix
|
|
137
|
+
media
|
|
138
|
+
mediaQueryList
|
|
139
|
+
mediaQuery
|
|
140
|
+
mediaType
|
|
141
|
+
mediaExpression
|
|
142
|
+
mediaFeature
|
|
143
|
+
page
|
|
144
|
+
pseudoPage
|
|
145
|
+
selectorGroup
|
|
146
|
+
selector
|
|
147
|
+
combinator
|
|
148
|
+
simpleSelectorSequence
|
|
149
|
+
typeSelector
|
|
150
|
+
typeNamespacePrefix
|
|
151
|
+
elementName
|
|
152
|
+
universal
|
|
153
|
+
className
|
|
154
|
+
attrib
|
|
155
|
+
pseudo
|
|
156
|
+
functionalPseudo
|
|
157
|
+
expression
|
|
158
|
+
negation
|
|
159
|
+
negationArg
|
|
160
|
+
operator_
|
|
161
|
+
property_
|
|
162
|
+
ruleset
|
|
163
|
+
declarationList
|
|
164
|
+
declaration
|
|
165
|
+
prio
|
|
166
|
+
value
|
|
167
|
+
expr
|
|
168
|
+
term
|
|
169
|
+
function_
|
|
170
|
+
dxImageTransform
|
|
171
|
+
hexcolor
|
|
172
|
+
number
|
|
173
|
+
percentage
|
|
174
|
+
dimension
|
|
175
|
+
unknownDimension
|
|
176
|
+
any_
|
|
177
|
+
atRule
|
|
178
|
+
atKeyword
|
|
179
|
+
unused
|
|
180
|
+
block
|
|
181
|
+
nestedStatement
|
|
182
|
+
groupRuleBody
|
|
183
|
+
supportsRule
|
|
184
|
+
supportsCondition
|
|
185
|
+
supportsConditionInParens
|
|
186
|
+
supportsNegation
|
|
187
|
+
supportsConjunction
|
|
188
|
+
supportsDisjunction
|
|
189
|
+
supportsDeclarationCondition
|
|
190
|
+
generalEnclosed
|
|
191
|
+
var_
|
|
192
|
+
calc
|
|
193
|
+
calcSum
|
|
194
|
+
calcProduct
|
|
195
|
+
calcValue
|
|
196
|
+
fontFaceRule
|
|
197
|
+
fontFaceDeclaration
|
|
198
|
+
keyframesRule
|
|
199
|
+
keyframesBlocks
|
|
200
|
+
keyframeSelector
|
|
201
|
+
viewport
|
|
202
|
+
counterStyle
|
|
203
|
+
fontFeatureValuesRule
|
|
204
|
+
fontFamilyNameList
|
|
205
|
+
fontFamilyName
|
|
206
|
+
featureValueBlock
|
|
207
|
+
featureType
|
|
208
|
+
featureValueDefinition
|
|
209
|
+
ident
|
|
210
|
+
ws
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
atn:
|
|
214
|
+
[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 64, 1114, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 3, 2, 3, 2, 3, 2, 7, 2, 164, 10, 2, 12, 2, 14, 2, 167, 11, 2, 7, 2, 169, 10, 2, 12, 2, 14, 2, 172, 11, 2, 3, 2, 3, 2, 7, 2, 176, 10, 2, 12, 2, 14, 2, 179, 11, 2, 7, 2, 181, 10, 2, 12, 2, 14, 2, 184, 11, 2, 3, 2, 3, 2, 7, 2, 188, 10, 2, 12, 2, 14, 2, 191, 11, 2, 7, 2, 193, 10, 2, 12, 2, 14, 2, 196, 11, 2, 3, 2, 3, 2, 7, 2, 200, 10, 2, 12, 2, 14, 2, 203, 11, 2, 7, 2, 205, 10, 2, 12, 2, 14, 2, 208, 11, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 222, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 250, 10, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 257, 10, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 269, 10, 5, 3, 5, 3, 5, 3, 5, 5, 5, 274, 10, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 289, 10, 8, 12, 8, 14, 8, 292, 11, 8, 5, 8, 294, 10, 8, 3, 8, 3, 8, 3, 9, 5, 9, 299, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 308, 10, 9, 12, 9, 14, 9, 311, 11, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 318, 10, 9, 12, 9, 14, 9, 321, 11, 9, 5, 9, 323, 10, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 334, 10, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 5, 13, 345, 10, 13, 3, 13, 3, 13, 3, 13, 5, 13, 350, 10, 13, 3, 13, 3, 13, 3, 13, 5, 13, 355, 10, 13, 7, 13, 357, 10, 13, 12, 13, 14, 13, 360, 11, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 7, 15, 374, 10, 15, 12, 15, 14, 15, 377, 11, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 7, 16, 385, 10, 16, 12, 16, 14, 16, 388, 11, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 5, 17, 398, 10, 17, 3, 18, 3, 18, 5, 18, 402, 10, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 7, 18, 409, 10, 18, 12, 18, 14, 18, 412, 11, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 6, 18, 419, 10, 18, 13, 18, 14, 18, 420, 5, 18, 423, 10, 18, 3, 19, 5, 19, 426, 10, 19, 3, 19, 3, 19, 3, 20, 3, 20, 5, 20, 432, 10, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 22, 5, 22, 439, 10, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 5, 24, 449, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 5, 24, 457, 10, 24, 3, 24, 3, 24, 5, 24, 461, 10, 24, 3, 24, 3, 24, 3, 25, 3, 25, 5, 25, 467, 10, 25, 3, 25, 3, 25, 5, 25, 471, 10, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 5, 27, 485, 10, 27, 3, 27, 6, 27, 488, 10, 27, 13, 27, 14, 27, 489, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 5, 29, 504, 10, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 514, 10, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 5, 31, 525, 10, 31, 3, 32, 3, 32, 3, 32, 3, 32, 5, 32, 531, 10, 32, 3, 32, 3, 32, 3, 32, 3, 32, 7, 32, 537, 10, 32, 12, 32, 14, 32, 540, 11, 32, 3, 32, 3, 32, 3, 32, 5, 32, 545, 10, 32, 3, 32, 3, 32, 3, 32, 5, 32, 550, 10, 32, 3, 33, 3, 33, 7, 33, 554, 10, 33, 12, 33, 14, 33, 557, 11, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 5, 33, 564, 10, 33, 7, 33, 566, 10, 33, 12, 33, 14, 33, 569, 11, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 576, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 583, 10, 34, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 6, 36, 593, 10, 36, 13, 36, 14, 36, 594, 3, 37, 3, 37, 5, 37, 599, 10, 37, 3, 37, 7, 37, 602, 10, 37, 12, 37, 14, 37, 605, 11, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 5, 38, 633, 10, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 42, 5, 42, 651, 10, 42, 3, 42, 3, 42, 3, 43, 5, 43, 656, 10, 43, 3, 43, 3, 43, 3, 44, 5, 44, 661, 10, 44, 3, 44, 3, 44, 3, 45, 5, 45, 666, 10, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 7, 46, 703, 10, 46, 12, 46, 14, 46, 706, 11, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 7, 46, 715, 10, 46, 12, 46, 14, 46, 718, 11, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 7, 46, 727, 10, 46, 12, 46, 14, 46, 730, 11, 46, 3, 46, 3, 46, 3, 46, 5, 46, 735, 10, 46, 3, 47, 3, 47, 3, 47, 7, 47, 740, 10, 47, 12, 47, 14, 47, 743, 11, 47, 3, 47, 3, 47, 3, 47, 5, 47, 748, 10, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 5, 49, 763, 10, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 7, 50, 776, 10, 50, 12, 50, 14, 50, 779, 11, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 5, 51, 794, 10, 51, 3, 52, 3, 52, 3, 52, 7, 52, 799, 10, 52, 12, 52, 14, 52, 802, 11, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 5, 54, 817, 10, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 827, 10, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 6, 57, 845, 10, 57, 13, 57, 14, 57, 846, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 6, 58, 859, 10, 58, 13, 58, 14, 58, 860, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 7, 60, 871, 10, 60, 12, 60, 14, 60, 874, 11, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 7, 63, 900, 10, 63, 12, 63, 14, 63, 903, 11, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 7, 64, 915, 10, 64, 12, 64, 14, 64, 918, 11, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 5, 65, 938, 10, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 5, 66, 945, 10, 66, 3, 66, 3, 66, 3, 66, 5, 66, 950, 10, 66, 7, 66, 952, 10, 66, 12, 66, 14, 66, 955, 11, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 5, 67, 970, 10, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 5, 69, 988, 10, 69, 3, 69, 3, 69, 3, 69, 7, 69, 993, 10, 69, 12, 69, 14, 69, 996, 11, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 7, 70, 1005, 10, 70, 12, 70, 14, 70, 1008, 11, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 5, 71, 1015, 10, 71, 3, 71, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 5, 72, 1027, 10, 72, 3, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 7, 73, 1039, 10, 73, 12, 73, 14, 73, 1042, 11, 73, 3, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 7, 74, 1053, 10, 74, 12, 74, 14, 74, 1056, 11, 74, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 7, 75, 1063, 10, 75, 12, 75, 14, 75, 1066, 11, 75, 5, 75, 1068, 10, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 5, 76, 1075, 10, 76, 3, 76, 3, 76, 3, 76, 3, 76, 5, 76, 1081, 10, 76, 7, 76, 1083, 10, 76, 12, 76, 14, 76, 1086, 11, 76, 3, 76, 3, 76, 3, 76, 3, 77, 3, 77, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 7, 78, 1101, 10, 78, 12, 78, 14, 78, 1104, 11, 78, 3, 79, 3, 79, 3, 80, 7, 80, 1109, 10, 80, 12, 80, 14, 80, 1112, 11, 80, 3, 80, 2, 2, 81, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 2, 11, 3, 2, 18, 21, 4, 2, 32, 32, 46, 46, 3, 2, 34, 35, 5, 2, 13, 13, 22, 23, 47, 49, 3, 2, 39, 40, 4, 2, 4, 4, 64, 64, 4, 2, 31, 31, 54, 55, 6, 2, 34, 36, 52, 52, 54, 55, 63, 63, 3, 2, 18, 19, 2, 1210, 2, 160, 3, 2, 2, 2, 4, 221, 3, 2, 2, 2, 6, 249, 3, 2, 2, 2, 8, 273, 3, 2, 2, 2, 10, 275, 3, 2, 2, 2, 12, 277, 3, 2, 2, 2, 14, 293, 3, 2, 2, 2, 16, 322, 3, 2, 2, 2, 18, 324, 3, 2, 2, 2, 20, 326, 3, 2, 2, 2, 22, 338, 3, 2, 2, 2, 24, 341, 3, 2, 2, 2, 26, 364, 3, 2, 2, 2, 28, 368, 3, 2, 2, 2, 30, 378, 3, 2, 2, 2, 32, 397, 3, 2, 2, 2, 34, 422, 3, 2, 2, 2, 36, 425, 3, 2, 2, 2, 38, 431, 3, 2, 2, 2, 40, 435, 3, 2, 2, 2, 42, 438, 3, 2, 2, 2, 44, 442, 3, 2, 2, 2, 46, 445, 3, 2, 2, 2, 48, 464, 3, 2, 2, 2, 50, 472, 3, 2, 2, 2, 52, 487, 3, 2, 2, 2, 54, 491, 3, 2, 2, 2, 56, 503, 3, 2, 2, 2, 58, 513, 3, 2, 2, 2, 60, 524, 3, 2, 2, 2, 62, 549, 3, 2, 2, 2, 64, 555, 3, 2, 2, 2, 66, 582, 3, 2, 2, 2, 68, 584, 3, 2, 2, 2, 70, 592, 3, 2, 2, 2, 72, 596, 3, 2, 2, 2, 74, 632, 3, 2, 2, 2, 76, 634, 3, 2, 2, 2, 78, 640, 3, 2, 2, 2, 80, 646, 3, 2, 2, 2, 82, 650, 3, 2, 2, 2, 84, 655, 3, 2, 2, 2, 86, 660, 3, 2, 2, 2, 88, 665, 3, 2, 2, 2, 90, 734, 3, 2, 2, 2, 92, 736, 3, 2, 2, 2, 94, 749, 3, 2, 2, 2, 96, 762, 3, 2, 2, 2, 98, 764, 3, 2, 2, 2, 100, 793, 3, 2, 2, 2, 102, 795, 3, 2, 2, 2, 104, 806, 3, 2, 2, 2, 106, 816, 3, 2, 2, 2, 108, 826, 3, 2, 2, 2, 110, 828, 3, 2, 2, 2, 112, 834, 3, 2, 2, 2, 114, 848, 3, 2, 2, 2, 116, 862, 3, 2, 2, 2, 118, 867, 3, 2, 2, 2, 120, 877, 3, 2, 2, 2, 122, 884, 3, 2, 2, 2, 124, 890, 3, 2, 2, 2, 126, 904, 3, 2, 2, 2, 128, 937, 3, 2, 2, 2, 130, 939, 3, 2, 2, 2, 132, 969, 3, 2, 2, 2, 134, 971, 3, 2, 2, 2, 136, 994, 3, 2, 2, 2, 138, 997, 3, 2, 2, 2, 140, 1009, 3, 2, 2, 2, 142, 1019, 3, 2, 2, 2, 144, 1031, 3, 2, 2, 2, 146, 1046, 3, 2, 2, 2, 148, 1067, 3, 2, 2, 2, 150, 1069, 3, 2, 2, 2, 152, 1090, 3, 2, 2, 2, 154, 1092, 3, 2, 2, 2, 156, 1105, 3, 2, 2, 2, 158, 1110, 3, 2, 2, 2, 160, 170, 5, 158, 80, 2, 161, 165, 5, 4, 3, 2, 162, 164, 9, 2, 2, 2, 163, 162, 3, 2, 2, 2, 164, 167, 3, 2, 2, 2, 165, 163, 3, 2, 2, 2, 165, 166, 3, 2, 2, 2, 166, 169, 3, 2, 2, 2, 167, 165, 3, 2, 2, 2, 168, 161, 3, 2, 2, 2, 169, 172, 3, 2, 2, 2, 170, 168, 3, 2, 2, 2, 170, 171, 3, 2, 2, 2, 171, 182, 3, 2, 2, 2, 172, 170, 3, 2, 2, 2, 173, 177, 5, 6, 4, 2, 174, 176, 9, 2, 2, 2, 175, 174, 3, 2, 2, 2, 176, 179, 3, 2, 2, 2, 177, 175, 3, 2, 2, 2, 177, 178, 3, 2, 2, 2, 178, 181, 3, 2, 2, 2, 179, 177, 3, 2, 2, 2, 180, 173, 3, 2, 2, 2, 181, 184, 3, 2, 2, 2, 182, 180, 3, 2, 2, 2, 182, 183, 3, 2, 2, 2, 183, 194, 3, 2, 2, 2, 184, 182, 3, 2, 2, 2, 185, 189, 5, 8, 5, 2, 186, 188, 9, 2, 2, 2, 187, 186, 3, 2, 2, 2, 188, 191, 3, 2, 2, 2, 189, 187, 3, 2, 2, 2, 189, 190, 3, 2, 2, 2, 190, 193, 3, 2, 2, 2, 191, 189, 3, 2, 2, 2, 192, 185, 3, 2, 2, 2, 193, 196, 3, 2, 2, 2, 194, 192, 3, 2, 2, 2, 194, 195, 3, 2, 2, 2, 195, 206, 3, 2, 2, 2, 196, 194, 3, 2, 2, 2, 197, 201, 5, 100, 51, 2, 198, 200, 9, 2, 2, 2, 199, 198, 3, 2, 2, 2, 200, 203, 3, 2, 2, 2, 201, 199, 3, 2, 2, 2, 201, 202, 3, 2, 2, 2, 202, 205, 3, 2, 2, 2, 203, 201, 3, 2, 2, 2, 204, 197, 3, 2, 2, 2, 205, 208, 3, 2, 2, 2, 206, 204, 3, 2, 2, 2, 206, 207, 3, 2, 2, 2, 207, 3, 3, 2, 2, 2, 208, 206, 3, 2, 2, 2, 209, 210, 7, 29, 2, 2, 210, 211, 5, 158, 80, 2, 211, 212, 7, 46, 2, 2, 212, 213, 5, 158, 80, 2, 213, 214, 7, 3, 2, 2, 214, 215, 5, 158, 80, 2, 215, 222, 3, 2, 2, 2, 216, 217, 7, 29, 2, 2, 217, 218, 5, 158, 80, 2, 218, 219, 7, 46, 2, 2, 219, 220, 5, 158, 80, 2, 220, 222, 3, 2, 2, 2, 221, 209, 3, 2, 2, 2, 221, 216, 3, 2, 2, 2, 222, 5, 3, 2, 2, 2, 223, 224, 7, 25, 2, 2, 224, 225, 5, 158, 80, 2, 225, 226, 9, 3, 2, 2, 226, 227, 5, 158, 80, 2, 227, 228, 5, 14, 8, 2, 228, 229, 7, 3, 2, 2, 229, 230, 5, 158, 80, 2, 230, 250, 3, 2, 2, 2, 231, 232, 7, 25, 2, 2, 232, 233, 5, 158, 80, 2, 233, 234, 9, 3, 2, 2, 234, 235, 5, 158, 80, 2, 235, 236, 7, 3, 2, 2, 236, 237, 5, 158, 80, 2, 237, 250, 3, 2, 2, 2, 238, 239, 7, 25, 2, 2, 239, 240, 5, 158, 80, 2, 240, 241, 9, 3, 2, 2, 241, 242, 5, 158, 80, 2, 242, 243, 5, 14, 8, 2, 243, 250, 3, 2, 2, 2, 244, 245, 7, 25, 2, 2, 245, 246, 5, 158, 80, 2, 246, 247, 9, 3, 2, 2, 247, 248, 5, 158, 80, 2, 248, 250, 3, 2, 2, 2, 249, 223, 3, 2, 2, 2, 249, 231, 3, 2, 2, 2, 249, 238, 3, 2, 2, 2, 249, 244, 3, 2, 2, 2, 250, 7, 3, 2, 2, 2, 251, 252, 7, 28, 2, 2, 252, 256, 5, 158, 80, 2, 253, 254, 5, 10, 6, 2, 254, 255, 5, 158, 80, 2, 255, 257, 3, 2, 2, 2, 256, 253, 3, 2, 2, 2, 256, 257, 3, 2, 2, 2, 257, 258, 3, 2, 2, 2, 258, 259, 9, 3, 2, 2, 259, 260, 5, 158, 80, 2, 260, 261, 7, 3, 2, 2, 261, 262, 5, 158, 80, 2, 262, 274, 3, 2, 2, 2, 263, 264, 7, 28, 2, 2, 264, 268, 5, 158, 80, 2, 265, 266, 5, 10, 6, 2, 266, 267, 5, 158, 80, 2, 267, 269, 3, 2, 2, 2, 268, 265, 3, 2, 2, 2, 268, 269, 3, 2, 2, 2, 269, 270, 3, 2, 2, 2, 270, 271, 9, 3, 2, 2, 271, 272, 5, 158, 80, 2, 272, 274, 3, 2, 2, 2, 273, 251, 3, 2, 2, 2, 273, 263, 3, 2, 2, 2, 274, 9, 3, 2, 2, 2, 275, 276, 5, 156, 79, 2, 276, 11, 3, 2, 2, 2, 277, 278, 7, 27, 2, 2, 278, 279, 5, 158, 80, 2, 279, 280, 5, 14, 8, 2, 280, 281, 5, 102, 52, 2, 281, 282, 5, 158, 80, 2, 282, 13, 3, 2, 2, 2, 283, 290, 5, 16, 9, 2, 284, 285, 7, 42, 2, 2, 285, 286, 5, 158, 80, 2, 286, 287, 5, 16, 9, 2, 287, 289, 3, 2, 2, 2, 288, 284, 3, 2, 2, 2, 289, 292, 3, 2, 2, 2, 290, 288, 3, 2, 2, 2, 290, 291, 3, 2, 2, 2, 291, 294, 3, 2, 2, 2, 292, 290, 3, 2, 2, 2, 293, 283, 3, 2, 2, 2, 293, 294, 3, 2, 2, 2, 294, 295, 3, 2, 2, 2, 295, 296, 5, 158, 80, 2, 296, 15, 3, 2, 2, 2, 297, 299, 9, 4, 2, 2, 298, 297, 3, 2, 2, 2, 298, 299, 3, 2, 2, 2, 299, 300, 3, 2, 2, 2, 300, 301, 5, 158, 80, 2, 301, 302, 5, 18, 10, 2, 302, 309, 5, 158, 80, 2, 303, 304, 7, 36, 2, 2, 304, 305, 5, 158, 80, 2, 305, 306, 5, 20, 11, 2, 306, 308, 3, 2, 2, 2, 307, 303, 3, 2, 2, 2, 308, 311, 3, 2, 2, 2, 309, 307, 3, 2, 2, 2, 309, 310, 3, 2, 2, 2, 310, 323, 3, 2, 2, 2, 311, 309, 3, 2, 2, 2, 312, 319, 5, 20, 11, 2, 313, 314, 7, 36, 2, 2, 314, 315, 5, 158, 80, 2, 315, 316, 5, 20, 11, 2, 316, 318, 3, 2, 2, 2, 317, 313, 3, 2, 2, 2, 318, 321, 3, 2, 2, 2, 319, 317, 3, 2, 2, 2, 319, 320, 3, 2, 2, 2, 320, 323, 3, 2, 2, 2, 321, 319, 3, 2, 2, 2, 322, 298, 3, 2, 2, 2, 322, 312, 3, 2, 2, 2, 323, 17, 3, 2, 2, 2, 324, 325, 5, 156, 79, 2, 325, 19, 3, 2, 2, 2, 326, 327, 7, 4, 2, 2, 327, 328, 5, 158, 80, 2, 328, 333, 5, 22, 12, 2, 329, 330, 7, 5, 2, 2, 330, 331, 5, 158, 80, 2, 331, 332, 5, 72, 37, 2, 332, 334, 3, 2, 2, 2, 333, 329, 3, 2, 2, 2, 333, 334, 3, 2, 2, 2, 334, 335, 3, 2, 2, 2, 335, 336, 7, 6, 2, 2, 336, 337, 5, 158, 80, 2, 337, 21, 3, 2, 2, 2, 338, 339, 5, 156, 79, 2, 339, 340, 5, 158, 80, 2, 340, 23, 3, 2, 2, 2, 341, 342, 7, 26, 2, 2, 342, 344, 5, 158, 80, 2, 343, 345, 5, 26, 14, 2, 344, 343, 3, 2, 2, 2, 344, 345, 3, 2, 2, 2, 345, 346, 3, 2, 2, 2, 346, 347, 7, 7, 2, 2, 347, 349, 5, 158, 80, 2, 348, 350, 5, 66, 34, 2, 349, 348, 3, 2, 2, 2, 349, 350, 3, 2, 2, 2, 350, 358, 3, 2, 2, 2, 351, 352, 7, 3, 2, 2, 352, 354, 5, 158, 80, 2, 353, 355, 5, 66, 34, 2, 354, 353, 3, 2, 2, 2, 354, 355, 3, 2, 2, 2, 355, 357, 3, 2, 2, 2, 356, 351, 3, 2, 2, 2, 357, 360, 3, 2, 2, 2, 358, 356, 3, 2, 2, 2, 358, 359, 3, 2, 2, 2, 359, 361, 3, 2, 2, 2, 360, 358, 3, 2, 2, 2, 361, 362, 7, 8, 2, 2, 362, 363, 5, 158, 80, 2, 363, 25, 3, 2, 2, 2, 364, 365, 7, 5, 2, 2, 365, 366, 5, 156, 79, 2, 366, 367, 5, 158, 80, 2, 367, 27, 3, 2, 2, 2, 368, 375, 5, 30, 16, 2, 369, 370, 7, 42, 2, 2, 370, 371, 5, 158, 80, 2, 371, 372, 5, 30, 16, 2, 372, 374, 3, 2, 2, 2, 373, 369, 3, 2, 2, 2, 374, 377, 3, 2, 2, 2, 375, 373, 3, 2, 2, 2, 375, 376, 3, 2, 2, 2, 376, 29, 3, 2, 2, 2, 377, 375, 3, 2, 2, 2, 378, 379, 5, 34, 18, 2, 379, 386, 5, 158, 80, 2, 380, 381, 5, 32, 17, 2, 381, 382, 5, 34, 18, 2, 382, 383, 5, 158, 80, 2, 383, 385, 3, 2, 2, 2, 384, 380, 3, 2, 2, 2, 385, 388, 3, 2, 2, 2, 386, 384, 3, 2, 2, 2, 386, 387, 3, 2, 2, 2, 387, 31, 3, 2, 2, 2, 388, 386, 3, 2, 2, 2, 389, 390, 7, 39, 2, 2, 390, 398, 5, 158, 80, 2, 391, 392, 7, 41, 2, 2, 392, 398, 5, 158, 80, 2, 393, 394, 7, 43, 2, 2, 394, 398, 5, 158, 80, 2, 395, 396, 7, 19, 2, 2, 396, 398, 5, 158, 80, 2, 397, 389, 3, 2, 2, 2, 397, 391, 3, 2, 2, 2, 397, 393, 3, 2, 2, 2, 397, 395, 3, 2, 2, 2, 398, 33, 3, 2, 2, 2, 399, 402, 5, 36, 19, 2, 400, 402, 5, 42, 22, 2, 401, 399, 3, 2, 2, 2, 401, 400, 3, 2, 2, 2, 402, 410, 3, 2, 2, 2, 403, 409, 7, 24, 2, 2, 404, 409, 5, 44, 23, 2, 405, 409, 5, 46, 24, 2, 406, 409, 5, 48, 25, 2, 407, 409, 5, 54, 28, 2, 408, 403, 3, 2, 2, 2, 408, 404, 3, 2, 2, 2, 408, 405, 3, 2, 2, 2, 408, 406, 3, 2, 2, 2, 408, 407, 3, 2, 2, 2, 409, 412, 3, 2, 2, 2, 410, 408, 3, 2, 2, 2, 410, 411, 3, 2, 2, 2, 411, 423, 3, 2, 2, 2, 412, 410, 3, 2, 2, 2, 413, 419, 7, 24, 2, 2, 414, 419, 5, 44, 23, 2, 415, 419, 5, 46, 24, 2, 416, 419, 5, 48, 25, 2, 417, 419, 5, 54, 28, 2, 418, 413, 3, 2, 2, 2, 418, 414, 3, 2, 2, 2, 418, 415, 3, 2, 2, 2, 418, 416, 3, 2, 2, 2, 418, 417, 3, 2, 2, 2, 419, 420, 3, 2, 2, 2, 420, 418, 3, 2, 2, 2, 420, 421, 3, 2, 2, 2, 421, 423, 3, 2, 2, 2, 422, 401, 3, 2, 2, 2, 422, 418, 3, 2, 2, 2, 423, 35, 3, 2, 2, 2, 424, 426, 5, 38, 20, 2, 425, 424, 3, 2, 2, 2, 425, 426, 3, 2, 2, 2, 426, 427, 3, 2, 2, 2, 427, 428, 5, 40, 21, 2, 428, 37, 3, 2, 2, 2, 429, 432, 5, 156, 79, 2, 430, 432, 7, 9, 2, 2, 431, 429, 3, 2, 2, 2, 431, 430, 3, 2, 2, 2, 431, 432, 3, 2, 2, 2, 432, 433, 3, 2, 2, 2, 433, 434, 7, 10, 2, 2, 434, 39, 3, 2, 2, 2, 435, 436, 5, 156, 79, 2, 436, 41, 3, 2, 2, 2, 437, 439, 5, 38, 20, 2, 438, 437, 3, 2, 2, 2, 438, 439, 3, 2, 2, 2, 439, 440, 3, 2, 2, 2, 440, 441, 7, 9, 2, 2, 441, 43, 3, 2, 2, 2, 442, 443, 7, 11, 2, 2, 443, 444, 5, 156, 79, 2, 444, 45, 3, 2, 2, 2, 445, 446, 7, 12, 2, 2, 446, 448, 5, 158, 80, 2, 447, 449, 5, 38, 20, 2, 448, 447, 3, 2, 2, 2, 448, 449, 3, 2, 2, 2, 449, 450, 3, 2, 2, 2, 450, 451, 5, 156, 79, 2, 451, 460, 5, 158, 80, 2, 452, 453, 9, 5, 2, 2, 453, 456, 5, 158, 80, 2, 454, 457, 5, 156, 79, 2, 455, 457, 7, 46, 2, 2, 456, 454, 3, 2, 2, 2, 456, 455, 3, 2, 2, 2, 457, 458, 3, 2, 2, 2, 458, 459, 5, 158, 80, 2, 459, 461, 3, 2, 2, 2, 460, 452, 3, 2, 2, 2, 460, 461, 3, 2, 2, 2, 461, 462, 3, 2, 2, 2, 462, 463, 7, 14, 2, 2, 463, 47, 3, 2, 2, 2, 464, 466, 7, 5, 2, 2, 465, 467, 7, 5, 2, 2, 466, 465, 3, 2, 2, 2, 466, 467, 3, 2, 2, 2, 467, 470, 3, 2, 2, 2, 468, 471, 5, 156, 79, 2, 469, 471, 5, 50, 26, 2, 470, 468, 3, 2, 2, 2, 470, 469, 3, 2, 2, 2, 471, 49, 3, 2, 2, 2, 472, 473, 7, 64, 2, 2, 473, 474, 5, 158, 80, 2, 474, 475, 5, 52, 27, 2, 475, 476, 7, 6, 2, 2, 476, 51, 3, 2, 2, 2, 477, 485, 7, 39, 2, 2, 478, 485, 7, 40, 2, 2, 479, 485, 7, 37, 2, 2, 480, 485, 7, 38, 2, 2, 481, 485, 7, 45, 2, 2, 482, 485, 7, 46, 2, 2, 483, 485, 5, 156, 79, 2, 484, 477, 3, 2, 2, 2, 484, 478, 3, 2, 2, 2, 484, 479, 3, 2, 2, 2, 484, 480, 3, 2, 2, 2, 484, 481, 3, 2, 2, 2, 484, 482, 3, 2, 2, 2, 484, 483, 3, 2, 2, 2, 485, 486, 3, 2, 2, 2, 486, 488, 5, 158, 80, 2, 487, 484, 3, 2, 2, 2, 488, 489, 3, 2, 2, 2, 489, 487, 3, 2, 2, 2, 489, 490, 3, 2, 2, 2, 490, 53, 3, 2, 2, 2, 491, 492, 7, 44, 2, 2, 492, 493, 5, 158, 80, 2, 493, 494, 5, 56, 29, 2, 494, 495, 5, 158, 80, 2, 495, 496, 7, 6, 2, 2, 496, 55, 3, 2, 2, 2, 497, 504, 5, 36, 19, 2, 498, 504, 5, 42, 22, 2, 499, 504, 7, 24, 2, 2, 500, 504, 5, 44, 23, 2, 501, 504, 5, 46, 24, 2, 502, 504, 5, 48, 25, 2, 503, 497, 3, 2, 2, 2, 503, 498, 3, 2, 2, 2, 503, 499, 3, 2, 2, 2, 503, 500, 3, 2, 2, 2, 503, 501, 3, 2, 2, 2, 503, 502, 3, 2, 2, 2, 504, 57, 3, 2, 2, 2, 505, 506, 7, 15, 2, 2, 506, 514, 5, 158, 80, 2, 507, 508, 7, 42, 2, 2, 508, 514, 5, 158, 80, 2, 509, 510, 7, 19, 2, 2, 510, 514, 5, 158, 80, 2, 511, 512, 7, 13, 2, 2, 512, 514, 5, 158, 80, 2, 513, 505, 3, 2, 2, 2, 513, 507, 3, 2, 2, 2, 513, 509, 3, 2, 2, 2, 513, 511, 3, 2, 2, 2, 514, 59, 3, 2, 2, 2, 515, 516, 5, 156, 79, 2, 516, 517, 5, 158, 80, 2, 517, 525, 3, 2, 2, 2, 518, 519, 7, 61, 2, 2, 519, 525, 5, 158, 80, 2, 520, 521, 7, 9, 2, 2, 521, 525, 5, 156, 79, 2, 522, 523, 7, 16, 2, 2, 523, 525, 5, 156, 79, 2, 524, 515, 3, 2, 2, 2, 524, 518, 3, 2, 2, 2, 524, 520, 3, 2, 2, 2, 524, 522, 3, 2, 2, 2, 525, 61, 3, 2, 2, 2, 526, 527, 5, 28, 15, 2, 527, 528, 7, 7, 2, 2, 528, 530, 5, 158, 80, 2, 529, 531, 5, 64, 33, 2, 530, 529, 3, 2, 2, 2, 530, 531, 3, 2, 2, 2, 531, 532, 3, 2, 2, 2, 532, 533, 7, 8, 2, 2, 533, 534, 5, 158, 80, 2, 534, 550, 3, 2, 2, 2, 535, 537, 5, 90, 46, 2, 536, 535, 3, 2, 2, 2, 537, 540, 3, 2, 2, 2, 538, 536, 3, 2, 2, 2, 538, 539, 3, 2, 2, 2, 539, 541, 3, 2, 2, 2, 540, 538, 3, 2, 2, 2, 541, 542, 7, 7, 2, 2, 542, 544, 5, 158, 80, 2, 543, 545, 5, 64, 33, 2, 544, 543, 3, 2, 2, 2, 544, 545, 3, 2, 2, 2, 545, 546, 3, 2, 2, 2, 546, 547, 7, 8, 2, 2, 547, 548, 5, 158, 80, 2, 548, 550, 3, 2, 2, 2, 549, 526, 3, 2, 2, 2, 549, 538, 3, 2, 2, 2, 550, 63, 3, 2, 2, 2, 551, 552, 7, 3, 2, 2, 552, 554, 5, 158, 80, 2, 553, 551, 3, 2, 2, 2, 554, 557, 3, 2, 2, 2, 555, 553, 3, 2, 2, 2, 555, 556, 3, 2, 2, 2, 556, 558, 3, 2, 2, 2, 557, 555, 3, 2, 2, 2, 558, 559, 5, 66, 34, 2, 559, 567, 5, 158, 80, 2, 560, 561, 7, 3, 2, 2, 561, 563, 5, 158, 80, 2, 562, 564, 5, 66, 34, 2, 563, 562, 3, 2, 2, 2, 563, 564, 3, 2, 2, 2, 564, 566, 3, 2, 2, 2, 565, 560, 3, 2, 2, 2, 566, 569, 3, 2, 2, 2, 567, 565, 3, 2, 2, 2, 567, 568, 3, 2, 2, 2, 568, 65, 3, 2, 2, 2, 569, 567, 3, 2, 2, 2, 570, 571, 5, 60, 31, 2, 571, 572, 7, 5, 2, 2, 572, 573, 5, 158, 80, 2, 573, 575, 5, 72, 37, 2, 574, 576, 5, 68, 35, 2, 575, 574, 3, 2, 2, 2, 575, 576, 3, 2, 2, 2, 576, 583, 3, 2, 2, 2, 577, 578, 5, 60, 31, 2, 578, 579, 7, 5, 2, 2, 579, 580, 5, 158, 80, 2, 580, 581, 5, 70, 36, 2, 581, 583, 3, 2, 2, 2, 582, 570, 3, 2, 2, 2, 582, 577, 3, 2, 2, 2, 583, 67, 3, 2, 2, 2, 584, 585, 7, 30, 2, 2, 585, 586, 5, 158, 80, 2, 586, 69, 3, 2, 2, 2, 587, 593, 5, 90, 46, 2, 588, 593, 5, 98, 50, 2, 589, 590, 5, 94, 48, 2, 590, 591, 5, 158, 80, 2, 591, 593, 3, 2, 2, 2, 592, 587, 3, 2, 2, 2, 592, 588, 3, 2, 2, 2, 592, 589, 3, 2, 2, 2, 593, 594, 3, 2, 2, 2, 594, 592, 3, 2, 2, 2, 594, 595, 3, 2, 2, 2, 595, 71, 3, 2, 2, 2, 596, 603, 5, 74, 38, 2, 597, 599, 5, 58, 30, 2, 598, 597, 3, 2, 2, 2, 598, 599, 3, 2, 2, 2, 599, 600, 3, 2, 2, 2, 600, 602, 5, 74, 38, 2, 601, 598, 3, 2, 2, 2, 602, 605, 3, 2, 2, 2, 603, 601, 3, 2, 2, 2, 603, 604, 3, 2, 2, 2, 604, 73, 3, 2, 2, 2, 605, 603, 3, 2, 2, 2, 606, 607, 5, 82, 42, 2, 607, 608, 5, 158, 80, 2, 608, 633, 3, 2, 2, 2, 609, 610, 5, 84, 43, 2, 610, 611, 5, 158, 80, 2, 611, 633, 3, 2, 2, 2, 612, 613, 5, 86, 44, 2, 613, 614, 5, 158, 80, 2, 614, 633, 3, 2, 2, 2, 615, 616, 7, 46, 2, 2, 616, 633, 5, 158, 80, 2, 617, 618, 7, 33, 2, 2, 618, 633, 5, 158, 80, 2, 619, 620, 5, 156, 79, 2, 620, 621, 5, 158, 80, 2, 621, 633, 3, 2, 2, 2, 622, 633, 5, 120, 61, 2, 623, 624, 7, 32, 2, 2, 624, 633, 5, 158, 80, 2, 625, 633, 5, 80, 41, 2, 626, 633, 5, 122, 62, 2, 627, 633, 5, 76, 39, 2, 628, 629, 5, 88, 45, 2, 629, 630, 5, 158, 80, 2, 630, 633, 3, 2, 2, 2, 631, 633, 5, 78, 40, 2, 632, 606, 3, 2, 2, 2, 632, 609, 3, 2, 2, 2, 632, 612, 3, 2, 2, 2, 632, 615, 3, 2, 2, 2, 632, 617, 3, 2, 2, 2, 632, 619, 3, 2, 2, 2, 632, 622, 3, 2, 2, 2, 632, 623, 3, 2, 2, 2, 632, 625, 3, 2, 2, 2, 632, 626, 3, 2, 2, 2, 632, 627, 3, 2, 2, 2, 632, 628, 3, 2, 2, 2, 632, 631, 3, 2, 2, 2, 633, 75, 3, 2, 2, 2, 634, 635, 7, 64, 2, 2, 635, 636, 5, 158, 80, 2, 636, 637, 5, 72, 37, 2, 637, 638, 7, 6, 2, 2, 638, 639, 5, 158, 80, 2, 639, 77, 3, 2, 2, 2, 640, 641, 7, 60, 2, 2, 641, 642, 5, 158, 80, 2, 642, 643, 5, 72, 37, 2, 643, 644, 7, 6, 2, 2, 644, 645, 5, 158, 80, 2, 645, 79, 3, 2, 2, 2, 646, 647, 7, 24, 2, 2, 647, 648, 5, 158, 80, 2, 648, 81, 3, 2, 2, 2, 649, 651, 9, 6, 2, 2, 650, 649, 3, 2, 2, 2, 650, 651, 3, 2, 2, 2, 651, 652, 3, 2, 2, 2, 652, 653, 7, 45, 2, 2, 653, 83, 3, 2, 2, 2, 654, 656, 9, 6, 2, 2, 655, 654, 3, 2, 2, 2, 655, 656, 3, 2, 2, 2, 656, 657, 3, 2, 2, 2, 657, 658, 7, 31, 2, 2, 658, 85, 3, 2, 2, 2, 659, 661, 9, 6, 2, 2, 660, 659, 3, 2, 2, 2, 660, 661, 3, 2, 2, 2, 661, 662, 3, 2, 2, 2, 662, 663, 7, 37, 2, 2, 663, 87, 3, 2, 2, 2, 664, 666, 9, 6, 2, 2, 665, 664, 3, 2, 2, 2, 665, 666, 3, 2, 2, 2, 666, 667, 3, 2, 2, 2, 667, 668, 7, 38, 2, 2, 668, 89, 3, 2, 2, 2, 669, 670, 5, 156, 79, 2, 670, 671, 5, 158, 80, 2, 671, 735, 3, 2, 2, 2, 672, 673, 5, 82, 42, 2, 673, 674, 5, 158, 80, 2, 674, 735, 3, 2, 2, 2, 675, 676, 5, 84, 43, 2, 676, 677, 5, 158, 80, 2, 677, 735, 3, 2, 2, 2, 678, 679, 5, 86, 44, 2, 679, 680, 5, 158, 80, 2, 680, 735, 3, 2, 2, 2, 681, 682, 5, 88, 45, 2, 682, 683, 5, 158, 80, 2, 683, 735, 3, 2, 2, 2, 684, 685, 7, 46, 2, 2, 685, 735, 5, 158, 80, 2, 686, 687, 7, 32, 2, 2, 687, 735, 5, 158, 80, 2, 688, 689, 7, 24, 2, 2, 689, 735, 5, 158, 80, 2, 690, 691, 7, 33, 2, 2, 691, 735, 5, 158, 80, 2, 692, 693, 7, 22, 2, 2, 693, 735, 5, 158, 80, 2, 694, 695, 7, 23, 2, 2, 695, 735, 5, 158, 80, 2, 696, 697, 7, 5, 2, 2, 697, 735, 5, 158, 80, 2, 698, 699, 7, 64, 2, 2, 699, 704, 5, 158, 80, 2, 700, 703, 5, 90, 46, 2, 701, 703, 5, 96, 49, 2, 702, 700, 3, 2, 2, 2, 702, 701, 3, 2, 2, 2, 703, 706, 3, 2, 2, 2, 704, 702, 3, 2, 2, 2, 704, 705, 3, 2, 2, 2, 705, 707, 3, 2, 2, 2, 706, 704, 3, 2, 2, 2, 707, 708, 7, 6, 2, 2, 708, 709, 5, 158, 80, 2, 709, 735, 3, 2, 2, 2, 710, 711, 7, 4, 2, 2, 711, 716, 5, 158, 80, 2, 712, 715, 5, 90, 46, 2, 713, 715, 5, 96, 49, 2, 714, 712, 3, 2, 2, 2, 714, 713, 3, 2, 2, 2, 715, 718, 3, 2, 2, 2, 716, 714, 3, 2, 2, 2, 716, 717, 3, 2, 2, 2, 717, 719, 3, 2, 2, 2, 718, 716, 3, 2, 2, 2, 719, 720, 7, 6, 2, 2, 720, 721, 5, 158, 80, 2, 721, 735, 3, 2, 2, 2, 722, 723, 7, 12, 2, 2, 723, 728, 5, 158, 80, 2, 724, 727, 5, 90, 46, 2, 725, 727, 5, 96, 49, 2, 726, 724, 3, 2, 2, 2, 726, 725, 3, 2, 2, 2, 727, 730, 3, 2, 2, 2, 728, 726, 3, 2, 2, 2, 728, 729, 3, 2, 2, 2, 729, 731, 3, 2, 2, 2, 730, 728, 3, 2, 2, 2, 731, 732, 7, 14, 2, 2, 732, 733, 5, 158, 80, 2, 733, 735, 3, 2, 2, 2, 734, 669, 3, 2, 2, 2, 734, 672, 3, 2, 2, 2, 734, 675, 3, 2, 2, 2, 734, 678, 3, 2, 2, 2, 734, 681, 3, 2, 2, 2, 734, 684, 3, 2, 2, 2, 734, 686, 3, 2, 2, 2, 734, 688, 3, 2, 2, 2, 734, 690, 3, 2, 2, 2, 734, 692, 3, 2, 2, 2, 734, 694, 3, 2, 2, 2, 734, 696, 3, 2, 2, 2, 734, 698, 3, 2, 2, 2, 734, 710, 3, 2, 2, 2, 734, 722, 3, 2, 2, 2, 735, 91, 3, 2, 2, 2, 736, 737, 5, 94, 48, 2, 737, 741, 5, 158, 80, 2, 738, 740, 5, 90, 46, 2, 739, 738, 3, 2, 2, 2, 740, 743, 3, 2, 2, 2, 741, 739, 3, 2, 2, 2, 741, 742, 3, 2, 2, 2, 742, 747, 3, 2, 2, 2, 743, 741, 3, 2, 2, 2, 744, 748, 5, 98, 50, 2, 745, 746, 7, 3, 2, 2, 746, 748, 5, 158, 80, 2, 747, 744, 3, 2, 2, 2, 747, 745, 3, 2, 2, 2, 748, 93, 3, 2, 2, 2, 749, 750, 7, 17, 2, 2, 750, 751, 5, 156, 79, 2, 751, 95, 3, 2, 2, 2, 752, 763, 5, 98, 50, 2, 753, 754, 5, 94, 48, 2, 754, 755, 5, 158, 80, 2, 755, 763, 3, 2, 2, 2, 756, 757, 7, 3, 2, 2, 757, 763, 5, 158, 80, 2, 758, 759, 7, 20, 2, 2, 759, 763, 5, 158, 80, 2, 760, 761, 7, 21, 2, 2, 761, 763, 5, 158, 80, 2, 762, 752, 3, 2, 2, 2, 762, 753, 3, 2, 2, 2, 762, 756, 3, 2, 2, 2, 762, 758, 3, 2, 2, 2, 762, 760, 3, 2, 2, 2, 763, 97, 3, 2, 2, 2, 764, 765, 7, 7, 2, 2, 765, 777, 5, 158, 80, 2, 766, 776, 5, 64, 33, 2, 767, 776, 5, 100, 51, 2, 768, 776, 5, 90, 46, 2, 769, 776, 5, 98, 50, 2, 770, 771, 5, 94, 48, 2, 771, 772, 5, 158, 80, 2, 772, 776, 3, 2, 2, 2, 773, 774, 7, 3, 2, 2, 774, 776, 5, 158, 80, 2, 775, 766, 3, 2, 2, 2, 775, 767, 3, 2, 2, 2, 775, 768, 3, 2, 2, 2, 775, 769, 3, 2, 2, 2, 775, 770, 3, 2, 2, 2, 775, 773, 3, 2, 2, 2, 776, 779, 3, 2, 2, 2, 777, 775, 3, 2, 2, 2, 777, 778, 3, 2, 2, 2, 778, 780, 3, 2, 2, 2, 779, 777, 3, 2, 2, 2, 780, 781, 7, 8, 2, 2, 781, 782, 5, 158, 80, 2, 782, 99, 3, 2, 2, 2, 783, 794, 5, 62, 32, 2, 784, 794, 5, 12, 7, 2, 785, 794, 5, 24, 13, 2, 786, 794, 5, 130, 66, 2, 787, 794, 5, 134, 68, 2, 788, 794, 5, 104, 53, 2, 789, 794, 5, 140, 71, 2, 790, 794, 5, 142, 72, 2, 791, 794, 5, 144, 73, 2, 792, 794, 5, 92, 47, 2, 793, 783, 3, 2, 2, 2, 793, 784, 3, 2, 2, 2, 793, 785, 3, 2, 2, 2, 793, 786, 3, 2, 2, 2, 793, 787, 3, 2, 2, 2, 793, 788, 3, 2, 2, 2, 793, 789, 3, 2, 2, 2, 793, 790, 3, 2, 2, 2, 793, 791, 3, 2, 2, 2, 793, 792, 3, 2, 2, 2, 794, 101, 3, 2, 2, 2, 795, 796, 7, 7, 2, 2, 796, 800, 5, 158, 80, 2, 797, 799, 5, 100, 51, 2, 798, 797, 3, 2, 2, 2, 799, 802, 3, 2, 2, 2, 800, 798, 3, 2, 2, 2, 800, 801, 3, 2, 2, 2, 801, 803, 3, 2, 2, 2, 802, 800, 3, 2, 2, 2, 803, 804, 7, 8, 2, 2, 804, 805, 5, 158, 80, 2, 805, 103, 3, 2, 2, 2, 806, 807, 7, 51, 2, 2, 807, 808, 5, 158, 80, 2, 808, 809, 5, 106, 54, 2, 809, 810, 5, 158, 80, 2, 810, 811, 5, 102, 52, 2, 811, 105, 3, 2, 2, 2, 812, 817, 5, 110, 56, 2, 813, 817, 5, 112, 57, 2, 814, 817, 5, 114, 58, 2, 815, 817, 5, 108, 55, 2, 816, 812, 3, 2, 2, 2, 816, 813, 3, 2, 2, 2, 816, 814, 3, 2, 2, 2, 816, 815, 3, 2, 2, 2, 817, 107, 3, 2, 2, 2, 818, 819, 7, 4, 2, 2, 819, 820, 5, 158, 80, 2, 820, 821, 5, 106, 54, 2, 821, 822, 5, 158, 80, 2, 822, 823, 7, 6, 2, 2, 823, 827, 3, 2, 2, 2, 824, 827, 5, 116, 59, 2, 825, 827, 5, 118, 60, 2, 826, 818, 3, 2, 2, 2, 826, 824, 3, 2, 2, 2, 826, 825, 3, 2, 2, 2, 827, 109, 3, 2, 2, 2, 828, 829, 7, 35, 2, 2, 829, 830, 5, 158, 80, 2, 830, 831, 7, 19, 2, 2, 831, 832, 5, 158, 80, 2, 832, 833, 5, 108, 55, 2, 833, 111, 3, 2, 2, 2, 834, 844, 5, 108, 55, 2, 835, 836, 5, 158, 80, 2, 836, 837, 7, 19, 2, 2, 837, 838, 5, 158, 80, 2, 838, 839, 7, 36, 2, 2, 839, 840, 5, 158, 80, 2, 840, 841, 7, 19, 2, 2, 841, 842, 5, 158, 80, 2, 842, 843, 5, 108, 55, 2, 843, 845, 3, 2, 2, 2, 844, 835, 3, 2, 2, 2, 845, 846, 3, 2, 2, 2, 846, 844, 3, 2, 2, 2, 846, 847, 3, 2, 2, 2, 847, 113, 3, 2, 2, 2, 848, 858, 5, 108, 55, 2, 849, 850, 5, 158, 80, 2, 850, 851, 7, 19, 2, 2, 851, 852, 5, 158, 80, 2, 852, 853, 7, 52, 2, 2, 853, 854, 5, 158, 80, 2, 854, 855, 7, 19, 2, 2, 855, 856, 5, 158, 80, 2, 856, 857, 5, 108, 55, 2, 857, 859, 3, 2, 2, 2, 858, 849, 3, 2, 2, 2, 859, 860, 3, 2, 2, 2, 860, 858, 3, 2, 2, 2, 860, 861, 3, 2, 2, 2, 861, 115, 3, 2, 2, 2, 862, 863, 7, 4, 2, 2, 863, 864, 5, 158, 80, 2, 864, 865, 5, 66, 34, 2, 865, 866, 7, 6, 2, 2, 866, 117, 3, 2, 2, 2, 867, 872, 9, 7, 2, 2, 868, 871, 5, 90, 46, 2, 869, 871, 5, 96, 49, 2, 870, 868, 3, 2, 2, 2, 870, 869, 3, 2, 2, 2, 871, 874, 3, 2, 2, 2, 872, 870, 3, 2, 2, 2, 872, 873, 3, 2, 2, 2, 873, 875, 3, 2, 2, 2, 874, 872, 3, 2, 2, 2, 875, 876, 7, 6, 2, 2, 876, 119, 3, 2, 2, 2, 877, 878, 7, 62, 2, 2, 878, 879, 5, 158, 80, 2, 879, 880, 7, 61, 2, 2, 880, 881, 5, 158, 80, 2, 881, 882, 7, 6, 2, 2, 882, 883, 5, 158, 80, 2, 883, 121, 3, 2, 2, 2, 884, 885, 7, 56, 2, 2, 885, 886, 5, 158, 80, 2, 886, 887, 5, 124, 63, 2, 887, 888, 7, 6, 2, 2, 888, 889, 5, 158, 80, 2, 889, 123, 3, 2, 2, 2, 890, 901, 5, 126, 64, 2, 891, 892, 7, 19, 2, 2, 892, 893, 5, 158, 80, 2, 893, 894, 9, 6, 2, 2, 894, 895, 5, 158, 80, 2, 895, 896, 7, 19, 2, 2, 896, 897, 5, 158, 80, 2, 897, 898, 5, 126, 64, 2, 898, 900, 3, 2, 2, 2, 899, 891, 3, 2, 2, 2, 900, 903, 3, 2, 2, 2, 901, 899, 3, 2, 2, 2, 901, 902, 3, 2, 2, 2, 902, 125, 3, 2, 2, 2, 903, 901, 3, 2, 2, 2, 904, 916, 5, 128, 65, 2, 905, 906, 7, 9, 2, 2, 906, 907, 5, 158, 80, 2, 907, 908, 5, 128, 65, 2, 908, 915, 3, 2, 2, 2, 909, 910, 7, 15, 2, 2, 910, 911, 5, 158, 80, 2, 911, 912, 5, 82, 42, 2, 912, 913, 5, 158, 80, 2, 913, 915, 3, 2, 2, 2, 914, 905, 3, 2, 2, 2, 914, 909, 3, 2, 2, 2, 915, 918, 3, 2, 2, 2, 916, 914, 3, 2, 2, 2, 916, 917, 3, 2, 2, 2, 917, 127, 3, 2, 2, 2, 918, 916, 3, 2, 2, 2, 919, 920, 5, 82, 42, 2, 920, 921, 5, 158, 80, 2, 921, 938, 3, 2, 2, 2, 922, 923, 5, 86, 44, 2, 923, 924, 5, 158, 80, 2, 924, 938, 3, 2, 2, 2, 925, 926, 5, 88, 45, 2, 926, 927, 5, 158, 80, 2, 927, 938, 3, 2, 2, 2, 928, 929, 5, 84, 43, 2, 929, 930, 5, 158, 80, 2, 930, 938, 3, 2, 2, 2, 931, 932, 7, 4, 2, 2, 932, 933, 5, 158, 80, 2, 933, 934, 5, 124, 63, 2, 934, 935, 7, 6, 2, 2, 935, 936, 5, 158, 80, 2, 936, 938, 3, 2, 2, 2, 937, 919, 3, 2, 2, 2, 937, 922, 3, 2, 2, 2, 937, 925, 3, 2, 2, 2, 937, 928, 3, 2, 2, 2, 937, 931, 3, 2, 2, 2, 938, 129, 3, 2, 2, 2, 939, 940, 7, 50, 2, 2, 940, 941, 5, 158, 80, 2, 941, 942, 7, 7, 2, 2, 942, 944, 5, 158, 80, 2, 943, 945, 5, 132, 67, 2, 944, 943, 3, 2, 2, 2, 944, 945, 3, 2, 2, 2, 945, 953, 3, 2, 2, 2, 946, 947, 7, 3, 2, 2, 947, 949, 5, 158, 80, 2, 948, 950, 5, 132, 67, 2, 949, 948, 3, 2, 2, 2, 949, 950, 3, 2, 2, 2, 950, 952, 3, 2, 2, 2, 951, 946, 3, 2, 2, 2, 952, 955, 3, 2, 2, 2, 953, 951, 3, 2, 2, 2, 953, 954, 3, 2, 2, 2, 954, 956, 3, 2, 2, 2, 955, 953, 3, 2, 2, 2, 956, 957, 7, 8, 2, 2, 957, 958, 5, 158, 80, 2, 958, 131, 3, 2, 2, 2, 959, 960, 5, 60, 31, 2, 960, 961, 7, 5, 2, 2, 961, 962, 5, 158, 80, 2, 962, 963, 5, 72, 37, 2, 963, 970, 3, 2, 2, 2, 964, 965, 5, 60, 31, 2, 965, 966, 7, 5, 2, 2, 966, 967, 5, 158, 80, 2, 967, 968, 5, 70, 36, 2, 968, 970, 3, 2, 2, 2, 969, 959, 3, 2, 2, 2, 969, 964, 3, 2, 2, 2, 970, 133, 3, 2, 2, 2, 971, 972, 7, 53, 2, 2, 972, 973, 5, 158, 80, 2, 973, 974, 7, 19, 2, 2, 974, 975, 5, 158, 80, 2, 975, 976, 5, 156, 79, 2, 976, 977, 5, 158, 80, 2, 977, 978, 7, 7, 2, 2, 978, 979, 5, 158, 80, 2, 979, 980, 5, 136, 69, 2, 980, 981, 7, 8, 2, 2, 981, 982, 5, 158, 80, 2, 982, 135, 3, 2, 2, 2, 983, 984, 5, 138, 70, 2, 984, 985, 7, 7, 2, 2, 985, 987, 5, 158, 80, 2, 986, 988, 5, 64, 33, 2, 987, 986, 3, 2, 2, 2, 987, 988, 3, 2, 2, 2, 988, 989, 3, 2, 2, 2, 989, 990, 7, 8, 2, 2, 990, 991, 5, 158, 80, 2, 991, 993, 3, 2, 2, 2, 992, 983, 3, 2, 2, 2, 993, 996, 3, 2, 2, 2, 994, 992, 3, 2, 2, 2, 994, 995, 3, 2, 2, 2, 995, 137, 3, 2, 2, 2, 996, 994, 3, 2, 2, 2, 997, 998, 9, 8, 2, 2, 998, 1006, 5, 158, 80, 2, 999, 1000, 7, 42, 2, 2, 1000, 1001, 5, 158, 80, 2, 1001, 1002, 9, 8, 2, 2, 1002, 1003, 5, 158, 80, 2, 1003, 1005, 3, 2, 2, 2, 1004, 999, 3, 2, 2, 2, 1005, 1008, 3, 2, 2, 2, 1006, 1004, 3, 2, 2, 2, 1006, 1007, 3, 2, 2, 2, 1007, 139, 3, 2, 2, 2, 1008, 1006, 3, 2, 2, 2, 1009, 1010, 7, 57, 2, 2, 1010, 1011, 5, 158, 80, 2, 1011, 1012, 7, 7, 2, 2, 1012, 1014, 5, 158, 80, 2, 1013, 1015, 5, 64, 33, 2, 1014, 1013, 3, 2, 2, 2, 1014, 1015, 3, 2, 2, 2, 1015, 1016, 3, 2, 2, 2, 1016, 1017, 7, 8, 2, 2, 1017, 1018, 5, 158, 80, 2, 1018, 141, 3, 2, 2, 2, 1019, 1020, 7, 58, 2, 2, 1020, 1021, 5, 158, 80, 2, 1021, 1022, 5, 156, 79, 2, 1022, 1023, 5, 158, 80, 2, 1023, 1024, 7, 7, 2, 2, 1024, 1026, 5, 158, 80, 2, 1025, 1027, 5, 64, 33, 2, 1026, 1025, 3, 2, 2, 2, 1026, 1027, 3, 2, 2, 2, 1027, 1028, 3, 2, 2, 2, 1028, 1029, 7, 8, 2, 2, 1029, 1030, 5, 158, 80, 2, 1030, 143, 3, 2, 2, 2, 1031, 1032, 7, 59, 2, 2, 1032, 1033, 5, 158, 80, 2, 1033, 1034, 5, 146, 74, 2, 1034, 1035, 5, 158, 80, 2, 1035, 1036, 7, 7, 2, 2, 1036, 1040, 5, 158, 80, 2, 1037, 1039, 5, 150, 76, 2, 1038, 1037, 3, 2, 2, 2, 1039, 1042, 3, 2, 2, 2, 1040, 1038, 3, 2, 2, 2, 1040, 1041, 3, 2, 2, 2, 1041, 1043, 3, 2, 2, 2, 1042, 1040, 3, 2, 2, 2, 1043, 1044, 7, 8, 2, 2, 1044, 1045, 5, 158, 80, 2, 1045, 145, 3, 2, 2, 2, 1046, 1054, 5, 148, 75, 2, 1047, 1048, 5, 158, 80, 2, 1048, 1049, 7, 42, 2, 2, 1049, 1050, 5, 158, 80, 2, 1050, 1051, 5, 148, 75, 2, 1051, 1053, 3, 2, 2, 2, 1052, 1047, 3, 2, 2, 2, 1053, 1056, 3, 2, 2, 2, 1054, 1052, 3, 2, 2, 2, 1054, 1055, 3, 2, 2, 2, 1055, 147, 3, 2, 2, 2, 1056, 1054, 3, 2, 2, 2, 1057, 1068, 7, 46, 2, 2, 1058, 1064, 5, 156, 79, 2, 1059, 1060, 5, 158, 80, 2, 1060, 1061, 5, 156, 79, 2, 1061, 1063, 3, 2, 2, 2, 1062, 1059, 3, 2, 2, 2, 1063, 1066, 3, 2, 2, 2, 1064, 1062, 3, 2, 2, 2, 1064, 1065, 3, 2, 2, 2, 1065, 1068, 3, 2, 2, 2, 1066, 1064, 3, 2, 2, 2, 1067, 1057, 3, 2, 2, 2, 1067, 1058, 3, 2, 2, 2, 1068, 149, 3, 2, 2, 2, 1069, 1070, 5, 152, 77, 2, 1070, 1071, 5, 158, 80, 2, 1071, 1072, 7, 7, 2, 2, 1072, 1074, 5, 158, 80, 2, 1073, 1075, 5, 154, 78, 2, 1074, 1073, 3, 2, 2, 2, 1074, 1075, 3, 2, 2, 2, 1075, 1084, 3, 2, 2, 2, 1076, 1077, 5, 158, 80, 2, 1077, 1078, 7, 3, 2, 2, 1078, 1080, 5, 158, 80, 2, 1079, 1081, 5, 154, 78, 2, 1080, 1079, 3, 2, 2, 2, 1080, 1081, 3, 2, 2, 2, 1081, 1083, 3, 2, 2, 2, 1082, 1076, 3, 2, 2, 2, 1083, 1086, 3, 2, 2, 2, 1084, 1082, 3, 2, 2, 2, 1084, 1085, 3, 2, 2, 2, 1085, 1087, 3, 2, 2, 2, 1086, 1084, 3, 2, 2, 2, 1087, 1088, 7, 8, 2, 2, 1088, 1089, 5, 158, 80, 2, 1089, 151, 3, 2, 2, 2, 1090, 1091, 5, 94, 48, 2, 1091, 153, 3, 2, 2, 2, 1092, 1093, 5, 156, 79, 2, 1093, 1094, 5, 158, 80, 2, 1094, 1095, 7, 5, 2, 2, 1095, 1096, 5, 158, 80, 2, 1096, 1102, 5, 82, 42, 2, 1097, 1098, 5, 158, 80, 2, 1098, 1099, 5, 82, 42, 2, 1099, 1101, 3, 2, 2, 2, 1100, 1097, 3, 2, 2, 2, 1101, 1104, 3, 2, 2, 2, 1102, 1100, 3, 2, 2, 2, 1102, 1103, 3, 2, 2, 2, 1103, 155, 3, 2, 2, 2, 1104, 1102, 3, 2, 2, 2, 1105, 1106, 9, 9, 2, 2, 1106, 157, 3, 2, 2, 2, 1107, 1109, 9, 10, 2, 2, 1108, 1107, 3, 2, 2, 2, 1109, 1112, 3, 2, 2, 2, 1110, 1108, 3, 2, 2, 2, 1110, 1111, 3, 2, 2, 2, 1111, 159, 3, 2, 2, 2, 1112, 1110, 3, 2, 2, 2, 108, 165, 170, 177, 182, 189, 194, 201, 206, 221, 249, 256, 268, 273, 290, 293, 298, 309, 319, 322, 333, 344, 349, 354, 358, 375, 386, 397, 401, 408, 410, 418, 420, 422, 425, 431, 438, 448, 456, 460, 466, 470, 484, 489, 503, 513, 524, 530, 538, 544, 549, 555, 563, 567, 575, 582, 592, 594, 598, 603, 632, 650, 655, 660, 665, 702, 704, 714, 716, 726, 728, 734, 741, 747, 762, 775, 777, 793, 800, 816, 826, 846, 860, 870, 872, 901, 914, 916, 937, 944, 949, 953, 969, 987, 994, 1006, 1014, 1026, 1040, 1054, 1064, 1067, 1074, 1080, 1084, 1102, 1110]
|
package/gen/css3.tokens
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
T__0=1
|
|
2
|
+
T__1=2
|
|
3
|
+
T__2=3
|
|
4
|
+
T__3=4
|
|
5
|
+
T__4=5
|
|
6
|
+
T__5=6
|
|
7
|
+
T__6=7
|
|
8
|
+
T__7=8
|
|
9
|
+
T__8=9
|
|
10
|
+
T__9=10
|
|
11
|
+
T__10=11
|
|
12
|
+
T__11=12
|
|
13
|
+
T__12=13
|
|
14
|
+
T__13=14
|
|
15
|
+
T__14=15
|
|
16
|
+
Comment=16
|
|
17
|
+
Space=17
|
|
18
|
+
Cdo=18
|
|
19
|
+
Cdc=19
|
|
20
|
+
Includes=20
|
|
21
|
+
DashMatch=21
|
|
22
|
+
Hash=22
|
|
23
|
+
Import=23
|
|
24
|
+
Page=24
|
|
25
|
+
Media=25
|
|
26
|
+
Namespace=26
|
|
27
|
+
Charset=27
|
|
28
|
+
Important=28
|
|
29
|
+
Percentage=29
|
|
30
|
+
Uri=30
|
|
31
|
+
UnicodeRange=31
|
|
32
|
+
MediaOnly=32
|
|
33
|
+
Not=33
|
|
34
|
+
And=34
|
|
35
|
+
Dimension=35
|
|
36
|
+
UnknownDimension=36
|
|
37
|
+
Plus=37
|
|
38
|
+
Minus=38
|
|
39
|
+
Greater=39
|
|
40
|
+
Comma=40
|
|
41
|
+
Tilde=41
|
|
42
|
+
PseudoNot=42
|
|
43
|
+
Number=43
|
|
44
|
+
String_=44
|
|
45
|
+
PrefixMatch=45
|
|
46
|
+
SuffixMatch=46
|
|
47
|
+
SubstringMatch=47
|
|
48
|
+
FontFace=48
|
|
49
|
+
Supports=49
|
|
50
|
+
Or=50
|
|
51
|
+
Keyframes=51
|
|
52
|
+
From=52
|
|
53
|
+
To=53
|
|
54
|
+
Calc=54
|
|
55
|
+
Viewport=55
|
|
56
|
+
CounterStyle=56
|
|
57
|
+
FontFeatureValues=57
|
|
58
|
+
DxImageTransform=58
|
|
59
|
+
Variable=59
|
|
60
|
+
Var=60
|
|
61
|
+
Ident=61
|
|
62
|
+
Function_=62
|
|
63
|
+
';'=1
|
|
64
|
+
'('=2
|
|
65
|
+
':'=3
|
|
66
|
+
')'=4
|
|
67
|
+
'{'=5
|
|
68
|
+
'}'=6
|
|
69
|
+
'*'=7
|
|
70
|
+
'|'=8
|
|
71
|
+
'.'=9
|
|
72
|
+
'['=10
|
|
73
|
+
'='=11
|
|
74
|
+
']'=12
|
|
75
|
+
'/'=13
|
|
76
|
+
'_'=14
|
|
77
|
+
'@'=15
|
|
78
|
+
'<!--'=18
|
|
79
|
+
'-->'=19
|
|
80
|
+
'~='=20
|
|
81
|
+
'|='=21
|
|
82
|
+
'@charset '=27
|
|
83
|
+
'+'=37
|
|
84
|
+
'-'=38
|
|
85
|
+
'>'=39
|
|
86
|
+
','=40
|
|
87
|
+
'~'=41
|
|
88
|
+
'^='=45
|
|
89
|
+
'$='=46
|
|
90
|
+
'*='=47
|
|
91
|
+
'calc('=54
|
|
92
|
+
'var('=60
|