@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.
Files changed (97) hide show
  1. package/Integration/vanilla-js/index.html +31 -0
  2. package/LICENSE +21 -0
  3. package/README.md +81 -0
  4. package/README_CN.md +15 -0
  5. package/antlr/antlr-4.8-complete.jar +0 -0
  6. package/coverage/clover.xml +6 -0
  7. package/coverage/coverage-final.json +1 -0
  8. package/coverage/lcov-report/Interaction.vue.html +532 -0
  9. package/coverage/lcov-report/Owner.js.html +175 -0
  10. package/coverage/lcov-report/base.css +224 -0
  11. package/coverage/lcov-report/block-navigation.js +79 -0
  12. package/coverage/lcov-report/components/interaction/Interaction.vue.html +544 -0
  13. package/coverage/lcov-report/components/interaction/index.html +110 -0
  14. package/coverage/lcov-report/index.html +95 -0
  15. package/coverage/lcov-report/positioning/david/DavidEisenstat2.ts.html +196 -0
  16. package/coverage/lcov-report/positioning/david/index.html +110 -0
  17. package/coverage/lcov-report/prettify.css +1 -0
  18. package/coverage/lcov-report/prettify.js +2 -0
  19. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  20. package/coverage/lcov-report/sorter.js +170 -0
  21. package/coverage/lcov.info +0 -0
  22. package/cypress/fixtures/example.json +5 -0
  23. package/cypress/fixtures/profile.json +5 -0
  24. package/cypress/fixtures/users.json +232 -0
  25. package/cypress/integration/__image_snapshots__/Smoke test creation #0.png +0 -0
  26. package/cypress/integration/__image_snapshots__/Smoke test fragment #0.png +0 -0
  27. package/cypress/integration/__image_snapshots__/Smoke test fragmentIssue #0.png +0 -0
  28. package/cypress/integration/__image_snapshots__/Smoke test interaction #0.png +0 -0
  29. package/cypress/integration/__image_snapshots__/Smoke test return #0.png +0 -0
  30. package/cypress/integration/__image_snapshots__/Smoke test return #1.png +0 -0
  31. package/cypress/integration/__image_snapshots__/Smoke test should load the home page #0.png +0 -0
  32. package/cypress/integration/smoke.spec.js +64 -0
  33. package/cypress/plugins/index.js +30 -0
  34. package/cypress/support/commands.js +25 -0
  35. package/cypress/support/index.js +20 -0
  36. package/cypress/videos/smoke.spec.js.mp4 +0 -0
  37. package/cypress.json +7 -0
  38. package/dist/fonts/kalam-v15-latin-300.00bd845e.woff2 +0 -0
  39. package/dist/fonts/kalam-v15-latin-300.1c36b0ad.woff +0 -0
  40. package/dist/fonts/kalam-v15-latin-700.2a87f463.woff2 +0 -0
  41. package/dist/fonts/kalam-v15-latin-700.9ec0bbf1.woff +0 -0
  42. package/dist/fonts/kalam-v15-latin-regular.4c0c4df4.woff +0 -0
  43. package/dist/fonts/kalam-v15-latin-regular.e4d4907f.woff2 +0 -0
  44. package/dist/vue-sequence.css +7 -0
  45. package/dist/vue-sequence.umd.min.js +12 -0
  46. package/docs/asciidoc/contributor.adoc +79 -0
  47. package/docs/asciidoc/create-my-own-theme.adoc +25 -0
  48. package/docs/asciidoc/images/creation-component.png +0 -0
  49. package/docs/asciidoc/images/creation-rtl.png +0 -0
  50. package/docs/asciidoc/images/message-arrow-rtl.png +0 -0
  51. package/docs/asciidoc/images/occurrence.png +0 -0
  52. package/docs/asciidoc/images/return-message-conflict.png +0 -0
  53. package/docs/asciidoc/images/shift-up-half-the-height.png +0 -0
  54. package/docs/asciidoc/images/vertical-alignment.svg +1 -0
  55. package/docs/asciidoc/images/vertically-aligning.png +0 -0
  56. package/docs/asciidoc/index.adoc +277 -0
  57. package/docs/asciidoc/integration-guide.adoc +121 -0
  58. package/docs/asciidoc/tutorial.adoc +22 -0
  59. package/docs/async-vs-sync-parser-rules.md +78 -0
  60. package/docs/handling-starter.png +0 -0
  61. package/docs/highlighting-messages.md +47 -0
  62. package/docs/inherited-vs-provided-from.md +59 -0
  63. package/docs/invalid-host-header-error.md +20 -0
  64. package/docs/osx-unsupported-arm64-node12.md +13 -0
  65. package/docs/participants-function.md +27 -0
  66. package/docs/responsive-participant-margin.md +52 -0
  67. package/docs/starter.md +8 -0
  68. package/docs/testing-minified-lib.md +29 -0
  69. package/docs/watch.md +1 -0
  70. package/docs/why-we-publish-embed-view-to-github-pages.md +15 -0
  71. package/docs/width-translate-and-offsets.md +54 -0
  72. package/gen/css3.interp +214 -0
  73. package/gen/css3.tokens +92 -0
  74. package/gen/css3BaseListener.java +1106 -0
  75. package/gen/css3BaseVisitor.java +636 -0
  76. package/gen/css3Lexer.interp +251 -0
  77. package/gen/css3Lexer.java +672 -0
  78. package/gen/css3Lexer.tokens +92 -0
  79. package/gen/css3Listener.java +939 -0
  80. package/gen/css3Parser.java +8113 -0
  81. package/gen/css3Visitor.java +566 -0
  82. package/gen/sequenceLexer.interp +206 -0
  83. package/gen/sequenceLexer.java +419 -0
  84. package/gen/sequenceLexer.tokens +104 -0
  85. package/gen/sequenceParser.interp +180 -0
  86. package/gen/sequenceParser.java +4659 -0
  87. package/gen/sequenceParser.tokens +101 -0
  88. package/gen/sequenceParserBaseListener.java +830 -0
  89. package/gen/sequenceParserBaseVisitor.java +475 -0
  90. package/gen/sequenceParserListener.java +703 -0
  91. package/gen/sequenceParserVisitor.java +425 -0
  92. package/package.json +133 -0
  93. package/playground/creation.html +32 -0
  94. package/playground/message.html +39 -0
  95. package/tailwind.config.js +15 -0
  96. package/types/index.d.ts +34 -0
  97. 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.
@@ -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
+
@@ -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]
@@ -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