codemirror-languageserver 1.15.0 → 1.17.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/README.md +9 -2
- package/demo/demo.js +27 -18
- package/demo/dist/demo.js +163 -2105
- package/dist/completion.d.ts +2 -0
- package/dist/definition.d.ts +4 -0
- package/dist/hover.d.ts +2 -0
- package/dist/index.d.ts +14 -1
- package/dist/index.js +149 -86
- package/dist/initialization.d.ts +279 -0
- package/dist/mouse.d.ts +2 -0
- package/dist/plugin.d.ts +54 -299
- package/package.json +1 -1
package/demo/dist/demo.js
CHANGED
|
@@ -4873,7 +4873,7 @@ let nav = typeof navigator != "undefined" ? navigator : {
|
|
|
4873
4873
|
vendor: "",
|
|
4874
4874
|
platform: ""
|
|
4875
4875
|
};
|
|
4876
|
-
let doc = typeof document != "undefined" ? document : {
|
|
4876
|
+
let doc$1 = typeof document != "undefined" ? document : {
|
|
4877
4877
|
documentElement: {
|
|
4878
4878
|
style: {}
|
|
4879
4879
|
}
|
|
@@ -4884,7 +4884,7 @@ const ie_11up = /*@__PURE__*//Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(nav.us
|
|
|
4884
4884
|
const ie$1 = !!(ie_upto10 || ie_11up || ie_edge);
|
|
4885
4885
|
const gecko = !ie$1 && /*@__PURE__*//gecko\/(\d+)/i.test(nav.userAgent);
|
|
4886
4886
|
const chrome = !ie$1 && /*@__PURE__*//Chrome\/(\d+)/.exec(nav.userAgent);
|
|
4887
|
-
const webkit = "webkitFontSmoothing" in doc.documentElement.style;
|
|
4887
|
+
const webkit = "webkitFontSmoothing" in doc$1.documentElement.style;
|
|
4888
4888
|
const safari = !ie$1 && /*@__PURE__*//Apple Computer/.test(nav.vendor);
|
|
4889
4889
|
const ios = safari && (/*@__PURE__*//Mobile\/\w+/.test(nav.userAgent) || nav.maxTouchPoints > 2);
|
|
4890
4890
|
var browser$2 = {
|
|
@@ -4892,7 +4892,7 @@ var browser$2 = {
|
|
|
4892
4892
|
windows: /*@__PURE__*//Win/.test(nav.platform),
|
|
4893
4893
|
linux: /*@__PURE__*//Linux|X11/.test(nav.platform),
|
|
4894
4894
|
ie: ie$1,
|
|
4895
|
-
ie_version: ie_upto10 ? doc.documentMode || 6 : ie_11up ? +ie_11up[1] : ie_edge ? +ie_edge[1] : 0,
|
|
4895
|
+
ie_version: ie_upto10 ? doc$1.documentMode || 6 : ie_11up ? +ie_11up[1] : ie_edge ? +ie_edge[1] : 0,
|
|
4896
4896
|
gecko,
|
|
4897
4897
|
gecko_version: gecko ? +(/*@__PURE__*//Firefox\/(\d+)/.exec(nav.userAgent) || [0, 0])[1] : 0,
|
|
4898
4898
|
chrome: !!chrome,
|
|
@@ -4901,7 +4901,7 @@ var browser$2 = {
|
|
|
4901
4901
|
android: /*@__PURE__*//Android\b/.test(nav.userAgent),
|
|
4902
4902
|
safari,
|
|
4903
4903
|
webkit_version: webkit ? +(/*@__PURE__*//\bAppleWebKit\/(\d+)/.exec(nav.userAgent) || [0, 0])[1] : 0,
|
|
4904
|
-
tabSize: doc.documentElement.style.tabSize != null ? "tab-size" : "-moz-tab-size"
|
|
4904
|
+
tabSize: doc$1.documentElement.style.tabSize != null ? "tab-size" : "-moz-tab-size"
|
|
4905
4905
|
};
|
|
4906
4906
|
const MaxJoinLen = 256;
|
|
4907
4907
|
class TextView extends ContentView {
|
|
@@ -14325,7 +14325,7 @@ but also provides an `active` property holding a state field that
|
|
|
14325
14325
|
can be used to read the currently active tooltips produced by this
|
|
14326
14326
|
extension.
|
|
14327
14327
|
*/
|
|
14328
|
-
function hoverTooltip(source, options = {}) {
|
|
14328
|
+
function hoverTooltip$1(source, options = {}) {
|
|
14329
14329
|
let setHover = StateEffect.define();
|
|
14330
14330
|
let hoverState = StateField.define({
|
|
14331
14331
|
create() {
|
|
@@ -15271,49 +15271,6 @@ class NodeType {
|
|
|
15271
15271
|
An empty dummy node type to use when no actual type is available.
|
|
15272
15272
|
*/
|
|
15273
15273
|
NodeType.none = new NodeType("", Object.create(null), 0, 8 /* NodeFlag.Anonymous */);
|
|
15274
|
-
/**
|
|
15275
|
-
A node set holds a collection of node types. It is used to
|
|
15276
|
-
compactly represent trees by storing their type ids, rather than a
|
|
15277
|
-
full pointer to the type object, in a numeric array. Each parser
|
|
15278
|
-
[has](#lr.LRParser.nodeSet) a node set, and [tree
|
|
15279
|
-
buffers](#common.TreeBuffer) can only store collections of nodes
|
|
15280
|
-
from the same set. A set can have a maximum of 2**16 (65536) node
|
|
15281
|
-
types in it, so that the ids fit into 16-bit typed array slots.
|
|
15282
|
-
*/
|
|
15283
|
-
class NodeSet {
|
|
15284
|
-
/**
|
|
15285
|
-
Create a set with the given types. The `id` property of each
|
|
15286
|
-
type should correspond to its position within the array.
|
|
15287
|
-
*/
|
|
15288
|
-
constructor(
|
|
15289
|
-
/**
|
|
15290
|
-
The node types in this set, by id.
|
|
15291
|
-
*/
|
|
15292
|
-
types) {
|
|
15293
|
-
this.types = types;
|
|
15294
|
-
for (let i = 0; i < types.length; i++) if (types[i].id != i) throw new RangeError("Node type ids should correspond to array positions when creating a node set");
|
|
15295
|
-
}
|
|
15296
|
-
/**
|
|
15297
|
-
Create a copy of this set with some node properties added. The
|
|
15298
|
-
arguments to this method can be created with
|
|
15299
|
-
[`NodeProp.add`](#common.NodeProp.add).
|
|
15300
|
-
*/
|
|
15301
|
-
extend(...props) {
|
|
15302
|
-
let newTypes = [];
|
|
15303
|
-
for (let type of this.types) {
|
|
15304
|
-
let newProps = null;
|
|
15305
|
-
for (let source of props) {
|
|
15306
|
-
let add = source(type);
|
|
15307
|
-
if (add) {
|
|
15308
|
-
if (!newProps) newProps = Object.assign({}, type.props);
|
|
15309
|
-
newProps[add[0].id] = add[1];
|
|
15310
|
-
}
|
|
15311
|
-
}
|
|
15312
|
-
newTypes.push(newProps ? new NodeType(type.name, newProps, type.id, type.flags) : type);
|
|
15313
|
-
}
|
|
15314
|
-
return new NodeSet(newTypes);
|
|
15315
|
-
}
|
|
15316
|
-
}
|
|
15317
15274
|
const CachedNode = new WeakMap(),
|
|
15318
15275
|
CachedInnerNode = new WeakMap();
|
|
15319
15276
|
/**
|
|
@@ -17506,19 +17463,6 @@ facet that stores language-specific data for that language.
|
|
|
17506
17463
|
*/
|
|
17507
17464
|
const languageDataProp = /*@__PURE__*/new NodeProp();
|
|
17508
17465
|
/**
|
|
17509
|
-
Helper function to define a facet (to be added to the top syntax
|
|
17510
|
-
node(s) for a language via
|
|
17511
|
-
[`languageDataProp`](https://codemirror.net/6/docs/ref/#language.languageDataProp)), that will be
|
|
17512
|
-
used to associate language data with the language. You
|
|
17513
|
-
probably only need this when subclassing
|
|
17514
|
-
[`Language`](https://codemirror.net/6/docs/ref/#language.Language).
|
|
17515
|
-
*/
|
|
17516
|
-
function defineLanguageFacet(baseData) {
|
|
17517
|
-
return Facet.define({
|
|
17518
|
-
combine: baseData ? values => values.concat(baseData) : undefined
|
|
17519
|
-
});
|
|
17520
|
-
}
|
|
17521
|
-
/**
|
|
17522
17466
|
A language object manages parsing and per-language
|
|
17523
17467
|
[metadata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt). Parse data is
|
|
17524
17468
|
managed as a [Lezer](https://lezer.codemirror.net) tree. The class
|
|
@@ -17627,36 +17571,6 @@ function languageDataFacetAt(state, pos, side) {
|
|
|
17627
17571
|
return facet;
|
|
17628
17572
|
}
|
|
17629
17573
|
/**
|
|
17630
|
-
A subclass of [`Language`](https://codemirror.net/6/docs/ref/#language.Language) for use with Lezer
|
|
17631
|
-
[LR parsers](https://lezer.codemirror.net/docs/ref#lr.LRParser)
|
|
17632
|
-
parsers.
|
|
17633
|
-
*/
|
|
17634
|
-
class LRLanguage extends Language {
|
|
17635
|
-
constructor(data, parser) {
|
|
17636
|
-
super(data, parser);
|
|
17637
|
-
this.parser = parser;
|
|
17638
|
-
}
|
|
17639
|
-
/**
|
|
17640
|
-
Define a language from a parser.
|
|
17641
|
-
*/
|
|
17642
|
-
static define(spec) {
|
|
17643
|
-
let data = defineLanguageFacet(spec.languageData);
|
|
17644
|
-
return new LRLanguage(data, spec.parser.configure({
|
|
17645
|
-
props: [languageDataProp.add(type => type.isTop ? data : undefined)]
|
|
17646
|
-
}));
|
|
17647
|
-
}
|
|
17648
|
-
/**
|
|
17649
|
-
Create a new instance of this language with a reconfigured
|
|
17650
|
-
version of its parser.
|
|
17651
|
-
*/
|
|
17652
|
-
configure(options) {
|
|
17653
|
-
return new LRLanguage(this.data, this.parser.configure(options));
|
|
17654
|
-
}
|
|
17655
|
-
get allowsNesting() {
|
|
17656
|
-
return this.parser.hasWrappers();
|
|
17657
|
-
}
|
|
17658
|
-
}
|
|
17659
|
-
/**
|
|
17660
17574
|
Get the syntax tree for a state, which is the current (possibly
|
|
17661
17575
|
incomplete) parse tree of the active
|
|
17662
17576
|
[language](https://codemirror.net/6/docs/ref/#language.Language), or the empty tree if there is no
|
|
@@ -18096,34 +18010,6 @@ const language = /*@__PURE__*/Facet.define({
|
|
|
18096
18010
|
},
|
|
18097
18011
|
enables: [Language.state, parseWorker]
|
|
18098
18012
|
});
|
|
18099
|
-
/**
|
|
18100
|
-
This class bundles a [language](https://codemirror.net/6/docs/ref/#language.Language) with an
|
|
18101
|
-
optional set of supporting extensions. Language packages are
|
|
18102
|
-
encouraged to export a function that optionally takes a
|
|
18103
|
-
configuration object and returns a `LanguageSupport` instance, as
|
|
18104
|
-
the main way for client code to use the package.
|
|
18105
|
-
*/
|
|
18106
|
-
class LanguageSupport {
|
|
18107
|
-
/**
|
|
18108
|
-
Create a language support object.
|
|
18109
|
-
*/
|
|
18110
|
-
constructor(
|
|
18111
|
-
/**
|
|
18112
|
-
The language object.
|
|
18113
|
-
*/
|
|
18114
|
-
language,
|
|
18115
|
-
/**
|
|
18116
|
-
An optional set of supporting extensions. When nesting a
|
|
18117
|
-
language in another language, the outer language is encouraged
|
|
18118
|
-
to include the supporting extensions for its inner languages
|
|
18119
|
-
in its own set of support extensions.
|
|
18120
|
-
*/
|
|
18121
|
-
support = []) {
|
|
18122
|
-
this.language = language;
|
|
18123
|
-
this.support = support;
|
|
18124
|
-
this.extension = [language, support];
|
|
18125
|
-
}
|
|
18126
|
-
}
|
|
18127
18013
|
|
|
18128
18014
|
/**
|
|
18129
18015
|
Facet that defines a way to provide a function that computes the
|
|
@@ -18411,54 +18297,14 @@ function bracketedAligned(context) {
|
|
|
18411
18297
|
pos = next.to;
|
|
18412
18298
|
}
|
|
18413
18299
|
}
|
|
18414
|
-
/**
|
|
18415
|
-
An indentation strategy for delimited (usually bracketed) nodes.
|
|
18416
|
-
Will, by default, indent one unit more than the parent's base
|
|
18417
|
-
indent unless the line starts with a closing token. When `align`
|
|
18418
|
-
is true and there are non-skipped nodes on the node's opening
|
|
18419
|
-
line, the content of the node will be aligned with the end of the
|
|
18420
|
-
opening node, like this:
|
|
18421
|
-
|
|
18422
|
-
foo(bar,
|
|
18423
|
-
baz)
|
|
18424
|
-
*/
|
|
18425
|
-
function delimitedIndent({
|
|
18426
|
-
closing,
|
|
18427
|
-
align = true,
|
|
18428
|
-
units = 1
|
|
18429
|
-
}) {
|
|
18430
|
-
return context => delimitedStrategy(context, align, units, closing);
|
|
18431
|
-
}
|
|
18432
18300
|
function delimitedStrategy(context, align, units, closing, closedAt) {
|
|
18433
18301
|
let after = context.textAfter,
|
|
18434
18302
|
space = after.match(/^\s*/)[0].length;
|
|
18435
18303
|
let closed = closing && after.slice(space, space + closing.length) == closing || closedAt == context.pos + space;
|
|
18436
|
-
let aligned =
|
|
18304
|
+
let aligned = bracketedAligned(context) ;
|
|
18437
18305
|
if (aligned) return closed ? context.column(aligned.from) : context.column(aligned.to);
|
|
18438
18306
|
return context.baseIndent + (closed ? 0 : context.unit * units);
|
|
18439
18307
|
}
|
|
18440
|
-
/**
|
|
18441
|
-
An indentation strategy that aligns a node's content to its base
|
|
18442
|
-
indentation.
|
|
18443
|
-
*/
|
|
18444
|
-
const flatIndent = context => context.baseIndent;
|
|
18445
|
-
/**
|
|
18446
|
-
Creates an indentation strategy that, by default, indents
|
|
18447
|
-
continued lines one unit more than the node's base indentation.
|
|
18448
|
-
You can provide `except` to prevent indentation of lines that
|
|
18449
|
-
match a pattern (for example `/^else\b/` in `if`/`else`
|
|
18450
|
-
constructs), and you can change the amount of units used with the
|
|
18451
|
-
`units` option.
|
|
18452
|
-
*/
|
|
18453
|
-
function continuedIndent({
|
|
18454
|
-
except,
|
|
18455
|
-
units = 1
|
|
18456
|
-
} = {}) {
|
|
18457
|
-
return context => {
|
|
18458
|
-
let matchExcept = except && except.test(context.textAfter);
|
|
18459
|
-
return context.baseIndent + (matchExcept ? 0 : units * context.unit);
|
|
18460
|
-
};
|
|
18461
|
-
}
|
|
18462
18308
|
const DontIndentBeyond = 200;
|
|
18463
18309
|
/**
|
|
18464
18310
|
Enables reindentation on input. When a language defines an
|
|
@@ -18528,19 +18374,6 @@ that tree is foldable and return the range that can be collapsed
|
|
|
18528
18374
|
when it is.
|
|
18529
18375
|
*/
|
|
18530
18376
|
const foldNodeProp = /*@__PURE__*/new NodeProp();
|
|
18531
|
-
/**
|
|
18532
|
-
[Fold](https://codemirror.net/6/docs/ref/#language.foldNodeProp) function that folds everything but
|
|
18533
|
-
the first and the last child of a syntax node. Useful for nodes
|
|
18534
|
-
that start and end with delimiters.
|
|
18535
|
-
*/
|
|
18536
|
-
function foldInside(node) {
|
|
18537
|
-
let first = node.firstChild,
|
|
18538
|
-
last = node.lastChild;
|
|
18539
|
-
return first && first.to < last.from ? {
|
|
18540
|
-
from: first.to,
|
|
18541
|
-
to: last.type.isError ? node.to : last.from
|
|
18542
|
-
} : null;
|
|
18543
|
-
}
|
|
18544
18377
|
function syntaxFolding(state, start, end) {
|
|
18545
18378
|
let tree = syntaxTree(state);
|
|
18546
18379
|
if (tree.length < end) return null;
|
|
@@ -24101,7 +23934,7 @@ function canStartStringAt(state, pos, prefixes) {
|
|
|
24101
23934
|
/**
|
|
24102
23935
|
Returns an extension that enables autocompletion.
|
|
24103
23936
|
*/
|
|
24104
|
-
function autocompletion(config = {}) {
|
|
23937
|
+
function autocompletion$1(config = {}) {
|
|
24105
23938
|
return [commitCharacters, completionState, completionConfig.of(config), completionPlugin, completionKeymapExt, baseTheme$1];
|
|
24106
23939
|
}
|
|
24107
23940
|
/**
|
|
@@ -24784,1843 +24617,12 @@ const lintExtensions = [lintState, /*@__PURE__*/EditorView.decorations.compute([
|
|
|
24784
24617
|
panel
|
|
24785
24618
|
} = state.field(lintState);
|
|
24786
24619
|
return !selected || !panel || selected.from == selected.to ? Decoration.none : Decoration.set([activeMark.range(selected.from, selected.to)]);
|
|
24787
|
-
}), /*@__PURE__*/hoverTooltip(lintTooltip, {
|
|
24620
|
+
}), /*@__PURE__*/hoverTooltip$1(lintTooltip, {
|
|
24788
24621
|
hideOn: hideTooltip
|
|
24789
24622
|
}), baseTheme];
|
|
24790
24623
|
|
|
24791
24624
|
var global$2 = typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {};
|
|
24792
24625
|
|
|
24793
|
-
var env = {};
|
|
24794
|
-
|
|
24795
|
-
// from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js
|
|
24796
|
-
var performance = global$2.performance || {};
|
|
24797
|
-
performance.now || performance.mozNow || performance.msNow || performance.oNow || performance.webkitNow || function () {
|
|
24798
|
-
return new Date().getTime();
|
|
24799
|
-
};
|
|
24800
|
-
var browser$1$1 = {
|
|
24801
|
-
env: env};
|
|
24802
|
-
|
|
24803
|
-
/// A parse stack. These are used internally by the parser to track
|
|
24804
|
-
/// parsing progress. They also provide some properties and methods
|
|
24805
|
-
/// that external code such as a tokenizer can use to get information
|
|
24806
|
-
/// about the parse state.
|
|
24807
|
-
class Stack {
|
|
24808
|
-
/// @internal
|
|
24809
|
-
constructor(
|
|
24810
|
-
/// The parse that this stack is part of @internal
|
|
24811
|
-
p,
|
|
24812
|
-
/// Holds state, input pos, buffer index triplets for all but the
|
|
24813
|
-
/// top state @internal
|
|
24814
|
-
stack,
|
|
24815
|
-
/// The current parse state @internal
|
|
24816
|
-
state,
|
|
24817
|
-
// The position at which the next reduce should take place. This
|
|
24818
|
-
// can be less than `this.pos` when skipped expressions have been
|
|
24819
|
-
// added to the stack (which should be moved outside of the next
|
|
24820
|
-
// reduction)
|
|
24821
|
-
/// @internal
|
|
24822
|
-
reducePos,
|
|
24823
|
-
/// The input position up to which this stack has parsed.
|
|
24824
|
-
pos,
|
|
24825
|
-
/// The dynamic score of the stack, including dynamic precedence
|
|
24826
|
-
/// and error-recovery penalties
|
|
24827
|
-
/// @internal
|
|
24828
|
-
score,
|
|
24829
|
-
// The output buffer. Holds (type, start, end, size) quads
|
|
24830
|
-
// representing nodes created by the parser, where `size` is
|
|
24831
|
-
// amount of buffer array entries covered by this node.
|
|
24832
|
-
/// @internal
|
|
24833
|
-
buffer,
|
|
24834
|
-
// The base offset of the buffer. When stacks are split, the split
|
|
24835
|
-
// instance shared the buffer history with its parent up to
|
|
24836
|
-
// `bufferBase`, which is the absolute offset (including the
|
|
24837
|
-
// offset of previous splits) into the buffer at which this stack
|
|
24838
|
-
// starts writing.
|
|
24839
|
-
/// @internal
|
|
24840
|
-
bufferBase,
|
|
24841
|
-
/// @internal
|
|
24842
|
-
curContext,
|
|
24843
|
-
/// @internal
|
|
24844
|
-
lookAhead = 0,
|
|
24845
|
-
// A parent stack from which this was split off, if any. This is
|
|
24846
|
-
// set up so that it always points to a stack that has some
|
|
24847
|
-
// additional buffer content, never to a stack with an equal
|
|
24848
|
-
// `bufferBase`.
|
|
24849
|
-
/// @internal
|
|
24850
|
-
parent) {
|
|
24851
|
-
this.p = p;
|
|
24852
|
-
this.stack = stack;
|
|
24853
|
-
this.state = state;
|
|
24854
|
-
this.reducePos = reducePos;
|
|
24855
|
-
this.pos = pos;
|
|
24856
|
-
this.score = score;
|
|
24857
|
-
this.buffer = buffer;
|
|
24858
|
-
this.bufferBase = bufferBase;
|
|
24859
|
-
this.curContext = curContext;
|
|
24860
|
-
this.lookAhead = lookAhead;
|
|
24861
|
-
this.parent = parent;
|
|
24862
|
-
}
|
|
24863
|
-
/// @internal
|
|
24864
|
-
toString() {
|
|
24865
|
-
return `[${this.stack.filter((_, i) => i % 3 == 0).concat(this.state)}]@${this.pos}${this.score ? "!" + this.score : ""}`;
|
|
24866
|
-
}
|
|
24867
|
-
// Start an empty stack
|
|
24868
|
-
/// @internal
|
|
24869
|
-
static start(p, state, pos = 0) {
|
|
24870
|
-
let cx = p.parser.context;
|
|
24871
|
-
return new Stack(p, [], state, pos, pos, 0, [], 0, cx ? new StackContext(cx, cx.start) : null, 0, null);
|
|
24872
|
-
}
|
|
24873
|
-
/// The stack's current [context](#lr.ContextTracker) value, if
|
|
24874
|
-
/// any. Its type will depend on the context tracker's type
|
|
24875
|
-
/// parameter, or it will be `null` if there is no context
|
|
24876
|
-
/// tracker.
|
|
24877
|
-
get context() {
|
|
24878
|
-
return this.curContext ? this.curContext.context : null;
|
|
24879
|
-
}
|
|
24880
|
-
// Push a state onto the stack, tracking its start position as well
|
|
24881
|
-
// as the buffer base at that point.
|
|
24882
|
-
/// @internal
|
|
24883
|
-
pushState(state, start) {
|
|
24884
|
-
this.stack.push(this.state, start, this.bufferBase + this.buffer.length);
|
|
24885
|
-
this.state = state;
|
|
24886
|
-
}
|
|
24887
|
-
// Apply a reduce action
|
|
24888
|
-
/// @internal
|
|
24889
|
-
reduce(action) {
|
|
24890
|
-
let depth = action >> 19 /* ReduceDepthShift */,
|
|
24891
|
-
type = action & 65535 /* ValueMask */;
|
|
24892
|
-
let {
|
|
24893
|
-
parser
|
|
24894
|
-
} = this.p;
|
|
24895
|
-
let dPrec = parser.dynamicPrecedence(type);
|
|
24896
|
-
if (dPrec) this.score += dPrec;
|
|
24897
|
-
if (depth == 0) {
|
|
24898
|
-
this.pushState(parser.getGoto(this.state, type, true), this.reducePos);
|
|
24899
|
-
// Zero-depth reductions are a special case—they add stuff to
|
|
24900
|
-
// the stack without popping anything off.
|
|
24901
|
-
if (type < parser.minRepeatTerm) this.storeNode(type, this.reducePos, this.reducePos, 4, true);
|
|
24902
|
-
this.reduceContext(type, this.reducePos);
|
|
24903
|
-
return;
|
|
24904
|
-
}
|
|
24905
|
-
// Find the base index into `this.stack`, content after which will
|
|
24906
|
-
// be dropped. Note that with `StayFlag` reductions we need to
|
|
24907
|
-
// consume two extra frames (the dummy parent node for the skipped
|
|
24908
|
-
// expression and the state that we'll be staying in, which should
|
|
24909
|
-
// be moved to `this.state`).
|
|
24910
|
-
let base = this.stack.length - (depth - 1) * 3 - (action & 262144 /* StayFlag */ ? 6 : 0);
|
|
24911
|
-
let start = this.stack[base - 2];
|
|
24912
|
-
let bufferBase = this.stack[base - 1],
|
|
24913
|
-
count = this.bufferBase + this.buffer.length - bufferBase;
|
|
24914
|
-
// Store normal terms or `R -> R R` repeat reductions
|
|
24915
|
-
if (type < parser.minRepeatTerm || action & 131072 /* RepeatFlag */) {
|
|
24916
|
-
let pos = parser.stateFlag(this.state, 1 /* Skipped */) ? this.pos : this.reducePos;
|
|
24917
|
-
this.storeNode(type, start, pos, count + 4, true);
|
|
24918
|
-
}
|
|
24919
|
-
if (action & 262144 /* StayFlag */) {
|
|
24920
|
-
this.state = this.stack[base];
|
|
24921
|
-
} else {
|
|
24922
|
-
let baseStateID = this.stack[base - 3];
|
|
24923
|
-
this.state = parser.getGoto(baseStateID, type, true);
|
|
24924
|
-
}
|
|
24925
|
-
while (this.stack.length > base) this.stack.pop();
|
|
24926
|
-
this.reduceContext(type, start);
|
|
24927
|
-
}
|
|
24928
|
-
// Shift a value into the buffer
|
|
24929
|
-
/// @internal
|
|
24930
|
-
storeNode(term, start, end, size = 4, isReduce = false) {
|
|
24931
|
-
if (term == 0 /* Err */ && (!this.stack.length || this.stack[this.stack.length - 1] < this.buffer.length + this.bufferBase)) {
|
|
24932
|
-
// Try to omit/merge adjacent error nodes
|
|
24933
|
-
let cur = this,
|
|
24934
|
-
top = this.buffer.length;
|
|
24935
|
-
if (top == 0 && cur.parent) {
|
|
24936
|
-
top = cur.bufferBase - cur.parent.bufferBase;
|
|
24937
|
-
cur = cur.parent;
|
|
24938
|
-
}
|
|
24939
|
-
if (top > 0 && cur.buffer[top - 4] == 0 /* Err */ && cur.buffer[top - 1] > -1) {
|
|
24940
|
-
if (start == end) return;
|
|
24941
|
-
if (cur.buffer[top - 2] >= start) {
|
|
24942
|
-
cur.buffer[top - 2] = end;
|
|
24943
|
-
return;
|
|
24944
|
-
}
|
|
24945
|
-
}
|
|
24946
|
-
}
|
|
24947
|
-
if (!isReduce || this.pos == end) {
|
|
24948
|
-
// Simple case, just append
|
|
24949
|
-
this.buffer.push(term, start, end, size);
|
|
24950
|
-
} else {
|
|
24951
|
-
// There may be skipped nodes that have to be moved forward
|
|
24952
|
-
let index = this.buffer.length;
|
|
24953
|
-
if (index > 0 && this.buffer[index - 4] != 0 /* Err */) while (index > 0 && this.buffer[index - 2] > end) {
|
|
24954
|
-
// Move this record forward
|
|
24955
|
-
this.buffer[index] = this.buffer[index - 4];
|
|
24956
|
-
this.buffer[index + 1] = this.buffer[index - 3];
|
|
24957
|
-
this.buffer[index + 2] = this.buffer[index - 2];
|
|
24958
|
-
this.buffer[index + 3] = this.buffer[index - 1];
|
|
24959
|
-
index -= 4;
|
|
24960
|
-
if (size > 4) size -= 4;
|
|
24961
|
-
}
|
|
24962
|
-
this.buffer[index] = term;
|
|
24963
|
-
this.buffer[index + 1] = start;
|
|
24964
|
-
this.buffer[index + 2] = end;
|
|
24965
|
-
this.buffer[index + 3] = size;
|
|
24966
|
-
}
|
|
24967
|
-
}
|
|
24968
|
-
// Apply a shift action
|
|
24969
|
-
/// @internal
|
|
24970
|
-
shift(action, next, nextEnd) {
|
|
24971
|
-
let start = this.pos;
|
|
24972
|
-
if (action & 131072 /* GotoFlag */) {
|
|
24973
|
-
this.pushState(action & 65535 /* ValueMask */, this.pos);
|
|
24974
|
-
} else if ((action & 262144 /* StayFlag */) == 0) {
|
|
24975
|
-
// Regular shift
|
|
24976
|
-
let nextState = action,
|
|
24977
|
-
{
|
|
24978
|
-
parser
|
|
24979
|
-
} = this.p;
|
|
24980
|
-
if (nextEnd > this.pos || next <= parser.maxNode) {
|
|
24981
|
-
this.pos = nextEnd;
|
|
24982
|
-
if (!parser.stateFlag(nextState, 1 /* Skipped */)) this.reducePos = nextEnd;
|
|
24983
|
-
}
|
|
24984
|
-
this.pushState(nextState, start);
|
|
24985
|
-
this.shiftContext(next, start);
|
|
24986
|
-
if (next <= parser.maxNode) this.buffer.push(next, start, nextEnd, 4);
|
|
24987
|
-
} else {
|
|
24988
|
-
// Shift-and-stay, which means this is a skipped token
|
|
24989
|
-
this.pos = nextEnd;
|
|
24990
|
-
this.shiftContext(next, start);
|
|
24991
|
-
if (next <= this.p.parser.maxNode) this.buffer.push(next, start, nextEnd, 4);
|
|
24992
|
-
}
|
|
24993
|
-
}
|
|
24994
|
-
// Apply an action
|
|
24995
|
-
/// @internal
|
|
24996
|
-
apply(action, next, nextEnd) {
|
|
24997
|
-
if (action & 65536 /* ReduceFlag */) this.reduce(action);else this.shift(action, next, nextEnd);
|
|
24998
|
-
}
|
|
24999
|
-
// Add a prebuilt (reused) node into the buffer.
|
|
25000
|
-
/// @internal
|
|
25001
|
-
useNode(value, next) {
|
|
25002
|
-
let index = this.p.reused.length - 1;
|
|
25003
|
-
if (index < 0 || this.p.reused[index] != value) {
|
|
25004
|
-
this.p.reused.push(value);
|
|
25005
|
-
index++;
|
|
25006
|
-
}
|
|
25007
|
-
let start = this.pos;
|
|
25008
|
-
this.reducePos = this.pos = start + value.length;
|
|
25009
|
-
this.pushState(next, start);
|
|
25010
|
-
this.buffer.push(index, start, this.reducePos, -1 /* size == -1 means this is a reused value */);
|
|
25011
|
-
if (this.curContext) this.updateContext(this.curContext.tracker.reuse(this.curContext.context, value, this, this.p.stream.reset(this.pos - value.length)));
|
|
25012
|
-
}
|
|
25013
|
-
// Split the stack. Due to the buffer sharing and the fact
|
|
25014
|
-
// that `this.stack` tends to stay quite shallow, this isn't very
|
|
25015
|
-
// expensive.
|
|
25016
|
-
/// @internal
|
|
25017
|
-
split() {
|
|
25018
|
-
let parent = this;
|
|
25019
|
-
let off = parent.buffer.length;
|
|
25020
|
-
// Because the top of the buffer (after this.pos) may be mutated
|
|
25021
|
-
// to reorder reductions and skipped tokens, and shared buffers
|
|
25022
|
-
// should be immutable, this copies any outstanding skipped tokens
|
|
25023
|
-
// to the new buffer, and puts the base pointer before them.
|
|
25024
|
-
while (off > 0 && parent.buffer[off - 2] > parent.reducePos) off -= 4;
|
|
25025
|
-
let buffer = parent.buffer.slice(off),
|
|
25026
|
-
base = parent.bufferBase + off;
|
|
25027
|
-
// Make sure parent points to an actual parent with content, if there is such a parent.
|
|
25028
|
-
while (parent && base == parent.bufferBase) parent = parent.parent;
|
|
25029
|
-
return new Stack(this.p, this.stack.slice(), this.state, this.reducePos, this.pos, this.score, buffer, base, this.curContext, this.lookAhead, parent);
|
|
25030
|
-
}
|
|
25031
|
-
// Try to recover from an error by 'deleting' (ignoring) one token.
|
|
25032
|
-
/// @internal
|
|
25033
|
-
recoverByDelete(next, nextEnd) {
|
|
25034
|
-
let isNode = next <= this.p.parser.maxNode;
|
|
25035
|
-
if (isNode) this.storeNode(next, this.pos, nextEnd, 4);
|
|
25036
|
-
this.storeNode(0 /* Err */, this.pos, nextEnd, isNode ? 8 : 4);
|
|
25037
|
-
this.pos = this.reducePos = nextEnd;
|
|
25038
|
-
this.score -= 190 /* Delete */;
|
|
25039
|
-
}
|
|
25040
|
-
/// Check if the given term would be able to be shifted (optionally
|
|
25041
|
-
/// after some reductions) on this stack. This can be useful for
|
|
25042
|
-
/// external tokenizers that want to make sure they only provide a
|
|
25043
|
-
/// given token when it applies.
|
|
25044
|
-
canShift(term) {
|
|
25045
|
-
for (let sim = new SimulatedStack(this);;) {
|
|
25046
|
-
let action = this.p.parser.stateSlot(sim.state, 4 /* DefaultReduce */) || this.p.parser.hasAction(sim.state, term);
|
|
25047
|
-
if ((action & 65536 /* ReduceFlag */) == 0) return true;
|
|
25048
|
-
if (action == 0) return false;
|
|
25049
|
-
sim.reduce(action);
|
|
25050
|
-
}
|
|
25051
|
-
}
|
|
25052
|
-
// Apply up to Recover.MaxNext recovery actions that conceptually
|
|
25053
|
-
// inserts some missing token or rule.
|
|
25054
|
-
/// @internal
|
|
25055
|
-
recoverByInsert(next) {
|
|
25056
|
-
if (this.stack.length >= 300 /* MaxInsertStackDepth */) return [];
|
|
25057
|
-
let nextStates = this.p.parser.nextStates(this.state);
|
|
25058
|
-
if (nextStates.length > 4 /* MaxNext */ << 1 || this.stack.length >= 120 /* DampenInsertStackDepth */) {
|
|
25059
|
-
let best = [];
|
|
25060
|
-
for (let i = 0, s; i < nextStates.length; i += 2) {
|
|
25061
|
-
if ((s = nextStates[i + 1]) != this.state && this.p.parser.hasAction(s, next)) best.push(nextStates[i], s);
|
|
25062
|
-
}
|
|
25063
|
-
if (this.stack.length < 120 /* DampenInsertStackDepth */) for (let i = 0; best.length < 4 /* MaxNext */ << 1 && i < nextStates.length; i += 2) {
|
|
25064
|
-
let s = nextStates[i + 1];
|
|
25065
|
-
if (!best.some((v, i) => i & 1 && v == s)) best.push(nextStates[i], s);
|
|
25066
|
-
}
|
|
25067
|
-
nextStates = best;
|
|
25068
|
-
}
|
|
25069
|
-
let result = [];
|
|
25070
|
-
for (let i = 0; i < nextStates.length && result.length < 4 /* MaxNext */; i += 2) {
|
|
25071
|
-
let s = nextStates[i + 1];
|
|
25072
|
-
if (s == this.state) continue;
|
|
25073
|
-
let stack = this.split();
|
|
25074
|
-
stack.pushState(s, this.pos);
|
|
25075
|
-
stack.storeNode(0 /* Err */, stack.pos, stack.pos, 4, true);
|
|
25076
|
-
stack.shiftContext(nextStates[i], this.pos);
|
|
25077
|
-
stack.score -= 200 /* Insert */;
|
|
25078
|
-
result.push(stack);
|
|
25079
|
-
}
|
|
25080
|
-
return result;
|
|
25081
|
-
}
|
|
25082
|
-
// Force a reduce, if possible. Return false if that can't
|
|
25083
|
-
// be done.
|
|
25084
|
-
/// @internal
|
|
25085
|
-
forceReduce() {
|
|
25086
|
-
let reduce = this.p.parser.stateSlot(this.state, 5 /* ForcedReduce */);
|
|
25087
|
-
if ((reduce & 65536 /* ReduceFlag */) == 0) return false;
|
|
25088
|
-
let {
|
|
25089
|
-
parser
|
|
25090
|
-
} = this.p;
|
|
25091
|
-
if (!parser.validAction(this.state, reduce)) {
|
|
25092
|
-
let depth = reduce >> 19 /* ReduceDepthShift */,
|
|
25093
|
-
term = reduce & 65535 /* ValueMask */;
|
|
25094
|
-
let target = this.stack.length - depth * 3;
|
|
25095
|
-
if (target < 0 || parser.getGoto(this.stack[target], term, false) < 0) return false;
|
|
25096
|
-
this.storeNode(0 /* Err */, this.reducePos, this.reducePos, 4, true);
|
|
25097
|
-
this.score -= 100 /* Reduce */;
|
|
25098
|
-
}
|
|
25099
|
-
this.reducePos = this.pos;
|
|
25100
|
-
this.reduce(reduce);
|
|
25101
|
-
return true;
|
|
25102
|
-
}
|
|
25103
|
-
/// @internal
|
|
25104
|
-
forceAll() {
|
|
25105
|
-
while (!this.p.parser.stateFlag(this.state, 2 /* Accepting */)) {
|
|
25106
|
-
if (!this.forceReduce()) {
|
|
25107
|
-
this.storeNode(0 /* Err */, this.pos, this.pos, 4, true);
|
|
25108
|
-
break;
|
|
25109
|
-
}
|
|
25110
|
-
}
|
|
25111
|
-
return this;
|
|
25112
|
-
}
|
|
25113
|
-
/// Check whether this state has no further actions (assumed to be a direct descendant of the
|
|
25114
|
-
/// top state, since any other states must be able to continue
|
|
25115
|
-
/// somehow). @internal
|
|
25116
|
-
get deadEnd() {
|
|
25117
|
-
if (this.stack.length != 3) return false;
|
|
25118
|
-
let {
|
|
25119
|
-
parser
|
|
25120
|
-
} = this.p;
|
|
25121
|
-
return parser.data[parser.stateSlot(this.state, 1 /* Actions */)] == 65535 /* End */ && !parser.stateSlot(this.state, 4 /* DefaultReduce */);
|
|
25122
|
-
}
|
|
25123
|
-
/// Restart the stack (put it back in its start state). Only safe
|
|
25124
|
-
/// when this.stack.length == 3 (state is directly below the top
|
|
25125
|
-
/// state). @internal
|
|
25126
|
-
restart() {
|
|
25127
|
-
this.state = this.stack[0];
|
|
25128
|
-
this.stack.length = 0;
|
|
25129
|
-
}
|
|
25130
|
-
/// @internal
|
|
25131
|
-
sameState(other) {
|
|
25132
|
-
if (this.state != other.state || this.stack.length != other.stack.length) return false;
|
|
25133
|
-
for (let i = 0; i < this.stack.length; i += 3) if (this.stack[i] != other.stack[i]) return false;
|
|
25134
|
-
return true;
|
|
25135
|
-
}
|
|
25136
|
-
/// Get the parser used by this stack.
|
|
25137
|
-
get parser() {
|
|
25138
|
-
return this.p.parser;
|
|
25139
|
-
}
|
|
25140
|
-
/// Test whether a given dialect (by numeric ID, as exported from
|
|
25141
|
-
/// the terms file) is enabled.
|
|
25142
|
-
dialectEnabled(dialectID) {
|
|
25143
|
-
return this.p.parser.dialect.flags[dialectID];
|
|
25144
|
-
}
|
|
25145
|
-
shiftContext(term, start) {
|
|
25146
|
-
if (this.curContext) this.updateContext(this.curContext.tracker.shift(this.curContext.context, term, this, this.p.stream.reset(start)));
|
|
25147
|
-
}
|
|
25148
|
-
reduceContext(term, start) {
|
|
25149
|
-
if (this.curContext) this.updateContext(this.curContext.tracker.reduce(this.curContext.context, term, this, this.p.stream.reset(start)));
|
|
25150
|
-
}
|
|
25151
|
-
/// @internal
|
|
25152
|
-
emitContext() {
|
|
25153
|
-
let last = this.buffer.length - 1;
|
|
25154
|
-
if (last < 0 || this.buffer[last] != -3) this.buffer.push(this.curContext.hash, this.reducePos, this.reducePos, -3);
|
|
25155
|
-
}
|
|
25156
|
-
/// @internal
|
|
25157
|
-
emitLookAhead() {
|
|
25158
|
-
let last = this.buffer.length - 1;
|
|
25159
|
-
if (last < 0 || this.buffer[last] != -4) this.buffer.push(this.lookAhead, this.reducePos, this.reducePos, -4);
|
|
25160
|
-
}
|
|
25161
|
-
updateContext(context) {
|
|
25162
|
-
if (context != this.curContext.context) {
|
|
25163
|
-
let newCx = new StackContext(this.curContext.tracker, context);
|
|
25164
|
-
if (newCx.hash != this.curContext.hash) this.emitContext();
|
|
25165
|
-
this.curContext = newCx;
|
|
25166
|
-
}
|
|
25167
|
-
}
|
|
25168
|
-
/// @internal
|
|
25169
|
-
setLookAhead(lookAhead) {
|
|
25170
|
-
if (lookAhead > this.lookAhead) {
|
|
25171
|
-
this.emitLookAhead();
|
|
25172
|
-
this.lookAhead = lookAhead;
|
|
25173
|
-
}
|
|
25174
|
-
}
|
|
25175
|
-
/// @internal
|
|
25176
|
-
close() {
|
|
25177
|
-
if (this.curContext && this.curContext.tracker.strict) this.emitContext();
|
|
25178
|
-
if (this.lookAhead > 0) this.emitLookAhead();
|
|
25179
|
-
}
|
|
25180
|
-
}
|
|
25181
|
-
class StackContext {
|
|
25182
|
-
constructor(tracker, context) {
|
|
25183
|
-
this.tracker = tracker;
|
|
25184
|
-
this.context = context;
|
|
25185
|
-
this.hash = tracker.strict ? tracker.hash(context) : 0;
|
|
25186
|
-
}
|
|
25187
|
-
}
|
|
25188
|
-
var Recover;
|
|
25189
|
-
(function (Recover) {
|
|
25190
|
-
Recover[Recover["Insert"] = 200] = "Insert";
|
|
25191
|
-
Recover[Recover["Delete"] = 190] = "Delete";
|
|
25192
|
-
Recover[Recover["Reduce"] = 100] = "Reduce";
|
|
25193
|
-
Recover[Recover["MaxNext"] = 4] = "MaxNext";
|
|
25194
|
-
Recover[Recover["MaxInsertStackDepth"] = 300] = "MaxInsertStackDepth";
|
|
25195
|
-
Recover[Recover["DampenInsertStackDepth"] = 120] = "DampenInsertStackDepth";
|
|
25196
|
-
})(Recover || (Recover = {}));
|
|
25197
|
-
// Used to cheaply run some reductions to scan ahead without mutating
|
|
25198
|
-
// an entire stack
|
|
25199
|
-
class SimulatedStack {
|
|
25200
|
-
constructor(start) {
|
|
25201
|
-
this.start = start;
|
|
25202
|
-
this.state = start.state;
|
|
25203
|
-
this.stack = start.stack;
|
|
25204
|
-
this.base = this.stack.length;
|
|
25205
|
-
}
|
|
25206
|
-
reduce(action) {
|
|
25207
|
-
let term = action & 65535 /* ValueMask */,
|
|
25208
|
-
depth = action >> 19 /* ReduceDepthShift */;
|
|
25209
|
-
if (depth == 0) {
|
|
25210
|
-
if (this.stack == this.start.stack) this.stack = this.stack.slice();
|
|
25211
|
-
this.stack.push(this.state, 0, 0);
|
|
25212
|
-
this.base += 3;
|
|
25213
|
-
} else {
|
|
25214
|
-
this.base -= (depth - 1) * 3;
|
|
25215
|
-
}
|
|
25216
|
-
let goto = this.start.p.parser.getGoto(this.stack[this.base - 3], term, true);
|
|
25217
|
-
this.state = goto;
|
|
25218
|
-
}
|
|
25219
|
-
}
|
|
25220
|
-
// This is given to `Tree.build` to build a buffer, and encapsulates
|
|
25221
|
-
// the parent-stack-walking necessary to read the nodes.
|
|
25222
|
-
class StackBufferCursor {
|
|
25223
|
-
constructor(stack, pos, index) {
|
|
25224
|
-
this.stack = stack;
|
|
25225
|
-
this.pos = pos;
|
|
25226
|
-
this.index = index;
|
|
25227
|
-
this.buffer = stack.buffer;
|
|
25228
|
-
if (this.index == 0) this.maybeNext();
|
|
25229
|
-
}
|
|
25230
|
-
static create(stack, pos = stack.bufferBase + stack.buffer.length) {
|
|
25231
|
-
return new StackBufferCursor(stack, pos, pos - stack.bufferBase);
|
|
25232
|
-
}
|
|
25233
|
-
maybeNext() {
|
|
25234
|
-
let next = this.stack.parent;
|
|
25235
|
-
if (next != null) {
|
|
25236
|
-
this.index = this.stack.bufferBase - next.bufferBase;
|
|
25237
|
-
this.stack = next;
|
|
25238
|
-
this.buffer = next.buffer;
|
|
25239
|
-
}
|
|
25240
|
-
}
|
|
25241
|
-
get id() {
|
|
25242
|
-
return this.buffer[this.index - 4];
|
|
25243
|
-
}
|
|
25244
|
-
get start() {
|
|
25245
|
-
return this.buffer[this.index - 3];
|
|
25246
|
-
}
|
|
25247
|
-
get end() {
|
|
25248
|
-
return this.buffer[this.index - 2];
|
|
25249
|
-
}
|
|
25250
|
-
get size() {
|
|
25251
|
-
return this.buffer[this.index - 1];
|
|
25252
|
-
}
|
|
25253
|
-
next() {
|
|
25254
|
-
this.index -= 4;
|
|
25255
|
-
this.pos -= 4;
|
|
25256
|
-
if (this.index == 0) this.maybeNext();
|
|
25257
|
-
}
|
|
25258
|
-
fork() {
|
|
25259
|
-
return new StackBufferCursor(this.stack, this.pos, this.index);
|
|
25260
|
-
}
|
|
25261
|
-
}
|
|
25262
|
-
class CachedToken {
|
|
25263
|
-
constructor() {
|
|
25264
|
-
this.start = -1;
|
|
25265
|
-
this.value = -1;
|
|
25266
|
-
this.end = -1;
|
|
25267
|
-
this.extended = -1;
|
|
25268
|
-
this.lookAhead = 0;
|
|
25269
|
-
this.mask = 0;
|
|
25270
|
-
this.context = 0;
|
|
25271
|
-
}
|
|
25272
|
-
}
|
|
25273
|
-
const nullToken = new CachedToken();
|
|
25274
|
-
/// [Tokenizers](#lr.ExternalTokenizer) interact with the input
|
|
25275
|
-
/// through this interface. It presents the input as a stream of
|
|
25276
|
-
/// characters, tracking lookahead and hiding the complexity of
|
|
25277
|
-
/// [ranges](#common.Parser.parse^ranges) from tokenizer code.
|
|
25278
|
-
class InputStream {
|
|
25279
|
-
/// @internal
|
|
25280
|
-
constructor(
|
|
25281
|
-
/// @internal
|
|
25282
|
-
input,
|
|
25283
|
-
/// @internal
|
|
25284
|
-
ranges) {
|
|
25285
|
-
this.input = input;
|
|
25286
|
-
this.ranges = ranges;
|
|
25287
|
-
/// @internal
|
|
25288
|
-
this.chunk = "";
|
|
25289
|
-
/// @internal
|
|
25290
|
-
this.chunkOff = 0;
|
|
25291
|
-
/// Backup chunk
|
|
25292
|
-
this.chunk2 = "";
|
|
25293
|
-
this.chunk2Pos = 0;
|
|
25294
|
-
/// The character code of the next code unit in the input, or -1
|
|
25295
|
-
/// when the stream is at the end of the input.
|
|
25296
|
-
this.next = -1;
|
|
25297
|
-
/// @internal
|
|
25298
|
-
this.token = nullToken;
|
|
25299
|
-
this.rangeIndex = 0;
|
|
25300
|
-
this.pos = this.chunkPos = ranges[0].from;
|
|
25301
|
-
this.range = ranges[0];
|
|
25302
|
-
this.end = ranges[ranges.length - 1].to;
|
|
25303
|
-
this.readNext();
|
|
25304
|
-
}
|
|
25305
|
-
/// @internal
|
|
25306
|
-
resolveOffset(offset, assoc) {
|
|
25307
|
-
let range = this.range,
|
|
25308
|
-
index = this.rangeIndex;
|
|
25309
|
-
let pos = this.pos + offset;
|
|
25310
|
-
while (pos < range.from) {
|
|
25311
|
-
if (!index) return null;
|
|
25312
|
-
let next = this.ranges[--index];
|
|
25313
|
-
pos -= range.from - next.to;
|
|
25314
|
-
range = next;
|
|
25315
|
-
}
|
|
25316
|
-
while (assoc < 0 ? pos > range.to : pos >= range.to) {
|
|
25317
|
-
if (index == this.ranges.length - 1) return null;
|
|
25318
|
-
let next = this.ranges[++index];
|
|
25319
|
-
pos += next.from - range.to;
|
|
25320
|
-
range = next;
|
|
25321
|
-
}
|
|
25322
|
-
return pos;
|
|
25323
|
-
}
|
|
25324
|
-
/// Look at a code unit near the stream position. `.peek(0)` equals
|
|
25325
|
-
/// `.next`, `.peek(-1)` gives you the previous character, and so
|
|
25326
|
-
/// on.
|
|
25327
|
-
///
|
|
25328
|
-
/// Note that looking around during tokenizing creates dependencies
|
|
25329
|
-
/// on potentially far-away content, which may reduce the
|
|
25330
|
-
/// effectiveness incremental parsing—when looking forward—or even
|
|
25331
|
-
/// cause invalid reparses when looking backward more than 25 code
|
|
25332
|
-
/// units, since the library does not track lookbehind.
|
|
25333
|
-
peek(offset) {
|
|
25334
|
-
let idx = this.chunkOff + offset,
|
|
25335
|
-
pos,
|
|
25336
|
-
result;
|
|
25337
|
-
if (idx >= 0 && idx < this.chunk.length) {
|
|
25338
|
-
pos = this.pos + offset;
|
|
25339
|
-
result = this.chunk.charCodeAt(idx);
|
|
25340
|
-
} else {
|
|
25341
|
-
let resolved = this.resolveOffset(offset, 1);
|
|
25342
|
-
if (resolved == null) return -1;
|
|
25343
|
-
pos = resolved;
|
|
25344
|
-
if (pos >= this.chunk2Pos && pos < this.chunk2Pos + this.chunk2.length) {
|
|
25345
|
-
result = this.chunk2.charCodeAt(pos - this.chunk2Pos);
|
|
25346
|
-
} else {
|
|
25347
|
-
let i = this.rangeIndex,
|
|
25348
|
-
range = this.range;
|
|
25349
|
-
while (range.to <= pos) range = this.ranges[++i];
|
|
25350
|
-
this.chunk2 = this.input.chunk(this.chunk2Pos = pos);
|
|
25351
|
-
if (pos + this.chunk2.length > range.to) this.chunk2 = this.chunk2.slice(0, range.to - pos);
|
|
25352
|
-
result = this.chunk2.charCodeAt(0);
|
|
25353
|
-
}
|
|
25354
|
-
}
|
|
25355
|
-
if (pos >= this.token.lookAhead) this.token.lookAhead = pos + 1;
|
|
25356
|
-
return result;
|
|
25357
|
-
}
|
|
25358
|
-
/// Accept a token. By default, the end of the token is set to the
|
|
25359
|
-
/// current stream position, but you can pass an offset (relative to
|
|
25360
|
-
/// the stream position) to change that.
|
|
25361
|
-
acceptToken(token, endOffset = 0) {
|
|
25362
|
-
let end = endOffset ? this.resolveOffset(endOffset, -1) : this.pos;
|
|
25363
|
-
if (end == null || end < this.token.start) throw new RangeError("Token end out of bounds");
|
|
25364
|
-
this.token.value = token;
|
|
25365
|
-
this.token.end = end;
|
|
25366
|
-
}
|
|
25367
|
-
getChunk() {
|
|
25368
|
-
if (this.pos >= this.chunk2Pos && this.pos < this.chunk2Pos + this.chunk2.length) {
|
|
25369
|
-
let {
|
|
25370
|
-
chunk,
|
|
25371
|
-
chunkPos
|
|
25372
|
-
} = this;
|
|
25373
|
-
this.chunk = this.chunk2;
|
|
25374
|
-
this.chunkPos = this.chunk2Pos;
|
|
25375
|
-
this.chunk2 = chunk;
|
|
25376
|
-
this.chunk2Pos = chunkPos;
|
|
25377
|
-
this.chunkOff = this.pos - this.chunkPos;
|
|
25378
|
-
} else {
|
|
25379
|
-
this.chunk2 = this.chunk;
|
|
25380
|
-
this.chunk2Pos = this.chunkPos;
|
|
25381
|
-
let nextChunk = this.input.chunk(this.pos);
|
|
25382
|
-
let end = this.pos + nextChunk.length;
|
|
25383
|
-
this.chunk = end > this.range.to ? nextChunk.slice(0, this.range.to - this.pos) : nextChunk;
|
|
25384
|
-
this.chunkPos = this.pos;
|
|
25385
|
-
this.chunkOff = 0;
|
|
25386
|
-
}
|
|
25387
|
-
}
|
|
25388
|
-
readNext() {
|
|
25389
|
-
if (this.chunkOff >= this.chunk.length) {
|
|
25390
|
-
this.getChunk();
|
|
25391
|
-
if (this.chunkOff == this.chunk.length) return this.next = -1;
|
|
25392
|
-
}
|
|
25393
|
-
return this.next = this.chunk.charCodeAt(this.chunkOff);
|
|
25394
|
-
}
|
|
25395
|
-
/// Move the stream forward N (defaults to 1) code units. Returns
|
|
25396
|
-
/// the new value of [`next`](#lr.InputStream.next).
|
|
25397
|
-
advance(n = 1) {
|
|
25398
|
-
this.chunkOff += n;
|
|
25399
|
-
while (this.pos + n >= this.range.to) {
|
|
25400
|
-
if (this.rangeIndex == this.ranges.length - 1) return this.setDone();
|
|
25401
|
-
n -= this.range.to - this.pos;
|
|
25402
|
-
this.range = this.ranges[++this.rangeIndex];
|
|
25403
|
-
this.pos = this.range.from;
|
|
25404
|
-
}
|
|
25405
|
-
this.pos += n;
|
|
25406
|
-
if (this.pos >= this.token.lookAhead) this.token.lookAhead = this.pos + 1;
|
|
25407
|
-
return this.readNext();
|
|
25408
|
-
}
|
|
25409
|
-
setDone() {
|
|
25410
|
-
this.pos = this.chunkPos = this.end;
|
|
25411
|
-
this.range = this.ranges[this.rangeIndex = this.ranges.length - 1];
|
|
25412
|
-
this.chunk = "";
|
|
25413
|
-
return this.next = -1;
|
|
25414
|
-
}
|
|
25415
|
-
/// @internal
|
|
25416
|
-
reset(pos, token) {
|
|
25417
|
-
if (token) {
|
|
25418
|
-
this.token = token;
|
|
25419
|
-
token.start = pos;
|
|
25420
|
-
token.lookAhead = pos + 1;
|
|
25421
|
-
token.value = token.extended = -1;
|
|
25422
|
-
} else {
|
|
25423
|
-
this.token = nullToken;
|
|
25424
|
-
}
|
|
25425
|
-
if (this.pos != pos) {
|
|
25426
|
-
this.pos = pos;
|
|
25427
|
-
if (pos == this.end) {
|
|
25428
|
-
this.setDone();
|
|
25429
|
-
return this;
|
|
25430
|
-
}
|
|
25431
|
-
while (pos < this.range.from) this.range = this.ranges[--this.rangeIndex];
|
|
25432
|
-
while (pos >= this.range.to) this.range = this.ranges[++this.rangeIndex];
|
|
25433
|
-
if (pos >= this.chunkPos && pos < this.chunkPos + this.chunk.length) {
|
|
25434
|
-
this.chunkOff = pos - this.chunkPos;
|
|
25435
|
-
} else {
|
|
25436
|
-
this.chunk = "";
|
|
25437
|
-
this.chunkOff = 0;
|
|
25438
|
-
}
|
|
25439
|
-
this.readNext();
|
|
25440
|
-
}
|
|
25441
|
-
return this;
|
|
25442
|
-
}
|
|
25443
|
-
/// @internal
|
|
25444
|
-
read(from, to) {
|
|
25445
|
-
if (from >= this.chunkPos && to <= this.chunkPos + this.chunk.length) return this.chunk.slice(from - this.chunkPos, to - this.chunkPos);
|
|
25446
|
-
if (from >= this.chunk2Pos && to <= this.chunk2Pos + this.chunk2.length) return this.chunk2.slice(from - this.chunk2Pos, to - this.chunk2Pos);
|
|
25447
|
-
if (from >= this.range.from && to <= this.range.to) return this.input.read(from, to);
|
|
25448
|
-
let result = "";
|
|
25449
|
-
for (let r of this.ranges) {
|
|
25450
|
-
if (r.from >= to) break;
|
|
25451
|
-
if (r.to > from) result += this.input.read(Math.max(r.from, from), Math.min(r.to, to));
|
|
25452
|
-
}
|
|
25453
|
-
return result;
|
|
25454
|
-
}
|
|
25455
|
-
}
|
|
25456
|
-
/// @internal
|
|
25457
|
-
class TokenGroup {
|
|
25458
|
-
constructor(data, id) {
|
|
25459
|
-
this.data = data;
|
|
25460
|
-
this.id = id;
|
|
25461
|
-
}
|
|
25462
|
-
token(input, stack) {
|
|
25463
|
-
readToken(this.data, input, stack, this.id);
|
|
25464
|
-
}
|
|
25465
|
-
}
|
|
25466
|
-
TokenGroup.prototype.contextual = TokenGroup.prototype.fallback = TokenGroup.prototype.extend = false;
|
|
25467
|
-
/// `@external tokens` declarations in the grammar should resolve to
|
|
25468
|
-
/// an instance of this class.
|
|
25469
|
-
class ExternalTokenizer {
|
|
25470
|
-
/// Create a tokenizer. The first argument is the function that,
|
|
25471
|
-
/// given an input stream, scans for the types of tokens it
|
|
25472
|
-
/// recognizes at the stream's position, and calls
|
|
25473
|
-
/// [`acceptToken`](#lr.InputStream.acceptToken) when it finds
|
|
25474
|
-
/// one.
|
|
25475
|
-
constructor(
|
|
25476
|
-
/// @internal
|
|
25477
|
-
token, options = {}) {
|
|
25478
|
-
this.token = token;
|
|
25479
|
-
this.contextual = !!options.contextual;
|
|
25480
|
-
this.fallback = !!options.fallback;
|
|
25481
|
-
this.extend = !!options.extend;
|
|
25482
|
-
}
|
|
25483
|
-
}
|
|
25484
|
-
// Tokenizer data is stored a big uint16 array containing, for each
|
|
25485
|
-
// state:
|
|
25486
|
-
//
|
|
25487
|
-
// - A group bitmask, indicating what token groups are reachable from
|
|
25488
|
-
// this state, so that paths that can only lead to tokens not in
|
|
25489
|
-
// any of the current groups can be cut off early.
|
|
25490
|
-
//
|
|
25491
|
-
// - The position of the end of the state's sequence of accepting
|
|
25492
|
-
// tokens
|
|
25493
|
-
//
|
|
25494
|
-
// - The number of outgoing edges for the state
|
|
25495
|
-
//
|
|
25496
|
-
// - The accepting tokens, as (token id, group mask) pairs
|
|
25497
|
-
//
|
|
25498
|
-
// - The outgoing edges, as (start character, end character, state
|
|
25499
|
-
// index) triples, with end character being exclusive
|
|
25500
|
-
//
|
|
25501
|
-
// This function interprets that data, running through a stream as
|
|
25502
|
-
// long as new states with the a matching group mask can be reached,
|
|
25503
|
-
// and updating `input.token` when it matches a token.
|
|
25504
|
-
function readToken(data, input, stack, group) {
|
|
25505
|
-
let state = 0,
|
|
25506
|
-
groupMask = 1 << group,
|
|
25507
|
-
{
|
|
25508
|
-
parser
|
|
25509
|
-
} = stack.p,
|
|
25510
|
-
{
|
|
25511
|
-
dialect
|
|
25512
|
-
} = parser;
|
|
25513
|
-
scan: for (;;) {
|
|
25514
|
-
if ((groupMask & data[state]) == 0) break;
|
|
25515
|
-
let accEnd = data[state + 1];
|
|
25516
|
-
// Check whether this state can lead to a token in the current group
|
|
25517
|
-
// Accept tokens in this state, possibly overwriting
|
|
25518
|
-
// lower-precedence / shorter tokens
|
|
25519
|
-
for (let i = state + 3; i < accEnd; i += 2) if ((data[i + 1] & groupMask) > 0) {
|
|
25520
|
-
let term = data[i];
|
|
25521
|
-
if (dialect.allows(term) && (input.token.value == -1 || input.token.value == term || parser.overrides(term, input.token.value))) {
|
|
25522
|
-
input.acceptToken(term);
|
|
25523
|
-
break;
|
|
25524
|
-
}
|
|
25525
|
-
}
|
|
25526
|
-
let next = input.next,
|
|
25527
|
-
low = 0,
|
|
25528
|
-
high = data[state + 2];
|
|
25529
|
-
// Special case for EOF
|
|
25530
|
-
if (input.next < 0 && high > low && data[accEnd + high * 3 - 3] == 65535 /* End */) {
|
|
25531
|
-
state = data[accEnd + high * 3 - 1];
|
|
25532
|
-
continue scan;
|
|
25533
|
-
}
|
|
25534
|
-
// Do a binary search on the state's edges
|
|
25535
|
-
for (; low < high;) {
|
|
25536
|
-
let mid = low + high >> 1;
|
|
25537
|
-
let index = accEnd + mid + (mid << 1);
|
|
25538
|
-
let from = data[index],
|
|
25539
|
-
to = data[index + 1];
|
|
25540
|
-
if (next < from) high = mid;else if (next >= to) low = mid + 1;else {
|
|
25541
|
-
state = data[index + 2];
|
|
25542
|
-
input.advance();
|
|
25543
|
-
continue scan;
|
|
25544
|
-
}
|
|
25545
|
-
}
|
|
25546
|
-
break;
|
|
25547
|
-
}
|
|
25548
|
-
}
|
|
25549
|
-
|
|
25550
|
-
// See lezer-generator/src/encode.ts for comments about the encoding
|
|
25551
|
-
// used here
|
|
25552
|
-
function decodeArray(input, Type = Uint16Array) {
|
|
25553
|
-
if (typeof input != "string") return input;
|
|
25554
|
-
let array = null;
|
|
25555
|
-
for (let pos = 0, out = 0; pos < input.length;) {
|
|
25556
|
-
let value = 0;
|
|
25557
|
-
for (;;) {
|
|
25558
|
-
let next = input.charCodeAt(pos++),
|
|
25559
|
-
stop = false;
|
|
25560
|
-
if (next == 126 /* BigValCode */) {
|
|
25561
|
-
value = 65535 /* BigVal */;
|
|
25562
|
-
break;
|
|
25563
|
-
}
|
|
25564
|
-
if (next >= 92 /* Gap2 */) next--;
|
|
25565
|
-
if (next >= 34 /* Gap1 */) next--;
|
|
25566
|
-
let digit = next - 32 /* Start */;
|
|
25567
|
-
if (digit >= 46 /* Base */) {
|
|
25568
|
-
digit -= 46 /* Base */;
|
|
25569
|
-
stop = true;
|
|
25570
|
-
}
|
|
25571
|
-
value += digit;
|
|
25572
|
-
if (stop) break;
|
|
25573
|
-
value *= 46 /* Base */;
|
|
25574
|
-
}
|
|
25575
|
-
if (array) array[out++] = value;else array = new Type(value);
|
|
25576
|
-
}
|
|
25577
|
-
return array;
|
|
25578
|
-
}
|
|
25579
|
-
|
|
25580
|
-
// Environment variable used to control console output
|
|
25581
|
-
const verbose = typeof browser$1$1 != "undefined" && browser$1$1.env && /\bparse\b/.test(browser$1$1.env.LOG);
|
|
25582
|
-
let stackIDs = null;
|
|
25583
|
-
var Safety;
|
|
25584
|
-
(function (Safety) {
|
|
25585
|
-
Safety[Safety["Margin"] = 25] = "Margin";
|
|
25586
|
-
})(Safety || (Safety = {}));
|
|
25587
|
-
function cutAt(tree, pos, side) {
|
|
25588
|
-
let cursor = tree.cursor(IterMode.IncludeAnonymous);
|
|
25589
|
-
cursor.moveTo(pos);
|
|
25590
|
-
for (;;) {
|
|
25591
|
-
if (!(side < 0 ? cursor.childBefore(pos) : cursor.childAfter(pos))) for (;;) {
|
|
25592
|
-
if ((side < 0 ? cursor.to < pos : cursor.from > pos) && !cursor.type.isError) return side < 0 ? Math.max(0, Math.min(cursor.to - 1, pos - 25 /* Margin */)) : Math.min(tree.length, Math.max(cursor.from + 1, pos + 25 /* Margin */));
|
|
25593
|
-
if (side < 0 ? cursor.prevSibling() : cursor.nextSibling()) break;
|
|
25594
|
-
if (!cursor.parent()) return side < 0 ? 0 : tree.length;
|
|
25595
|
-
}
|
|
25596
|
-
}
|
|
25597
|
-
}
|
|
25598
|
-
class FragmentCursor {
|
|
25599
|
-
constructor(fragments, nodeSet) {
|
|
25600
|
-
this.fragments = fragments;
|
|
25601
|
-
this.nodeSet = nodeSet;
|
|
25602
|
-
this.i = 0;
|
|
25603
|
-
this.fragment = null;
|
|
25604
|
-
this.safeFrom = -1;
|
|
25605
|
-
this.safeTo = -1;
|
|
25606
|
-
this.trees = [];
|
|
25607
|
-
this.start = [];
|
|
25608
|
-
this.index = [];
|
|
25609
|
-
this.nextFragment();
|
|
25610
|
-
}
|
|
25611
|
-
nextFragment() {
|
|
25612
|
-
let fr = this.fragment = this.i == this.fragments.length ? null : this.fragments[this.i++];
|
|
25613
|
-
if (fr) {
|
|
25614
|
-
this.safeFrom = fr.openStart ? cutAt(fr.tree, fr.from + fr.offset, 1) - fr.offset : fr.from;
|
|
25615
|
-
this.safeTo = fr.openEnd ? cutAt(fr.tree, fr.to + fr.offset, -1) - fr.offset : fr.to;
|
|
25616
|
-
while (this.trees.length) {
|
|
25617
|
-
this.trees.pop();
|
|
25618
|
-
this.start.pop();
|
|
25619
|
-
this.index.pop();
|
|
25620
|
-
}
|
|
25621
|
-
this.trees.push(fr.tree);
|
|
25622
|
-
this.start.push(-fr.offset);
|
|
25623
|
-
this.index.push(0);
|
|
25624
|
-
this.nextStart = this.safeFrom;
|
|
25625
|
-
} else {
|
|
25626
|
-
this.nextStart = 1e9;
|
|
25627
|
-
}
|
|
25628
|
-
}
|
|
25629
|
-
// `pos` must be >= any previously given `pos` for this cursor
|
|
25630
|
-
nodeAt(pos) {
|
|
25631
|
-
if (pos < this.nextStart) return null;
|
|
25632
|
-
while (this.fragment && this.safeTo <= pos) this.nextFragment();
|
|
25633
|
-
if (!this.fragment) return null;
|
|
25634
|
-
for (;;) {
|
|
25635
|
-
let last = this.trees.length - 1;
|
|
25636
|
-
if (last < 0) {
|
|
25637
|
-
// End of tree
|
|
25638
|
-
this.nextFragment();
|
|
25639
|
-
return null;
|
|
25640
|
-
}
|
|
25641
|
-
let top = this.trees[last],
|
|
25642
|
-
index = this.index[last];
|
|
25643
|
-
if (index == top.children.length) {
|
|
25644
|
-
this.trees.pop();
|
|
25645
|
-
this.start.pop();
|
|
25646
|
-
this.index.pop();
|
|
25647
|
-
continue;
|
|
25648
|
-
}
|
|
25649
|
-
let next = top.children[index];
|
|
25650
|
-
let start = this.start[last] + top.positions[index];
|
|
25651
|
-
if (start > pos) {
|
|
25652
|
-
this.nextStart = start;
|
|
25653
|
-
return null;
|
|
25654
|
-
}
|
|
25655
|
-
if (next instanceof Tree) {
|
|
25656
|
-
if (start == pos) {
|
|
25657
|
-
if (start < this.safeFrom) return null;
|
|
25658
|
-
let end = start + next.length;
|
|
25659
|
-
if (end <= this.safeTo) {
|
|
25660
|
-
let lookAhead = next.prop(NodeProp.lookAhead);
|
|
25661
|
-
if (!lookAhead || end + lookAhead < this.fragment.to) return next;
|
|
25662
|
-
}
|
|
25663
|
-
}
|
|
25664
|
-
this.index[last]++;
|
|
25665
|
-
if (start + next.length >= Math.max(this.safeFrom, pos)) {
|
|
25666
|
-
// Enter this node
|
|
25667
|
-
this.trees.push(next);
|
|
25668
|
-
this.start.push(start);
|
|
25669
|
-
this.index.push(0);
|
|
25670
|
-
}
|
|
25671
|
-
} else {
|
|
25672
|
-
this.index[last]++;
|
|
25673
|
-
this.nextStart = start + next.length;
|
|
25674
|
-
}
|
|
25675
|
-
}
|
|
25676
|
-
}
|
|
25677
|
-
}
|
|
25678
|
-
class TokenCache {
|
|
25679
|
-
constructor(parser, stream) {
|
|
25680
|
-
this.stream = stream;
|
|
25681
|
-
this.tokens = [];
|
|
25682
|
-
this.mainToken = null;
|
|
25683
|
-
this.actions = [];
|
|
25684
|
-
this.tokens = parser.tokenizers.map(_ => new CachedToken());
|
|
25685
|
-
}
|
|
25686
|
-
getActions(stack) {
|
|
25687
|
-
let actionIndex = 0;
|
|
25688
|
-
let main = null;
|
|
25689
|
-
let {
|
|
25690
|
-
parser
|
|
25691
|
-
} = stack.p,
|
|
25692
|
-
{
|
|
25693
|
-
tokenizers
|
|
25694
|
-
} = parser;
|
|
25695
|
-
let mask = parser.stateSlot(stack.state, 3 /* TokenizerMask */);
|
|
25696
|
-
let context = stack.curContext ? stack.curContext.hash : 0;
|
|
25697
|
-
let lookAhead = 0;
|
|
25698
|
-
for (let i = 0; i < tokenizers.length; i++) {
|
|
25699
|
-
if ((1 << i & mask) == 0) continue;
|
|
25700
|
-
let tokenizer = tokenizers[i],
|
|
25701
|
-
token = this.tokens[i];
|
|
25702
|
-
if (main && !tokenizer.fallback) continue;
|
|
25703
|
-
if (tokenizer.contextual || token.start != stack.pos || token.mask != mask || token.context != context) {
|
|
25704
|
-
this.updateCachedToken(token, tokenizer, stack);
|
|
25705
|
-
token.mask = mask;
|
|
25706
|
-
token.context = context;
|
|
25707
|
-
}
|
|
25708
|
-
if (token.lookAhead > token.end + 25 /* Margin */) lookAhead = Math.max(token.lookAhead, lookAhead);
|
|
25709
|
-
if (token.value != 0 /* Err */) {
|
|
25710
|
-
let startIndex = actionIndex;
|
|
25711
|
-
if (token.extended > -1) actionIndex = this.addActions(stack, token.extended, token.end, actionIndex);
|
|
25712
|
-
actionIndex = this.addActions(stack, token.value, token.end, actionIndex);
|
|
25713
|
-
if (!tokenizer.extend) {
|
|
25714
|
-
main = token;
|
|
25715
|
-
if (actionIndex > startIndex) break;
|
|
25716
|
-
}
|
|
25717
|
-
}
|
|
25718
|
-
}
|
|
25719
|
-
while (this.actions.length > actionIndex) this.actions.pop();
|
|
25720
|
-
if (lookAhead) stack.setLookAhead(lookAhead);
|
|
25721
|
-
if (!main && stack.pos == this.stream.end) {
|
|
25722
|
-
main = new CachedToken();
|
|
25723
|
-
main.value = stack.p.parser.eofTerm;
|
|
25724
|
-
main.start = main.end = stack.pos;
|
|
25725
|
-
actionIndex = this.addActions(stack, main.value, main.end, actionIndex);
|
|
25726
|
-
}
|
|
25727
|
-
this.mainToken = main;
|
|
25728
|
-
return this.actions;
|
|
25729
|
-
}
|
|
25730
|
-
getMainToken(stack) {
|
|
25731
|
-
if (this.mainToken) return this.mainToken;
|
|
25732
|
-
let main = new CachedToken(),
|
|
25733
|
-
{
|
|
25734
|
-
pos,
|
|
25735
|
-
p
|
|
25736
|
-
} = stack;
|
|
25737
|
-
main.start = pos;
|
|
25738
|
-
main.end = Math.min(pos + 1, p.stream.end);
|
|
25739
|
-
main.value = pos == p.stream.end ? p.parser.eofTerm : 0 /* Err */;
|
|
25740
|
-
return main;
|
|
25741
|
-
}
|
|
25742
|
-
updateCachedToken(token, tokenizer, stack) {
|
|
25743
|
-
tokenizer.token(this.stream.reset(stack.pos, token), stack);
|
|
25744
|
-
if (token.value > -1) {
|
|
25745
|
-
let {
|
|
25746
|
-
parser
|
|
25747
|
-
} = stack.p;
|
|
25748
|
-
for (let i = 0; i < parser.specialized.length; i++) if (parser.specialized[i] == token.value) {
|
|
25749
|
-
let result = parser.specializers[i](this.stream.read(token.start, token.end), stack);
|
|
25750
|
-
if (result >= 0 && stack.p.parser.dialect.allows(result >> 1)) {
|
|
25751
|
-
if ((result & 1) == 0 /* Specialize */) token.value = result >> 1;else token.extended = result >> 1;
|
|
25752
|
-
break;
|
|
25753
|
-
}
|
|
25754
|
-
}
|
|
25755
|
-
} else {
|
|
25756
|
-
token.value = 0 /* Err */;
|
|
25757
|
-
token.end = Math.min(stack.p.stream.end, stack.pos + 1);
|
|
25758
|
-
}
|
|
25759
|
-
}
|
|
25760
|
-
putAction(action, token, end, index) {
|
|
25761
|
-
// Don't add duplicate actions
|
|
25762
|
-
for (let i = 0; i < index; i += 3) if (this.actions[i] == action) return index;
|
|
25763
|
-
this.actions[index++] = action;
|
|
25764
|
-
this.actions[index++] = token;
|
|
25765
|
-
this.actions[index++] = end;
|
|
25766
|
-
return index;
|
|
25767
|
-
}
|
|
25768
|
-
addActions(stack, token, end, index) {
|
|
25769
|
-
let {
|
|
25770
|
-
state
|
|
25771
|
-
} = stack,
|
|
25772
|
-
{
|
|
25773
|
-
parser
|
|
25774
|
-
} = stack.p,
|
|
25775
|
-
{
|
|
25776
|
-
data
|
|
25777
|
-
} = parser;
|
|
25778
|
-
for (let set = 0; set < 2; set++) {
|
|
25779
|
-
for (let i = parser.stateSlot(state, set ? 2 /* Skip */ : 1 /* Actions */);; i += 3) {
|
|
25780
|
-
if (data[i] == 65535 /* End */) {
|
|
25781
|
-
if (data[i + 1] == 1 /* Next */) {
|
|
25782
|
-
i = pair(data, i + 2);
|
|
25783
|
-
} else {
|
|
25784
|
-
if (index == 0 && data[i + 1] == 2 /* Other */) index = this.putAction(pair(data, i + 2), token, end, index);
|
|
25785
|
-
break;
|
|
25786
|
-
}
|
|
25787
|
-
}
|
|
25788
|
-
if (data[i] == token) index = this.putAction(pair(data, i + 1), token, end, index);
|
|
25789
|
-
}
|
|
25790
|
-
}
|
|
25791
|
-
return index;
|
|
25792
|
-
}
|
|
25793
|
-
}
|
|
25794
|
-
var Rec;
|
|
25795
|
-
(function (Rec) {
|
|
25796
|
-
Rec[Rec["Distance"] = 5] = "Distance";
|
|
25797
|
-
Rec[Rec["MaxRemainingPerStep"] = 3] = "MaxRemainingPerStep";
|
|
25798
|
-
// When two stacks have been running independently long enough to
|
|
25799
|
-
// add this many elements to their buffers, prune one.
|
|
25800
|
-
Rec[Rec["MinBufferLengthPrune"] = 500] = "MinBufferLengthPrune";
|
|
25801
|
-
Rec[Rec["ForceReduceLimit"] = 10] = "ForceReduceLimit";
|
|
25802
|
-
// Once a stack reaches this depth (in .stack.length) force-reduce
|
|
25803
|
-
// it back to CutTo to avoid creating trees that overflow the stack
|
|
25804
|
-
// on recursive traversal.
|
|
25805
|
-
Rec[Rec["CutDepth"] = 15000] = "CutDepth";
|
|
25806
|
-
Rec[Rec["CutTo"] = 9000] = "CutTo";
|
|
25807
|
-
})(Rec || (Rec = {}));
|
|
25808
|
-
class Parse {
|
|
25809
|
-
constructor(parser, input, fragments, ranges) {
|
|
25810
|
-
this.parser = parser;
|
|
25811
|
-
this.input = input;
|
|
25812
|
-
this.ranges = ranges;
|
|
25813
|
-
this.recovering = 0;
|
|
25814
|
-
this.nextStackID = 0x2654; // ♔, ♕, ♖, ♗, ♘, ♙, ♠, ♡, ♢, ♣, ♤, ♥, ♦, ♧
|
|
25815
|
-
this.minStackPos = 0;
|
|
25816
|
-
this.reused = [];
|
|
25817
|
-
this.stoppedAt = null;
|
|
25818
|
-
this.stream = new InputStream(input, ranges);
|
|
25819
|
-
this.tokens = new TokenCache(parser, this.stream);
|
|
25820
|
-
this.topTerm = parser.top[1];
|
|
25821
|
-
let {
|
|
25822
|
-
from
|
|
25823
|
-
} = ranges[0];
|
|
25824
|
-
this.stacks = [Stack.start(this, parser.top[0], from)];
|
|
25825
|
-
this.fragments = fragments.length && this.stream.end - from > parser.bufferLength * 4 ? new FragmentCursor(fragments, parser.nodeSet) : null;
|
|
25826
|
-
}
|
|
25827
|
-
get parsedPos() {
|
|
25828
|
-
return this.minStackPos;
|
|
25829
|
-
}
|
|
25830
|
-
// Move the parser forward. This will process all parse stacks at
|
|
25831
|
-
// `this.pos` and try to advance them to a further position. If no
|
|
25832
|
-
// stack for such a position is found, it'll start error-recovery.
|
|
25833
|
-
//
|
|
25834
|
-
// When the parse is finished, this will return a syntax tree. When
|
|
25835
|
-
// not, it returns `null`.
|
|
25836
|
-
advance() {
|
|
25837
|
-
let stacks = this.stacks,
|
|
25838
|
-
pos = this.minStackPos;
|
|
25839
|
-
// This will hold stacks beyond `pos`.
|
|
25840
|
-
let newStacks = this.stacks = [];
|
|
25841
|
-
let stopped, stoppedTokens;
|
|
25842
|
-
// Keep advancing any stacks at `pos` until they either move
|
|
25843
|
-
// forward or can't be advanced. Gather stacks that can't be
|
|
25844
|
-
// advanced further in `stopped`.
|
|
25845
|
-
for (let i = 0; i < stacks.length; i++) {
|
|
25846
|
-
let stack = stacks[i];
|
|
25847
|
-
for (;;) {
|
|
25848
|
-
this.tokens.mainToken = null;
|
|
25849
|
-
if (stack.pos > pos) {
|
|
25850
|
-
newStacks.push(stack);
|
|
25851
|
-
} else if (this.advanceStack(stack, newStacks, stacks)) {
|
|
25852
|
-
continue;
|
|
25853
|
-
} else {
|
|
25854
|
-
if (!stopped) {
|
|
25855
|
-
stopped = [];
|
|
25856
|
-
stoppedTokens = [];
|
|
25857
|
-
}
|
|
25858
|
-
stopped.push(stack);
|
|
25859
|
-
let tok = this.tokens.getMainToken(stack);
|
|
25860
|
-
stoppedTokens.push(tok.value, tok.end);
|
|
25861
|
-
}
|
|
25862
|
-
break;
|
|
25863
|
-
}
|
|
25864
|
-
}
|
|
25865
|
-
if (!newStacks.length) {
|
|
25866
|
-
let finished = stopped && findFinished(stopped);
|
|
25867
|
-
if (finished) return this.stackToTree(finished);
|
|
25868
|
-
if (this.parser.strict) {
|
|
25869
|
-
if (verbose && stopped) console.log("Stuck with token " + (this.tokens.mainToken ? this.parser.getName(this.tokens.mainToken.value) : "none"));
|
|
25870
|
-
throw new SyntaxError("No parse at " + pos);
|
|
25871
|
-
}
|
|
25872
|
-
if (!this.recovering) this.recovering = 5 /* Distance */;
|
|
25873
|
-
}
|
|
25874
|
-
if (this.recovering && stopped) {
|
|
25875
|
-
let finished = this.stoppedAt != null && stopped[0].pos > this.stoppedAt ? stopped[0] : this.runRecovery(stopped, stoppedTokens, newStacks);
|
|
25876
|
-
if (finished) return this.stackToTree(finished.forceAll());
|
|
25877
|
-
}
|
|
25878
|
-
if (this.recovering) {
|
|
25879
|
-
let maxRemaining = this.recovering == 1 ? 1 : this.recovering * 3 /* MaxRemainingPerStep */;
|
|
25880
|
-
if (newStacks.length > maxRemaining) {
|
|
25881
|
-
newStacks.sort((a, b) => b.score - a.score);
|
|
25882
|
-
while (newStacks.length > maxRemaining) newStacks.pop();
|
|
25883
|
-
}
|
|
25884
|
-
if (newStacks.some(s => s.reducePos > pos)) this.recovering--;
|
|
25885
|
-
} else if (newStacks.length > 1) {
|
|
25886
|
-
// Prune stacks that are in the same state, or that have been
|
|
25887
|
-
// running without splitting for a while, to avoid getting stuck
|
|
25888
|
-
// with multiple successful stacks running endlessly on.
|
|
25889
|
-
outer: for (let i = 0; i < newStacks.length - 1; i++) {
|
|
25890
|
-
let stack = newStacks[i];
|
|
25891
|
-
for (let j = i + 1; j < newStacks.length; j++) {
|
|
25892
|
-
let other = newStacks[j];
|
|
25893
|
-
if (stack.sameState(other) || stack.buffer.length > 500 /* MinBufferLengthPrune */ && other.buffer.length > 500 /* MinBufferLengthPrune */) {
|
|
25894
|
-
if ((stack.score - other.score || stack.buffer.length - other.buffer.length) > 0) {
|
|
25895
|
-
newStacks.splice(j--, 1);
|
|
25896
|
-
} else {
|
|
25897
|
-
newStacks.splice(i--, 1);
|
|
25898
|
-
continue outer;
|
|
25899
|
-
}
|
|
25900
|
-
}
|
|
25901
|
-
}
|
|
25902
|
-
}
|
|
25903
|
-
}
|
|
25904
|
-
this.minStackPos = newStacks[0].pos;
|
|
25905
|
-
for (let i = 1; i < newStacks.length; i++) if (newStacks[i].pos < this.minStackPos) this.minStackPos = newStacks[i].pos;
|
|
25906
|
-
return null;
|
|
25907
|
-
}
|
|
25908
|
-
stopAt(pos) {
|
|
25909
|
-
if (this.stoppedAt != null && this.stoppedAt < pos) throw new RangeError("Can't move stoppedAt forward");
|
|
25910
|
-
this.stoppedAt = pos;
|
|
25911
|
-
}
|
|
25912
|
-
// Returns an updated version of the given stack, or null if the
|
|
25913
|
-
// stack can't advance normally. When `split` and `stacks` are
|
|
25914
|
-
// given, stacks split off by ambiguous operations will be pushed to
|
|
25915
|
-
// `split`, or added to `stacks` if they move `pos` forward.
|
|
25916
|
-
advanceStack(stack, stacks, split) {
|
|
25917
|
-
let start = stack.pos,
|
|
25918
|
-
{
|
|
25919
|
-
parser
|
|
25920
|
-
} = this;
|
|
25921
|
-
let base = verbose ? this.stackID(stack) + " -> " : "";
|
|
25922
|
-
if (this.stoppedAt != null && start > this.stoppedAt) return stack.forceReduce() ? stack : null;
|
|
25923
|
-
if (this.fragments) {
|
|
25924
|
-
let strictCx = stack.curContext && stack.curContext.tracker.strict,
|
|
25925
|
-
cxHash = strictCx ? stack.curContext.hash : 0;
|
|
25926
|
-
for (let cached = this.fragments.nodeAt(start); cached;) {
|
|
25927
|
-
let match = this.parser.nodeSet.types[cached.type.id] == cached.type ? parser.getGoto(stack.state, cached.type.id) : -1;
|
|
25928
|
-
if (match > -1 && cached.length && (!strictCx || (cached.prop(NodeProp.contextHash) || 0) == cxHash)) {
|
|
25929
|
-
stack.useNode(cached, match);
|
|
25930
|
-
if (verbose) console.log(base + this.stackID(stack) + ` (via reuse of ${parser.getName(cached.type.id)})`);
|
|
25931
|
-
return true;
|
|
25932
|
-
}
|
|
25933
|
-
if (!(cached instanceof Tree) || cached.children.length == 0 || cached.positions[0] > 0) break;
|
|
25934
|
-
let inner = cached.children[0];
|
|
25935
|
-
if (inner instanceof Tree && cached.positions[0] == 0) cached = inner;else break;
|
|
25936
|
-
}
|
|
25937
|
-
}
|
|
25938
|
-
let defaultReduce = parser.stateSlot(stack.state, 4 /* DefaultReduce */);
|
|
25939
|
-
if (defaultReduce > 0) {
|
|
25940
|
-
stack.reduce(defaultReduce);
|
|
25941
|
-
if (verbose) console.log(base + this.stackID(stack) + ` (via always-reduce ${parser.getName(defaultReduce & 65535 /* ValueMask */)})`);
|
|
25942
|
-
return true;
|
|
25943
|
-
}
|
|
25944
|
-
if (stack.stack.length >= 15000 /* CutDepth */) {
|
|
25945
|
-
while (stack.stack.length > 9000 /* CutTo */ && stack.forceReduce()) {}
|
|
25946
|
-
}
|
|
25947
|
-
let actions = this.tokens.getActions(stack);
|
|
25948
|
-
for (let i = 0; i < actions.length;) {
|
|
25949
|
-
let action = actions[i++],
|
|
25950
|
-
term = actions[i++],
|
|
25951
|
-
end = actions[i++];
|
|
25952
|
-
let last = i == actions.length || !split;
|
|
25953
|
-
let localStack = last ? stack : stack.split();
|
|
25954
|
-
localStack.apply(action, term, end);
|
|
25955
|
-
if (verbose) console.log(base + this.stackID(localStack) + ` (via ${(action & 65536 /* ReduceFlag */) == 0 ? "shift" : `reduce of ${parser.getName(action & 65535 /* ValueMask */)}`} for ${parser.getName(term)} @ ${start}${localStack == stack ? "" : ", split"})`);
|
|
25956
|
-
if (last) return true;else if (localStack.pos > start) stacks.push(localStack);else split.push(localStack);
|
|
25957
|
-
}
|
|
25958
|
-
return false;
|
|
25959
|
-
}
|
|
25960
|
-
// Advance a given stack forward as far as it will go. Returns the
|
|
25961
|
-
// (possibly updated) stack if it got stuck, or null if it moved
|
|
25962
|
-
// forward and was given to `pushStackDedup`.
|
|
25963
|
-
advanceFully(stack, newStacks) {
|
|
25964
|
-
let pos = stack.pos;
|
|
25965
|
-
for (;;) {
|
|
25966
|
-
if (!this.advanceStack(stack, null, null)) return false;
|
|
25967
|
-
if (stack.pos > pos) {
|
|
25968
|
-
pushStackDedup(stack, newStacks);
|
|
25969
|
-
return true;
|
|
25970
|
-
}
|
|
25971
|
-
}
|
|
25972
|
-
}
|
|
25973
|
-
runRecovery(stacks, tokens, newStacks) {
|
|
25974
|
-
let finished = null,
|
|
25975
|
-
restarted = false;
|
|
25976
|
-
for (let i = 0; i < stacks.length; i++) {
|
|
25977
|
-
let stack = stacks[i],
|
|
25978
|
-
token = tokens[i << 1],
|
|
25979
|
-
tokenEnd = tokens[(i << 1) + 1];
|
|
25980
|
-
let base = verbose ? this.stackID(stack) + " -> " : "";
|
|
25981
|
-
if (stack.deadEnd) {
|
|
25982
|
-
if (restarted) continue;
|
|
25983
|
-
restarted = true;
|
|
25984
|
-
stack.restart();
|
|
25985
|
-
if (verbose) console.log(base + this.stackID(stack) + " (restarted)");
|
|
25986
|
-
let done = this.advanceFully(stack, newStacks);
|
|
25987
|
-
if (done) continue;
|
|
25988
|
-
}
|
|
25989
|
-
let force = stack.split(),
|
|
25990
|
-
forceBase = base;
|
|
25991
|
-
for (let j = 0; force.forceReduce() && j < 10 /* ForceReduceLimit */; j++) {
|
|
25992
|
-
if (verbose) console.log(forceBase + this.stackID(force) + " (via force-reduce)");
|
|
25993
|
-
let done = this.advanceFully(force, newStacks);
|
|
25994
|
-
if (done) break;
|
|
25995
|
-
if (verbose) forceBase = this.stackID(force) + " -> ";
|
|
25996
|
-
}
|
|
25997
|
-
for (let insert of stack.recoverByInsert(token)) {
|
|
25998
|
-
if (verbose) console.log(base + this.stackID(insert) + " (via recover-insert)");
|
|
25999
|
-
this.advanceFully(insert, newStacks);
|
|
26000
|
-
}
|
|
26001
|
-
if (this.stream.end > stack.pos) {
|
|
26002
|
-
if (tokenEnd == stack.pos) {
|
|
26003
|
-
tokenEnd++;
|
|
26004
|
-
token = 0 /* Err */;
|
|
26005
|
-
}
|
|
26006
|
-
stack.recoverByDelete(token, tokenEnd);
|
|
26007
|
-
if (verbose) console.log(base + this.stackID(stack) + ` (via recover-delete ${this.parser.getName(token)})`);
|
|
26008
|
-
pushStackDedup(stack, newStacks);
|
|
26009
|
-
} else if (!finished || finished.score < stack.score) {
|
|
26010
|
-
finished = stack;
|
|
26011
|
-
}
|
|
26012
|
-
}
|
|
26013
|
-
return finished;
|
|
26014
|
-
}
|
|
26015
|
-
// Convert the stack's buffer to a syntax tree.
|
|
26016
|
-
stackToTree(stack) {
|
|
26017
|
-
stack.close();
|
|
26018
|
-
return Tree.build({
|
|
26019
|
-
buffer: StackBufferCursor.create(stack),
|
|
26020
|
-
nodeSet: this.parser.nodeSet,
|
|
26021
|
-
topID: this.topTerm,
|
|
26022
|
-
maxBufferLength: this.parser.bufferLength,
|
|
26023
|
-
reused: this.reused,
|
|
26024
|
-
start: this.ranges[0].from,
|
|
26025
|
-
length: stack.pos - this.ranges[0].from,
|
|
26026
|
-
minRepeatType: this.parser.minRepeatTerm
|
|
26027
|
-
});
|
|
26028
|
-
}
|
|
26029
|
-
stackID(stack) {
|
|
26030
|
-
let id = (stackIDs || (stackIDs = new WeakMap())).get(stack);
|
|
26031
|
-
if (!id) stackIDs.set(stack, id = String.fromCodePoint(this.nextStackID++));
|
|
26032
|
-
return id + stack;
|
|
26033
|
-
}
|
|
26034
|
-
}
|
|
26035
|
-
function pushStackDedup(stack, newStacks) {
|
|
26036
|
-
for (let i = 0; i < newStacks.length; i++) {
|
|
26037
|
-
let other = newStacks[i];
|
|
26038
|
-
if (other.pos == stack.pos && other.sameState(stack)) {
|
|
26039
|
-
if (newStacks[i].score < stack.score) newStacks[i] = stack;
|
|
26040
|
-
return;
|
|
26041
|
-
}
|
|
26042
|
-
}
|
|
26043
|
-
newStacks.push(stack);
|
|
26044
|
-
}
|
|
26045
|
-
class Dialect {
|
|
26046
|
-
constructor(source, flags, disabled) {
|
|
26047
|
-
this.source = source;
|
|
26048
|
-
this.flags = flags;
|
|
26049
|
-
this.disabled = disabled;
|
|
26050
|
-
}
|
|
26051
|
-
allows(term) {
|
|
26052
|
-
return !this.disabled || this.disabled[term] == 0;
|
|
26053
|
-
}
|
|
26054
|
-
}
|
|
26055
|
-
/// Holds the parse tables for a given grammar, as generated by
|
|
26056
|
-
/// `lezer-generator`, and provides [methods](#common.Parser) to parse
|
|
26057
|
-
/// content with.
|
|
26058
|
-
class LRParser extends Parser {
|
|
26059
|
-
/// @internal
|
|
26060
|
-
constructor(spec) {
|
|
26061
|
-
super();
|
|
26062
|
-
/// @internal
|
|
26063
|
-
this.wrappers = [];
|
|
26064
|
-
if (spec.version != 14 /* Version */) throw new RangeError(`Parser version (${spec.version}) doesn't match runtime version (${14 /* Version */})`);
|
|
26065
|
-
let nodeNames = spec.nodeNames.split(" ");
|
|
26066
|
-
this.minRepeatTerm = nodeNames.length;
|
|
26067
|
-
for (let i = 0; i < spec.repeatNodeCount; i++) nodeNames.push("");
|
|
26068
|
-
let topTerms = Object.keys(spec.topRules).map(r => spec.topRules[r][1]);
|
|
26069
|
-
let nodeProps = [];
|
|
26070
|
-
for (let i = 0; i < nodeNames.length; i++) nodeProps.push([]);
|
|
26071
|
-
function setProp(nodeID, prop, value) {
|
|
26072
|
-
nodeProps[nodeID].push([prop, prop.deserialize(String(value))]);
|
|
26073
|
-
}
|
|
26074
|
-
if (spec.nodeProps) for (let propSpec of spec.nodeProps) {
|
|
26075
|
-
let prop = propSpec[0];
|
|
26076
|
-
if (typeof prop == "string") prop = NodeProp[prop];
|
|
26077
|
-
for (let i = 1; i < propSpec.length;) {
|
|
26078
|
-
let next = propSpec[i++];
|
|
26079
|
-
if (next >= 0) {
|
|
26080
|
-
setProp(next, prop, propSpec[i++]);
|
|
26081
|
-
} else {
|
|
26082
|
-
let value = propSpec[i + -next];
|
|
26083
|
-
for (let j = -next; j > 0; j--) setProp(propSpec[i++], prop, value);
|
|
26084
|
-
i++;
|
|
26085
|
-
}
|
|
26086
|
-
}
|
|
26087
|
-
}
|
|
26088
|
-
this.nodeSet = new NodeSet(nodeNames.map((name, i) => NodeType.define({
|
|
26089
|
-
name: i >= this.minRepeatTerm ? undefined : name,
|
|
26090
|
-
id: i,
|
|
26091
|
-
props: nodeProps[i],
|
|
26092
|
-
top: topTerms.indexOf(i) > -1,
|
|
26093
|
-
error: i == 0,
|
|
26094
|
-
skipped: spec.skippedNodes && spec.skippedNodes.indexOf(i) > -1
|
|
26095
|
-
})));
|
|
26096
|
-
if (spec.propSources) this.nodeSet = this.nodeSet.extend(...spec.propSources);
|
|
26097
|
-
this.strict = false;
|
|
26098
|
-
this.bufferLength = DefaultBufferLength;
|
|
26099
|
-
let tokenArray = decodeArray(spec.tokenData);
|
|
26100
|
-
this.context = spec.context;
|
|
26101
|
-
this.specialized = new Uint16Array(spec.specialized ? spec.specialized.length : 0);
|
|
26102
|
-
this.specializers = [];
|
|
26103
|
-
if (spec.specialized) for (let i = 0; i < spec.specialized.length; i++) {
|
|
26104
|
-
this.specialized[i] = spec.specialized[i].term;
|
|
26105
|
-
this.specializers[i] = spec.specialized[i].get;
|
|
26106
|
-
}
|
|
26107
|
-
this.states = decodeArray(spec.states, Uint32Array);
|
|
26108
|
-
this.data = decodeArray(spec.stateData);
|
|
26109
|
-
this.goto = decodeArray(spec.goto);
|
|
26110
|
-
this.maxTerm = spec.maxTerm;
|
|
26111
|
-
this.tokenizers = spec.tokenizers.map(value => typeof value == "number" ? new TokenGroup(tokenArray, value) : value);
|
|
26112
|
-
this.topRules = spec.topRules;
|
|
26113
|
-
this.dialects = spec.dialects || {};
|
|
26114
|
-
this.dynamicPrecedences = spec.dynamicPrecedences || null;
|
|
26115
|
-
this.tokenPrecTable = spec.tokenPrec;
|
|
26116
|
-
this.termNames = spec.termNames || null;
|
|
26117
|
-
this.maxNode = this.nodeSet.types.length - 1;
|
|
26118
|
-
this.dialect = this.parseDialect();
|
|
26119
|
-
this.top = this.topRules[Object.keys(this.topRules)[0]];
|
|
26120
|
-
}
|
|
26121
|
-
createParse(input, fragments, ranges) {
|
|
26122
|
-
let parse = new Parse(this, input, fragments, ranges);
|
|
26123
|
-
for (let w of this.wrappers) parse = w(parse, input, fragments, ranges);
|
|
26124
|
-
return parse;
|
|
26125
|
-
}
|
|
26126
|
-
/// Get a goto table entry @internal
|
|
26127
|
-
getGoto(state, term, loose = false) {
|
|
26128
|
-
let table = this.goto;
|
|
26129
|
-
if (term >= table[0]) return -1;
|
|
26130
|
-
for (let pos = table[term + 1];;) {
|
|
26131
|
-
let groupTag = table[pos++],
|
|
26132
|
-
last = groupTag & 1;
|
|
26133
|
-
let target = table[pos++];
|
|
26134
|
-
if (last && loose) return target;
|
|
26135
|
-
for (let end = pos + (groupTag >> 1); pos < end; pos++) if (table[pos] == state) return target;
|
|
26136
|
-
if (last) return -1;
|
|
26137
|
-
}
|
|
26138
|
-
}
|
|
26139
|
-
/// Check if this state has an action for a given terminal @internal
|
|
26140
|
-
hasAction(state, terminal) {
|
|
26141
|
-
let data = this.data;
|
|
26142
|
-
for (let set = 0; set < 2; set++) {
|
|
26143
|
-
for (let i = this.stateSlot(state, set ? 2 /* Skip */ : 1 /* Actions */), next;; i += 3) {
|
|
26144
|
-
if ((next = data[i]) == 65535 /* End */) {
|
|
26145
|
-
if (data[i + 1] == 1 /* Next */) next = data[i = pair(data, i + 2)];else if (data[i + 1] == 2 /* Other */) return pair(data, i + 2);else break;
|
|
26146
|
-
}
|
|
26147
|
-
if (next == terminal || next == 0 /* Err */) return pair(data, i + 1);
|
|
26148
|
-
}
|
|
26149
|
-
}
|
|
26150
|
-
return 0;
|
|
26151
|
-
}
|
|
26152
|
-
/// @internal
|
|
26153
|
-
stateSlot(state, slot) {
|
|
26154
|
-
return this.states[state * 6 /* Size */ + slot];
|
|
26155
|
-
}
|
|
26156
|
-
/// @internal
|
|
26157
|
-
stateFlag(state, flag) {
|
|
26158
|
-
return (this.stateSlot(state, 0 /* Flags */) & flag) > 0;
|
|
26159
|
-
}
|
|
26160
|
-
/// @internal
|
|
26161
|
-
validAction(state, action) {
|
|
26162
|
-
if (action == this.stateSlot(state, 4 /* DefaultReduce */)) return true;
|
|
26163
|
-
for (let i = this.stateSlot(state, 1 /* Actions */);; i += 3) {
|
|
26164
|
-
if (this.data[i] == 65535 /* End */) {
|
|
26165
|
-
if (this.data[i + 1] == 1 /* Next */) i = pair(this.data, i + 2);else return false;
|
|
26166
|
-
}
|
|
26167
|
-
if (action == pair(this.data, i + 1)) return true;
|
|
26168
|
-
}
|
|
26169
|
-
}
|
|
26170
|
-
/// Get the states that can follow this one through shift actions or
|
|
26171
|
-
/// goto jumps. @internal
|
|
26172
|
-
nextStates(state) {
|
|
26173
|
-
let result = [];
|
|
26174
|
-
for (let i = this.stateSlot(state, 1 /* Actions */);; i += 3) {
|
|
26175
|
-
if (this.data[i] == 65535 /* End */) {
|
|
26176
|
-
if (this.data[i + 1] == 1 /* Next */) i = pair(this.data, i + 2);else break;
|
|
26177
|
-
}
|
|
26178
|
-
if ((this.data[i + 2] & 65536 /* ReduceFlag */ >> 16) == 0) {
|
|
26179
|
-
let value = this.data[i + 1];
|
|
26180
|
-
if (!result.some((v, i) => i & 1 && v == value)) result.push(this.data[i], value);
|
|
26181
|
-
}
|
|
26182
|
-
}
|
|
26183
|
-
return result;
|
|
26184
|
-
}
|
|
26185
|
-
/// @internal
|
|
26186
|
-
overrides(token, prev) {
|
|
26187
|
-
let iPrev = findOffset(this.data, this.tokenPrecTable, prev);
|
|
26188
|
-
return iPrev < 0 || findOffset(this.data, this.tokenPrecTable, token) < iPrev;
|
|
26189
|
-
}
|
|
26190
|
-
/// Configure the parser. Returns a new parser instance that has the
|
|
26191
|
-
/// given settings modified. Settings not provided in `config` are
|
|
26192
|
-
/// kept from the original parser.
|
|
26193
|
-
configure(config) {
|
|
26194
|
-
// Hideous reflection-based kludge to make it easy to create a
|
|
26195
|
-
// slightly modified copy of a parser.
|
|
26196
|
-
let copy = Object.assign(Object.create(LRParser.prototype), this);
|
|
26197
|
-
if (config.props) copy.nodeSet = this.nodeSet.extend(...config.props);
|
|
26198
|
-
if (config.top) {
|
|
26199
|
-
let info = this.topRules[config.top];
|
|
26200
|
-
if (!info) throw new RangeError(`Invalid top rule name ${config.top}`);
|
|
26201
|
-
copy.top = info;
|
|
26202
|
-
}
|
|
26203
|
-
if (config.tokenizers) copy.tokenizers = this.tokenizers.map(t => {
|
|
26204
|
-
let found = config.tokenizers.find(r => r.from == t);
|
|
26205
|
-
return found ? found.to : t;
|
|
26206
|
-
});
|
|
26207
|
-
if (config.contextTracker) copy.context = config.contextTracker;
|
|
26208
|
-
if (config.dialect) copy.dialect = this.parseDialect(config.dialect);
|
|
26209
|
-
if (config.strict != null) copy.strict = config.strict;
|
|
26210
|
-
if (config.wrap) copy.wrappers = copy.wrappers.concat(config.wrap);
|
|
26211
|
-
if (config.bufferLength != null) copy.bufferLength = config.bufferLength;
|
|
26212
|
-
return copy;
|
|
26213
|
-
}
|
|
26214
|
-
/// Tells you whether any [parse wrappers](#lr.ParserConfig.wrap)
|
|
26215
|
-
/// are registered for this parser.
|
|
26216
|
-
hasWrappers() {
|
|
26217
|
-
return this.wrappers.length > 0;
|
|
26218
|
-
}
|
|
26219
|
-
/// Returns the name associated with a given term. This will only
|
|
26220
|
-
/// work for all terms when the parser was generated with the
|
|
26221
|
-
/// `--names` option. By default, only the names of tagged terms are
|
|
26222
|
-
/// stored.
|
|
26223
|
-
getName(term) {
|
|
26224
|
-
return this.termNames ? this.termNames[term] : String(term <= this.maxNode && this.nodeSet.types[term].name || term);
|
|
26225
|
-
}
|
|
26226
|
-
/// The eof term id is always allocated directly after the node
|
|
26227
|
-
/// types. @internal
|
|
26228
|
-
get eofTerm() {
|
|
26229
|
-
return this.maxNode + 1;
|
|
26230
|
-
}
|
|
26231
|
-
/// The type of top node produced by the parser.
|
|
26232
|
-
get topNode() {
|
|
26233
|
-
return this.nodeSet.types[this.top[1]];
|
|
26234
|
-
}
|
|
26235
|
-
/// @internal
|
|
26236
|
-
dynamicPrecedence(term) {
|
|
26237
|
-
let prec = this.dynamicPrecedences;
|
|
26238
|
-
return prec == null ? 0 : prec[term] || 0;
|
|
26239
|
-
}
|
|
26240
|
-
/// @internal
|
|
26241
|
-
parseDialect(dialect) {
|
|
26242
|
-
let values = Object.keys(this.dialects),
|
|
26243
|
-
flags = values.map(() => false);
|
|
26244
|
-
if (dialect) for (let part of dialect.split(" ")) {
|
|
26245
|
-
let id = values.indexOf(part);
|
|
26246
|
-
if (id >= 0) flags[id] = true;
|
|
26247
|
-
}
|
|
26248
|
-
let disabled = null;
|
|
26249
|
-
for (let i = 0; i < values.length; i++) if (!flags[i]) {
|
|
26250
|
-
for (let j = this.dialects[values[i]], id; (id = this.data[j++]) != 65535 /* End */;) (disabled || (disabled = new Uint8Array(this.maxTerm + 1)))[id] = 1;
|
|
26251
|
-
}
|
|
26252
|
-
return new Dialect(dialect, flags, disabled);
|
|
26253
|
-
}
|
|
26254
|
-
/// (used by the output of the parser generator) @internal
|
|
26255
|
-
static deserialize(spec) {
|
|
26256
|
-
return new LRParser(spec);
|
|
26257
|
-
}
|
|
26258
|
-
}
|
|
26259
|
-
function pair(data, off) {
|
|
26260
|
-
return data[off] | data[off + 1] << 16;
|
|
26261
|
-
}
|
|
26262
|
-
function findOffset(data, start, term) {
|
|
26263
|
-
for (let i = start, next; (next = data[i]) != 65535 /* End */; i++) if (next == term) return i - start;
|
|
26264
|
-
return -1;
|
|
26265
|
-
}
|
|
26266
|
-
function findFinished(stacks) {
|
|
26267
|
-
let best = null;
|
|
26268
|
-
for (let stack of stacks) {
|
|
26269
|
-
let stopped = stack.p.stoppedAt;
|
|
26270
|
-
if ((stack.pos == stack.p.stream.end || stopped != null && stack.pos > stopped) && stack.p.parser.stateFlag(stack.state, 2 /* Accepting */) && (!best || best.score < stack.score)) best = stack;
|
|
26271
|
-
}
|
|
26272
|
-
return best;
|
|
26273
|
-
}
|
|
26274
|
-
|
|
26275
|
-
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
|
26276
|
-
const RawString = 1,
|
|
26277
|
-
templateArgsEndFallback = 2,
|
|
26278
|
-
MacroName = 3;
|
|
26279
|
-
const R$1 = 82,
|
|
26280
|
-
L$1 = 76,
|
|
26281
|
-
u = 117,
|
|
26282
|
-
U$1 = 85,
|
|
26283
|
-
a = 97,
|
|
26284
|
-
z$1 = 122,
|
|
26285
|
-
A = 65,
|
|
26286
|
-
Z = 90,
|
|
26287
|
-
Underscore = 95,
|
|
26288
|
-
Zero = 48,
|
|
26289
|
-
Quote = 34,
|
|
26290
|
-
ParenL = 40,
|
|
26291
|
-
ParenR = 41,
|
|
26292
|
-
Space = 32,
|
|
26293
|
-
GreaterThan = 62;
|
|
26294
|
-
const rawString = new ExternalTokenizer(input => {
|
|
26295
|
-
// Raw string literals can start with: R, LR, uR, UR, u8R
|
|
26296
|
-
if (input.next == L$1 || input.next == U$1) {
|
|
26297
|
-
input.advance();
|
|
26298
|
-
} else if (input.next == u) {
|
|
26299
|
-
input.advance();
|
|
26300
|
-
if (input.next == Zero + 8) input.advance();
|
|
26301
|
-
}
|
|
26302
|
-
if (input.next != R$1) return;
|
|
26303
|
-
input.advance();
|
|
26304
|
-
if (input.next != Quote) return;
|
|
26305
|
-
input.advance();
|
|
26306
|
-
let marker = "";
|
|
26307
|
-
while (input.next != ParenL) {
|
|
26308
|
-
if (input.next == Space || input.next <= 13 || input.next == ParenR) return;
|
|
26309
|
-
marker += String.fromCharCode(input.next);
|
|
26310
|
-
input.advance();
|
|
26311
|
-
}
|
|
26312
|
-
input.advance();
|
|
26313
|
-
for (;;) {
|
|
26314
|
-
if (input.next < 0) return input.acceptToken(RawString);
|
|
26315
|
-
if (input.next == ParenR) {
|
|
26316
|
-
let match = true;
|
|
26317
|
-
for (let i = 0; match && i < marker.length; i++) if (input.peek(i + 1) != marker.charCodeAt(i)) match = false;
|
|
26318
|
-
if (match && input.peek(marker.length + 1) == Quote) return input.acceptToken(RawString, 2 + marker.length);
|
|
26319
|
-
}
|
|
26320
|
-
input.advance();
|
|
26321
|
-
}
|
|
26322
|
-
});
|
|
26323
|
-
const fallback = new ExternalTokenizer(input => {
|
|
26324
|
-
if (input.next == GreaterThan) {
|
|
26325
|
-
// Provide a template-args-closing token when the next characters
|
|
26326
|
-
// are ">>", in which case the regular tokenizer will only see a
|
|
26327
|
-
// bit shift op.
|
|
26328
|
-
if (input.peek(1) == GreaterThan) input.acceptToken(templateArgsEndFallback, 1);
|
|
26329
|
-
} else {
|
|
26330
|
-
// Notice all-uppercase identifiers
|
|
26331
|
-
let sawLetter = false,
|
|
26332
|
-
i = 0;
|
|
26333
|
-
for (;; i++) {
|
|
26334
|
-
if (input.next >= A && input.next <= Z) sawLetter = true;else if (input.next >= a && input.next <= z$1) return;else if (input.next != Underscore && !(input.next >= Zero && input.next <= Zero + 9)) break;
|
|
26335
|
-
input.advance();
|
|
26336
|
-
}
|
|
26337
|
-
if (sawLetter && i > 1) input.acceptToken(MacroName);
|
|
26338
|
-
}
|
|
26339
|
-
}, {
|
|
26340
|
-
extend: true
|
|
26341
|
-
});
|
|
26342
|
-
const cppHighlighting = styleTags({
|
|
26343
|
-
"typedef struct union enum class typename decltype auto template operator friend noexcept namespace using requires concept import export module __attribute__ __declspec __based": tags.definitionKeyword,
|
|
26344
|
-
"extern MsCallModifier MsPointerModifier extern static register thread_local inline const volatile restrict _Atomic mutable constexpr constinit consteval virtual explicit VirtualSpecifier Access": tags.modifier,
|
|
26345
|
-
"if else switch for while do case default return break continue goto throw try catch": tags.controlKeyword,
|
|
26346
|
-
"co_return co_yield co_await": tags.controlKeyword,
|
|
26347
|
-
"new sizeof delete static_assert": tags.operatorKeyword,
|
|
26348
|
-
"NULL nullptr": tags.null,
|
|
26349
|
-
this: tags.self,
|
|
26350
|
-
"True False": tags.bool,
|
|
26351
|
-
"TypeSize PrimitiveType": tags.standard(tags.typeName),
|
|
26352
|
-
TypeIdentifier: tags.typeName,
|
|
26353
|
-
FieldIdentifier: tags.propertyName,
|
|
26354
|
-
"CallExpression/FieldExpression/FieldIdentifier": tags.function(tags.propertyName),
|
|
26355
|
-
"ModuleName/Identifier": tags.namespace,
|
|
26356
|
-
"PartitionName": tags.labelName,
|
|
26357
|
-
StatementIdentifier: tags.labelName,
|
|
26358
|
-
"Identifier DestructorName": tags.variableName,
|
|
26359
|
-
"CallExpression/Identifier": tags.function(tags.variableName),
|
|
26360
|
-
"CallExpression/ScopedIdentifier/Identifier": tags.function(tags.variableName),
|
|
26361
|
-
"FunctionDeclarator/Identifier FunctionDeclarator/DestructorName": tags.function(tags.definition(tags.variableName)),
|
|
26362
|
-
NamespaceIdentifier: tags.namespace,
|
|
26363
|
-
OperatorName: tags.operator,
|
|
26364
|
-
ArithOp: tags.arithmeticOperator,
|
|
26365
|
-
LogicOp: tags.logicOperator,
|
|
26366
|
-
BitOp: tags.bitwiseOperator,
|
|
26367
|
-
CompareOp: tags.compareOperator,
|
|
26368
|
-
AssignOp: tags.definitionOperator,
|
|
26369
|
-
UpdateOp: tags.updateOperator,
|
|
26370
|
-
LineComment: tags.lineComment,
|
|
26371
|
-
BlockComment: tags.blockComment,
|
|
26372
|
-
Number: tags.number,
|
|
26373
|
-
String: tags.string,
|
|
26374
|
-
"RawString SystemLibString": tags.special(tags.string),
|
|
26375
|
-
CharLiteral: tags.character,
|
|
26376
|
-
EscapeSequence: tags.escape,
|
|
26377
|
-
"UserDefinedLiteral/Identifier": tags.literal,
|
|
26378
|
-
PreProcArg: tags.meta,
|
|
26379
|
-
"PreprocDirectiveName #include #ifdef #ifndef #if #define #else #endif #elif": tags.processingInstruction,
|
|
26380
|
-
MacroName: tags.special(tags.name),
|
|
26381
|
-
"( )": tags.paren,
|
|
26382
|
-
"[ ]": tags.squareBracket,
|
|
26383
|
-
"{ }": tags.brace,
|
|
26384
|
-
"< >": tags.angleBracket,
|
|
26385
|
-
". ->": tags.derefOperator,
|
|
26386
|
-
", ;": tags.separator
|
|
26387
|
-
});
|
|
26388
|
-
|
|
26389
|
-
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
|
26390
|
-
const spec_identifier = {
|
|
26391
|
-
__proto__: null,
|
|
26392
|
-
bool: 36,
|
|
26393
|
-
char: 36,
|
|
26394
|
-
int: 36,
|
|
26395
|
-
float: 36,
|
|
26396
|
-
double: 36,
|
|
26397
|
-
void: 36,
|
|
26398
|
-
size_t: 36,
|
|
26399
|
-
ssize_t: 36,
|
|
26400
|
-
intptr_t: 36,
|
|
26401
|
-
uintptr_t: 36,
|
|
26402
|
-
charptr_t: 36,
|
|
26403
|
-
int8_t: 36,
|
|
26404
|
-
int16_t: 36,
|
|
26405
|
-
int32_t: 36,
|
|
26406
|
-
int64_t: 36,
|
|
26407
|
-
uint8_t: 36,
|
|
26408
|
-
uint16_t: 36,
|
|
26409
|
-
uint32_t: 36,
|
|
26410
|
-
uint64_t: 36,
|
|
26411
|
-
char8_t: 36,
|
|
26412
|
-
char16_t: 36,
|
|
26413
|
-
char32_t: 36,
|
|
26414
|
-
char64_t: 36,
|
|
26415
|
-
const: 70,
|
|
26416
|
-
volatile: 72,
|
|
26417
|
-
restrict: 74,
|
|
26418
|
-
_Atomic: 76,
|
|
26419
|
-
mutable: 78,
|
|
26420
|
-
constexpr: 80,
|
|
26421
|
-
constinit: 82,
|
|
26422
|
-
consteval: 84,
|
|
26423
|
-
struct: 88,
|
|
26424
|
-
__declspec: 92,
|
|
26425
|
-
final: 148,
|
|
26426
|
-
override: 148,
|
|
26427
|
-
public: 152,
|
|
26428
|
-
private: 152,
|
|
26429
|
-
protected: 152,
|
|
26430
|
-
virtual: 154,
|
|
26431
|
-
extern: 160,
|
|
26432
|
-
static: 162,
|
|
26433
|
-
register: 164,
|
|
26434
|
-
inline: 166,
|
|
26435
|
-
thread_local: 168,
|
|
26436
|
-
__attribute__: 172,
|
|
26437
|
-
__based: 178,
|
|
26438
|
-
__restrict: 180,
|
|
26439
|
-
__uptr: 180,
|
|
26440
|
-
__sptr: 180,
|
|
26441
|
-
_unaligned: 180,
|
|
26442
|
-
__unaligned: 180,
|
|
26443
|
-
noexcept: 194,
|
|
26444
|
-
requires: 198,
|
|
26445
|
-
TRUE: 784,
|
|
26446
|
-
true: 784,
|
|
26447
|
-
FALSE: 786,
|
|
26448
|
-
false: 786,
|
|
26449
|
-
typename: 218,
|
|
26450
|
-
class: 220,
|
|
26451
|
-
template: 234,
|
|
26452
|
-
throw: 248,
|
|
26453
|
-
__cdecl: 256,
|
|
26454
|
-
__clrcall: 256,
|
|
26455
|
-
__stdcall: 256,
|
|
26456
|
-
__fastcall: 256,
|
|
26457
|
-
__thiscall: 256,
|
|
26458
|
-
__vectorcall: 256,
|
|
26459
|
-
try: 260,
|
|
26460
|
-
catch: 264,
|
|
26461
|
-
export: 282,
|
|
26462
|
-
import: 286,
|
|
26463
|
-
case: 296,
|
|
26464
|
-
default: 298,
|
|
26465
|
-
if: 308,
|
|
26466
|
-
else: 314,
|
|
26467
|
-
switch: 318,
|
|
26468
|
-
do: 322,
|
|
26469
|
-
while: 324,
|
|
26470
|
-
for: 330,
|
|
26471
|
-
return: 334,
|
|
26472
|
-
break: 338,
|
|
26473
|
-
continue: 342,
|
|
26474
|
-
goto: 346,
|
|
26475
|
-
co_return: 350,
|
|
26476
|
-
co_yield: 354,
|
|
26477
|
-
using: 362,
|
|
26478
|
-
typedef: 366,
|
|
26479
|
-
namespace: 380,
|
|
26480
|
-
new: 398,
|
|
26481
|
-
delete: 400,
|
|
26482
|
-
co_await: 402,
|
|
26483
|
-
concept: 406,
|
|
26484
|
-
enum: 410,
|
|
26485
|
-
static_assert: 414,
|
|
26486
|
-
friend: 422,
|
|
26487
|
-
union: 424,
|
|
26488
|
-
explicit: 430,
|
|
26489
|
-
operator: 444,
|
|
26490
|
-
module: 456,
|
|
26491
|
-
signed: 518,
|
|
26492
|
-
unsigned: 518,
|
|
26493
|
-
long: 518,
|
|
26494
|
-
short: 518,
|
|
26495
|
-
decltype: 528,
|
|
26496
|
-
auto: 530,
|
|
26497
|
-
sizeof: 566,
|
|
26498
|
-
NULL: 572,
|
|
26499
|
-
nullptr: 586,
|
|
26500
|
-
this: 588
|
|
26501
|
-
};
|
|
26502
|
-
const spec_ = {
|
|
26503
|
-
__proto__: null,
|
|
26504
|
-
"<": 131
|
|
26505
|
-
};
|
|
26506
|
-
const spec_templateArgsEnd = {
|
|
26507
|
-
__proto__: null,
|
|
26508
|
-
">": 135
|
|
26509
|
-
};
|
|
26510
|
-
const spec_scopedIdentifier = {
|
|
26511
|
-
__proto__: null,
|
|
26512
|
-
operator: 388,
|
|
26513
|
-
new: 576,
|
|
26514
|
-
delete: 582
|
|
26515
|
-
};
|
|
26516
|
-
const parser = LRParser.deserialize({
|
|
26517
|
-
version: 14,
|
|
26518
|
-
states: "$:|Q!QQVOOP'gOUOOO(XOWO'#CdO,RQUO'#CgO,]QUO'#FjO-sQbO'#CxO.UQUO'#CxO0TQUO'#KZO0[QUO'#CwO0gOpO'#DvO0oQ!dO'#D]OOQR'#JO'#JOO5XQVO'#GUO5fQUO'#JVOOQQ'#JV'#JVO8zQUO'#KmO<eQUO'#KmO>{QVO'#E^O?]QUO'#E^OOQQ'#Ed'#EdOOQQ'#Ee'#EeO?bQVO'#EfO@XQVO'#EiOBUQUO'#FPOBvQUO'#FhOOQR'#Fj'#FjOB{QUO'#FjOOQR'#LQ'#LQOOQR'#LP'#LPOETQVO'#KQOFxQUO'#LVOGVQUO'#KqOGkQUO'#LVOH]QUO'#LXOOQR'#HU'#HUOOQR'#HV'#HVOOQR'#HW'#HWOOQR'#K|'#K|OOQR'#J_'#J_Q!QQVOOOHkQVO'#FOOIWQUO'#EhOI_QUOOOKZQVO'#HgOKkQUO'#HgONVQUO'#KqONaQUO'#KqOOQQ'#Kq'#KqO!!_QUO'#KqOOQQ'#Jq'#JqO!!lQUO'#HxOOQQ'#KZ'#KZO!&^QUO'#KZO!&zQUO'#KQO!(zQVO'#I]O!(zQVO'#I`OCQQUO'#KQOOQQ'#Ip'#IpOOQQ'#KQ'#KQO!,}QUO'#KZOOQR'#KY'#KYO!-UQUO'#DZO!/mQUO'#KnOOQQ'#Kn'#KnO!/tQUO'#KnO!/{QUO'#ETO!0QQUO'#EWO!0VQUO'#FRO8zQUO'#FPO!QQVO'#F^O!0[Q#vO'#F`O!0gQUO'#FkO!0oQUO'#FpO!0tQVO'#FrO!0oQUO'#FuO!3sQUO'#FvO!3xQVO'#FxO!4SQUO'#FzO!4XQUO'#F|O!4^QUO'#GOO!4cQVO'#GQO!(zQVO'#GSO!4jQUO'#GpO!4xQUO'#GYO!(zQVO'#FeO!6VQUO'#FeO!6[QVO'#G`O!6cQUO'#GaO!6nQUO'#GnO!6sQUO'#GrO!6xQUO'#GzO!7jQ&lO'#HiO!:mQUO'#GuO!:}QUO'#HXO!;YQUO'#HZO!;bQUO'#DXO!;bQUO'#HuO!;bQUO'#HvO!;yQUO'#HwO!<[QUO'#H|O!=PQUO'#H}O!>uQVO'#IbO!(zQVO'#IdO!?PQUO'#IgO!?WQVO'#IjP!@}{,UO'#CbP!6n{,UO'#CbP!AY{7[O'#CbP!6n{,UO'#CbP!A_{,UO'#CbP!AjOSO'#IzPOOO)CEn)CEnOOOO'#I|'#I|O!AtOWO,59OOOQR,59O,59OO!(zQVO,59VOOQQ,59X,59XO!(zQVO,5;ROOQR,5<U,5<UO!BPQUO,59ZO!(zQVO,5>qOOQR'#IX'#IXOOQR'#IY'#IYOOQR'#IZ'#IZOOQR'#I['#I[O!(zQVO,5>rO!(zQVO,5>rO!(zQVO,5>rO!(zQVO,5>rO!(zQVO,5>rO!(zQVO,5>rO!(zQVO,5>rO!(zQVO,5>rO!(zQVO,5>rO!(zQVO,5>rO!DOQVO,5>zOOQQ,5?W,5?WO!EqQVO'#CjO!IjQUO'#CzOOQQ,59d,59dOOQQ,59c,59cOOQQ,5<},5<}O!IwQ&lO,5=mO!?PQUO,5?RO!LkQVO,5?UO!LrQbO,59dO!L}QVO'#FYOOQQ,5?P,5?PO!M_QVO,59WO!MfO`O,5:bO!MkQbO'#D^O!M|QbO'#K_O!N[QbO,59wO!NdQbO'#CxO!NuQUO'#CxO!NzQUO'#KZO# UQUO'#CwOOQR-E<|-E<|O# aQUO,5AoO# hQVO'#EfO@XQVO'#EiOBUQUO,5;kOOQR,5<p,5<pO#$aQUO'#KQO#$hQUO'#KQO!(zQVO'#IUO8zQUO,5;kO#${Q&lO'#HiO#(SQUO'#CtO#*wQbO'#CxO#*|QUO'#CwO#.jQUO'#KZOOQQ-E=T-E=TO#0}QUO,5AXO#1XQUO'#KZO#1cQUO,5AXOOQR,5Ao,5AoOOQQ,5>l,5>lO#3gQUO'#CgO#4]QUO,5>pO#6OQUO'#IeOOQR'#I}'#I}O#6WQUO,5:xO#6tQUO,5:xO#7eQUO,5:xO#8YQUO'#CuO!0QQUO'#CmOOQQ'#JW'#JWO#6tQUO,5:xO#8bQUO,5;QO!4xQUO'#DOO#9kQUO,5;QO#9pQUO,5>QO#:|QUO'#DOO#;dQUO,5>{O#;iQUO'#KwO#<rQUO,5;TO#<zQVO,5;TO#=UQUO,5;TOOQQ,5;T,5;TO#>}QUO'#L[O#?UQUO,5>UO#?ZQbO'#CxO#?fQUO'#GcO#?kQUO'#E^O#@[QUO,5;kO#@sQUO'#K}O#@{QUO,5;rOKkQUO'#HfOBUQUO'#HgO#AQQUO'#KqO!6nQUO'#HjO#AxQUO'#CuO!0tQVO,5<SOOQQ'#Cg'#CgOOQR'#Jh'#JhO#A}QVO,5=`OOQQ,5?Z,5?ZO#DWQbO'#CxO#DcQUO'#GcOOQQ'#Ji'#JiOOQQ-E=g-E=gOGVQUO,5AqOGkQUO,5AqO#DhQUO,5AsO#DsQUO'#G|OOQR,5Aq,5AqO#DhQUO,5AqO#EOQUO'#HOO#EWQUO,5AsOOQR,5As,5AsOOQR,5At,5AtO#EfQVO,5AtOOQR-E=]-E=]O#G`QVO,5;jOOQR,5;j,5;jO#IaQUO'#EjO#JfQUO'#EwO#K]QVO'#ExO#MoQUO'#EvO#MwQUO'#EyO#NvQUO'#EzOOQQ'#Kz'#KzO$ mQUO,5;SO$!sQUO'#EvOOQQ,5;S,5;SO$#pQUO,5;SO$%cQUO,5:yO$'|QVO,5>PO$(WQUO'#E[O$(eQUO,5>ROOQQ,5>S,5>SO$,RQVO'#C|OOQQ-E=o-E=oOOQQ,5>d,5>dOOQQ,59a,59aO$,]QUO,5>wO$.]QUO,5>zO!6nQUO,59uO$.pQUO,5;qO$.}QUO,5<{O!0QQUO,5:oOOQQ,5:r,5:rO$/YQUO,5;mO$/_QUO'#KmOBUQUO,5;kOOQR,5;x,5;xO$0OQUO'#FbO$0^QUO'#FbO$0cQUO,5;zO$3|QVO'#FmO!0tQVO,5<VO!0oQUO,5<VO!0VQUO,5<[O$4TQVO'#GUO$7PQUO,5<^O!0tQVO,5<aO$:gQVO,5<bO$:tQUO,5<dOOQR,5<d,5<dO$;}QUO,5<dOOQR,5<f,5<fOOQR,5<h,5<hOOQQ'#Fi'#FiO$<SQUO,5<jO$<XQUO,5<lOOQR,5<l,5<lO$=_QUO,5<nO$>eQUO,5<rO$>pQUO,5=[O$>uQUO,5=[O!4xQUO,5<tO$>}QUO,5<tO$?cQUO,5<PO$@iQVO,5<PO$BzQUO,5<zOOQR,5<z,5<zOOQR,5<{,5<{O$>uQUO,5<{O$DQQUO,5<{O$D]QUO,5=YO!(zQVO,5=^O!(zQVO,5=fO#NeQUO,5=mOOQQ,5>T,5>TO$FbQUO,5>TO$FlQUO,5>TO$FqQUO,5>TO$FvQUO,5>TO!6nQUO,5>TO$HtQUO'#KZO$H{QUO,5=oO$IWQUO,5=aOKkQUO,5=oO$JQQUO,5=sOOQR,5=s,5=sO$JYQUO,5=sO$LeQVO'#H[OOQQ,5=u,5=uO!;]QUO,5=uO%#`QUO'#KjO%#gQUO'#K[O%#{QUO'#KjO%$VQUO'#DyO%$hQUO'#D|O%'eQUO'#K[OOQQ'#K['#K[O%)WQUO'#K[O%#gQUO'#K[O%)]QUO'#K[OOQQ,59s,59sOOQQ,5>a,5>aOOQQ,5>b,5>bO%)eQUO'#HzO%)mQUO,5>cOOQQ,5>c,5>cO%-XQUO,5>cO%-dQUO,5>hO%1OQVO,5>iO%1VQUO,5>|O# hQVO'#EfO%4]QUO,5>|OOQQ,5>|,5>|O%4|QUO,5?OO%7QQUO,5?RO!<[QUO,5?RO%8|QUO,5?UO%<iQVO,5?UP!A_{,UO,58|P%<p{,UO,58|P%=O{7[O,58|P%=U{,UO,58|PO{O'#Ju'#JuP%=Z{,UO'#LcPOOO'#Lc'#LcP%=a{,UO'#LcPOOO,58|,58|POOO,5?f,5?fP%=fOSO,5?fOOOO-E<z-E<zOOQR1G.j1G.jO%=mQUO1G.qO%>sQUO1G0mOOQQ1G0m1G0mO%@PQUO'#CpO%B`QbO'#CxO%BkQUO'#CsO%BpQUO'#CsO%BuQUO1G.uO#AxQUO'#CrOOQQ1G.u1G.uO%DxQUO1G4]O%FOQUO1G4^O%GqQUO1G4^O%IdQUO1G4^O%KVQUO1G4^O%LxQUO1G4^O%NkQUO1G4^O&!^QUO1G4^O&$PQUO1G4^O&%rQUO1G4^O&'eQUO1G4^O&)WQUO1G4^O&*yQUO'#KPO&,SQUO'#KPO&,[QUO,59UOOQQ,5=P,5=PO&.dQUO,5=PO&.nQUO,5=PO&.sQUO,5=PO&.xQUO,5=PO!6nQUO,5=PO#NeQUO1G3XO&/SQUO1G4mO!<[QUO1G4mO&1OQUO1G4pO&2qQVO1G4pOOQQ1G/O1G/OOOQQ1G.}1G.}OOQQ1G2i1G2iO!IwQ&lO1G3XO&2xQUO'#LOO@XQVO'#EiO&4RQUO'#F]OOQQ'#Ja'#JaO&4WQUO'#FZO&4cQUO'#LOO&4kQUO,5;tO&4pQUO1G.rOOQQ1G.r1G.rOOQR1G/|1G/|O&6cQ!dO'#JPO&6hQbO,59xO&8yQ!eO'#D`O&9QQ!dO'#JRO&9VQbO,5@yO&9VQbO,5@yOOQR1G/c1G/cO&9bQbO1G/cO&9gQ&lO'#GeO&:eQbO,59dOOQR1G7Z1G7ZO#@[QUO1G1VO&:pQUO1G1^OBUQUO1G1VO&=RQUO'#CzO#*wQbO,59dO&@tQUO1G6sOOQR-E<{-E<{O&BWQUO1G0dO#6WQUO1G0dOOQQ-E=U-E=UO#6tQUO1G0dOOQQ1G0l1G0lO&B{QUO,59jOOQQ1G3l1G3lO&CcQUO,59jO&CyQUO,59jO!M_QVO1G4gO!(zQVO'#JYO&DeQUO,5AcOOQQ1G0o1G0oO!(zQVO1G0oO!6nQUO'#JnO&DmQUO,5AvOOQQ1G3p1G3pOOQR1G1V1G1VO&HjQVO'#FOO!M_QVO,5;sOOQQ,5;s,5;sOBUQUO'#JcO&JfQUO,5AiO&JnQVO'#E[OOQR1G1^1G1^O&M]QUO'#L[OOQR1G1n1G1nOOQR-E=f-E=fOOQR1G7]1G7]O#DhQUO1G7]OGVQUO1G7]O#DhQUO1G7_OOQR1G7_1G7_O&MeQUO'#G}O&MmQUO'#LWOOQQ,5=h,5=hO&M{QUO,5=jO&NQQUO,5=kOOQR1G7`1G7`O#EfQVO1G7`O&NVQUO1G7`O' ]QVO,5=kOOQR1G1U1G1UO$.vQUO'#E]O'!RQUO'#E]OOQQ'#Ky'#KyO'!lQUO'#KxO'!wQUO,5;UO'#PQUO'#ElO'#dQUO'#ElO'#wQUO'#EtOOQQ'#J['#J[O'#|QUO,5;cO'$sQUO,5;cO'%nQUO,5;dO'&tQVO,5;dOOQQ,5;d,5;dO''OQVO,5;dO'&tQVO,5;dO''VQUO,5;bO'(SQUO,5;eO'(_QUO'#KpO'(gQUO,5:vO'(lQUO,5;fOOQQ1G0n1G0nOOQQ'#J]'#J]O''VQUO,5;bO!4xQUO'#E}OOQQ,5;b,5;bO')gQUO'#E`O'+aQUO'#E{OHrQUO1G0nO'+fQUO'#EbOOQQ'#JX'#JXO'-OQUO'#KrOOQQ'#Kr'#KrO'-xQUO1G0eO'.pQUO1G3kO'/vQVO1G3kOOQQ1G3k1G3kO'0QQVO1G3kO'0XQUO'#L_O'1eQUO'#KXO'1sQUO'#KWO'2OQUO,59hO'2WQUO1G/aO'2]QUO'#FPOOQR1G1]1G1]OOQR1G2g1G2gO$>uQUO1G2gO'2gQUO1G2gO'2rQUO1G0ZOOQR'#J`'#J`O'2wQVO1G1XO'8pQUO'#FTO'8uQUO1G1VO!6nQUO'#JdO'9TQUO,5;|O$0^QUO,5;|OOQQ'#Fc'#FcOOQQ,5;|,5;|O'9cQUO1G1fOOQR1G1f1G1fO'9kQUO,5<XO$.vQUO'#FWOBUQUO'#FWO'9rQUO,5<XO!(zQVO,5<XO'9zQUO,5<XO':PQVO1G1qO!0tQVO1G1qOOQR1G1v1G1vO'?oQUO1G1xOOQR1G1{1G1{O'?tQUO1G1|OBUQUO1G2]O'@}QVO1G1|O'CcQUO1G1|O'ChQUO'#GWO8zQUO1G2]OOQR1G2O1G2OOOQR1G2U1G2UOOQR1G2W1G2WOOQR1G2Y1G2YO'CmQUO1G2^O!4xQUO1G2^OOQR1G2v1G2vO'CuQUO1G2vO$>}QUO1G2`OOQQ'#Cv'#CvO'CzQUO'#G[O'DuQUO'#G[O'DzQUO'#LRO'EYQUO'#G_OOQQ'#LS'#LSO'EhQUO1G2`O'EmQVO1G1kO'HOQVO'#GUOBUQUO'#FWOOQR'#Je'#JeO'EmQVO1G1kO'HYQUO'#FvOOQR1G2f1G2fO'H_QUO1G2gO'HdQUO'#JgO'2gQUO1G2gO!(zQVO1G2tO'HlQUO1G2xO'IuQUO1G3QO'J{QUO1G3XOOQQ1G3o1G3oO'KaQUO1G3oOOQR1G3Z1G3ZO'KfQUO'#KZO'2]QUO'#LTOGkQUO'#LVOOQR'#Gy'#GyO#DhQUO'#LXOOQR'#HQ'#HQO'KpQUO'#GvO'#wQUO'#GuOOQR1G2{1G2{O'LmQUO1G2{O'MdQUO1G3ZO'MoQUO1G3_O'MtQUO1G3_OOQR1G3_1G3_O'M|QUO'#H]OOQR'#H]'#H]O( VQUO'#H]O!(zQVO'#H`O!(zQVO'#H_OOQR'#LZ'#LZO( [QUO'#LZOOQR'#Jk'#JkO( aQVO,5=vOOQQ,5=v,5=vO( hQUO'#H^O( pQUO'#HZOOQQ1G3a1G3aO( zQUO,5@vOOQQ,5@v,5@vO%)WQUO,5@vO%)]QUO,5@vO%$VQUO,5:eO(%iQUO'#KkO(%wQUO'#KkOOQQ,5:e,5:eOOQQ'#JS'#JSO(&SQUO'#D}O(&^QUO'#KqOGkQUO'#LVO('YQUO'#D}OOQQ'#Hp'#HpOOQQ'#Hr'#HrOOQQ'#Hs'#HsOOQQ'#Kl'#KlOOQQ'#JU'#JUO('dQUO,5:hOOQQ,5:h,5:hO((aQUO'#LVO((nQUO'#HtO()UQUO,5@vO()]QUO'#H{O()hQUO'#L^O()pQUO,5>fO()uQUO'#L]OOQQ1G3}1G3}O(-lQUO1G3}O(-sQUO1G3}O(-zQUO1G4TO(/QQUO1G4TO(/VQUO,5A|O!6nQUO1G4hO!(zQVO'#IiOOQQ1G4m1G4mO(/[QUO1G4mO(1_QVO1G4pPOOO1G.h1G.hP!A_{,UO1G.hP(3_QUO'#LeP(3j{,UO1G.hP(3o{7[O1G.hPO{O-E=s-E=sPOOO,5A},5A}P(3w{,UO,5A}POOO1G5Q1G5QO!(zQVO7+$]O(3|QUO'#CzOOQQ,59_,59_O(4XQbO,59dO(4dQbO,59_OOQQ,59^,59^OOQQ7+)w7+)wO!M_QVO'#JtO(4oQUO,5@kOOQQ1G.p1G.pOOQQ1G2k1G2kO(4wQUO1G2kO(4|QUO7+(sOOQQ7+*X7+*XO(7bQUO7+*XO(7iQUO7+*XO(1_QVO7+*[O#NeQUO7+(sO(7vQVO'#JbO(8ZQUO,5AjO(8cQUO,5;vOOQQ'#Cp'#CpOOQQ,5;w,5;wO!(zQVO'#F[OOQQ-E=_-E=_O!M_QVO,5;uOOQQ1G1`1G1`OOQQ,5?k,5?kOOQQ-E<}-E<}OOQR'#Dg'#DgOOQR'#Di'#DiOOQR'#Dl'#DlO(9lQ!eO'#K`O(9sQMkO'#K`O(9zQ!eO'#K`OOQR'#K`'#K`OOQR'#JQ'#JQO(:RQ!eO,59zOOQQ,59z,59zO(:YQbO,5?mOOQQ-E=P-E=PO(:hQbO1G6eOOQR7+$}7+$}OOQR7+&q7+&qOOQR7+&x7+&xO'8uQUO7+&qO(:sQUO7+&OO#6WQUO7+&OO(;hQUO1G/UO(<OQUO1G/UO(<jQUO7+*ROOQQ7+*V7+*VO(>]QUO,5?tOOQQ-E=W-E=WO(?fQUO7+&ZOOQQ,5@Y,5@YOOQQ-E=l-E=lO(?kQUO'#LOO@XQVO'#EiO(@wQUO1G1_OOQQ1G1_1G1_O(BQQUO,5?}OOQQ,5?},5?}OOQQ-E=a-E=aO(BfQUO'#KpOOQR7+,w7+,wO#DhQUO7+,wOOQR7+,y7+,yO(BsQUO,5=iO#DsQUO'#JjO(CUQUO,5ArOOQR1G3U1G3UOOQR1G3V1G3VO(CdQUO7+,zOOQR7+,z7+,zO(E[QUO,5:wO(FyQUO'#EwO!(zQVO,5;VO(GlQUO,5:wO(GvQUO'#EpO(HXQUO'#EzOOQQ,5;Z,5;ZO#K]QVO'#ExO(HoQUO,5:wO(HvQUO'#EyO#GgQUO'#JZO(J`QUO,5AdOOQQ1G0p1G0pO(JkQUO,5;WO!<[QUO,5;^O(KUQUO,5;_O(KdQUO,5;WO(MvQUO,5;`OOQQ-E=Y-E=YO(NOQUO1G0}OOQQ1G1O1G1OO(NyQUO1G1OO)!PQVO1G1OO)!WQVO1G1OO)!bQUO1G0|OOQQ1G0|1G0|OOQQ1G1P1G1PO)#_QUO'#JoO)#iQUO,5A[OOQQ1G0b1G0bOOQQ-E=Z-E=ZO)#qQUO,5;iO!<[QUO,5;iO)$nQVO,5:zO)$uQUO,5;gO$ mQUO7+&YOOQQ7+&Y7+&YO!(zQVO'#EfO)$|QUO,5:|OOQQ'#Ks'#KsOOQQ-E=V-E=VOOQQ,5A^,5A^OOQQ'#Jl'#JlO)(qQUO7+&PPOQQ7+&P7+&POOQQ7+)V7+)VO))iQUO7+)VO)*oQVO7+)VOOQQ,5>m,5>mO$)YQVO'#JsO)*vQUO,5@rOOQQ1G/S1G/SOOQQ7+${7+${O)+RQUO7+(RO)+WQUO7+(ROOQR7+(R7+(RO$>uQUO7+(ROOQQ7+%u7+%uOOQR-E=^-E=^O!0VQUO,5;oOOQQ,5@O,5@OOOQQ-E=b-E=bO$0^QUO1G1hOOQQ1G1h1G1hOOQR7+'Q7+'QOOQR1G1s1G1sOBUQUO,5;rO)+tQUO,5<YO)+{QUO1G1sO)-UQUO1G1sO!0tQVO7+']O)-ZQVO7+']O)2yQUO7+'dO)3OQVO7+'hO)5dQUO7+'wO)5nQUO7+'hO)6tQVO7+'hOKkQUO7+'wO$>hQUO,5<rO!4xQUO7+'xO)6{QUO7+'xOOQR7+(b7+(bO)7QQUO7+'zO)7VQUO,5<vO'CzQUO,5<vO)7}QUO,5<vO'CzQUO,5<vOOQQ,5<w,5<wO)8`QVO,5<xO'EYQUO'#JfO)8jQUO,5AmO)8rQUO,5<yOOQR7+'z7+'zO)8}QVO7+'VO)5gQUO'#K}OOQR-E=c-E=cO);`QVO,5<bOOQQ,5@R,5@RO!6nQUO,5@ROOQQ-E=e-E=eO)=wQUO7+(`O)>}QUO7+(dO)?SQVO7+(dOOQQ7+(l7+(lOOQQ7+)Z7+)ZO)?[QUO'#KjO)?fQUO'#KjOOQR,5=b,5=bO)?sQUO,5=bO!;bQUO,5=bO!;bQUO,5=bO!;bQUO,5=bOOQR7+(g7+(gOOQR7+(u7+(uOOQR7+(y7+(yOOQR,5=w,5=wO)?xQUO,5=zO)AOQUO,5=yOOQR,5Au,5AuOOQR-E=i-E=iOOQQ1G3b1G3bO)BUQUO,5=xO)BZQVO'#EfOOQQ1G6b1G6bO%)WQUO1G6bO%)]QUO1G6bOOQQ1G0P1G0POOQQ-E=Q-E=QO)DrQUO,5AVO(%iQUO'#JTO)D}QUO,5AVO)D}QUO,5AVO)EVQUO,5:iO8zQUO,5:iOOQQ,5>],5>]O)EaQUO,5AqO)EhQUO'#EVO)FrQUO'#EVO)G]QUO,5:iO)GgQUO'#HlO)GgQUO'#HmOOQQ'#Ko'#KoO)HUQUO'#KoO!(zQVO'#HnOOQQ,5:i,5:iO)HvQUO,5:iO!M_QVO,5:iOOQQ-E=S-E=SOOQQ1G0S1G0SOOQQ,5>`,5>`O)H{QUO1G6bO!(zQVO,5>gO)LjQUO'#JrO)LuQUO,5AxOOQQ1G4Q1G4QO)L}QUO,5AwOOQQ,5Aw,5AwOOQQ7+)i7+)iO*!lQUO7+)iOOQQ7+)o7+)oO*'kQVO1G7hO*)mQUO7+*SO*)rQUO,5?TO**xQUO7+*[POOO7+$S7+$SP*,kQUO'#LfP*,sQUO,5BPP*,x{,UO7+$SPOOO1G7i1G7iO*,}QUO<<GwOOQQ1G.y1G.yOOQQ'#IT'#ITO*.pQUO,5@`OOQQ,5@`,5@`OOQQ-E=r-E=rOOQQ7+(V7+(VOOQQ<<Ms<<MsO*/yQUO<<MsO*1|QUO<<MvO*3oQUO<<L_O*4TQUO,5?|OOQQ,5?|,5?|OOQQ-E=`-E=`OOQQ1G1b1G1bO*5^QUO,5;vO*6dQUO1G1aOOQQ1G1a1G1aOOQR,5@z,5@zO*7mQ!eO,5@zO*7tQMkO,5@zO*7{Q!eO,5@zOOQR-E=O-E=OOOQQ1G/f1G/fO*8SQ!eO'#DwOOQQ1G5X1G5XOOQR<<J]<<J]O*8ZQUO<<IjO*9OQUO7+$pOOQQ<<Iu<<IuO(7vQVO,5;ROOQR<=!c<=!cOOQQ1G3T1G3TOOQQ,5@U,5@UOOQQ-E=h-E=hOOQR<=!f<=!fO*9{QUO1G0cO*:SQUO'#EzO*:dQUO1G0cO*:kQUO'#I}O*<RQUO1G0qO!(zQVO1G0qOOQQ,5;[,5;[OOQQ,5;],5;]OOQQ,5?u,5?uOOQQ-E=X-E=XO!<[QUO1G0xO*=bQUO1G0xOOQQ1G0y1G0yO*=sQUO'#ElOOQQ1G0z1G0zOOQQ7+&j7+&jO*>XQUO7+&jO*?_QVO7+&jOOQQ7+&h7+&hOOQQ,5@Z,5@ZOOQQ-E=m-E=mO*@ZQUO1G1TO*@eQUO1G1TO*AOQUO1G0fOOQQ1G0f1G0fO*BUQUO'#K{O*B^QUO1G1ROOQQ<<It<<ItOOQQ'#Hb'#HbO'+fQUO,5={OOQQ'#Hd'#HdO'+fQUO,5=}OOQQ-E=j-E=jPOQQ<<Ik<<IkPOQQ-E=k-E=kOOQQ<<Lq<<LqO*BcQUO'#LaO*CoQUO'#L`OOQQ,5@_,5@_OOQQ-E=q-E=qOOQR<<Km<<KmO$>uQUO<<KmO*C}QUO<<KmOOQR1G1Z1G1ZOOQQ7+'S7+'SO!M_QVO1G1tO*DSQUO1G1tOOQR7+'_7+'_OOQR<<Jw<<JwO!0tQVO<<JwOOQR<<KO<<KOO*D_QUO<<KSO*EeQVO<<KSOKkQUO<<KcO!M_QVO<<KcO*ElQUO<<KSO!0tQVO<<KSO*FuQUO<<KSO*FzQUO<<KcO*GVQUO<<KdOOQR<<Kd<<KdOOQR<<Kf<<KfO*G[QUO1G2bO)7VQUO1G2bO'CzQUO1G2bO*GmQUO1G2dO*HsQVO1G2dOOQQ1G2d1G2dO*H}QVO1G2dO*IUQUO,5@QOOQQ-E=d-E=dOOQQ1G2e1G2eO*IdQUO1G1|O*JmQVO1G1|O*JtQUO1G1|OOQQ1G5m1G5mOOQR<<Kz<<KzOOQR<<LO<<LOO*JyQVO<<LOO*KUQUO<<LOOOQR1G2|1G2|O*KZQUO1G2|O*KbQUO1G3eOOQR1G3d1G3dOOQQ7++|7++|O%)WQUO7++|O*KmQUO1G6qO*KmQUO1G6qO(%iQUO,5?oO*KuQUO,5?oOOQQ-E=R-E=RO*LQQUO1G0TOOQQ1G0T1G0TO*L[QUO1G0TO!M_QVO1G0TO*LaQUO1G0TOOQQ1G3w1G3wO*LkQUO,5:qO)EhQUO,5:qO*MXQUO,5:qO)EhQUO,5:qO$#uQUO,5:uO*MvQVO,5>VO)GgQUO'#JpO*NQQUO1G0TO*NcQVO1G0TOOQQ1G3u1G3uO*NjQUO,5>WO*NuQUO,5>XO+ dQUO,5>YO+!jQUO1G0TO%)]QUO7++|O+#pQUO1G4ROOQQ,5@^,5@^OOQQ-E=p-E=pOOQQ<<MT<<MTOOQQ<<Mn<<MnO+$yQUO1G4oP+&|QUO'#JvP+'UQUO,5BQPO{O1G7k1G7kPOOO<<Gn<<GnOOQQANC_ANC_OOQR1G6f1G6fO+'^Q!eO,5:cOOQQ,5:c,5:cO+'eQUO1G0mO+(qQUO7+&]O+*QQUO7+&dO+*cQUO,5;WOOQQ<<JU<<JUO+*qQUO7+&oOOQQ7+&Q7+&QO!4xQUO'#J^O++lQUO,5AgOOQQ7+&m7+&mOOQQ1G3g1G3gO++tQUO1G3iOOQQ,5>n,5>nO+/iQUOANAXOOQRANAXANAXO+/nQUO7+'`OOQRAN@cAN@cO+0zQVOAN@nO+1RQUOAN@nO!0tQVOAN@nO+2[QUOAN@nO+2aQUOAN@}O+2lQUOAN@}O+3rQUOAN@}OOQRAN@nAN@nO!M_QVOAN@}OOQRANAOANAOO+3wQUO7+'|O)7VQUO7+'|OOQQ7+(O7+(OO+4YQUO7+(OO+5`QVO7+(OO+5gQVO7+'hO+5nQUOANAjOOQR7+(h7+(hOOQR7+)P7+)PO+5sQUO7+)PO+5xQUO7+)POOQQ<= h<= hO+6QQUO7+,]O+6YQUO1G5ZOOQQ1G5Z1G5ZO+6eQUO7+%oOOQQ7+%o7+%oO+6vQUO7+%oO*NcQVO7+%oOOQQ7+)a7+)aO+6{QUO7+%oO+8RQUO7+%oO!M_QVO7+%oO+8]QUO1G0]O*LkQUO1G0]O)EhQUO1G0]OOQQ1G0a1G0aO+8zQUO1G3qO+:QQVO1G3qOOQQ1G3q1G3qO+:[QVO1G3qO+:cQUO,5@[OOQQ-E=n-E=nOOQQ1G3r1G3rO%)WQUO<= hOOQQ7+*Z7+*ZPOQQ,5@b,5@bPOQQ-E=t-E=tOOQQ1G/}1G/}OOQQ,5?x,5?xOOQQ-E=[-E=[OOQRG26sG26sO+:zQUOG26YO!0tQVOG26YO+<TQUOG26YOOQRG26YG26YO!M_QVOG26iO!0tQVOG26iO+<YQUOG26iO+=`QUOG26iO+=eQUO<<KhOOQQ<<Kj<<KjOOQRG27UG27UOOQR<<Lk<<LkO+=vQUO<<LkOOQQ7+*u7+*uOOQQ<<IZ<<IZO+={QUO<<IZO!M_QVO<<IZO+>QQUO<<IZO+?WQUO<<IZO*NcQVO<<IZOOQQ<<L{<<L{O+?iQUO7+%wO*LkQUO7+%wOOQQ7+)]7+)]O+@WQUO7+)]O+A^QVO7+)]OOQQANESANESO!0tQVOLD+tOOQRLD+tLD+tO+AeQUOLD,TO+BkQUOLD,TOOQRLD,TLD,TO!0tQVOLD,TOOQRANBVANBVOOQQAN>uAN>uO+BpQUOAN>uO+CvQUOAN>uO!M_QVOAN>uO+C{QUO<<IcOOQQ<<Lw<<LwOOQR!$( `!$( `O!0tQVO!$( oOOQR!$( o!$( oOOQQG24aG24aO+DjQUOG24aO+EpQUOG24aOOQR!)9EZ!)9EZOOQQLD){LD){O+EuQUO'#CgO(dQUO'#CgO+IrQUO'#CzO+LcQUO'#CzO!E{QUO'#CzO+M[QUO'#CzO+MoQUO'#CzO,#bQUO'#CzO,#rQUO'#CzO,$PQUO'#CzO,$[QbO,59dO,$gQbO,59dO,$rQbO,59dO,$}QbO'#CxO,%`QbO'#CxO,%qQbO'#CxO,&SQUO'#CgO,(gQUO'#CgO,(tQUO'#CgO,+iQUO'#CgO,.lQUO'#CgO,.|QUO'#CgO,2uQUO'#CgO,2|QUO'#CgO,3|QUO'#CgO,6VQUO,5:xO#?kQUO,5:xO#?kQUO,5:xO#=ZQUO'#L[O,6sQbO'#CxO,7OQbO'#CxO,7ZQbO'#CxO,7fQbO'#CxO#6tQUO'#E^O,7qQUO'#E^O,9OQUO'#HgO,9pQbO'#CxO,9{QbO'#CxO,:WQUO'#CwO,:]QUO'#CwO,:bQUO'#CpO,:pQbO,59dO,:{QbO,59dO,;WQbO,59dO,;cQbO,59dO,;nQbO,59dO,;yQbO,59dO,<UQbO,59dO,6VQUO1G0dO,<aQUO1G0dO#?kQUO1G0dO,7qQUO1G0dO,>nQUO'#KZO,?OQUO'#CzO,?^QbO,59dO,6VQUO7+&OO,<aQUO7+&OO,?iQUO'#EwO,@[QUO'#EzO,@{QUO'#E^O,AQQUO'#GcO,AVQUO'#CwO,A[QUO'#CxO,AaQUO'#CxO,AfQUO'#CwO,AkQUO'#GcO,ApQUO'#KZO,B^QUO'#KZO,BhQUO'#CwO,BsQUO'#CwO,COQUO'#CwO,<aQUO,5:xO,7qQUO,5:xO,7qQUO,5:xO,CZQUO'#KZO,CnQbO'#CxO,CyQUO'#CsO,DOQUO'#E^",
|
|
26519
|
-
stateData: ",Dt~O(nOSSOSTOSRPQVPQ'ePQ'gPQ'hPQ'iPQ'jPQ'kPQ'lPQ'mPQ~O*ZOS~OPmO]eOb!]Oe!POmTOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O|#RO!O!_O!TxO!VfO!X!XO!Y!WO!i!YO!opO!r!`O!s!aO!t!aO!u!bO!v!aO!x!cO!{!dO#V#QO#a#VO#b#TO#i#OO#p!xO#t!fO#v!eO$R!gO$T!hO$Y!vO$Z!wO$`!iO$e!jO$g!kO$h!lO$k!mO$m!nO$o!oO$q!pO$s!qO$u!rO$w!sO${!tO$}!uO%U!yO%_#ZO%`#[O%a#YO%c!zO%e#UO%g!{O%l#SO%o!|O%v!}O%|#PO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(rRO)QYO)TaO)V|O)W{O)XiO)Y!ZO)[XO)hcO)idO~OR#bOV#]O'e#^O'g#_O'h#`O'i#`O'j#aO'k#aO'l#_O'm#_O~OX#dO(o#fO(q#dO~O]ZX]jXejXmhXqZXqjXsjXtjXujXvjXwjXxjXyjXzjX!OjX!TjX!VZX!VjX!XZX!YZX![ZX!^ZX!_ZX!aZX!bZX!cZX!eZX!fZX!gZX!hZX!rjX!sjX!tjX!ujX!vjX!xjX!{jX%vjX&rjX&sjX(rjX(uZX(v$]X(wZX(xZX)TZX)TjX)UZX)VZX)VjX)WZX)WjX)XZX)YZX)jZX~O)XjX!UZX~P(dO]#}O!V#lO!X#{O!Y#qOT(}X)V(}X)W(}X)X(}X~Om$VO~P.ZOm$VO!g$YO)j$YO~OX$ZO)]$ZO~O!R$[O)P)RP)Y)RP~OPmO]$eOb!]Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O|#RO!O!_O!TxO!V$fO!X!XO!Y!WO!i!YO!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO#V#QO#a#VO#b#TO#v!eO$Y!vO$Z!wO$`!iO$e!jO$g!kO$h!lO$k!mO$m!nO$o!oO$q!pO$s!qO$u!rO$w!sO%_#ZO%`#[O%a#YO%e#UO%l#SO%v$mO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'YT(]X)V(]X)W(]X~Ob!TOm$oOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O|#RO!O!_O!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO#a#VO#b#TO%e#UO%l#SO&m!RO&r#WO&s!TO(r$nO~Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!O!_O!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO&r#WO&s$wO])aXe)aXm)aX!V)aX!{)aX%v)aX(r)aX)T)aX)V)aX)W)aX~O)X$vO~P:nOPmO]eOe!POs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!VfO!X!XO!Y!WO!i!YO!{!dO#V#QO%_#ZO%`#[O%a#YO%v$mO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO)TaO)V|O)W{O)Y!ZO)[XO)hcO)idO~Ob%QOm:zO!|%RO(r$xO~P<lO)T%SO~Ob!]Om$_O|#RO#a#VO#b#TO%e#UO%l#SO&m!RO&r#WO&s!TO(r:}O~P<lOPmO]$eOb%QOm:zO!V$fO!W%_O!X!XO!Y!WO!i!YO#V#QO%_#ZO%`#[O%a#YO%v$mO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$xO)T$kO)W%]O)Y!ZO)[XO)hcO)idO)j%[O~O]%hOe!POm%bO!V%kO!{!dO%v$mO(r;OO)T%dO)V%iO)W%iO~O(v%mO~O)X#jO~O(r%nO](tX!V(tX!X(tX!Y(tX![(tX!^(tX!_(tX!a(tX!b(tX!c(tX!e(tX!f(tX!h(tX(u(tX(w(tX(x(tX)T(tX)U(tX)V(tX)W(tX)X(tX)Y(tX!g(tX)j(tX[(tX!W(tX(v(tX!U(tXQ(tX!d(tX~OP%oO(pQO~PCQO]%hOe!POs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!V%kO!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO!{!dO%o!|O%v!}O)T;`O)V|O)W|O~Om%rO!o%wO(r$xO~PE_O!TxO#v!eO(v%yO)j%|O])eX!V)eX~O]%hOe!POm%rO!V%kO!{!dO%v!}O(r$xO)T;`O)V|O)W|O~O!TxO#v!eO)X&PO)j&QO~O!U&TO~P!QO]&YO!TxO!V&WO)T&VO)V&ZO)W&ZO~Oq&UO~PHrO]&cO!V&bO~OPmO]eOe!PO!VfO!X!XO!Y!WO!i!YO!{!dO#V#QO%_#ZO%`#[O%a#YO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO)TaO)V|O)W{O)Y!ZO)[XO)hcO)idO~Ob%QOm:zO%v$mO(r$xO~PIgO]%hOe!POm;[O!V%kO!{!dO%v$mO(r$xO)T;`O)V|O)W|O~Oq&fO](tX])eX!V(tX!V)eX!X(tX!Y(tX![(tX!^(tX!_(tX!a(tX!b(tX!c(tX!e(tX!f(tX!h(tX(u(tX(w(tX(x(tX)T(tX)U(tX)V(tX)W(tX)X(tX)Y(tX[(tX[)eX!U(tX~O!g$YO)j$YO~PL]O!g(tX)j(tX~PL]O](tX!V(tX!X(tX!Y(tX![(tX!^(tX!_(tX!a(tX!b(tX!c(tX!e(tX!f(tX!h(tX(u(tX(w(tX(x(tX)T(tX)U(tX)V(tX)W(tX)X(tX)Y(tX!g(tX)j(tX[(tX!U(tX~O])eX!V)eX[)eX~PNkOb&hO&m!RO]&lXe&lXm&lXs&lXt&lXu&lXv&lXw&lXx&lXy&lXz&lX!O&lX!V&lX!r&lX!s&lX!t&lX!u&lX!v&lX!x&lX!{&lX%v&lX&r&lX&s&lX(r&lX)T&lX)V&lX)W&lX)X&lX[&lX!T&lX!X&lX!Y&lXT(tX)U(tX)V(tX)W(tX)X(tX)Y(tX[(tX!W(tX(v(tX!U(tXQ(tX!d(tX~OPmO]$eOb%QOm:zO!V$fO!X!XO!Y!WO!i!YO#V#QO%_#ZO%`#[O%a#YO%v$mO'Q!WO'R!WO'V#XO'YT(}X)V(}X)W(}X)X(}X[(}XQ(}X!d(}X!h(}X)Y(}X)j(}X~O]#}O~P!*qO]&lO~O])bXb)bXe)bXm)bXs)bXt)bXu)bXv)bXw)bXx)bXy)bXz)bX|)bX!O)bX!V)bX!o)bX!r)bX!s)bX!t)bX!u)bX!v)bX!x)bX!{)bX#a)bX#b)bX%e)bX%l)bX%o)bX%v)bX&m)bX&r)bX&s)bX(r)bX)T)bX)V)bX)W)bX~O(pQO~P!-ZO%U&nO~P!-ZO]&oO~O]#}O~O!TxO~O$W&wO(r%nO(v&vO~O]&xOx&zO~O]&xO~OPmO]$eOb%QOm:zO!TxO!V$fO!X!XO!Y!WO!i!YO#V#QO#p!xO#v!eO$Y!vO$Z!wO$`!iO$e!jO$g!kO$h!lO$k!mO$m!nO$o!oO$q!pO$s!qO$u!rO$w!sO%_#ZO%`#[O%a#YO%v$mO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r:mO)QYO)T$kO)W$kO)XiO)Y!ZO)[XO)hcO)idO~O]'PO~O!T$WO)X'RO~P!(zO)X'TO~O)X'UO~O(r'VO~O)X'YO~P!(zOm;^O%U'^O%e'^O(r;PO~Ob!TOm$oOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O|#RO#a#VO#b#TO%e#UO%l#SO&m!RO&r#WO&s!TO(r$nO~O(v'bO~O)X'dO~P!(zO!TxO(r%nO)j'fO~O(r%nO~O]'iO~O]'jOe%nXm%nX!V%nX!{%nX%v%nX(r%nX)T%nX)V%nX)W%nX~O]'nO!V'oO!X'lO!g'lO%Z'lO%['lO%]'lO%^'lO%_'pO%`'pO%a'lO(x'mO)j'lO)x'qO~P8zO]%hOb!TOe!POs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O|#RO!O!_O!V%kO!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO!{!dO#a#VO#b#TO%e#UO%l#SO&m!RO&r#WO&s!TO)T;`O)V|O)W|O~Om;_Oq&UO%v$mO(r;QO~P!8jO(r%nO(v'vO)X'wO~O]&cO!T'yO~Om$oO!O!_O!T(QO!l(VO(r$nO(v(PO)QYO~Om$oO|(^O!T(ZO#b(^O(r$nO~Ob!TOm$oO|#RO#a#VO#b#TO%e#UO%l#SO&m!RO&r#WO&s!TO(r$nO~O](`O~OPmOb%QOm:zO!V$fO!X!XO!Y!WO!i!YO#V#QO%_#ZO%`#[O%a#YO%v$mO'Q!WO'R!WO'V#XO'YY(cO~P!=UO]#}O~P!<[OPmO]$eOb%QOm:zO!V(iO!X!XO!Y!WO!i!YO#V#QO%_#ZO%`#[O%a#YO%v$mO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$xO)T$kO)W$kO)Y!ZO)[XO)hcO)idO~OY(jO(pQO(r%nO~O'f(mO~OS(qOT(nO*W(pO~O]#}O(n(tO~Q'nXX#dO(o(vO(q#dO~Oe)QOm({O&r#WO(r(zO~O!Y'Sa!['Sa!^'Sa!_'Sa!a'Sa!b'Sa!c'Sa!e'Sa!f'Sa!h'Sa(u'Sa)T'Sa)U'Sa)V'Sa)W'Sa)X'Sa)Y'Sa!g'Sa)j'Sa['Sa!W'Sa(v'Sa!U'SaQ'Sa!d'Sa~OPmOb%QOm:zO!i!YO#V#QO%_#ZO%`#[O%a#YO%v$mO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$xO)[XO)hcO)idO]'Sa!V'Sa!X'Sa(w'Sa(x'Sa~P!B_O!T$WO[(sP~P!(zO]oX]%WXeoXmnXqoXq%WXsoXtoXuoXvoXwoXxoXyoXzoX!OoX!ToX!VoX!V%WX!X%WX!Y%WX![%WX!^%WX!_%WX!a%WX!b%WX!c%WX!e%WX!f%WX!gnX!h%WX!roX!soX!toX!uoX!voX!xoX!{oX%voX&roX&soX(roX(u%WX(w%WX(x%WX)ToX)T%WX)U%WX)VoX)V%WX)WoX)W%WX)X%WX)Y%WX)jnX[%WX~O)XoX[oX!U%WX~P!E{O])dO!V)eO!X)bO!g)bO%Z)bO%[)bO%])bO%^)bO%_)fO%`)fO%a)bO(x)cO)j)bO)x)gO~P8zOPmO]$eOb%QOm:zO!X!XO!Y!WO!i!YO#V#QO%_#ZO%`#[O%a#YO%v$mO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$xO)T$kO)W$kO)Y!ZO)[XO)hcO)idO~O!V)lO~P!JwOe)oO%Y)pO(y$OO~O!T$WO!V)rO(w)sO!U)rP~P!JwO!T$WO~P!(zO)Z)zO~Om){O]!QX!h!QX)P!QX)Y!QX~O])}O!h*OO)P)RX)Y)RX~O)P*RO)Y*SO~Oe$RO%Y*TO'[$TO'_$UO(y$OO~Om*UO~Om*UO[(}X~P.ZOm*UO!g$YO)j$YO~O)X*VO~P:nOPmO]$eOb!]Om$_Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O|#RO!V$fO!X!XO!Y!WO!i!YO#V#QO#a#VO#b#TO%_#ZO%`#[O%a#YO%e#UO%l#SO%v$mO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r:}O)T$kO)W$kO)Y!ZO)[XO)hcO)idO~Oq&fO~P!&zOq&fO!W(tX(v(tXQ(tX!d(tX~PNkO]'nO!V'oO!X'lO!g'lO%Z'lO%['lO%]'lO%^'lO%_'pO%`'pO%a'lO(x'mO)j'lO)x'qO~O]jXejXmhXqjXsjXtjXujXvjXwjXxjXyjXzjX!OjX!VjX!rjX!sjX!tjX!ujX!vjX!xjX!{jX%vjX&rjX&sjX(rjX)TjX)VjX)WjX!TjX!hjX)YjX)jjX[jX~O!ljX(vjX)XjX!XjX!YjXT(}X)V(}X)W(}X)X(}X!T(}X!X(}X!Y(}X![(}X!^(}X!_(}X!a(}X!b(}X!c(}X!e(}X!f(}X!h(}X(u(}X(w(}X(x(}X)U(}X)Y(}X!g(}X)j(}X[(}X!W(}XQ(}X!d(}X(v(}X!U(}X#v(}X~Om*[O~P#+ROs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!O!_O!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO])aae)aam)aa!V)aa!{)aa%v)aa(r)aa)T)aa)V)aa)W)aaQ)aa!d)aa!h)aa)Y)aa)j)aa[)aa!T)aa(v)aa)X)aa~O&r#WO&s$wO~P#.qOq&fOm(}X~P#+RO&r)aa~P#.qO]ZXmhXqZXqjX!TjX!VZX!XZX!YZX![ZX!^ZX!_ZX!aZX!bZX!cZX!eZX!fZX!gZX!hZX(uZX(wZX(xZX)TZX)UZX)VZX)WZX)XZX)YZX)jZX[ZX~O!WZX(vZX!UZXQZX!dZX~P#1jO]#}O!V#lO!X#{O(w#kO(x#kO~O!Y&xa![&xa!^&xa!_&xa!a&xa!b&xa!c&xa!e&xa!f&xa!g&xa!h&xa(u&xa)T&xa)U&xa)V&xa)W&xa)X&xa)Y&xa)j&xa[&xa!W&xa(v&xa!U&xaQ&xa!d&xa~P#3zOm;hO!T$WO~Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O~PKkOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!|%RO~PKkO]&cO!V&bO[#Qa!T#Qa!h#Qa#v#Qa)X#Qa)j#QaQ#Qa!d#Qa(v#Qa~Oq&fO!T$WO~O[*cO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO!h#iO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO[*cO~O[*eO]&cO!V&bO~O]&YOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!V&WO&r#WO&s$wO)T&VO)V&ZO)W&ZO~O[rXQrX!drX!hrX)YrX)XrX~P#9{O[*hO~O!Y#qOT(tX)U(tX)V(tX)W(tX)Y(tX~O!h(tX~P#=ZO!W*oO~Oe$RO%Y*TO(y:rO~Om;kO~Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!|%RO~PBUO]*vO!T*qO!V&bO!h*tO#v!eO)j*rO)X)qX~O!h*tO)X)qX~O)X*wO~Oq&fO])eX!T)eX!V)eX!h)eX#v)eX)X)eX)j)eX[)eXQ)eX!d)eX(v)eX~Oq&fO~OP%oO(pQO]%ha!V%ha!X%ha!Y%ha![%ha!^%ha!_%ha!a%ha!b%ha!c%ha!e%ha!f%ha!h%ha(r%ha(u%ha(w%ha(x%ha)T%ha)U%ha)V%ha)W%ha)X%ha)Y%ha!g%ha)j%ha[%ha!W%ha(v%ha!U%haQ%ha!d%ha~Oe$RO%Y$SO(y:oO~Om:wO~O!TxO#v!eO)j%|O~Om<[O&r#WO(r;gO~O$Z+TO%`+UO~O!TxO#v!eO)X+VO)j+WO~OPmO]$eOb%QOm:zO!V$fO!X!XO!Y!WO!i!YO#V#QO$Z+TO%_#ZO%`+YO%a#YO%v$mO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$xO)T$kO)W$kO)Y!ZO)[XO)hcO)idO~O!U+ZO~P!QOb!TOm$oOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O|#RO!O!_O!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO#a+aO#b+bO#i+cO%e#UO%l#SO&m!RO&r#WO&s!TO(r$nO)QYO~OQ)lP!d)lP~P#GgO]&YOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!V&WO)T&VO)V&ZO)W&ZO~O[#kX!T#kX#v#kX)X#kX)j#kXQ#kX!d#kX!h#kX)Y#kX!x#kX(v#kX~P#IkOPmO]$eOb%QOm:zOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!V$fO!W+iO!X!XO!Y!WO!i!YO#V#QO%_#ZO%`#[O%a#YO%v$mO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$xO)T+jO)W$kO)Y!ZO)[XO)hcO)idO~O]&cO!V+kO~O]&YO!V&WO)QYO)T&VO)V&ZO)W&ZO)Y+nO[)dP~P8zO]&YO!V&WO)T&VO)V&ZO)W&ZO~O[#nX!T#nX#v#nX)X#nX)j#nXQ#nX!d#nX!h#nX)Y#nX!x#nX(v#nX~P#NeO!TxO])nX!V)nX~Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O#T+vO#p+wO(x+tO)V+rO)W+rO~O]#jX!T#jX!V#jX[#jX#v#jX)X#jX)j#jXQ#jX!d#jX!h#jX)Y#jX!x#jX(v#jX~P$ xO#V+yO~Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!l+zO#T+vO#V+yO#p+wO(x+tO)V+zO)W+zO])fP!T)fP!V)fP#v)fP(v)fP)j)fP[)fP!h)fP)X)fP~O!x)fPQ)fP!d)fP~P$#uOPmO]$eOb%QOm:zOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!V$fO!X!XO!Y!WO!i!YO#V#QO%_#ZO%`#[O%a#YO%v$mO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$xO)W$kO)Y!ZO)[XO)hcO)idO~O!W,QO)T,RO~P$%pO)QYO)Y+nO[)dP~P8zO]&cO!V&bO[&Za!T&Za!h&Za#v&Za)X&Za)j&ZaQ&Za!d&Za(v&Za~OPmO]$eOb!]Om:|Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O|#RO!V$fO!X!XO!Y!WO!i!YO#V#QO#a#VO#b#TO%_#ZO%`#[O%a#YO%e#UO%l#SO%v$mO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r;RO)T$kO)W$kO)Y!ZO)[XO)hcO)idO~OQ(zP!d(zP~P$)YO]#}O!V#lO(w#kO(x#kO!X'Pa!Y'Pa!['Pa!^'Pa!_'Pa!a'Pa!b'Pa!c'Pa!e'Pa!f'Pa!h'Pa(u'Pa)T'Pa)U'Pa)V'Pa)W'Pa)X'Pa)Y'Pa!g'Pa)j'Pa['Pa!W'Pa(v'Pa!U'PaQ'Pa!d'Pa~O]#}O!V#lO!X#{O(w#kO(x#kO~P!B_O!TxO#t!fO)QYO~P8zO!TxO(r%nO)j,[O~O#x,aO~OQ)aX!d)aX!h)aX)Y)aX)j)aX[)aX!T)aX(v)aX)X)aX~P:nO(v,eO(w,cO)Q$UX)X$UX~O(r,fO~O)QYO)X,iO~OPmO]$eOb!]Om:{Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O|#RO!O!_O!V$fO!X!XO!Y!WO!i!YO!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO#V#QO#a#VO#b#TO%_#ZO%`#[O%a#YO%e#UO%l#SO%v$mO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO)QYO)T$kO)W$kO)XiO)Y!ZO)[XO)hcO)idO~O(r;SO~P$0kOPmO]$eOb%QOm:zO!TxO!V$fO!X!XO!Y!WO!i!YO#V#QO#v!eO$Y!vO$Z!wO$`!iO$e!jO$g!kO$h!lO$k!mO$m!nO$o!oO$q!pO$s!qO$u!rO$w!sO%_#ZO%`#[O%a#YO%v$mO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r:mO)QYO)T$kO)W$kO)XiO)Y!ZO)[XO)hcO)idO~O$h,sO~OPmO]$eOb!]Om:{Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O|#RO!O!_O!V$fO!X!XO!Y!WO!i!YO!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO#V#QO#a#VO#b#TO$}!uO%_#ZO%`#[O%a#YO%e#UO%l#SO%v$mO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO)QYO)T$kO)W$kO)Y!ZO)[XO)hcO)idO~O${,yO(r:}O)X,wO~P$7UO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO!h#iO(u#gO)T#mO)U#oO)V#nO)W#pO)X,{O)Y#|O~P#3zO)X,{O~O)X,|O~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)X,}O)Y#|O~P#3zO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)X-OO)Y#|O~P#3zOq&fO)QYO)j-QO~O)X-RO~Om;^O(r;PO~O]-YO!{!dO&r#WO&s$wO(r-UO)T-VO~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO(v-]O)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!TxO$`!iO$e!jO$g!kO$h!lO$k-bO$m!nO$o!oO$q!pO$s!qO$u!rO$w!sO$}!uO(r:nOe$Xa!o$Xa!{$Xa#i$Xa#p$Xa#t$Xa#v$Xa$R$Xa$T$Xa$Y$Xa$Z$Xa${$Xa%U$Xa%c$Xa%g$Xa%o$Xa%|$Xa(k$Xa)V$Xa!U$Xa$c$Xa~P$0kO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)X-cO)Y#|O~P#3zOm-eO!TxO)j,[O~O)j-gO~O]&]a!X&]a!Y&]a![&]a!^&]a!_&]a!a&]a!b&]a!c&]a!e&]a!f&]a!h&]a(u&]a(w&]a(x&]a)U&]a)V&]a)W&]a)X&]a)Y&]a!g&]a)j&]a[&]a!W&]a!T&]a#v&]a(v&]a!U&]aQ&]a!d&]a~O)T-kO!V&]a~P$DbO[-kO~O!W-kO~O!V-lO)T&]a~P$DbO](}Xe(}Xs(}Xt(}Xu(}Xv(}Xw(}Xx(}Xy(}Xz(}X!O(}X!V(}X!r(}X!s(}X!t(}X!u(}X!v(}X!x(}X!{(}X%v(}X&r(}X&s(}X(r(}X)T(}X)V(}X)W(}X~Om;mO~P$GQO]&cO!V&bO)X-mO~Om;cO!o-pO#V+yO#i-uO#t!fO${,yO%c!zO%k-tO%o!|O%v!}O(r;TO)QYO~P!8jO!n-yO(r,fO~O)QYO)X-{O~OPmO]$eOb%QOm:zO!T.QO!V$fO!X!XO!Y!WO!i!YO#V.XO#a.WO%_#ZO%`#[O%a#YO%v$mO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$xO(x.PO)T$kO)W$kO)X-}O)Y!ZO)[XO)hcO)idO~O!U.VO~P$JbO])^Xe)^Xs)^Xt)^Xu)^Xv)^Xw)^Xx)^Xy)^Xz)^X!O)^X!T)^X!V)^X!l)^X!r)^X!s)^X!t)^X!u)^X!v)^X!x)^X!{)^X%v)^X&r)^X&s)^X(r)^X(v)^X)T)^X)V)^X)W)^X)X)^X[)^X!h)^X)Y)^X!X)^X!Y)^X![)^X!^)^X!_)^X!a)^X!b)^X!c)^X!e)^X!f)^X(u)^X(w)^X(x)^X)U)^X!g)^X)j)^X!W)^XQ)^X!d)^X#T)^X#V)^X#p)^X#v)^Xb)^X|)^X!o)^X#a)^X#b)^X#i)^X#t)^X${)^X%c)^X%e)^X%k)^X%l)^X%o)^X&m)^X)Q)^X!U)^X~Om*[O~P$LlOm$oO!T(QO!l.^O(r$nO(v(PO)QYO~Oq&fOm)^X~P$LlOm$oO!n.cO!o.cO(r$nO)QYO~Om;dO!U.nO!n.pO!o.oO#i-uO${!tO$}!uO%g!{O%k-tO%o!|O%v!}O(r;VO)QYO~P!8jO!T(QO!l.^O(v(PO])OXe)OXm)OXs)OXt)OXu)OXv)OXw)OXx)OXy)OXz)OX!O)OX!V)OX!r)OX!s)OX!t)OX!u)OX!v)OX!x)OX!{)OX%v)OX&r)OX&s)OX(r)OX)T)OX)V)OX)W)OX~O)X)OX[)OX!X)OX!Y)OX![)OX!^)OX!_)OX!a)OX!b)OX!c)OX!e)OX!f)OX!h)OX(u)OX(w)OX(x)OX)U)OX)Y)OX!g)OX)j)OX!W)OXQ)OX!d)OX!U)OX#v)OX~P%%eO!T(QO~O!T(QO(v(PO~O(r%nO!U*QP~O!T(ZO(v.uO]&kae&kam&kas&kat&kau&kav&kaw&kax&kay&kaz&ka!O&ka!V&ka!r&ka!s&ka!t&ka!u&ka!v&ka!x&ka!{&ka%v&ka&r&ka&s&ka(r&ka)T&ka)V&ka)W&ka)X&ka[&ka!X&ka!Y&ka![&ka!^&ka!_&ka!a&ka!b&ka!c&ka!e&ka!f&ka!h&ka(u&ka(w&ka(x&ka)U&ka)Y&ka!g&ka)j&ka!W&kaQ&ka!d&ka!U&ka#v&ka~Om$oO!T(ZO(r$nO~O&r#WO&s$wO]&pae&pam&pas&pat&pau&pav&paw&pax&pay&paz&pa!O&pa!V&pa!r&pa!s&pa!t&pa!u&pa!v&pa!x&pa!{&pa%v&pa(r&pa)T&pa)V&pa)W&pa)X&pa[&pa!T&pa!X&pa!Y&pa![&pa!^&pa!_&pa!a&pa!b&pa!c&pa!e&pa!f&pa!h&pa(u&pa(w&pa(x&pa)U&pa)Y&pa!g&pa)j&pa!W&paQ&pa!d&pa(v&pa!U&pa#v&pa~O&s.zO~P!(zO!Y#qO![#rO!f#zO)T#mO!^'Ua!_'Ua!a'Ua!b'Ua!c'Ua!e'Ua!h'Ua(u'Ua)U'Ua)V'Ua)W'Ua)X'Ua)Y'Ua!g'Ua)j'Ua['Ua!W'Ua(v'Ua!U'UaQ'Ua!d'Ua~P#3zO!V'dX!X'dX!Y'dX!['dX!^'dX!_'dX!a'dX!b'dX!c'dX!e'dX!f'dX!h'dX(u'dX(w'dX(x'dX)T'dX)U'dX)V'dX)W'dX)Y'dX['dX~O].|O)X'dX!g'dX)j'dX!W'dX(v'dX!U'dXQ'dX!d'dX~P%2xO!Y#qO![#rO!f#zO)T#mO!^'Wa!_'Wa!a'Wa!b'Wa!c'Wa!e'Wa!h'Wa(u'Wa)U'Wa)V'Wa)W'Wa)X'Wa)Y'Wa!g'Wa)j'Wa['Wa!W'Wa(v'Wa!U'WaQ'Wa!d'Wa~P#3zO]#}O!T$WO!V.}O&r#WO&s$wO~O!X'Za!Y'Za!['Za!^'Za!_'Za!a'Za!b'Za!c'Za!e'Za!f'Za!h'Za(u'Za(w'Za(x'Za)T'Za)U'Za)V'Za)W'Za)X'Za)Y'Za!g'Za)j'Za['Za!W'Za(v'Za!U'ZaQ'Za!d'Za~P%6oO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O!h'^a)X'^a!g'^a)j'^a['^a!W'^a(v'^a!U'^aQ'^a!d'^a~P#3zOPmO]$eOb%QOm:zO!V$fO!X!XO!Y!WO!i!YO#V#QO%_#ZO%`#[O%a#YO%v$mO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$xO)T$kO)W%]O)Y!ZO)[XO)hcO)idO)j%[O~O!W/QO~P%:oOS(qOT(nO]#}O*W(pO~O]/TO'f/UO*W/RO~OS/YOT(nO*W/XO~O]#}O~Q'na!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO(v/[O)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO!h#iO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O)X#Zi[#Zi~P#3zO]dXmhXqdXqjX!VdX!XdX!YdX![dX!^dX!_dX!adX!bdX!cdX!edX!fdX!gdX!hdX(udX(wdX(xdX)TdX)UdX)VdX)WdX)XdX)YdX)jdX[dX!WdX(vdX!TdX#vdX!UdXQdX!ddX~Oe/^O%Y*TO(y/]O~Om/_O~Om/`O~Oq&fO]ci!Vci!Xci!Yci![ci!^ci!_ci!aci!bci!cci!eci!fci!gci!hci(uci(wci(xci)Tci)Uci)Vci)Wci)Xci)Yci)jci[ci!Wci(vci!UciQci!dci~O!W/bO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO![#rO)T#mO!Y&zi!^&zi!_&zi!a&zi!b&zi!c&zi!e&zi!f&zi!h&zi(u&zi)U&zi)V&zi)W&zi)X&zi)Y&zi!g&zi)j&zi[&zi!W&zi(v&zi!U&ziQ&zi!d&zi~P#3zO!Y&zi![&zi!^&zi!_&zi!a&zi!b&zi!c&zi!e&zi!f&zi!h&zi(u&zi)T&zi)U&zi)V&zi)W&zi)X&zi)Y&zi!g&zi)j&zi[&zi!W&zi(v&zi!U&ziQ&zi!d&zi~P#3zO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO)T#mO)W#pO!h&zi(u&zi)U&zi)V&zi)X&zi)Y&zi!g&zi)j&zi[&zi!W&zi(v&zi!U&ziQ&zi!d&zi~P#3zO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO)T#mO)V#nO)W#pO!h&zi(u&zi)U&zi)X&zi)Y&zi!g&zi)j&zi[&zi!W&zi(v&zi!U&ziQ&zi!d&zi~P#3zO!Y#qO![#rO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO)T#mO)W#pO!^&zi!h&zi(u&zi)U&zi)V&zi)X&zi)Y&zi!g&zi)j&zi[&zi!W&zi(v&zi!U&ziQ&zi!d&zi~P#3zO!Y#qO![#rO!a#xO!b#yO!c#yO!e#yO!f#zO)T#mO)W#pO!^&zi!_&zi!h&zi(u&zi)U&zi)V&zi)X&zi)Y&zi!g&zi)j&zi[&zi!W&zi(v&zi!U&ziQ&zi!d&zi~P#3zO!Y#qO![#rO!a#xO!b#yO!c#yO!e#yO!f#zO)T#mO!^&zi!_&zi!h&zi(u&zi)U&zi)V&zi)W&zi)X&zi)Y&zi!g&zi)j&zi[&zi!W&zi(v&zi!U&ziQ&zi!d&zi~P#3zO!Y#qO![#rO!b#yO!c#yO!e#yO!f#zO)T#mO!^&zi!_&zi!a&zi!h&zi(u&zi)U&zi)V&zi)W&zi)X&zi)Y&zi!g&zi)j&zi[&zi!W&zi(v&zi!U&ziQ&zi!d&zi~P#3zO!Y#qO![#rO!f#zO)T#mO!^&zi!_&zi!a&zi!b&zi!c&zi!e&zi!h&zi(u&zi)U&zi)V&zi)W&zi)X&zi)Y&zi!g&zi)j&zi[&zi!W&zi(v&zi!U&ziQ&zi!d&zi~P#3zO!Y#qO![#rO)T#mO!^&zi!_&zi!a&zi!b&zi!c&zi!e&zi!f&zi!h&zi(u&zi)U&zi)V&zi)W&zi)X&zi)Y&zi!g&zi)j&zi[&zi!W&zi(v&zi!U&ziQ&zi!d&zi~P#3zO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO)T#mO)U#oO)V#nO)W#pO!h&zi(u&zi)X&zi)Y&zi!g&zi)j&zi[&zi!W&zi(v&zi!U&ziQ&zi!d&zi~P#3zO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO!h/cO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O[(sX~P#3zO!h/cO[(sX~O[/eO~O]%Xaq%Xa!X%Xa!Y%Xa![%Xa!^%Xa!_%Xa!a%Xa!b%Xa!c%Xa!e%Xa!f%Xa!h%Xa(u%Xa(w%Xa(x%Xa)U%Xa)V%Xa)W%Xa)X%Xa)Y%Xa!g%Xa)j%Xa[%Xa!W%Xa!T%Xa#v%Xa(v%Xa!U%XaQ%Xa!d%Xa~O)T/fO!V%Xa~P&,aO[/fO~O!W/fO~O!V/gO)T%Xa~P&,aO!X'Zi!Y'Zi!['Zi!^'Zi!_'Zi!a'Zi!b'Zi!c'Zi!e'Zi!f'Zi!h'Zi(u'Zi(w'Zi(x'Zi)T'Zi)U'Zi)V'Zi)W'Zi)X'Zi)Y'Zi!g'Zi)j'Zi['Zi!W'Zi(v'Zi!U'ZiQ'Zi!d'Zi~P%6oO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O!h'^i)X'^i!g'^i)j'^i['^i!W'^i(v'^i!U'^iQ'^i!d'^i~P#3zO!W/lO~P%:oO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO!h/nO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O!U)rX~P#3zO(r/qO~O!V/sO(w)sO)j/uO~O!h/nO!U)rX~O!U/vO~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO)T#mO)U#oO)V#nO)W#pO)Y#|O!h`i(u`i)X`i!g`i)j`i[`i!W`i(v`i!U`iQ`i!d`i~P#3zO!R/wO~Om){O]!Qa!h!Qa)P!Qa)Y!Qa~OP0PO]0OOm0PO!R0PO!T/|O!V/}O!X0PO!Y0PO![0PO!^0PO!_0PO!a0PO!b0PO!c0PO!e0PO!f0PO!g0PO!h0PO!i0PO(pQO(v0PO(w0PO(x0PO)T/yO)U/zO)V/zO)W/{O)X0PO)Y0PO)[XO~O[0SO~P&6yO!R$[O~O!h*OO)P)Ra)Y)Ra~O)P0WO~O])dO!V)eO!X)bO!g)bO%Z)bO%[)bO%])bO%^)bO%_)fO%`)fO%a)bO(x)cO)j)bO)x)gO~Oe)oO%Y*TO(y$OO~O)X0YO~O]oXeoXmnXqoXsoXtoXuoXvoXwoXxoXyoXzoX!OoX!VoX!roX!soX!toX!uoX!voX!xoX!{oX%voX&roX&soX(roX)ToX)VoX)WoX!ToX!hoX)YoX[oXQoX!doX~O!loX(voX)XoX!XoX!YoX![oX!^oX!_oX!aoX!boX!coX!eoX!foX(uoX(woX(xoX)UoX!goX)joX!WoX!UoX#voX#ToX#VoX#poXboX|oX!ooX#aoX#boX#ioX#toX${oX%coX%eoX%koX%loX%ooX&moX)QoX~P&:uOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!O!_O!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO~O])aie)aim)ai!V)ai!{)ai%v)ai(r)ai)T)ai)V)ai)W)aiQ)ai!d)ai!h)ai)Y)ai)j)ai[)ai!T)ai&r)ai(v)ai)X)ai~P&?sO]&cO!V&bO[#Qi!T#Qi!h#Qi#v#Qi)X#Qi)j#QiQ#Qi!d#Qi(v#Qi~O[raQra!dra!hra)Yra)Xra~P#9{O[raQra!dra!hra)Yra)Xra~P#IkO]&cO!V+kO[raQra!dra!hra)Yra)Xra~O!h*iO!W)ka~O!h*mO!W*Oa~OPmOb!]Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O|#RO!O!_O!X!XO!Y!WO!i!YO!s!aO!t!aO!v!aO!x!cO#V#QO#a#VO#b#TO#v!eO$Y!vO$Z!wO$`!iO$e!jO$g!kO$h!lO$k!mO$m!nO$o!oO$q!pO$s!qO$u!rO$w!sO%_#ZO%`#[O%a#YO%e#UO%l#SO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO)QYO)XiO)Y!ZO)[XO)hcO)idO~O]eOe!POmTO!T*qO!U&TO!V0hO!opO!r!`O!u!bO!{!dO#i#OO#p!xO#t!fO$R!gO$T!hO${!tO$}!uO%U!yO%c!zO%g!{O%o!|O%v!}O%|#PO(rRO(w)sO)TaO)V|O)W{O~P&DuO!h*tO)X)qa~OPmO]$eOb!]Om:|O|#RO!T$WO!V$fO!X!XO!Y!WO!i!YO#V#QO#a#VO#b#TO%_#ZO%`#[O%a#YO%e#UO%l#SO%v$mO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r;UO)QYO)T$kO)W$kO)Y0nO)[XO)hcO)idO[(sP[)dP~P&?sO!h*mO!W*OX~O]#}O!T$WO~O!h0sO!T)zX#v)zX)j)zX~O)X0uO~O)X0vO~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)X0xO)Y#|O~P#3zO)X0vO~P!?WO]1SOe!POm%bO!V1QO!{!dO%v$mO(r$xO)T0zO)Y0}O~O)V1OO)W1OO)j0{OQ#PX!d#PX!h#PX[#PX~P' dO!h1TOQ)lX!d)lX~OQ1VO!d1VO~O)Y1YO)j1XOQ#`X!d#`X!h#`X~P!<[O)Y1YO)j1XOQ#`X!d#`X!h#`X~P!;bOq&UO~O[#ka!T#ka#v#ka)X#ka)j#kaQ#ka!d#ka!h#ka)Y#ka!x#ka(v#ka~P#IkO]&cO!V+kO[#ka!T#ka#v#ka)X#ka)j#kaQ#ka!d#ka!h#ka)Y#ka!x#ka(v#ka~O!W1_O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!W1_O)T1aO~P$%pO!W1_O~P!(zO]#ja!T#ja!V#ja[#ja#v#ja)X#ja)j#jaQ#ja!d#ja!h#ja)Y#ja!x#ja(v#ja~P$ xO[1eO]&cO!V+kO~O!h1fO[)dX~O[1hO~O]&cO!V+kO[#na!T#na#v#na)X#na)j#naQ#na!d#na!h#na)Y#na!x#na(v#na~O]1lOs#SXt#SXu#SXv#SXw#SXx#SXy#SXz#SX!T#SX!V#SX#T#SX#p#SX(x#SX)V#SX)W#SX!l#SX!x#SX#V#SX#v#SX(v#SX)j#SX[#SX!h#SX)X#SXQ#SX!d#SX)Y#SX~O]1mO~O]1pOm$oO!V$fO#V#QO(r$nO)hcO)idO~Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!l+zO#T+vO#V+yO#p+wO(x+tO)V+zO)W+zO~O])fX!T)fX!V)fX!x)fX#v)fX(v)fX)j)fX[)fX!h)fX)X)fXQ)fX!d)fX~P'+}O!x!cO]#Ri!T#Ri!V#Ri#v#Ri(v#Ri)j#Ri[#Ri!h#Ri)X#RiQ#Ri!d#Ri~O!W1xO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!W1xO)T1zO~P$%pO!W1xO~P!(zO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|OQ*RX!d*RX!h*RX~P#3zO)Y1{OQ({X!d({X!h({X~O!h1|OQ(zX!d(zX~OQ2OO!d2OO~O[2PO~O#t$lO)QYO~P8zOm-eO!TxO)j2TO~O[2UO~O#x,aOP#ui]#uib#uie#uim#uis#uit#uiu#uiv#uiw#uix#uiy#uiz#ui|#ui!O#ui!T#ui!V#ui!X#ui!Y#ui!i#ui!o#ui!r#ui!s#ui!t#ui!u#ui!v#ui!x#ui!{#ui#V#ui#a#ui#b#ui#i#ui#p#ui#t#ui#v#ui$R#ui$T#ui$Y#ui$Z#ui$`#ui$e#ui$g#ui$h#ui$k#ui$m#ui$o#ui$q#ui$s#ui$u#ui$w#ui${#ui$}#ui%U#ui%_#ui%`#ui%a#ui%c#ui%e#ui%g#ui%l#ui%o#ui%v#ui%|#ui&m#ui&r#ui&s#ui'Q#ui'R#ui'V#ui'Y#ui'a#ui'b#ui(k#ui(p#ui(r#ui)Q#ui)T#ui)V#ui)W#ui)X#ui)Y#ui)[#ui)h#ui)i#ui!U#ui$c#ui!n#ui%k#ui~O]&cO~O]&cO!TxO!V&bO#v!eO~O(v2ZO(w,cO)Q$Ua)X$Ua~O)QYO)X2]O~O[2^O~P,]O[2^O)X#jO~O[2^O~O$c2cOP$_i]$_ib$_ie$_im$_is$_it$_iu$_iv$_iw$_ix$_iy$_iz$_i|$_i!O$_i!T$_i!V$_i!X$_i!Y$_i!i$_i!o$_i!r$_i!s$_i!t$_i!u$_i!v$_i!x$_i!{$_i#V$_i#a$_i#b$_i#i$_i#p$_i#t$_i#v$_i$R$_i$T$_i$Y$_i$Z$_i$`$_i$e$_i$g$_i$h$_i$k$_i$m$_i$o$_i$q$_i$s$_i$u$_i$w$_i${$_i$}$_i%U$_i%_$_i%`$_i%a$_i%c$_i%e$_i%g$_i%l$_i%o$_i%v$_i%|$_i&m$_i&r$_i&s$_i'Q$_i'R$_i'V$_i'Y$_i'a$_i'b$_i(k$_i(p$_i(r$_i)Q$_i)T$_i)V$_i)W$_i)X$_i)Y$_i)[$_i)h$_i)i$_i!U$_i~O]1pO~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO!h#iO(u#gO)T#mO)U#oO)V#nO)W#pO)X2fO)Y#|O~P#3zOPmO]$eOb!]Om:{O|#RO!V$fO!X!XO!Y!WO!i!YO#V#QO#a#VO#b#TO%_#ZO%`#[O%a#YO%e#UO%l#SO%v$mO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r:}O)T$kO)W$kO)X2iO)Y!ZO)[XO)hcO)idO~P&?sO)X2fO~O(r-UO~O)QYO)j2lO~O)X2nO~O]-YOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!{!dO!|%RO(r-UO)T-VO~O)T2sO~O]&cO!V2uO!h2vO)X)uX~O]-YO!{!dO(r-UO)T-VO~O)X2yO~O!TxO$`!iO$e!jO$g!kO$h!lO$k-bO$m!nO$o!oO$q!pO$s!qO$u!rO$w!sO$}!uO(r:nOe$Xi!o$Xi!{$Xi#i$Xi#p$Xi#t$Xi#v$Xi$R$Xi$T$Xi$Y$Xi$Z$Xi${$Xi%U$Xi%c$Xi%g$Xi%o$Xi%|$Xi(k$Xi)V$Xi!U$Xi$c$Xi~P$0kOm:{O(r:nO~P0zO]2}O~O)X2SO~O!u3PO(r%nO~O[3SO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO!h3TO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO[3UO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO]&cO!V+kO!T%ui#v%ui)X%ui)j%ui~O!W3VO~Om:yO)X(}X~P$GQOb!TOm$oO|3]O#a#VO#b3[O#t!fO%e#UO%l3^O&m!RO&r#WO&s!TO(r$nO)QYO~P&?sOm;cO!o-pO#i-uO#t!fO${,yO%c!zO%k-tO%o!|O%v!}O(r;TO)QYO~P!8jO]&cO!V&bO)X3`O~O)X3aO~O)QYO)X3aO~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO!h#iO(u#gO)T#mO)U#oO)V#nO)W#pO)X3bO)Y#|O~P#3zO)X3bO~O)X3eO~O!U3gO~P$JbOm$oO(r$nO~O]3iO!T'yO~P'+iO!T(QO!l3lO(v(PO])Oae)Oam)Oas)Oat)Oau)Oav)Oaw)Oax)Oay)Oaz)Oa!O)Oa!V)Oa!r)Oa!s)Oa!t)Oa!u)Oa!v)Oa!x)Oa!{)Oa%v)Oa&r)Oa&s)Oa(r)Oa)T)Oa)V)Oa)W)Oa)X)Oa[)Oa!X)Oa!Y)Oa![)Oa!^)Oa!_)Oa!a)Oa!b)Oa!c)Oa!e)Oa!f)Oa!h)Oa(u)Oa(w)Oa(x)Oa)U)Oa)Y)Oa!g)Oa)j)Oa!W)OaQ)Oa!d)Oa!U)Oa#v)Oa~Om$oO!n.cO!o.cO(r$nO~O!h3pO)Y3rO!T)_X~O!o3tO)QYO~P8zO)X3uO~PGVO]3zOm({O!T$WO!{!dO%v$mO&r#WO(r(zO(v4OO)T3wO)V3{O)W3{O~O)X4PO)j4RO~P(&eOm;dO!U4TO!n.pO!o.oO#i-uO${!tO$}!uO%g!{O%k-tO%o!|O%v!}O(r;VO)QYO~P!8jOm;dO%v!}O(r;VO~P!8jO(v4UO~Om$oO!T(QO(r$nO(v(PO)QYO~O!l3lO~P((sO)j4WO!U&oX!h&oX~O!h4XO!U*QX~O!U4ZO~Ob4]Om$oO&m!RO(r$nO~O!T(ZO]&kie&kim&kis&kit&kiu&kiv&kiw&kix&kiy&kiz&ki!O&ki!V&ki!r&ki!s&ki!t&ki!u&ki!v&ki!x&ki!{&ki%v&ki&r&ki&s&ki(r&ki)T&ki)V&ki)W&ki)X&ki[&ki!X&ki!Y&ki![&ki!^&ki!_&ki!a&ki!b&ki!c&ki!e&ki!f&ki!h&ki(u&ki(w&ki(x&ki)U&ki)Y&ki!g&ki)j&ki!W&kiQ&ki!d&ki!U&ki#v&ki~O(v&ki~P(*TO(v.uO~P(*TO[4`O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO[4`O~O[4aO~O]#}O!T$WO!V'Zi!X'Zi!Y'Zi!['Zi!^'Zi!_'Zi!a'Zi!b'Zi!c'Zi!e'Zi!f'Zi!h'Zi(u'Zi(w'Zi(x'Zi)T'Zi)U'Zi)V'Zi)W'Zi)X'Zi)Y'Zi!g'Zi)j'Zi['Zi!W'Zi(v'Zi!U'ZiQ'Zi!d'Zi~OPmOb%QOm:zO!X!XO!Y!WO!i!YO#V#QO%_#ZO%`#[O%a#YO%v$mO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$xO)Y!ZO)[XO)hcO)idO]#]aq#]a!T#]a!V#]a)T#]a)V#]a)W#]a~O(r%nO)Y4fO[*YP~O*W4eO~O'f4hO*W4eO~O*W4iO~OmnXqoXq&wX~Oe4kO%Y*TO(y/]O~Oe4kO%Y*TO(y4lO~O!h/cO[(sa~O!W4pO~O]&cO!V+kO!T%uq#v%uq)X%uq)j%uq~O]#}O!T$WO!X'Zq!Y'Zq!['Zq!^'Zq!_'Zq!a'Zq!b'Zq!c'Zq!e'Zq!f'Zq!h'Zq(u'Zq(w'Zq(x'Zq)T'Zq)U'Zq)V'Zq)W'Zq)X'Zq)Y'Zq!g'Zq)j'Zq['Zq!W'Zq(v'Zq!U'ZqQ'Zq!d'Zq~O!V'Zq~P(5bO!V.}O&r#WO&s$wO~P(5bO!T$WO!V)rO(w)sO!U(UX!h(UX~P!JwO!h/nO!U)ra~O!W4xO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO!h*iO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!U4|O~P&6yO!W4|O~P&6yO[4|O~P&6yO[5RO~P&6yO]5SO!h'ua)P'ua)Y'ua~O!h*OO)P)Ri)Y)Ri~O]&cO!V&bO[#Qq!T#Qq!h#Qq#v#Qq)X#Qq)j#QqQ#Qq!d#Qq(v#Qq~O[riQri!dri!hri)Yri)Xri~P#IkO]&cO!V+kO[riQri!dri!hri)Yri)Xri~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O!h'Tq)X'Tq!g'Tq)j'Tq['Tq!W'Tq(v'Tq!U'TqQ'Tq!d'Tq~P#3zO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O!W'|a!h'|a~P#3zO!W5XO~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO!h5YO(u#gO)T#mO)U#oO)V#nO)W#pO)X#jO)Y#|O!U)rX~P#3zO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O!h#{i)X#{i~P#3zO]*vO!T$WO!V&bO)j*rO!h(Va)X(Va~O!h1fO[)dX]'dX~P%2xO)Y5[O!T%qa!h%qa#v%qa)j%qa~O!h0sO!T)za#v)za)j)za~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)X5_O)Y#|O~P#3zO]1SOe!POm;[O!V1QO!{!dO%v$mO(r$xO)T;xO)V5aO)W5aO~OQ#Pa!d#Pa!h#Pa[#Pa~P(DjO]1SOe!POs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!V1QO!{!dO!|%RO%v$mO(r$xOQ#kX!d#kX!h#kX[#kX~Om%bO)T0zO)V;yO)W;yO~P(ElO]&cOQ#Pa!d#Pa!h#Pa[#Pa~O!V&bO)j5eO~P(GZO(r%nOQ#dX!d#dX!h#dX[#dX~O)V;yO)W;yOQ#nX!d#nX!h#nX[#nX~P' dO!V+kO~P(GZO]1SOb!TOe!POm;]O|#RO!V1QO!{!dO#a#VO#b#TO%e#UO%l#SO%v$mO&m!RO&r#WO&s!TO(r;QO)QYO)T;xO)V5aO)W5aO)Y+nO[)dP~P&?sO!h1TOQ)la!d)la~Oq&fO)j5jOQ#`am(}X!d#`a!h#`a)Y(}X~P$GQO(r-UOQ#ga!d#ga!h#ga~Oq&fO)j5jOQ#`a])^Xe)^Xm)^Xs)^Xt)^Xu)^Xv)^Xw)^Xx)^Xy)^Xz)^X!O)^X!T)^X!V)^X!d#`a!h#`a!l)^X!r)^X!s)^X!t)^X!u)^X!v)^X!x)^X!{)^X%v)^X&r)^X&s)^X(r)^X(v)^X)T)^X)V)^X)W)^X)Y)^X~O#a5mO#b5mO~O]&cO!V+kO[#ki!T#ki#v#ki)X#ki)j#kiQ#ki!d#ki!h#ki)Y#ki!x#ki(v#ki~O!W5oO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!W5oO~P!(zO!W5oO)T5qO~P$%pO]#ji!T#ji!V#ji[#ji#v#ji)X#ji)j#jiQ#ji!d#ji!h#ji)Y#ji!x#ji(v#ji~P$ xO)QYO)Y5sO~P8zO!h1fO[)da~O&r#WO&s$wO!T#qa!x#qa#v#qa(v#qa)j#qa[#qa!h#qa)X#qaQ#qa!d#qa)Y#qa~P#NeO[5xO~P!(zO[)oP~P!4xO)U6OO)V5|O]#Ua!T#Ua!V#Ua)T#Ua)W#Uas#Uat#Uau#Uav#Uaw#Uax#Uay#Uaz#Ua!l#Ua!x#Ua#T#Ua#V#Ua#p#Ua#v#Ua(v#Ua(x#Ua)j#Uab#Uae#Uam#Ua|#Ua!O#Ua!o#Ua!r#Ua!s#Ua!t#Ua!u#Ua!v#Ua!{#Ua#a#Ua#b#Ua#i#Ua#t#Ua${#Ua%c#Ua%e#Ua%k#Ua%l#Ua%o#Ua%v#Ua&m#Ua&r#Ua&s#Ua(r#Ua)Q#Ua)X#Ua[#Ua!h#UaQ#Ua!d#Ua~O!x!cO]#Rq!T#Rq!V#Rq#v#Rq(v#Rq)j#Rq[#Rq!h#Rq)X#RqQ#Rq!d#Rq~O!W6TO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!W6TO~P!(zO!h1|OQ(za!d(za~O)X6YO~Om-eO!TxO)j6ZO~O]*vO!T$WO!V&bO!h*tO)X)qX~O)j6_O~P)+cO[6aO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO!h#iO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO[6aO~O$c6cOP$_q]$_qb$_qe$_qm$_qs$_qt$_qu$_qv$_qw$_qx$_qy$_qz$_q|$_q!O$_q!T$_q!V$_q!X$_q!Y$_q!i$_q!o$_q!r$_q!s$_q!t$_q!u$_q!v$_q!x$_q!{$_q#V$_q#a$_q#b$_q#i$_q#p$_q#t$_q#v$_q$R$_q$T$_q$Y$_q$Z$_q$`$_q$e$_q$g$_q$h$_q$k$_q$m$_q$o$_q$q$_q$s$_q$u$_q$w$_q${$_q$}$_q%U$_q%_$_q%`$_q%a$_q%c$_q%e$_q%g$_q%l$_q%o$_q%v$_q%|$_q&m$_q&r$_q&s$_q'Q$_q'R$_q'V$_q'Y$_q'a$_q'b$_q(k$_q(p$_q(r$_q)Q$_q)T$_q)V$_q)W$_q)X$_q)Y$_q)[$_q)h$_q)i$_q!U$_q~O)X6dO~OPmO]$eOb!]Om:{O|#RO!V$fO!X!XO!Y!WO!i!YO#V#QO#a#VO#b#TO%_#ZO%`#[O%a#YO%e#UO%l#SO%v$mO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r:}O)T$kO)W$kO)X6fO)Y!ZO)[XO)hcO)idO~P&?sO(v6hO)j*rO~P)+cO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)X6fO)Y#|O~P#3zO[6jO~P!(zO)X6nO~O)X6oO~O]-YOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!{!dO(r-UO)T-VO~O]&cO!V2uO!h%Oa)X%Oa[%Oa~O!W6uO)T6vO~P$%pO!h2vO)X)ua~O[6yO]&cO!V2uO~O!TxO$`!iO$e!jO$g!kO$h!lO$k-bO$m!nO$o!oO$q!pO$s!qO$u!rO$w!sO$}!uO(r:nOe$Xq!o$Xq!{$Xq#i$Xq#p$Xq#t$Xq#v$Xq$R$Xq$T$Xq$Y$Xq$Z$Xq${$Xq%U$Xq%c$Xq%g$Xq%o$Xq%|$Xq(k$Xq)V$Xq!U$Xq$c$Xq~P$0kOPmO]$eOb!]Om:{O|#RO!V$fO!X!XO!Y!WO!i!YO#V#QO#a#VO#b#TO%_#ZO%`#[O%a#YO%e#UO%l#SO%v$mO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r:}O)QYO)T$kO)W$kO)X6{O)Y!ZO)[XO)hcO)idO~P&?sO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)X7OO)Y#|O~P#3zO)X7PO~OP7QO(pQO~Om*[O)X)^X~P$GQOq&fOm(}X)X)^X~P$GQO)X7SO~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O)X&Sa~P#3zO!U7UO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO)X7VO~OPmO]$eOb!]Om:|O|#RO!V$fO!X!XO!Y!WO!i!YO#V#QO#a#VO#b#TO%_#ZO%`#[O%a#YO%e#UO%l#SO%v$mO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r;UO)QYO)T$kO)W$kO)Y0nO)[XO)hcO)idO[)dP~P&?sO!h3pO)Y7ZO!T)_a~O!h3pO!T)_a~O)X7`O)j7bO~P(&eO)X7dO~PGVO]3zOm({Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!{!dO!|%RO%v$mO&r#WO(r(zO)T3wO)V3{O)W3{O~O)T7hO~O]&cO!T*qO!V7jO!h7kO#v!eO(v4OO~O)X7`O)j7mO~P)FwO]3zOm({O!{!dO%v$mO&r#WO(r(zO)T3wO)V3{O)W3{O~Oq&fO])cX!T)cX!V)cX!h)cX#v)cX(v)cX)X)cX)j)cX[)cX~O)X7`O~O!T(QO!l7sO(v(PO])Oie)Oim)Ois)Oit)Oiu)Oiv)Oiw)Oix)Oiy)Oiz)Oi!O)Oi!V)Oi!r)Oi!s)Oi!t)Oi!u)Oi!v)Oi!x)Oi!{)Oi%v)Oi&r)Oi&s)Oi(r)Oi)T)Oi)V)Oi)W)Oi)X)Oi[)Oi!X)Oi!Y)Oi![)Oi!^)Oi!_)Oi!a)Oi!b)Oi!c)Oi!e)Oi!f)Oi!h)Oi(u)Oi(w)Oi(x)Oi)U)Oi)Y)Oi!g)Oi)j)Oi!W)OiQ)Oi!d)Oi!U)Oi#v)Oi~O(r%nO!U(fX!h(fX~O!h4XO!U*Qa~Oq&fO]*Pae*Pam*Pas*Pat*Pau*Pav*Paw*Pax*Pay*Paz*Pa!O*Pa!T*Pa!V*Pa!r*Pa!s*Pa!t*Pa!u*Pa!v*Pa!x*Pa!{*Pa%v*Pa&r*Pa&s*Pa(r*Pa)T*Pa)V*Pa)W*Pa)X*Pa[*Pa!X*Pa!Y*Pa![*Pa!^*Pa!_*Pa!a*Pa!b*Pa!c*Pa!e*Pa!f*Pa!h*Pa(u*Pa(w*Pa(x*Pa)U*Pa)Y*Pa!g*Pa)j*Pa!W*PaQ*Pa!d*Pa(v*Pa!U*Pa#v*Pa~O!T(ZO]&kqe&kqm&kqs&kqt&kqu&kqv&kqw&kqx&kqy&kqz&kq!O&kq!V&kq!r&kq!s&kq!t&kq!u&kq!v&kq!x&kq!{&kq%v&kq&r&kq&s&kq(r&kq)T&kq)V&kq)W&kq)X&kq[&kq!X&kq!Y&kq![&kq!^&kq!_&kq!a&kq!b&kq!c&kq!e&kq!f&kq!h&kq(u&kq(w&kq(x&kq)U&kq)Y&kq!g&kq)j&kq!W&kqQ&kq!d&kq(v&kq!U&kq#v&kq~OPmOb%QOm:zO!T$WO!i!YO#V#QO%_#ZO%`#[O%a#YO%v$mO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$xO)[XO)hcO)idO~O]*Ui!V*Ui!X*Ui!Y*Ui![*Ui!^*Ui!_*Ui!a*Ui!b*Ui!c*Ui!e*Ui!f*Ui!h*Ui(u*Ui(w*Ui(x*Ui)T*Ui)U*Ui)V*Ui)W*Ui)X*Ui)Y*Ui!g*Ui)j*Ui[*Ui!W*Ui(v*Ui!U*UiQ*Ui!d*Ui~P*&WO[7xO~O!W7yO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O!h'^q)X'^q!g'^q)j'^q['^q!W'^q(v'^q!U'^qQ'^q!d'^q~P#3zO!h7zO[*YX~O[7|O~O*W7}O~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O!h_y)X_y!g_y)j_y[_y!W_y(v_y!U_yQ_y!d_y~P#3zO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O[(ha!h(ha~P#3zO]#}O!T$WO!V'Zy!X'Zy!Y'Zy!['Zy!^'Zy!_'Zy!a'Zy!b'Zy!c'Zy!e'Zy!f'Zy!h'Zy(u'Zy(w'Zy(x'Zy)T'Zy)U'Zy)V'Zy)W'Zy)X'Zy)Y'Zy!g'Zy)j'Zy['Zy!W'Zy(v'Zy!U'ZyQ'Zy!d'Zy~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O!h'^y)X'^y!g'^y)j'^y['^y!W'^y(v'^y!U'^yQ'^y!d'^y~P#3zO]&cO!V+kO!T%uy#v%uy)X%uy)j%uy~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O!U(Ua!h(Ua~P#3zO!W4xO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O!U#}i!h#}i~P#3zO!U8PO~P&6yO!W8PO~P&6yO[8PO~P&6yO[8RO~P&6yO]&cO!V&bO[#Qy!T#Qy!h#Qy#v#Qy)X#Qy)j#QyQ#Qy!d#Qy(v#Qy~O]&cO!V+kO[rqQrq!drq!hrq)Yrq)Xrq~O]&cOQ#Pi!d#Pi!h#Pi[#Pi~O!V+kO~P*9jOQ#nX!d#nX!h#nX[#nX~P(DjO!V&bO~P*9jOQ(OX](OXe'qXm'qXs(OXt(OXu(OXv(OXw(OXx(OXy(OXz(OX!V(OX!d(OX!h(OX!{'qX%v'qX(r'qX)T(OX)V(OX)W(OX[(OX~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|OQ#_i!d#_i!h#_i[#_i~P#3zO&r#WO&s$wOQ#fi!d#fi!h#fi~O(r-UO)Y1YO)j1XOQ#`X!d#`X!h#`X~O!W8WO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!W8WO~P!(zO!T#qi!x#qi#v#qi(v#qi)j#qi[#qi!h#qi)X#qiQ#qi!d#qi)Y#qi~O]&cO!V+kO~P*?fO]&YO!V&WO&r#WO&s$wO)T&VO)V&ZO)W&ZO~P*?fO[8YO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!h8ZO[)oX~O[8]O~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|OQ*TX!d*TX!h*TX~P#3zO)Y8`OQ*SX!d*SX!h*SX~O)X8bO~O[$bi!h#{a)X#{a~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)X8eO)Y#|O~P#3zO[8gO~P!(zO[8gO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO!h#iO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO[8gO~O]&cO!V&bO(v8mO~O)X8nO~O]&cO!V2uO!h%Oi)X%Oi[%Oi~O!W8qO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!W8qO)T8sO~P$%pO!W8qO~P!(zO]&cO!V2uO!h(Ya)X(Ya~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO!h#iO(u#gO)T#mO)U#oO)V#nO)W#pO)X8tO)Y#|O~P#3zO)X2iO~P!(zO)X8tO~OP%oO[8uO(pQO~O[8uO~O)X8vO~P%%eO#T8yO(x.PO)X8wO~O!h3pO!T)_i~O)Y8}O!T'wa!h'wa~O)X9PO)j9RO~P)FwO)X9PO~O)X9PO)j9VO~P(&eOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O~P)GgO]&cO!V7jO!T!ya!h!ya#v!ya(v!ya)X!ya)j!ya[!ya~O!W9^O)T9_O~P$%pO!T$WO!h7kO(v4OO)X9PO)j9VO~O!T$WO~P#EfO[9bO]&cO!V7jO~O]&cO!V7jO!T&aa!h&aa#v&aa(v&aa)X&aa)j&aa[&aa~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O)X&ba~P#3zO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)X9PO)Y#|O~P#3zO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O!U&oi!h&oi~P#3zO!V.}O]']i!T']i!X']i!Y']i![']i!^']i!_']i!a']i!b']i!c']i!e']i!f']i!h']i(u']i(w']i(x']i)T']i)U']i)V']i)W']i)X']i)Y']i!g']i)j']i[']i!W']i(v']i!U']iQ']i!d']i~O(r%nO)Y9eO~O!h7zO[*Ya~O[9gO~P&6yO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO!h#iO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O!U(Ua)X#Zi~P#3zO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|OQ#_q!d#_q!h#_q[#_q~P#3zO&r#WO&s$wOQ#fq!d#fq!h#fq~O)j5jOQ#`a!d#`a!h#`a~O]&cO!V+kO!T#qq!x#qq#v#qq(v#qq)j#qq[#qq!h#qq)X#qqQ#qq!d#qq)Y#qq~O!h8ZO[)oa~O)V5|O]&Vi!T&Vi!V&Vi)T&Vi)U&Vi)W&Vis&Vit&Viu&Viv&Viw&Vix&Viy&Viz&Vi!l&Vi!x&Vi#T&Vi#V&Vi#p&Vi#v&Vi(v&Vi(x&Vi)j&Vib&Vie&Vim&Vi|&Vi!O&Vi!o&Vi!r&Vi!s&Vi!t&Vi!u&Vi!v&Vi!{&Vi#a&Vi#b&Vi#i&Vi#t&Vi${&Vi%c&Vi%e&Vi%k&Vi%l&Vi%o&Vi%v&Vi&m&Vi&r&Vi&s&Vi(r&Vi)Q&Vi)X&Vi[&Vi!h&ViQ&Vi!d&Vi~O)X9jO~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O[$bq!h#{i)X#{i~P#3zO[9lO~P!(zO[9lO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO!h#iO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO[9lO~O]&cO!V&bO(v9oO~O[9pO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO[9pO~O]&cO!V2uO!h%Oq)X%Oq[%Oq~O!W9tO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!W9tO~P!(zO)X6fO~P!(zO)X9uO~O)X9vO~O(x.PO)X9vO~O!h3pO!T)_q~O)Y9xO!T'wi!h'wi~O!T$WO!h7kO(v4OO)X9yO)j9{O~O)X9yO~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)X9yO)Y#|O~P#3zO)X9yO)j:OO~P)FwO]&cO!V7jO!T!yi!h!yi#v!yi(v!yi)X!yi)j!yi[!yi~O!W:SO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!W:SO)T:UO~P$%pO!W:SO~P!(zO]&cO!V7jO!T(da!h(da(v(da)X(da)j(da~O[:WO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO!h#iO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO[:WO~O[:]O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO[:]O~O]&cO!V2uO!h%Oy)X%Oy[%Oy~O)X:^O~O)X:_O~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)X:_O)Y#|O~P#3zO!T$WO!h7kO(v4OO)X:_O)j:bO~O]&cO!V7jO!T!yq!h!yq#v!yq(v!yq)X!yq)j!yq[!yq~O!W:dO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!W:dO~P!(zO[:fO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO[:fO~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)X:hO)Y#|O~P#3zO)X:hO~O]&cO!V7jO!T!yy!h!yy#v!yy(v!yy)X!yy)j!yy[!yy~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(u#gO)T#mO)U#oO)V#nO)W#pO)X:lO)Y#|O~P#3zO)X:lO~O]ZXmhXqZXqjX!TjX!VZX!XZX!YZX![ZX!^ZX!_ZX!aZX!bZX!cZX!eZX!fZX!gZX!hZX(uZX(v$]X(wZX(xZX)TZX)UZX)VZX)WZX)XZX)YZX)jZX~O]%WXmnXqoXq%WX!ToX!V%WX!X%WX!Y%WX![%WX!^%WX!_%WX!a%WX!b%WX!c%WX!e%WX!f%WX!gnX!h%WX(u%WX(w%WX(x%WX)T%WX)U%WX)V%WX)W%WX)Y%WX)jnX[%WXQ%WX!d%WX~O)X%WX!W%WX(v%WX!U%WX~P+GrO]oX]%WXeoXmnXqoXq%WXsoXtoXuoXvoXwoXxoXyoXzoX!OoX!VoX!V%WX!roX!soX!toX!uoX!voX!xoX!{oX%voX&roX&soX(roX)ToX)VoX)WoX[oX[%WX!hoX)YoX~O)XoX)joX~P+JSO]%WXmnXqoXq%WX!V%WX!h%WXQ%WX!d%WX[%WX~O!T%WX#v%WX)X%WX)j%WX(v%WX~P+LmOQoXQ%WX!ToX!X%WX!Y%WX![%WX!^%WX!_%WX!a%WX!b%WX!c%WX!doX!d%WX!e%WX!f%WX!gnX!h%WX(u%WX(w%WX(x%WX)T%WX)U%WX)V%WX)W%WX)Y%WX)jnX~P+JSO]oX]%WXmnXqoXq%WXsoXtoXuoXvoXwoXxoXyoXzoX!OoX!V%WX!roX!soX!toX!uoX!voX!xoX!{oX%voX&roX&soX(roX)ToX)VoX)WoX~O!ToX(voX)XoX)joX~P, eOeoX!VoX)X%WX~P, eOmnXqoX)X%WX~Oe)oO%Y)pO(y:oO~Oe)oO%Y)pO(y:tO~Oe)oO%Y)pO(y:pO~Oe$RO%Y*TO'[$TO'_$UO(y:oO~Oe$RO%Y*TO'[$TO'_$UO(y:qO~Oe$RO%Y*TO'[$TO'_$UO(y:sO~O[jX]jXsjXtjXujXvjXwjXxjXyjXzjX!VjX&rjX&sjX)TjX)VjX)WjXejX!OjX!rjX!sjX!tjX!ujX!vjX!xjX!{jX%vjX(rjX~P#1jO]ZXmhXqZXqjX!VZX!hZX)XZX)jZX~O!TZX#vZX(vZX~P,'{OmhXqjX)QjX)XZX)jjX~O]ZX]jXejXmhXqZXqjXsjXtjXujXvjXwjXxjXyjXzjX!OjX!VZX!VjX!rjX!sjX!tjX!ujX!vjX!xjX!{jX%vjX&rjX&sjX(rjX)TjX)VjX)WjX[ZX[jX!hjX)YjX)jjX~O)XZX~P,)VO]ZX]jXmhXqZXqjXsjXtjXujXvjXwjXxjXyjXzjX!TjX!VZX!VjX!XZX!YZX![ZX!^ZX!_ZX!aZX!bZX!cZX!eZX!fZX!gZX!hZX!hjX&rjX&sjX(uZX(wZX(xZX)TZX)TjX)UZX)VZX)VjX)WZX)WjX)YZX)YjX)jZX~OQZXQjX!dZX!djX~P,+pO]jXejXsjXtjXujXvjXwjXxjXyjXzjX!OjX!VjX!rjX!sjX!tjX!ujX!vjX!xjX!{jX%vjX&rjX&sjX(rjX)TjX)VjX)WjX~P#1jO]ZX]jXejXmhXqZXqjXsjXtjXujXvjXwjXxjXyjXzjX!OjX!VZX!VjX!rjX!sjX!tjX!ujX!vjX!xjX!{jX%vjX&rjX&sjX(rjX)TjX)VjX)WjX~O)XjX~P,0rO[ZX[jXejX!OjX!rjX!sjX!tjX!ujX!vjX!xjX!{jX%vjX(rjX)jjX~P,+pO]ZX]jXmhXqZXqjXsjXtjXujXvjXwjXxjXyjXzjX!OjX!TjX!VZX!rjX!sjX!tjX!ujX!vjX!xjX!{jX%vjX&rjX&sjX(rjX(vjX)TjX)VjX)WjX)XjX)jjX~Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O~PBUOe$RO%Y*TO(y:oO~Oe$RO%Y*TO(y:pO~Oe$RO%Y*TO(y:vO~Oe$RO%Y*TO(y:uO~O]%hOe!POm%bOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!V%kO!{!dO!|%RO%v$mO(r$xO)T;aO)V;bO)W;bO~O]%hOe!POm%bO!V%kO!{!dO%v$mO(r$xO)T;aO)V;bO)W;bO~Oe$RO%Y$SO(y:pO~Oe$RO%Y$SO(y:tO~Om:yO~Om:xO~O]dXmhXqjX!TdX~Oe)oO%Y*TO(y:oO~Oe)oO%Y*TO(y:pO~Oe)oO%Y*TO(y:qO~Oe)oO%Y*TO(y:rO~Oe)oO%Y*TO(y:sO~Oe)oO%Y*TO(y:uO~Oe)oO%Y*TO(y:vO~Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O~P,9OO](}Xs(}Xt(}Xu(}Xv(}Xw(}Xx(}Xy(}Xz(}X!O(}X!r(}X!s(}X!t(}X!u(}X!v(}X!x(}X!{(}X%v(}X&r(}X&s(}X(r(}X)T(}X)V(}X)W(}X)j(}X~Om:xO!T(}X(v(}X)X(}X~P,<}O]&wXmnXqoX!T&wX~Oe4kO%Y*TO(y;tO~Om;[O)T;xO)V5aO)W5aO~P(ElOe!POm%bO!{!dO%v$mO(r$xO~O]1SO!V1QO)T0zO)V;yO)W;yOQ#nX!d#nX!h#nX[#nX~P,?yO)T;YO~Om;hO~Om;iO~Om;jO~Om;lO~Om;mO~Om;nO~Om;lO!T$WOQ(}X!d(}X!h(}X)Y(}X[(}X)j(}X~P$GQOm;jO!T$WO~P$GQOm;hO!g$YO)j$YO~Om;jO!g$YO)j$YO~Om;lO!g$YO)j$YO~Om;iO[(}X!h(}X)Y(}X)j(}X~P$GQOe/^O%Y*TO(y;tO~Om;uO~O)T<YO~OV'e'h'i'g(p)[!R(rST%Z!Y!['je%[!i'R!f]'f*Z'k(w!^!_'l'm'l~",
|
|
26520
|
-
goto: "%5]*ZPPPPPP*[P*_PP.TPP4i7j7j:tP:t>OP>i>{?aFXMX!&]!,sP!3m!4b!5VP!5qPPPPPPPP!6[P!7tP!9V!:oP!:uPPPPPP!:xP!:xPP!:xPPPPPPPPP!;U!>lP!>oPP!?]!@QPPPPP!@UP>l!AgPP>l!Cn!Eo!E}!Gd!ITP!I`P!Io!Io!MP#!`##v#'S#*^!Eo#*hPP!Eo#*o#*u#*h#*h#*xP#*|#+k#+k#+k#+k!ITP#,U#,g#.|P#/bP#0}P#1R#1Z#2O#2Z#4i#4q#4q#1RP#1RP#4x#5OP#5YPP#5u#6d#7U#5uP#7v#8SP#5uP#5uPP#5u#5uP#5uP#5uP#5uP#5uP#5uP#5uP#8V#5Y#8sP#9YP#9o#9o#9o#9o#9|#1RP#:d#?`#?}PPPPPPPP#@uP#ATP#ATP#Aa#Dn#9OPP#@}#EQP#Ee#Ep#Ev#Ev#@}#FlP#1R#1R#1R#1R#1RP!Io#GW#G_#G_#G_#Gc!Ly#Gm!Ly#Gq!E}!E}!E}#Gt#L^!E}>l>l>l$#V!@Q!@Q!@Q!@Q!@Q!@Q!6[!6[!6[$#jP$%V$%e!6[$%kPP!6[$'y$'|#@l$(P:t7j$+V$-Q$.q$0a7jPP7j$2T7jP7j7jP7jP$5Z7jP7jPP7j$5gPPPPPPPPP*[P$8o$8u$;^$=d$=j$>Q$>[$>g$>v$>|$@[$AZ$Ab$Ai$Ao$Aw$BR$BX$Bd$Bj$Bs$B{$CW$C^$Ch$Cn$Cx$DP$D`$Df$DlP$Dr$Dz$ER$Ea$F}$GT$GZ$Gb$GkPPPPPPPP$Gq$GuPPPPP$Nw$'y$Nz%$S%&[PP%&i%&lPPPPPPPPP%&x%'{%(R%(V%)|%+Z%+|%,T%.d%.jPPP%.t%/P%/S%/Y%0a%0d%0n%0x%0|%2Q%2s%2y#@uP%3d%3t%3w%4X%4e%4i%4o%4u$'y$'|$'|%4x%4{P%5V%5YR#cP'`mO[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#{#}$U$W$Y$e$f$k%]%m&Q&S&W&b&f&x&y&|'O'P'b'i'j'y(`(b(i)l)r*h*i*l*q*r*v+W+Y+h+j+k,P,R,n,q,w-]-^-a-g.P.Q.U.}/Q/[/c/l/n/s/u0h0{1Q1a1b1l1p1z1|2c2f2i2u2z2}3i4O4R4W4a5Y5e5q6_6c6f6h6j6t6v6{7b7j7m8e8g8m8s8t9R9V9]9_9l9o9p9{:O:U:W:]:b:fU%om%p7QQ&m!`Q(j#]d0P)}/|/}0O0R4}5O5P5S8QR7Q3Tb}Oaewx{!g&S*q&v$i[!W!X!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#{#}$U$W$Y$e$f$k%]%m&Q&W&b&f&x&y&|'O'P'b'i'j'y(`(b(i)l)r*h*i*l*r*v+W+Y+h+j+k,P,R,n,q,w-]-^-a-g.P.Q.U.}/Q/[/c/l/n/s/u0{1a1b1l1p1z1|2c2f2i2u2z2}3i4O4R4W4a5Y5e5q6_6c6f6h6j6t6v6{7b7j7m8e8g8m8s8t9R9V9]9_9l9o9p9{:O:U:W:]:b:fS%`f0h#d%jgnp|#O$g$|$}%S%d%h%i%w&s't'u(Q*Y*`*b*t+],l,v-_-p-w.f.m.o0]0y0z1O1S2_2j5a6g;W;X;Y;`;a;b;o;p;q;r;v;w;x;y<W<X<YS%qm!YS&u!h#PQ']!tQ'g!yQ'h!zQ(j#`Q(k#]Q(l#^Q*x%kQ,W&lQ,]&nQ-S'^Q-d'fQ-k'qS.r(Z4XQ/f)gQ0e*mQ2Q,[Q2X,cQ3O-eQ4b.|Q4f/TQ5f0}Q6[2TQ6}3PQ8a6ZQ9e7zR;Z1Q$|#hS!]$y%Q%T%Z&j&k'Q'X'Z'a'c(a(e(h(w(x)R)S)T)U)V)W)X)Y)Z)[)])^)_)k)q)x+X+g,O,S,j,u-h-i-|.y/p0`0b0g0i0w1`1y2a2h3R3c3d4c4d4j4m4s4u4y4z5d5p5w6U6e6i6s6z7q7r7t8S8T8c8f8j8r9T9[9k9q9|:T:Y:`:iQ&p!dQ(g#ZQ(s#bQ)j$T[*s%e*W0k2`2g2{Q,^&oQ/O(fQ/S(kQ/Z(tS/i)i/PQ0r+QS4q/j/kR8O4r'a![O[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#{#}$U$W$Y$e$f$k%]%m&Q&S&W&b&f&x&y&|'O'P'b'i'j'y(`(b(i)l)r*h*i*l*q*r*v+W+Y+h+j+k,P,R,n,q,w-]-^-a-g.P.Q.U.}/Q/[/c/l/n/s/u0h0{1Q1a1b1l1p1z1|2c2f2i2u2z2}3i4O4R4W4a5Y5e5q6_6c6f6h6j6t6v6{7b7j7m8e8g8m8s8t9R9V9]9_9l9o9p9{:O:U:W:]:b:f'a!VO[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#{#}$U$W$Y$e$f$k%]%m&Q&S&W&b&f&x&y&|'O'P'b'i'j'y(`(b(i)l)r*h*i*l*q*r*v+W+Y+h+j+k,P,R,n,q,w-]-^-a-g.P.Q.U.}/Q/[/c/l/n/s/u0h0{1Q1a1b1l1p1z1|2c2f2i2u2z2}3i4O4R4W4a5Y5e5q6_6c6f6h6j6t6v6{7b7j7m8e8g8m8s8t9R9V9]9_9l9o9p9{:O:U:W:]:b:fQ)O#kS+Q%y0sQ/r)sk3}.g3s3w3z3{7c7e7f7h7k9X9Y:RQ)Q#kk3|.g3s3w3z3{7c7e7f7h7k9X9Y:Rl)P#k.g3s3w3z3{7c7e7f7h7k9X9Y:RT+Q%y0s[UOwx!g&S*qW$`[e$e(b#l$p_!f!u!}#R#S#T#U#V#Z$S$T$l%U&U&Y&c&m'_'}(P(U(^(g)j)p+[+a+b+t+y,X,k,z-Q-o-t.W.X._.`.d.q.u1T1X1f1k1m2l3[3]3^3p3t5j5}6P7[8Z![%cg$g%d%i&s*Y*t+],l,v-_0z1O2_;W;X;Y;a;b;o;p;q;r;v;w;y<W<X<YY%snp%w-p.fl(|#k.g3s3w3z3{7c7e7f7h7k9X9Y:RS;e't-wU;f(Q.m.o&|;{af{|!W!X!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#{#}$U$W$Y$f$k$|$}%S%]%h%m&Q&W&b&y&|'O'i'j'u'y(`(i)l)r*`*b*h*i*l*r+W+Y+h+j+k,P,R,n,q-g.P.Q.U.}/Q/[/c/l/n/s/u0]0h0y0{1Q1a1b1l1p1z2c2i2j2u4O4R4W4a5Y5a5e5q6_6c6f6g6h6j6t6v6{7b7j7m8e8g8m8s8t9R9V9]9_9l9o9p9{:O:U:W:]:b:f;`;xQ;|1Sd;}&x'P'b,w-]-^-a2f2z2}W<O&f*v1|3iQ<P#O[<Q!t'^'f,[2T6ZT<]%y0s[VOwx!g&S*qW$a[e$e(bQ$p.u!j$q_!f!u!}#V#Z$S$T$l%U&U&Y&c&m'_(g)j)p+[+a+t,X,k,z-Q-o.d1T1X1f1k1m2l3t5j8Z&^$zaf{!W!X!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#{#}$U$W$Y$f$k%]%m&Q&W&b&y&|'O'i'j'y(`(i)l)r*h*i*l*r+W+Y+h+j+k,P,R,n,q-g.P.Q.U.}/Q/[/c/l/n/s/u0h0{1Q1a1b1l1p1z2c2i2u4O4R4W4a5Y5e5q6_6c6f6h6j6t6v6{7b7j7m8e8g8m8s8t9R9V9]9_9l9o9p9{:O:U:W:]:b:f![%cg$g%d%i&s*Y*t+],l,v-_0z1O2_;W;X;Y;a;b;o;p;q;r;v;w;y<W<X<YY%snp%w-p.fQ'r#O|'|#R#S#T#U'}(P(U(^+b+y.W.X._.`.q3[3]3^3p5}6P7[l(|#k.g3s3w3z3{7c7e7f7h7k9X9Y:RS-n't-wQ3W-tU;s(Q.m.on;{|$|$}%S%h'u*`*b0]0y2j5a6g;`;x[<Q!t'^'f,[2T6ZW<R&f*v1|3id<S&x'P'b,w-]-^-a2f2z2}Q<Z1ST<]%y0s!Q!UO[ewx!g$e&S&f&x'P'b(b*q*v,w-]-^-a1|2f2z2}3i!v$t_!f!u!}#O#V#Z$S$T$l%U&U&Y&c&m'_'t(Q(g)j)p+[+t,X,k,z-Q-o-w.d.m.o1S1T1X1f1k1m2l3t5j8Z&^%Paf{!W!X!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#{#}$U$W$Y$f$k%]%m&Q&W&b&y&|'O'i'j'y(`(i)l)r*h*i*l*r+W+Y+h+j+k,P,R,n,q-g.P.Q.U.}/Q/[/c/l/n/s/u0h0{1Q1a1b1l1p1z2c2i2u4O4R4W4a5Y5e5q6_6c6f6h6j6t6v6{7b7j7m8e8g8m8s8t9R9V9]9_9l9o9p9{:O:U:W:]:b:f$Q%lgnp|#k$g$|$}%S%d%h%i%w%y&s'^'f'u*Y*`*b*t+],[,l,v-_-p.f.g0]0s0y0z1O2T2_2j3s3w3z3{5a6Z6g7c7e7f7h7k9X9Y:R;W;X;Y;`;a;b;o;p;q;r;v;w;x;y<W<X<YQ'[!tz(O#R#S#T#U'}(P(U(^+y.W.X._.`.q3[3]3^3p5}6P7[f-Z'`-T-V-Y2p2q2s2v6q6r8pQ1W+aQ1Z+bQ2k,yQ3X-tQ4[.uQ5l1YR8V5m!Q!UO[ewx!g$e&S&f&x'P'b(b*q*v,w-]-^-a1|2f2z2}3i!x$t_!f!u!}#O#V#Z$S$T$l%U&U&Y&c&m'_'t(Q(g)j)p+[+a+t,X,k,z-Q-o-w.d.m.o1S1T1X1f1k1m2l3t5j8Z&^%Paf{!W!X!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#{#}$U$W$Y$f$k%]%m&Q&W&b&y&|'O'i'j'y(`(i)l)r*h*i*l*r+W+Y+h+j+k,P,R,n,q-g.P.Q.U.}/Q/[/c/l/n/s/u0h0{1Q1a1b1l1p1z2c2i2u4O4R4W4a5Y5e5q6_6c6f6h6j6t6v6{7b7j7m8e8g8m8s8t9R9V9]9_9l9o9p9{:O:U:W:]:b:f$S%lgnp|!t#k$g$|$}%S%d%h%i%w%y&s'^'f'u*Y*`*b*t+],[,l,v-_-p.f.g0]0s0y0z1O2T2_2j3s3w3z3{5a6Z6g7c7e7f7h7k9X9Y:R;W;X;Y;`;a;b;o;p;q;r;v;w;x;y<W<X<Y|(O#R#S#T#U'}(P(U(^+b+y.W.X._.`.q3[3]3^3p5}6P7[Q3X-tR4[.u[WOwx!g&S*qW$b[e$e(b#l$p_!f!u!}#R#S#T#U#V#Z$S$T$l%U&U&Y&c&m'_'}(P(U(^(g)j)p+[+a+b+t+y,X,k,z-Q-o-t.W.X._.`.d.q.u1T1X1f1k1m2l3[3]3^3p3t5j5}6P7[8Z![%cg$g%d%i&s*Y*t+],l,v-_0z1O2_;W;X;Y;a;b;o;p;q;r;v;w;y<W<X<YY%snp%w-p.fl(|#k.g3s3w3z3{7c7e7f7h7k9X9Y:RS;e't-wU;f(Q.m.on;{|$|$}%S%h'u*`*b0]0y2j5a6g;`;xQ;|1SQ<P#O[<Q!t'^'f,[2T6Z&^<Taf{!W!X!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#{#}$U$W$Y$f$k%]%m&Q&W&b&y&|'O'i'j'y(`(i)l)r*h*i*l*r+W+Y+h+j+k,P,R,n,q-g.P.Q.U.}/Q/[/c/l/n/s/u0h0{1Q1a1b1l1p1z2c2i2u4O4R4W4a5Y5e5q6_6c6f6h6j6t6v6{7b7j7m8e8g8m8s8t9R9V9]9_9l9o9p9{:O:U:W:]:b:fd<U&x'P'b,w-]-^-a2f2z2}W<V&f*v1|3iT<]%y0sp$PT$_$o%b%r({:z:{:|;[;];^;_;c;d<[o)m$V*U*[/_:w:x:y;h;i;j;k;l;m;n;up$QT$_$o%b%r({:z:{:|;[;];^;_;c;d<[o)n$V*U*[/_:w:x:y;h;i;j;k;l;m;n;u^&e}!O$i$j%`%j;Zd&i!U$t%P%l'[(O1W1Z3X4[V/a)O)P3}S%Ye$eQ,T&fQ.{(bQ2m-QQ5y1mQ6V1|Q6m2lR9h8Z#}!TO[_ewx!f!g!u!}#O#V#Z$S$T$e$l%U&S&U&Y&c&f&m&x'P'_'b't(Q(b(g)j)p*q*v+[+a+t,X,k,w,z-Q-]-^-a-o-t-w.d.m.o1S1T1X1f1k1m1|2f2l2z2}3i3t5j8Z#[^O[_`wx!f!g!}#O$S$d$l$s$u&S&U&Y&c&m&r&x'P'b't(Q)p*]*q*v+[,X,k,w,z-]-^-a-o-t-w.d.m.o1S1T1f2f2z2}3i3t_(U#R#S#T+b3[3]3^#}ZO[wx!g!k#R#S#T%m&S&U&Y&c&m&w&x&y&|'O'P'['b't'x'}(P(Q(U*q*v+[+b,X,h,k,q-P-]-^-a-o-t-w-z._.d.m.q1S1T1f2c2k2z2}3[3]3^3i6c6j8g9l9p:W:]:fQ$]YR0T*OR*Q$]e0P)}/|/}0O0R4}5O5P5S8Q'`!YO[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#{#}$U$W$Y$e$f$k%]%m&Q&S&W&b&f&x&y&|'O'P'b'i'j'y(`(b(i)l)r*h*i*l*q*r*v+W+Y+h+j+k,P,R,n,q,w-]-^-a-g.P.Q.U.}/Q/[/c/l/n/s/u0h0{1Q1a1b1l1p1z1|2c2f2i2u2z2}3i4O4R4W4a5Y5e5q6_6c6f6h6j6t6v6{7b7j7m8e8g8m8s8t9R9V9]9_9l9o9p9{:O:U:W:]:b:fe0P)}/|/}0O0R4}5O5P5S8QR5T0T^(T#R#S#T+b3[3]3^Y.]'}(R(U(V7TU3k.Z.^.qS7X3l4VR9c7s^(S#R#S#T+b3[3]3^[.['}(R(T(U(V7TW3j.Z.].^.qU7W3k3l4VS8z7X7sR:V9cT.k(Q.md]Owx!g&S't(Q*q-w.m!v^[_`!f!}#O$S$d$l$s$u&U&Y&c&m&r&x'P'b)p*]*v+[,X,k,w,z-]-^-a-o-t.d.o1S1T1f2f2z2}3i3tQ%tnT1u+}1v!jbOaenpwx{|!g#O$|$}%S%h%w&S't'u(Q*`*b*q-p-w.f.m.o0]0y1S2j5a6g;`;xf-W'`-T-V-Y2p2q2s2v6q6r8pj3x.g3s3w3z3{7c7e7f7h7k9X9Y:Rr;zg$g%d%i&s*Y*t,l,v-_2_;W;X;Y;o;q;vi<^+]0z1O;a;b;p;r;w;y<W<X<Y!O&^y%X&V&Y&Z'k)h*d*f+]+e+x/m0^0y0z1O1S1j5a5v;x;yz&az%O%W%e&d's*W*_,b-x0Z0[0k0|2`2g2{5V5b6l8iS'{#Q.Xn+l&X*g+f+m+p-j/h0_1R1^4t5W5`5u8XQ2W,a^2t-X2r2x6p6w8o9se7i3y7_7g7o7p9U9W9`:Q:cS+^&U1TY+n&Y&c*v1S3iR5s1f#w!POaegnpwx{|!g#O$g$|$}%S%d%h%i%w&S&s't'u(Q*Y*`*b*q*t+],l,v-_-p-w.f.m.o0]0y0z1O1S2_2j5a6g;W;X;Y;`;a;b;o;p;q;r;v;w;x;y<W<X<Y`oOwx!g&S't*q-w#U!Paeg{|#O$g$|$}%S%d%h%i&s'u*Y*`*b*t+],l,v-_0]0y0z1O1S2_2j5a6g;W;X;Y;`;a;b;o;p;q;r;v;w;x;y<W<X<YU%vnp-pQ*}%wS.e(Q.mT3v.f.oW+r&^+l+s1cV+z&a+{7iQ+x&`U+z&a+{7iQ-w'tT.S'y.U'`![O[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#{#}$U$W$Y$e$f$k%]%m&Q&S&W&b&f&x&y&|'O'P'b'i'j'y(`(b(i)l)r*h*i*l*q*r*v+W+Y+h+j+k,P,R,n,q,w-]-^-a-g.P.Q.U.}/Q/[/c/l/n/s/u0h0{1Q1a1b1l1p1z1|2c2f2i2u2z2}3i4O4R4W4a5Y5e5q6_6c6f6h6j6t6v6{7b7j7m8e8g8m8s8t9R9V9]9_9l9o9p9{:O:U:W:]:b:fX1r+y.X5}6P'W!VO[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#}$U$W$Y$e$f$k%]%m&Q&S&W&b&f&x&y&|'O'P'b'i'j'y(`(b(i)l)r*h*i*l*q*r*v+W+Y+h+j+k,P,R,n,q,w-]-^-a-g.P.Q.U.}/[/c/n/s/u0h0{1Q1a1b1l1p1z1|2c2f2i2u2z2}3i4O4R4W5Y5e5q6_6c6f6h6j6t6v6{7b7j7m8e8g8m8s8t9R9V9]9_9l9o9p9{:O:U:W:]:b:fW1r+y.X5}6PR2e,s!WjO[wx!g!k%m&S&y&|'O'b*q,q-]-^-a2c2z6c6j8g9l9p:W:]:fY%Ve$e(b1p3iQ'S!nS(y#i5YQ,m&xQ,x'PS.O'y.UQ2b,nQ6k2iQ6|2}Q8h6fR9m8e'W![O[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#}$U$W$Y$e$f$k%]%m&Q&S&W&b&f&x&y&|'O'P'b'i'j'y(`(b(i)l)r*h*i*l*q*r*v+W+Y+h+j+k,P,R,n,q,w-]-^-a-g.P.Q.U.}/[/c/n/s/u0h0{1Q1a1b1l1p1z1|2c2f2i2u2z2}3i4O4R4W5Y5e5q6_6c6f6h6j6t6v6{7b7j7m8e8g8m8s8t9R9V9]9_9l9o9p9{:O:U:W:]:b:fX1r+y.X5}6P'ayO[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#}$U$W$Y$e$f$k%]%m&Q&S&W&b&f&x&y&|'O'P'b'i'j'y(`(b(i)l)r*h*i*l*q*r*v+W+Y+h+j+k+y,P,R,n,q,w-]-^-a-g.P.Q.U.X.}/[/c/n/s/u0h0{1Q1a1b1l1p1z1|2c2f2i2u2z2}3i4O4R4W5Y5e5q5}6P6_6c6f6h6j6t6v6{7b7j7m8e8g8m8s8t9R9V9]9_9l9o9p9{:O:U:W:]:b:fQ&`yS't#O-uR1[+cS+^&U1TR5n1[Q1P+]R5g1OR1P+]T+^&U1Tz&[%X&V&Y&Z'k)h*d*f+]+e/m0^0y0z1O1S1j5a5v;x;yQ&]yR1n+x!P&[y%X&V&Y&Z'k)h*d*f+]+e+x/m0^0y0z1O1S1j5a5v;x;yQ+u&^S+|&a7iS1d+l+sQ1t+{R5r1c!WkO[wx!g!k%m&S&y&|'O'b*q,q-]-^-a2c2z6c6j8g9l9p:W:]:fS%zo.eS&Oq-rQ&_yQ&q!eQ'e!yQ*p%eU*{%v%{3vS+P%x%}Q+q&]Q,Y&mS,Z&n'gQ,r&{S0X*W,bS0o*|*}Q0q+OQ1o+xS2S,]-fQ5U0ZQ5Z0pQ5{1nQ6Y2RQ6]2WQ7n3yQ9S7_R:P9U[uOwx!g&S*qQ,Y&mQ-v'tQ3Y-tR3_-wxlOwx!g!k%m&S&y'O*q,q2c6c6j8g9l9p:W:]:fU$h[&|-^S%zo.eS&Oq-rQ*p%eU*{%v%{3vS+P%x%}S0X*W,bS0o*|*}Q0q+OQ5U0ZQ5Z0pQ7n3yQ9S7_R:P9UT,_&q,`]uOwx!g&S*q[uOwx!g&S*qQ,Y&mQ,n&xQ,w'PW-`'b-]-a2zQ-v'tQ3Y-tQ3_-wR6{2}[%fg$g,l,v-_2_R0l*t^$XV!U$a$z%P<R<SQ'S!nS)`#}*vS)v$W*qQ)y$YY*s%e*W0k2g2{Q/O(fS/i)i/PS0a*h4aS0j*r6_Q0r+QQ4Q.gQ4n/cS4q/j/kS4v/n5YQ4{/uQ6`2`U7a3s3y4RQ8O4rQ8k6hY9Q7_7b7c7l7mQ9r8mW9z9O9R9U9VQ:Z9oU:a9{9}:OR:j:bS)v$W*qT4v/n5YZ)t$W)u*q/n5YQ&w!hR'x#PS,g&v'vQ2[,eR6^2ZxlOwx!g!k%m&S&y'O*q,q2c6c6j8g9l9p:W:]:fV$h[&|-^!XkO[wx!g!k%m&S&y&|'O'b*q,q-]-^-a2c2z6c6j8g9l9p:W:]:f!WhO[wx!g!k%m&S&y&|'O'b*q,q-]-^-a2c2z6c6j8g9l9p:W:]:fR'W!q!WkO[wx!g!k%m&S&y&|'O'b*q,q-]-^-a2c2z6c6j8g9l9p:W:]:fR,n&xQ&y!iQ&{!jQ'O!lR,q&zR,o&xxlOwx!g!k%m&S&y'O*q,q2c6c6j8g9l9p:W:]:fX-`'b-]-a2z[uOwx!g&S*qQ,z'PQ-v'tS.k(Q.mR3_-w[uOwx!g&S*qQ,z'PW-`'b-]-a2zT.k(Q.mg-Z'`-T-V-Y2p2q2s2v6q6r8pylOwx!g!k%m&S&y'O*q,q2c6c6j8g9l9p:W:]:fb!OOaewx{!g&S*q&|$j[f!W!X!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#{#}$U$W$Y$e$f$k%]%m&Q&W&b&f&x&y&|'O'P'b'i'j'y(`(b(i)l)r*h*i*l*r*v+W+Y+h+j+k,P,R,n,q,w-]-^-a-g.P.Q.U.}/Q/[/c/l/n/s/u0h0{1Q1a1b1l1p1z1|2c2f2i2u2z2}3i4O4R4W4a5Y5e5q6_6c6f6h6j6t6v6{7b7j7m8e8g8m8s8t9R9V9]9_9l9o9p9{:O:U:W:]:b:f#d%jgnp|#O$g$|$}%S%d%h%i%w&s't'u(Q*Y*`*b*t+],l,v-_-p-w.f.m.o0]0y0z1O1S2_2j5a6g;W;X;Y;`;a;b;o;p;q;r;v;w;x;y<W<X<YQ']!tQ-S'^Q-d'fQ2Q,[Q6[2TR8a6Zj$RT$_%b%r:z:{:|;[;];^;_;c;di)o$V*U:w:x:y;h;i;j;k;l;m;nj$RT$_%b%r:z:{:|;[;];^;_;c;dh)o$V*U:w:x:y;h;i;j;k;l;m;nS/^({<[V4k/_/`;u[uOwx!g&S*qQ-v'tR3_-w[uOwx!g&S*qT.k(Q.m'`!YO[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#{#}$U$W$Y$e$f$k%]%m&Q&S&W&b&f&x&y&|'O'P'b'i'j'y(`(b(i)l)r*h*i*l*q*r*v+W+Y+h+j+k,P,R,n,q,w-]-^-a-g.P.Q.U.}/Q/[/c/l/n/s/u0h0{1Q1a1b1l1p1z1|2c2f2i2u2z2}3i4O4R4W4a5Y5e5q6_6c6f6h6j6t6v6{7b7j7m8e8g8m8s8t9R9V9]9_9l9o9p9{:O:U:W:]:b:fR7R3T[uOwx!g&S*qQ-v'tS.k(Q.mR3_-w[pOwx!g&S*qQ%wnS-p't-wT.f(Q.mS%{o.eS*|%v3vR0p*}Q+R%yR5]0sS%zo.eS&Oq-rU*{%v%{3vS+P%x%}S0o*|*}Q0q+OQ5Z0pQ7n3yQ9S7_R:P9U`qOwx!g&S(Q*q.mS%xn-pU%}p.f.oQ+O%wT-r't-wS'z#Q.XR.Y'{T.R'y.US.S'y.UQ8x7UR9w8yT5}1q8_R6P1q#d!Pgnp|#O$g$|$}%S%d%h%i%w&s't'u(Q*Y*`*b*t+],l,v-_-p-w.f.m.o0]0y0z1O1S2_2j5a6g;W;X;Y;`;a;b;o;p;q;r;v;w;x;y<W<X<Yb!QOaewx{!g&S*q&}![[f!W!X!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#{#}$U$W$Y$e$f$k%]%m&Q&W&b&f&x&y&|'O'P'b'i'j'y(`(b(i)l)r*h*i*l*r*v+W+Y+h+j+k,P,R,n,q,w-]-^-a-g.P.Q.U.}/Q/[/c/l/n/s/u0h0{1Q1a1b1l1p1z1|2c2f2i2u2z2}3i4O4R4W4a5Y5e5q6_6c6f6h6j6t6v6{7b7j7m8e8g8m8s8t9R9V9]9_9l9o9p9{:O:U:W:]:b:f#d!Pgnp|#O$g$|$}%S%d%h%i%w&s't'u(Q*Y*`*b*t+],l,v-_-p-w.f.m.o0]0y0z1O1S2_2j5a6g;W;X;Y;`;a;b;o;p;q;r;v;w;x;y<W<X<Yb!QOaewx{!g&S*q&|![[f!W!X!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#{#}$U$W$Y$e$f$k%]%m&Q&W&b&f&x&y&|'O'P'b'i'j'y(`(b(i)l)r*h*i*l*r*v+W+Y+h+j+k,P,R,n,q,w-]-^-a-g.P.Q.U.}/Q/[/c/l/n/s/u0h0{1Q1a1b1l1p1z1|2c2f2i2u2z2}3i4O4R4W4a5Y5e5q6_6c6f6h6j6t6v6{7b7j7m8e8g8m8s8t9R9V9]9_9l9o9p9{:O:U:W:]:b:fk3|.g3s3w3z3{7c7e7f7h7k9X9Y:RQ4Q.gS7a3s3yU9Q7_7c7lS9z9O9UR:a9}#|!TO[_ewx!f!g!u!}#O#V#Z$S$T$e$l%U&S&U&Y&c&f&m&x'P'_'b't(Q(b(g)j)p*q*v+[+a+t,X,k,w,z-Q-]-^-a-o-t-w.d.m.o1S1T1X1f1k1m1|2f2l2z2}3i3t5j8ZR4].uQ(]#US.v([(^S4^.w.xR7w4_Q.s(ZR7u4X#|!TO[_ewx!f!g!u!}#O#V#Z$S$T$e$l%U&S&U&Y&c&f&m&x'P'_'b't(Q(b(g)j)p*q*v+[+a+t,X,k,w,z-Q-]-^-a-o-t-w.d.m.o1S1T1X1f1k1m1|2f2l2z2}3i3t5j8Zp$w`$d$s%X&r'`(_(f)i*d-T/k1j5k5v8Uq(}#k%y.g0s3s3w3z3{7c7e7f7h7k9X9Y:RR,U&fR6W1|'X!VO[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#}$U$W$Y$e$f$k%]%m&Q&S&W&b&f&x&y&|'O'P'b'i'j'y(`(b(i)l)r*h*i*l*q*r*v+W+Y+h+j+k,P,R,n,q,w-]-^-a-g.P.Q.U.}/[/c/n/s/u0h0{1Q1a1b1l1p1z1|2c2f2i2u2z2}3i4O4R4W5Y5e5q6_6c6f6h6j6t6v6{7b7j7m8e8g8m8s8t9R9V9]9_9l9o9p9{:O:U:W:]:b:f$q#rS%T%Z'Q'X'Z'a'c(a(e(h(w(x)R)S)U)V)W)X)Y)Z)[)])^)_)k)q)x+X+g,O,S,j,u-h-i-|.y/p0`0b0g0i0w1`1y2a2h3R3c3d4c4d4j4m4s4u4y4z5d5p5w6U6e6i6s6z7q7r7t8S8T8c8f8j8r9T9[9k9q9|:T:Y:`:i$]#sS%T%Z'Q'X'Z'a'c(h(w(x)R)V)^)_)k)q)x+X+g,O,S,j,u-h-i-|.y/p0`0b0g0i0w1`1y2a2h3R3c3d4c4d4j4m4s4u4y4z5d5p5w6U6e6i6s6z7q7r7t8S8T8c8f8j8r9T9[9k9q9|:T:Y:`:i$Z#tS%T%Z'Q'X'Z'a'c(h(w(x)R)^)_)k)q)x+X+g,O,S,j,u-h-i-|.y/p0`0b0g0i0w1`1y2a2h3R3c3d4c4d4j4m4s4u4y4z5d5p5w6U6e6i6s6z7q7r7t8S8T8c8f8j8r9T9[9k9q9|:T:Y:`:i$c#wS%T%Z'Q'X'Z'a'c(h(w(x)R)U)V)W)X)^)_)k)q)x+X+g,O,S,j,u-h-i-|.y/p0`0b0g0i0w1`1y2a2h3R3c3d4c4d4j4m4s4u4y4z5d5p5w6U6e6i6s6z7q7r7t8S8T8c8f8j8r9T9[9k9q9|:T:Y:`:i'X![O[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#}$U$W$Y$e$f$k%]%m&Q&S&W&b&f&x&y&|'O'P'b'i'j'y(`(b(i)l)r*h*i*l*q*r*v+W+Y+h+j+k,P,R,n,q,w-]-^-a-g.P.Q.U.}/[/c/n/s/u0h0{1Q1a1b1l1p1z1|2c2f2i2u2z2}3i4O4R4W5Y5e5q6_6c6f6h6j6t6v6{7b7j7m8e8g8m8s8t9R9V9]9_9l9o9p9{:O:U:W:]:b:fQ/P(fQ/j)iQ4r/kR9d7y']![O[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#}$U$W$Y$e$f$k%]%m&Q&S&W&b&f&x&y&|'O'P'b'i'j'y(`(b(i)l)r*h*i*l*q*r*v+W+Y+h+j+k,P,R,n,q,w-]-^-a-g.P.Q.U.}/Q/[/c/l/n/s/u0h0{1Q1a1b1l1p1z1|2c2f2i2u2z2}3i4O4R4W5Y5e5q6_6c6f6h6j6t6v6{7b7j7m8e8g8m8s8t9R9V9]9_9l9o9p9{:O:U:W:]:b:fQ#eQR(u#eU$|a;`;xb%Ue$e&f(b-Q1m1|2l8ZQ'_!u!Q*^$|%U'_*`*f+h,P0]0^1b2p6q6t7e8p9X9]:R;W;o;p;v;w<WS*`$}%SQ*f%XS+h&W1QQ,P&bQ0]*bQ0^*dQ1b+kQ2p-VS6q2q2sQ6t2uQ7e3wQ8p6rS9X7f7hQ9]7jQ:R9YQ;W%dS;o;X;YS;p<X<YQ;v;qQ;w;rT<W0z;a[[Owx!g&S*ql$c[&|'}+[,X,h,k-P-^-o-z._.d.ql&|!k%m&y'O,q2c6c6j8g9l9p:W:]:f^'}#R#S#T+b3[3]3^`+[&U&Y&c*v1S1T1f3iS,X&m-tQ,h&wU,k&x'P2}S-P'[2kW-^'b-]-a2zS-o't-wQ-z'xQ._(PS.d(Q.mR.q(UQ)|$[R/x)|Q0R)}Q4}/|Q5O/}Q5P0OY5Q0R4}5O5P8QR8Q5SQ*P$]S0U*P0VR0V*QS.`(P._S3n.`7[R7[3pQ3q.aS7Y3o3rU7^3q7Y8{R8{7ZQ.m(QR4S.m!|_O[wx!f!g!}#O$S$l&S&U&Y&c&m&x'P'b't(Q)p*q*v+[,X,k,w,z-]-^-a-o-t-w.d.m.o1S1T1f2f2z2}3i3tU$r_$u*]U$u`$d&rR*]$sU$}a;`;xd*a$}*b2q6r7f9Y;X;q;r<XQ*b%SQ2q-VQ6r2sQ7f3wQ9Y7hQ;X%dQ;q;YQ;r<YT<X0z;aS+{&a7iR1s+{S*j%Z/pR0c*jQ1U+_R5i1UU+e&V0z;xR1]+eQ+s&^Q1c+lT1i+s1cQ8[5yR9i8[QwOS&Rw&ST&Sx*qQ,`&qR2V,`W)u$W*q/n5YR/t)uU/o)q)v0gR4w/o[*u%e%f*W2`2g2{R0m*uQ,d&uR2Y,dQ-a'bQ2z-]T2|-a2zQ2w-XR6x2wQ-f'gQ2R,]T3Q-f2RS%pm7QR*z%pdnOwx!g&S't(Q*q-w.mR%unQ0t+RR5^0tQ.U'yR3f.UQ1v+}R6Q1vU*n%`*x;ZR0f*nS1g+n0nR5t1gQ7l3yQ9O7_U9a7l9O9}R9}9U$O!SO[_ewx!f!g!u!}#O#V#Z$S$T$e$l%U&S&U&Y&c&f&m&x'P'_'b't(Q(b(g)j)p*q*v+[+a+t,X,k,w,z-Q-]-^-a-o-t-w.d.m.o.u1S1T1X1f1k1m1|2f2l2z2}3i3t5j8ZR&g!SQ4Y.sR7v4YQ1},UR6X1}S/d)_)`R4o/dW(o#a(j(k/SR/W(oQ7{4fR9f7{T)a#}*v!USO[wx!g!k%m&S&y&|'O'b,q-]-^-a2c2z6c6j8g9l9p:W:]:fj$ya{$k%]+j,R1a1z5q6v8s9_:UY%Te$e(b1p3iY%Zf$f(i)l*lQ&j!WQ&k!XQ'Q!nQ'X!rQ'Z!sQ'a!vQ'c!xQ(a#XQ(e#YS(h#[+YQ(w#gQ(x#iQ)R#lQ)S#qQ)T#rQ)U#sQ)V#tQ)W#uQ)X#vQ)Y#wQ)Z#xQ)[#yQ)]#zQ)^#{S)_#}*vQ)k$UQ)q$WQ)x$YQ+X&QS+g&W1QQ,O&bQ,S&fQ,j&xQ,u'PQ-h'iQ-i'jS-|'y.UQ.y(`S/p)r0hS0`*h4aQ0b*iQ0g*qQ0i*rQ0w+WS1`+h+kQ1y,PQ2a,nS2h,w6{Q3R-gQ3c.PQ3d.QQ4c.}Q4d/QQ4j/[Q4m/cQ4s/lQ4u/nQ4y/sQ4z/uQ5d0{Q5p1bQ5w1lQ6U1|S6e2f8tQ6i2iQ6s2uQ6z2}Q7q4OQ7r4RQ7t4WQ8S5YQ8T5eQ8c6_Q8f6fQ8j6hQ8r6tS9T7b7mQ9[7jQ9k8eQ9q8mS9|9R9VQ:T9]Q:Y9oS:`9{:OR:i:bR,V&fd]Owx!g&S't(Q*q-w.m!v^[_`!f!}#O$S$d$l$s$u&U&Y&c&m&r&x'P'b)p*]*v+[,X,k,w,z-]-^-a-o-t.d.o1S1T1f2f2z2}3i3t#r${ae!u$e$|$}%S%U%X%d&W&b&f'_(b*`*b*d*f+h+k,P-Q-V0]0^1Q1b1m1|2l2p2q2s2u3w6q6r6t7e7f7h7j8Z8p9X9Y9]:R;W;X;Y;`;a;o;p;q;r;v;w<W<X<YQ%tnS+d&V+eW+r&^+l+s1cU+z&a+{7iQ1k+tT5c0z;x``Owx!g&S't*q-wS$d[-oQ$s_b%Xe$e&f(b-Q1m1|2l8Z!h&r!f!}#O$S$l&U&Y&c&m&x'P'b(Q)p*v+[,X,k,w,z-]-^-a-t.d.m.o1S1T1f2f2z2}3i3tQ'`!uS(_#V+aQ(f#ZS)i$T(gQ*d%UQ-T'_Q/k)jQ1j+tQ5k1XQ5v1kR8U5jS(W#R3]S(X#S3^V(Y#T+b3[R$^Ye0Q)}/|/}0O0R4}5O5P5S8QW(R#R#S#T+bQ([#US.Z'}(US.a(P._Q.x(^W1r+y.X5}6PQ3Z-tQ3h.WQ3o.`Q4V.qU7T3[3]3^Q7]3pR8|7[Q.b(PR3m._T.l(Q.mdgOwx!g&S&m't*q-t-wU$g[,X-oQ&s!fQ'k!}Q'u#OQ)h$SQ*Y$l`+]&U&Y&c*v1S1T1f3iQ,l&xQ,v'PY-_'b-]-a2z2}S.g(Q.mQ/m)pQ0y+[S2_,k-^S2j,w,zS3s.d.oQ6g2fR7c3td]Owx!g&S't(Q*q-w.m!v^[_`!f!}#O$S$d$l$s$u&U&Y&c&m&r&x'P'b)p*]*v+[,X,k,w,z-]-^-a-o-t.d.o1S1T1f2f2z2}3i3tR%tnQ3y.gQ7_3sQ7g3wQ7o3zQ7p3{Q9U7cU9W7e7f7hQ9`7kS:Q9X9YR:c:RZ+o&Y&c*v1S3ipzOnpwx!g%w&S't(Q*q-p-w.f.m.o[%Oa%d0z;`;a;xU%We%h1SQ%eg^&d{|%i1O5a;b;yQ's#OQ*W$gb*_$|$}%S;W;X;Y<W<X<YQ,b&sQ-x'uQ0Z*Y[0[*`*b;o;p;q;rQ0k*tQ0|+]Q2`,lQ2g,vS2{-_2_U5V0];v;wQ5b0yQ6l2jR8i6gQ+}&aR9Z7iS1q+y.XQ8^5}R8_6P[%^f$f(i)l)r0hR0d*lR+`&UQ+_&UR5h1TS&Xy+xQ*g%XU+f&V0z;xS+m&Y1SW+p&Z1O5a;yQ-j'kQ/h)hS0_*d*fQ1R+]Q1^+eQ4t/mQ5W0^Q5`0yQ5u1jR8X5vR5z1mYvOwx&S*qR&t!gW%gg,l,v-_T*X$g2_T)w$W*q[uOwx!g&S*qQ&}!kQ*y%mQ,p&yQ,t'OQ2d,qQ6b2cQ8d6cQ8l6jQ9n8gQ:X9lQ:[9pQ:e:WQ:g:]R:k:fxlOwx!g!k%m&S&y'O*q,q2c6c6j8g9l9p:W:]:fU$h[&|-^X-`'b-]-a2zQ-['`R2o-TS-X'`-TQ2r-VQ2x-YU6p2p2q2sQ6w2vS8o6q6rR9s8p[rOwx!g&S*qS-q't-wT.h(Q.mR+S%y[sOwx!g&S*qS-s't-wT.i(Q.m[tOwx!g&S*qT.j(Q.mT.T'y.UX%af%k0h1QQ.w([R4_.xR.t(ZR(d#XQ(r#aS/R(j(kR4e/SR/V(lR4g/T",
|
|
26521
|
-
nodeNames: "⚠ RawString > MacroName LineComment BlockComment PreprocDirective #include String EscapeSequence SystemLibString Identifier ) ( ArgumentList ConditionalExpression AssignmentExpression CallExpression PrimitiveType FieldExpression FieldIdentifier DestructorName TemplateMethod ScopedFieldIdentifier NamespaceIdentifier TemplateType TypeIdentifier ScopedTypeIdentifier ScopedNamespaceIdentifier :: NamespaceIdentifier TypeIdentifier TemplateArgumentList < TypeDescriptor const volatile restrict _Atomic mutable constexpr constinit consteval StructSpecifier struct MsDeclspecModifier __declspec Attribute AttributeName Identifier AttributeArgs { } [ ] UpdateOp ArithOp ArithOp ArithOp LogicOp BitOp BitOp BitOp CompareOp CompareOp CompareOp > CompareOp BitOp UpdateOp , Number CharLiteral AttributeArgs VirtualSpecifier BaseClassClause Access virtual FieldDeclarationList FieldDeclaration extern static register inline thread_local AttributeSpecifier __attribute__ PointerDeclarator MsBasedModifier __based MsPointerModifier FunctionDeclarator ParameterList ParameterDeclaration PointerDeclarator FunctionDeclarator Noexcept noexcept RequiresClause requires True False ParenthesizedExpression CommaExpression LambdaExpression LambdaCaptureSpecifier TemplateParameterList OptionalParameterDeclaration TypeParameterDeclaration typename class VariadicParameterDeclaration VariadicDeclarator ReferenceDeclarator OptionalTypeParameterDeclaration VariadicTypeParameterDeclaration TemplateTemplateParameterDeclaration template AbstractFunctionDeclarator AbstractPointerDeclarator AbstractArrayDeclarator AbstractParenthesizedDeclarator AbstractReferenceDeclarator ThrowSpecifier throw TrailingReturnType CompoundStatement FunctionDefinition MsCallModifier TryStatement try CatchClause catch LinkageSpecification Declaration InitDeclarator InitializerList InitializerPair SubscriptDesignator FieldDesignator ExportDeclaration export ImportDeclaration import ModuleName PartitionName HeaderName CaseStatement case default LabeledStatement StatementIdentifier ExpressionStatement IfStatement if ConditionClause Declaration else SwitchStatement switch DoStatement do while WhileStatement ForStatement for ReturnStatement return BreakStatement break ContinueStatement continue GotoStatement goto CoReturnStatement co_return CoYieldStatement co_yield AttributeStatement ForRangeLoop AliasDeclaration using TypeDefinition typedef PointerDeclarator FunctionDeclarator ArrayDeclarator ParenthesizedDeclarator ThrowStatement NamespaceDefinition namespace ScopedIdentifier Identifier OperatorName operator ArithOp BitOp CompareOp LogicOp new delete co_await ConceptDefinition concept UsingDeclaration enum StaticAssertDeclaration static_assert ConcatenatedString TemplateDeclaration FriendDeclaration friend union FunctionDefinition ExplicitFunctionSpecifier explicit FieldInitializerList FieldInitializer DefaultMethodClause DeleteMethodClause FunctionDefinition OperatorCast operator TemplateInstantiation FunctionDefinition FunctionDefinition Declaration ModuleDeclaration module RequiresExpression RequirementList SimpleRequirement TypeRequirement CompoundRequirement ReturnTypeRequirement ConstraintConjuction LogicOp ConstraintDisjunction LogicOp ArrayDeclarator ParenthesizedDeclarator ReferenceDeclarator TemplateFunction OperatorName StructuredBindingDeclarator ArrayDeclarator ParenthesizedDeclarator ReferenceDeclarator BitfieldClause FunctionDefinition FunctionDefinition Declaration FunctionDefinition Declaration AccessSpecifier UnionSpecifier ClassSpecifier EnumSpecifier SizedTypeSpecifier TypeSize EnumeratorList Enumerator DependentType Decltype decltype auto PlaceholderTypeSpecifier ParameterPackExpansion ParameterPackExpansion FieldIdentifier PointerExpression SubscriptExpression BinaryExpression ArithOp LogicOp LogicOp BitOp UnaryExpression LogicOp BitOp UpdateExpression CastExpression SizeofExpression sizeof CoAwaitExpression CompoundLiteralExpression NULL NewExpression new NewDeclarator DeleteExpression delete ParameterPackExpansion nullptr this UserDefinedLiteral ParamPack #define PreprocArg #if #ifdef #ifndef #else #endif #elif PreprocDirectiveName Macro Program",
|
|
26522
|
-
maxTerm: 425,
|
|
26523
|
-
nodeProps: [["group", -35, 1, 8, 11, 15, 16, 17, 19, 71, 72, 100, 101, 102, 104, 191, 208, 229, 242, 243, 270, 271, 272, 277, 280, 281, 282, 284, 285, 286, 287, 290, 292, 293, 294, 295, 296, "Expression", -13, 18, 25, 26, 27, 43, 255, 256, 257, 258, 262, 263, 265, 266, "Type", -19, 126, 129, 147, 150, 152, 153, 158, 160, 163, 164, 166, 168, 170, 172, 174, 176, 178, 179, 188, "Statement"], ["isolate", -4, 4, 5, 8, 10, ""], ["openedBy", 12, "(", 52, "{", 54, "["], ["closedBy", 13, ")", 51, "}", 53, "]"]],
|
|
26524
|
-
propSources: [cppHighlighting],
|
|
26525
|
-
skippedNodes: [0, 3, 4, 5, 6, 7, 10, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 347, 348],
|
|
26526
|
-
repeatNodeCount: 41,
|
|
26527
|
-
tokenData: "&*r7ZR!UOX$eXY({YZ.gZ]$e]^+P^p$epq({qr.}rs0}st2ktu$euv!7dvw!9bwx!;exy!<Yyz!=Tz{!>O{|!?R|}!AV}!O!BQ!O!P!DX!P!Q#+y!Q!R#Az!R![$(x![!]$Ag!]!^$Cc!^!_$D^!_!`%1W!`!a%2X!a!b%5_!b!c$e!c!n%6Y!n!o%7q!o!w%6Y!w!x%7q!x!}%6Y!}#O%:n#O#P%<g#P#Q%Kz#Q#R%Ms#R#S%6Y#S#T$e#T#i%6Y#i#j%Nv#j#o%6Y#o#p&!e#p#q&#`#q#r&%f#r#s&&a#s;'S$e;'S;=`(u<%lO$e&t$nY)]W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e&r%eW)]W'f&jOY%^Zw%^wx%}x#O%^#O#P&f#P;'S%^;'S;=`'x<%lO%^&j&SU'f&jOY%}Z#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}&j&kX'f&jOY%}YZ%}Z]%}]^'W^#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}&j']V'f&jOY%}YZ%}Z#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}&j'uP;=`<%l%}&r'{P;=`<%l%^&l(VW(qQ'f&jOY(OZr(Ors%}s#O(O#O#P&f#P;'S(O;'S;=`(o<%lO(O&l(rP;=`<%l(O&t(xP;=`<%l$e7Z)Y`)]W(qQ(n.o'f&j*Z)`OX$eXY({YZ*[Z]$e]^+P^p$epq({qr$ers%^sw$ewx(Ox#O$e#O#P,^#P;'S$e;'S;=`(u<%lO$e.o*aT(n.oXY*[YZ*[]^*[pq*[#O#P*p.o*sQYZ*[]^*y.o*|PYZ*[4e+[`)]W(qQ(n.o'f&jOX$eXY+PYZ*[Z]$e]^+P^p$epq+Pqr$ers%^sw$ewx(Ox#O$e#O#P,^#P;'S$e;'S;=`(u<%lO$e4Z,cX'f&jOY%}YZ-OZ]%}]^-{^#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}4Z-V[(n.o'f&jOX%}XY-OYZ*[Z]%}]^-O^p%}pq-Oq#O%}#O#P,^#P;'S%};'S;=`'r<%lO%}4Z.QV'f&jOY%}YZ-OZ#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}7P.nT*W)`(n.oXY*[YZ*[]^*[pq*[#O#P*p3o/[[%^!b'QP)]W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox!_$e!_!`0Q!`#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o0_Y%]!b!a,g)]W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e6e1YY)]W(oQ(p/]'f&jOY%^Zr%^rs1xsw%^wx%}x#O%^#O#P&f#P;'S%^;'S;=`'x<%lO%^(U2RW)x!b)]W'f&jOY%^Zw%^wx%}x#O%^#O#P&f#P;'S%^;'S;=`'x<%lO%^4e2tf)]W(qQ'f&jOX$eXY2kZp$epq2kqr$ers%^sw$ewx(Ox!c$e!c!}4Y!}#O$e#O#P&f#P#T$e#T#W4Y#W#X5m#X#Y>u#Y#]4Y#]#^NZ#^#o4Y#o;'S$e;'S;=`(u<%lO$e4e4eb)]W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#o4Y#o;'S$e;'S;=`(u<%lO$e4e5xd)]W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#X4Y#X#Y7W#Y#o4Y#o;'S$e;'S;=`(u<%lO$e4e7cd)]W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#Y4Y#Y#Z8q#Z#o4Y#o;'S$e;'S;=`(u<%lO$e4e8|d)]W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#]4Y#]#^:[#^#o4Y#o;'S$e;'S;=`(u<%lO$e4e:gd)]W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#b4Y#b#c;u#c#o4Y#o;'S$e;'S;=`(u<%lO$e4e<Qd)]W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#X4Y#X#Y=`#Y#o4Y#o;'S$e;'S;=`(u<%lO$e4e=mb)]W(qQ'e.o'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#o4Y#o;'S$e;'S;=`(u<%lO$e4e?Qf)]W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#`4Y#`#a@f#a#b4Y#b#cHV#c#o4Y#o;'S$e;'S;=`(u<%lO$e4e@qf)]W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#]4Y#]#^BV#^#g4Y#g#hEV#h#o4Y#o;'S$e;'S;=`(u<%lO$e4eBbd)]W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#Y4Y#Y#ZCp#Z#o4Y#o;'S$e;'S;=`(u<%lO$e4eC}b)]W(qQ'f&j'l.o'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#o4Y#o;'S$e;'S;=`(u<%lO$e4eEbd)]W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#X4Y#X#YFp#Y#o4Y#o;'S$e;'S;=`(u<%lO$e4eF}b)]W(qQ'j.o'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#o4Y#o;'S$e;'S;=`(u<%lO$e4eHbd)]W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#W4Y#W#XIp#X#o4Y#o;'S$e;'S;=`(u<%lO$e4eI{d)]W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#]4Y#]#^KZ#^#o4Y#o;'S$e;'S;=`(u<%lO$e4eKfd)]W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#Y4Y#Y#ZLt#Z#o4Y#o;'S$e;'S;=`(u<%lO$e4eMRb)]W(qQ'f&j'k.o'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#o4Y#o;'S$e;'S;=`(u<%lO$e4eNff)]W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#Y4Y#Y#Z! z#Z#b4Y#b#c!.[#c#o4Y#o;'S$e;'S;=`(u<%lO$e4e!!Xf)]W(qQ'g.o'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#W4Y#W#X!#m#X#b4Y#b#c!(W#c#o4Y#o;'S$e;'S;=`(u<%lO$e4e!#xd)]W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#X4Y#X#Y!%W#Y#o4Y#o;'S$e;'S;=`(u<%lO$e4e!%cd)]W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#Y4Y#Y#Z!&q#Z#o4Y#o;'S$e;'S;=`(u<%lO$e4e!'Ob)]W(qQ'h.o'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#o4Y#o;'S$e;'S;=`(u<%lO$e4e!(cd)]W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#W4Y#W#X!)q#X#o4Y#o;'S$e;'S;=`(u<%lO$e4e!)|d)]W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#X4Y#X#Y!+[#Y#o4Y#o;'S$e;'S;=`(u<%lO$e4e!+gd)]W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#Y4Y#Y#Z!,u#Z#o4Y#o;'S$e;'S;=`(u<%lO$e4e!-Sb)]W(qQ'i.o'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#o4Y#o;'S$e;'S;=`(u<%lO$e4e!.gd)]W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#V4Y#V#W!/u#W#o4Y#o;'S$e;'S;=`(u<%lO$e4e!0Qd)]W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#`4Y#`#a!1`#a#o4Y#o;'S$e;'S;=`(u<%lO$e4e!1kd)]W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#i4Y#i#j!2y#j#o4Y#o;'S$e;'S;=`(u<%lO$e4e!3Ud)]W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#W4Y#W#X!4d#X#o4Y#o;'S$e;'S;=`(u<%lO$e4e!4od)]W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#X4Y#X#Y!5}#Y#o4Y#o;'S$e;'S;=`(u<%lO$e4e!6[b)]W(qQV.o'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#o4Y#o;'S$e;'S;=`(u<%lO$e3o!7q[)]W(qQ%Z!b![,g'f&jOY$eZr$ers%^sw$ewx(Ox!_$e!_!`!8g!`#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o!8rY!g-y)]W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o!9o])W,g)]W(qQ%[!b'f&jOY$eZr$ers%^sv$evw!:hwx(Ox!_$e!_!`!8g!`#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o!:uY)V,g%^!b)]W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2X!;pW)ZS(qQ)[,g'f&jOY(OZr(Ors%}s#O(O#O#P&f#P;'S(O;'S;=`(o<%lO(O6i!<eY)]W(qQ]6_'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e'V!=`Y[a)]W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o!>][)T,g)]W(qQ%Z!b'f&jOY$eZr$ers%^sw$ewx(Ox!_$e!_!`!8g!`#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o!?`^)]W(qQ%Z!b!Y,g'f&jOY$eZr$ers%^sw$ewx(Ox{$e{|!@[|!_$e!_!`!8g!`#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o!@gY)]W!X-y(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2a!AbY!h,k)]W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o!B__)]W(qQ%Z!b!Y,g'f&jOY$eZr$ers%^sw$ewx(Ox}$e}!O!@[!O!_$e!_!`!8g!`!a!C^!a#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o!CiY(x-y)]W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2a!Dd^)]W(qQ'f&j(w,gOY$eZr$ers%^sw$ewx(Ox!O$e!O!P!E`!P!Q$e!Q![!GY![#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2a!Ei[)]W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox!O$e!O!P!F_!P#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2a!FjY)Y,k)]W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2]!Gen)]W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx!Icx!Q$e!Q![!GY![!g$e!g!h#$w!h!i#*Y!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#X$e#X#Y#$w#Y#Z#*Y#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e2T!IjY(qQ'f&jOY(OZr(Ors%}s!Q(O!Q![!JY![#O(O#O#P&f#P;'S(O;'S;=`(o<%lO(O2T!Jcn(qQ!i,g'f&jOY(OZr(Ors%}sw(Owx!Icx!Q(O!Q![!JY![!g(O!g!h!La!h!i##`!i!n(O!n!o##`!o!r(O!r!s!La!s!w(O!w!x##`!x#O(O#O#P&f#P#X(O#X#Y!La#Y#Z##`#Z#`(O#`#a##`#a#d(O#d#e!La#e#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2T!Ljl(qQ!i,g'f&jOY(OZr(Ors%}s{(O{|!Nb|}(O}!O!Nb!O!Q(O!Q![# e![!c(O!c!h# e!h!i# e!i!n(O!n!o##`!o!w(O!w!x##`!x#O(O#O#P&f#P#T(O#T#Y# e#Y#Z# e#Z#`(O#`#a##`#a#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2T!Ni^(qQ'f&jOY(OZr(Ors%}s!Q(O!Q![# e![!c(O!c!i# e!i#O(O#O#P&f#P#T(O#T#Z# e#Z;'S(O;'S;=`(o<%lO(O2T# nj(qQ!i,g'f&jOY(OZr(Ors%}sw(Owx!Nbx!Q(O!Q![# e![!c(O!c!h# e!h!i# e!i!n(O!n!o##`!o!w(O!w!x##`!x#O(O#O#P&f#P#T(O#T#Y# e#Y#Z# e#Z#`(O#`#a##`#a#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2T##id(qQ!i,g'f&jOY(OZr(Ors%}s!h(O!h!i##`!i!n(O!n!o##`!o!w(O!w!x##`!x#O(O#O#P&f#P#Y(O#Y#Z##`#Z#`(O#`#a##`#a#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2]#%Sn)]W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx(Ox{$e{|#'Q|}$e}!O#'Q!O!Q$e!Q![#(]![!c$e!c!h#(]!h!i#(]!i!n$e!n!o#*Y!o!w$e!w!x#*Y!x#O$e#O#P&f#P#T$e#T#Y#(]#Y#Z#(]#Z#`$e#`#a#*Y#a#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e2]#'Z`)]W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![#(]![!c$e!c!i#(]!i#O$e#O#P&f#P#T$e#T#Z#(]#Z;'S$e;'S;=`(u<%lO$e2]#(hj)]W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx!Nbx!Q$e!Q![#(]![!c$e!c!h#(]!h!i#(]!i!n$e!n!o#*Y!o!w$e!w!x#*Y!x#O$e#O#P&f#P#T$e#T#Y#(]#Y#Z#(]#Z#`$e#`#a#*Y#a#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e2]#*ef)]W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx(Ox!h$e!h!i#*Y!i!n$e!n!o#*Y!o!w$e!w!x#*Y!x#O$e#O#P&f#P#Y$e#Y#Z#*Y#Z#`$e#`#a#*Y#a#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e7Z#,W`)]W(qQ%Z!b![,g'f&jOY$eZr$ers%^sw$ewx(Oxz$ez{#-Y{!P$e!P!Q#:s!Q!_$e!_!`!8g!`#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e7Z#-c])]W(qQ'f&jOY#-YYZ#.[Zr#-Yrs#/csw#-Ywx#5wxz#-Yz{#8j{#O#-Y#O#P#2`#P;'S#-Y;'S;=`#:m<%lO#-Y1e#._TOz#.[z{#.n{;'S#.[;'S;=`#/]<%lO#.[1e#.qVOz#.[z{#.n{!P#.[!P!Q#/W!Q;'S#.[;'S;=`#/]<%lO#.[1e#/]OT1e1e#/`P;=`<%l#.[7X#/jZ)]W'f&jOY#/cYZ#.[Zw#/cwx#0]xz#/cz{#4O{#O#/c#O#P#2`#P;'S#/c;'S;=`#5q<%lO#/c7P#0bX'f&jOY#0]YZ#.[Zz#0]z{#0}{#O#0]#O#P#2`#P;'S#0];'S;=`#3x<%lO#0]7P#1SZ'f&jOY#0]YZ#.[Zz#0]z{#0}{!P#0]!P!Q#1u!Q#O#0]#O#P#2`#P;'S#0];'S;=`#3x<%lO#0]7P#1|UT1e'f&jOY%}Z#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}7P#2eZ'f&jOY#0]YZ#0]Z]#0]]^#3W^z#0]z{#0}{#O#0]#O#P#2`#P;'S#0];'S;=`#3x<%lO#0]7P#3]X'f&jOY#0]YZ#0]Zz#0]z{#0}{#O#0]#O#P#2`#P;'S#0];'S;=`#3x<%lO#0]7P#3{P;=`<%l#0]7X#4V])]W'f&jOY#/cYZ#.[Zw#/cwx#0]xz#/cz{#4O{!P#/c!P!Q#5O!Q#O#/c#O#P#2`#P;'S#/c;'S;=`#5q<%lO#/c7X#5XW)]WT1e'f&jOY%^Zw%^wx%}x#O%^#O#P&f#P;'S%^;'S;=`'x<%lO%^7X#5tP;=`<%l#/c7R#6OZ(qQ'f&jOY#5wYZ#.[Zr#5wrs#0]sz#5wz{#6q{#O#5w#O#P#2`#P;'S#5w;'S;=`#8d<%lO#5w7R#6x](qQ'f&jOY#5wYZ#.[Zr#5wrs#0]sz#5wz{#6q{!P#5w!P!Q#7q!Q#O#5w#O#P#2`#P;'S#5w;'S;=`#8d<%lO#5w7R#7zW(qQT1e'f&jOY(OZr(Ors%}s#O(O#O#P&f#P;'S(O;'S;=`(o<%lO(O7R#8gP;=`<%l#5w7Z#8s_)]W(qQ'f&jOY#-YYZ#.[Zr#-Yrs#/csw#-Ywx#5wxz#-Yz{#8j{!P#-Y!P!Q#9r!Q#O#-Y#O#P#2`#P;'S#-Y;'S;=`#:m<%lO#-Y7Z#9}Y)]W(qQT1e'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e7Z#:pP;=`<%l#-Y7Z#;OY)]W(qQS1e'f&jOY#:sZr#:srs#;nsw#:swx#@{x#O#:s#O#P#<z#P;'S#:s;'S;=`#At<%lO#:s7X#;wW)]WS1e'f&jOY#;nZw#;nwx#<ax#O#;n#O#P#<z#P;'S#;n;'S;=`#@u<%lO#;n7P#<hUS1e'f&jOY#<aZ#O#<a#O#P#<z#P;'S#<a;'S;=`#>[<%lO#<a7P#=RXS1e'f&jOY#<aYZ%}Z]#<a]^#=n^#O#<a#O#P#>b#P;'S#<a;'S;=`#>[<%lO#<a7P#=uVS1e'f&jOY#<aYZ%}Z#O#<a#O#P#<z#P;'S#<a;'S;=`#>[<%lO#<a7P#>_P;=`<%l#<a7P#>i]S1e'f&jOY#<aYZ%}Z]#<a]^#=n^#O#<a#O#P#>b#P#b#<a#b#c#<a#c#f#<a#f#g#?b#g;'S#<a;'S;=`#>[<%lO#<a7P#?iUS1e'f&jOY#<aZ#O#<a#O#P#?{#P;'S#<a;'S;=`#>[<%lO#<a7P#@SZS1e'f&jOY#<aYZ%}Z]#<a]^#=n^#O#<a#O#P#>b#P#b#<a#b#c#<a#c;'S#<a;'S;=`#>[<%lO#<a7X#@xP;=`<%l#;n7R#AUW(qQS1e'f&jOY#@{Zr#@{rs#<as#O#@{#O#P#<z#P;'S#@{;'S;=`#An<%lO#@{7R#AqP;=`<%l#@{7Z#AwP;=`<%l#:s2]#BVt)]W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx#Dgx!O$e!O!P$ m!P!Q$e!Q![$(x![!g$e!g!h#$w!h!i#*Y!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#U$e#U#V$+X#V#X$e#X#Y#$w#Y#Z#*Y#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j#l$e#l#m$=`#m;'S$e;'S;=`(u<%lO$e2T#DnY(qQ'f&jOY(OZr(Ors%}s!Q(O!Q![#E^![#O(O#O#P&f#P;'S(O;'S;=`(o<%lO(O2T#Egp(qQ!i,g'f&jOY(OZr(Ors%}sw(Owx#Dgx!O(O!O!P#Gk!P!Q(O!Q![#E^![!g(O!g!h!La!h!i##`!i!n(O!n!o##`!o!r(O!r!s!La!s!w(O!w!x##`!x#O(O#O#P&f#P#X(O#X#Y!La#Y#Z##`#Z#`(O#`#a##`#a#d(O#d#e!La#e#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2T#Gtn(qQ!i,g'f&jOY(OZr(Ors%}s!Q(O!Q![#Ir![!c(O!c!g#Ir!g!h#MS!h!i#Ir!i!n(O!n!o##`!o!r(O!r!s!La!s!w(O!w!x##`!x#O(O#O#P&f#P#T(O#T#X#Ir#X#Y#MS#Y#Z#Ir#Z#`(O#`#a##`#a#d(O#d#e!La#e#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2T#I{p(qQ!i,g'f&jOY(OZr(Ors%}sw(Owx#LPx!Q(O!Q![#Ir![!c(O!c!g#Ir!g!h#MS!h!i#Ir!i!n(O!n!o##`!o!r(O!r!s!La!s!w(O!w!x##`!x#O(O#O#P&f#P#T(O#T#X#Ir#X#Y#MS#Y#Z#Ir#Z#`(O#`#a##`#a#d(O#d#e!La#e#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2T#LW^(qQ'f&jOY(OZr(Ors%}s!Q(O!Q![#Ir![!c(O!c!i#Ir!i#O(O#O#P&f#P#T(O#T#Z#Ir#Z;'S(O;'S;=`(o<%lO(O2T#M]t(qQ!i,g'f&jOY(OZr(Ors%}sw(Owx#LPx{(O{|!Nb|}(O}!O!Nb!O!Q(O!Q![#Ir![!c(O!c!g#Ir!g!h#MS!h!i#Ir!i!n(O!n!o##`!o!r(O!r!s!La!s!w(O!w!x##`!x#O(O#O#P&f#P#T(O#T#X#Ir#X#Y#MS#Y#Z#Ir#Z#`(O#`#a##`#a#d(O#d#e!La#e#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2]$ xp)]W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![$#|![!c$e!c!g$#|!g!h$&]!h!i$#|!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#T$e#T#X$#|#X#Y$&]#Y#Z$#|#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e2]$$Xp)]W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx#LPx!Q$e!Q![$#|![!c$e!c!g$#|!g!h$&]!h!i$#|!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#T$e#T#X$#|#X#Y$&]#Y#Z$#|#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e2]$&ht)]W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx#LPx{$e{|#'Q|}$e}!O#'Q!O!Q$e!Q![$#|![!c$e!c!g$#|!g!h$&]!h!i$#|!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#T$e#T#X$#|#X#Y$&]#Y#Z$#|#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e2]$)Tp)]W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx#Dgx!O$e!O!P$ m!P!Q$e!Q![$(x![!g$e!g!h#$w!h!i#*Y!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#X$e#X#Y#$w#Y#Z#*Y#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e2]$+b_)]W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox!O$e!O!P$,a!P!Q$e!Q!R$-`!R![$(x![#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2]$,j[)]W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![!GY![#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2]$-kt)]W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx#Dgx!O$e!O!P$ m!P!Q$e!Q![$(x![!g$e!g!h#$w!h!i#*Y!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#U$e#U#V$/{#V#X$e#X#Y#$w#Y#Z#*Y#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j#l$e#l#m$0z#m;'S$e;'S;=`(u<%lO$e2]$0U[)]W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![$(x![#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2]$1T`)]W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![$2V![!c$e!c!i$2V!i#O$e#O#P&f#P#T$e#T#Z$2V#Z;'S$e;'S;=`(u<%lO$e2]$2br)]W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx$4lx!O$e!O!P$ m!P!Q$e!Q![$2V![!c$e!c!g$2V!g!h$:p!h!i$2V!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#T$e#T#X$2V#X#Y$:p#Y#Z$2V#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e2T$4s^(qQ'f&jOY(OZr(Ors%}s!Q(O!Q![$5o![!c(O!c!i$5o!i#O(O#O#P&f#P#T(O#T#Z$5o#Z;'S(O;'S;=`(o<%lO(O2T$5xr(qQ!i,g'f&jOY(OZr(Ors%}sw(Owx$4lx!O(O!O!P#Gk!P!Q(O!Q![$5o![!c(O!c!g$5o!g!h$8S!h!i$5o!i!n(O!n!o##`!o!r(O!r!s!La!s!w(O!w!x##`!x#O(O#O#P&f#P#T(O#T#X$5o#X#Y$8S#Y#Z$5o#Z#`(O#`#a##`#a#d(O#d#e!La#e#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2T$8]u(qQ!i,g'f&jOY(OZr(Ors%}sw(Owx$4lx{(O{|!Nb|}(O}!O!Nb!O!P#Gk!P!Q(O!Q![$5o![!c(O!c!g$5o!g!h$8S!h!i$5o!i!n(O!n!o##`!o!r(O!r!s!La!s!w(O!w!x##`!x#O(O#O#P&f#P#T(O#T#X$5o#X#Y$8S#Y#Z$5o#Z#`(O#`#a##`#a#d(O#d#e!La#e#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2]$:{u)]W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx$4lx{$e{|#'Q|}$e}!O#'Q!O!P$ m!P!Q$e!Q![$2V![!c$e!c!g$2V!g!h$:p!h!i$2V!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#T$e#T#X$2V#X#Y$:p#Y#Z$2V#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e2]$=ic)]W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox!O$e!O!P$,a!P!Q$e!Q!R$>t!R![$2V![!c$e!c!i$2V!i#O$e#O#P&f#P#T$e#T#Z$2V#Z;'S$e;'S;=`(u<%lO$e2]$?Pv)]W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx$4lx!O$e!O!P$ m!P!Q$e!Q![$2V![!c$e!c!g$2V!g!h$:p!h!i$2V!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#T$e#T#U$2V#U#V$2V#V#X$2V#X#Y$:p#Y#Z$2V#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j#l$e#l#m$0z#m;'S$e;'S;=`(u<%lO$e4e$Ar[(v-X)]W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox![$e![!]$Bh!]#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3s$BsYm-})]W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2]$CnY)X,g)]W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e7V$Dk_q,g%]!b)]W(qQ'f&jOY$EjYZ$FlZr$Ejrs$GZsw$Ejwx%)Px!^$Ej!^!_%+w!_!`%.U!`!a%0]!a#O$Ej#O#P$Ib#P;'S$Ej;'S;=`%+q<%lO$Ej*[$Es])]W(qQ'f&jOY$EjYZ$FlZr$Ejrs$GZsw$Ejwx%)Px!`$Ej!`!a%*t!a#O$Ej#O#P$Ib#P;'S$Ej;'S;=`%+q<%lO$Ejp$FoTO!`$Fl!`!a$GO!a;'S$Fl;'S;=`$GT<%lO$Flp$GTO$Wpp$GWP;=`<%l$Fl*Y$GbZ)]W'f&jOY$GZYZ$FlZw$GZwx$HTx!`$GZ!`!a%(U!a#O$GZ#O#P$Ib#P;'S$GZ;'S;=`%(y<%lO$GZ*Q$HYX'f&jOY$HTYZ$FlZ!`$HT!`!a$Hu!a#O$HT#O#P$Ib#P;'S$HT;'S;=`$Mx<%lO$HT*Q$IOU$WpY#t'f&jOY%}Z#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}*Q$Ig['f&jOY$HTYZ$HTZ]$HT]^$J]^!`$HT!`!a$NO!a#O$HT#O#P%&n#P;'S$HT;'S;=`%'f;=`<%l%$z<%lO$HT*Q$JbX'f&jOY$HTYZ$J}Z!`$HT!`!a$Hu!a#O$HT#O#P$Ib#P;'S$HT;'S;=`$Mx<%lO$HT'[$KSX'f&jOY$J}YZ$FlZ!`$J}!`!a$Ko!a#O$J}#O#P$LY#P;'S$J};'S;=`$Mr<%lO$J}'[$KvU$Wp'f&jOY%}Z#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}'[$L_Z'f&jOY$J}YZ$J}Z]$J}]^$MQ^!`$J}!`!a$Ko!a#O$J}#O#P$LY#P;'S$J};'S;=`$Mr<%lO$J}'[$MVX'f&jOY$J}YZ$J}Z!`$J}!`!a$Ko!a#O$J}#O#P$LY#P;'S$J};'S;=`$Mr<%lO$J}'[$MuP;=`<%l$J}*Q$M{P;=`<%l$HT*Q$NVW$Wp'f&jOY$NoZ!`$No!`!a% ^!a#O$No#O#P% w#P;'S$No;'S;=`%#^<%lO$No)`$NtW'f&jOY$NoZ!`$No!`!a% ^!a#O$No#O#P% w#P;'S$No;'S;=`%#^<%lO$No)`% eUY#t'f&jOY%}Z#O%}#O#P&f#P;'S%};'S;=`'r<%lO%})`% |Y'f&jOY$NoYZ$NoZ]$No]^%!l^#O$No#O#P%#d#P;'S$No;'S;=`%$[;=`<%l%$z<%lO$No)`%!qX'f&jOY$NoYZ%}Z!`$No!`!a% ^!a#O$No#O#P% w#P;'S$No;'S;=`%#^<%lO$No)`%#aP;=`<%l$No)`%#iZ'f&jOY$NoYZ%}Z]$No]^%!l^!`$No!`!a% ^!a#O$No#O#P% w#P;'S$No;'S;=`%#^<%lO$No)`%$_XOY%$zZ!`%$z!`!a%%g!a#O%$z#O#P%%l#P;'S%$z;'S;=`%&h;=`<%l$No<%lO%$z#t%$}WOY%$zZ!`%$z!`!a%%g!a#O%$z#O#P%%l#P;'S%$z;'S;=`%&h<%lO%$z#t%%lOY#t#t%%oRO;'S%$z;'S;=`%%x;=`O%$z#t%%{XOY%$zZ!`%$z!`!a%%g!a#O%$z#O#P%%l#P;'S%$z;'S;=`%&h;=`<%l%$z<%lO%$z#t%&kP;=`<%l%$z*Q%&sZ'f&jOY$HTYZ$J}Z]$HT]^$J]^!`$HT!`!a$Hu!a#O$HT#O#P$Ib#P;'S$HT;'S;=`$Mx<%lO$HT*Q%'iXOY%$zZ!`%$z!`!a%%g!a#O%$z#O#P%%l#P;'S%$z;'S;=`%&h;=`<%l$HT<%lO%$z*Y%(aW$WpY#t)]W'f&jOY%^Zw%^wx%}x#O%^#O#P&f#P;'S%^;'S;=`'x<%lO%^*Y%(|P;=`<%l$GZ*S%)WZ(qQ'f&jOY%)PYZ$FlZr%)Prs$HTs!`%)P!`!a%)y!a#O%)P#O#P$Ib#P;'S%)P;'S;=`%*n<%lO%)P*S%*UW$WpY#t(qQ'f&jOY(OZr(Ors%}s#O(O#O#P&f#P;'S(O;'S;=`(o<%lO(O*S%*qP;=`<%l%)P*[%+RY$WpY#t)]W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e*[%+tP;=`<%l$Ej7V%,U^)]W(qQ%[!b!f,g'f&jOY$EjYZ$FlZr$Ejrs$GZsw$Ejwx%)Px!_$Ej!_!`%-Q!`!a%*t!a#O$Ej#O#P$Ib#P;'S$Ej;'S;=`%+q<%lO$Ej7V%-]]!g-y)]W(qQ'f&jOY$EjYZ$FlZr$Ejrs$GZsw$Ejwx%)Px!`$Ej!`!a%*t!a#O$Ej#O#P$Ib#P;'S$Ej;'S;=`%+q<%lO$Ej7V%.c]%]!b!b,g)]W(qQ'f&jOY$EjYZ$FlZr$Ejrs$GZsw$Ejwx%)Px!`$Ej!`!a%/[!a#O$Ej#O#P$Ib#P;'S$Ej;'S;=`%+q<%lO$Ej7V%/mY%]!b!b,g$WpY#t)]W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e)j%0hYY#t)]W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o%1c[)j!c)]W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox!_$e!_!`0Q!`#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o%2f]%]!b)]W(qQ!d,g'f&jOY$eZr$ers%^sw$ewx(Ox!_$e!_!`%3_!`!a%4[!a#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o%3lY%]!b!b,g)]W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o%4i[)]W(qQ%[!b!f,g'f&jOY$eZr$ers%^sw$ewx(Ox!_$e!_!`!8g!`#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e&u%5jY(uP)]W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e7Z%6ib)]W(yS(qQ!R,f(r%y'f&jOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![%6Y![!c$e!c!}%6Y!}#O$e#O#P&f#P#R$e#R#S%6Y#S#T$e#T#o%6Y#o;'S$e;'S;=`(u<%lO$e7Z%8Qb)]W(yS(qQ!R,f(r%y'f&jOY$eZr$ers%9Ysw$ewx%9{x!Q$e!Q![%6Y![!c$e!c!}%6Y!}#O$e#O#P&f#P#R$e#R#S%6Y#S#T$e#T#o%6Y#o;'S$e;'S;=`(u<%lO$e5P%9cW)]W(p/]'f&jOY%^Zw%^wx%}x#O%^#O#P&f#P;'S%^;'S;=`'x<%lO%^2T%:UW(qQ)[,g'f&jOY(OZr(Ors%}s#O(O#O#P&f#P;'S(O;'S;=`(o<%lO(O3o%:yZ!V-y)]W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox!}$e!}#O%;l#O#P&f#P;'S$e;'S;=`(u<%lO$e&u%;wY)QP)]W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e4e%<la'f&jOY%=qYZ%>[Z]%=q]^%?Z^!Q%=q!Q![%?w![!w%=q!w!x%AX!x#O%=q#O#P%H_#P#i%=q#i#j%Ds#j#l%=q#l#m%IR#m;'S%=q;'S;=`%Kt<%lO%=q&t%=xUXY'f&jOY%}Z#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}4e%>e[XY(n.o'f&jOX%}XY-OYZ*[Z]%}]^-O^p%}pq-Oq#O%}#O#P,^#P;'S%};'S;=`'r<%lO%}4e%?bVXY'f&jOY%}YZ-OZ#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}&t%@OWXY'f&jOY%}Z!Q%}!Q![%@h![#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}&t%@oWXY'f&jOY%}Z!Q%}!Q![%=q![#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}&t%A^['f&jOY%}Z!Q%}!Q![%BS![!c%}!c!i%BS!i#O%}#O#P&f#P#T%}#T#Z%BS#Z;'S%};'S;=`'r<%lO%}&t%BX['f&jOY%}Z!Q%}!Q![%B}![!c%}!c!i%B}!i#O%}#O#P&f#P#T%}#T#Z%B}#Z;'S%};'S;=`'r<%lO%}&t%CS['f&jOY%}Z!Q%}!Q![%Cx![!c%}!c!i%Cx!i#O%}#O#P&f#P#T%}#T#Z%Cx#Z;'S%};'S;=`'r<%lO%}&t%C}['f&jOY%}Z!Q%}!Q![%Ds![!c%}!c!i%Ds!i#O%}#O#P&f#P#T%}#T#Z%Ds#Z;'S%};'S;=`'r<%lO%}&t%Dx['f&jOY%}Z!Q%}!Q![%En![!c%}!c!i%En!i#O%}#O#P&f#P#T%}#T#Z%En#Z;'S%};'S;=`'r<%lO%}&t%Es['f&jOY%}Z!Q%}!Q![%Fi![!c%}!c!i%Fi!i#O%}#O#P&f#P#T%}#T#Z%Fi#Z;'S%};'S;=`'r<%lO%}&t%Fn['f&jOY%}Z!Q%}!Q![%Gd![!c%}!c!i%Gd!i#O%}#O#P&f#P#T%}#T#Z%Gd#Z;'S%};'S;=`'r<%lO%}&t%Gi['f&jOY%}Z!Q%}!Q![%=q![!c%}!c!i%=q!i#O%}#O#P&f#P#T%}#T#Z%=q#Z;'S%};'S;=`'r<%lO%}&t%HfXXY'f&jOY%}YZ%}Z]%}]^'W^#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}&t%IW['f&jOY%}Z!Q%}!Q![%I|![!c%}!c!i%I|!i#O%}#O#P&f#P#T%}#T#Z%I|#Z;'S%};'S;=`'r<%lO%}&t%JR['f&jOY%}Z!Q%}!Q![%Jw![!c%}!c!i%Jw!i#O%}#O#P&f#P#T%}#T#Z%Jw#Z;'S%};'S;=`'r<%lO%}&t%KO[XY'f&jOY%}Z!Q%}!Q![%Jw![!c%}!c!i%Jw!i#O%}#O#P&f#P#T%}#T#Z%Jw#Z;'S%};'S;=`'r<%lO%}&t%KwP;=`<%l%=q2a%LVZ!W,V)]W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P#Q%Lx#Q;'S$e;'S;=`(u<%lO$e'Y%MTY)Pd)]W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o%NQ[)]W(qQ%[!b'f&j!_,gOY$eZr$ers%^sw$ewx(Ox!_$e!_!`!8g!`#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e7Z& Vd)]W(yS(qQ!R,f(r%y'f&jOY$eZr$ers%9Ysw$ewx%9{x!Q$e!Q!Y%6Y!Y!Z%7q!Z![%6Y![!c$e!c!}%6Y!}#O$e#O#P&f#P#R$e#R#S%6Y#S#T$e#T#o%6Y#o;'S$e;'S;=`(u<%lO$e2]&!pY!T,g)]W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o&#m^)]W(qQ%[!b'f&j!^,gOY$eZr$ers%^sw$ewx(Ox!_$e!_!`!8g!`#O$e#O#P&f#P#p$e#p#q&$i#q;'S$e;'S;=`(u<%lO$e3o&$vY)U,g%^!b)]W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e'V&%qY!Ua)]W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e(]&&nc)]W(qQ%[!b'RP'f&jOX$eXY&'yZp$epq&'yqr$ers%^sw$ewx(Ox!c$e!c!}&)_!}#O$e#O#P&f#P#R$e#R#S&)_#S#T$e#T#o&)_#o;'S$e;'S;=`(u<%lO$e&y&(Sc)]W(qQ'f&jOX$eXY&'yZp$epq&'yqr$ers%^sw$ewx(Ox!c$e!c!}&)_!}#O$e#O#P&f#P#R$e#R#S&)_#S#T$e#T#o&)_#o;'S$e;'S;=`(u<%lO$e&y&)jb)]W(qQeT'f&jOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![&)_![!c$e!c!}&)_!}#O$e#O#P&f#P#R$e#R#S&)_#S#T$e#T#o&)_#o;'S$e;'S;=`(u<%lO$e",
|
|
26528
|
-
tokenizers: [rawString, fallback, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
|
|
26529
|
-
topRules: {
|
|
26530
|
-
"Program": [0, 307]
|
|
26531
|
-
},
|
|
26532
|
-
dynamicPrecedences: {
|
|
26533
|
-
"87": 1,
|
|
26534
|
-
"94": 1,
|
|
26535
|
-
"119": 1,
|
|
26536
|
-
"184": 1,
|
|
26537
|
-
"187": -10,
|
|
26538
|
-
"240": -10,
|
|
26539
|
-
"241": 1,
|
|
26540
|
-
"244": -1,
|
|
26541
|
-
"246": -10,
|
|
26542
|
-
"247": 1,
|
|
26543
|
-
"262": -1,
|
|
26544
|
-
"267": 2,
|
|
26545
|
-
"268": 2,
|
|
26546
|
-
"306": -10,
|
|
26547
|
-
"365": 3,
|
|
26548
|
-
"417": 1,
|
|
26549
|
-
"418": 3,
|
|
26550
|
-
"419": 1,
|
|
26551
|
-
"420": 1
|
|
26552
|
-
},
|
|
26553
|
-
specialized: [{
|
|
26554
|
-
term: 356,
|
|
26555
|
-
get: value => spec_identifier[value] || -1
|
|
26556
|
-
}, {
|
|
26557
|
-
term: 33,
|
|
26558
|
-
get: value => spec_[value] || -1
|
|
26559
|
-
}, {
|
|
26560
|
-
term: 66,
|
|
26561
|
-
get: value => spec_templateArgsEnd[value] || -1
|
|
26562
|
-
}, {
|
|
26563
|
-
term: 363,
|
|
26564
|
-
get: value => spec_scopedIdentifier[value] || -1
|
|
26565
|
-
}],
|
|
26566
|
-
tokenPrec: 24891
|
|
26567
|
-
});
|
|
26568
|
-
|
|
26569
|
-
/**
|
|
26570
|
-
A language provider based on the [Lezer C++
|
|
26571
|
-
parser](https://github.com/lezer-parser/cpp), extended with
|
|
26572
|
-
highlighting and indentation information.
|
|
26573
|
-
*/
|
|
26574
|
-
const cppLanguage = /*@__PURE__*/LRLanguage.define({
|
|
26575
|
-
name: "cpp",
|
|
26576
|
-
parser: /*@__PURE__*/parser.configure({
|
|
26577
|
-
props: [/*@__PURE__*/indentNodeProp.add({
|
|
26578
|
-
IfStatement: /*@__PURE__*/continuedIndent({
|
|
26579
|
-
except: /^\s*({|else\b)/
|
|
26580
|
-
}),
|
|
26581
|
-
TryStatement: /*@__PURE__*/continuedIndent({
|
|
26582
|
-
except: /^\s*({|catch)\b/
|
|
26583
|
-
}),
|
|
26584
|
-
LabeledStatement: flatIndent,
|
|
26585
|
-
CaseStatement: context => context.baseIndent + context.unit,
|
|
26586
|
-
BlockComment: () => null,
|
|
26587
|
-
CompoundStatement: /*@__PURE__*/delimitedIndent({
|
|
26588
|
-
closing: "}"
|
|
26589
|
-
}),
|
|
26590
|
-
Statement: /*@__PURE__*/continuedIndent({
|
|
26591
|
-
except: /^{/
|
|
26592
|
-
})
|
|
26593
|
-
}), /*@__PURE__*/foldNodeProp.add({
|
|
26594
|
-
"DeclarationList CompoundStatement EnumeratorList FieldDeclarationList InitializerList": foldInside,
|
|
26595
|
-
BlockComment(tree) {
|
|
26596
|
-
return {
|
|
26597
|
-
from: tree.from + 2,
|
|
26598
|
-
to: tree.to - 2
|
|
26599
|
-
};
|
|
26600
|
-
}
|
|
26601
|
-
})]
|
|
26602
|
-
}),
|
|
26603
|
-
languageData: {
|
|
26604
|
-
commentTokens: {
|
|
26605
|
-
line: "//",
|
|
26606
|
-
block: {
|
|
26607
|
-
open: "/*",
|
|
26608
|
-
close: "*/"
|
|
26609
|
-
}
|
|
26610
|
-
},
|
|
26611
|
-
indentOnInput: /^\s*(?:case |default:|\{|\})$/,
|
|
26612
|
-
closeBrackets: {
|
|
26613
|
-
stringPrefixes: ["L", "u", "U", "u8", "LR", "UR", "uR", "u8R", "R"]
|
|
26614
|
-
}
|
|
26615
|
-
}
|
|
26616
|
-
});
|
|
26617
|
-
/**
|
|
26618
|
-
Language support for C++.
|
|
26619
|
-
*/
|
|
26620
|
-
function cpp() {
|
|
26621
|
-
return new LanguageSupport(cppLanguage);
|
|
26622
|
-
}
|
|
26623
|
-
|
|
26624
24626
|
function getAugmentedNamespace(n) {
|
|
26625
24627
|
if (Object.prototype.hasOwnProperty.call(n, '__esModule')) return n;
|
|
26626
24628
|
var f = n.default;
|
|
@@ -39846,11 +37848,11 @@ const timeout = 10000;
|
|
|
39846
37848
|
const changesDelay = 500;
|
|
39847
37849
|
const CompletionItemKindMap = Object.fromEntries(Object.entries(mainExports.CompletionItemKind).map(([key, value]) => [value, key]));
|
|
39848
37850
|
const useLast = (values) => values.reduce((_, v) => v, '');
|
|
39849
|
-
|
|
37851
|
+
Facet.define({
|
|
39850
37852
|
combine: useLast,
|
|
39851
37853
|
});
|
|
39852
|
-
|
|
39853
|
-
|
|
37854
|
+
Facet.define({ combine: useLast });
|
|
37855
|
+
Facet.define({ combine: useLast });
|
|
39854
37856
|
class LanguageServerClient {
|
|
39855
37857
|
constructor(options) {
|
|
39856
37858
|
this.options = options;
|
|
@@ -39888,7 +37890,7 @@ class LanguageServerClient {
|
|
|
39888
37890
|
textDocument: {
|
|
39889
37891
|
hover: {
|
|
39890
37892
|
dynamicRegistration: true,
|
|
39891
|
-
contentFormat: ['
|
|
37893
|
+
contentFormat: ['markdown', 'plaintext'],
|
|
39892
37894
|
},
|
|
39893
37895
|
moniker: {},
|
|
39894
37896
|
synchronization: {
|
|
@@ -39902,16 +37904,19 @@ class LanguageServerClient {
|
|
|
39902
37904
|
completionItem: {
|
|
39903
37905
|
snippetSupport: false,
|
|
39904
37906
|
commitCharactersSupport: true,
|
|
39905
|
-
documentationFormat: ['
|
|
37907
|
+
documentationFormat: ['markdown', 'plaintext'],
|
|
39906
37908
|
deprecatedSupport: false,
|
|
39907
37909
|
preselectSupport: false,
|
|
37910
|
+
resolveSupport: {
|
|
37911
|
+
properties: ['detail', 'documentation'],
|
|
37912
|
+
},
|
|
39908
37913
|
},
|
|
39909
37914
|
contextSupport: true,
|
|
39910
37915
|
},
|
|
39911
37916
|
signatureHelp: {
|
|
39912
37917
|
dynamicRegistration: true,
|
|
39913
37918
|
signatureInformation: {
|
|
39914
|
-
documentationFormat: ['
|
|
37919
|
+
documentationFormat: ['markdown', 'plaintext'],
|
|
39915
37920
|
},
|
|
39916
37921
|
},
|
|
39917
37922
|
declaration: {
|
|
@@ -39967,6 +37972,15 @@ class LanguageServerClient {
|
|
|
39967
37972
|
async textDocumentDefinition(params) {
|
|
39968
37973
|
return await this.request('textDocument/definition', params, timeout);
|
|
39969
37974
|
}
|
|
37975
|
+
async textDocumentDeclaration(params) {
|
|
37976
|
+
return await this.request('textDocument/declaration', params, timeout);
|
|
37977
|
+
}
|
|
37978
|
+
async textDocumentTypeDefinition(params) {
|
|
37979
|
+
return await this.request('textDocument/typeDefinition', params, timeout);
|
|
37980
|
+
}
|
|
37981
|
+
async completionItemResolve(params) {
|
|
37982
|
+
return await this.request('completionItem/resolve', params, timeout);
|
|
37983
|
+
}
|
|
39970
37984
|
attachPlugin(plugin) {
|
|
39971
37985
|
this.plugins.push(plugin);
|
|
39972
37986
|
}
|
|
@@ -39993,12 +38007,12 @@ class LanguageServerClient {
|
|
|
39993
38007
|
}
|
|
39994
38008
|
}
|
|
39995
38009
|
class LanguageServerPlugin {
|
|
39996
|
-
constructor(view, allowHTMLContent) {
|
|
38010
|
+
constructor(view, { client, documentUri, languageId, allowHTMLContent, }) {
|
|
39997
38011
|
this.view = view;
|
|
38012
|
+
this.client = client;
|
|
38013
|
+
this.documentUri = documentUri;
|
|
38014
|
+
this.languageId = languageId;
|
|
39998
38015
|
this.allowHTMLContent = allowHTMLContent;
|
|
39999
|
-
this.client = this.view.state.facet(client);
|
|
40000
|
-
this.documentUri = this.view.state.facet(documentUri);
|
|
40001
|
-
this.languageId = this.view.state.facet(languageId);
|
|
40002
38016
|
this.documentVersion = 0;
|
|
40003
38017
|
this.changesTimeout = 0;
|
|
40004
38018
|
this.client.attachPlugin(this);
|
|
@@ -40140,7 +38154,8 @@ class LanguageServerPlugin {
|
|
|
40140
38154
|
});
|
|
40141
38155
|
}
|
|
40142
38156
|
}
|
|
40143
|
-
const options = items.map((
|
|
38157
|
+
const options = items.map((item) => {
|
|
38158
|
+
const { detail, label, kind, textEdit, documentation, additionalTextEdits, } = item;
|
|
40144
38159
|
const completion = {
|
|
40145
38160
|
label,
|
|
40146
38161
|
detail,
|
|
@@ -40178,20 +38193,26 @@ class LanguageServerPlugin {
|
|
|
40178
38193
|
},
|
|
40179
38194
|
type: kind && CompletionItemKindMap[kind].toLowerCase(),
|
|
40180
38195
|
};
|
|
40181
|
-
|
|
40182
|
-
|
|
40183
|
-
|
|
40184
|
-
|
|
40185
|
-
|
|
40186
|
-
|
|
40187
|
-
|
|
40188
|
-
|
|
40189
|
-
|
|
40190
|
-
|
|
40191
|
-
|
|
40192
|
-
|
|
40193
|
-
|
|
40194
|
-
|
|
38196
|
+
completion.info = async () => {
|
|
38197
|
+
var _a;
|
|
38198
|
+
let { documentation } = item;
|
|
38199
|
+
if (!documentation &&
|
|
38200
|
+
((_a = this.client.capabilities.completionProvider) === null || _a === void 0 ? void 0 : _a.resolveProvider)) {
|
|
38201
|
+
const resolvedItem = await this.client.completionItemResolve(item);
|
|
38202
|
+
documentation = resolvedItem.documentation;
|
|
38203
|
+
}
|
|
38204
|
+
if (!documentation)
|
|
38205
|
+
return null;
|
|
38206
|
+
const dom = document.createElement('div');
|
|
38207
|
+
dom.classList.add('documentation');
|
|
38208
|
+
if (this.allowHTMLContent) {
|
|
38209
|
+
dom.innerHTML = await formatContents(documentation);
|
|
38210
|
+
}
|
|
38211
|
+
else {
|
|
38212
|
+
dom.textContent = await formatContents(documentation);
|
|
38213
|
+
}
|
|
38214
|
+
return dom;
|
|
38215
|
+
};
|
|
40195
38216
|
return completion;
|
|
40196
38217
|
});
|
|
40197
38218
|
return {
|
|
@@ -40200,12 +38221,11 @@ class LanguageServerPlugin {
|
|
|
40200
38221
|
filter: false,
|
|
40201
38222
|
};
|
|
40202
38223
|
}
|
|
40203
|
-
async
|
|
40204
|
-
if (!this.client.ready ||
|
|
40205
|
-
!this.client.capabilities.definitionProvider) {
|
|
38224
|
+
async requestLocation(view, { line, character }, capability, method) {
|
|
38225
|
+
if (!this.client.ready || !this.client.capabilities[capability]) {
|
|
40206
38226
|
return null;
|
|
40207
38227
|
}
|
|
40208
|
-
const result = await this.client
|
|
38228
|
+
const result = await this.client[method]({
|
|
40209
38229
|
textDocument: { uri: this.documentUri },
|
|
40210
38230
|
position: { line, character },
|
|
40211
38231
|
});
|
|
@@ -40222,6 +38242,7 @@ class LanguageServerPlugin {
|
|
|
40222
38242
|
anchor: posToOffset(view.state.doc, range.start),
|
|
40223
38243
|
head: posToOffset(view.state.doc, range.end),
|
|
40224
38244
|
},
|
|
38245
|
+
scrollIntoView: true,
|
|
40225
38246
|
}));
|
|
40226
38247
|
}
|
|
40227
38248
|
return {
|
|
@@ -40229,6 +38250,15 @@ class LanguageServerPlugin {
|
|
|
40229
38250
|
range,
|
|
40230
38251
|
};
|
|
40231
38252
|
}
|
|
38253
|
+
async requestDefinition(view, { line, character }) {
|
|
38254
|
+
return this.requestLocation(view, { line, character }, 'definitionProvider', 'textDocumentDefinition');
|
|
38255
|
+
}
|
|
38256
|
+
async requestDeclaration(view, { line, character }) {
|
|
38257
|
+
return this.requestLocation(view, { line, character }, 'declarationProvider', 'textDocumentDeclaration');
|
|
38258
|
+
}
|
|
38259
|
+
async requestTypeDefinition(view, { line, character }) {
|
|
38260
|
+
return this.requestLocation(view, { line, character }, 'typeDefinitionProvider', 'textDocumentTypeDefinition');
|
|
38261
|
+
}
|
|
40232
38262
|
processNotification(notification) {
|
|
40233
38263
|
try {
|
|
40234
38264
|
switch (notification.method) {
|
|
@@ -40273,58 +38303,6 @@ class LanguageServerPlugin {
|
|
|
40273
38303
|
}
|
|
40274
38304
|
}
|
|
40275
38305
|
const languageServerPlugin = ViewPlugin.fromClass(LanguageServerPlugin);
|
|
40276
|
-
function languageServer(options) {
|
|
40277
|
-
const serverUri = options.serverUri;
|
|
40278
|
-
const { serverUri: _, ...optionsWithoutServerUri } = options;
|
|
40279
|
-
return languageServerWithTransport({
|
|
40280
|
-
...optionsWithoutServerUri,
|
|
40281
|
-
transport: new buildExports.WebSocketTransport(serverUri),
|
|
40282
|
-
});
|
|
40283
|
-
}
|
|
40284
|
-
function languageServerWithTransport(options) {
|
|
40285
|
-
return [
|
|
40286
|
-
client.of(options.client ||
|
|
40287
|
-
new LanguageServerClient({
|
|
40288
|
-
...options,
|
|
40289
|
-
autoClose: true,
|
|
40290
|
-
})),
|
|
40291
|
-
documentUri.of(options.documentUri),
|
|
40292
|
-
languageId.of(options.languageId),
|
|
40293
|
-
languageServerPlugin.of(options.allowHTMLContent),
|
|
40294
|
-
hoverTooltip((view, pos) => {
|
|
40295
|
-
var _a;
|
|
40296
|
-
const plugin = view.plugin(languageServerPlugin);
|
|
40297
|
-
return ((_a = plugin === null || plugin === void 0 ? void 0 : plugin.requestHoverTooltip(view, offsetToPos(view.state.doc, pos))) !== null && _a !== void 0 ? _a : null);
|
|
40298
|
-
}),
|
|
40299
|
-
autocompletion({
|
|
40300
|
-
override: [
|
|
40301
|
-
async (context) => {
|
|
40302
|
-
var _a, _b, _c;
|
|
40303
|
-
const { state, pos, explicit, view } = context;
|
|
40304
|
-
const plugin = view.plugin(languageServerPlugin);
|
|
40305
|
-
if (plugin == null)
|
|
40306
|
-
return null;
|
|
40307
|
-
const line = state.doc.lineAt(pos);
|
|
40308
|
-
let trigKind = mainExports.CompletionTriggerKind.Invoked;
|
|
40309
|
-
let trigChar;
|
|
40310
|
-
if (!explicit &&
|
|
40311
|
-
((_c = (_b = (_a = plugin.client.capabilities) === null || _a === void 0 ? void 0 : _a.completionProvider) === null || _b === void 0 ? void 0 : _b.triggerCharacters) === null || _c === void 0 ? void 0 : _c.includes(line.text[pos - line.from - 1]))) {
|
|
40312
|
-
trigKind = mainExports.CompletionTriggerKind.TriggerCharacter;
|
|
40313
|
-
trigChar = line.text[pos - line.from - 1];
|
|
40314
|
-
}
|
|
40315
|
-
if (trigKind === mainExports.CompletionTriggerKind.Invoked &&
|
|
40316
|
-
!context.matchBefore(/\w+$/)) {
|
|
40317
|
-
return null;
|
|
40318
|
-
}
|
|
40319
|
-
return await plugin.requestCompletion(context, offsetToPos(state.doc, pos), {
|
|
40320
|
-
triggerCharacter: trigChar,
|
|
40321
|
-
triggerKind: trigKind,
|
|
40322
|
-
});
|
|
40323
|
-
},
|
|
40324
|
-
],
|
|
40325
|
-
}),
|
|
40326
|
-
];
|
|
40327
|
-
}
|
|
40328
38306
|
async function formatContents(contents) {
|
|
40329
38307
|
if (isLSPMarkupContent(contents)) {
|
|
40330
38308
|
let value = contents.value;
|
|
@@ -40372,44 +38350,124 @@ function isLSPMarkupContent(contents) {
|
|
|
40372
38350
|
return contents.kind !== undefined;
|
|
40373
38351
|
}
|
|
40374
38352
|
|
|
40375
|
-
function
|
|
38353
|
+
function requestDefinition(view, pos) {
|
|
40376
38354
|
const plugin = view.plugin(languageServerPlugin);
|
|
40377
38355
|
if (!plugin)
|
|
40378
38356
|
return false;
|
|
40379
38357
|
plugin.requestDefinition(view, offsetToPos(view.state.doc, pos));
|
|
40380
38358
|
return true;
|
|
40381
38359
|
}
|
|
40382
|
-
|
|
40383
|
-
const
|
|
38360
|
+
function requestTypeDefinition(view, pos) {
|
|
38361
|
+
const plugin = view.plugin(languageServerPlugin);
|
|
38362
|
+
if (!plugin)
|
|
38363
|
+
return false;
|
|
38364
|
+
plugin.requestTypeDefinition(view, offsetToPos(view.state.doc, pos));
|
|
38365
|
+
return true;
|
|
38366
|
+
}
|
|
38367
|
+
const jumpToDefinition = (view) => requestDefinition(view, view.state.selection.main.head);
|
|
38368
|
+
const jumpToDefinitionPos = (pos) => (view) => requestDefinition(view, pos);
|
|
38369
|
+
const jumpToTypeDefinition = (view) => requestTypeDefinition(view, view.state.selection.main.head);
|
|
38370
|
+
const jumpToTypeDefinitionPos = (pos) => (view) => requestTypeDefinition(view, pos);
|
|
40384
38371
|
const jumpToDefinitionKeymap = [
|
|
40385
38372
|
{ key: 'F12', run: jumpToDefinition, preventDefault: true },
|
|
38373
|
+
{ key: 'Mod-F12', run: jumpToTypeDefinition, preventDefault: true },
|
|
40386
38374
|
];
|
|
40387
38375
|
|
|
38376
|
+
const hoverTooltip = () => hoverTooltip$1((view, pos) => {
|
|
38377
|
+
var _a;
|
|
38378
|
+
const plugin = view.plugin(languageServerPlugin);
|
|
38379
|
+
return ((_a = plugin === null || plugin === void 0 ? void 0 : plugin.requestHoverTooltip(view, offsetToPos(view.state.doc, pos))) !== null && _a !== void 0 ? _a : null);
|
|
38380
|
+
});
|
|
38381
|
+
|
|
38382
|
+
const autocompletion = () => autocompletion$1({
|
|
38383
|
+
override: [
|
|
38384
|
+
async (context) => {
|
|
38385
|
+
var _a, _b, _c;
|
|
38386
|
+
const { state, pos, explicit, view } = context;
|
|
38387
|
+
const plugin = view.plugin(languageServerPlugin);
|
|
38388
|
+
if (plugin == null)
|
|
38389
|
+
return null;
|
|
38390
|
+
const line = state.doc.lineAt(pos);
|
|
38391
|
+
let trigKind = mainExports.CompletionTriggerKind.Invoked;
|
|
38392
|
+
let trigChar;
|
|
38393
|
+
if (!explicit &&
|
|
38394
|
+
((_c = (_b = (_a = plugin.client.capabilities) === null || _a === void 0 ? void 0 : _a.completionProvider) === null || _b === void 0 ? void 0 : _b.triggerCharacters) === null || _c === void 0 ? void 0 : _c.includes(line.text[pos - line.from - 1]))) {
|
|
38395
|
+
trigKind = mainExports.CompletionTriggerKind.TriggerCharacter;
|
|
38396
|
+
trigChar = line.text[pos - line.from - 1];
|
|
38397
|
+
}
|
|
38398
|
+
if (trigKind === mainExports.CompletionTriggerKind.Invoked &&
|
|
38399
|
+
!context.matchBefore(/\w+$/)) {
|
|
38400
|
+
return null;
|
|
38401
|
+
}
|
|
38402
|
+
return await plugin.requestCompletion(context, offsetToPos(state.doc, pos), {
|
|
38403
|
+
triggerCharacter: trigChar,
|
|
38404
|
+
triggerKind: trigKind,
|
|
38405
|
+
});
|
|
38406
|
+
},
|
|
38407
|
+
],
|
|
38408
|
+
});
|
|
38409
|
+
|
|
38410
|
+
const mouseHandler = () => EditorView.domEventHandlers({
|
|
38411
|
+
mousedown: (event, view) => {
|
|
38412
|
+
if (!event.ctrlKey && !event.metaKey)
|
|
38413
|
+
return;
|
|
38414
|
+
const pos = view.posAtCoords({
|
|
38415
|
+
x: event.clientX,
|
|
38416
|
+
y: event.clientY,
|
|
38417
|
+
});
|
|
38418
|
+
const ok = (event.shiftKey
|
|
38419
|
+
? jumpToTypeDefinitionPos(pos)
|
|
38420
|
+
: jumpToDefinitionPos(pos))(view);
|
|
38421
|
+
if (ok)
|
|
38422
|
+
event.preventDefault();
|
|
38423
|
+
},
|
|
38424
|
+
});
|
|
38425
|
+
|
|
38426
|
+
function languageServer(options) {
|
|
38427
|
+
const serverUri = options.serverUri;
|
|
38428
|
+
const { serverUri: _, ...optionsWithoutServerUri } = options;
|
|
38429
|
+
return languageServerWithTransport({
|
|
38430
|
+
...optionsWithoutServerUri,
|
|
38431
|
+
transport: new buildExports.WebSocketTransport(serverUri),
|
|
38432
|
+
});
|
|
38433
|
+
}
|
|
38434
|
+
function languageServerWithTransport(options) {
|
|
38435
|
+
return [
|
|
38436
|
+
languageServerPlugin.of({
|
|
38437
|
+
client: options.client ||
|
|
38438
|
+
new LanguageServerClient({
|
|
38439
|
+
...options,
|
|
38440
|
+
autoClose: true,
|
|
38441
|
+
}),
|
|
38442
|
+
documentUri: options.documentUri,
|
|
38443
|
+
languageId: options.languageId,
|
|
38444
|
+
allowHTMLContent: options.allowHTMLContent,
|
|
38445
|
+
}),
|
|
38446
|
+
hoverTooltip(),
|
|
38447
|
+
autocompletion(),
|
|
38448
|
+
keymap.of([...jumpToDefinitionKeymap]),
|
|
38449
|
+
mouseHandler(),
|
|
38450
|
+
];
|
|
38451
|
+
}
|
|
38452
|
+
|
|
40388
38453
|
var tabSizeCompartment = new Compartment();
|
|
38454
|
+
var doc = "#include <iostream>\n\nusing namespace std;\n\nclass Animal {\n\tpublic:\n\t\tvoid say(string call) {\n\t\t\tcout << call << endl;\n\t\t}\n};\n\nclass Cat : Animal {\n\tpublic:\n\t\tvoid meow() {\n\t\t\tthis->say(\"meow\");\n\t\t}\n};\n\nint main() {\n\tCat cat;\n\tcat.meow();\n\treturn 0;\n}\n";
|
|
40389
38455
|
new EditorView({
|
|
40390
|
-
doc:
|
|
38456
|
+
doc: doc,
|
|
40391
38457
|
parent: document.getElementById('editor'),
|
|
40392
38458
|
extensions: [lineNumbers(), highlightSpecialChars(), history(), foldGutter(), drawSelection(), EditorState.allowMultipleSelections.of(true), indentOnInput(), indentUnit.of('\t'), syntaxHighlighting(defaultHighlightStyle, {
|
|
40393
38459
|
fallback: true
|
|
40394
|
-
}), bracketMatching(), closeBrackets(), rectangularSelection(), highlightActiveLine(), highlightSelectionMatches(), panels(), keymap.of([].concat(_toConsumableArray(closeBracketsKeymap), _toConsumableArray(defaultKeymap), [indentWithTab], _toConsumableArray(searchKeymap), _toConsumableArray(historyKeymap), _toConsumableArray(foldKeymap), _toConsumableArray(completionKeymap), _toConsumableArray(lintKeymap))), tabSizeCompartment.of(EditorState.tabSize.of(4)),
|
|
40395
|
-
|
|
38460
|
+
}), bracketMatching(), closeBrackets(), rectangularSelection(), highlightActiveLine(), highlightSelectionMatches(), panels(), keymap.of([].concat(_toConsumableArray(closeBracketsKeymap), _toConsumableArray(defaultKeymap), [indentWithTab], _toConsumableArray(searchKeymap), _toConsumableArray(historyKeymap), _toConsumableArray(foldKeymap), _toConsumableArray(completionKeymap), _toConsumableArray(lintKeymap))), tabSizeCompartment.of(EditorState.tabSize.of(4)),
|
|
38461
|
+
// cpp(),
|
|
38462
|
+
languageServer({
|
|
38463
|
+
serverUri: 'ws://localhost:3000/?stack=python3',
|
|
40396
38464
|
allowHTMLContent: true,
|
|
40397
38465
|
rootUri: 'file:///demo',
|
|
40398
38466
|
workspaceFolders: [{
|
|
40399
38467
|
name: 'root',
|
|
40400
38468
|
uri: 'file:///demo'
|
|
40401
38469
|
}],
|
|
40402
|
-
documentUri: "file:///demo/main.
|
|
40403
|
-
languageId: '
|
|
40404
|
-
}), keymap.of(_toConsumableArray(jumpToDefinitionKeymap)), EditorView.domEventHandlers({
|
|
40405
|
-
click: function click(event, view) {
|
|
40406
|
-
if (!event.ctrlKey && !event.metaKey) return;
|
|
40407
|
-
var pos = view.posAtCoords({
|
|
40408
|
-
x: event.clientX,
|
|
40409
|
-
y: event.clientY
|
|
40410
|
-
});
|
|
40411
|
-
var ok = jumpToDefinitionPos(pos)(view);
|
|
40412
|
-
if (ok) event.preventDefault();
|
|
40413
|
-
}
|
|
38470
|
+
documentUri: "file:///demo/main.py",
|
|
38471
|
+
languageId: 'python'
|
|
40414
38472
|
})]
|
|
40415
38473
|
});
|