summaryrefslogtreecommitdiffstats
path: root/ui/jquery.ui.tabs.js
blob: ad99a99b782990286fc6464ec2382ec26389b55f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
/*
 * jQuery UI Tabs @VERSION
 *
 * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Tabs
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.widget.js
 */
(function( $, undefined ) {

var tabId = 0,
	listId = 0;

function getNextTabId() {
	return ++tabId;
}

function getNextListId() {
	return ++listId;
}

$.widget( "ui.tabs", {
	options: {
		add: null,
		ajaxOptions: null,
		cache: false,
		cookie: null, // e.g. { expires: 7, path: '/', domain: 'jquery.com', secure: true }
		collapsible: false,
		disable: null,
		disabled: [],
		enable: null,
		event: "click",
		fx: null, // e.g. { height: 'toggle', opacity: 'toggle', duration: 200 }
		idPrefix: "ui-tabs-",
		load: null,
		panelTemplate: "<div></div>",
		remove: null,
		select: null,
		show: null,
		spinner: "<em>Loading&#8230;</em>",
		tabTemplate: "<li><a href='#{href}'><span>#{label}</span></a></li>"
	},

	_create: function() {
		this._tabify( true );
	},

	_setOption: function( key, value ) {
		if ( key == "selected" ) {
			if (this.options.collapsible && value == this.options.selected ) {
				return;
			}
			this.select( value );
		} else {
			this.options[ key ] = value;
			this._tabify();
		}
	},

	_tabId: function( a ) {
		return a.title && a.title.replace( /\s/g, "_" ).replace( /[^\w\u00c0-\uFFFF-]/g, "" ) ||
			this.options.idPrefix + getNextTabId();
	},

	_sanitizeSelector: function( hash ) {
		// we need this because an id may contain a ":"
		return hash.replace( /:/g, "\\:" );
	},

	_cookie: function() {
		var cookie = this.cookie ||
			( this.cookie = this.options.cookie.name || "ui-tabs-" + getNextListId() );
		return $.cookie.apply( null, [ cookie ].concat( $.makeArray( arguments ) ) );
	},

	_ui: function( tab, panel ) {
		return {
			tab: tab,
			panel: panel,
			index: this.anchors.index( tab )
		};
	},

	_cleanup: function() {
		// restore all former loading tabs labels
		this.lis.filter( ".ui-state-processing" )
			.removeClass( "ui-state-processing" )
			.find( "span:data(label.tabs)" )
				.each(function() {
					var el = $( this );
					el.html( el.data( "label.tabs" ) ).removeData( "label.tabs" );
				});
	},

	_tabify: function( init ) {
		var self = this,
			o = this.options,
			fragmentId = /^#.+/; // Safari 2 reports '#' for an empty hash

		this.list = this.element.find( "ol,ul" ).eq( 0 );
		this.lis = $( " > li:has(a[href])", this.list );
		this.anchors = this.lis.map(function() {
			return $( "a", this )[ 0 ];
		});
		this.panels = $( [] );

		this.anchors.each(function( i, a ) {
			var href = $( a ).attr( "href" );
			// For dynamically created HTML that contains a hash as href IE < 8 expands
			// such href to the full page url with hash and then misinterprets tab as ajax.
			// Same consideration applies for an added tab with a fragment identifier
			// since a[href=#fragment-identifier] does unexpectedly not match.
			// Thus normalize href attribute...
			var hrefBase = href.split( "#" )[ 0 ],
				baseEl;
			if ( hrefBase && ( hrefBase === location.toString().split( "#" )[ 0 ] ||
					( baseEl = $( "base" )[ 0 ]) && hrefBase === baseEl.href ) ) {
				href = a.hash;
				a.href = href;
			}

			// inline tab
			if ( fragmentId.test( href ) ) {
				self.panels = self.panels.add( self._sanitizeSelector( href ) );
			// remote tab
			// prevent loading the page itself if href is just "#"
			} else if ( href && href !== "#" ) {
				// required for restore on destroy
				$.data( a, "href.tabs", href );

				// TODO until #3808 is fixed strip fragment identifier from url
				// (IE fails to load from such url)
				$.data( a, "load.tabs", href.replace( /#.*$/, "" ) );

				var id = self._tabId( a );
				a.href = "#" + id;
				var $panel = $( "#" + id );
				if ( !$panel.length ) {
					$panel = $( o.panelTemplate )
						.attr( "id", id )
						.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
						.insertAfter( self.panels[ i - 1 ] || self.list );
					$panel.data( "destroy.tabs", true );
				}
				self.panels = self.panels.add( $panel );
			// invalid tab href
			} else {
				o.disabled.push( i );
			}
		});

		// initialization from scratch
		if ( init ) {
			// attach necessary classes for styling
			this.element.addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" );
			this.list.addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" );
			this.lis.addClass( "ui-state-default ui-corner-top" );
			this.panels.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" );

			// Selected tab
			// use "selected" option or try to retrieve:
			// 1. from fragment identifier in url
			// 2. from cookie
			// 3. from selected class attribute on <li>
			if ( o.selected === undefined ) {
				if ( location.hash ) {
					this.anchors.each(function( i, a ) {
						if ( a.hash == location.hash ) {
							o.selected = i;
							return false;
						}
					});
				}
				if ( typeof o.selected !== "number" && o.cookie ) {
					o.selected = parseInt( self._cookie(), 10 );
				}
				if ( typeof o.selected !== "number" && this.lis.filter( ".ui-tabs-selected" ).length ) {
					o.selected = this.lis.index( this.lis.filter( ".ui-tabs-selected" ) );
				}
				o.selected = o.selected || ( this.lis.length ? 0 : -1 );
			} else if ( o.selected === null ) { // usage of null is deprecated, TODO remove in next release
				o.selected = -1;
			}

			// sanity check - default to first tab...
			o.selected = ( ( o.selected >= 0 && this.anchors[ o.selected ] ) || o.selected < 0 )
				? o.selected
				: 0;

			// Take disabling tabs via class attribute from HTML
			// into account and update option properly.
			// A selected tab cannot become disabled.
			o.disabled = $.unique( o.disabled.concat(
				$.map( this.lis.filter( ".ui-state-disabled" ), function( n, i ) {
					return self.lis.index( n );
				})
			) ).sort();

			if ( $.inArray( o.selected, o.disabled ) != -1 ) {
				o.disabled.splice( $.inArray( o.selected, o.disabled ), 1 );
			}

			// highlight selected tab
			this.panels.addClass( "ui-tabs-hide" );
			this.lis.removeClass( "ui-tabs-selected ui-state-active" );
			// check for length avoids error when initializing empty list
			if ( o.selected >= 0 && this.anchors.length ) {
				$( self._sanitizeSelector( self.anchors[ o.selected ].hash ) ).removeClass( "ui-tabs-hide" );
				this.lis.eq( o.selected ).addClass( "ui-tabs-selected ui-state-active" );

				// seems to be expected behavior that the show callback is fired
				self.element.queue( "tabs", function() {
					self._trigger( "show", null,
						self._ui( self.anchors[ o.selected ], $( self._sanitizeSelector( self.anchors[ o.selected ].hash ) ) ) );
				});

				this.load( o.selected );
			}

			// clean up to avoid memory leaks in certain versions of IE 6
			// TODO: namespace this event
			$( window ).bind( "unload", function() {
				self.lis.add( self.anchors ).unbind( ".tabs" );
				self.lis = self.anchors = self.panels = null;
			});
		// update selected after add/remove
		} else {
			o.selected = this.lis.index( this.lis.filter( ".ui-tabs-selected" ) );
		}

		// update collapsible
		// TODO: use .toggleClass()
		this.element[ o.collapsible ? "addClass" : "removeClass" ]( "ui-tabs-collapsible" );

		// set or update cookie after init and add/remove respectively
		if ( o.cookie ) {
			this._cookie( o.selected, o.cookie );
		}

		// disable tabs
		for ( var i = 0, li; ( li = this.lis[ i ] ); i++ ) {
			$( li )[ $.inArray( i, o.disabled ) != -1 &&
				// TODO: use .toggleClass()
				!$( li ).hasClass( "ui-tabs-selected" ) ? "addClass" : "removeClass" ]( "ui-state-disabled" );
		}

		// reset cache if switching from cached to not cached
		if ( o.cache === false ) {
			this.anchors.removeData( "cache.tabs" );
		}

		// remove all handlers before, tabify may run on existing tabs after add or option change
		this.lis.add( this.anchors ).unbind( ".tabs" );

		if ( o.event !== "mouseover" ) {
			var addState = function( state, el ) {
				if ( el.is( ":not(.ui-state-disabled)" ) ) {
					el.addClass( "ui-state-" + state );
				}
			};
			var removeState = function( state, el ) {
				el.removeClass( "ui-state-" + state );
			};
			this.lis.bind( "mouseover.tabs" , function() {
				addState( "hover", $( this ) );
			});
			this.lis.bind( "mouseout.tabs", function() {
				removeState( "hover", $( this ) );
			});
			this.anchors.bind( "focus.tabs", function() {
				addState( "focus", $( this ).closest( "li" ) );
			});
			this.anchors.bind( "blur.tabs", function() {
				removeState( "focus", $( this ).closest( "li" ) );
			});
		}

		// set up animations
		var hideFx, showFx;
		if ( o.fx ) {
			if ( $.isArray( o.fx ) ) {
				hideFx = o.fx[ 0 ];
				showFx = o.fx[ 1 ];
			} else {
				hideFx = showFx = o.fx;
			}
		}

		// Reset certain styles left over from animation
		// and prevent IE's ClearType bug...
		function resetStyle( $el, fx ) {
			$el.css( "display", "" );
			if ( !$.support.opacity && fx.opacity ) {
				$el[ 0 ].style.removeAttribute( "filter" );
			}
		}

		// Show a tab...
		var showTab = showFx
			? function( clicked, $show ) {
				$( clicked ).closest( "li" ).addClass( "ui-tabs-selected ui-state-active" );
				$show.hide().removeClass( "ui-tabs-hide" ) // avoid flicker that way
					.animate( showFx, showFx.duration || "normal", function() {
						resetStyle( $show, showFx );
						self._trigger( "show", null, self._ui( clicked, $show[ 0 ] ) );
					});
			}
			: function( clicked, $show ) {
				$( clicked ).closest( "li" ).addClass( "ui-tabs-selected ui-state-active" );
				$show.removeClass( "ui-tabs-hide" );
				self._trigger( "show", null, self._ui( clicked, $show[ 0 ] ) );
			};

		// Hide a tab, $show is optional...
		var hideTab = hideFx
			? function( clicked, $hide ) {
				$hide.animate( hideFx, hideFx.duration || "normal", function() {
					self.lis.removeClass( "ui-tabs-selected ui-state-active" );
					$hide.addClass( "ui-tabs-hide" );
					resetStyle( $hide, hideFx );
					self.element.dequeue( "tabs" );
				});
			}
			: function( clicked, $hide, $show ) {
				self.lis.removeClass( "ui-tabs-selected ui-state-active" );
				$hide.addClass( "ui-tabs-hide" );
				self.element.dequeue( "tabs" );
			};

		// attach tab event handler, unbind to avoid duplicates from former tabifying...
		this.anchors.bind( o.event + ".tabs", function() {
			var el = this,
				$li = $(el).closest( "li" ),
				$hide = self.panels.filter( ":not(.ui-tabs-hide)" ),
				$show = $( self._sanitizeSelector( el.hash ) );

			// If tab is already selected and not collapsible or tab disabled or
			// or is already loading or click callback returns false stop here.
			// Check if click handler returns false last so that it is not executed
			// for a disabled or loading tab!
			if ( ( $li.hasClass( "ui-tabs-selected" ) && !o.collapsible) ||
				$li.hasClass( "ui-state-disabled" ) ||
				$li.hasClass( "ui-state-processing" ) ||
				self.panels.filter( ":animated" ).length ||
				self._trigger( "select", null, self._ui( this, $show[ 0 ] ) ) === false ) {
				this.blur();
				return false;
			}

			o.selected = self.anchors.index( this );

			self.abort();

			// if tab may be closed
			if ( o.collapsible ) {
				if ( $li.hasClass( "ui-tabs-selected" ) ) {
					o.selected = -1;

					if ( o.cookie ) {
						self._cookie( o.selected, o.cookie );
					}

					self.element.queue( "tabs", function() {
						hideTab( el, $hide );
					}).dequeue( "tabs" );

					this.blur();
					return false;
				} else if ( !$hide.length ) {
					if ( o.cookie ) {
						self._cookie( o.selected, o.cookie );
					}

					self.element.queue( "tabs", function() {
						showTab( el, $show );
					});

					// TODO make passing in node possible, see also http://dev.jqueryui.com/ticket/3171
					self.load( self.anchors.index( this ) );

					this.blur();
					return false;
				}
			}

			if ( o.cookie ) {
				self._cookie( o.selected, o.cookie );
			}

			// show new tab
			if ( $show.length ) {
				if ( $hide.length ) {
					self.element.queue( "tabs", function() {
						hideTab( el, $hide );
					});
				}
				self.element.queue( "tabs", function() {
					showTab( el, $show );
				});

				self.load( self.anchors.index( this ) );
			} else {
				throw "jQuery UI Tabs: Mismatching fragment identifier.";
			}

			// Prevent IE from keeping other link focussed when using the back button
			// and remove dotted border from clicked link. This is controlled via CSS
			// in modern browsers; blur() removes focus from address bar in Firefox
			// which can become a usability and annoying problem with tabs('rotate').
			if ( $.browser.msie ) {
				this.blur();
			}
		});

		// disable click in any case
		this.anchors.bind( "click.tabs", function(){
			return false;
		});
	},

    _getIndex: function( index ) {
		// meta-function to give users option to provide a href string instead of a numerical index.
		// also sanitizes numerical indexes to valid values.
		if ( typeof index == "string" ) {
			index = this.anchors.index( this.anchors.filter( "[href$=" + index + "]" ) );
		}

		return index;
	},

	destroy: function() {
		var o = this.options;

		this.abort();

		this.element
			.unbind( ".tabs" )
			.removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" )
			.removeData( "tabs" );

		this.list.removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" );

		this.anchors.each(function() {
			var href = $.data( this, "href.tabs" );
			if ( href ) {
				this.href = href;
			}
			var $this = $( this ).unbind( ".tabs" );
			$.each( [ "href", "load", "cache" ], function( i, prefix ) {
				$this.removeData( prefix + ".tabs" );
			});
		});

		this.lis.unbind( ".tabs" ).add( this.panels ).each(function() {
			if ( $.data( this, "destroy.tabs" ) ) {
				$( this ).remove();
			} else {
				$( this ).removeClass([
					"ui-state-default",
					"ui-corner-top",
					"ui-tabs-selected",
					"ui-state-active",
					"ui-state-hover",
					"ui-state-focus",
					"ui-state-disabled",
					"ui-tabs-panel",
					"ui-widget-content",
					"ui-corner-bottom",
					"ui-tabs-hide"
				].join( " " ) );
			}
		});

		if ( o.cookie ) {
			this._cookie( null, o.cookie );
		}

		return this;
	},

	add: function( url, label, index ) {
		if ( index === undefined ) {
			index = this.anchors.length;
		}

		var self = this,
			o = this.options,
			$li = $( o.tabTemplate.replace( /#\{href\}/g, url ).replace( /#\{label\}/g, label ) ),
			id = !url.indexOf( "#" ) ? url.replace( "#", "" ) : this._tabId( $( "a", $li )[ 0 ] );

		$li.addClass( "ui-state-default ui-corner-top" ).data( "destroy.tabs", true );

		// try to find an existing element before creating a new one
		var $panel = $( "#" + id );
		if ( !$panel.length ) {
			$panel = $( o.panelTemplate )
				.attr( "id", id )
				.data( "destroy.tabs", true );
		}
		$panel.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" );

		if ( index >= this.lis.length ) {
			$li.appendTo( this.list );
			$panel.appendTo( this.list[ 0 ].parentNode );
		} else {
			$li.insertBefore( this.lis[ index ] );
			$panel.insertBefore( this.panels[ index ] );
		}

		o.disabled = $.map( o.disabled, function( n, i ) {
			return n >= index ? ++n : n;
		});

		this._tabify();

		if ( this.anchors.length == 1 ) {
			o.selected = 0;
			$li.addClass( "ui-tabs-selected ui-state-active" );
			$panel.removeClass( "ui-tabs-hide" );
			this.element.queue( "tabs", function() {
				self._trigger( "show", null, self._ui( self.anchors[ 0 ], self.panels[ 0 ] ) );
			});

			this.load( 0 );
		}

		this._trigger( "add", null, this._ui( this.anchors[ index ], this.panels[ index ] ) );
		return this;
	},

	remove: function( index ) {
		index = this._getIndex( index );
		var o = this.options,
			$li = this.lis.eq( index ).remove(),
			$panel = this.panels.eq( index ).remove();

		// If selected tab was removed focus tab to the right or
		// in case the last tab was removed the tab to the left.
		if ( $li.hasClass( "ui-tabs-selected" ) && this.anchors.length > 1) {
			this.select( index + ( index + 1 < this.anchors.length ? 1 : -1 ) );
		}

		o.disabled = $.map(
			$.grep( o.disabled, function(n, i) {
				return n != index;
			}),
			function( n, i ) {
				return n >= index ? --n : n;
			});

		this._tabify();

		this._trigger( "remove", null, this._ui( $li.find( "a" )[ 0 ], $panel[ 0 ] ) );
		return this;
	},

	enable: function( index ) {
		index = this._getIndex( index );
		var o = this.options;
		if ( $.inArray( index, o.disabled ) == -1 ) {
			return;
		}

		this.lis.eq( index ).removeClass( "ui-state-disabled" );
		o.disabled = $.grep( o.disabled, function( n, i ) {
			return n != index;
		});

		this._trigger( "enable", null, this._ui( this.anchors[ index ], this.panels[ index ] ) );
		return this;
	},

	disable: function( index ) {
		index = this._getIndex( index );
		var self = this, o = this.options;
		// cannot disable already selected tab
		if ( index != o.selected ) {
			this.lis.eq( index ).addClass( "ui-state-disabled" );

			o.disabled.push( index );
			o.disabled.sort();

			this._trigger( "disable", null, this._ui( this.anchors[ index ], this.panels[ index ] ) );
		}

		return this;
	},

	select: function( index ) {
		index = this._getIndex( index );
		if ( index == -1 ) {
			if ( this.options.collapsible && this.options.selected != -1 ) {
				index = this.options.selected;
			} else {
				return this;
			}
		}
		this.anchors.eq( index ).trigger( this.options.event + ".tabs" );
		return this;
	},

	load: function( index ) {
		index = this._getIndex( index );
		var self = this,
			o = this.options,
			a = this.anchors.eq( index )[ 0 ],
			url = $.data( a, "load.tabs" );

		this.abort();

		// not remote or from cache
		if ( !url || this.element.queue( "tabs" ).length !== 0 && $.data( a, "cache.tabs" ) ) {
			this.element.dequeue( "tabs" );
			return;
		}

		// load remote from here on
		this.lis.eq( index ).addClass( "ui-state-processing" );

		if ( o.spinner ) {
			var span = $( "span", a );
			span.data( "label.tabs", span.html() ).html( o.spinner );
		}

		this.xhr = $.ajax( $.extend( {}, o.ajaxOptions, {
			url: url,
			success: function( r, s ) {
				$( self._sanitizeSelector( a.hash ) ).html( r );

				// take care of tab labels
				self._cleanup();

				if ( o.cache ) {
					$.data( a, "cache.tabs", true );
				}

				self._trigger( "load", null, self._ui( self.anchors[ index ], self.panels[ index ] ) );
				try {
					o.ajaxOptions.success( r, s );
				}
				catch ( e ) {}
			},
			error: function( xhr, s, e ) {
				// take care of tab labels
				self._cleanup();

				self._trigger( "load", null, self._ui( self.anchors[ index ], self.panels[ index ] ) );
				try {
					// Passing index avoid a race condition when this method is
					// called after the user has selected another tab.
					// Pass the anchor that initiated this request allows
					// loadError to manipulate the tab content panel via $(a.hash)
					o.ajaxOptions.error( xhr, s, index, a );
				}
				catch ( e ) {}
			}
		} ) );

		// last, so that load event is fired before show...
		self.element.dequeue( "tabs" );

		return this;
	},

	abort: function() {
		// stop possibly running animations
		this.element.queue( [] );
		this.panels.stop( false, true );

		// "tabs" queue must not contain more than two elements,
		// which are the callbacks for the latest clicked tab...
		this.element.queue( "tabs", this.element.queue( "tabs" ).splice( -2, 2 ) );

		// terminate pending requests from other tabs
		if ( this.xhr ) {
			this.xhr.abort();
			delete this.xhr;
		}

		// take care of tab labels
		this._cleanup();
		return this;
	},

	url: function( index, url ) {
		this.anchors.eq( index ).removeData( "cache.tabs" ).data( "load.tabs", url );
		return this;
	},

	length: function() {
		return this.anchors.length;
	}
});

$.extend( $.ui.tabs, {
	version: "@VERSION"
});

/*
 * Tabs Extensions
 */

/*
 * Rotate
 */
$.extend( $.ui.tabs.prototype, {
	rotation: null,
	rotate: function( ms, continuing ) {
		var self = this,
			o = this.options;

		var rotate = self._rotate || ( self._rotate = function( e ) {
			clearTimeout( self.rotation );
			self.rotation = setTimeout(function() {
				var t = o.selected;
				self.select( ++t < self.anchors.length ? t : 0 );
			}, ms );
			
			if ( e ) {
				e.stopPropagation();
			}
		});

		var stop = self._unrotate || ( self._unrotate = !continuing
			? function(e) {
				if (e.clientX) { // in case of a true click
					self.rotate(null);
				}
			}
			: function( e ) {
				t = o.selected;
				rotate();
			});

		// start rotation
		if ( ms ) {
			this.element.bind( "tabsshow", rotate );
			this.anchors.bind( o.event + ".tabs", stop );
			rotate();
		// stop rotation
		} else {
			clearTimeout( self.rotation );
			this.element.unbind( "tabsshow", rotate );
			this.anchors.unbind( o.event + ".tabs", stop );
			delete this._rotate;
			delete this._unrotate;
		}

		return this;
	}
});

})( jQuery );
peteer-24.10.0 Nextcloud server, a safe home for all your data: https://github.com/nextcloud/serverwww-data
aboutsummaryrefslogtreecommitdiffstats
path: root/dist/7883-7883.js.map
blob: 81f8c57f9a37d87d2e1bac208a0a9ef0a26d4682 (plain)
1
{"version":3,"file":"7883-7883.js?v=a2dc0629def50af8d9b1","mappings":"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M,MAAQ,CAAE,GAAM,KAAM,GAAM,MAAQ,CAAE,GAAM,KAAM,GAAM,MAAQ,CAAE,EAAK,GAAI,EAAK,EAAG,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,KAAM,GAAM,KAAM,GAAM,MAAQ,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,GAAI,GAAM,GAAI,GAAM,GAAI,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,EAAK,GAAI,EAAK,EAAG,EAAK,EAAG,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,EAAK,GAAI,EAAK,EAAG,EAAK,EAAG,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,EAAK,GAAI,EAAK,EAAG,EAAK,EAAG,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,EAAK,GAAI,EAAK,EAAG,EAAK,EAAG,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,GAAI,GAAM,GAAI,GAAM,GAAI,GAAM,GAAI,GAAM,GAAI,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,GAAI,GAAM,GAAI,GAAM,GAAI,GAAM,GAAI,GAAM,GAAI,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,EAAK,GAAI,EAAK,EAAG,EAAK,EAAG,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,EAAK,GAAI,EAAK,EAAG,EAAK,EAAG,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,EAAK,GAAI,EAAK,EAAG,EAAK,EAAG,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,OAAS,CAAE,GAAM,OAAS,CAAE,GAAM,GAAI,GAAM,GAAI,GAAM,GAAI,GAAM,GAAI,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,OAAS,CAAE,GAAM,GAAI,GAAM,GAAI,GAAM,GAAI,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,OAAS,CAAE,GAAM,GAAI,GAAM,GAAI,GAAM,GAAI,GAAM,GAAI,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,GAAI,GAAM,GAAI,GAAM,GAAI,GAAM,GAAI,GAAM,GAAI,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,OAAS,CAAE,GAAM,OAAS,CAAE,GAAM,GAAI,GAAM,GAAI,GAAM,GAAI,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,GAAI,GAAM,GAAI,GAAM,GAAI,GAAM,GAAI,GAAM,GAAI,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,OAAS,CAAE,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,OAAS,CAAE,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAAO,GAAM,MAA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","sources":["webpack:///nextcloud/node_modules/@nextcloud/browserslist-config/browserlist.config.js","webpack:///nextcloud/core/src/logger.js","webpack:///nextcloud/core/src/services/BrowserStorageService.js","webpack:///nextcloud/core/src/services/BrowsersListService.js","webpack:///nextcloud/core/src/utils/RedirectUnsupportedBrowsers.js","webpack:///nextcloud/node_modules/browserslist/browser.js","webpack:///nextcloud/node_modules/browserslist/error.js","webpack:///nextcloud/node_modules/browserslist/index.js","webpack:///nextcloud/node_modules/browserslist/parse.js","webpack:///nextcloud/node_modules/caniuse-lite/data/agents.js","webpack:///nextcloud/node_modules/caniuse-lite/data/browserVersions.js","webpack:///nextcloud/node_modules/caniuse-lite/data/browsers.js","webpack:///nextcloud/node_modules/caniuse-lite/dist/unpacker/agents.js","webpack:///nextcloud/node_modules/caniuse-lite/dist/unpacker/browserVersions.js","webpack:///nextcloud/node_modules/caniuse-lite/dist/unpacker/browsers.js","webpack:///nextcloud/node_modules/electron-to-chromium/versions.js","webpack:///nextcloud/node_modules/regexp-tree/dist/compat-transpiler/index.js","webpack:///nextcloud/node_modules/regexp-tree/dist/compat-transpiler/runtime/index.js","webpack:///nextcloud/node_modules/regexp-tree/dist/compat-transpiler/transforms/compat-dotall-s-transform.js","webpack:///nextcloud/node_modules/regexp-tree/dist/compat-transpiler/transforms/compat-named-capturing-groups-transform.js","webpack:///nextcloud/node_modules/regexp-tree/dist/compat-transpiler/transforms/compat-x-flag-transform.js","webpack:///nextcloud/node_modules/regexp-tree/dist/compat-transpiler/transforms/index.js","webpack:///nextcloud/node_modules/regexp-tree/dist/generator/index.js","webpack:///nextcloud/node_modules/regexp-tree/dist/interpreter/finite-automaton/dfa/dfa-minimizer.js","webpack:///nextcloud/node_modules/regexp-tree/dist/interpreter/finite-automaton/dfa/dfa.js","webpack:///nextcloud/node_modules/regexp-tree/dist/interpreter/finite-automaton/index.js","webpack:///nextcloud/node_modules/regexp-tree/dist/interpreter/finite-automaton/nfa/builders.js","webpack:///nextcloud/node_modules/regexp-tree/dist/interpreter/finite-automaton/nfa/nfa-from-regexp.js","webpack:///nextcloud/node_modules/regexp-tree/dist/interpreter/finite-automaton/nfa/nfa-state.js","webpack:///nextcloud/node_modules/regexp-tree/dist/interpreter/finite-automaton/nfa/nfa.js","webpack:///nextcloud/node_modules/regexp-tree/dist/interpreter/finite-automaton/special-symbols.js","webpack:///nextcloud/node_modules/regexp-tree/dist/interpreter/finite-automaton/state.js","webpack:///nextcloud/node_modules/regexp-tree/dist/optimizer/index.js","webpack:///nextcloud/node_modules/regexp-tree/dist/optimizer/transforms/char-case-insensitive-lowercase-transform.js","webpack:///nextcloud/node_modules/regexp-tree/dist/optimizer/transforms/char-class-classranges-merge-transform.js","webpack:///nextcloud/node_modules/regexp-tree/dist/optimizer/transforms/char-class-classranges-to-chars-transform.js","webpack:///nextcloud/node_modules/regexp-tree/dist/optimizer/transforms/char-class-remove-duplicates-transform.js","webpack:///nextcloud/node_modules/regexp-tree/dist/optimizer/transforms/char-class-to-meta-transform.js","webpack:///nextcloud/node_modules/regexp-tree/dist/optimizer/transforms/char-class-to-single-char-transform.js","webpack:///nextcloud/node_modules/regexp-tree/dist/optimizer/transforms/char-code-to-simple-char-transform.js","webpack:///nextcloud/node_modules/regexp-tree/dist/optimizer/transforms/char-escape-unescape-transform.js","webpack:///nextcloud/node_modules/regexp-tree/dist/optimizer/transforms/char-surrogate-pair-to-single-unicode-transform.js","webpack:///nextcloud/node_modules/regexp-tree/dist/optimizer/transforms/combine-repeating-patterns-transform.js","webpack:///nextcloud/node_modules/regexp-tree/dist/optimizer/transforms/disjunction-remove-duplicates-transform.js","webpack:///nextcloud/node_modules/regexp-tree/dist/optimizer/transforms/group-single-chars-to-char-class.js","webpack:///nextcloud/node_modules/regexp-tree/dist/optimizer/transforms/index.js","webpack:///nextcloud/node_modules/regexp-tree/dist/optimizer/transforms/quantifier-range-to-symbol-transform.js","webpack:///nextcloud/node_modules/regexp-tree/dist/optimizer/transforms/quantifiers-merge-transform.js","webpack:///nextcloud/node_modules/regexp-tree/dist/optimizer/transforms/remove-empty-group-transform.js","webpack:///nextcloud/node_modules/regexp-tree/dist/optimizer/transforms/ungroup-transform.js","webpack:///nextcloud/node_modules/regexp-tree/dist/parser/generated/regexp-tree.js","webpack:///nextcloud/node_modules/regexp-tree/dist/parser/index.js","webpack:///nextcloud/node_modules/regexp-tree/dist/parser/unicode/parser-unicode-properties.js","webpack:///nextcloud/node_modules/regexp-tree/dist/regexp-tree.js","webpack:///nextcloud/node_modules/regexp-tree/dist/transform/index.js","webpack:///nextcloud/node_modules/regexp-tree/dist/transform/utils.js","webpack:///nextcloud/node_modules/regexp-tree/dist/traverse/index.js","webpack:///nextcloud/node_modules/regexp-tree/dist/traverse/node-path.js","webpack:///nextcloud/node_modules/regexp-tree/dist/utils/clone.js","webpack:///nextcloud/node_modules/regexp-tree/index.js","webpack:///nextcloud/node_modules/browserslist-useragent-regexp/dist/index.js","webpack:///nextcloud/node_modules/ua-regexes-lite/index.js"],"sourcesContent":["module.exports = [\n  '>0.25%',\n  'not op_mini all',\n  'not dead',\n  'Firefox ESR',\n];\n","/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nconst getLogger = user => {\n\tif (user === null) {\n\t\treturn getLoggerBuilder()\n\t\t\t.setApp('core')\n\t\t\t.build()\n\t}\n\treturn getLoggerBuilder()\n\t\t.setApp('core')\n\t\t.setUid(user.uid)\n\t\t.build()\n}\n\nexport default getLogger(getCurrentUser())\n","/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { getBuilder } from '@nextcloud/browser-storage'\n\nexport default getBuilder('core')\n\t.clearOnLogout()\n\t.persist()\n\t.build()\n","/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { getUserAgentRegex } from 'browserslist-useragent-regexp'\n// eslint-disable-next-line n/no-extraneous-import\nimport browserslist from 'browserslist'\nimport browserslistConfig from '@nextcloud/browserslist-config'\n\n// Generate a regex that matches user agents to detect incompatible browsers\nexport const supportedBrowsersRegExp = getUserAgentRegex({ allowHigherVersions: true, browsers: browserslistConfig })\nexport const supportedBrowsers = browserslist(browserslistConfig)\n","/**\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { generateUrl } from '@nextcloud/router'\nimport { supportedBrowsersRegExp } from '../services/BrowsersListService.js'\nimport browserStorage from '../services/BrowserStorageService.js'\nimport logger from '../logger.js'\n\nexport const browserStorageKey = 'unsupported-browser-ignore'\nconst redirectPath = generateUrl('/unsupported')\n\nconst isBrowserOverridden = browserStorage.getItem(browserStorageKey) === 'true'\n\n/**\n * Test the current browser user agent against our official browserslist config\n * and redirect if unsupported\n */\nexport const testSupportedBrowser = function() {\n\tif (supportedBrowsersRegExp.test(navigator.userAgent)) {\n\t\tlogger.debug('this browser is officially supported ! 🚀')\n\t\treturn\n\t}\n\n\t// If incompatible BUT ignored, let's keep going\n\tif (isBrowserOverridden) {\n\t\tlogger.debug('this browser is NOT supported but has been manually overridden ! ⚠️')\n\t\treturn\n\t}\n\n\t// If incompatible, NOT overridden AND NOT already on the warning page,\n\t// redirect to the unsupported warning page\n\tif (window.location.pathname.indexOf(redirectPath) === -1) {\n\t\tconst redirectUrl = window.location.href.replace(window.location.origin, '')\n\t\tconst base64Param = Buffer.from(redirectUrl).toString('base64')\n\t\thistory.pushState(null, null, `${redirectPath}?redirect_url=${base64Param}`)\n\t\twindow.location.reload()\n\t}\n}\n","var BrowserslistError = require('./error')\n\nfunction noop() {}\n\nmodule.exports = {\n  loadQueries: function loadQueries() {\n    throw new BrowserslistError(\n      'Sharable configs are not supported in client-side build of Browserslist'\n    )\n  },\n\n  getStat: function getStat(opts) {\n    return opts.stats\n  },\n\n  loadConfig: function loadConfig(opts) {\n    if (opts.config) {\n      throw new BrowserslistError(\n        'Browserslist config are not supported in client-side build'\n      )\n    }\n  },\n\n  loadCountry: function loadCountry() {\n    throw new BrowserslistError(\n      'Country statistics are not supported ' +\n        'in client-side build of Browserslist'\n    )\n  },\n\n  loadFeature: function loadFeature() {\n    throw new BrowserslistError(\n      'Supports queries are not available in client-side build of Browserslist'\n    )\n  },\n\n  currentNode: function currentNode(resolve, context) {\n    return resolve(['maintained node versions'], context)[0]\n  },\n\n  parseConfig: noop,\n\n  readConfig: noop,\n\n  findConfig: noop,\n\n  clearCaches: noop,\n\n  oldDataWarning: noop,\n\n  env: {}\n}\n","function BrowserslistError(message) {\n  this.name = 'BrowserslistError'\n  this.message = message\n  this.browserslist = true\n  if (Error.captureStackTrace) {\n    Error.captureStackTrace(this, BrowserslistError)\n  }\n}\n\nBrowserslistError.prototype = Error.prototype\n\nmodule.exports = BrowserslistError\n","var jsReleases = require('node-releases/data/processed/envs.json')\nvar agents = require('caniuse-lite/dist/unpacker/agents').agents\nvar jsEOL = require('node-releases/data/release-schedule/release-schedule.json')\nvar path = require('path')\nvar e2c = require('electron-to-chromium/versions')\n\nvar BrowserslistError = require('./error')\nvar parse = require('./parse')\nvar env = require('./node') // Will load browser.js in webpack\n\nvar YEAR = 365.259641 * 24 * 60 * 60 * 1000\nvar ANDROID_EVERGREEN_FIRST = '37'\nvar OP_MOB_BLINK_FIRST = 14\n\n// Helpers\n\nfunction isVersionsMatch(versionA, versionB) {\n  return (versionA + '.').indexOf(versionB + '.') === 0\n}\n\nfunction isEolReleased(name) {\n  var version = name.slice(1)\n  return browserslist.nodeVersions.some(function (i) {\n    return isVersionsMatch(i, version)\n  })\n}\n\nfunction normalize(versions) {\n  return versions.filter(function (version) {\n    return typeof version === 'string'\n  })\n}\n\nfunction normalizeElectron(version) {\n  var versionToUse = version\n  if (version.split('.').length === 3) {\n    versionToUse = version.split('.').slice(0, -1).join('.')\n  }\n  return versionToUse\n}\n\nfunction nameMapper(name) {\n  return function mapName(version) {\n    return name + ' ' + version\n  }\n}\n\nfunction getMajor(version) {\n  return parseInt(version.split('.')[0])\n}\n\nfunction getMajorVersions(released, number) {\n  if (released.length === 0) return []\n  var majorVersions = uniq(released.map(getMajor))\n  var minimum = majorVersions[majorVersions.length - number]\n  if (!minimum) {\n    return released\n  }\n  var selected = []\n  for (var i = released.length - 1; i >= 0; i--) {\n    if (minimum > getMajor(released[i])) break\n    selected.unshift(released[i])\n  }\n  return selected\n}\n\nfunction uniq(array) {\n  var filtered = []\n  for (var i = 0; i < array.length; i++) {\n    if (filtered.indexOf(array[i]) === -1) filtered.push(array[i])\n  }\n  return filtered\n}\n\nfunction fillUsage(result, name, data) {\n  for (var i in data) {\n    result[name + ' ' + i] = data[i]\n  }\n}\n\nfunction generateFilter(sign, version) {\n  version = parseFloat(version)\n  if (sign === '>') {\n    return function (v) {\n      return parseFloat(v) > version\n    }\n  } else if (sign === '>=') {\n    return function (v) {\n      return parseFloat(v) >= version\n    }\n  } else if (sign === '<') {\n    return function (v) {\n      return parseFloat(v) < version\n    }\n  } else {\n    return function (v) {\n      return parseFloat(v) <= version\n    }\n  }\n}\n\nfunction generateSemverFilter(sign, version) {\n  version = version.split('.').map(parseSimpleInt)\n  version[1] = version[1] || 0\n  version[2] = version[2] || 0\n  if (sign === '>') {\n    return function (v) {\n      v = v.split('.').map(parseSimpleInt)\n      return compareSemver(v, version) > 0\n    }\n  } else if (sign === '>=') {\n    return function (v) {\n      v = v.split('.').map(parseSimpleInt)\n      return compareSemver(v, version) >= 0\n    }\n  } else if (sign === '<') {\n    return function (v) {\n      v = v.split('.').map(parseSimpleInt)\n      return compareSemver(version, v) > 0\n    }\n  } else {\n    return function (v) {\n      v = v.split('.').map(parseSimpleInt)\n      return compareSemver(version, v) >= 0\n    }\n  }\n}\n\nfunction parseSimpleInt(x) {\n  return parseInt(x)\n}\n\nfunction compare(a, b) {\n  if (a < b) return -1\n  if (a > b) return +1\n  return 0\n}\n\nfunction compareSemver(a, b) {\n  return (\n    compare(parseInt(a[0]), parseInt(b[0])) ||\n    compare(parseInt(a[1] || '0'), parseInt(b[1] || '0')) ||\n    compare(parseInt(a[2] || '0'), parseInt(b[2] || '0'))\n  )\n}\n\n// this follows the npm-like semver behavior\nfunction semverFilterLoose(operator, range) {\n  range = range.split('.').map(parseSimpleInt)\n  if (typeof range[1] === 'undefined') {\n    range[1] = 'x'\n  }\n  // ignore any patch version because we only return minor versions\n  // range[2] = 'x'\n  switch (operator) {\n    case '<=':\n      return function (version) {\n        version = version.split('.').map(parseSimpleInt)\n        return compareSemverLoose(version, range) <= 0\n      }\n    case '>=':\n    default:\n      return function (version) {\n        version = version.split('.').map(parseSimpleInt)\n        return compareSemverLoose(version, range) >= 0\n      }\n  }\n}\n\n// this follows the npm-like semver behavior\nfunction compareSemverLoose(version, range) {\n  if (version[0] !== range[0]) {\n    return version[0] < range[0] ? -1 : +1\n  }\n  if (range[1] === 'x') {\n    return 0\n  }\n  if (version[1] !== range[1]) {\n    return version[1] < range[1] ? -1 : +1\n  }\n  return 0\n}\n\nfunction resolveVersion(data, version) {\n  if (data.versions.indexOf(version) !== -1) {\n    return version\n  } else if (browserslist.versionAliases[data.name][version]) {\n    return browserslist.versionAliases[data.name][version]\n  } else {\n    return false\n  }\n}\n\nfunction normalizeVersion(data, version) {\n  var resolved = resolveVersion(data, version)\n  if (resolved) {\n    return resolved\n  } else if (data.versions.length === 1) {\n    return data.versions[0]\n  } else {\n    return false\n  }\n}\n\nfunction filterByYear(since, context) {\n  since = since / 1000\n  return Object.keys(agents).reduce(function (selected, name) {\n    var data = byName(name, context)\n    if (!data) return selected\n    var versions = Object.keys(data.releaseDate).filter(function (v) {\n      var date = data.releaseDate[v]\n      return date !== null && date >= since\n    })\n    return selected.concat(versions.map(nameMapper(data.name)))\n  }, [])\n}\n\nfunction cloneData(data) {\n  return {\n    name: data.name,\n    versions: data.versions,\n    released: data.released,\n    releaseDate: data.releaseDate\n  }\n}\n\nfunction byName(name, context) {\n  name = name.toLowerCase()\n  name = browserslist.aliases[name] || name\n  if (context.mobileToDesktop && browserslist.desktopNames[name]) {\n    var desktop = browserslist.data[browserslist.desktopNames[name]]\n    if (name === 'android') {\n      return normalizeAndroidData(cloneData(browserslist.data[name]), desktop)\n    } else {\n      var cloned = cloneData(desktop)\n      cloned.name = name\n      return cloned\n    }\n  }\n  return browserslist.data[name]\n}\n\nfunction normalizeAndroidVersions(androidVersions, chromeVersions) {\n  var iFirstEvergreen = chromeVersions.indexOf(ANDROID_EVERGREEN_FIRST)\n  return androidVersions\n    .filter(function (version) {\n      return /^(?:[2-4]\\.|[34]$)/.test(version)\n    })\n    .concat(chromeVersions.slice(iFirstEvergreen))\n}\n\nfunction copyObject(obj) {\n  var copy = {}\n  for (var key in obj) {\n    copy[key] = obj[key]\n  }\n  return copy\n}\n\nfunction normalizeAndroidData(android, chrome) {\n  android.released = normalizeAndroidVersions(android.released, chrome.released)\n  android.versions = normalizeAndroidVersions(android.versions, chrome.versions)\n  android.releaseDate = copyObject(android.releaseDate)\n  android.released.forEach(function (v) {\n    if (android.releaseDate[v] === undefined) {\n      android.releaseDate[v] = chrome.releaseDate[v]\n    }\n  })\n  return android\n}\n\nfunction checkName(name, context) {\n  var data = byName(name, context)\n  if (!data) throw new BrowserslistError('Unknown browser ' + name)\n  return data\n}\n\nfunction unknownQuery(query) {\n  return new BrowserslistError(\n    'Unknown browser query `' +\n      query +\n      '`. ' +\n      'Maybe you are using old Browserslist or made typo in query.'\n  )\n}\n\n// Adjusts last X versions queries for some mobile browsers,\n// where caniuse data jumps from a legacy version to the latest\nfunction filterJumps(list, name, nVersions, context) {\n  var jump = 1\n  switch (name) {\n    case 'android':\n      if (context.mobileToDesktop) return list\n      var released = browserslist.data.chrome.released\n      jump = released.length - released.indexOf(ANDROID_EVERGREEN_FIRST)\n      break\n    case 'op_mob':\n      var latest = browserslist.data.op_mob.released.slice(-1)[0]\n      jump = getMajor(latest) - OP_MOB_BLINK_FIRST + 1\n      break\n    default:\n      return list\n  }\n  if (nVersions <= jump) {\n    return list.slice(-1)\n  }\n  return list.slice(jump - 1 - nVersions)\n}\n\nfunction isSupported(flags, withPartial) {\n  return (\n    typeof flags === 'string' &&\n    (flags.indexOf('y') >= 0 || (withPartial && flags.indexOf('a') >= 0))\n  )\n}\n\nfunction resolve(queries, context) {\n  return parse(QUERIES, queries).reduce(function (result, node, index) {\n    if (node.not && index === 0) {\n      throw new BrowserslistError(\n        'Write any browsers query (for instance, `defaults`) ' +\n          'before `' +\n          node.query +\n          '`'\n      )\n    }\n    var type = QUERIES[node.type]\n    var array = type.select.call(browserslist, context, node).map(function (j) {\n      var parts = j.split(' ')\n      if (parts[1] === '0') {\n        return parts[0] + ' ' + byName(parts[0], context).versions[0]\n      } else {\n        return j\n      }\n    })\n\n    if (node.compose === 'and') {\n      if (node.not) {\n        return result.filter(function (j) {\n          return array.indexOf(j) === -1\n        })\n      } else {\n        return result.filter(function (j) {\n          return array.indexOf(j) !== -1\n        })\n      }\n    } else {\n      if (node.not) {\n        var filter = {}\n        array.forEach(function (j) {\n          filter[j] = true\n        })\n        return result.filter(function (j) {\n          return !filter[j]\n        })\n      }\n      return result.concat(array)\n    }\n  }, [])\n}\n\nfunction prepareOpts(opts) {\n  if (typeof opts === 'undefined') opts = {}\n\n  if (typeof opts.path === 'undefined') {\n    opts.path = path.resolve ? path.resolve('.') : '.'\n  }\n\n  return opts\n}\n\nfunction prepareQueries(queries, opts) {\n  if (typeof queries === 'undefined' || queries === null) {\n    var config = browserslist.loadConfig(opts)\n    if (config) {\n      queries = config\n    } else {\n      queries = browserslist.defaults\n    }\n  }\n\n  return queries\n}\n\nfunction checkQueries(queries) {\n  if (!(typeof queries === 'string' || Array.isArray(queries))) {\n    throw new BrowserslistError(\n      'Browser queries must be an array or string. Got ' + typeof queries + '.'\n    )\n  }\n}\n\nvar cache = {}\n\nfunction browserslist(queries, opts) {\n  opts = prepareOpts(opts)\n  queries = prepareQueries(queries, opts)\n  checkQueries(queries)\n\n  var context = {\n    ignoreUnknownVersions: opts.ignoreUnknownVersions,\n    dangerousExtend: opts.dangerousExtend,\n    mobileToDesktop: opts.mobileToDesktop,\n    path: opts.path,\n    env: opts.env\n  }\n\n  env.oldDataWarning(browserslist.data)\n  var stats = env.getStat(opts, browserslist.data)\n  if (stats) {\n    context.customUsage = {}\n    for (var browser in stats) {\n      fillUsage(context.customUsage, browser, stats[browser])\n    }\n  }\n\n  var cacheKey = JSON.stringify([queries, context])\n  if (cache[cacheKey]) return cache[cacheKey]\n\n  var result = uniq(resolve(queries, context)).sort(function (name1, name2) {\n    name1 = name1.split(' ')\n    name2 = name2.split(' ')\n    if (name1[0] === name2[0]) {\n      // assumptions on caniuse data\n      // 1) version ranges never overlaps\n      // 2) if version is not a range, it never contains `-`\n      var version1 = name1[1].split('-')[0]\n      var version2 = name2[1].split('-')[0]\n      return compareSemver(version2.split('.'), version1.split('.'))\n    } else {\n      return compare(name1[0], name2[0])\n    }\n  })\n  if (!env.env.BROWSERSLIST_DISABLE_CACHE) {\n    cache[cacheKey] = result\n  }\n  return result\n}\n\nbrowserslist.parse = function (queries, opts) {\n  opts = prepareOpts(opts)\n  queries = prepareQueries(queries, opts)\n  checkQueries(queries)\n  return parse(QUERIES, queries)\n}\n\n// Will be filled by Can I Use data below\nbrowserslist.cache = {}\nbrowserslist.data = {}\nbrowserslist.usage = {\n  global: {},\n  custom: null\n}\n\n// Default browsers query\nbrowserslist.defaults = ['> 0.5%', 'last 2 versions', 'Firefox ESR', 'not dead']\n\n// Browser names aliases\nbrowserslist.aliases = {\n  fx: 'firefox',\n  ff: 'firefox',\n  ios: 'ios_saf',\n  explorer: 'ie',\n  blackberry: 'bb',\n  explorermobile: 'ie_mob',\n  operamini: 'op_mini',\n  operamobile: 'op_mob',\n  chromeandroid: 'and_chr',\n  firefoxandroid: 'and_ff',\n  ucandroid: 'and_uc',\n  qqandroid: 'and_qq'\n}\n\n// Can I Use only provides a few versions for some browsers (e.g. and_chr).\n// Fallback to a similar browser for unknown versions\n// Note op_mob is not included as its chromium versions are not in sync with Opera desktop\nbrowserslist.desktopNames = {\n  and_chr: 'chrome',\n  and_ff: 'firefox',\n  ie_mob: 'ie',\n  android: 'chrome' // has extra processing logic\n}\n\n// Aliases to work with joined versions like `ios_saf 7.0-7.1`\nbrowserslist.versionAliases = {}\n\nbrowserslist.clearCaches = env.clearCaches\nbrowserslist.parseConfig = env.parseConfig\nbrowserslist.readConfig = env.readConfig\nbrowserslist.findConfig = env.findConfig\nbrowserslist.loadConfig = env.loadConfig\n\nbrowserslist.coverage = function (browsers, stats) {\n  var data\n  if (typeof stats === 'undefined') {\n    data = browserslist.usage.global\n  } else if (stats === 'my stats') {\n    var opts = {}\n    opts.path = path.resolve ? path.resolve('.') : '.'\n    var customStats = env.getStat(opts)\n    if (!customStats) {\n      throw new BrowserslistError('Custom usage statistics was not provided')\n    }\n    data = {}\n    for (var browser in customStats) {\n      fillUsage(data, browser, customStats[browser])\n    }\n  } else if (typeof stats === 'string') {\n    if (stats.length > 2) {\n      stats = stats.toLowerCase()\n    } else {\n      stats = stats.toUpperCase()\n    }\n    env.loadCountry(browserslist.usage, stats, browserslist.data)\n    data = browserslist.usage[stats]\n  } else {\n    if ('dataByBrowser' in stats) {\n      stats = stats.dataByBrowser\n    }\n    data = {}\n    for (var name in stats) {\n      for (var version in stats[name]) {\n        data[name + ' ' + version] = stats[name][version]\n      }\n    }\n  }\n\n  return browsers.reduce(function (all, i) {\n    var usage = data[i]\n    if (usage === undefined) {\n      usage = data[i.replace(/ \\S+$/, ' 0')]\n    }\n    return all + (usage || 0)\n  }, 0)\n}\n\nfunction nodeQuery(context, node) {\n  var matched = browserslist.nodeVersions.filter(function (i) {\n    return isVersionsMatch(i, node.version)\n  })\n  if (matched.length === 0) {\n    if (context.ignoreUnknownVersions) {\n      return []\n    } else {\n      throw new BrowserslistError(\n        'Unknown version ' + node.version + ' of Node.js'\n      )\n    }\n  }\n  return ['node ' + matched[matched.length - 1]]\n}\n\nfunction sinceQuery(context, node) {\n  var year = parseInt(node.year)\n  var month = parseInt(node.month || '01') - 1\n  var day = parseInt(node.day || '01')\n  return filterByYear(Date.UTC(year, month, day, 0, 0, 0), context)\n}\n\nfunction coverQuery(context, node) {\n  var coverage = parseFloat(node.coverage)\n  var usage = browserslist.usage.global\n  if (node.place) {\n    if (node.place.match(/^my\\s+stats$/i)) {\n      if (!context.customUsage) {\n        throw new BrowserslistError('Custom usage statistics was not provided')\n      }\n      usage = context.customUsage\n    } else {\n      var place\n      if (node.place.length === 2) {\n        place = node.place.toUpperCase()\n      } else {\n        place = node.place.toLowerCase()\n      }\n      env.loadCountry(browserslist.usage, place, browserslist.data)\n      usage = browserslist.usage[place]\n    }\n  }\n  var versions = Object.keys(usage).sort(function (a, b) {\n    return usage[b] - usage[a]\n  })\n  var coveraged = 0\n  var result = []\n  var version\n  for (var i = 0; i < versions.length; i++) {\n    version = versions[i]\n    if (usage[version] === 0) break\n    coveraged += usage[version]\n    result.push(version)\n    if (coveraged >= coverage) break\n  }\n  return result\n}\n\nvar QUERIES = {\n  last_major_versions: {\n    matches: ['versions'],\n    regexp: /^last\\s+(\\d+)\\s+major\\s+versions?$/i,\n    select: function (context, node) {\n      return Object.keys(agents).reduce(function (selected, name) {\n        var data = byName(name, context)\n        if (!data) return selected\n        var list = getMajorVersions(data.released, node.versions)\n        list = list.map(nameMapper(data.name))\n        list = filterJumps(list, data.name, node.versions, context)\n        return selected.concat(list)\n      }, [])\n    }\n  },\n  last_versions: {\n    matches: ['versions'],\n    regexp: /^last\\s+(\\d+)\\s+versions?$/i,\n    select: function (context, node) {\n      return Object.keys(agents).reduce(function (selected, name) {\n        var data = byName(name, context)\n        if (!data) return selected\n        var list = data.released.slice(-node.versions)\n        list = list.map(nameMapper(data.name))\n        list = filterJumps(list, data.name, node.versions, context)\n        return selected.concat(list)\n      }, [])\n    }\n  },\n  last_electron_major_versions: {\n    matches: ['versions'],\n    regexp: /^last\\s+(\\d+)\\s+electron\\s+major\\s+versions?$/i,\n    select: function (context, node) {\n      var validVersions = getMajorVersions(Object.keys(e2c), node.versions)\n      return validVersions.map(function (i) {\n        return 'chrome ' + e2c[i]\n      })\n    }\n  },\n  last_node_major_versions: {\n    matches: ['versions'],\n    regexp: /^last\\s+(\\d+)\\s+node\\s+major\\s+versions?$/i,\n    select: function (context, node) {\n      return getMajorVersions(browserslist.nodeVersions, node.versions).map(\n        function (version) {\n          return 'node ' + version\n        }\n      )\n    }\n  },\n  last_browser_major_versions: {\n    matches: ['versions', 'browser'],\n    regexp: /^last\\s+(\\d+)\\s+(\\w+)\\s+major\\s+versions?$/i,\n    select: function (context, node) {\n      var data = checkName(node.browser, context)\n      var validVersions = getMajorVersions(data.released, node.versions)\n      var list = validVersions.map(nameMapper(data.name))\n      list = filterJumps(list, data.name, node.versions, context)\n      return list\n    }\n  },\n  last_electron_versions: {\n    matches: ['versions'],\n    regexp: /^last\\s+(\\d+)\\s+electron\\s+versions?$/i,\n    select: function (context, node) {\n      return Object.keys(e2c)\n        .slice(-node.versions)\n        .map(function (i) {\n          return 'chrome ' + e2c[i]\n        })\n    }\n  },\n  last_node_versions: {\n    matches: ['versions'],\n    regexp: /^last\\s+(\\d+)\\s+node\\s+versions?$/i,\n    select: function (context, node) {\n      return browserslist.nodeVersions\n        .slice(-node.versions)\n        .map(function (version) {\n          return 'node ' + version\n        })\n    }\n  },\n  last_browser_versions: {\n    matches: ['versions', 'browser'],\n    regexp: /^last\\s+(\\d+)\\s+(\\w+)\\s+versions?$/i,\n    select: function (context, node) {\n      var data = checkName(node.browser, context)\n      var list = data.released.slice(-node.versions).map(nameMapper(data.name))\n      list = filterJumps(list, data.name, node.versions, context)\n      return list\n    }\n  },\n  unreleased_versions: {\n    matches: [],\n    regexp: /^unreleased\\s+versions$/i,\n    select: function (context) {\n      return Object.keys(agents).reduce(function (selected, name) {\n        var data = byName(name, context)\n        if (!data) return selected\n        var list = data.versions.filter(function (v) {\n          return data.released.indexOf(v) === -1\n        })\n        list = list.map(nameMapper(data.name))\n        return selected.concat(list)\n      }, [])\n    }\n  },\n  unreleased_electron_versions: {\n    matches: [],\n    regexp: /^unreleased\\s+electron\\s+versions?$/i,\n    select: function () {\n      return []\n    }\n  },\n  unreleased_browser_versions: {\n    matches: ['browser'],\n    regexp: /^unreleased\\s+(\\w+)\\s+versions?$/i,\n    select: function (context, node) {\n      var data = checkName(node.browser, context)\n      return data.versions\n        .filter(function (v) {\n          return data.released.indexOf(v) === -1\n        })\n        .map(nameMapper(data.name))\n    }\n  },\n  last_years: {\n    matches: ['years'],\n    regexp: /^last\\s+(\\d*.?\\d+)\\s+years?$/i,\n    select: function (context, node) {\n      return filterByYear(Date.now() - YEAR * node.years, context)\n    }\n  },\n  since_y: {\n    matches: ['year'],\n    regexp: /^since (\\d+)$/i,\n    select: sinceQuery\n  },\n  since_y_m: {\n    matches: ['year', 'month'],\n    regexp: /^since (\\d+)-(\\d+)$/i,\n    select: sinceQuery\n  },\n  since_y_m_d: {\n    matches: ['year', 'month', 'day'],\n    regexp: /^since (\\d+)-(\\d+)-(\\d+)$/i,\n    select: sinceQuery\n  },\n  popularity: {\n    matches: ['sign', 'popularity'],\n    regexp: /^(>=?|<=?)\\s*(\\d+|\\d+\\.\\d+|\\.\\d+)%$/,\n    select: function (context, node) {\n      var popularity = parseFloat(node.popularity)\n      var usage = browserslist.usage.global\n      return Object.keys(usage).reduce(function (result, version) {\n        if (node.sign === '>') {\n          if (usage[version] > popularity) {\n            result.push(version)\n          }\n        } else if (node.sign === '<') {\n          if (usage[version] < popularity) {\n            result.push(version)\n          }\n        } else if (node.sign === '<=') {\n          if (usage[version] <= popularity) {\n            result.push(version)\n          }\n        } else if (usage[version] >= popularity) {\n          result.push(version)\n        }\n        return result\n      }, [])\n    }\n  },\n  popularity_in_my_stats: {\n    matches: ['sign', 'popularity'],\n    regexp: /^(>=?|<=?)\\s*(\\d+|\\d+\\.\\d+|\\.\\d+)%\\s+in\\s+my\\s+stats$/,\n    select: function (context, node) {\n      var popularity = parseFloat(node.popularity)\n      if (!context.customUsage) {\n        throw new BrowserslistError('Custom usage statistics was not provided')\n      }\n      var usage = context.customUsage\n      return Object.keys(usage).reduce(function (result, version) {\n        var percentage = usage[version]\n        if (percentage == null) {\n          return result\n        }\n\n        if (node.sign === '>') {\n          if (percentage > popularity) {\n            result.push(version)\n          }\n        } else if (node.sign === '<') {\n          if (percentage < popularity) {\n            result.push(version)\n          }\n        } else if (node.sign === '<=') {\n          if (percentage <= popularity) {\n            result.push(version)\n          }\n        } else if (percentage >= popularity) {\n          result.push(version)\n        }\n        return result\n      }, [])\n    }\n  },\n  popularity_in_config_stats: {\n    matches: ['sign', 'popularity', 'config'],\n    regexp: /^(>=?|<=?)\\s*(\\d+|\\d+\\.\\d+|\\.\\d+)%\\s+in\\s+(\\S+)\\s+stats$/,\n    select: function (context, node) {\n      var popularity = parseFloat(node.popularity)\n      var stats = env.loadStat(context, node.config, browserslist.data)\n      if (stats) {\n        context.customUsage = {}\n        for (var browser in stats) {\n          fillUsage(context.customUsage, browser, stats[browser])\n        }\n      }\n      if (!context.customUsage) {\n        throw new BrowserslistError('Custom usage statistics was not provided')\n      }\n      var usage = context.customUsage\n      return Object.keys(usage).reduce(function (result, version) {\n        var percentage = usage[version]\n        if (percentage == null) {\n          return result\n        }\n\n        if (node.sign === '>') {\n          if (percentage > popularity) {\n            result.push(version)\n          }\n        } else if (node.sign === '<') {\n          if (percentage < popularity) {\n            result.push(version)\n          }\n        } else if (node.sign === '<=') {\n          if (percentage <= popularity) {\n            result.push(version)\n          }\n        } else if (percentage >= popularity) {\n          result.push(version)\n        }\n        return result\n      }, [])\n    }\n  },\n  popularity_in_place: {\n    matches: ['sign', 'popularity', 'place'],\n    regexp: /^(>=?|<=?)\\s*(\\d+|\\d+\\.\\d+|\\.\\d+)%\\s+in\\s+((alt-)?\\w\\w)$/,\n    select: function (context, node) {\n      var popularity = parseFloat(node.popularity)\n      var place = node.place\n      if (place.length === 2) {\n        place = place.toUpperCase()\n      } else {\n        place = place.toLowerCase()\n      }\n      env.loadCountry(browserslist.usage, place, browserslist.data)\n      var usage = browserslist.usage[place]\n      return Object.keys(usage).reduce(function (result, version) {\n        var percentage = usage[version]\n        if (percentage == null) {\n          return result\n        }\n\n        if (node.sign === '>') {\n          if (percentage > popularity) {\n            result.push(version)\n          }\n        } else if (node.sign === '<') {\n          if (percentage < popularity) {\n            result.push(version)\n          }\n        } else if (node.sign === '<=') {\n          if (percentage <= popularity) {\n            result.push(version)\n          }\n        } else if (percentage >= popularity) {\n          result.push(version)\n        }\n        return result\n      }, [])\n    }\n  },\n  cover: {\n    matches: ['coverage'],\n    regexp: /^cover\\s+(\\d+|\\d+\\.\\d+|\\.\\d+)%$/i,\n    select: coverQuery\n  },\n  cover_in: {\n    matches: ['coverage', 'place'],\n    regexp: /^cover\\s+(\\d+|\\d+\\.\\d+|\\.\\d+)%\\s+in\\s+(my\\s+stats|(alt-)?\\w\\w)$/i,\n    select: coverQuery\n  },\n  supports: {\n    matches: ['supportType', 'feature'],\n    regexp: /^(?:(fully|partially)\\s+)?supports\\s+([\\w-]+)$/,\n    select: function (context, node) {\n      env.loadFeature(browserslist.cache, node.feature)\n      var withPartial = node.supportType !== 'fully'\n      var features = browserslist.cache[node.feature]\n      var result = []\n      for (var name in features) {\n        var data = byName(name, context)\n        // Only check desktop when latest released mobile has support\n        var checkDesktop =\n          context.mobileToDesktop &&\n          name in browserslist.desktopNames &&\n          isSupported(features[name][data.released.slice(-1)[0]], withPartial)\n        data.versions.forEach(function (version) {\n          var flags = features[name][version]\n          if (flags === undefined && checkDesktop) {\n            flags = features[browserslist.desktopNames[name]][version]\n          }\n          if (isSupported(flags, withPartial)) {\n            result.push(name + ' ' + version)\n          }\n        })\n      }\n      return result\n    }\n  },\n  electron_range: {\n    matches: ['from', 'to'],\n    regexp: /^electron\\s+([\\d.]+)\\s*-\\s*([\\d.]+)$/i,\n    select: function (context, node) {\n      var fromToUse = normalizeElectron(node.from)\n      var toToUse = normalizeElectron(node.to)\n      var from = parseFloat(node.from)\n      var to = parseFloat(node.to)\n      if (!e2c[fromToUse]) {\n        throw new BrowserslistError('Unknown version ' + from + ' of electron')\n      }\n      if (!e2c[toToUse]) {\n        throw new BrowserslistError('Unknown version ' + to + ' of electron')\n      }\n      return Object.keys(e2c)\n        .filter(function (i) {\n          var parsed = parseFloat(i)\n          return parsed >= from && parsed <= to\n        })\n        .map(function (i) {\n          return 'chrome ' + e2c[i]\n        })\n    }\n  },\n  node_range: {\n    matches: ['from', 'to'],\n    regexp: /^node\\s+([\\d.]+)\\s*-\\s*([\\d.]+)$/i,\n    select: function (context, node) {\n      return browserslist.nodeVersions\n        .filter(semverFilterLoose('>=', node.from))\n        .filter(semverFilterLoose('<=', node.to))\n        .map(function (v) {\n          return 'node ' + v\n        })\n    }\n  },\n  browser_range: {\n    matches: ['browser', 'from', 'to'],\n    regexp: /^(\\w+)\\s+([\\d.]+)\\s*-\\s*([\\d.]+)$/i,\n    select: function (context, node) {\n      var data = checkName(node.browser, context)\n      var from = parseFloat(normalizeVersion(data, node.from) || node.from)\n      var to = parseFloat(normalizeVersion(data, node.to) || node.to)\n      function filter(v) {\n        var parsed = parseFloat(v)\n        return parsed >= from && parsed <= to\n      }\n      return data.released.filter(filter).map(nameMapper(data.name))\n    }\n  },\n  electron_ray: {\n    matches: ['sign', 'version'],\n    regexp: /^electron\\s*(>=?|<=?)\\s*([\\d.]+)$/i,\n    select: function (context, node) {\n      var versionToUse = normalizeElectron(node.version)\n      return Object.keys(e2c)\n        .filter(generateFilter(node.sign, versionToUse))\n        .map(function (i) {\n          return 'chrome ' + e2c[i]\n        })\n    }\n  },\n  node_ray: {\n    matches: ['sign', 'version'],\n    regexp: /^node\\s*(>=?|<=?)\\s*([\\d.]+)$/i,\n    select: function (context, node) {\n      return browserslist.nodeVersions\n        .filter(generateSemverFilter(node.sign, node.version))\n        .map(function (v) {\n          return 'node ' + v\n        })\n    }\n  },\n  browser_ray: {\n    matches: ['browser', 'sign', 'version'],\n    regexp: /^(\\w+)\\s*(>=?|<=?)\\s*([\\d.]+)$/,\n    select: function (context, node) {\n      var version = node.version\n      var data = checkName(node.browser, context)\n      var alias = browserslist.versionAliases[data.name][version]\n      if (alias) version = alias\n      return data.released\n        .filter(generateFilter(node.sign, version))\n        .map(function (v) {\n          return data.name + ' ' + v\n        })\n    }\n  },\n  firefox_esr: {\n    matches: [],\n    regexp: /^(firefox|ff|fx)\\s+esr$/i,\n    select: function () {\n      return ['firefox 115']\n    }\n  },\n  opera_mini_all: {\n    matches: [],\n    regexp: /(operamini|op_mini)\\s+all/i,\n    select: function () {\n      return ['op_mini all']\n    }\n  },\n  electron_version: {\n    matches: ['version'],\n    regexp: /^electron\\s+([\\d.]+)$/i,\n    select: function (context, node) {\n      var versionToUse = normalizeElectron(node.version)\n      var chrome = e2c[versionToUse]\n      if (!chrome) {\n        throw new BrowserslistError(\n          'Unknown version ' + node.version + ' of electron'\n        )\n      }\n      return ['chrome ' + chrome]\n    }\n  },\n  node_major_version: {\n    matches: ['version'],\n    regexp: /^node\\s+(\\d+)$/i,\n    select: nodeQuery\n  },\n  node_minor_version: {\n    matches: ['version'],\n    regexp: /^node\\s+(\\d+\\.\\d+)$/i,\n    select: nodeQuery\n  },\n  node_patch_version: {\n    matches: ['version'],\n    regexp: /^node\\s+(\\d+\\.\\d+\\.\\d+)$/i,\n    select: nodeQuery\n  },\n  current_node: {\n    matches: [],\n    regexp: /^current\\s+node$/i,\n    select: function (context) {\n      return [env.currentNode(resolve, context)]\n    }\n  },\n  maintained_node: {\n    matches: [],\n    regexp: /^maintained\\s+node\\s+versions$/i,\n    select: function (context) {\n      var now = Date.now()\n      var queries = Object.keys(jsEOL)\n        .filter(function (key) {\n          return (\n            now < Date.parse(jsEOL[key].end) &&\n            now > Date.parse(jsEOL[key].start) &&\n            isEolReleased(key)\n          )\n        })\n        .map(function (key) {\n          return 'node ' + key.slice(1)\n        })\n      return resolve(queries, context)\n    }\n  },\n  phantomjs_1_9: {\n    matches: [],\n    regexp: /^phantomjs\\s+1.9$/i,\n    select: function () {\n      return ['safari 5']\n    }\n  },\n  phantomjs_2_1: {\n    matches: [],\n    regexp: /^phantomjs\\s+2.1$/i,\n    select: function () {\n      return ['safari 6']\n    }\n  },\n  browser_version: {\n    matches: ['browser', 'version'],\n    regexp: /^(\\w+)\\s+(tp|[\\d.]+)$/i,\n    select: function (context, node) {\n      var version = node.version\n      if (/^tp$/i.test(version)) version = 'TP'\n      var data = checkName(node.browser, context)\n      var alias = normalizeVersion(data, version)\n      if (alias) {\n        version = alias\n      } else {\n        if (version.indexOf('.') === -1) {\n          alias = version + '.0'\n        } else {\n          alias = version.replace(/\\.0$/, '')\n        }\n        alias = normalizeVersion(data, alias)\n        if (alias) {\n          version = alias\n        } else if (context.ignoreUnknownVersions) {\n          return []\n        } else {\n          throw new BrowserslistError(\n            'Unknown version ' + version + ' of ' + node.browser\n          )\n        }\n      }\n      return [data.name + ' ' + version]\n    }\n  },\n  browserslist_config: {\n    matches: [],\n    regexp: /^browserslist config$/i,\n    select: function (context) {\n      return browserslist(undefined, context)\n    }\n  },\n  extends: {\n    matches: ['config'],\n    regexp: /^extends (.+)$/i,\n    select: function (context, node) {\n      return resolve(env.loadQueries(context, node.config), context)\n    }\n  },\n  defaults: {\n    matches: [],\n    regexp: /^defaults$/i,\n    select: function (context) {\n      return resolve(browserslist.defaults, context)\n    }\n  },\n  dead: {\n    matches: [],\n    regexp: /^dead$/i,\n    select: function (context) {\n      var dead = [\n        'Baidu >= 0',\n        'ie <= 11',\n        'ie_mob <= 11',\n        'bb <= 10',\n        'op_mob <= 12.1',\n        'samsung 4'\n      ]\n      return resolve(dead, context)\n    }\n  },\n  unknown: {\n    matches: [],\n    regexp: /^(\\w+)$/i,\n    select: function (context, node) {\n      if (byName(node.query, context)) {\n        throw new BrowserslistError(\n          'Specify versions in Browserslist query for browser ' + node.query\n        )\n      } else {\n        throw unknownQuery(node.query)\n      }\n    }\n  }\n}\n\n// Get and convert Can I Use data\n\n;(function () {\n  for (var name in agents) {\n    var browser = agents[name]\n    browserslist.data[name] = {\n      name: name,\n      versions: normalize(agents[name].versions),\n      released: normalize(agents[name].versions.slice(0, -3)),\n      releaseDate: agents[name].release_date\n    }\n    fillUsage(browserslist.usage.global, name, browser.usage_global)\n\n    browserslist.versionAliases[name] = {}\n    for (var i = 0; i < browser.versions.length; i++) {\n      var full = browser.versions[i]\n      if (!full) continue\n\n      if (full.indexOf('-') !== -1) {\n        var interval = full.split('-')\n        for (var j = 0; j < interval.length; j++) {\n          browserslist.versionAliases[name][interval[j]] = full\n        }\n      }\n    }\n  }\n\n  browserslist.nodeVersions = jsReleases.map(function (release) {\n    return release.version\n  })\n})()\n\nmodule.exports = browserslist\n","var AND_REGEXP = /^\\s+and\\s+(.*)/i\nvar OR_REGEXP = /^(?:,\\s*|\\s+or\\s+)(.*)/i\n\nfunction flatten(array) {\n  if (!Array.isArray(array)) return [array]\n  return array.reduce(function (a, b) {\n    return a.concat(flatten(b))\n  }, [])\n}\n\nfunction find(string, predicate) {\n  for (var n = 1, max = string.length; n <= max; n++) {\n    var parsed = string.substr(-n, n)\n    if (predicate(parsed, n, max)) {\n      return string.slice(0, -n)\n    }\n  }\n  return ''\n}\n\nfunction matchQuery(all, query) {\n  var node = { query: query }\n  if (query.indexOf('not ') === 0) {\n    node.not = true\n    query = query.slice(4)\n  }\n\n  for (var name in all) {\n    var type = all[name]\n    var match = query.match(type.regexp)\n    if (match) {\n      node.type = name\n      for (var i = 0; i < type.matches.length; i++) {\n        node[type.matches[i]] = match[i + 1]\n      }\n      return node\n    }\n  }\n\n  node.type = 'unknown'\n  return node\n}\n\nfunction matchBlock(all, string, qs) {\n  var node\n  return find(string, function (parsed, n, max) {\n    if (AND_REGEXP.test(parsed)) {\n      node = matchQuery(all, parsed.match(AND_REGEXP)[1])\n      node.compose = 'and'\n      qs.unshift(node)\n      return true\n    } else if (OR_REGEXP.test(parsed)) {\n      node = matchQuery(all, parsed.match(OR_REGEXP)[1])\n      node.compose = 'or'\n      qs.unshift(node)\n      return true\n    } else if (n === max) {\n      node = matchQuery(all, parsed.trim())\n      node.compose = 'or'\n      qs.unshift(node)\n      return true\n    }\n    return false\n  })\n}\n\nmodule.exports = function parse(all, queries) {\n  if (!Array.isArray(queries)) queries = [queries]\n  return flatten(\n    queries.map(function (block) {\n      var qs = []\n      do {\n        block = matchBlock(all, block, qs)\n      } while (block)\n      return qs\n    })\n  )\n}\n","module.exports={A:{A:{J:0,D:0,E:0.0130265,F:0.0390796,A:0,B:0.442902,TC:0},B:\"ms\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"TC\",\"J\",\"D\",\"E\",\"F\",\"A\",\"B\",\"\",\"\",\"\"],E:\"IE\",F:{TC:962323200,J:998870400,D:1161129600,E:1237420800,F:1300060800,A:1346716800,B:1381968000}},B:{A:{\"0\":0.007984,\"1\":0.015968,\"2\":0.015968,\"3\":0.011976,\"4\":0.015968,\"5\":0.015968,\"6\":0.035928,\"7\":0.267464,\"8\":3.72853,C:0,K:0,L:0,G:0.003992,M:0,N:0.003992,O:0.011976,P:0,Q:0,R:0,S:0,T:0,U:0,V:0,W:0.35928,X:0,Y:0,Z:0,a:0,b:0.011976,c:0,d:0,e:0,f:0,g:0,h:0,i:0.015968,j:0,k:0,l:0,m:0,n:0,o:0,p:0.003992,v:0.007984,w:0.011976,x:0.067864,y:0.007984,z:0.007984,H:0.522952},B:\"webkit\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"C\",\"K\",\"L\",\"G\",\"M\",\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"v\",\"w\",\"x\",\"y\",\"z\",\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"H\",\"\",\"\",\"\"],E:\"Edge\",F:{\"0\":1680825600,\"1\":1683158400,\"2\":1685664000,\"3\":1689897600,\"4\":1692576000,\"5\":1694649600,\"6\":1697155200,\"7\":1698969600,\"8\":1701993600,C:1438128000,K:1447286400,L:1470096000,G:1491868800,M:1508198400,N:1525046400,O:1542067200,P:1579046400,Q:1581033600,R:1586736000,S:1590019200,T:1594857600,U:1598486400,V:1602201600,W:1605830400,X:1611360000,Y:1614816000,Z:1618358400,a:1622073600,b:1626912000,c:1630627200,d:1632441600,e:1634774400,f:1637539200,g:1641427200,h:1643932800,i:1646265600,j:1649635200,k:1651190400,l:1653955200,m:1655942400,n:1659657600,o:1661990400,p:1664755200,v:1666915200,w:1670198400,x:1673481600,y:1675900800,z:1678665600,H:1706227200},D:{C:\"ms\",K:\"ms\",L:\"ms\",G:\"ms\",M:\"ms\",N:\"ms\",O:\"ms\"}},C:{A:{\"0\":0.003992,\"1\":0.007984,\"2\":0.011976,\"3\":0.467064,\"4\":0.003992,\"5\":0.007984,\"6\":0.087824,\"7\":0.227544,\"8\":0.231536,\"9\":0,UC:0,\"7B\":0,I:0.003992,J:0,D:0,E:0,F:0,A:0,B:0.027944,C:0.03992,K:0,L:0,G:0,M:0,N:0,O:0,AB:0,q:0,r:0,s:0,t:0,BB:0,CB:0,DB:0,EB:0,FB:0,GB:0,HB:0,IB:0,JB:0,KB:0,LB:0,MB:0,NB:0,OB:0,PB:0,QB:0,RB:0,SB:0,TB:0,UB:0.007984,VB:0.007984,WB:0.003992,XB:0,YB:0,ZB:0,aB:0,bB:0.003992,cB:0,dB:0.055888,eB:0.007984,fB:0.007984,gB:0.007984,hB:0.01996,iB:0,jB:0,\"8B\":0.003992,kB:0,\"9B\":0,lB:0,mB:0,nB:0,oB:0,pB:0,qB:0,rB:0,sB:0,tB:0,uB:0,vB:0.003992,u:0,wB:0,xB:0,yB:0,zB:0,\"0B\":0.015968,P:0,Q:0,R:0,AC:0,S:0,T:0,U:0,V:0,W:0,X:0.007984,Y:0,Z:0,a:0.011976,b:0,c:0,d:0.007984,e:0,f:0,g:0,h:0,i:0,j:0,k:0.011976,l:0.027944,m:0.031936,n:0.003992,o:0.003992,p:0,v:0.003992,w:0.007984,x:0.007984,y:0.003992,z:0.003992,H:1.2455,\"1B\":0.275448,BC:0,CC:0,DC:0,VC:0,WC:0,XC:0},B:\"moz\",C:[\"UC\",\"7B\",\"WC\",\"XC\",\"I\",\"9\",\"J\",\"D\",\"E\",\"F\",\"A\",\"B\",\"C\",\"K\",\"L\",\"G\",\"M\",\"N\",\"O\",\"AB\",\"q\",\"r\",\"s\",\"t\",\"BB\",\"CB\",\"DB\",\"EB\",\"FB\",\"GB\",\"HB\",\"IB\",\"JB\",\"KB\",\"LB\",\"MB\",\"NB\",\"OB\",\"PB\",\"QB\",\"RB\",\"SB\",\"TB\",\"UB\",\"VB\",\"WB\",\"XB\",\"YB\",\"ZB\",\"aB\",\"bB\",\"cB\",\"dB\",\"eB\",\"fB\",\"gB\",\"hB\",\"iB\",\"jB\",\"8B\",\"kB\",\"9B\",\"lB\",\"mB\",\"nB\",\"oB\",\"pB\",\"qB\",\"rB\",\"sB\",\"tB\",\"uB\",\"vB\",\"u\",\"wB\",\"xB\",\"yB\",\"zB\",\"0B\",\"P\",\"Q\",\"R\",\"AC\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"v\",\"w\",\"x\",\"y\",\"z\",\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"H\",\"1B\",\"BC\",\"CC\",\"DC\",\"VC\"],E:\"Firefox\",F:{\"0\":1681171200,\"1\":1683590400,\"2\":1686009600,\"3\":1688428800,\"4\":1690848000,\"5\":1693267200,\"6\":1695686400,\"7\":1698105600,\"8\":1700524800,\"9\":1308614400,UC:1161648000,\"7B\":1213660800,WC:1246320000,XC:1264032000,I:1300752000,J:1313452800,D:1317081600,E:1317081600,F:1320710400,A:1324339200,B:1327968000,C:1331596800,K:1335225600,L:1338854400,G:1342483200,M:1346112000,N:1349740800,O:1353628800,AB:1357603200,q:1361232000,r:1364860800,s:1368489600,t:1372118400,BB:1375747200,CB:1379376000,DB:1386633600,EB:1391472000,FB:1395100800,GB:1398729600,HB:1402358400,IB:1405987200,JB:1409616000,KB:1413244800,LB:1417392000,MB:1421107200,NB:1424736000,OB:1428278400,PB:1431475200,QB:1435881600,RB:1439251200,SB:1442880000,TB:1446508800,UB:1450137600,VB:1453852800,WB:1457395200,XB:1461628800,YB:1465257600,ZB:1470096000,aB:1474329600,bB:1479168000,cB:1485216000,dB:1488844800,eB:1492560000,fB:1497312000,gB:1502150400,hB:1506556800,iB:1510617600,jB:1516665600,\"8B\":1520985600,kB:1525824000,\"9B\":1529971200,lB:1536105600,mB:1540252800,nB:1544486400,oB:1548720000,pB:1552953600,qB:1558396800,rB:1562630400,sB:1567468800,tB:1571788800,uB:1575331200,vB:1578355200,u:1581379200,wB:1583798400,xB:1586304000,yB:1588636800,zB:1591056000,\"0B\":1593475200,P:1595894400,Q:1598313600,R:1600732800,AC:1603152000,S:1605571200,T:1607990400,U:1611619200,V:1614038400,W:1616457600,X:1618790400,Y:1622505600,Z:1626134400,a:1628553600,b:1630972800,c:1633392000,d:1635811200,e:1638835200,f:1641859200,g:1644364800,h:1646697600,i:1649116800,j:1651536000,k:1653955200,l:1656374400,m:1658793600,n:1661212800,o:1663632000,p:1666051200,v:1668470400,w:1670889600,x:1673913600,y:1676332800,z:1678752000,H:1702944000,\"1B\":1705968000,BC:1708387200,CC:null,DC:null,VC:null}},D:{A:{\"0\":0.075848,\"1\":0.15968,\"2\":0.115768,\"3\":0.07984,\"4\":0.263472,\"5\":0.195608,\"6\":0.467064,\"7\":2.4471,\"8\":15.8562,\"9\":0,I:0,J:0,D:0,E:0,F:0,A:0,B:0,C:0,K:0,L:0,G:0,M:0,N:0,O:0,AB:0,q:0,r:0,s:0,t:0,BB:0,CB:0,DB:0,EB:0,FB:0,GB:0,HB:0,IB:0,JB:0,KB:0,LB:0.003992,MB:0,NB:0,OB:0,PB:0.015968,QB:0,RB:0,SB:0,TB:0,UB:0,VB:0,WB:0.007984,XB:0,YB:0.003992,ZB:0.031936,aB:0.027944,bB:0.007984,cB:0,dB:0,eB:0.007984,fB:0.007984,gB:0.007984,hB:0.015968,iB:0.007984,jB:0,\"8B\":0,kB:0.015968,\"9B\":0.003992,lB:0,mB:0.003992,nB:0,oB:0.003992,pB:0.027944,qB:0.007984,rB:0,sB:0.035928,tB:0.023952,uB:0.007984,vB:0.003992,u:0.011976,wB:0.007984,xB:0.007984,yB:0.007984,zB:0.011976,\"0B\":0.015968,P:0.11976,Q:0.015968,R:0.031936,S:0.043912,T:0.007984,U:0.023952,V:0.03992,W:0.083832,X:0.01996,Y:0.015968,Z:0.01996,a:0.05988,b:0.027944,c:0.051896,d:0.047904,e:0.011976,f:0.015968,g:0.015968,h:0.067864,i:0.035928,j:0.031936,k:0.043912,l:0.031936,m:0.143712,n:0.063872,o:0.03992,p:0.051896,v:0.043912,w:0.075848,x:1.6447,y:0.055888,z:0.071856,H:1.11776,\"1B\":0.015968,BC:0,CC:0,DC:0},B:\"webkit\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"I\",\"9\",\"J\",\"D\",\"E\",\"F\",\"A\",\"B\",\"C\",\"K\",\"L\",\"G\",\"M\",\"N\",\"O\",\"AB\",\"q\",\"r\",\"s\",\"t\",\"BB\",\"CB\",\"DB\",\"EB\",\"FB\",\"GB\",\"HB\",\"IB\",\"JB\",\"KB\",\"LB\",\"MB\",\"NB\",\"OB\",\"PB\",\"QB\",\"RB\",\"SB\",\"TB\",\"UB\",\"VB\",\"WB\",\"XB\",\"YB\",\"ZB\",\"aB\",\"bB\",\"cB\",\"dB\",\"eB\",\"fB\",\"gB\",\"hB\",\"iB\",\"jB\",\"8B\",\"kB\",\"9B\",\"lB\",\"mB\",\"nB\",\"oB\",\"pB\",\"qB\",\"rB\",\"sB\",\"tB\",\"uB\",\"vB\",\"u\",\"wB\",\"xB\",\"yB\",\"zB\",\"0B\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"v\",\"w\",\"x\",\"y\",\"z\",\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"H\",\"1B\",\"BC\",\"CC\",\"DC\"],E:\"Chrome\",F:{\"0\":1680566400,\"1\":1682985600,\"2\":1685404800,\"3\":1689724800,\"4\":1692057600,\"5\":1694476800,\"6\":1696896000,\"7\":1698710400,\"8\":1701993600,\"9\":1274745600,I:1264377600,J:1283385600,D:1287619200,E:1291248000,F:1296777600,A:1299542400,B:1303862400,C:1307404800,K:1312243200,L:1316131200,G:1316131200,M:1319500800,N:1323734400,O:1328659200,AB:1332892800,q:1337040000,r:1340668800,s:1343692800,t:1348531200,BB:1352246400,CB:1357862400,DB:1361404800,EB:1364428800,FB:1369094400,GB:1374105600,HB:1376956800,IB:1384214400,JB:1389657600,KB:1392940800,LB:1397001600,MB:1400544000,NB:1405468800,OB:1409011200,PB:1412640000,QB:1416268800,RB:1421798400,SB:1425513600,TB:1429401600,UB:1432080000,VB:1437523200,WB:1441152000,XB:1444780800,YB:1449014400,ZB:1453248000,aB:1456963200,bB:1460592000,cB:1464134400,dB:1469059200,eB:1472601600,fB:1476230400,gB:1480550400,hB:1485302400,iB:1489017600,jB:1492560000,\"8B\":1496707200,kB:1500940800,\"9B\":1504569600,lB:1508198400,mB:1512518400,nB:1516752000,oB:1520294400,pB:1523923200,qB:1527552000,rB:1532390400,sB:1536019200,tB:1539648000,uB:1543968000,vB:1548720000,u:1552348800,wB:1555977600,xB:1559606400,yB:1564444800,zB:1568073600,\"0B\":1571702400,P:1575936000,Q:1580860800,R:1586304000,S:1589846400,T:1594684800,U:1598313600,V:1601942400,W:1605571200,X:1611014400,Y:1614556800,Z:1618272000,a:1621987200,b:1626739200,c:1630368000,d:1632268800,e:1634601600,f:1637020800,g:1641340800,h:1643673600,i:1646092800,j:1648512000,k:1650931200,l:1653350400,m:1655769600,n:1659398400,o:1661817600,p:1664236800,v:1666656000,w:1669680000,x:1673308800,y:1675728000,z:1678147200,H:1705968000,\"1B\":1708387200,BC:null,CC:null,DC:null}},E:{A:{\"9\":0,I:0,J:0,D:0,E:0,F:0.003992,A:0,B:0,C:0,K:0.007984,L:0.03992,G:0.007984,YC:0,EC:0,ZC:0.003992,aC:0,bC:0,cC:0.011976,FC:0,\"2B\":0.015968,\"3B\":0.015968,GC:0.071856,dC:0.111776,eC:0.031936,HC:0.011976,IC:0.031936,\"4B\":0.043912,fC:0.2994,\"5B\":0.031936,JC:0.071856,KC:0.05988,LC:0.143712,MC:0.063872,NC:0.103792,gC:0.526944,\"6B\":0.11976,OC:0.694608,PC:0.850296,QC:0.055888,hC:0,iC:0},B:\"webkit\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"YC\",\"EC\",\"I\",\"9\",\"ZC\",\"J\",\"aC\",\"D\",\"bC\",\"E\",\"F\",\"cC\",\"A\",\"FC\",\"B\",\"2B\",\"C\",\"3B\",\"K\",\"GC\",\"L\",\"dC\",\"G\",\"eC\",\"HC\",\"IC\",\"4B\",\"fC\",\"5B\",\"JC\",\"KC\",\"LC\",\"MC\",\"NC\",\"gC\",\"6B\",\"OC\",\"PC\",\"QC\",\"hC\",\"iC\",\"\"],E:\"Safari\",F:{\"9\":1275868800,YC:1205798400,EC:1226534400,I:1244419200,ZC:1311120000,J:1343174400,aC:1382400000,D:1382400000,bC:1410998400,E:1413417600,F:1443657600,cC:1458518400,A:1474329600,FC:1490572800,B:1505779200,\"2B\":1522281600,C:1537142400,\"3B\":1553472000,K:1568851200,GC:1585008000,L:1600214400,dC:1619395200,G:1632096000,eC:1635292800,HC:1639353600,IC:1647216000,\"4B\":1652745600,fC:1658275200,\"5B\":1662940800,JC:1666569600,KC:1670889600,LC:1674432000,MC:1679875200,NC:1684368000,gC:1690156800,\"6B\":1695686400,OC:1698192000,PC:1702252800,QC:1705881600,hC:null,iC:null}},F:{A:{F:0,B:0,C:0,G:0,M:0,N:0,O:0,AB:0,q:0,r:0,s:0,t:0,BB:0,CB:0,DB:0,EB:0,FB:0.003992,GB:0,HB:0,IB:0,JB:0,KB:0,LB:0,MB:0,NB:0,OB:0,PB:0,QB:0,RB:0.003992,SB:0,TB:0,UB:0,VB:0,WB:0,XB:0.015968,YB:0,ZB:0,aB:0,bB:0,cB:0,dB:0,eB:0,fB:0,gB:0,hB:0,iB:0,jB:0,kB:0,lB:0,mB:0,nB:0,oB:0,pB:0,qB:0,rB:0,sB:0,tB:0,uB:0,vB:0,u:0,wB:0,xB:0,yB:0,zB:0,\"0B\":0,P:0,Q:0,R:0,AC:0,S:0,T:0,U:0,V:0,W:0,X:0,Y:0.003992,Z:0,a:0,b:0,c:0,d:0,e:0.043912,f:0,g:0,h:0,i:0,j:0,k:0,l:0.047904,m:0,n:0.007984,o:0.570856,p:0.483032,jC:0,kC:0,lC:0,mC:0,\"2B\":0,RC:0,nC:0,\"3B\":0},B:\"webkit\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"F\",\"jC\",\"kC\",\"lC\",\"mC\",\"B\",\"2B\",\"RC\",\"nC\",\"C\",\"3B\",\"G\",\"M\",\"N\",\"O\",\"AB\",\"q\",\"r\",\"s\",\"t\",\"BB\",\"CB\",\"DB\",\"EB\",\"FB\",\"GB\",\"HB\",\"IB\",\"JB\",\"KB\",\"LB\",\"MB\",\"NB\",\"OB\",\"PB\",\"QB\",\"RB\",\"SB\",\"TB\",\"UB\",\"VB\",\"WB\",\"XB\",\"YB\",\"ZB\",\"aB\",\"bB\",\"cB\",\"dB\",\"eB\",\"fB\",\"gB\",\"hB\",\"iB\",\"jB\",\"kB\",\"lB\",\"mB\",\"nB\",\"oB\",\"pB\",\"qB\",\"rB\",\"sB\",\"tB\",\"uB\",\"vB\",\"u\",\"wB\",\"xB\",\"yB\",\"zB\",\"0B\",\"P\",\"Q\",\"R\",\"AC\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"\",\"\",\"\"],E:\"Opera\",F:{F:1150761600,jC:1223424000,kC:1251763200,lC:1267488000,mC:1277942400,B:1292457600,\"2B\":1302566400,RC:1309219200,nC:1323129600,C:1323129600,\"3B\":1352073600,G:1372723200,M:1377561600,N:1381104000,O:1386288000,AB:1390867200,q:1393891200,r:1399334400,s:1401753600,t:1405987200,BB:1409616000,CB:1413331200,DB:1417132800,EB:1422316800,FB:1425945600,GB:1430179200,HB:1433808000,IB:1438646400,JB:1442448000,KB:1445904000,LB:1449100800,MB:1454371200,NB:1457308800,OB:1462320000,PB:1465344000,QB:1470096000,RB:1474329600,SB:1477267200,TB:1481587200,UB:1486425600,VB:1490054400,WB:1494374400,XB:1498003200,YB:1502236800,ZB:1506470400,aB:1510099200,bB:1515024000,cB:1517961600,dB:1521676800,eB:1525910400,fB:1530144000,gB:1534982400,hB:1537833600,iB:1543363200,jB:1548201600,kB:1554768000,lB:1561593600,mB:1566259200,nB:1570406400,oB:1573689600,pB:1578441600,qB:1583971200,rB:1587513600,sB:1592956800,tB:1595894400,uB:1600128000,vB:1603238400,u:1613520000,wB:1612224000,xB:1616544000,yB:1619568000,zB:1623715200,\"0B\":1627948800,P:1631577600,Q:1633392000,R:1635984000,AC:1638403200,S:1642550400,T:1644969600,U:1647993600,V:1650412800,W:1652745600,X:1654646400,Y:1657152000,Z:1660780800,a:1663113600,b:1668816000,c:1668643200,d:1671062400,e:1675209600,f:1677024000,g:1679529600,h:1681948800,i:1684195200,j:1687219200,k:1690329600,l:1692748800,m:1696204800,n:1699920000,o:1699920000,p:1702944000},D:{F:\"o\",B:\"o\",C:\"o\",jC:\"o\",kC:\"o\",lC:\"o\",mC:\"o\",\"2B\":\"o\",RC:\"o\",nC:\"o\",\"3B\":\"o\"}},G:{A:{E:0,EC:0,oC:0,SC:0.00300931,pC:0.00451396,qC:0.00752327,rC:0.0105326,sC:0.00150465,tC:0.00902792,uC:0.034607,vC:0.00300931,wC:0.0541675,xC:0.0210652,yC:0.0240745,zC:0.0135419,\"0C\":0.267828,\"1C\":0.00451396,\"2C\":0.0496536,\"3C\":0.0135419,\"4C\":0.0601861,\"5C\":0.105326,\"6C\":0.160998,\"7C\":0.0692141,HC:0.0797466,IC:0.0932885,\"4B\":0.123382,\"8C\":0.961474,\"5B\":0.288893,JC:0.615403,KC:0.279866,LC:0.52061,MC:0.115858,NC:0.246763,\"9C\":2.01925,\"6B\":0.335538,OC:3.46221,PC:4.67947,QC:0.300931},B:\"webkit\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"EC\",\"oC\",\"SC\",\"pC\",\"qC\",\"rC\",\"E\",\"sC\",\"tC\",\"uC\",\"vC\",\"wC\",\"xC\",\"yC\",\"zC\",\"0C\",\"1C\",\"2C\",\"3C\",\"4C\",\"5C\",\"6C\",\"7C\",\"HC\",\"IC\",\"4B\",\"8C\",\"5B\",\"JC\",\"KC\",\"LC\",\"MC\",\"NC\",\"9C\",\"6B\",\"OC\",\"PC\",\"QC\",\"\",\"\",\"\"],E:\"Safari on iOS\",F:{EC:1270252800,oC:1283904000,SC:1299628800,pC:1331078400,qC:1359331200,rC:1394409600,E:1410912000,sC:1413763200,tC:1442361600,uC:1458518400,vC:1473724800,wC:1490572800,xC:1505779200,yC:1522281600,zC:1537142400,\"0C\":1553472000,\"1C\":1568851200,\"2C\":1572220800,\"3C\":1580169600,\"4C\":1585008000,\"5C\":1600214400,\"6C\":1619395200,\"7C\":1632096000,HC:1639353600,IC:1647216000,\"4B\":1652659200,\"8C\":1658275200,\"5B\":1662940800,JC:1666569600,KC:1670889600,LC:1674432000,MC:1679875200,NC:1684368000,\"9C\":1690156800,\"6B\":1694995200,OC:1698192000,PC:1702252800,QC:1705881600}},H:{A:{AD:0.08},B:\"o\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"AD\",\"\",\"\",\"\"],E:\"Opera Mini\",F:{AD:1426464000}},I:{A:{\"7B\":0,I:0.0000588882,H:0.293145,BD:0,CD:0.0000294441,DD:0,ED:0.0000588882,SC:0.000206109,FD:0,GD:0.000765547},B:\"webkit\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"BD\",\"CD\",\"DD\",\"7B\",\"I\",\"ED\",\"SC\",\"FD\",\"GD\",\"H\",\"\",\"\",\"\"],E:\"Android Browser\",F:{BD:1256515200,CD:1274313600,DD:1291593600,\"7B\":1298332800,I:1318896000,ED:1341792000,SC:1374624000,FD:1386547200,GD:1401667200,H:1705968000}},J:{A:{D:0,A:0},B:\"webkit\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"D\",\"A\",\"\",\"\",\"\"],E:\"Blackberry Browser\",F:{D:1325376000,A:1359504000}},K:{A:{A:0,B:0,C:0,u:1.19391,\"2B\":0,RC:0,\"3B\":0},B:\"o\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"A\",\"B\",\"2B\",\"RC\",\"C\",\"3B\",\"u\",\"\",\"\",\"\"],E:\"Opera Mobile\",F:{A:1287100800,B:1300752000,\"2B\":1314835200,RC:1318291200,C:1330300800,\"3B\":1349740800,u:1673827200},D:{u:\"webkit\"}},L:{A:{H:40.5268},B:\"webkit\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"H\",\"\",\"\",\"\"],E:\"Chrome for Android\",F:{H:1705968000}},M:{A:{\"1B\":0.30045},B:\"moz\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"1B\",\"\",\"\",\"\"],E:\"Firefox for Android\",F:{\"1B\":1705968000}},N:{A:{A:0,B:0},B:\"ms\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"A\",\"B\",\"\",\"\",\"\"],E:\"IE Mobile\",F:{A:1340150400,B:1353456000}},O:{A:{\"4B\":0.811215},B:\"webkit\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"4B\",\"\",\"\",\"\"],E:\"UC Browser for Android\",F:{\"4B\":1687132800},D:{\"4B\":\"webkit\"}},P:{A:{I:0.139654,q:0.0322279,r:0.0751983,s:0.0966836,t:2.10555,HD:0.0107426,ID:0,JD:0.0537131,KD:0,LD:0,FC:0,MD:0.0107426,ND:0,OD:0.0107426,PD:0,QD:0,\"5B\":0.0107426,\"6B\":0.0322279,RD:0.0214852,SD:0.0322279},B:\"webkit\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"I\",\"HD\",\"ID\",\"JD\",\"KD\",\"LD\",\"FC\",\"MD\",\"ND\",\"OD\",\"PD\",\"QD\",\"5B\",\"6B\",\"RD\",\"SD\",\"q\",\"r\",\"s\",\"t\",\"\",\"\",\"\"],E:\"Samsung Internet\",F:{I:1461024000,HD:1481846400,ID:1509408000,JD:1528329600,KD:1546128000,LD:1554163200,FC:1567900800,MD:1582588800,ND:1593475200,OD:1605657600,PD:1618531200,QD:1629072000,\"5B\":1640736000,\"6B\":1651708800,RD:1659657600,SD:1667260800,q:1677369600,r:1684454400,s:1689292800,t:1697587200}},Q:{A:{GC:0.204306},B:\"webkit\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"GC\",\"\",\"\",\"\"],E:\"QQ Browser\",F:{GC:1663718400}},R:{A:{TD:0},B:\"webkit\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"TD\",\"\",\"\",\"\"],E:\"Baidu Browser\",F:{TD:1663027200}},S:{A:{UD:0.090135,VD:0},B:\"moz\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"UD\",\"VD\",\"\",\"\",\"\"],E:\"KaiOS Browser\",F:{UD:1527811200,VD:1631664000}}};\n","module.exports={\"0\":\"112\",\"1\":\"113\",\"2\":\"114\",\"3\":\"115\",\"4\":\"116\",\"5\":\"117\",\"6\":\"118\",\"7\":\"119\",\"8\":\"120\",\"9\":\"5\",A:\"10\",B:\"11\",C:\"12\",D:\"7\",E:\"8\",F:\"9\",G:\"15\",H:\"121\",I:\"4\",J:\"6\",K:\"13\",L:\"14\",M:\"16\",N:\"17\",O:\"18\",P:\"79\",Q:\"80\",R:\"81\",S:\"83\",T:\"84\",U:\"85\",V:\"86\",W:\"87\",X:\"88\",Y:\"89\",Z:\"90\",a:\"91\",b:\"92\",c:\"93\",d:\"94\",e:\"95\",f:\"96\",g:\"97\",h:\"98\",i:\"99\",j:\"100\",k:\"101\",l:\"102\",m:\"103\",n:\"104\",o:\"105\",p:\"106\",q:\"20\",r:\"21\",s:\"22\",t:\"23\",u:\"73\",v:\"107\",w:\"108\",x:\"109\",y:\"110\",z:\"111\",AB:\"19\",BB:\"24\",CB:\"25\",DB:\"26\",EB:\"27\",FB:\"28\",GB:\"29\",HB:\"30\",IB:\"31\",JB:\"32\",KB:\"33\",LB:\"34\",MB:\"35\",NB:\"36\",OB:\"37\",PB:\"38\",QB:\"39\",RB:\"40\",SB:\"41\",TB:\"42\",UB:\"43\",VB:\"44\",WB:\"45\",XB:\"46\",YB:\"47\",ZB:\"48\",aB:\"49\",bB:\"50\",cB:\"51\",dB:\"52\",eB:\"53\",fB:\"54\",gB:\"55\",hB:\"56\",iB:\"57\",jB:\"58\",kB:\"60\",lB:\"62\",mB:\"63\",nB:\"64\",oB:\"65\",pB:\"66\",qB:\"67\",rB:\"68\",sB:\"69\",tB:\"70\",uB:\"71\",vB:\"72\",wB:\"74\",xB:\"75\",yB:\"76\",zB:\"77\",\"0B\":\"78\",\"1B\":\"122\",\"2B\":\"11.1\",\"3B\":\"12.1\",\"4B\":\"15.5\",\"5B\":\"16.0\",\"6B\":\"17.0\",\"7B\":\"3\",\"8B\":\"59\",\"9B\":\"61\",AC:\"82\",BC:\"123\",CC:\"124\",DC:\"125\",EC:\"3.2\",FC:\"10.1\",GC:\"13.1\",HC:\"15.2-15.3\",IC:\"15.4\",JC:\"16.1\",KC:\"16.2\",LC:\"16.3\",MC:\"16.4\",NC:\"16.5\",OC:\"17.1\",PC:\"17.2\",QC:\"17.3\",RC:\"11.5\",SC:\"4.2-4.3\",TC:\"5.5\",UC:\"2\",VC:\"126\",WC:\"3.5\",XC:\"3.6\",YC:\"3.1\",ZC:\"5.1\",aC:\"6.1\",bC:\"7.1\",cC:\"9.1\",dC:\"14.1\",eC:\"15.1\",fC:\"15.6\",gC:\"16.6\",hC:\"17.4\",iC:\"TP\",jC:\"9.5-9.6\",kC:\"10.0-10.1\",lC:\"10.5\",mC:\"10.6\",nC:\"11.6\",oC:\"4.0-4.1\",pC:\"5.0-5.1\",qC:\"6.0-6.1\",rC:\"7.0-7.1\",sC:\"8.1-8.4\",tC:\"9.0-9.2\",uC:\"9.3\",vC:\"10.0-10.2\",wC:\"10.3\",xC:\"11.0-11.2\",yC:\"11.3-11.4\",zC:\"12.0-12.1\",\"0C\":\"12.2-12.5\",\"1C\":\"13.0-13.1\",\"2C\":\"13.2\",\"3C\":\"13.3\",\"4C\":\"13.4-13.7\",\"5C\":\"14.0-14.4\",\"6C\":\"14.5-14.8\",\"7C\":\"15.0-15.1\",\"8C\":\"15.6-15.8\",\"9C\":\"16.6-16.7\",AD:\"all\",BD:\"2.1\",CD:\"2.2\",DD:\"2.3\",ED:\"4.1\",FD:\"4.4\",GD:\"4.4.3-4.4.4\",HD:\"5.0-5.4\",ID:\"6.2-6.4\",JD:\"7.2-7.4\",KD:\"8.2\",LD:\"9.2\",MD:\"11.1-11.2\",ND:\"12.0\",OD:\"13.0\",PD:\"14.0\",QD:\"15.0\",RD:\"18.0\",SD:\"19.0\",TD:\"13.18\",UD:\"2.5\",VD:\"3.0-3.1\"};\n","module.exports={A:\"ie\",B:\"edge\",C:\"firefox\",D:\"chrome\",E:\"safari\",F:\"opera\",G:\"ios_saf\",H:\"op_mini\",I:\"android\",J:\"bb\",K:\"op_mob\",L:\"and_chr\",M:\"and_ff\",N:\"ie_mob\",O:\"and_uc\",P:\"samsung\",Q:\"and_qq\",R:\"baidu\",S:\"kaios\"};\n","'use strict'\n\nconst browsers = require('./browsers').browsers\nconst versions = require('./browserVersions').browserVersions\nconst agentsData = require('../../data/agents')\n\nfunction unpackBrowserVersions(versionsData) {\n  return Object.keys(versionsData).reduce((usage, version) => {\n    usage[versions[version]] = versionsData[version]\n    return usage\n  }, {})\n}\n\nmodule.exports.agents = Object.keys(agentsData).reduce((map, key) => {\n  let versionsData = agentsData[key]\n  map[browsers[key]] = Object.keys(versionsData).reduce((data, entry) => {\n    if (entry === 'A') {\n      data.usage_global = unpackBrowserVersions(versionsData[entry])\n    } else if (entry === 'C') {\n      data.versions = versionsData[entry].reduce((list, version) => {\n        if (version === '') {\n          list.push(null)\n        } else {\n          list.push(versions[version])\n        }\n        return list\n      }, [])\n    } else if (entry === 'D') {\n      data.prefix_exceptions = unpackBrowserVersions(versionsData[entry])\n    } else if (entry === 'E') {\n      data.browser = versionsData[entry]\n    } else if (entry === 'F') {\n      data.release_date = Object.keys(versionsData[entry]).reduce(\n        (map2, key2) => {\n          map2[versions[key2]] = versionsData[entry][key2]\n          return map2\n        },\n        {}\n      )\n    } else {\n      // entry is B\n      data.prefix = versionsData[entry]\n    }\n    return data\n  }, {})\n  return map\n}, {})\n","module.exports.browserVersions = require('../../data/browserVersions')\n","module.exports.browsers = require('../../data/browsers')\n","module.exports = {\n\t\"0.20\": \"39\",\n\t\"0.21\": \"41\",\n\t\"0.22\": \"41\",\n\t\"0.23\": \"41\",\n\t\"0.24\": \"41\",\n\t\"0.25\": \"42\",\n\t\"0.26\": \"42\",\n\t\"0.27\": \"43\",\n\t\"0.28\": \"43\",\n\t\"0.29\": \"43\",\n\t\"0.30\": \"44\",\n\t\"0.31\": \"45\",\n\t\"0.32\": \"45\",\n\t\"0.33\": \"45\",\n\t\"0.34\": \"45\",\n\t\"0.35\": \"45\",\n\t\"0.36\": \"47\",\n\t\"0.37\": \"49\",\n\t\"1.0\": \"49\",\n\t\"1.1\": \"50\",\n\t\"1.2\": \"51\",\n\t\"1.3\": \"52\",\n\t\"1.4\": \"53\",\n\t\"1.5\": \"54\",\n\t\"1.6\": \"56\",\n\t\"1.7\": \"58\",\n\t\"1.8\": \"59\",\n\t\"2.0\": \"61\",\n\t\"2.1\": \"61\",\n\t\"3.0\": \"66\",\n\t\"3.1\": \"66\",\n\t\"4.0\": \"69\",\n\t\"4.1\": \"69\",\n\t\"4.2\": \"69\",\n\t\"5.0\": \"73\",\n\t\"6.0\": \"76\",\n\t\"6.1\": \"76\",\n\t\"7.0\": \"78\",\n\t\"7.1\": \"78\",\n\t\"7.2\": \"78\",\n\t\"7.3\": \"78\",\n\t\"8.0\": \"80\",\n\t\"8.1\": \"80\",\n\t\"8.2\": \"80\",\n\t\"8.3\": \"80\",\n\t\"8.4\": \"80\",\n\t\"8.5\": \"80\",\n\t\"9.0\": \"83\",\n\t\"9.1\": \"83\",\n\t\"9.2\": \"83\",\n\t\"9.3\": \"83\",\n\t\"9.4\": \"83\",\n\t\"10.0\": \"85\",\n\t\"10.1\": \"85\",\n\t\"10.2\": \"85\",\n\t\"10.3\": \"85\",\n\t\"10.4\": \"85\",\n\t\"11.0\": \"87\",\n\t\"11.1\": \"87\",\n\t\"11.2\": \"87\",\n\t\"11.3\": \"87\",\n\t\"11.4\": \"87\",\n\t\"11.5\": \"87\",\n\t\"12.0\": \"89\",\n\t\"12.1\": \"89\",\n\t\"12.2\": \"89\",\n\t\"13.0\": \"91\",\n\t\"13.1\": \"91\",\n\t\"13.2\": \"91\",\n\t\"13.3\": \"91\",\n\t\"13.4\": \"91\",\n\t\"13.5\": \"91\",\n\t\"13.6\": \"91\",\n\t\"14.0\": \"93\",\n\t\"14.1\": \"93\",\n\t\"14.2\": \"93\",\n\t\"15.0\": \"94\",\n\t\"15.1\": \"94\",\n\t\"15.2\": \"94\",\n\t\"15.3\": \"94\",\n\t\"15.4\": \"94\",\n\t\"15.5\": \"94\",\n\t\"16.0\": \"96\",\n\t\"16.1\": \"96\",\n\t\"16.2\": \"96\",\n\t\"17.0\": \"98\",\n\t\"17.1\": \"98\",\n\t\"17.2\": \"98\",\n\t\"17.3\": \"98\",\n\t\"17.4\": \"98\",\n\t\"18.0\": \"100\",\n\t\"18.1\": \"100\",\n\t\"18.2\": \"100\",\n\t\"18.3\": \"100\",\n\t\"19.0\": \"102\",\n\t\"19.1\": \"102\",\n\t\"20.0\": \"104\",\n\t\"20.1\": \"104\",\n\t\"20.2\": \"104\",\n\t\"20.3\": \"104\",\n\t\"21.0\": \"106\",\n\t\"21.1\": \"106\",\n\t\"21.2\": \"106\",\n\t\"21.3\": \"106\",\n\t\"21.4\": \"106\",\n\t\"22.0\": \"108\",\n\t\"22.1\": \"108\",\n\t\"22.2\": \"108\",\n\t\"22.3\": \"108\",\n\t\"23.0\": \"110\",\n\t\"23.1\": \"110\",\n\t\"23.2\": \"110\",\n\t\"23.3\": \"110\",\n\t\"24.0\": \"112\",\n\t\"24.1\": \"112\",\n\t\"24.2\": \"112\",\n\t\"24.3\": \"112\",\n\t\"24.4\": \"112\",\n\t\"24.5\": \"112\",\n\t\"24.6\": \"112\",\n\t\"24.7\": \"112\",\n\t\"24.8\": \"112\",\n\t\"25.0\": \"114\",\n\t\"25.1\": \"114\",\n\t\"25.2\": \"114\",\n\t\"25.3\": \"114\",\n\t\"25.4\": \"114\",\n\t\"25.5\": \"114\",\n\t\"25.6\": \"114\",\n\t\"25.7\": \"114\",\n\t\"25.8\": \"114\",\n\t\"25.9\": \"114\",\n\t\"26.0\": \"116\",\n\t\"26.1\": \"116\",\n\t\"26.2\": \"116\",\n\t\"26.3\": \"116\",\n\t\"26.4\": \"116\",\n\t\"26.5\": \"116\",\n\t\"26.6\": \"116\",\n\t\"27.0\": \"118\",\n\t\"27.1\": \"118\",\n\t\"27.2\": \"118\",\n\t\"27.3\": \"118\",\n\t\"28.0\": \"120\",\n\t\"28.1\": \"120\",\n\t\"28.2\": \"120\",\n\t\"29.0\": \"122\",\n\t\"30.0\": \"123\"\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nvar compatTransforms = require('./transforms');\nvar _transform = require('../transform');\n\nmodule.exports = {\n  /**\n   * Translates a regexp in new syntax to equivalent regexp in old syntax.\n   *\n   * @param string|RegExp|AST - regexp\n   * @param Array transformsWhitelist - names of the transforms to apply\n   */\n  transform: function transform(regexp) {\n    var transformsWhitelist = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n    var transformToApply = transformsWhitelist.length > 0 ? transformsWhitelist : Object.keys(compatTransforms);\n\n    var result = void 0;\n\n    // Collect extra data per transform.\n    var extra = {};\n\n    transformToApply.forEach(function (transformName) {\n\n      if (!compatTransforms.hasOwnProperty(transformName)) {\n        throw new Error('Unknown compat-transform: ' + transformName + '. ' + 'Available transforms are: ' + Object.keys(compatTransforms).join(', '));\n      }\n\n      var handler = compatTransforms[transformName];\n\n      result = _transform.transform(regexp, handler);\n      regexp = result.getAST();\n\n      // Collect `extra` transform result.\n      if (typeof handler.getExtra === 'function') {\n        extra[transformName] = handler.getExtra();\n      }\n    });\n\n    // Set the final extras for all transforms.\n    result.setExtra(extra);\n\n    return result;\n  }\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * The `RegExpTree` class provides runtime support for `compat-transpiler`\n * module from `regexp-tree`.\n *\n * E.g. it tracks names of the capturing groups, in order to access the\n * names on the matched result.\n *\n * It's a thin-wrapper on top of original regexp.\n */\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar RegExpTree = function () {\n  /**\n   * Initializes a `RegExpTree` instance.\n   *\n   * @param RegExp - a regular expression\n   *\n   * @param Object state:\n   *\n   *   An extra state which may store any related to transformation\n   *   data, for example, names of the groups.\n   *\n   *   - flags - original flags\n   *   - groups - names of the groups, and their indices\n   *   - source - original source\n   */\n  function RegExpTree(re, _ref) {\n    var flags = _ref.flags,\n        groups = _ref.groups,\n        source = _ref.source;\n\n    _classCallCheck(this, RegExpTree);\n\n    this._re = re;\n    this._groups = groups;\n\n    // Original props.\n    this.flags = flags;\n    this.source = source || re.source;\n    this.dotAll = flags.includes('s');\n\n    // Inherited directly from `re`.\n    this.global = re.global;\n    this.ignoreCase = re.ignoreCase;\n    this.multiline = re.multiline;\n    this.sticky = re.sticky;\n    this.unicode = re.unicode;\n  }\n\n  /**\n   * Facade wrapper for RegExp `test` method.\n   */\n\n\n  _createClass(RegExpTree, [{\n    key: 'test',\n    value: function test(string) {\n      return this._re.test(string);\n    }\n\n    /**\n     * Facade wrapper for RegExp `compile` method.\n     */\n\n  }, {\n    key: 'compile',\n    value: function compile(string) {\n      return this._re.compile(string);\n    }\n\n    /**\n     * Facade wrapper for RegExp `toString` method.\n     */\n\n  }, {\n    key: 'toString',\n    value: function toString() {\n      if (!this._toStringResult) {\n        this._toStringResult = '/' + this.source + '/' + this.flags;\n      }\n      return this._toStringResult;\n    }\n\n    /**\n     * Facade wrapper for RegExp `exec` method.\n     */\n\n  }, {\n    key: 'exec',\n    value: function exec(string) {\n      var result = this._re.exec(string);\n\n      if (!this._groups || !result) {\n        return result;\n      }\n\n      result.groups = {};\n\n      for (var group in this._groups) {\n        var groupNumber = this._groups[group];\n        result.groups[group] = result[groupNumber];\n      }\n\n      return result;\n    }\n  }]);\n\n  return RegExpTree;\n}();\n\nmodule.exports = {\n  RegExpTree: RegExpTree\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * A regexp-tree plugin to translate `/./s` to `/[\\0-\\uFFFF]/`.\n */\n\nmodule.exports = {\n\n  // Whether `u` flag present. In which case we transform to\n  // \\u{10FFFF} instead of \\uFFFF.\n  _hasUFlag: false,\n\n  // Only run this plugin if we have `s` flag.\n  shouldRun: function shouldRun(ast) {\n    var shouldRun = ast.flags.includes('s');\n\n    if (!shouldRun) {\n      return false;\n    }\n\n    // Strip the `s` flag.\n    ast.flags = ast.flags.replace('s', '');\n\n    // Whether we have also `u`.\n    this._hasUFlag = ast.flags.includes('u');\n\n    return true;\n  },\n  Char: function Char(path) {\n    var node = path.node;\n\n\n    if (node.kind !== 'meta' || node.value !== '.') {\n      return;\n    }\n\n    var toValue = '\\\\uFFFF';\n    var toSymbol = '\\uFFFF';\n\n    if (this._hasUFlag) {\n      toValue = '\\\\u{10FFFF}';\n      toSymbol = '\\uDBFF\\uDFFF';\n    }\n\n    path.replace({\n      type: 'CharacterClass',\n      expressions: [{\n        type: 'ClassRange',\n        from: {\n          type: 'Char',\n          value: '\\\\0',\n          kind: 'decimal',\n          symbol: '\\0'\n        },\n        to: {\n          type: 'Char',\n          value: toValue,\n          kind: 'unicode',\n          symbol: toSymbol\n        }\n      }]\n    });\n  }\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * A regexp-tree plugin to translate `/(?<name>a)\\k<name>/` to `/(a)\\1/`.\n */\n\nmodule.exports = {\n  // To track the names of the groups, and return them\n  // in the transform result state.\n  //\n  // A map from name to number: {foo: 2, bar: 4}\n  _groupNames: {},\n\n  /**\n   * Initialises the trasnform.\n   */\n  init: function init() {\n    this._groupNames = {};\n  },\n\n\n  /**\n   * Returns extra state, which eventually is returned to\n   */\n  getExtra: function getExtra() {\n    return this._groupNames;\n  },\n  Group: function Group(path) {\n    var node = path.node;\n\n\n    if (!node.name) {\n      return;\n    }\n\n    // Record group name.\n    this._groupNames[node.name] = node.number;\n\n    delete node.name;\n    delete node.nameRaw;\n  },\n  Backreference: function Backreference(path) {\n    var node = path.node;\n\n\n    if (node.kind !== 'name') {\n      return;\n    }\n\n    node.kind = 'number';\n    node.reference = node.number;\n    delete node.referenceRaw;\n  }\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * A regexp-tree plugin to remove `x` flag `/foo/x` to `/foo/`.\n *\n * Note: other features of `x` flags (whitespace, comments) are\n * already removed at parsing stage.\n */\n\nmodule.exports = {\n  RegExp: function RegExp(_ref) {\n    var node = _ref.node;\n\n    if (node.flags.includes('x')) {\n      node.flags = node.flags.replace('x', '');\n    }\n  }\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nmodule.exports = {\n  // \"dotAll\" `s` flag\n  dotAll: require('./compat-dotall-s-transform'),\n\n  // Named capturing groups.\n  namedCapturingGroups: require('./compat-named-capturing-groups-transform'),\n\n  // `x` flag\n  xFlag: require('./compat-x-flag-transform')\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * Helper `gen` function calls node type handler.\n */\n\nfunction gen(node) {\n  return node ? generator[node.type](node) : '';\n}\n\n/**\n * AST handler.\n */\nvar generator = {\n  RegExp: function RegExp(node) {\n    return '/' + gen(node.body) + '/' + node.flags;\n  },\n  Alternative: function Alternative(node) {\n    return (node.expressions || []).map(gen).join('');\n  },\n  Disjunction: function Disjunction(node) {\n    return gen(node.left) + '|' + gen(node.right);\n  },\n  Group: function Group(node) {\n    var expression = gen(node.expression);\n\n    if (node.capturing) {\n      // A named group.\n      if (node.name) {\n        return '(?<' + (node.nameRaw || node.name) + '>' + expression + ')';\n      }\n\n      return '(' + expression + ')';\n    }\n\n    return '(?:' + expression + ')';\n  },\n  Backreference: function Backreference(node) {\n    switch (node.kind) {\n      case 'number':\n        return '\\\\' + node.reference;\n      case 'name':\n        return '\\\\k<' + (node.referenceRaw || node.reference) + '>';\n      default:\n        throw new TypeError('Unknown Backreference kind: ' + node.kind);\n    }\n  },\n  Assertion: function Assertion(node) {\n    switch (node.kind) {\n      case '^':\n      case '$':\n      case '\\\\b':\n      case '\\\\B':\n        return node.kind;\n\n      case 'Lookahead':\n        {\n          var assertion = gen(node.assertion);\n\n          if (node.negative) {\n            return '(?!' + assertion + ')';\n          }\n\n          return '(?=' + assertion + ')';\n        }\n\n      case 'Lookbehind':\n        {\n          var _assertion = gen(node.assertion);\n\n          if (node.negative) {\n            return '(?<!' + _assertion + ')';\n          }\n\n          return '(?<=' + _assertion + ')';\n        }\n\n      default:\n        throw new TypeError('Unknown Assertion kind: ' + node.kind);\n    }\n  },\n  CharacterClass: function CharacterClass(node) {\n    var expressions = node.expressions.map(gen).join('');\n\n    if (node.negative) {\n      return '[^' + expressions + ']';\n    }\n\n    return '[' + expressions + ']';\n  },\n  ClassRange: function ClassRange(node) {\n    return gen(node.from) + '-' + gen(node.to);\n  },\n  Repetition: function Repetition(node) {\n    return '' + gen(node.expression) + gen(node.quantifier);\n  },\n  Quantifier: function Quantifier(node) {\n    var quantifier = void 0;\n    var greedy = node.greedy ? '' : '?';\n\n    switch (node.kind) {\n      case '+':\n      case '?':\n      case '*':\n        quantifier = node.kind;\n        break;\n      case 'Range':\n        // Exact: {1}\n        if (node.from === node.to) {\n          quantifier = '{' + node.from + '}';\n        }\n        // Open: {1,}\n        else if (!node.to) {\n            quantifier = '{' + node.from + ',}';\n          }\n          // Closed: {1,3}\n          else {\n              quantifier = '{' + node.from + ',' + node.to + '}';\n            }\n        break;\n      default:\n        throw new TypeError('Unknown Quantifier kind: ' + node.kind);\n    }\n\n    return '' + quantifier + greedy;\n  },\n  Char: function Char(node) {\n    var value = node.value;\n\n    switch (node.kind) {\n      case 'simple':\n        {\n          if (node.escaped) {\n            return '\\\\' + value;\n          }\n          return value;\n        }\n\n      case 'hex':\n      case 'unicode':\n      case 'oct':\n      case 'decimal':\n      case 'control':\n      case 'meta':\n        return value;\n\n      default:\n        throw new TypeError('Unknown Char kind: ' + node.kind);\n    }\n  },\n  UnicodeProperty: function UnicodeProperty(node) {\n    var escapeChar = node.negative ? 'P' : 'p';\n    var namePart = void 0;\n\n    if (!node.shorthand && !node.binary) {\n      namePart = node.name + '=';\n    } else {\n      namePart = '';\n    }\n\n    return '\\\\' + escapeChar + '{' + namePart + node.value + '}';\n  }\n};\n\nmodule.exports = {\n  /**\n   * Generates a regexp string from an AST.\n   *\n   * @param Object ast - an AST node\n   */\n  generate: gen\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n// DFA minization.\n\n/**\n * Map from state to current set it goes.\n */\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nfunction _toArray(arr) { return Array.isArray(arr) ? arr : Array.from(arr); }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar currentTransitionMap = null;\n\n/**\n * Takes a DFA, and returns a minimized version of it\n * compressing some states to groups (using standard, 0-, 1-,\n * 2-, ... N-equivalence algorithm).\n */\nfunction minimize(dfa) {\n  var table = dfa.getTransitionTable();\n  var allStates = Object.keys(table);\n  var alphabet = dfa.getAlphabet();\n  var accepting = dfa.getAcceptingStateNumbers();\n\n  currentTransitionMap = {};\n\n  var nonAccepting = new Set();\n\n  allStates.forEach(function (state) {\n    state = Number(state);\n    var isAccepting = accepting.has(state);\n\n    if (isAccepting) {\n      currentTransitionMap[state] = accepting;\n    } else {\n      nonAccepting.add(state);\n      currentTransitionMap[state] = nonAccepting;\n    }\n  });\n\n  // ---------------------------------------------------------------------------\n  // Step 1: build equivalent sets.\n\n  // All [1..N] equivalent sets.\n  var all = [\n  // 0-equivalent sets.\n  [nonAccepting, accepting].filter(function (set) {\n    return set.size > 0;\n  })];\n\n  var current = void 0;\n  var previous = void 0;\n\n  // Top of the stack is the current list of sets to analyze.\n  current = all[all.length - 1];\n\n  // Previous set (to check whether we need to stop).\n  previous = all[all.length - 2];\n\n  // Until we'll not have the same N and N-1 equivalent rows.\n\n  var _loop = function _loop() {\n    var newTransitionMap = {};\n\n    var _iteratorNormalCompletion3 = true;\n    var _didIteratorError3 = false;\n    var _iteratorError3 = undefined;\n\n    try {\n      for (var _iterator3 = current[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n        var _set = _step3.value;\n\n        // Handled states for this set.\n        var handledStates = {};\n\n        var _set2 = _toArray(_set),\n            first = _set2[0],\n            rest = _set2.slice(1);\n\n        handledStates[first] = new Set([first]);\n\n        // Have to compare each from the rest states with\n        // the already handled states, and see if they are equivalent.\n        var _iteratorNormalCompletion4 = true;\n        var _didIteratorError4 = false;\n        var _iteratorError4 = undefined;\n\n        try {\n          restSets: for (var _iterator4 = rest[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n            var state = _step4.value;\n            var _iteratorNormalCompletion5 = true;\n            var _didIteratorError5 = false;\n            var _iteratorError5 = undefined;\n\n            try {\n              for (var _iterator5 = Object.keys(handledStates)[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n                var handledState = _step5.value;\n\n                // This and some previously handled state are equivalent --\n                // just append this state to the same set.\n                if (areEquivalent(state, handledState, table, alphabet)) {\n                  handledStates[handledState].add(state);\n                  handledStates[state] = handledStates[handledState];\n                  continue restSets;\n                }\n              }\n              // Else, this state is not equivalent to any of the\n              // handled states -- allocate a new set for it.\n            } catch (err) {\n              _didIteratorError5 = true;\n              _iteratorError5 = err;\n            } finally {\n              try {\n                if (!_iteratorNormalCompletion5 && _iterator5.return) {\n                  _iterator5.return();\n                }\n              } finally {\n                if (_didIteratorError5) {\n                  throw _iteratorError5;\n                }\n              }\n            }\n\n            handledStates[state] = new Set([state]);\n          }\n        } catch (err) {\n          _didIteratorError4 = true;\n          _iteratorError4 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion4 && _iterator4.return) {\n              _iterator4.return();\n            }\n          } finally {\n            if (_didIteratorError4) {\n              throw _iteratorError4;\n            }\n          }\n        }\n\n        // Add these handled states to all states map.\n\n\n        Object.assign(newTransitionMap, handledStates);\n      }\n\n      // Update current transition map for the handled row.\n    } catch (err) {\n      _didIteratorError3 = true;\n      _iteratorError3 = err;\n    } finally {\n      try {\n        if (!_iteratorNormalCompletion3 && _iterator3.return) {\n          _iterator3.return();\n        }\n      } finally {\n        if (_didIteratorError3) {\n          throw _iteratorError3;\n        }\n      }\n    }\n\n    currentTransitionMap = newTransitionMap;\n\n    var newSets = new Set(Object.keys(newTransitionMap).map(function (state) {\n      return newTransitionMap[state];\n    }));\n\n    all.push([].concat(_toConsumableArray(newSets)));\n\n    // Top of the stack is the current.\n    current = all[all.length - 1];\n\n    // Previous set.\n    previous = all[all.length - 2];\n  };\n\n  while (!sameRow(current, previous)) {\n    _loop();\n  }\n\n  // ---------------------------------------------------------------------------\n  // Step 2: build minimized table from the equivalent sets.\n\n  // Remap state numbers from sets to index-based.\n  var remaped = new Map();\n  var idx = 1;\n  current.forEach(function (set) {\n    return remaped.set(set, idx++);\n  });\n\n  // Build the minimized table from the calculated equivalent sets.\n  var minimizedTable = {};\n\n  var minimizedAcceptingStates = new Set();\n\n  var updateAcceptingStates = function updateAcceptingStates(set, idx) {\n    var _iteratorNormalCompletion = true;\n    var _didIteratorError = false;\n    var _iteratorError = undefined;\n\n    try {\n      for (var _iterator = set[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n        var state = _step.value;\n\n        if (accepting.has(state)) {\n          minimizedAcceptingStates.add(idx);\n        }\n      }\n    } catch (err) {\n      _didIteratorError = true;\n      _iteratorError = err;\n    } finally {\n      try {\n        if (!_iteratorNormalCompletion && _iterator.return) {\n          _iterator.return();\n        }\n      } finally {\n        if (_didIteratorError) {\n          throw _iteratorError;\n        }\n      }\n    }\n  };\n\n  var _iteratorNormalCompletion2 = true;\n  var _didIteratorError2 = false;\n  var _iteratorError2 = undefined;\n\n  try {\n    for (var _iterator2 = remaped.entries()[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n      var _ref = _step2.value;\n\n      var _ref2 = _slicedToArray(_ref, 2);\n\n      var set = _ref2[0];\n      var _idx = _ref2[1];\n\n      minimizedTable[_idx] = {};\n      var _iteratorNormalCompletion6 = true;\n      var _didIteratorError6 = false;\n      var _iteratorError6 = undefined;\n\n      try {\n        for (var _iterator6 = alphabet[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n          var symbol = _step6.value;\n\n          updateAcceptingStates(set, _idx);\n\n          // Determine original transition for this symbol from the set.\n          var originalTransition = void 0;\n          var _iteratorNormalCompletion7 = true;\n          var _didIteratorError7 = false;\n          var _iteratorError7 = undefined;\n\n          try {\n            for (var _iterator7 = set[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) {\n              var originalState = _step7.value;\n\n              originalTransition = table[originalState][symbol];\n              if (originalTransition) {\n                break;\n              }\n            }\n          } catch (err) {\n            _didIteratorError7 = true;\n            _iteratorError7 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion7 && _iterator7.return) {\n                _iterator7.return();\n              }\n            } finally {\n              if (_didIteratorError7) {\n                throw _iteratorError7;\n              }\n            }\n          }\n\n          if (originalTransition) {\n            minimizedTable[_idx][symbol] = remaped.get(currentTransitionMap[originalTransition]);\n          }\n        }\n      } catch (err) {\n        _didIteratorError6 = true;\n        _iteratorError6 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion6 && _iterator6.return) {\n            _iterator6.return();\n          }\n        } finally {\n          if (_didIteratorError6) {\n            throw _iteratorError6;\n          }\n        }\n      }\n    }\n\n    // Update the table, and accepting states on the original DFA.\n  } catch (err) {\n    _didIteratorError2 = true;\n    _iteratorError2 = err;\n  } finally {\n    try {\n      if (!_iteratorNormalCompletion2 && _iterator2.return) {\n        _iterator2.return();\n      }\n    } finally {\n      if (_didIteratorError2) {\n        throw _iteratorError2;\n      }\n    }\n  }\n\n  dfa.setTransitionTable(minimizedTable);\n  dfa.setAcceptingStateNumbers(minimizedAcceptingStates);\n\n  return dfa;\n}\n\nfunction sameRow(r1, r2) {\n  if (!r2) {\n    return false;\n  }\n\n  if (r1.length !== r2.length) {\n    return false;\n  }\n\n  for (var i = 0; i < r1.length; i++) {\n    var s1 = r1[i];\n    var s2 = r2[i];\n\n    if (s1.size !== s2.size) {\n      return false;\n    }\n\n    if ([].concat(_toConsumableArray(s1)).sort().join(',') !== [].concat(_toConsumableArray(s2)).sort().join(',')) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Checks whether two states are N-equivalent, i.e. whether they go\n * to the same set on a symbol.\n */\nfunction areEquivalent(s1, s2, table, alphabet) {\n  var _iteratorNormalCompletion8 = true;\n  var _didIteratorError8 = false;\n  var _iteratorError8 = undefined;\n\n  try {\n    for (var _iterator8 = alphabet[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) {\n      var symbol = _step8.value;\n\n      if (!goToSameSet(s1, s2, table, symbol)) {\n        return false;\n      }\n    }\n  } catch (err) {\n    _didIteratorError8 = true;\n    _iteratorError8 = err;\n  } finally {\n    try {\n      if (!_iteratorNormalCompletion8 && _iterator8.return) {\n        _iterator8.return();\n      }\n    } finally {\n      if (_didIteratorError8) {\n        throw _iteratorError8;\n      }\n    }\n  }\n\n  return true;\n}\n\n/**\n * Checks whether states go to the same set.\n */\nfunction goToSameSet(s1, s2, table, symbol) {\n  if (!currentTransitionMap[s1] || !currentTransitionMap[s2]) {\n    return false;\n  }\n\n  var originalTransitionS1 = table[s1][symbol];\n  var originalTransitionS2 = table[s2][symbol];\n\n  // If no actual transition on this symbol, treat it as positive.\n  if (!originalTransitionS1 && !originalTransitionS2) {\n    return true;\n  }\n\n  // Otherwise, check if they are in the same sets.\n  return currentTransitionMap[s1].has(originalTransitionS1) && currentTransitionMap[s2].has(originalTransitionS2);\n}\n\nmodule.exports = {\n  minimize: minimize\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar DFAMinimizer = require('./dfa-minimizer');\n\nvar _require = require('../special-symbols'),\n    EPSILON_CLOSURE = _require.EPSILON_CLOSURE;\n\n/**\n * DFA is build by converting from NFA (subset construction).\n */\n\n\nvar DFA = function () {\n  function DFA(nfa) {\n    _classCallCheck(this, DFA);\n\n    this._nfa = nfa;\n  }\n\n  /**\n   * Minimizes DFA.\n   */\n\n\n  _createClass(DFA, [{\n    key: 'minimize',\n    value: function minimize() {\n      this.getTransitionTable();\n\n      this._originalAcceptingStateNumbers = this._acceptingStateNumbers;\n      this._originalTransitionTable = this._transitionTable;\n\n      DFAMinimizer.minimize(this);\n    }\n\n    /**\n     * Returns alphabet for this DFA.\n     */\n\n  }, {\n    key: 'getAlphabet',\n    value: function getAlphabet() {\n      return this._nfa.getAlphabet();\n    }\n\n    /**\n     * Returns accepting states.\n     */\n\n  }, {\n    key: 'getAcceptingStateNumbers',\n    value: function getAcceptingStateNumbers() {\n      if (!this._acceptingStateNumbers) {\n        // Accepting states are determined during table construction.\n        this.getTransitionTable();\n      }\n\n      return this._acceptingStateNumbers;\n    }\n\n    /**\n     * Returns original accepting states.\n     */\n\n  }, {\n    key: 'getOriginaAcceptingStateNumbers',\n    value: function getOriginaAcceptingStateNumbers() {\n      if (!this._originalAcceptingStateNumbers) {\n        // Accepting states are determined during table construction.\n        this.getTransitionTable();\n      }\n\n      return this._originalAcceptingStateNumbers;\n    }\n\n    /**\n     * Sets transition table.\n     */\n\n  }, {\n    key: 'setTransitionTable',\n    value: function setTransitionTable(table) {\n      this._transitionTable = table;\n    }\n\n    /**\n     * Sets accepting states.\n     */\n\n  }, {\n    key: 'setAcceptingStateNumbers',\n    value: function setAcceptingStateNumbers(stateNumbers) {\n      this._acceptingStateNumbers = stateNumbers;\n    }\n\n    /**\n     * DFA transition table is built from NFA table.\n     */\n\n  }, {\n    key: 'getTransitionTable',\n    value: function getTransitionTable() {\n      var _this = this;\n\n      if (this._transitionTable) {\n        return this._transitionTable;\n      }\n\n      // Calculate from NFA transition table.\n      var nfaTable = this._nfa.getTransitionTable();\n      var nfaStates = Object.keys(nfaTable);\n\n      this._acceptingStateNumbers = new Set();\n\n      // Start state of DFA is E(S[nfa])\n      var startState = nfaTable[nfaStates[0]][EPSILON_CLOSURE];\n\n      // Init the worklist (states which should be in the DFA).\n      var worklist = [startState];\n\n      var alphabet = this.getAlphabet();\n      var nfaAcceptingStates = this._nfa.getAcceptingStateNumbers();\n\n      var dfaTable = {};\n\n      // Determine whether the combined DFA state is accepting.\n      var updateAcceptingStates = function updateAcceptingStates(states) {\n        var _iteratorNormalCompletion = true;\n        var _didIteratorError = false;\n        var _iteratorError = undefined;\n\n        try {\n          for (var _iterator = nfaAcceptingStates[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n            var nfaAcceptingState = _step.value;\n\n            // If any of the states from NFA is accepting, DFA's\n            // state is accepting as well.\n            if (states.indexOf(nfaAcceptingState) !== -1) {\n              _this._acceptingStateNumbers.add(states.join(','));\n              break;\n            }\n          }\n        } catch (err) {\n          _didIteratorError = true;\n          _iteratorError = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion && _iterator.return) {\n              _iterator.return();\n            }\n          } finally {\n            if (_didIteratorError) {\n              throw _iteratorError;\n            }\n          }\n        }\n      };\n\n      while (worklist.length > 0) {\n        var states = worklist.shift();\n        var dfaStateLabel = states.join(',');\n        dfaTable[dfaStateLabel] = {};\n\n        var _iteratorNormalCompletion2 = true;\n        var _didIteratorError2 = false;\n        var _iteratorError2 = undefined;\n\n        try {\n          for (var _iterator2 = alphabet[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n            var symbol = _step2.value;\n\n            var onSymbol = [];\n\n            // Determine whether the combined state is accepting.\n            updateAcceptingStates(states);\n\n            var _iteratorNormalCompletion3 = true;\n            var _didIteratorError3 = false;\n            var _iteratorError3 = undefined;\n\n            try {\n              for (var _iterator3 = states[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n                var state = _step3.value;\n\n                var nfaStatesOnSymbol = nfaTable[state][symbol];\n                if (!nfaStatesOnSymbol) {\n                  continue;\n                }\n\n                var _iteratorNormalCompletion4 = true;\n                var _didIteratorError4 = false;\n                var _iteratorError4 = undefined;\n\n                try {\n                  for (var _iterator4 = nfaStatesOnSymbol[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n                    var nfaStateOnSymbol = _step4.value;\n\n                    if (!nfaTable[nfaStateOnSymbol]) {\n                      continue;\n                    }\n                    onSymbol.push.apply(onSymbol, _toConsumableArray(nfaTable[nfaStateOnSymbol][EPSILON_CLOSURE]));\n                  }\n                } catch (err) {\n                  _didIteratorError4 = true;\n                  _iteratorError4 = err;\n                } finally {\n                  try {\n                    if (!_iteratorNormalCompletion4 && _iterator4.return) {\n                      _iterator4.return();\n                    }\n                  } finally {\n                    if (_didIteratorError4) {\n                      throw _iteratorError4;\n                    }\n                  }\n                }\n              }\n            } catch (err) {\n              _didIteratorError3 = true;\n              _iteratorError3 = err;\n            } finally {\n              try {\n                if (!_iteratorNormalCompletion3 && _iterator3.return) {\n                  _iterator3.return();\n                }\n              } finally {\n                if (_didIteratorError3) {\n                  throw _iteratorError3;\n                }\n              }\n            }\n\n            var dfaStatesOnSymbolSet = new Set(onSymbol);\n            var dfaStatesOnSymbol = [].concat(_toConsumableArray(dfaStatesOnSymbolSet));\n\n            if (dfaStatesOnSymbol.length > 0) {\n              var dfaOnSymbolStr = dfaStatesOnSymbol.join(',');\n\n              dfaTable[dfaStateLabel][symbol] = dfaOnSymbolStr;\n\n              if (!dfaTable.hasOwnProperty(dfaOnSymbolStr)) {\n                worklist.unshift(dfaStatesOnSymbol);\n              }\n            }\n          }\n        } catch (err) {\n          _didIteratorError2 = true;\n          _iteratorError2 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion2 && _iterator2.return) {\n              _iterator2.return();\n            }\n          } finally {\n            if (_didIteratorError2) {\n              throw _iteratorError2;\n            }\n          }\n        }\n      }\n\n      return this._transitionTable = this._remapStateNumbers(dfaTable);\n    }\n\n    /**\n     * Remaps state numbers in the resulting table:\n     * combined states '1,2,3' -> 1, '3,4' -> 2, etc.\n     */\n\n  }, {\n    key: '_remapStateNumbers',\n    value: function _remapStateNumbers(calculatedDFATable) {\n      var newStatesMap = {};\n\n      this._originalTransitionTable = calculatedDFATable;\n      var transitionTable = {};\n\n      Object.keys(calculatedDFATable).forEach(function (originalNumber, newNumber) {\n        newStatesMap[originalNumber] = newNumber + 1;\n      });\n\n      for (var originalNumber in calculatedDFATable) {\n        var originalRow = calculatedDFATable[originalNumber];\n        var row = {};\n\n        for (var symbol in originalRow) {\n          row[symbol] = newStatesMap[originalRow[symbol]];\n        }\n\n        transitionTable[newStatesMap[originalNumber]] = row;\n      }\n\n      // Remap accepting states.\n      this._originalAcceptingStateNumbers = this._acceptingStateNumbers;\n      this._acceptingStateNumbers = new Set();\n\n      var _iteratorNormalCompletion5 = true;\n      var _didIteratorError5 = false;\n      var _iteratorError5 = undefined;\n\n      try {\n        for (var _iterator5 = this._originalAcceptingStateNumbers[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n          var _originalNumber = _step5.value;\n\n          this._acceptingStateNumbers.add(newStatesMap[_originalNumber]);\n        }\n      } catch (err) {\n        _didIteratorError5 = true;\n        _iteratorError5 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion5 && _iterator5.return) {\n            _iterator5.return();\n          }\n        } finally {\n          if (_didIteratorError5) {\n            throw _iteratorError5;\n          }\n        }\n      }\n\n      return transitionTable;\n    }\n\n    /**\n     * Returns original DFA table, where state numbers\n     * are combined numbers from NFA.\n     */\n\n  }, {\n    key: 'getOriginalTransitionTable',\n    value: function getOriginalTransitionTable() {\n      if (!this._originalTransitionTable) {\n        // Original table is determined during table construction.\n        this.getTransitionTable();\n      }\n      return this._originalTransitionTable;\n    }\n\n    /**\n     * Checks whether this DFA accepts a string.\n     */\n\n  }, {\n    key: 'matches',\n    value: function matches(string) {\n      var state = 1;\n      var i = 0;\n      var table = this.getTransitionTable();\n\n      while (string[i]) {\n        state = table[state][string[i++]];\n        if (!state) {\n          return false;\n        }\n      }\n\n      if (!this.getAcceptingStateNumbers().has(state)) {\n        return false;\n      }\n\n      return true;\n    }\n  }]);\n\n  return DFA;\n}();\n\nmodule.exports = DFA;","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nvar NFA = require('./nfa/nfa');\nvar DFA = require('./dfa/dfa');\n\nvar nfaFromRegExp = require('./nfa/nfa-from-regexp');\nvar builders = require('./nfa/builders');\n\nmodule.exports = {\n\n  /**\n   * Export NFA and DFA classes.\n   */\n  NFA: NFA,\n  DFA: DFA,\n\n  /**\n   * Expose builders.\n   */\n  builders: builders,\n\n  /**\n   * Builds an NFA for the passed regexp.\n   *\n   * @param string | AST | RegExp:\n   *\n   *   a regular expression in different representations: a string,\n   *   a RegExp object, or an AST.\n   */\n  toNFA: function toNFA(regexp) {\n    return nfaFromRegExp.build(regexp);\n  },\n\n\n  /**\n   * Builds DFA for the passed regexp.\n   *\n   * @param string | AST | RegExp:\n   *\n   *   a regular expression in different representations: a string,\n   *   a RegExp object, or an AST.\n   */\n  toDFA: function toDFA(regexp) {\n    return new DFA(this.toNFA(regexp));\n  },\n\n\n  /**\n   * Returns true if regexp accepts the string.\n   */\n  test: function test(regexp, string) {\n    return this.toDFA(regexp).matches(string);\n  }\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nvar NFA = require('./nfa');\nvar NFAState = require('./nfa-state');\n\nvar _require = require('../special-symbols'),\n    EPSILON = _require.EPSILON;\n\n// -----------------------------------------------------------------------------\n// Char NFA fragment: `c`\n\n/**\n * Char factory.\n *\n * Creates an NFA fragment for a single char.\n *\n * [in] --c--> [out]\n */\n\n\nfunction char(c) {\n  var inState = new NFAState();\n  var outState = new NFAState({\n    accepting: true\n  });\n\n  return new NFA(inState.addTransition(c, outState), outState);\n}\n\n// -----------------------------------------------------------------------------\n// Epsilon NFA fragment\n\n/**\n * Epsilon factory.\n *\n * Creates an NFA fragment for ε (recognizes an empty string).\n *\n * [in] --ε--> [out]\n */\nfunction e() {\n  return char(EPSILON);\n}\n\n// -----------------------------------------------------------------------------\n// Alteration NFA fragment: `abc`\n\n/**\n * Creates a connection between two NFA fragments on epsilon transition.\n *\n * [in-a] --a--> [out-a] --ε--> [in-b] --b--> [out-b]\n */\nfunction altPair(first, second) {\n  first.out.accepting = false;\n  second.out.accepting = true;\n\n  first.out.addTransition(EPSILON, second.in);\n\n  return new NFA(first.in, second.out);\n}\n\n/**\n * Alteration factory.\n *\n * Creates a alteration NFA for (at least) two NFA-fragments.\n */\nfunction alt(first) {\n  for (var _len = arguments.length, fragments = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    fragments[_key - 1] = arguments[_key];\n  }\n\n  var _iteratorNormalCompletion = true;\n  var _didIteratorError = false;\n  var _iteratorError = undefined;\n\n  try {\n    for (var _iterator = fragments[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n      var fragment = _step.value;\n\n      first = altPair(first, fragment);\n    }\n  } catch (err) {\n    _didIteratorError = true;\n    _iteratorError = err;\n  } finally {\n    try {\n      if (!_iteratorNormalCompletion && _iterator.return) {\n        _iterator.return();\n      }\n    } finally {\n      if (_didIteratorError) {\n        throw _iteratorError;\n      }\n    }\n  }\n\n  return first;\n}\n\n// -----------------------------------------------------------------------------\n// Disjunction NFA fragment: `a|b`\n\n/**\n * Creates a disjunction choice between two fragments.\n */\nfunction orPair(first, second) {\n  var inState = new NFAState();\n  var outState = new NFAState();\n\n  inState.addTransition(EPSILON, first.in);\n  inState.addTransition(EPSILON, second.in);\n\n  outState.accepting = true;\n  first.out.accepting = false;\n  second.out.accepting = false;\n\n  first.out.addTransition(EPSILON, outState);\n  second.out.addTransition(EPSILON, outState);\n\n  return new NFA(inState, outState);\n}\n\n/**\n * Disjunction factory.\n *\n * Creates a disjunction NFA for (at least) two NFA-fragments.\n */\nfunction or(first) {\n  for (var _len2 = arguments.length, fragments = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n    fragments[_key2 - 1] = arguments[_key2];\n  }\n\n  var _iteratorNormalCompletion2 = true;\n  var _didIteratorError2 = false;\n  var _iteratorError2 = undefined;\n\n  try {\n    for (var _iterator2 = fragments[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n      var fragment = _step2.value;\n\n      first = orPair(first, fragment);\n    }\n  } catch (err) {\n    _didIteratorError2 = true;\n    _iteratorError2 = err;\n  } finally {\n    try {\n      if (!_iteratorNormalCompletion2 && _iterator2.return) {\n        _iterator2.return();\n      }\n    } finally {\n      if (_didIteratorError2) {\n        throw _iteratorError2;\n      }\n    }\n  }\n\n  return first;\n}\n\n// -----------------------------------------------------------------------------\n// Kleene-closure\n\n/**\n * Kleene star/closure.\n *\n * a*\n */\nfunction repExplicit(fragment) {\n  var inState = new NFAState();\n  var outState = new NFAState({\n    accepting: true\n  });\n\n  // 0 or more.\n  inState.addTransition(EPSILON, fragment.in);\n  inState.addTransition(EPSILON, outState);\n\n  fragment.out.accepting = false;\n  fragment.out.addTransition(EPSILON, outState);\n  outState.addTransition(EPSILON, fragment.in);\n\n  return new NFA(inState, outState);\n}\n\n/**\n * Optimized Kleene-star: just adds ε-transitions from\n * input to the output, and back.\n */\nfunction rep(fragment) {\n  fragment.in.addTransition(EPSILON, fragment.out);\n  fragment.out.addTransition(EPSILON, fragment.in);\n  return fragment;\n}\n\n/**\n * Optimized Plus: just adds ε-transitions from\n * the output to the input.\n */\nfunction plusRep(fragment) {\n  fragment.out.addTransition(EPSILON, fragment.in);\n  return fragment;\n}\n\n/**\n * Optimized ? repetition: just adds ε-transitions from\n * the input to the output.\n */\nfunction questionRep(fragment) {\n  fragment.in.addTransition(EPSILON, fragment.out);\n  return fragment;\n}\n\nmodule.exports = {\n  alt: alt,\n  char: char,\n  e: e,\n  or: or,\n  rep: rep,\n  repExplicit: repExplicit,\n  plusRep: plusRep,\n  questionRep: questionRep\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar parser = require('../../../parser');\n\nvar _require = require('./builders'),\n    alt = _require.alt,\n    char = _require.char,\n    or = _require.or,\n    rep = _require.rep,\n    plusRep = _require.plusRep,\n    questionRep = _require.questionRep;\n\n/**\n * Helper `gen` function calls node type handler.\n */\n\n\nfunction gen(node) {\n  if (node && !generator[node.type]) {\n    throw new Error(node.type + ' is not supported in NFA/DFA interpreter.');\n  }\n\n  return node ? generator[node.type](node) : '';\n}\n\n/**\n * AST handler.\n */\nvar generator = {\n  RegExp: function RegExp(node) {\n    if (node.flags !== '') {\n      throw new Error('NFA/DFA: Flags are not supported yet.');\n    }\n\n    return gen(node.body);\n  },\n  Alternative: function Alternative(node) {\n    var fragments = (node.expressions || []).map(gen);\n    return alt.apply(undefined, _toConsumableArray(fragments));\n  },\n  Disjunction: function Disjunction(node) {\n    return or(gen(node.left), gen(node.right));\n  },\n  Repetition: function Repetition(node) {\n    switch (node.quantifier.kind) {\n      case '*':\n        return rep(gen(node.expression));\n      case '+':\n        return plusRep(gen(node.expression));\n      case '?':\n        return questionRep(gen(node.expression));\n      default:\n        throw new Error('Unknown repeatition: ' + node.quantifier.kind + '.');\n    }\n  },\n  Char: function Char(node) {\n    if (node.kind !== 'simple') {\n      throw new Error('NFA/DFA: Only simple chars are supported yet.');\n    }\n\n    return char(node.value);\n  },\n  Group: function Group(node) {\n    return gen(node.expression);\n  }\n};\n\nmodule.exports = {\n  /**\n   * Builds an NFA from the passed regexp.\n   */\n  build: function build(regexp) {\n    var ast = regexp;\n\n    if (regexp instanceof RegExp) {\n      regexp = '' + regexp;\n    }\n\n    if (typeof regexp === 'string') {\n      ast = parser.parse(regexp, {\n        captureLocations: true\n      });\n    }\n\n    return gen(ast);\n  }\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar State = require('../state');\n\nvar _require = require('../special-symbols'),\n    EPSILON = _require.EPSILON;\n\n/**\n * NFA state.\n *\n * Allows nondeterministic transitions to several states on the\n * same symbol, and also epsilon-transitions.\n */\n\n\nvar NFAState = function (_State) {\n  _inherits(NFAState, _State);\n\n  function NFAState() {\n    _classCallCheck(this, NFAState);\n\n    return _possibleConstructorReturn(this, (NFAState.__proto__ || Object.getPrototypeOf(NFAState)).apply(this, arguments));\n  }\n\n  _createClass(NFAState, [{\n    key: 'matches',\n\n\n    /**\n     * Whether this state matches a string.\n     *\n     * We maintain set of visited epsilon-states to avoid infinite loops\n     * when an epsilon-transition goes eventually to itself.\n     *\n     * NOTE: this function is rather \"educational\", since we use DFA for strings\n     * matching. DFA is built on top of NFA, and uses fast transition table.\n     */\n    value: function matches(string) {\n      var visited = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Set();\n\n      // An epsilon-state has been visited, stop to avoid infinite loop.\n      if (visited.has(this)) {\n        return false;\n      }\n\n      visited.add(this);\n\n      // No symbols left..\n      if (string.length === 0) {\n        // .. and we're in the accepting state.\n        if (this.accepting) {\n          return true;\n        }\n\n        // Check if we can reach any accepting state from\n        // on the epsilon transitions.\n        var _iteratorNormalCompletion = true;\n        var _didIteratorError = false;\n        var _iteratorError = undefined;\n\n        try {\n          for (var _iterator = this.getTransitionsOnSymbol(EPSILON)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n            var nextState = _step.value;\n\n            if (nextState.matches('', visited)) {\n              return true;\n            }\n          }\n        } catch (err) {\n          _didIteratorError = true;\n          _iteratorError = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion && _iterator.return) {\n              _iterator.return();\n            }\n          } finally {\n            if (_didIteratorError) {\n              throw _iteratorError;\n            }\n          }\n        }\n\n        return false;\n      }\n\n      // Else, we get some symbols.\n      var symbol = string[0];\n      var rest = string.slice(1);\n\n      var symbolTransitions = this.getTransitionsOnSymbol(symbol);\n      var _iteratorNormalCompletion2 = true;\n      var _didIteratorError2 = false;\n      var _iteratorError2 = undefined;\n\n      try {\n        for (var _iterator2 = symbolTransitions[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n          var _nextState = _step2.value;\n\n          if (_nextState.matches(rest)) {\n            return true;\n          }\n        }\n\n        // If we couldn't match on symbol, check still epsilon-transitions\n        // without consuming the symbol (i.e. continue from `string`, not `rest`).\n      } catch (err) {\n        _didIteratorError2 = true;\n        _iteratorError2 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion2 && _iterator2.return) {\n            _iterator2.return();\n          }\n        } finally {\n          if (_didIteratorError2) {\n            throw _iteratorError2;\n          }\n        }\n      }\n\n      var _iteratorNormalCompletion3 = true;\n      var _didIteratorError3 = false;\n      var _iteratorError3 = undefined;\n\n      try {\n        for (var _iterator3 = this.getTransitionsOnSymbol(EPSILON)[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n          var _nextState2 = _step3.value;\n\n          if (_nextState2.matches(string, visited)) {\n            return true;\n          }\n        }\n      } catch (err) {\n        _didIteratorError3 = true;\n        _iteratorError3 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion3 && _iterator3.return) {\n            _iterator3.return();\n          }\n        } finally {\n          if (_didIteratorError3) {\n            throw _iteratorError3;\n          }\n        }\n      }\n\n      return false;\n    }\n\n    /**\n     * Returns an ε-closure for this state:\n     * self + all states following ε-transitions.\n     */\n\n  }, {\n    key: 'getEpsilonClosure',\n    value: function getEpsilonClosure() {\n      var _this2 = this;\n\n      if (!this._epsilonClosure) {\n        (function () {\n          var epsilonTransitions = _this2.getTransitionsOnSymbol(EPSILON);\n          var closure = _this2._epsilonClosure = new Set();\n          closure.add(_this2);\n          var _iteratorNormalCompletion4 = true;\n          var _didIteratorError4 = false;\n          var _iteratorError4 = undefined;\n\n          try {\n            for (var _iterator4 = epsilonTransitions[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n              var nextState = _step4.value;\n\n              if (!closure.has(nextState)) {\n                closure.add(nextState);\n                var nextClosure = nextState.getEpsilonClosure();\n                nextClosure.forEach(function (state) {\n                  return closure.add(state);\n                });\n              }\n            }\n          } catch (err) {\n            _didIteratorError4 = true;\n            _iteratorError4 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion4 && _iterator4.return) {\n                _iterator4.return();\n              }\n            } finally {\n              if (_didIteratorError4) {\n                throw _iteratorError4;\n              }\n            }\n          }\n        })();\n      }\n\n      return this._epsilonClosure;\n    }\n  }]);\n\n  return NFAState;\n}(State);\n\nmodule.exports = NFAState;","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar _require = require('../special-symbols'),\n    EPSILON = _require.EPSILON,\n    EPSILON_CLOSURE = _require.EPSILON_CLOSURE;\n\n/**\n * NFA fragment.\n *\n * NFA sub-fragments can be combined to a larger NFAs building\n * the resulting machine. Combining the fragments is done by patching\n * edges of the in- and out-states.\n *\n * 2-states implementation, `in`, and `out`. Eventually all transitions\n * go to the same `out`, which can further be connected via ε-transition\n * with other fragment.\n */\n\n\nvar NFA = function () {\n  function NFA(inState, outState) {\n    _classCallCheck(this, NFA);\n\n    this.in = inState;\n    this.out = outState;\n  }\n\n  /**\n   * Tries to recognize a string based on this NFA fragment.\n   */\n\n\n  _createClass(NFA, [{\n    key: 'matches',\n    value: function matches(string) {\n      return this.in.matches(string);\n    }\n\n    /**\n     * Returns an alphabet for this NFA.\n     */\n\n  }, {\n    key: 'getAlphabet',\n    value: function getAlphabet() {\n      if (!this._alphabet) {\n        this._alphabet = new Set();\n        var table = this.getTransitionTable();\n        for (var state in table) {\n          var transitions = table[state];\n          for (var symbol in transitions) {\n            if (symbol !== EPSILON_CLOSURE) {\n              this._alphabet.add(symbol);\n            }\n          }\n        }\n      }\n      return this._alphabet;\n    }\n\n    /**\n     * Returns set of accepting states.\n     */\n\n  }, {\n    key: 'getAcceptingStates',\n    value: function getAcceptingStates() {\n      if (!this._acceptingStates) {\n        // States are determined during table construction.\n        this.getTransitionTable();\n      }\n      return this._acceptingStates;\n    }\n\n    /**\n     * Returns accepting state numbers.\n     */\n\n  }, {\n    key: 'getAcceptingStateNumbers',\n    value: function getAcceptingStateNumbers() {\n      if (!this._acceptingStateNumbers) {\n        this._acceptingStateNumbers = new Set();\n        var _iteratorNormalCompletion = true;\n        var _didIteratorError = false;\n        var _iteratorError = undefined;\n\n        try {\n          for (var _iterator = this.getAcceptingStates()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n            var acceptingState = _step.value;\n\n            this._acceptingStateNumbers.add(acceptingState.number);\n          }\n        } catch (err) {\n          _didIteratorError = true;\n          _iteratorError = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion && _iterator.return) {\n              _iterator.return();\n            }\n          } finally {\n            if (_didIteratorError) {\n              throw _iteratorError;\n            }\n          }\n        }\n      }\n      return this._acceptingStateNumbers;\n    }\n\n    /**\n     * Builds and returns transition table.\n     */\n\n  }, {\n    key: 'getTransitionTable',\n    value: function getTransitionTable() {\n      var _this = this;\n\n      if (!this._transitionTable) {\n        this._transitionTable = {};\n        this._acceptingStates = new Set();\n\n        var visited = new Set();\n        var symbols = new Set();\n\n        var visitState = function visitState(state) {\n          if (visited.has(state)) {\n            return;\n          }\n\n          visited.add(state);\n          state.number = visited.size;\n          _this._transitionTable[state.number] = {};\n\n          if (state.accepting) {\n            _this._acceptingStates.add(state);\n          }\n\n          var transitions = state.getTransitions();\n\n          var _iteratorNormalCompletion2 = true;\n          var _didIteratorError2 = false;\n          var _iteratorError2 = undefined;\n\n          try {\n            for (var _iterator2 = transitions[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n              var _ref = _step2.value;\n\n              var _ref2 = _slicedToArray(_ref, 2);\n\n              var symbol = _ref2[0];\n              var symbolTransitions = _ref2[1];\n\n              var combinedState = [];\n              symbols.add(symbol);\n              var _iteratorNormalCompletion3 = true;\n              var _didIteratorError3 = false;\n              var _iteratorError3 = undefined;\n\n              try {\n                for (var _iterator3 = symbolTransitions[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n                  var nextState = _step3.value;\n\n                  visitState(nextState);\n                  combinedState.push(nextState.number);\n                }\n              } catch (err) {\n                _didIteratorError3 = true;\n                _iteratorError3 = err;\n              } finally {\n                try {\n                  if (!_iteratorNormalCompletion3 && _iterator3.return) {\n                    _iterator3.return();\n                  }\n                } finally {\n                  if (_didIteratorError3) {\n                    throw _iteratorError3;\n                  }\n                }\n              }\n\n              _this._transitionTable[state.number][symbol] = combinedState;\n            }\n          } catch (err) {\n            _didIteratorError2 = true;\n            _iteratorError2 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion2 && _iterator2.return) {\n                _iterator2.return();\n              }\n            } finally {\n              if (_didIteratorError2) {\n                throw _iteratorError2;\n              }\n            }\n          }\n        };\n\n        // Traverse the graph starting from the `in`.\n        visitState(this.in);\n\n        // Append epsilon-closure column.\n        visited.forEach(function (state) {\n          delete _this._transitionTable[state.number][EPSILON];\n          _this._transitionTable[state.number][EPSILON_CLOSURE] = [].concat(_toConsumableArray(state.getEpsilonClosure())).map(function (s) {\n            return s.number;\n          });\n        });\n      }\n\n      return this._transitionTable;\n    }\n  }]);\n\n  return NFA;\n}();\n\nmodule.exports = NFA;","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * Epsilon, the empty string.\n */\n\nvar EPSILON = 'ε';\n\n/**\n * Epsilon-closure.\n */\nvar EPSILON_CLOSURE = EPSILON + '*';\n\nmodule.exports = {\n  EPSILON: EPSILON,\n  EPSILON_CLOSURE: EPSILON_CLOSURE\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * A generic FA State class (base for NFA and DFA).\n *\n * Maintains the transition map, and the flag whether\n * the state is accepting.\n */\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar State = function () {\n  function State() {\n    var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n        _ref$accepting = _ref.accepting,\n        accepting = _ref$accepting === undefined ? false : _ref$accepting;\n\n    _classCallCheck(this, State);\n\n    /**\n     * Outgoing transitions to other states.\n     */\n    this._transitions = new Map();\n\n    /**\n     * Whether the state is accepting.\n     */\n    this.accepting = accepting;\n  }\n\n  /**\n   * Returns transitions for this state.\n   */\n\n\n  _createClass(State, [{\n    key: 'getTransitions',\n    value: function getTransitions() {\n      return this._transitions;\n    }\n\n    /**\n     * Creates a transition on symbol.\n     */\n\n  }, {\n    key: 'addTransition',\n    value: function addTransition(symbol, toState) {\n      this.getTransitionsOnSymbol(symbol).add(toState);\n      return this;\n    }\n\n    /**\n     * Returns transitions set on symbol.\n     */\n\n  }, {\n    key: 'getTransitionsOnSymbol',\n    value: function getTransitionsOnSymbol(symbol) {\n      var transitions = this._transitions.get(symbol);\n\n      if (!transitions) {\n        transitions = new Set();\n        this._transitions.set(symbol, transitions);\n      }\n\n      return transitions;\n    }\n  }]);\n\n  return State;\n}();\n\nmodule.exports = State;","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nvar clone = require('../utils/clone');\nvar parser = require('../parser');\nvar transform = require('../transform');\nvar optimizationTransforms = require('./transforms');\n\nmodule.exports = {\n  /**\n   * Optimizer transforms a regular expression into an optimized version,\n   * replacing some sub-expressions with their idiomatic patterns.\n   *\n   * @param string | RegExp | AST - a regexp to optimize.\n   *\n   * @return TransformResult - an optimized regexp.\n   *\n   * Example:\n   *\n   *   /[a-zA-Z_0-9][a-zA-Z_0-9]*\\e{1,}/\n   *\n   * Optimized to:\n   *\n   *   /\\w+e+/\n   */\n  optimize: function optimize(regexp) {\n    var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n        _ref$whitelist = _ref.whitelist,\n        whitelist = _ref$whitelist === undefined ? [] : _ref$whitelist,\n        _ref$blacklist = _ref.blacklist,\n        blacklist = _ref$blacklist === undefined ? [] : _ref$blacklist;\n\n    var transformsRaw = whitelist.length > 0 ? whitelist : Array.from(optimizationTransforms.keys());\n\n    var transformToApply = transformsRaw.filter(function (transform) {\n      return !blacklist.includes(transform);\n    });\n\n    var ast = regexp;\n    if (regexp instanceof RegExp) {\n      regexp = '' + regexp;\n    }\n\n    if (typeof regexp === 'string') {\n      ast = parser.parse(regexp);\n    }\n\n    var result = new transform.TransformResult(ast);\n    var prevResultString = void 0;\n\n    do {\n      // Get a copy of the current state here so\n      // we can compare it with the state at the\n      // end of the loop.\n      prevResultString = result.toString();\n      ast = clone(result.getAST());\n\n      transformToApply.forEach(function (transformName) {\n        if (!optimizationTransforms.has(transformName)) {\n          throw new Error('Unknown optimization-transform: ' + transformName + '. ' + 'Available transforms are: ' + Array.from(optimizationTransforms.keys()).join(', '));\n        }\n\n        var transformer = optimizationTransforms.get(transformName);\n\n        // Don't override result just yet since we\n        // might want to rollback the transform\n        var newResult = transform.transform(ast, transformer);\n\n        if (newResult.toString() !== result.toString()) {\n          if (newResult.toString().length <= result.toString().length) {\n            result = newResult;\n          } else {\n            // Result has changed but is not shorter:\n            // restore ast to its previous state.\n\n            ast = clone(result.getAST());\n          }\n        }\n      });\n\n      // Keep running the optimizer until it stops\n      // making any change to the regexp.\n    } while (result.toString() !== prevResultString);\n\n    return result;\n  }\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nvar UPPER_A_CP = 'A'.codePointAt(0);\nvar UPPER_Z_CP = 'Z'.codePointAt(0);\n/**\n * Transforms case-insensitive regexp to lowercase\n *\n * /AaBbÏ/i -> /aabbï/i\n */\nmodule.exports = {\n  _AZClassRanges: null,\n  _hasUFlag: false,\n  init: function init(ast) {\n    this._AZClassRanges = new Set();\n    this._hasUFlag = ast.flags.includes('u');\n  },\n  shouldRun: function shouldRun(ast) {\n    return ast.flags.includes('i');\n  },\n  Char: function Char(path) {\n    var node = path.node,\n        parent = path.parent;\n\n    if (isNaN(node.codePoint)) {\n      return;\n    }\n\n    // Engine support for case-insensitive matching without the u flag\n    // for characters above \\u1000 does not seem reliable.\n    if (!this._hasUFlag && node.codePoint >= 0x1000) {\n      return;\n    }\n\n    if (parent.type === 'ClassRange') {\n      // The only class ranges we handle must be inside A-Z.\n      // After the `from` char is processed, the isAZClassRange test\n      // will be false, so we use a Set to keep track of parents and\n      // process the `to` char.\n      if (!this._AZClassRanges.has(parent) && !isAZClassRange(parent)) {\n        return;\n      }\n      this._AZClassRanges.add(parent);\n    }\n\n    var lower = node.symbol.toLowerCase();\n    if (lower !== node.symbol) {\n      node.value = displaySymbolAsValue(lower, node);\n      node.symbol = lower;\n      node.codePoint = lower.codePointAt(0);\n    }\n  }\n};\n\nfunction isAZClassRange(classRange) {\n  var from = classRange.from,\n      to = classRange.to;\n  // A-Z\n\n  return from.codePoint >= UPPER_A_CP && from.codePoint <= UPPER_Z_CP && to.codePoint >= UPPER_A_CP && to.codePoint <= UPPER_Z_CP;\n}\n\nfunction displaySymbolAsValue(symbol, node) {\n  var codePoint = symbol.codePointAt(0);\n  if (node.kind === 'decimal') {\n    return '\\\\' + codePoint;\n  }\n  if (node.kind === 'oct') {\n    return '\\\\0' + codePoint.toString(8);\n  }\n  if (node.kind === 'hex') {\n    return '\\\\x' + codePoint.toString(16);\n  }\n  if (node.kind === 'unicode') {\n    if (node.isSurrogatePair) {\n      var _getSurrogatePairFrom = getSurrogatePairFromCodePoint(codePoint),\n          lead = _getSurrogatePairFrom.lead,\n          trail = _getSurrogatePairFrom.trail;\n\n      return '\\\\u' + '0'.repeat(4 - lead.length) + lead + '\\\\u' + '0'.repeat(4 - trail.length) + trail;\n    } else if (node.value.includes('{')) {\n      return '\\\\u{' + codePoint.toString(16) + '}';\n    } else {\n      var code = codePoint.toString(16);\n      return '\\\\u' + '0'.repeat(4 - code.length) + code;\n    }\n  }\n  // simple\n  return symbol;\n}\n\n/**\n * Converts a code point to a surrogate pair.\n * Conversion algorithm is taken from The Unicode Standard 3.0 Section 3.7\n * (https://www.unicode.org/versions/Unicode3.0.0/ch03.pdf)\n * @param {number} codePoint - Between 0x10000 and 0x10ffff\n * @returns {{lead: string, trail: string}}\n */\nfunction getSurrogatePairFromCodePoint(codePoint) {\n  var lead = Math.floor((codePoint - 0x10000) / 0x400) + 0xd800;\n  var trail = (codePoint - 0x10000) % 0x400 + 0xdc00;\n  return {\n    lead: lead.toString(16),\n    trail: trail.toString(16)\n  };\n}","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * A regexp-tree plugin to merge class ranges.\n *\n * [a-ec] -> [a-e]\n * [a-ec-e] -> [a-e]\n * [\\w\\da-f] -> [\\w]\n * [abcdef] -> [a-f]\n */\n\nmodule.exports = {\n  _hasIUFlags: false,\n  init: function init(ast) {\n    this._hasIUFlags = ast.flags.includes('i') && ast.flags.includes('u');\n  },\n  CharacterClass: function CharacterClass(path) {\n    var node = path.node;\n\n    var expressions = node.expressions;\n\n    var metas = [];\n    // Extract metas\n    expressions.forEach(function (expression) {\n      if (isMeta(expression)) {\n        metas.push(expression.value);\n      }\n    });\n\n    expressions.sort(sortCharClass);\n\n    for (var i = 0; i < expressions.length; i++) {\n      var expression = expressions[i];\n      if (fitsInMetas(expression, metas, this._hasIUFlags) || combinesWithPrecedingClassRange(expression, expressions[i - 1]) || combinesWithFollowingClassRange(expression, expressions[i + 1])) {\n        expressions.splice(i, 1);\n        i--;\n      } else {\n        var nbMergedChars = charCombinesWithPrecedingChars(expression, i, expressions);\n        expressions.splice(i - nbMergedChars + 1, nbMergedChars);\n        i -= nbMergedChars;\n      }\n    }\n  }\n};\n\n/**\n * Sorts expressions in char class in the following order:\n * - meta chars, ordered alphabetically by value\n * - chars (except `control` kind) and class ranges, ordered alphabetically (`from` char is used for class ranges)\n * - if ambiguous, class range comes before char\n * - if ambiguous between two class ranges, orders alphabetically by `to` char\n * - control chars, ordered alphabetically by value\n * @param {Object} a - Left Char or ClassRange node\n * @param {Object} b - Right Char or ClassRange node\n * @returns {number}\n */\nfunction sortCharClass(a, b) {\n  var aValue = getSortValue(a);\n  var bValue = getSortValue(b);\n\n  if (aValue === bValue) {\n    // We want ClassRange before Char\n    // [bb-d] -> [b-db]\n    if (a.type === 'ClassRange' && b.type !== 'ClassRange') {\n      return -1;\n    }\n    if (b.type === 'ClassRange' && a.type !== 'ClassRange') {\n      return 1;\n    }\n    if (a.type === 'ClassRange' && b.type === 'ClassRange') {\n      return getSortValue(a.to) - getSortValue(b.to);\n    }\n    if (isMeta(a) && isMeta(b) || isControl(a) && isControl(b)) {\n      return a.value < b.value ? -1 : 1;\n    }\n  }\n  return aValue - bValue;\n}\n\n/**\n * @param {Object} expression - Char or ClassRange node\n * @returns {number}\n */\nfunction getSortValue(expression) {\n  if (expression.type === 'Char') {\n    if (expression.value === '-') {\n      return Infinity;\n    }\n    if (expression.kind === 'control') {\n      return Infinity;\n    }\n    if (expression.kind === 'meta' && isNaN(expression.codePoint)) {\n      return -1;\n    }\n    return expression.codePoint;\n  }\n  // ClassRange\n  return expression.from.codePoint;\n}\n\n/**\n * Checks if a node is a meta char from the set \\d\\w\\s\\D\\W\\S\n * @param {Object} expression - Char or ClassRange node\n * @param {?string} value\n * @returns {boolean}\n */\nfunction isMeta(expression) {\n  var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n  return expression.type === 'Char' && expression.kind === 'meta' && (value ? expression.value === value : /^\\\\[dws]$/i.test(expression.value));\n}\n\n/**\n * @param {Object} expression - Char or ClassRange node\n * @returns {boolean}\n */\nfunction isControl(expression) {\n  return expression.type === 'Char' && expression.kind === 'control';\n}\n\n/**\n * @param {Object} expression - Char or ClassRange node\n * @param {string[]} metas - Array of meta chars, e.g. [\"\\\\w\", \"\\\\s\"]\n * @param {boolean} hasIUFlags\n * @returns {boolean}\n */\nfunction fitsInMetas(expression, metas, hasIUFlags) {\n  for (var i = 0; i < metas.length; i++) {\n    if (fitsInMeta(expression, metas[i], hasIUFlags)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * @param {Object} expression - Char or ClassRange node\n * @param {string} meta - e.g. \"\\\\w\"\n * @param {boolean} hasIUFlags\n * @returns {boolean}\n */\nfunction fitsInMeta(expression, meta, hasIUFlags) {\n  if (expression.type === 'ClassRange') {\n    return fitsInMeta(expression.from, meta, hasIUFlags) && fitsInMeta(expression.to, meta, hasIUFlags);\n  }\n\n  // Special cases:\n  // \\S contains \\w and \\d\n  if (meta === '\\\\S' && (isMeta(expression, '\\\\w') || isMeta(expression, '\\\\d'))) {\n    return true;\n  }\n  // \\D contains \\W and \\s\n  if (meta === '\\\\D' && (isMeta(expression, '\\\\W') || isMeta(expression, '\\\\s'))) {\n    return true;\n  }\n  // \\w contains \\d\n  if (meta === '\\\\w' && isMeta(expression, '\\\\d')) {\n    return true;\n  }\n  // \\W contains \\s\n  if (meta === '\\\\W' && isMeta(expression, '\\\\s')) {\n    return true;\n  }\n\n  if (expression.type !== 'Char' || isNaN(expression.codePoint)) {\n    return false;\n  }\n\n  if (meta === '\\\\s') {\n    return fitsInMetaS(expression);\n  }\n  if (meta === '\\\\S') {\n    return !fitsInMetaS(expression);\n  }\n  if (meta === '\\\\d') {\n    return fitsInMetaD(expression);\n  }\n  if (meta === '\\\\D') {\n    return !fitsInMetaD(expression);\n  }\n  if (meta === '\\\\w') {\n    return fitsInMetaW(expression, hasIUFlags);\n  }\n  if (meta === '\\\\W') {\n    return !fitsInMetaW(expression, hasIUFlags);\n  }\n  return false;\n}\n\n/**\n * @param {Object} expression - Char node with codePoint\n * @returns {boolean}\n */\nfunction fitsInMetaS(expression) {\n  return expression.codePoint === 0x0009 || // \\t\n  expression.codePoint === 0x000a || // \\n\n  expression.codePoint === 0x000b || // \\v\n  expression.codePoint === 0x000c || // \\f\n  expression.codePoint === 0x000d || // \\r\n  expression.codePoint === 0x0020 || // space\n  expression.codePoint === 0x00a0 || // nbsp\n  expression.codePoint === 0x1680 || // part of Zs\n  expression.codePoint >= 0x2000 && expression.codePoint <= 0x200a || // part of Zs\n  expression.codePoint === 0x2028 || // line separator\n  expression.codePoint === 0x2029 || // paragraph separator\n  expression.codePoint === 0x202f || // part of Zs\n  expression.codePoint === 0x205f || // part of Zs\n  expression.codePoint === 0x3000 || // part of Zs\n  expression.codePoint === 0xfeff; // zwnbsp\n}\n\n/**\n * @param {Object} expression - Char node with codePoint\n * @returns {boolean}\n */\nfunction fitsInMetaD(expression) {\n  return expression.codePoint >= 0x30 && expression.codePoint <= 0x39; // 0-9\n}\n\n/**\n * @param {Object} expression - Char node with codePoint\n * @param {boolean} hasIUFlags\n * @returns {boolean}\n */\nfunction fitsInMetaW(expression, hasIUFlags) {\n  return fitsInMetaD(expression) || expression.codePoint >= 0x41 && expression.codePoint <= 0x5a || // A-Z\n  expression.codePoint >= 0x61 && expression.codePoint <= 0x7a || // a-z\n  expression.value === '_' || hasIUFlags && (expression.codePoint === 0x017f || expression.codePoint === 0x212a);\n}\n\n/**\n * @param {Object} expression - Char or ClassRange node\n * @param {Object} classRange - Char or ClassRange node\n * @returns {boolean}\n */\nfunction combinesWithPrecedingClassRange(expression, classRange) {\n  if (classRange && classRange.type === 'ClassRange') {\n    if (fitsInClassRange(expression, classRange)) {\n      // [a-gc] -> [a-g]\n      // [a-gc-e] -> [a-g]\n      return true;\n    } else if (\n    // We only want \\w chars or char codes to keep readability\n    isMetaWCharOrCode(expression) && classRange.to.codePoint === expression.codePoint - 1) {\n      // [a-de] -> [a-e]\n      classRange.to = expression;\n      return true;\n    } else if (expression.type === 'ClassRange' && expression.from.codePoint <= classRange.to.codePoint + 1 && expression.to.codePoint >= classRange.from.codePoint - 1) {\n      // [a-db-f] -> [a-f]\n      // [b-fa-d] -> [a-f]\n      // [a-cd-f] -> [a-f]\n      if (expression.from.codePoint < classRange.from.codePoint) {\n        classRange.from = expression.from;\n      }\n      if (expression.to.codePoint > classRange.to.codePoint) {\n        classRange.to = expression.to;\n      }\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * @param {Object} expression - Char or ClassRange node\n * @param {Object} classRange - Char or ClassRange node\n * @returns {boolean}\n */\nfunction combinesWithFollowingClassRange(expression, classRange) {\n  if (classRange && classRange.type === 'ClassRange') {\n    // Considering the elements were ordered alphabetically,\n    // there is only one case to handle\n    // [ab-e] -> [a-e]\n    if (\n    // We only want \\w chars or char codes to keep readability\n    isMetaWCharOrCode(expression) && classRange.from.codePoint === expression.codePoint + 1) {\n      classRange.from = expression;\n      return true;\n    }\n  }\n\n  return false;\n}\n\n/**\n * @param {Object} expression - Char or ClassRange node\n * @param {Object} classRange - ClassRange node\n * @returns {boolean}\n */\nfunction fitsInClassRange(expression, classRange) {\n  if (expression.type === 'Char' && isNaN(expression.codePoint)) {\n    return false;\n  }\n  if (expression.type === 'ClassRange') {\n    return fitsInClassRange(expression.from, classRange) && fitsInClassRange(expression.to, classRange);\n  }\n  return expression.codePoint >= classRange.from.codePoint && expression.codePoint <= classRange.to.codePoint;\n}\n\n/**\n * @param {Object} expression - Char or ClassRange node\n * @param {Number} index\n * @param {Object[]} expressions - expressions in CharClass\n * @returns {number} - Number of characters combined with expression\n */\nfunction charCombinesWithPrecedingChars(expression, index, expressions) {\n  // We only want \\w chars or char codes to keep readability\n  if (!isMetaWCharOrCode(expression)) {\n    return 0;\n  }\n  var nbMergedChars = 0;\n  while (index > 0) {\n    var currentExpression = expressions[index];\n    var precedingExpresion = expressions[index - 1];\n    if (isMetaWCharOrCode(precedingExpresion) && precedingExpresion.codePoint === currentExpression.codePoint - 1) {\n      nbMergedChars++;\n      index--;\n    } else {\n      break;\n    }\n  }\n\n  if (nbMergedChars > 1) {\n    expressions[index] = {\n      type: 'ClassRange',\n      from: expressions[index],\n      to: expression\n    };\n    return nbMergedChars;\n  }\n  return 0;\n}\n\nfunction isMetaWCharOrCode(expression) {\n  return expression && expression.type === 'Char' && !isNaN(expression.codePoint) && (fitsInMetaW(expression, false) || expression.kind === 'unicode' || expression.kind === 'hex' || expression.kind === 'oct' || expression.kind === 'decimal');\n}","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * A regexp-tree plugin to simplify character classes\n * spanning only one or two chars.\n *\n * [a-a] -> [a]\n * [a-b] -> [ab]\n */\n\nmodule.exports = {\n  ClassRange: function ClassRange(path) {\n    var node = path.node;\n\n\n    if (node.from.codePoint === node.to.codePoint) {\n\n      path.replace(node.from);\n    } else if (node.from.codePoint === node.to.codePoint - 1) {\n\n      path.getParent().insertChildAt(node.to, path.index + 1);\n      path.replace(node.from);\n    }\n  }\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * A regexp-tree plugin to remove duplicates from character classes.\n */\n\nmodule.exports = {\n  CharacterClass: function CharacterClass(path) {\n    var node = path.node;\n\n    var sources = {};\n\n    for (var i = 0; i < node.expressions.length; i++) {\n      var childPath = path.getChild(i);\n      var source = childPath.jsonEncode();\n\n      if (sources.hasOwnProperty(source)) {\n        childPath.remove();\n\n        // Since we remove the current node.\n        // TODO: make it simpler for users with a method.\n        i--;\n      }\n\n      sources[source] = true;\n    }\n  }\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * A regexp-tree plugin to replace standard character classes with\n * their meta symbols equivalents.\n */\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nmodule.exports = {\n  _hasIFlag: false,\n  _hasUFlag: false,\n  init: function init(ast) {\n    this._hasIFlag = ast.flags.includes('i');\n    this._hasUFlag = ast.flags.includes('u');\n  },\n  CharacterClass: function CharacterClass(path) {\n    // [0-9] -> \\d\n    rewriteNumberRanges(path);\n\n    // [a-zA-Z_0-9] -> \\w\n    rewriteWordRanges(path, this._hasIFlag, this._hasUFlag);\n\n    // [ \\f\\n\\r\\t\\v\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff] -> \\s\n    rewriteWhitespaceRanges(path);\n  }\n};\n\n/**\n * Rewrites number ranges: [0-9] -> \\d\n */\nfunction rewriteNumberRanges(path) {\n  var node = path.node;\n\n\n  node.expressions.forEach(function (expression, i) {\n    if (isFullNumberRange(expression)) {\n      path.getChild(i).replace({\n        type: 'Char',\n        value: '\\\\d',\n        kind: 'meta'\n      });\n    }\n  });\n}\n\n/**\n * Rewrites word ranges: [a-zA-Z_0-9] -> \\w\n * Thus, the ranges may go in any order, and other symbols/ranges\n * are kept untouched, e.g. [a-z_\\dA-Z$] -> [\\w$]\n */\nfunction rewriteWordRanges(path, hasIFlag, hasUFlag) {\n  var node = path.node;\n\n\n  var numberPath = null;\n  var lowerCasePath = null;\n  var upperCasePath = null;\n  var underscorePath = null;\n  var u017fPath = null;\n  var u212aPath = null;\n\n  node.expressions.forEach(function (expression, i) {\n    // \\d\n    if (isMetaChar(expression, '\\\\d')) {\n      numberPath = path.getChild(i);\n    }\n\n    // a-z\n    else if (isLowerCaseRange(expression)) {\n        lowerCasePath = path.getChild(i);\n      }\n\n      // A-Z\n      else if (isUpperCaseRange(expression)) {\n          upperCasePath = path.getChild(i);\n        }\n\n        // _\n        else if (isUnderscore(expression)) {\n            underscorePath = path.getChild(i);\n          } else if (hasIFlag && hasUFlag && isCodePoint(expression, 0x017f)) {\n            u017fPath = path.getChild(i);\n          } else if (hasIFlag && hasUFlag && isCodePoint(expression, 0x212a)) {\n            u212aPath = path.getChild(i);\n          }\n  });\n\n  // If we found the whole pattern, replace it.\n  if (numberPath && (lowerCasePath && upperCasePath || hasIFlag && (lowerCasePath || upperCasePath)) && underscorePath && (!hasUFlag || !hasIFlag || u017fPath && u212aPath)) {\n    // Put \\w in place of \\d.\n    numberPath.replace({\n      type: 'Char',\n      value: '\\\\w',\n      kind: 'meta'\n    });\n\n    // Other paths are removed.\n    if (lowerCasePath) {\n      lowerCasePath.remove();\n    }\n    if (upperCasePath) {\n      upperCasePath.remove();\n    }\n    underscorePath.remove();\n    if (u017fPath) {\n      u017fPath.remove();\n    }\n    if (u212aPath) {\n      u212aPath.remove();\n    }\n  }\n}\n\n/**\n * Rewrites whitespace ranges: [ \\f\\n\\r\\t\\v\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff] -> \\s.\n */\nvar whitespaceRangeTests = [function (node) {\n  return isChar(node, ' ');\n}].concat(_toConsumableArray(['\\\\f', '\\\\n', '\\\\r', '\\\\t', '\\\\v'].map(function (char) {\n  return function (node) {\n    return isMetaChar(node, char);\n  };\n})), _toConsumableArray([0x00a0, 0x1680, 0x2028, 0x2029, 0x202f, 0x205f, 0x3000, 0xfeff].map(function (codePoint) {\n  return function (node) {\n    return isCodePoint(node, codePoint);\n  };\n})), [function (node) {\n  return node.type === 'ClassRange' && isCodePoint(node.from, 0x2000) && isCodePoint(node.to, 0x200a);\n}]);\n\nfunction rewriteWhitespaceRanges(path) {\n  var node = path.node;\n\n\n  if (node.expressions.length < whitespaceRangeTests.length || !whitespaceRangeTests.every(function (test) {\n    return node.expressions.some(function (expression) {\n      return test(expression);\n    });\n  })) {\n    return;\n  }\n\n  // If we found the whole pattern, replace it.\n\n  // Put \\s in place of \\n.\n  var nNode = node.expressions.find(function (expression) {\n    return isMetaChar(expression, '\\\\n');\n  });\n  nNode.value = '\\\\s';\n  nNode.symbol = undefined;\n  nNode.codePoint = NaN;\n\n  // Other paths are removed.\n  node.expressions.map(function (expression, i) {\n    return whitespaceRangeTests.some(function (test) {\n      return test(expression);\n    }) ? path.getChild(i) : undefined;\n  }).filter(Boolean).forEach(function (path) {\n    return path.remove();\n  });\n}\n\nfunction isFullNumberRange(node) {\n  return node.type === 'ClassRange' && node.from.value === '0' && node.to.value === '9';\n}\n\nfunction isChar(node, value) {\n  var kind = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'simple';\n\n  return node.type === 'Char' && node.value === value && node.kind === kind;\n}\n\nfunction isMetaChar(node, value) {\n  return isChar(node, value, 'meta');\n}\n\nfunction isLowerCaseRange(node) {\n  return node.type === 'ClassRange' && node.from.value === 'a' && node.to.value === 'z';\n}\n\nfunction isUpperCaseRange(node) {\n  return node.type === 'ClassRange' && node.from.value === 'A' && node.to.value === 'Z';\n}\n\nfunction isUnderscore(node) {\n  return node.type === 'Char' && node.value === '_' && node.kind === 'simple';\n}\n\nfunction isCodePoint(node, codePoint) {\n  return node.type === 'Char' && node.kind === 'unicode' && node.codePoint === codePoint;\n}","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * A regexp-tree plugin to replace single char character classes with\n * just that character.\n *\n * [\\d] -> \\d, [^\\w] -> \\W\n */\n\nmodule.exports = {\n  CharacterClass: function CharacterClass(path) {\n    var node = path.node;\n\n\n    if (node.expressions.length !== 1 || !hasAppropriateSiblings(path) || !isAppropriateChar(node.expressions[0])) {\n      return;\n    }\n\n    var _node$expressions$ = node.expressions[0],\n        value = _node$expressions$.value,\n        kind = _node$expressions$.kind,\n        escaped = _node$expressions$.escaped;\n\n\n    if (node.negative) {\n      // For negative can extract only meta chars like [^\\w] -> \\W\n      // cannot do for [^a] -> a (wrong).\n      if (!isMeta(value)) {\n        return;\n      }\n\n      value = getInverseMeta(value);\n    }\n\n    path.replace({\n      type: 'Char',\n      value: value,\n      kind: kind,\n      escaped: escaped || shouldEscape(value)\n    });\n  }\n};\n\nfunction isAppropriateChar(node) {\n  return node.type === 'Char' &&\n  // We don't extract [\\b] (backspace) since \\b has different\n  // semantics (word boundary).\n  node.value !== '\\\\b';\n}\n\nfunction isMeta(value) {\n  return (/^\\\\[dwsDWS]$/.test(value)\n  );\n}\n\nfunction getInverseMeta(value) {\n  return (/[dws]/.test(value) ? value.toUpperCase() : value.toLowerCase()\n  );\n}\n\nfunction hasAppropriateSiblings(path) {\n  var parent = path.parent,\n      index = path.index;\n\n\n  if (parent.type !== 'Alternative') {\n    return true;\n  }\n\n  var previousNode = parent.expressions[index - 1];\n  if (previousNode == null) {\n    return true;\n  }\n\n  // Don't optimized \\1[0] to \\10\n  if (previousNode.type === 'Backreference' && previousNode.kind === 'number') {\n    return false;\n  }\n\n  // Don't optimized \\2[0] to \\20\n  if (previousNode.type === 'Char' && previousNode.kind === 'decimal') {\n    return false;\n  }\n\n  return true;\n}\n\n// Note: \\{ and \\} are always preserved to avoid `a[{]2[}]` turning\n// into `a{2}`.\nfunction shouldEscape(value) {\n  return (/[*[()+?$./{}|]/.test(value)\n  );\n}","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nvar UPPER_A_CP = 'A'.codePointAt(0);\nvar UPPER_Z_CP = 'Z'.codePointAt(0);\nvar LOWER_A_CP = 'a'.codePointAt(0);\nvar LOWER_Z_CP = 'z'.codePointAt(0);\nvar DIGIT_0_CP = '0'.codePointAt(0);\nvar DIGIT_9_CP = '9'.codePointAt(0);\n\n/**\n * A regexp-tree plugin to transform coded chars into simple chars.\n *\n * \\u0061 -> a\n */\nmodule.exports = {\n  Char: function Char(path) {\n    var node = path.node,\n        parent = path.parent;\n\n    if (isNaN(node.codePoint) || node.kind === 'simple') {\n      return;\n    }\n\n    if (parent.type === 'ClassRange') {\n      if (!isSimpleRange(parent)) {\n        return;\n      }\n    }\n\n    if (!isPrintableASCIIChar(node.codePoint)) {\n      return;\n    }\n\n    var symbol = String.fromCodePoint(node.codePoint);\n    var newChar = {\n      type: 'Char',\n      kind: 'simple',\n      value: symbol,\n      symbol: symbol,\n      codePoint: node.codePoint\n    };\n    if (needsEscape(symbol, parent.type)) {\n      newChar.escaped = true;\n    }\n    path.replace(newChar);\n  }\n};\n\n/**\n * Checks if a range is included either in 0-9, a-z or A-Z\n * @param classRange\n * @returns {boolean}\n */\nfunction isSimpleRange(classRange) {\n  var from = classRange.from,\n      to = classRange.to;\n\n  return from.codePoint >= DIGIT_0_CP && from.codePoint <= DIGIT_9_CP && to.codePoint >= DIGIT_0_CP && to.codePoint <= DIGIT_9_CP || from.codePoint >= UPPER_A_CP && from.codePoint <= UPPER_Z_CP && to.codePoint >= UPPER_A_CP && to.codePoint <= UPPER_Z_CP || from.codePoint >= LOWER_A_CP && from.codePoint <= LOWER_Z_CP && to.codePoint >= LOWER_A_CP && to.codePoint <= LOWER_Z_CP;\n}\n\n/**\n * Checks if a code point in the range of printable ASCII chars\n * (DEL char excluded)\n * @param codePoint\n * @returns {boolean}\n */\nfunction isPrintableASCIIChar(codePoint) {\n  return codePoint >= 0x20 && codePoint <= 0x7e;\n}\n\nfunction needsEscape(symbol, parentType) {\n  if (parentType === 'ClassRange' || parentType === 'CharacterClass') {\n    return (/[\\]\\\\^-]/.test(symbol)\n    );\n  }\n\n  return (/[*[()+?^$./\\\\|{}]/.test(symbol)\n  );\n}","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * A regexp-tree plugin to remove unnecessary escape.\n *\n * \\e -> e\n *\n * [\\(] -> [(]\n */\n\nmodule.exports = {\n  _hasXFlag: false,\n  init: function init(ast) {\n    this._hasXFlag = ast.flags.includes('x');\n  },\n  Char: function Char(path) {\n    var node = path.node;\n\n\n    if (!node.escaped) {\n      return;\n    }\n\n    if (shouldUnescape(path, this._hasXFlag)) {\n      delete node.escaped;\n    }\n  }\n};\n\nfunction shouldUnescape(path, hasXFlag) {\n  var value = path.node.value,\n      index = path.index,\n      parent = path.parent;\n\n  // In char class (, etc are allowed.\n\n  if (parent.type !== 'CharacterClass' && parent.type !== 'ClassRange') {\n    return !preservesEscape(value, index, parent, hasXFlag);\n  }\n\n  return !preservesInCharClass(value, index, parent);\n}\n\n/**\n * \\], \\\\, \\^, \\-\n */\nfunction preservesInCharClass(value, index, parent) {\n  if (value === '^') {\n    // Avoid [\\^a] turning into [^a]\n    return index === 0 && !parent.negative;\n  }\n  if (value === '-') {\n    // Avoid [a\\-z] turning into [a-z]\n    return true;\n  }\n  return (/[\\]\\\\]/.test(value)\n  );\n}\n\nfunction preservesEscape(value, index, parent, hasXFlag) {\n  if (value === '{') {\n    return preservesOpeningCurlyBraceEscape(index, parent);\n  }\n\n  if (value === '}') {\n    return preservesClosingCurlyBraceEscape(index, parent);\n  }\n\n  if (hasXFlag && /[ #]/.test(value)) {\n    return true;\n  }\n\n  return (/[*[()+?^$./\\\\|]/.test(value)\n  );\n}\n\nfunction consumeNumbers(startIndex, parent, rtl) {\n  var i = startIndex;\n  var siblingNode = (rtl ? i >= 0 : i < parent.expressions.length) && parent.expressions[i];\n\n  while (siblingNode && siblingNode.type === 'Char' && siblingNode.kind === 'simple' && !siblingNode.escaped && /\\d/.test(siblingNode.value)) {\n    rtl ? i-- : i++;\n    siblingNode = (rtl ? i >= 0 : i < parent.expressions.length) && parent.expressions[i];\n  }\n\n  return Math.abs(startIndex - i);\n}\n\nfunction isSimpleChar(node, value) {\n  return node && node.type === 'Char' && node.kind === 'simple' && !node.escaped && node.value === value;\n}\n\nfunction preservesOpeningCurlyBraceEscape(index, parent) {\n  // (?:\\{) -> (?:{)\n  if (index == null) {\n    return false;\n  }\n\n  var nbFollowingNumbers = consumeNumbers(index + 1, parent);\n  var i = index + nbFollowingNumbers + 1;\n  var nextSiblingNode = i < parent.expressions.length && parent.expressions[i];\n\n  if (nbFollowingNumbers) {\n    // Avoid \\{3} turning into {3}\n    if (isSimpleChar(nextSiblingNode, '}')) {\n      return true;\n    }\n\n    if (isSimpleChar(nextSiblingNode, ',')) {\n      nbFollowingNumbers = consumeNumbers(i + 1, parent);\n      i = i + nbFollowingNumbers + 1;\n      nextSiblingNode = i < parent.expressions.length && parent.expressions[i];\n\n      // Avoid \\{3,} turning into {3,}\n      return isSimpleChar(nextSiblingNode, '}');\n    }\n  }\n  return false;\n}\n\nfunction preservesClosingCurlyBraceEscape(index, parent) {\n  // (?:\\{) -> (?:{)\n  if (index == null) {\n    return false;\n  }\n\n  var nbPrecedingNumbers = consumeNumbers(index - 1, parent, true);\n  var i = index - nbPrecedingNumbers - 1;\n  var previousSiblingNode = i >= 0 && parent.expressions[i];\n\n  // Avoid {3\\} turning into {3}\n  if (nbPrecedingNumbers && isSimpleChar(previousSiblingNode, '{')) {\n    return true;\n  }\n\n  if (isSimpleChar(previousSiblingNode, ',')) {\n    nbPrecedingNumbers = consumeNumbers(i - 1, parent, true);\n    i = i - nbPrecedingNumbers - 1;\n    previousSiblingNode = i < parent.expressions.length && parent.expressions[i];\n\n    // Avoid {3,\\} turning into {3,}\n    return nbPrecedingNumbers && isSimpleChar(previousSiblingNode, '{');\n  }\n  return false;\n}","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * A regexp-tree plugin to transform surrogate pairs into single unicode code point\n *\n * \\ud83d\\ude80 -> \\u{1f680}\n */\n\nmodule.exports = {\n  shouldRun: function shouldRun(ast) {\n    return ast.flags.includes('u');\n  },\n  Char: function Char(path) {\n    var node = path.node;\n\n    if (node.kind !== 'unicode' || !node.isSurrogatePair || isNaN(node.codePoint)) {\n      return;\n    }\n    node.value = '\\\\u{' + node.codePoint.toString(16) + '}';\n    delete node.isSurrogatePair;\n  }\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar NodePath = require('../../traverse/node-path');\n\nvar _require = require('../../transform/utils'),\n    increaseQuantifierByOne = _require.increaseQuantifierByOne;\n\n/**\n * A regexp-tree plugin to combine repeating patterns.\n *\n * /^abcabcabc/ -> /^abc{3}/\n * /^(?:abc){2}abc/ -> /^(?:abc){3}/\n * /^abc(?:abc){2}/ -> /^(?:abc){3}/\n */\n\nmodule.exports = {\n  Alternative: function Alternative(path) {\n    var node = path.node;\n\n    // We can skip the first child\n\n    var index = 1;\n    while (index < node.expressions.length) {\n      var child = path.getChild(index);\n      index = Math.max(1, combineRepeatingPatternLeft(path, child, index));\n\n      if (index >= node.expressions.length) {\n        break;\n      }\n\n      child = path.getChild(index);\n      index = Math.max(1, combineWithPreviousRepetition(path, child, index));\n\n      if (index >= node.expressions.length) {\n        break;\n      }\n\n      child = path.getChild(index);\n      index = Math.max(1, combineRepetitionWithPrevious(path, child, index));\n\n      index++;\n    }\n  }\n};\n\n// abcabc -> (?:abc){2}\nfunction combineRepeatingPatternLeft(alternative, child, index) {\n  var node = alternative.node;\n\n\n  var nbPossibleLengths = Math.ceil(index / 2);\n  var i = 0;\n\n  while (i < nbPossibleLengths) {\n    var startIndex = index - 2 * i - 1;\n    var right = void 0,\n        left = void 0;\n\n    if (i === 0) {\n      right = child;\n      left = alternative.getChild(startIndex);\n    } else {\n      right = NodePath.getForNode({\n        type: 'Alternative',\n        expressions: [].concat(_toConsumableArray(node.expressions.slice(index - i, index)), [child.node])\n      });\n\n      left = NodePath.getForNode({\n        type: 'Alternative',\n        expressions: [].concat(_toConsumableArray(node.expressions.slice(startIndex, index - i)))\n      });\n    }\n\n    if (right.hasEqualSource(left)) {\n      for (var j = 0; j < 2 * i + 1; j++) {\n        alternative.getChild(startIndex).remove();\n      }\n\n      child.replace({\n        type: 'Repetition',\n        expression: i === 0 && right.node.type !== 'Repetition' ? right.node : {\n          type: 'Group',\n          capturing: false,\n          expression: right.node\n        },\n        quantifier: {\n          type: 'Quantifier',\n          kind: 'Range',\n          from: 2,\n          to: 2,\n          greedy: true\n        }\n      });\n      return startIndex;\n    }\n\n    i++;\n  }\n\n  return index;\n}\n\n// (?:abc){2}abc -> (?:abc){3}\nfunction combineWithPreviousRepetition(alternative, child, index) {\n  var node = alternative.node;\n\n\n  var i = 0;\n  while (i < index) {\n    var previousChild = alternative.getChild(i);\n\n    if (previousChild.node.type === 'Repetition' && previousChild.node.quantifier.greedy) {\n      var left = previousChild.getChild();\n      var right = void 0;\n\n      if (left.node.type === 'Group' && !left.node.capturing) {\n        left = left.getChild();\n      }\n\n      if (i + 1 === index) {\n        right = child;\n        if (right.node.type === 'Group' && !right.node.capturing) {\n          right = right.getChild();\n        }\n      } else {\n        right = NodePath.getForNode({\n          type: 'Alternative',\n          expressions: [].concat(_toConsumableArray(node.expressions.slice(i + 1, index + 1)))\n        });\n      }\n\n      if (left.hasEqualSource(right)) {\n        for (var j = i; j < index; j++) {\n          alternative.getChild(i + 1).remove();\n        }\n\n        increaseQuantifierByOne(previousChild.node.quantifier);\n\n        return i;\n      }\n    }\n\n    i++;\n  }\n  return index;\n}\n\n// abc(?:abc){2} -> (?:abc){3}\nfunction combineRepetitionWithPrevious(alternative, child, index) {\n  var node = alternative.node;\n\n\n  if (child.node.type === 'Repetition' && child.node.quantifier.greedy) {\n    var right = child.getChild();\n    var left = void 0;\n\n    if (right.node.type === 'Group' && !right.node.capturing) {\n      right = right.getChild();\n    }\n\n    var rightLength = void 0;\n    if (right.node.type === 'Alternative') {\n      rightLength = right.node.expressions.length;\n      left = NodePath.getForNode({\n        type: 'Alternative',\n        expressions: [].concat(_toConsumableArray(node.expressions.slice(index - rightLength, index)))\n      });\n    } else {\n      rightLength = 1;\n      left = alternative.getChild(index - 1);\n      if (left.node.type === 'Group' && !left.node.capturing) {\n        left = left.getChild();\n      }\n    }\n\n    if (left.hasEqualSource(right)) {\n      for (var j = index - rightLength; j < index; j++) {\n        alternative.getChild(index - rightLength).remove();\n      }\n\n      increaseQuantifierByOne(child.node.quantifier);\n\n      return index - rightLength;\n    }\n  }\n  return index;\n}","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nvar NodePath = require('../../traverse/node-path');\n\nvar _require = require('../../transform/utils'),\n    disjunctionToList = _require.disjunctionToList,\n    listToDisjunction = _require.listToDisjunction;\n\n/**\n * Removes duplicates from a disjunction sequence:\n *\n * /(ab|bc|ab)+(xy|xy)+/ -> /(ab|bc)+(xy)+/\n */\n\n\nmodule.exports = {\n  Disjunction: function Disjunction(path) {\n    var node = path.node;\n\n    // Make unique nodes.\n\n    var uniqueNodesMap = {};\n\n    var parts = disjunctionToList(node).filter(function (part) {\n      var encoded = part ? NodePath.getForNode(part).jsonEncode() : 'null';\n\n      // Already recorded this part, filter out.\n      if (uniqueNodesMap.hasOwnProperty(encoded)) {\n        return false;\n      }\n\n      uniqueNodesMap[encoded] = part;\n      return true;\n    });\n\n    // Replace with the optimized disjunction.\n    path.replace(listToDisjunction(parts));\n  }\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * A regexp-tree plugin to replace single char group disjunction to char group\n *\n * a|b|c -> [abc]\n * [12]|3|4 -> [1234]\n * (a|b|c) -> ([abc])\n * (?:a|b|c) -> [abc]\n */\n\nmodule.exports = {\n  Disjunction: function Disjunction(path) {\n    var node = path.node,\n        parent = path.parent;\n\n\n    if (!handlers[parent.type]) {\n      return;\n    }\n\n    var charset = new Map();\n\n    if (!shouldProcess(node, charset) || !charset.size) {\n      return;\n    }\n\n    var characterClass = {\n      type: 'CharacterClass',\n      expressions: Array.from(charset.keys()).sort().map(function (key) {\n        return charset.get(key);\n      })\n    };\n\n    handlers[parent.type](path.getParent(), characterClass);\n  }\n};\n\nvar handlers = {\n  RegExp: function RegExp(path, characterClass) {\n    var node = path.node;\n\n\n    node.body = characterClass;\n  },\n  Group: function Group(path, characterClass) {\n    var node = path.node;\n\n\n    if (node.capturing) {\n      node.expression = characterClass;\n    } else {\n      path.replace(characterClass);\n    }\n  }\n};\n\nfunction shouldProcess(expression, charset) {\n  if (!expression) {\n    // Abort on empty disjunction part\n    return false;\n  }\n\n  var type = expression.type;\n\n\n  if (type === 'Disjunction') {\n    var left = expression.left,\n        right = expression.right;\n\n\n    return shouldProcess(left, charset) && shouldProcess(right, charset);\n  } else if (type === 'Char') {\n    if (expression.kind === 'meta' && expression.symbol === '.') {\n      return false;\n    }\n\n    var value = expression.value;\n\n\n    charset.set(value, expression);\n\n    return true;\n  } else if (type === 'CharacterClass' && !expression.negative) {\n    return expression.expressions.every(function (expression) {\n      return shouldProcess(expression, charset);\n    });\n  }\n\n  return false;\n}","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nmodule.exports = new Map([\n// \\ud83d\\ude80 -> \\u{1f680}\n['charSurrogatePairToSingleUnicode', require('./char-surrogate-pair-to-single-unicode-transform')],\n\n// \\u0061 -> a\n['charCodeToSimpleChar', require('./char-code-to-simple-char-transform')],\n\n// /Aa/i -> /aa/i\n['charCaseInsensitiveLowerCaseTransform', require('./char-case-insensitive-lowercase-transform')],\n\n// [\\d\\d] -> [\\d]\n['charClassRemoveDuplicates', require('./char-class-remove-duplicates-transform')],\n\n// a{1,2}a{2,3} -> a{3,5}\n['quantifiersMerge', require('./quantifiers-merge-transform')],\n\n// a{1,} -> a+, a{3,3} -> a{3}, a{1} -> a\n['quantifierRangeToSymbol', require('./quantifier-range-to-symbol-transform')],\n\n// [a-a] -> [a], [a-b] -> [ab]\n['charClassClassrangesToChars', require('./char-class-classranges-to-chars-transform')],\n\n// [0-9] -> [\\d]\n['charClassToMeta', require('./char-class-to-meta-transform')],\n\n// [\\d] -> \\d, [^\\w] -> \\W\n['charClassToSingleChar', require('./char-class-to-single-char-transform')],\n\n// \\e -> e\n['charEscapeUnescape', require('./char-escape-unescape-transform')],\n\n// [a-de-f] -> [a-f]\n['charClassClassrangesMerge', require('./char-class-classranges-merge-transform')],\n\n// (ab|ab) -> (ab)\n['disjunctionRemoveDuplicates', require('./disjunction-remove-duplicates-transform')],\n\n// (a|b|c) -> [abc]\n['groupSingleCharsToCharClass', require('./group-single-chars-to-char-class')],\n\n// (?:)a -> a\n['removeEmptyGroup', require('./remove-empty-group-transform')],\n\n// (?:a) -> a\n['ungroup', require('./ungroup-transform')],\n\n// abcabcabc -> (?:abc){3}\n['combineRepeatingPatterns', require('./combine-repeating-patterns-transform')]]);","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * A regexp-tree plugin to replace different range-based quantifiers\n * with their symbol equivalents.\n *\n * a{0,} -> a*\n * a{1,} -> a+\n * a{1} -> a\n *\n * NOTE: the following is automatically handled in the generator:\n *\n * a{3,3} -> a{3}\n */\n\nmodule.exports = {\n  Quantifier: function Quantifier(path) {\n    var node = path.node;\n\n\n    if (node.kind !== 'Range') {\n      return;\n    }\n\n    // a{0,} -> a*\n    rewriteOpenZero(path);\n\n    // a{1,} -> a+\n    rewriteOpenOne(path);\n\n    // a{1} -> a\n    rewriteExactOne(path);\n  }\n};\n\nfunction rewriteOpenZero(path) {\n  var node = path.node;\n\n\n  if (node.from !== 0 || node.to) {\n    return;\n  }\n\n  node.kind = '*';\n  delete node.from;\n}\n\nfunction rewriteOpenOne(path) {\n  var node = path.node;\n\n\n  if (node.from !== 1 || node.to) {\n    return;\n  }\n\n  node.kind = '+';\n  delete node.from;\n}\n\nfunction rewriteExactOne(path) {\n  var node = path.node;\n\n\n  if (node.from !== 1 || node.to !== 1) {\n    return;\n  }\n\n  path.parentPath.replace(path.parentPath.node.expression);\n}","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nvar _require = require('../../transform/utils'),\n    increaseQuantifierByOne = _require.increaseQuantifierByOne;\n\n/**\n * A regexp-tree plugin to merge quantifiers\n *\n * a+a+ -> a{2,}\n * a{2}a{3} -> a{5}\n * a{1,2}a{2,3} -> a{3,5}\n */\n\n\nmodule.exports = {\n  Repetition: function Repetition(path) {\n    var node = path.node,\n        parent = path.parent;\n\n\n    if (parent.type !== 'Alternative' || !path.index) {\n      return;\n    }\n\n    var previousSibling = path.getPreviousSibling();\n\n    if (!previousSibling) {\n      return;\n    }\n\n    if (previousSibling.node.type === 'Repetition') {\n      if (!previousSibling.getChild().hasEqualSource(path.getChild())) {\n        return;\n      }\n\n      var _extractFromTo = extractFromTo(previousSibling.node.quantifier),\n          previousSiblingFrom = _extractFromTo.from,\n          previousSiblingTo = _extractFromTo.to;\n\n      var _extractFromTo2 = extractFromTo(node.quantifier),\n          nodeFrom = _extractFromTo2.from,\n          nodeTo = _extractFromTo2.to;\n\n      // It's does not seem reliable to merge quantifiers with different greediness\n      // when none of both is a greedy open range\n\n\n      if (previousSibling.node.quantifier.greedy !== node.quantifier.greedy && !isGreedyOpenRange(previousSibling.node.quantifier) && !isGreedyOpenRange(node.quantifier)) {\n        return;\n      }\n\n      // a*a* -> a*\n      // a*a+ -> a+\n      // a+a+ -> a{2,}\n      // a{2}a{4} -> a{6}\n      // a{1,2}a{2,3} -> a{3,5}\n      // a{1,}a{2,} -> a{3,}\n      // a+a{2,} -> a{3,}\n\n      // a??a{2,} -> a{2,}\n      // a*?a{2,} -> a{2,}\n      // a+?a{2,} -> a{3,}\n\n      node.quantifier.kind = 'Range';\n      node.quantifier.from = previousSiblingFrom + nodeFrom;\n      if (previousSiblingTo && nodeTo) {\n        node.quantifier.to = previousSiblingTo + nodeTo;\n      } else {\n        delete node.quantifier.to;\n      }\n      if (isGreedyOpenRange(previousSibling.node.quantifier) || isGreedyOpenRange(node.quantifier)) {\n        node.quantifier.greedy = true;\n      }\n\n      previousSibling.remove();\n    } else {\n      if (!previousSibling.hasEqualSource(path.getChild())) {\n        return;\n      }\n\n      increaseQuantifierByOne(node.quantifier);\n      previousSibling.remove();\n    }\n  }\n};\n\nfunction isGreedyOpenRange(quantifier) {\n  return quantifier.greedy && (quantifier.kind === '+' || quantifier.kind === '*' || quantifier.kind === 'Range' && !quantifier.to);\n}\n\nfunction extractFromTo(quantifier) {\n  var from = void 0,\n      to = void 0;\n  if (quantifier.kind === '*') {\n    from = 0;\n  } else if (quantifier.kind === '+') {\n    from = 1;\n  } else if (quantifier.kind === '?') {\n    from = 0;\n    to = 1;\n  } else {\n    from = quantifier.from;\n    if (quantifier.to) {\n      to = quantifier.to;\n    }\n  }\n  return { from: from, to: to };\n}","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * A regexp-tree plugin to remove non-capturing empty groups.\n *\n * /(?:)a/ -> /a/\n * /a|(?:)/ -> /a|/\n */\n\nmodule.exports = {\n  Group: function Group(path) {\n    var node = path.node,\n        parent = path.parent;\n\n    var childPath = path.getChild();\n\n    if (node.capturing || childPath) {\n      return;\n    }\n\n    if (parent.type === 'Repetition') {\n\n      path.getParent().replace(node);\n    } else if (parent.type !== 'RegExp') {\n\n      path.remove();\n    }\n  }\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * A regexp-tree plugin to remove unnecessary groups.\n *\n * /(?:a)/ -> /a/\n */\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nmodule.exports = {\n  Group: function Group(path) {\n    var node = path.node,\n        parent = path.parent;\n\n    var childPath = path.getChild();\n\n    if (node.capturing || !childPath) {\n      return;\n    }\n\n    // Don't optimize \\1(?:0) to \\10\n    if (!hasAppropriateSiblings(path)) {\n      return;\n    }\n\n    // Don't optimize /a(?:b|c)/ to /ab|c/\n    // but /(?:b|c)/ to /b|c/ is ok\n    if (childPath.node.type === 'Disjunction' && parent.type !== 'RegExp') {\n      return;\n    }\n\n    // Don't optimize /(?:ab)+/ to /ab+/\n    // but /(?:a)+/ to /a+/ is ok\n    // and /(?:[a-d])+/ to /[a-d]+/ is ok too\n    if (parent.type === 'Repetition' && childPath.node.type !== 'Char' && childPath.node.type !== 'CharacterClass') {\n      return;\n    }\n\n    if (childPath.node.type === 'Alternative') {\n      var parentPath = path.getParent();\n      if (parentPath.node.type === 'Alternative') {\n        // /abc(?:def)ghi/ When (?:def) is ungrouped its content must be merged with parent alternative\n\n        parentPath.replace({\n          type: 'Alternative',\n          expressions: [].concat(_toConsumableArray(parent.expressions.slice(0, path.index)), _toConsumableArray(childPath.node.expressions), _toConsumableArray(parent.expressions.slice(path.index + 1)))\n        });\n      }\n    } else {\n      path.replace(childPath.node);\n    }\n  }\n};\n\nfunction hasAppropriateSiblings(path) {\n  var parent = path.parent,\n      index = path.index;\n\n\n  if (parent.type !== 'Alternative') {\n    return true;\n  }\n\n  var previousNode = parent.expressions[index - 1];\n  if (previousNode == null) {\n    return true;\n  }\n\n  // Don't optimized \\1(?:0) to \\10\n  if (previousNode.type === 'Backreference' && previousNode.kind === 'number') {\n    return false;\n  }\n\n  // Don't optimized \\2(?:0) to \\20\n  if (previousNode.type === 'Char' && previousNode.kind === 'decimal') {\n    return false;\n  }\n\n  return true;\n}","/**\n * LR parser generated by the Syntax tool.\n *\n * https://www.npmjs.com/package/syntax-cli\n *\n *   npm install -g syntax-cli\n *\n *   syntax-cli --help\n *\n * To regenerate run:\n *\n *   syntax-cli \\\n *     --grammar ~/path-to-grammar-file \\\n *     --mode <parsing-mode> \\\n *     --output ~/path-to-output-parser-file.js\n */\n\n'use strict';\n\n/**\n * Matched token text.\n */\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar yytext = void 0;\n\n/**\n * Length of the matched token text.\n */\nvar yyleng = void 0;\n\n/**\n * Storage object.\n */\nvar yy = {};\n\n/**\n * Result of semantic action.\n */\nvar __ = void 0;\n\n/**\n * Result location object.\n */\nvar __loc = void 0;\n\nfunction yyloc(start, end) {\n  if (!yy.options.captureLocations) {\n    return null;\n  }\n\n  // Epsilon doesn't produce location.\n  if (!start || !end) {\n    return start || end;\n  }\n\n  return {\n    startOffset: start.startOffset,\n    endOffset: end.endOffset,\n    startLine: start.startLine,\n    endLine: end.endLine,\n    startColumn: start.startColumn,\n    endColumn: end.endColumn\n  };\n}\n\nvar EOF = '$';\n\n/**\n * List of productions (generated by Syntax tool).\n */\nvar productions = [[-1, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [0, 4, function (_1, _2, _3, _4, _1loc, _2loc, _3loc, _4loc) {\n  __loc = yyloc(_1loc, _4loc);\n  __ = Node({\n    type: 'RegExp',\n    body: _2,\n    flags: checkFlags(_4)\n  }, loc(_1loc, _4loc || _3loc));\n}], [1, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [1, 0, function () {\n  __loc = null;__ = '';\n}], [2, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [2, 2, function (_1, _2, _1loc, _2loc) {\n  __loc = yyloc(_1loc, _2loc);__ = _1 + _2;\n}], [3, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [4, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [4, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {\n  __loc = yyloc(_1loc, _3loc);\n  // Location for empty disjunction: /|/\n  var _loc = null;\n\n  if (_2loc) {\n    _loc = loc(_1loc || _2loc, _3loc || _2loc);\n  };\n\n  __ = Node({\n    type: 'Disjunction',\n    left: _1,\n    right: _3\n  }, _loc);\n}], [5, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);\n  if (_1.length === 0) {\n    __ = null;\n    return;\n  }\n\n  if (_1.length === 1) {\n    __ = Node(_1[0], __loc);\n  } else {\n    __ = Node({\n      type: 'Alternative',\n      expressions: _1\n    }, __loc);\n  }\n}], [6, 0, function () {\n  __loc = null;__ = [];\n}], [6, 2, function (_1, _2, _1loc, _2loc) {\n  __loc = yyloc(_1loc, _2loc);__ = _1.concat(_2);\n}], [7, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = Node(Object.assign({ type: 'Assertion' }, _1), __loc);\n}], [7, 2, function (_1, _2, _1loc, _2loc) {\n  __loc = yyloc(_1loc, _2loc);\n  __ = _1;\n\n  if (_2) {\n    __ = Node({\n      type: 'Repetition',\n      expression: _1,\n      quantifier: _2\n    }, __loc);\n  }\n}], [8, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = { kind: '^' };\n}], [8, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = { kind: '$' };\n}], [8, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = { kind: '\\\\b' };\n}], [8, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = { kind: '\\\\B' };\n}], [8, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {\n  __loc = yyloc(_1loc, _3loc);\n  __ = {\n    kind: 'Lookahead',\n    assertion: _2\n  };\n}], [8, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {\n  __loc = yyloc(_1loc, _3loc);\n  __ = {\n    kind: 'Lookahead',\n    negative: true,\n    assertion: _2\n  };\n}], [8, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {\n  __loc = yyloc(_1loc, _3loc);\n  __ = {\n    kind: 'Lookbehind',\n    assertion: _2\n  };\n}], [8, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {\n  __loc = yyloc(_1loc, _3loc);\n  __ = {\n    kind: 'Lookbehind',\n    negative: true,\n    assertion: _2\n  };\n}], [9, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [9, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [9, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [10, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'simple', __loc);\n}], [10, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = Char(_1.slice(1), 'simple', __loc);__.escaped = true;\n}], [10, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'unicode', __loc);__.isSurrogatePair = true;\n}], [10, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'unicode', __loc);\n}], [10, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = UnicodeProperty(_1, __loc);\n}], [10, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'control', __loc);\n}], [10, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'hex', __loc);\n}], [10, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'oct', __loc);\n}], [10, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = GroupRefOrDecChar(_1, __loc);\n}], [10, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'meta', __loc);\n}], [10, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'meta', __loc);\n}], [10, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = NamedGroupRefOrChars(_1, _1loc);\n}], [11, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [11, 0], [12, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [12, 2, function (_1, _2, _1loc, _2loc) {\n  __loc = yyloc(_1loc, _2loc);\n  _1.greedy = false;\n  __ = _1;\n}], [13, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);\n  __ = Node({\n    type: 'Quantifier',\n    kind: _1,\n    greedy: true\n  }, __loc);\n}], [13, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);\n  __ = Node({\n    type: 'Quantifier',\n    kind: _1,\n    greedy: true\n  }, __loc);\n}], [13, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);\n  __ = Node({\n    type: 'Quantifier',\n    kind: _1,\n    greedy: true\n  }, __loc);\n}], [13, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);\n  var range = getRange(_1);\n  __ = Node({\n    type: 'Quantifier',\n    kind: 'Range',\n    from: range[0],\n    to: range[0],\n    greedy: true\n  }, __loc);\n}], [13, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);\n  __ = Node({\n    type: 'Quantifier',\n    kind: 'Range',\n    from: getRange(_1)[0],\n    greedy: true\n  }, __loc);\n}], [13, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);\n  var range = getRange(_1);\n  __ = Node({\n    type: 'Quantifier',\n    kind: 'Range',\n    from: range[0],\n    to: range[1],\n    greedy: true\n  }, __loc);\n}], [14, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [14, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [15, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {\n  __loc = yyloc(_1loc, _3loc);\n  var nameRaw = String(_1);\n  var name = decodeUnicodeGroupName(nameRaw);\n  if (!yy.options.allowGroupNameDuplicates && namedGroups.hasOwnProperty(name)) {\n    throw new SyntaxError('Duplicate of the named group \"' + name + '\".');\n  }\n\n  namedGroups[name] = _1.groupNumber;\n\n  __ = Node({\n    type: 'Group',\n    capturing: true,\n    name: name,\n    nameRaw: nameRaw,\n    number: _1.groupNumber,\n    expression: _2\n  }, __loc);\n}], [15, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {\n  __loc = yyloc(_1loc, _3loc);\n  __ = Node({\n    type: 'Group',\n    capturing: true,\n    number: _1.groupNumber,\n    expression: _2\n  }, __loc);\n}], [16, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {\n  __loc = yyloc(_1loc, _3loc);\n  __ = Node({\n    type: 'Group',\n    capturing: false,\n    expression: _2\n  }, __loc);\n}], [17, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {\n  __loc = yyloc(_1loc, _3loc);\n  __ = Node({\n    type: 'CharacterClass',\n    negative: true,\n    expressions: _2\n  }, __loc);\n}], [17, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {\n  __loc = yyloc(_1loc, _3loc);\n  __ = Node({\n    type: 'CharacterClass',\n    expressions: _2\n  }, __loc);\n}], [18, 0, function () {\n  __loc = null;__ = [];\n}], [18, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [19, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = [_1];\n}], [19, 2, function (_1, _2, _1loc, _2loc) {\n  __loc = yyloc(_1loc, _2loc);__ = [_1].concat(_2);\n}], [19, 4, function (_1, _2, _3, _4, _1loc, _2loc, _3loc, _4loc) {\n  __loc = yyloc(_1loc, _4loc);\n  checkClassRange(_1, _3);\n\n  __ = [Node({\n    type: 'ClassRange',\n    from: _1,\n    to: _3\n  }, loc(_1loc, _3loc))];\n\n  if (_4) {\n    __ = __.concat(_4);\n  }\n}], [20, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [20, 2, function (_1, _2, _1loc, _2loc) {\n  __loc = yyloc(_1loc, _2loc);__ = [_1].concat(_2);\n}], [20, 4, function (_1, _2, _3, _4, _1loc, _2loc, _3loc, _4loc) {\n  __loc = yyloc(_1loc, _4loc);\n  checkClassRange(_1, _3);\n\n  __ = [Node({\n    type: 'ClassRange',\n    from: _1,\n    to: _3\n  }, loc(_1loc, _3loc))];\n\n  if (_4) {\n    __ = __.concat(_4);\n  }\n}], [21, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'simple', __loc);\n}], [21, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [22, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [22, 1, function (_1, _1loc) {\n  __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'meta', __loc);\n}]];\n\n/**\n * Encoded tokens map.\n */\nvar tokens = { \"SLASH\": \"23\", \"CHAR\": \"24\", \"BAR\": \"25\", \"BOS\": \"26\", \"EOS\": \"27\", \"ESC_b\": \"28\", \"ESC_B\": \"29\", \"POS_LA_ASSERT\": \"30\", \"R_PAREN\": \"31\", \"NEG_LA_ASSERT\": \"32\", \"POS_LB_ASSERT\": \"33\", \"NEG_LB_ASSERT\": \"34\", \"ESC_CHAR\": \"35\", \"U_CODE_SURROGATE\": \"36\", \"U_CODE\": \"37\", \"U_PROP_VALUE_EXP\": \"38\", \"CTRL_CH\": \"39\", \"HEX_CODE\": \"40\", \"OCT_CODE\": \"41\", \"DEC_CODE\": \"42\", \"META_CHAR\": \"43\", \"ANY\": \"44\", \"NAMED_GROUP_REF\": \"45\", \"Q_MARK\": \"46\", \"STAR\": \"47\", \"PLUS\": \"48\", \"RANGE_EXACT\": \"49\", \"RANGE_OPEN\": \"50\", \"RANGE_CLOSED\": \"51\", \"NAMED_CAPTURE_GROUP\": \"52\", \"L_PAREN\": \"53\", \"NON_CAPTURE_GROUP\": \"54\", \"NEG_CLASS\": \"55\", \"R_BRACKET\": \"56\", \"L_BRACKET\": \"57\", \"DASH\": \"58\", \"$\": \"59\" };\n\n/**\n * Parsing table (generated by Syntax tool).\n */\nvar table = [{ \"0\": 1, \"23\": \"s2\" }, { \"59\": \"acc\" }, { \"3\": 3, \"4\": 4, \"5\": 5, \"6\": 6, \"23\": \"r10\", \"24\": \"r10\", \"25\": \"r10\", \"26\": \"r10\", \"27\": \"r10\", \"28\": \"r10\", \"29\": \"r10\", \"30\": \"r10\", \"32\": \"r10\", \"33\": \"r10\", \"34\": \"r10\", \"35\": \"r10\", \"36\": \"r10\", \"37\": \"r10\", \"38\": \"r10\", \"39\": \"r10\", \"40\": \"r10\", \"41\": \"r10\", \"42\": \"r10\", \"43\": \"r10\", \"44\": \"r10\", \"45\": \"r10\", \"52\": \"r10\", \"53\": \"r10\", \"54\": \"r10\", \"55\": \"r10\", \"57\": \"r10\" }, { \"23\": \"s7\" }, { \"23\": \"r6\", \"25\": \"s12\" }, { \"23\": \"r7\", \"25\": \"r7\", \"31\": \"r7\" }, { \"7\": 14, \"8\": 15, \"9\": 16, \"10\": 25, \"14\": 27, \"15\": 42, \"16\": 43, \"17\": 26, \"23\": \"r9\", \"24\": \"s28\", \"25\": \"r9\", \"26\": \"s17\", \"27\": \"s18\", \"28\": \"s19\", \"29\": \"s20\", \"30\": \"s21\", \"31\": \"r9\", \"32\": \"s22\", \"33\": \"s23\", \"34\": \"s24\", \"35\": \"s29\", \"36\": \"s30\", \"37\": \"s31\", \"38\": \"s32\", \"39\": \"s33\", \"40\": \"s34\", \"41\": \"s35\", \"42\": \"s36\", \"43\": \"s37\", \"44\": \"s38\", \"45\": \"s39\", \"52\": \"s44\", \"53\": \"s45\", \"54\": \"s46\", \"55\": \"s40\", \"57\": \"s41\" }, { \"1\": 8, \"2\": 9, \"24\": \"s10\", \"59\": \"r3\" }, { \"59\": \"r1\" }, { \"24\": \"s11\", \"59\": \"r2\" }, { \"24\": \"r4\", \"59\": \"r4\" }, { \"24\": \"r5\", \"59\": \"r5\" }, { \"5\": 13, \"6\": 6, \"23\": \"r10\", \"24\": \"r10\", \"25\": \"r10\", \"26\": \"r10\", \"27\": \"r10\", \"28\": \"r10\", \"29\": \"r10\", \"30\": \"r10\", \"31\": \"r10\", \"32\": \"r10\", \"33\": \"r10\", \"34\": \"r10\", \"35\": \"r10\", \"36\": \"r10\", \"37\": \"r10\", \"38\": \"r10\", \"39\": \"r10\", \"40\": \"r10\", \"41\": \"r10\", \"42\": \"r10\", \"43\": \"r10\", \"44\": \"r10\", \"45\": \"r10\", \"52\": \"r10\", \"53\": \"r10\", \"54\": \"r10\", \"55\": \"r10\", \"57\": \"r10\" }, { \"23\": \"r8\", \"25\": \"r8\", \"31\": \"r8\" }, { \"23\": \"r11\", \"24\": \"r11\", \"25\": \"r11\", \"26\": \"r11\", \"27\": \"r11\", \"28\": \"r11\", \"29\": \"r11\", \"30\": \"r11\", \"31\": \"r11\", \"32\": \"r11\", \"33\": \"r11\", \"34\": \"r11\", \"35\": \"r11\", \"36\": \"r11\", \"37\": \"r11\", \"38\": \"r11\", \"39\": \"r11\", \"40\": \"r11\", \"41\": \"r11\", \"42\": \"r11\", \"43\": \"r11\", \"44\": \"r11\", \"45\": \"r11\", \"52\": \"r11\", \"53\": \"r11\", \"54\": \"r11\", \"55\": \"r11\", \"57\": \"r11\" }, { \"23\": \"r12\", \"24\": \"r12\", \"25\": \"r12\", \"26\": \"r12\", \"27\": \"r12\", \"28\": \"r12\", \"29\": \"r12\", \"30\": \"r12\", \"31\": \"r12\", \"32\": \"r12\", \"33\": \"r12\", \"34\": \"r12\", \"35\": \"r12\", \"36\": \"r12\", \"37\": \"r12\", \"38\": \"r12\", \"39\": \"r12\", \"40\": \"r12\", \"41\": \"r12\", \"42\": \"r12\", \"43\": \"r12\", \"44\": \"r12\", \"45\": \"r12\", \"52\": \"r12\", \"53\": \"r12\", \"54\": \"r12\", \"55\": \"r12\", \"57\": \"r12\" }, { \"11\": 47, \"12\": 48, \"13\": 49, \"23\": \"r38\", \"24\": \"r38\", \"25\": \"r38\", \"26\": \"r38\", \"27\": \"r38\", \"28\": \"r38\", \"29\": \"r38\", \"30\": \"r38\", \"31\": \"r38\", \"32\": \"r38\", \"33\": \"r38\", \"34\": \"r38\", \"35\": \"r38\", \"36\": \"r38\", \"37\": \"r38\", \"38\": \"r38\", \"39\": \"r38\", \"40\": \"r38\", \"41\": \"r38\", \"42\": \"r38\", \"43\": \"r38\", \"44\": \"r38\", \"45\": \"r38\", \"46\": \"s52\", \"47\": \"s50\", \"48\": \"s51\", \"49\": \"s53\", \"50\": \"s54\", \"51\": \"s55\", \"52\": \"r38\", \"53\": \"r38\", \"54\": \"r38\", \"55\": \"r38\", \"57\": \"r38\" }, { \"23\": \"r14\", \"24\": \"r14\", \"25\": \"r14\", \"26\": \"r14\", \"27\": \"r14\", \"28\": \"r14\", \"29\": \"r14\", \"30\": \"r14\", \"31\": \"r14\", \"32\": \"r14\", \"33\": \"r14\", \"34\": \"r14\", \"35\": \"r14\", \"36\": \"r14\", \"37\": \"r14\", \"38\": \"r14\", \"39\": \"r14\", \"40\": \"r14\", \"41\": \"r14\", \"42\": \"r14\", \"43\": \"r14\", \"44\": \"r14\", \"45\": \"r14\", \"52\": \"r14\", \"53\": \"r14\", \"54\": \"r14\", \"55\": \"r14\", \"57\": \"r14\" }, { \"23\": \"r15\", \"24\": \"r15\", \"25\": \"r15\", \"26\": \"r15\", \"27\": \"r15\", \"28\": \"r15\", \"29\": \"r15\", \"30\": \"r15\", \"31\": \"r15\", \"32\": \"r15\", \"33\": \"r15\", \"34\": \"r15\", \"35\": \"r15\", \"36\": \"r15\", \"37\": \"r15\", \"38\": \"r15\", \"39\": \"r15\", \"40\": \"r15\", \"41\": \"r15\", \"42\": \"r15\", \"43\": \"r15\", \"44\": \"r15\", \"45\": \"r15\", \"52\": \"r15\", \"53\": \"r15\", \"54\": \"r15\", \"55\": \"r15\", \"57\": \"r15\" }, { \"23\": \"r16\", \"24\": \"r16\", \"25\": \"r16\", \"26\": \"r16\", \"27\": \"r16\", \"28\": \"r16\", \"29\": \"r16\", \"30\": \"r16\", \"31\": \"r16\", \"32\": \"r16\", \"33\": \"r16\", \"34\": \"r16\", \"35\": \"r16\", \"36\": \"r16\", \"37\": \"r16\", \"38\": \"r16\", \"39\": \"r16\", \"40\": \"r16\", \"41\": \"r16\", \"42\": \"r16\", \"43\": \"r16\", \"44\": \"r16\", \"45\": \"r16\", \"52\": \"r16\", \"53\": \"r16\", \"54\": \"r16\", \"55\": \"r16\", \"57\": \"r16\" }, { \"23\": \"r17\", \"24\": \"r17\", \"25\": \"r17\", \"26\": \"r17\", \"27\": \"r17\", \"28\": \"r17\", \"29\": \"r17\", \"30\": \"r17\", \"31\": \"r17\", \"32\": \"r17\", \"33\": \"r17\", \"34\": \"r17\", \"35\": \"r17\", \"36\": \"r17\", \"37\": \"r17\", \"38\": \"r17\", \"39\": \"r17\", \"40\": \"r17\", \"41\": \"r17\", \"42\": \"r17\", \"43\": \"r17\", \"44\": \"r17\", \"45\": \"r17\", \"52\": \"r17\", \"53\": \"r17\", \"54\": \"r17\", \"55\": \"r17\", \"57\": \"r17\" }, { \"4\": 57, \"5\": 5, \"6\": 6, \"24\": \"r10\", \"25\": \"r10\", \"26\": \"r10\", \"27\": \"r10\", \"28\": \"r10\", \"29\": \"r10\", \"30\": \"r10\", \"31\": \"r10\", \"32\": \"r10\", \"33\": \"r10\", \"34\": \"r10\", \"35\": \"r10\", \"36\": \"r10\", \"37\": \"r10\", \"38\": \"r10\", \"39\": \"r10\", \"40\": \"r10\", \"41\": \"r10\", \"42\": \"r10\", \"43\": \"r10\", \"44\": \"r10\", \"45\": \"r10\", \"52\": \"r10\", \"53\": \"r10\", \"54\": \"r10\", \"55\": \"r10\", \"57\": \"r10\" }, { \"4\": 59, \"5\": 5, \"6\": 6, \"24\": \"r10\", \"25\": \"r10\", \"26\": \"r10\", \"27\": \"r10\", \"28\": \"r10\", \"29\": \"r10\", \"30\": \"r10\", \"31\": \"r10\", \"32\": \"r10\", \"33\": \"r10\", \"34\": \"r10\", \"35\": \"r10\", \"36\": \"r10\", \"37\": \"r10\", \"38\": \"r10\", \"39\": \"r10\", \"40\": \"r10\", \"41\": \"r10\", \"42\": \"r10\", \"43\": \"r10\", \"44\": \"r10\", \"45\": \"r10\", \"52\": \"r10\", \"53\": \"r10\", \"54\": \"r10\", \"55\": \"r10\", \"57\": \"r10\" }, { \"4\": 61, \"5\": 5, \"6\": 6, \"24\": \"r10\", \"25\": \"r10\", \"26\": \"r10\", \"27\": \"r10\", \"28\": \"r10\", \"29\": \"r10\", \"30\": \"r10\", \"31\": \"r10\", \"32\": \"r10\", \"33\": \"r10\", \"34\": \"r10\", \"35\": \"r10\", \"36\": \"r10\", \"37\": \"r10\", \"38\": \"r10\", \"39\": \"r10\", \"40\": \"r10\", \"41\": \"r10\", \"42\": \"r10\", \"43\": \"r10\", \"44\": \"r10\", \"45\": \"r10\", \"52\": \"r10\", \"53\": \"r10\", \"54\": \"r10\", \"55\": \"r10\", \"57\": \"r10\" }, { \"4\": 63, \"5\": 5, \"6\": 6, \"24\": \"r10\", \"25\": \"r10\", \"26\": \"r10\", \"27\": \"r10\", \"28\": \"r10\", \"29\": \"r10\", \"30\": \"r10\", \"31\": \"r10\", \"32\": \"r10\", \"33\": \"r10\", \"34\": \"r10\", \"35\": \"r10\", \"36\": \"r10\", \"37\": \"r10\", \"38\": \"r10\", \"39\": \"r10\", \"40\": \"r10\", \"41\": \"r10\", \"42\": \"r10\", \"43\": \"r10\", \"44\": \"r10\", \"45\": \"r10\", \"52\": \"r10\", \"53\": \"r10\", \"54\": \"r10\", \"55\": \"r10\", \"57\": \"r10\" }, { \"23\": \"r22\", \"24\": \"r22\", \"25\": \"r22\", \"26\": \"r22\", \"27\": \"r22\", \"28\": \"r22\", \"29\": \"r22\", \"30\": \"r22\", \"31\": \"r22\", \"32\": \"r22\", \"33\": \"r22\", \"34\": \"r22\", \"35\": \"r22\", \"36\": \"r22\", \"37\": \"r22\", \"38\": \"r22\", \"39\": \"r22\", \"40\": \"r22\", \"41\": \"r22\", \"42\": \"r22\", \"43\": \"r22\", \"44\": \"r22\", \"45\": \"r22\", \"46\": \"r22\", \"47\": \"r22\", \"48\": \"r22\", \"49\": \"r22\", \"50\": \"r22\", \"51\": \"r22\", \"52\": \"r22\", \"53\": \"r22\", \"54\": \"r22\", \"55\": \"r22\", \"57\": \"r22\" }, { \"23\": \"r23\", \"24\": \"r23\", \"25\": \"r23\", \"26\": \"r23\", \"27\": \"r23\", \"28\": \"r23\", \"29\": \"r23\", \"30\": \"r23\", \"31\": \"r23\", \"32\": \"r23\", \"33\": \"r23\", \"34\": \"r23\", \"35\": \"r23\", \"36\": \"r23\", \"37\": \"r23\", \"38\": \"r23\", \"39\": \"r23\", \"40\": \"r23\", \"41\": \"r23\", \"42\": \"r23\", \"43\": \"r23\", \"44\": \"r23\", \"45\": \"r23\", \"46\": \"r23\", \"47\": \"r23\", \"48\": \"r23\", \"49\": \"r23\", \"50\": \"r23\", \"51\": \"r23\", \"52\": \"r23\", \"53\": \"r23\", \"54\": \"r23\", \"55\": \"r23\", \"57\": \"r23\" }, { \"23\": \"r24\", \"24\": \"r24\", \"25\": \"r24\", \"26\": \"r24\", \"27\": \"r24\", \"28\": \"r24\", \"29\": \"r24\", \"30\": \"r24\", \"31\": \"r24\", \"32\": \"r24\", \"33\": \"r24\", \"34\": \"r24\", \"35\": \"r24\", \"36\": \"r24\", \"37\": \"r24\", \"38\": \"r24\", \"39\": \"r24\", \"40\": \"r24\", \"41\": \"r24\", \"42\": \"r24\", \"43\": \"r24\", \"44\": \"r24\", \"45\": \"r24\", \"46\": \"r24\", \"47\": \"r24\", \"48\": \"r24\", \"49\": \"r24\", \"50\": \"r24\", \"51\": \"r24\", \"52\": \"r24\", \"53\": \"r24\", \"54\": \"r24\", \"55\": \"r24\", \"57\": \"r24\" }, { \"23\": \"r25\", \"24\": \"r25\", \"25\": \"r25\", \"26\": \"r25\", \"27\": \"r25\", \"28\": \"r25\", \"29\": \"r25\", \"30\": \"r25\", \"31\": \"r25\", \"32\": \"r25\", \"33\": \"r25\", \"34\": \"r25\", \"35\": \"r25\", \"36\": \"r25\", \"37\": \"r25\", \"38\": \"r25\", \"39\": \"r25\", \"40\": \"r25\", \"41\": \"r25\", \"42\": \"r25\", \"43\": \"r25\", \"44\": \"r25\", \"45\": \"r25\", \"46\": \"r25\", \"47\": \"r25\", \"48\": \"r25\", \"49\": \"r25\", \"50\": \"r25\", \"51\": \"r25\", \"52\": \"r25\", \"53\": \"r25\", \"54\": \"r25\", \"55\": \"r25\", \"56\": \"r25\", \"57\": \"r25\", \"58\": \"r25\" }, { \"23\": \"r26\", \"24\": \"r26\", \"25\": \"r26\", \"26\": \"r26\", \"27\": \"r26\", \"28\": \"r26\", \"29\": \"r26\", \"30\": \"r26\", \"31\": \"r26\", \"32\": \"r26\", \"33\": \"r26\", \"34\": \"r26\", \"35\": \"r26\", \"36\": \"r26\", \"37\": \"r26\", \"38\": \"r26\", \"39\": \"r26\", \"40\": \"r26\", \"41\": \"r26\", \"42\": \"r26\", \"43\": \"r26\", \"44\": \"r26\", \"45\": \"r26\", \"46\": \"r26\", \"47\": \"r26\", \"48\": \"r26\", \"49\": \"r26\", \"50\": \"r26\", \"51\": \"r26\", \"52\": \"r26\", \"53\": \"r26\", \"54\": \"r26\", \"55\": \"r26\", \"56\": \"r26\", \"57\": \"r26\", \"58\": \"r26\" }, { \"23\": \"r27\", \"24\": \"r27\", \"25\": \"r27\", \"26\": \"r27\", \"27\": \"r27\", \"28\": \"r27\", \"29\": \"r27\", \"30\": \"r27\", \"31\": \"r27\", \"32\": \"r27\", \"33\": \"r27\", \"34\": \"r27\", \"35\": \"r27\", \"36\": \"r27\", \"37\": \"r27\", \"38\": \"r27\", \"39\": \"r27\", \"40\": \"r27\", \"41\": \"r27\", \"42\": \"r27\", \"43\": \"r27\", \"44\": \"r27\", \"45\": \"r27\", \"46\": \"r27\", \"47\": \"r27\", \"48\": \"r27\", \"49\": \"r27\", \"50\": \"r27\", \"51\": \"r27\", \"52\": \"r27\", \"53\": \"r27\", \"54\": \"r27\", \"55\": \"r27\", \"56\": \"r27\", \"57\": \"r27\", \"58\": \"r27\" }, { \"23\": \"r28\", \"24\": \"r28\", \"25\": \"r28\", \"26\": \"r28\", \"27\": \"r28\", \"28\": \"r28\", \"29\": \"r28\", \"30\": \"r28\", \"31\": \"r28\", \"32\": \"r28\", \"33\": \"r28\", \"34\": \"r28\", \"35\": \"r28\", \"36\": \"r28\", \"37\": \"r28\", \"38\": \"r28\", \"39\": \"r28\", \"40\": \"r28\", \"41\": \"r28\", \"42\": \"r28\", \"43\": \"r28\", \"44\": \"r28\", \"45\": \"r28\", \"46\": \"r28\", \"47\": \"r28\", \"48\": \"r28\", \"49\": \"r28\", \"50\": \"r28\", \"51\": \"r28\", \"52\": \"r28\", \"53\": \"r28\", \"54\": \"r28\", \"55\": \"r28\", \"56\": \"r28\", \"57\": \"r28\", \"58\": \"r28\" }, { \"23\": \"r29\", \"24\": \"r29\", \"25\": \"r29\", \"26\": \"r29\", \"27\": \"r29\", \"28\": \"r29\", \"29\": \"r29\", \"30\": \"r29\", \"31\": \"r29\", \"32\": \"r29\", \"33\": \"r29\", \"34\": \"r29\", \"35\": \"r29\", \"36\": \"r29\", \"37\": \"r29\", \"38\": \"r29\", \"39\": \"r29\", \"40\": \"r29\", \"41\": \"r29\", \"42\": \"r29\", \"43\": \"r29\", \"44\": \"r29\", \"45\": \"r29\", \"46\": \"r29\", \"47\": \"r29\", \"48\": \"r29\", \"49\": \"r29\", \"50\": \"r29\", \"51\": \"r29\", \"52\": \"r29\", \"53\": \"r29\", \"54\": \"r29\", \"55\": \"r29\", \"56\": \"r29\", \"57\": \"r29\", \"58\": \"r29\" }, { \"23\": \"r30\", \"24\": \"r30\", \"25\": \"r30\", \"26\": \"r30\", \"27\": \"r30\", \"28\": \"r30\", \"29\": \"r30\", \"30\": \"r30\", \"31\": \"r30\", \"32\": \"r30\", \"33\": \"r30\", \"34\": \"r30\", \"35\": \"r30\", \"36\": \"r30\", \"37\": \"r30\", \"38\": \"r30\", \"39\": \"r30\", \"40\": \"r30\", \"41\": \"r30\", \"42\": \"r30\", \"43\": \"r30\", \"44\": \"r30\", \"45\": \"r30\", \"46\": \"r30\", \"47\": \"r30\", \"48\": \"r30\", \"49\": \"r30\", \"50\": \"r30\", \"51\": \"r30\", \"52\": \"r30\", \"53\": \"r30\", \"54\": \"r30\", \"55\": \"r30\", \"56\": \"r30\", \"57\": \"r30\", \"58\": \"r30\" }, { \"23\": \"r31\", \"24\": \"r31\", \"25\": \"r31\", \"26\": \"r31\", \"27\": \"r31\", \"28\": \"r31\", \"29\": \"r31\", \"30\": \"r31\", \"31\": \"r31\", \"32\": \"r31\", \"33\": \"r31\", \"34\": \"r31\", \"35\": \"r31\", \"36\": \"r31\", \"37\": \"r31\", \"38\": \"r31\", \"39\": \"r31\", \"40\": \"r31\", \"41\": \"r31\", \"42\": \"r31\", \"43\": \"r31\", \"44\": \"r31\", \"45\": \"r31\", \"46\": \"r31\", \"47\": \"r31\", \"48\": \"r31\", \"49\": \"r31\", \"50\": \"r31\", \"51\": \"r31\", \"52\": \"r31\", \"53\": \"r31\", \"54\": \"r31\", \"55\": \"r31\", \"56\": \"r31\", \"57\": \"r31\", \"58\": \"r31\" }, { \"23\": \"r32\", \"24\": \"r32\", \"25\": \"r32\", \"26\": \"r32\", \"27\": \"r32\", \"28\": \"r32\", \"29\": \"r32\", \"30\": \"r32\", \"31\": \"r32\", \"32\": \"r32\", \"33\": \"r32\", \"34\": \"r32\", \"35\": \"r32\", \"36\": \"r32\", \"37\": \"r32\", \"38\": \"r32\", \"39\": \"r32\", \"40\": \"r32\", \"41\": \"r32\", \"42\": \"r32\", \"43\": \"r32\", \"44\": \"r32\", \"45\": \"r32\", \"46\": \"r32\", \"47\": \"r32\", \"48\": \"r32\", \"49\": \"r32\", \"50\": \"r32\", \"51\": \"r32\", \"52\": \"r32\", \"53\": \"r32\", \"54\": \"r32\", \"55\": \"r32\", \"56\": \"r32\", \"57\": \"r32\", \"58\": \"r32\" }, { \"23\": \"r33\", \"24\": \"r33\", \"25\": \"r33\", \"26\": \"r33\", \"27\": \"r33\", \"28\": \"r33\", \"29\": \"r33\", \"30\": \"r33\", \"31\": \"r33\", \"32\": \"r33\", \"33\": \"r33\", \"34\": \"r33\", \"35\": \"r33\", \"36\": \"r33\", \"37\": \"r33\", \"38\": \"r33\", \"39\": \"r33\", \"40\": \"r33\", \"41\": \"r33\", \"42\": \"r33\", \"43\": \"r33\", \"44\": \"r33\", \"45\": \"r33\", \"46\": \"r33\", \"47\": \"r33\", \"48\": \"r33\", \"49\": \"r33\", \"50\": \"r33\", \"51\": \"r33\", \"52\": \"r33\", \"53\": \"r33\", \"54\": \"r33\", \"55\": \"r33\", \"56\": \"r33\", \"57\": \"r33\", \"58\": \"r33\" }, { \"23\": \"r34\", \"24\": \"r34\", \"25\": \"r34\", \"26\": \"r34\", \"27\": \"r34\", \"28\": \"r34\", \"29\": \"r34\", \"30\": \"r34\", \"31\": \"r34\", \"32\": \"r34\", \"33\": \"r34\", \"34\": \"r34\", \"35\": \"r34\", \"36\": \"r34\", \"37\": \"r34\", \"38\": \"r34\", \"39\": \"r34\", \"40\": \"r34\", \"41\": \"r34\", \"42\": \"r34\", \"43\": \"r34\", \"44\": \"r34\", \"45\": \"r34\", \"46\": \"r34\", \"47\": \"r34\", \"48\": \"r34\", \"49\": \"r34\", \"50\": \"r34\", \"51\": \"r34\", \"52\": \"r34\", \"53\": \"r34\", \"54\": \"r34\", \"55\": \"r34\", \"56\": \"r34\", \"57\": \"r34\", \"58\": \"r34\" }, { \"23\": \"r35\", \"24\": \"r35\", \"25\": \"r35\", \"26\": \"r35\", \"27\": \"r35\", \"28\": \"r35\", \"29\": \"r35\", \"30\": \"r35\", \"31\": \"r35\", \"32\": \"r35\", \"33\": \"r35\", \"34\": \"r35\", \"35\": \"r35\", \"36\": \"r35\", \"37\": \"r35\", \"38\": \"r35\", \"39\": \"r35\", \"40\": \"r35\", \"41\": \"r35\", \"42\": \"r35\", \"43\": \"r35\", \"44\": \"r35\", \"45\": \"r35\", \"46\": \"r35\", \"47\": \"r35\", \"48\": \"r35\", \"49\": \"r35\", \"50\": \"r35\", \"51\": \"r35\", \"52\": \"r35\", \"53\": \"r35\", \"54\": \"r35\", \"55\": \"r35\", \"56\": \"r35\", \"57\": \"r35\", \"58\": \"r35\" }, { \"23\": \"r36\", \"24\": \"r36\", \"25\": \"r36\", \"26\": \"r36\", \"27\": \"r36\", \"28\": \"r36\", \"29\": \"r36\", \"30\": \"r36\", \"31\": \"r36\", \"32\": \"r36\", \"33\": \"r36\", \"34\": \"r36\", \"35\": \"r36\", \"36\": \"r36\", \"37\": \"r36\", \"38\": \"r36\", \"39\": \"r36\", \"40\": \"r36\", \"41\": \"r36\", \"42\": \"r36\", \"43\": \"r36\", \"44\": \"r36\", \"45\": \"r36\", \"46\": \"r36\", \"47\": \"r36\", \"48\": \"r36\", \"49\": \"r36\", \"50\": \"r36\", \"51\": \"r36\", \"52\": \"r36\", \"53\": \"r36\", \"54\": \"r36\", \"55\": \"r36\", \"56\": \"r36\", \"57\": \"r36\", \"58\": \"r36\" }, { \"10\": 70, \"18\": 65, \"19\": 66, \"21\": 67, \"22\": 69, \"24\": \"s28\", \"28\": \"s71\", \"35\": \"s29\", \"36\": \"s30\", \"37\": \"s31\", \"38\": \"s32\", \"39\": \"s33\", \"40\": \"s34\", \"41\": \"s35\", \"42\": \"s36\", \"43\": \"s37\", \"44\": \"s38\", \"45\": \"s39\", \"56\": \"r54\", \"58\": \"s68\" }, { \"10\": 70, \"18\": 83, \"19\": 66, \"21\": 67, \"22\": 69, \"24\": \"s28\", \"28\": \"s71\", \"35\": \"s29\", \"36\": \"s30\", \"37\": \"s31\", \"38\": \"s32\", \"39\": \"s33\", \"40\": \"s34\", \"41\": \"s35\", \"42\": \"s36\", \"43\": \"s37\", \"44\": \"s38\", \"45\": \"s39\", \"56\": \"r54\", \"58\": \"s68\" }, { \"23\": \"r47\", \"24\": \"r47\", \"25\": \"r47\", \"26\": \"r47\", \"27\": \"r47\", \"28\": \"r47\", \"29\": \"r47\", \"30\": \"r47\", \"31\": \"r47\", \"32\": \"r47\", \"33\": \"r47\", \"34\": \"r47\", \"35\": \"r47\", \"36\": \"r47\", \"37\": \"r47\", \"38\": \"r47\", \"39\": \"r47\", \"40\": \"r47\", \"41\": \"r47\", \"42\": \"r47\", \"43\": \"r47\", \"44\": \"r47\", \"45\": \"r47\", \"46\": \"r47\", \"47\": \"r47\", \"48\": \"r47\", \"49\": \"r47\", \"50\": \"r47\", \"51\": \"r47\", \"52\": \"r47\", \"53\": \"r47\", \"54\": \"r47\", \"55\": \"r47\", \"57\": \"r47\" }, { \"23\": \"r48\", \"24\": \"r48\", \"25\": \"r48\", \"26\": \"r48\", \"27\": \"r48\", \"28\": \"r48\", \"29\": \"r48\", \"30\": \"r48\", \"31\": \"r48\", \"32\": \"r48\", \"33\": \"r48\", \"34\": \"r48\", \"35\": \"r48\", \"36\": \"r48\", \"37\": \"r48\", \"38\": \"r48\", \"39\": \"r48\", \"40\": \"r48\", \"41\": \"r48\", \"42\": \"r48\", \"43\": \"r48\", \"44\": \"r48\", \"45\": \"r48\", \"46\": \"r48\", \"47\": \"r48\", \"48\": \"r48\", \"49\": \"r48\", \"50\": \"r48\", \"51\": \"r48\", \"52\": \"r48\", \"53\": \"r48\", \"54\": \"r48\", \"55\": \"r48\", \"57\": \"r48\" }, { \"4\": 85, \"5\": 5, \"6\": 6, \"24\": \"r10\", \"25\": \"r10\", \"26\": \"r10\", \"27\": \"r10\", \"28\": \"r10\", \"29\": \"r10\", \"30\": \"r10\", \"31\": \"r10\", \"32\": \"r10\", \"33\": \"r10\", \"34\": \"r10\", \"35\": \"r10\", \"36\": \"r10\", \"37\": \"r10\", \"38\": \"r10\", \"39\": \"r10\", \"40\": \"r10\", \"41\": \"r10\", \"42\": \"r10\", \"43\": \"r10\", \"44\": \"r10\", \"45\": \"r10\", \"52\": \"r10\", \"53\": \"r10\", \"54\": \"r10\", \"55\": \"r10\", \"57\": \"r10\" }, { \"4\": 87, \"5\": 5, \"6\": 6, \"24\": \"r10\", \"25\": \"r10\", \"26\": \"r10\", \"27\": \"r10\", \"28\": \"r10\", \"29\": \"r10\", \"30\": \"r10\", \"31\": \"r10\", \"32\": \"r10\", \"33\": \"r10\", \"34\": \"r10\", \"35\": \"r10\", \"36\": \"r10\", \"37\": \"r10\", \"38\": \"r10\", \"39\": \"r10\", \"40\": \"r10\", \"41\": \"r10\", \"42\": \"r10\", \"43\": \"r10\", \"44\": \"r10\", \"45\": \"r10\", \"52\": \"r10\", \"53\": \"r10\", \"54\": \"r10\", \"55\": \"r10\", \"57\": \"r10\" }, { \"4\": 89, \"5\": 5, \"6\": 6, \"24\": \"r10\", \"25\": \"r10\", \"26\": \"r10\", \"27\": \"r10\", \"28\": \"r10\", \"29\": \"r10\", \"30\": \"r10\", \"31\": \"r10\", \"32\": \"r10\", \"33\": \"r10\", \"34\": \"r10\", \"35\": \"r10\", \"36\": \"r10\", \"37\": \"r10\", \"38\": \"r10\", \"39\": \"r10\", \"40\": \"r10\", \"41\": \"r10\", \"42\": \"r10\", \"43\": \"r10\", \"44\": \"r10\", \"45\": \"r10\", \"52\": \"r10\", \"53\": \"r10\", \"54\": \"r10\", \"55\": \"r10\", \"57\": \"r10\" }, { \"23\": \"r13\", \"24\": \"r13\", \"25\": \"r13\", \"26\": \"r13\", \"27\": \"r13\", \"28\": \"r13\", \"29\": \"r13\", \"30\": \"r13\", \"31\": \"r13\", \"32\": \"r13\", \"33\": \"r13\", \"34\": \"r13\", \"35\": \"r13\", \"36\": \"r13\", \"37\": \"r13\", \"38\": \"r13\", \"39\": \"r13\", \"40\": \"r13\", \"41\": \"r13\", \"42\": \"r13\", \"43\": \"r13\", \"44\": \"r13\", \"45\": \"r13\", \"52\": \"r13\", \"53\": \"r13\", \"54\": \"r13\", \"55\": \"r13\", \"57\": \"r13\" }, { \"23\": \"r37\", \"24\": \"r37\", \"25\": \"r37\", \"26\": \"r37\", \"27\": \"r37\", \"28\": \"r37\", \"29\": \"r37\", \"30\": \"r37\", \"31\": \"r37\", \"32\": \"r37\", \"33\": \"r37\", \"34\": \"r37\", \"35\": \"r37\", \"36\": \"r37\", \"37\": \"r37\", \"38\": \"r37\", \"39\": \"r37\", \"40\": \"r37\", \"41\": \"r37\", \"42\": \"r37\", \"43\": \"r37\", \"44\": \"r37\", \"45\": \"r37\", \"52\": \"r37\", \"53\": \"r37\", \"54\": \"r37\", \"55\": \"r37\", \"57\": \"r37\" }, { \"23\": \"r39\", \"24\": \"r39\", \"25\": \"r39\", \"26\": \"r39\", \"27\": \"r39\", \"28\": \"r39\", \"29\": \"r39\", \"30\": \"r39\", \"31\": \"r39\", \"32\": \"r39\", \"33\": \"r39\", \"34\": \"r39\", \"35\": \"r39\", \"36\": \"r39\", \"37\": \"r39\", \"38\": \"r39\", \"39\": \"r39\", \"40\": \"r39\", \"41\": \"r39\", \"42\": \"r39\", \"43\": \"r39\", \"44\": \"r39\", \"45\": \"r39\", \"46\": \"s56\", \"52\": \"r39\", \"53\": \"r39\", \"54\": \"r39\", \"55\": \"r39\", \"57\": \"r39\" }, { \"23\": \"r41\", \"24\": \"r41\", \"25\": \"r41\", \"26\": \"r41\", \"27\": \"r41\", \"28\": \"r41\", \"29\": \"r41\", \"30\": \"r41\", \"31\": \"r41\", \"32\": \"r41\", \"33\": \"r41\", \"34\": \"r41\", \"35\": \"r41\", \"36\": \"r41\", \"37\": \"r41\", \"38\": \"r41\", \"39\": \"r41\", \"40\": \"r41\", \"41\": \"r41\", \"42\": \"r41\", \"43\": \"r41\", \"44\": \"r41\", \"45\": \"r41\", \"46\": \"r41\", \"52\": \"r41\", \"53\": \"r41\", \"54\": \"r41\", \"55\": \"r41\", \"57\": \"r41\" }, { \"23\": \"r42\", \"24\": \"r42\", \"25\": \"r42\", \"26\": \"r42\", \"27\": \"r42\", \"28\": \"r42\", \"29\": \"r42\", \"30\": \"r42\", \"31\": \"r42\", \"32\": \"r42\", \"33\": \"r42\", \"34\": \"r42\", \"35\": \"r42\", \"36\": \"r42\", \"37\": \"r42\", \"38\": \"r42\", \"39\": \"r42\", \"40\": \"r42\", \"41\": \"r42\", \"42\": \"r42\", \"43\": \"r42\", \"44\": \"r42\", \"45\": \"r42\", \"46\": \"r42\", \"52\": \"r42\", \"53\": \"r42\", \"54\": \"r42\", \"55\": \"r42\", \"57\": \"r42\" }, { \"23\": \"r43\", \"24\": \"r43\", \"25\": \"r43\", \"26\": \"r43\", \"27\": \"r43\", \"28\": \"r43\", \"29\": \"r43\", \"30\": \"r43\", \"31\": \"r43\", \"32\": \"r43\", \"33\": \"r43\", \"34\": \"r43\", \"35\": \"r43\", \"36\": \"r43\", \"37\": \"r43\", \"38\": \"r43\", \"39\": \"r43\", \"40\": \"r43\", \"41\": \"r43\", \"42\": \"r43\", \"43\": \"r43\", \"44\": \"r43\", \"45\": \"r43\", \"46\": \"r43\", \"52\": \"r43\", \"53\": \"r43\", \"54\": \"r43\", \"55\": \"r43\", \"57\": \"r43\" }, { \"23\": \"r44\", \"24\": \"r44\", \"25\": \"r44\", \"26\": \"r44\", \"27\": \"r44\", \"28\": \"r44\", \"29\": \"r44\", \"30\": \"r44\", \"31\": \"r44\", \"32\": \"r44\", \"33\": \"r44\", \"34\": \"r44\", \"35\": \"r44\", \"36\": \"r44\", \"37\": \"r44\", \"38\": \"r44\", \"39\": \"r44\", \"40\": \"r44\", \"41\": \"r44\", \"42\": \"r44\", \"43\": \"r44\", \"44\": \"r44\", \"45\": \"r44\", \"46\": \"r44\", \"52\": \"r44\", \"53\": \"r44\", \"54\": \"r44\", \"55\": \"r44\", \"57\": \"r44\" }, { \"23\": \"r45\", \"24\": \"r45\", \"25\": \"r45\", \"26\": \"r45\", \"27\": \"r45\", \"28\": \"r45\", \"29\": \"r45\", \"30\": \"r45\", \"31\": \"r45\", \"32\": \"r45\", \"33\": \"r45\", \"34\": \"r45\", \"35\": \"r45\", \"36\": \"r45\", \"37\": \"r45\", \"38\": \"r45\", \"39\": \"r45\", \"40\": \"r45\", \"41\": \"r45\", \"42\": \"r45\", \"43\": \"r45\", \"44\": \"r45\", \"45\": \"r45\", \"46\": \"r45\", \"52\": \"r45\", \"53\": \"r45\", \"54\": \"r45\", \"55\": \"r45\", \"57\": \"r45\" }, { \"23\": \"r46\", \"24\": \"r46\", \"25\": \"r46\", \"26\": \"r46\", \"27\": \"r46\", \"28\": \"r46\", \"29\": \"r46\", \"30\": \"r46\", \"31\": \"r46\", \"32\": \"r46\", \"33\": \"r46\", \"34\": \"r46\", \"35\": \"r46\", \"36\": \"r46\", \"37\": \"r46\", \"38\": \"r46\", \"39\": \"r46\", \"40\": \"r46\", \"41\": \"r46\", \"42\": \"r46\", \"43\": \"r46\", \"44\": \"r46\", \"45\": \"r46\", \"46\": \"r46\", \"52\": \"r46\", \"53\": \"r46\", \"54\": \"r46\", \"55\": \"r46\", \"57\": \"r46\" }, { \"23\": \"r40\", \"24\": \"r40\", \"25\": \"r40\", \"26\": \"r40\", \"27\": \"r40\", \"28\": \"r40\", \"29\": \"r40\", \"30\": \"r40\", \"31\": \"r40\", \"32\": \"r40\", \"33\": \"r40\", \"34\": \"r40\", \"35\": \"r40\", \"36\": \"r40\", \"37\": \"r40\", \"38\": \"r40\", \"39\": \"r40\", \"40\": \"r40\", \"41\": \"r40\", \"42\": \"r40\", \"43\": \"r40\", \"44\": \"r40\", \"45\": \"r40\", \"52\": \"r40\", \"53\": \"r40\", \"54\": \"r40\", \"55\": \"r40\", \"57\": \"r40\" }, { \"25\": \"s12\", \"31\": \"s58\" }, { \"23\": \"r18\", \"24\": \"r18\", \"25\": \"r18\", \"26\": \"r18\", \"27\": \"r18\", \"28\": \"r18\", \"29\": \"r18\", \"30\": \"r18\", \"31\": \"r18\", \"32\": \"r18\", \"33\": \"r18\", \"34\": \"r18\", \"35\": \"r18\", \"36\": \"r18\", \"37\": \"r18\", \"38\": \"r18\", \"39\": \"r18\", \"40\": \"r18\", \"41\": \"r18\", \"42\": \"r18\", \"43\": \"r18\", \"44\": \"r18\", \"45\": \"r18\", \"52\": \"r18\", \"53\": \"r18\", \"54\": \"r18\", \"55\": \"r18\", \"57\": \"r18\" }, { \"25\": \"s12\", \"31\": \"s60\" }, { \"23\": \"r19\", \"24\": \"r19\", \"25\": \"r19\", \"26\": \"r19\", \"27\": \"r19\", \"28\": \"r19\", \"29\": \"r19\", \"30\": \"r19\", \"31\": \"r19\", \"32\": \"r19\", \"33\": \"r19\", \"34\": \"r19\", \"35\": \"r19\", \"36\": \"r19\", \"37\": \"r19\", \"38\": \"r19\", \"39\": \"r19\", \"40\": \"r19\", \"41\": \"r19\", \"42\": \"r19\", \"43\": \"r19\", \"44\": \"r19\", \"45\": \"r19\", \"52\": \"r19\", \"53\": \"r19\", \"54\": \"r19\", \"55\": \"r19\", \"57\": \"r19\" }, { \"25\": \"s12\", \"31\": \"s62\" }, { \"23\": \"r20\", \"24\": \"r20\", \"25\": \"r20\", \"26\": \"r20\", \"27\": \"r20\", \"28\": \"r20\", \"29\": \"r20\", \"30\": \"r20\", \"31\": \"r20\", \"32\": \"r20\", \"33\": \"r20\", \"34\": \"r20\", \"35\": \"r20\", \"36\": \"r20\", \"37\": \"r20\", \"38\": \"r20\", \"39\": \"r20\", \"40\": \"r20\", \"41\": \"r20\", \"42\": \"r20\", \"43\": \"r20\", \"44\": \"r20\", \"45\": \"r20\", \"52\": \"r20\", \"53\": \"r20\", \"54\": \"r20\", \"55\": \"r20\", \"57\": \"r20\" }, { \"25\": \"s12\", \"31\": \"s64\" }, { \"23\": \"r21\", \"24\": \"r21\", \"25\": \"r21\", \"26\": \"r21\", \"27\": \"r21\", \"28\": \"r21\", \"29\": \"r21\", \"30\": \"r21\", \"31\": \"r21\", \"32\": \"r21\", \"33\": \"r21\", \"34\": \"r21\", \"35\": \"r21\", \"36\": \"r21\", \"37\": \"r21\", \"38\": \"r21\", \"39\": \"r21\", \"40\": \"r21\", \"41\": \"r21\", \"42\": \"r21\", \"43\": \"r21\", \"44\": \"r21\", \"45\": \"r21\", \"52\": \"r21\", \"53\": \"r21\", \"54\": \"r21\", \"55\": \"r21\", \"57\": \"r21\" }, { \"56\": \"s72\" }, { \"56\": \"r55\" }, { \"10\": 70, \"20\": 73, \"21\": 75, \"22\": 76, \"24\": \"s28\", \"28\": \"s71\", \"35\": \"s29\", \"36\": \"s30\", \"37\": \"s31\", \"38\": \"s32\", \"39\": \"s33\", \"40\": \"s34\", \"41\": \"s35\", \"42\": \"s36\", \"43\": \"s37\", \"44\": \"s38\", \"45\": \"s39\", \"56\": \"r56\", \"58\": \"s74\" }, { \"24\": \"r62\", \"28\": \"r62\", \"35\": \"r62\", \"36\": \"r62\", \"37\": \"r62\", \"38\": \"r62\", \"39\": \"r62\", \"40\": \"r62\", \"41\": \"r62\", \"42\": \"r62\", \"43\": \"r62\", \"44\": \"r62\", \"45\": \"r62\", \"56\": \"r62\", \"58\": \"r62\" }, { \"24\": \"r63\", \"28\": \"r63\", \"35\": \"r63\", \"36\": \"r63\", \"37\": \"r63\", \"38\": \"r63\", \"39\": \"r63\", \"40\": \"r63\", \"41\": \"r63\", \"42\": \"r63\", \"43\": \"r63\", \"44\": \"r63\", \"45\": \"r63\", \"56\": \"r63\", \"58\": \"r63\" }, { \"24\": \"r64\", \"28\": \"r64\", \"35\": \"r64\", \"36\": \"r64\", \"37\": \"r64\", \"38\": \"r64\", \"39\": \"r64\", \"40\": \"r64\", \"41\": \"r64\", \"42\": \"r64\", \"43\": \"r64\", \"44\": \"r64\", \"45\": \"r64\", \"56\": \"r64\", \"58\": \"r64\" }, { \"24\": \"r65\", \"28\": \"r65\", \"35\": \"r65\", \"36\": \"r65\", \"37\": \"r65\", \"38\": \"r65\", \"39\": \"r65\", \"40\": \"r65\", \"41\": \"r65\", \"42\": \"r65\", \"43\": \"r65\", \"44\": \"r65\", \"45\": \"r65\", \"56\": \"r65\", \"58\": \"r65\" }, { \"23\": \"r52\", \"24\": \"r52\", \"25\": \"r52\", \"26\": \"r52\", \"27\": \"r52\", \"28\": \"r52\", \"29\": \"r52\", \"30\": \"r52\", \"31\": \"r52\", \"32\": \"r52\", \"33\": \"r52\", \"34\": \"r52\", \"35\": \"r52\", \"36\": \"r52\", \"37\": \"r52\", \"38\": \"r52\", \"39\": \"r52\", \"40\": \"r52\", \"41\": \"r52\", \"42\": \"r52\", \"43\": \"r52\", \"44\": \"r52\", \"45\": \"r52\", \"46\": \"r52\", \"47\": \"r52\", \"48\": \"r52\", \"49\": \"r52\", \"50\": \"r52\", \"51\": \"r52\", \"52\": \"r52\", \"53\": \"r52\", \"54\": \"r52\", \"55\": \"r52\", \"57\": \"r52\" }, { \"56\": \"r57\" }, { \"10\": 70, \"21\": 77, \"22\": 69, \"24\": \"s28\", \"28\": \"s71\", \"35\": \"s29\", \"36\": \"s30\", \"37\": \"s31\", \"38\": \"s32\", \"39\": \"s33\", \"40\": \"s34\", \"41\": \"s35\", \"42\": \"s36\", \"43\": \"s37\", \"44\": \"s38\", \"45\": \"s39\", \"56\": \"r62\", \"58\": \"s68\" }, { \"56\": \"r59\" }, { \"10\": 70, \"20\": 79, \"21\": 75, \"22\": 76, \"24\": \"s28\", \"28\": \"s71\", \"35\": \"s29\", \"36\": \"s30\", \"37\": \"s31\", \"38\": \"s32\", \"39\": \"s33\", \"40\": \"s34\", \"41\": \"s35\", \"42\": \"s36\", \"43\": \"s37\", \"44\": \"s38\", \"45\": \"s39\", \"56\": \"r63\", \"58\": \"s80\" }, { \"10\": 70, \"18\": 78, \"19\": 66, \"21\": 67, \"22\": 69, \"24\": \"s28\", \"28\": \"s71\", \"35\": \"s29\", \"36\": \"s30\", \"37\": \"s31\", \"38\": \"s32\", \"39\": \"s33\", \"40\": \"s34\", \"41\": \"s35\", \"42\": \"s36\", \"43\": \"s37\", \"44\": \"s38\", \"45\": \"s39\", \"56\": \"r54\", \"58\": \"s68\" }, { \"56\": \"r58\" }, { \"56\": \"r60\" }, { \"10\": 70, \"21\": 81, \"22\": 69, \"24\": \"s28\", \"28\": \"s71\", \"35\": \"s29\", \"36\": \"s30\", \"37\": \"s31\", \"38\": \"s32\", \"39\": \"s33\", \"40\": \"s34\", \"41\": \"s35\", \"42\": \"s36\", \"43\": \"s37\", \"44\": \"s38\", \"45\": \"s39\", \"56\": \"r62\", \"58\": \"s68\" }, { \"10\": 70, \"18\": 82, \"19\": 66, \"21\": 67, \"22\": 69, \"24\": \"s28\", \"28\": \"s71\", \"35\": \"s29\", \"36\": \"s30\", \"37\": \"s31\", \"38\": \"s32\", \"39\": \"s33\", \"40\": \"s34\", \"41\": \"s35\", \"42\": \"s36\", \"43\": \"s37\", \"44\": \"s38\", \"45\": \"s39\", \"56\": \"r54\", \"58\": \"s68\" }, { \"56\": \"r61\" }, { \"56\": \"s84\" }, { \"23\": \"r53\", \"24\": \"r53\", \"25\": \"r53\", \"26\": \"r53\", \"27\": \"r53\", \"28\": \"r53\", \"29\": \"r53\", \"30\": \"r53\", \"31\": \"r53\", \"32\": \"r53\", \"33\": \"r53\", \"34\": \"r53\", \"35\": \"r53\", \"36\": \"r53\", \"37\": \"r53\", \"38\": \"r53\", \"39\": \"r53\", \"40\": \"r53\", \"41\": \"r53\", \"42\": \"r53\", \"43\": \"r53\", \"44\": \"r53\", \"45\": \"r53\", \"46\": \"r53\", \"47\": \"r53\", \"48\": \"r53\", \"49\": \"r53\", \"50\": \"r53\", \"51\": \"r53\", \"52\": \"r53\", \"53\": \"r53\", \"54\": \"r53\", \"55\": \"r53\", \"57\": \"r53\" }, { \"25\": \"s12\", \"31\": \"s86\" }, { \"23\": \"r49\", \"24\": \"r49\", \"25\": \"r49\", \"26\": \"r49\", \"27\": \"r49\", \"28\": \"r49\", \"29\": \"r49\", \"30\": \"r49\", \"31\": \"r49\", \"32\": \"r49\", \"33\": \"r49\", \"34\": \"r49\", \"35\": \"r49\", \"36\": \"r49\", \"37\": \"r49\", \"38\": \"r49\", \"39\": \"r49\", \"40\": \"r49\", \"41\": \"r49\", \"42\": \"r49\", \"43\": \"r49\", \"44\": \"r49\", \"45\": \"r49\", \"46\": \"r49\", \"47\": \"r49\", \"48\": \"r49\", \"49\": \"r49\", \"50\": \"r49\", \"51\": \"r49\", \"52\": \"r49\", \"53\": \"r49\", \"54\": \"r49\", \"55\": \"r49\", \"57\": \"r49\" }, { \"25\": \"s12\", \"31\": \"s88\" }, { \"23\": \"r50\", \"24\": \"r50\", \"25\": \"r50\", \"26\": \"r50\", \"27\": \"r50\", \"28\": \"r50\", \"29\": \"r50\", \"30\": \"r50\", \"31\": \"r50\", \"32\": \"r50\", \"33\": \"r50\", \"34\": \"r50\", \"35\": \"r50\", \"36\": \"r50\", \"37\": \"r50\", \"38\": \"r50\", \"39\": \"r50\", \"40\": \"r50\", \"41\": \"r50\", \"42\": \"r50\", \"43\": \"r50\", \"44\": \"r50\", \"45\": \"r50\", \"46\": \"r50\", \"47\": \"r50\", \"48\": \"r50\", \"49\": \"r50\", \"50\": \"r50\", \"51\": \"r50\", \"52\": \"r50\", \"53\": \"r50\", \"54\": \"r50\", \"55\": \"r50\", \"57\": \"r50\" }, { \"25\": \"s12\", \"31\": \"s90\" }, { \"23\": \"r51\", \"24\": \"r51\", \"25\": \"r51\", \"26\": \"r51\", \"27\": \"r51\", \"28\": \"r51\", \"29\": \"r51\", \"30\": \"r51\", \"31\": \"r51\", \"32\": \"r51\", \"33\": \"r51\", \"34\": \"r51\", \"35\": \"r51\", \"36\": \"r51\", \"37\": \"r51\", \"38\": \"r51\", \"39\": \"r51\", \"40\": \"r51\", \"41\": \"r51\", \"42\": \"r51\", \"43\": \"r51\", \"44\": \"r51\", \"45\": \"r51\", \"46\": \"r51\", \"47\": \"r51\", \"48\": \"r51\", \"49\": \"r51\", \"50\": \"r51\", \"51\": \"r51\", \"52\": \"r51\", \"53\": \"r51\", \"54\": \"r51\", \"55\": \"r51\", \"57\": \"r51\" }];\n\n/**\n * Parsing stack.\n */\nvar stack = [];\n\n/**\n * Tokenizer instance.\n */\nvar tokenizer = void 0;\n/**\n * Generic tokenizer used by the parser in the Syntax tool.\n *\n * https://www.npmjs.com/package/syntax-cli\n *\n * See `--custom-tokinzer` to skip this generation, and use a custom one.\n */\n\nvar lexRules = [[/^#[^\\n]+/, function () {/* skip comments */}], [/^\\s+/, function () {/* skip whitespace */}], [/^-/, function () {\n  return 'DASH';\n}], [/^\\//, function () {\n  return 'CHAR';\n}], [/^#/, function () {\n  return 'CHAR';\n}], [/^\\|/, function () {\n  return 'CHAR';\n}], [/^\\./, function () {\n  return 'CHAR';\n}], [/^\\{/, function () {\n  return 'CHAR';\n}], [/^\\{\\d+\\}/, function () {\n  return 'RANGE_EXACT';\n}], [/^\\{\\d+,\\}/, function () {\n  return 'RANGE_OPEN';\n}], [/^\\{\\d+,\\d+\\}/, function () {\n  return 'RANGE_CLOSED';\n}], [/^\\\\k<(([\\u0041-\\u005a\\u0061-\\u007a\\u00aa\\u00b5\\u00ba\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376-\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e-\\u066f\\u0671-\\u06d3\\u06d5\\u06e5-\\u06e6\\u06ee-\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4-\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u08a0-\\u08b4\\u08b6-\\u08bd\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f-\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc-\\u09dd\\u09df-\\u09e1\\u09f0-\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f-\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32-\\u0a33\\u0a35-\\u0a36\\u0a38-\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2-\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0-\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f-\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32-\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c-\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99-\\u0b9a\\u0b9c\\u0b9e-\\u0b9f\\u0ba3-\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c60-\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0-\\u0ce1\\u0cf1-\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32-\\u0e33\\u0e40-\\u0e46\\u0e81-\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2-\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065-\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae-\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5-\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2-\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fef\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a-\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7bf\\ua7c2-\\ua7c6\\ua7f7-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd-\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5-\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab67\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc]|\\ud800[\\udc00-\\udc0b\\udc0d-\\udc26\\udc28-\\udc3a\\udc3c-\\udc3d\\udc3f-\\udc4d\\udc50-\\udc5d\\udc80-\\udcfa\\udd40-\\udd74\\ude80-\\ude9c\\udea0-\\uded0\\udf00-\\udf1f\\udf2d-\\udf4a\\udf50-\\udf75\\udf80-\\udf9d\\udfa0-\\udfc3\\udfc8-\\udfcf\\udfd1-\\udfd5]|\\ud801[\\udc00-\\udc9d\\udcb0-\\udcd3\\udcd8-\\udcfb\\udd00-\\udd27\\udd30-\\udd63\\ude00-\\udf36\\udf40-\\udf55\\udf60-\\udf67]|\\ud802[\\udc00-\\udc05\\udc08\\udc0a-\\udc35\\udc37-\\udc38\\udc3c\\udc3f-\\udc55\\udc60-\\udc76\\udc80-\\udc9e\\udce0-\\udcf2\\udcf4-\\udcf5\\udd00-\\udd15\\udd20-\\udd39\\udd80-\\uddb7\\uddbe-\\uddbf\\ude00\\ude10-\\ude13\\ude15-\\ude17\\ude19-\\ude35\\ude60-\\ude7c\\ude80-\\ude9c\\udec0-\\udec7\\udec9-\\udee4\\udf00-\\udf35\\udf40-\\udf55\\udf60-\\udf72\\udf80-\\udf91]|\\ud803[\\udc00-\\udc48\\udc80-\\udcb2\\udcc0-\\udcf2\\udd00-\\udd23\\udf00-\\udf1c\\udf27\\udf30-\\udf45\\udfe0-\\udff6]|\\ud804[\\udc03-\\udc37\\udc83-\\udcaf\\udcd0-\\udce8\\udd03-\\udd26\\udd44\\udd50-\\udd72\\udd76\\udd83-\\uddb2\\uddc1-\\uddc4\\uddda\\udddc\\ude00-\\ude11\\ude13-\\ude2b\\ude80-\\ude86\\ude88\\ude8a-\\ude8d\\ude8f-\\ude9d\\ude9f-\\udea8\\udeb0-\\udede\\udf05-\\udf0c\\udf0f-\\udf10\\udf13-\\udf28\\udf2a-\\udf30\\udf32-\\udf33\\udf35-\\udf39\\udf3d\\udf50\\udf5d-\\udf61]|\\ud805[\\udc00-\\udc34\\udc47-\\udc4a\\udc5f\\udc80-\\udcaf\\udcc4-\\udcc5\\udcc7\\udd80-\\uddae\\uddd8-\\udddb\\ude00-\\ude2f\\ude44\\ude80-\\udeaa\\udeb8\\udf00-\\udf1a]|\\ud806[\\udc00-\\udc2b\\udca0-\\udcdf\\udcff\\udda0-\\udda7\\uddaa-\\uddd0\\udde1\\udde3\\ude00\\ude0b-\\ude32\\ude3a\\ude50\\ude5c-\\ude89\\ude9d\\udec0-\\udef8]|\\ud807[\\udc00-\\udc08\\udc0a-\\udc2e\\udc40\\udc72-\\udc8f\\udd00-\\udd06\\udd08-\\udd09\\udd0b-\\udd30\\udd46\\udd60-\\udd65\\udd67-\\udd68\\udd6a-\\udd89\\udd98\\udee0-\\udef2]|\\ud808[\\udc00-\\udf99]|\\ud809[\\udc00-\\udc6e\\udc80-\\udd43]|\\ud80c[\\udc00-\\udfff]|\\ud80d[\\udc00-\\udc2e]|\\ud811[\\udc00-\\ude46]|\\ud81a[\\udc00-\\ude38\\ude40-\\ude5e\\uded0-\\udeed\\udf00-\\udf2f\\udf40-\\udf43\\udf63-\\udf77\\udf7d-\\udf8f]|\\ud81b[\\ude40-\\ude7f\\udf00-\\udf4a\\udf50\\udf93-\\udf9f\\udfe0-\\udfe1\\udfe3]|\\ud81c[\\udc00-\\udfff]|\\ud81d[\\udc00-\\udfff]|\\ud81e[\\udc00-\\udfff]|\\ud81f[\\udc00-\\udfff]|\\ud820[\\udc00-\\udfff]|\\ud821[\\udc00-\\udff7]|\\ud822[\\udc00-\\udef2]|\\ud82c[\\udc00-\\udd1e\\udd50-\\udd52\\udd64-\\udd67\\udd70-\\udefb]|\\ud82f[\\udc00-\\udc6a\\udc70-\\udc7c\\udc80-\\udc88\\udc90-\\udc99]|\\ud835[\\udc00-\\udc54\\udc56-\\udc9c\\udc9e-\\udc9f\\udca2\\udca5-\\udca6\\udca9-\\udcac\\udcae-\\udcb9\\udcbb\\udcbd-\\udcc3\\udcc5-\\udd05\\udd07-\\udd0a\\udd0d-\\udd14\\udd16-\\udd1c\\udd1e-\\udd39\\udd3b-\\udd3e\\udd40-\\udd44\\udd46\\udd4a-\\udd50\\udd52-\\udea5\\udea8-\\udec0\\udec2-\\udeda\\udedc-\\udefa\\udefc-\\udf14\\udf16-\\udf34\\udf36-\\udf4e\\udf50-\\udf6e\\udf70-\\udf88\\udf8a-\\udfa8\\udfaa-\\udfc2\\udfc4-\\udfcb]|\\ud838[\\udd00-\\udd2c\\udd37-\\udd3d\\udd4e\\udec0-\\udeeb]|\\ud83a[\\udc00-\\udcc4\\udd00-\\udd43\\udd4b]|\\ud83b[\\ude00-\\ude03\\ude05-\\ude1f\\ude21-\\ude22\\ude24\\ude27\\ude29-\\ude32\\ude34-\\ude37\\ude39\\ude3b\\ude42\\ude47\\ude49\\ude4b\\ude4d-\\ude4f\\ude51-\\ude52\\ude54\\ude57\\ude59\\ude5b\\ude5d\\ude5f\\ude61-\\ude62\\ude64\\ude67-\\ude6a\\ude6c-\\ude72\\ude74-\\ude77\\ude79-\\ude7c\\ude7e\\ude80-\\ude89\\ude8b-\\ude9b\\udea1-\\udea3\\udea5-\\udea9\\udeab-\\udebb]|\\ud840[\\udc00-\\udfff]|\\ud841[\\udc00-\\udfff]|\\ud842[\\udc00-\\udfff]|\\ud843[\\udc00-\\udfff]|\\ud844[\\udc00-\\udfff]|\\ud845[\\udc00-\\udfff]|\\ud846[\\udc00-\\udfff]|\\ud847[\\udc00-\\udfff]|\\ud848[\\udc00-\\udfff]|\\ud849[\\udc00-\\udfff]|\\ud84a[\\udc00-\\udfff]|\\ud84b[\\udc00-\\udfff]|\\ud84c[\\udc00-\\udfff]|\\ud84d[\\udc00-\\udfff]|\\ud84e[\\udc00-\\udfff]|\\ud84f[\\udc00-\\udfff]|\\ud850[\\udc00-\\udfff]|\\ud851[\\udc00-\\udfff]|\\ud852[\\udc00-\\udfff]|\\ud853[\\udc00-\\udfff]|\\ud854[\\udc00-\\udfff]|\\ud855[\\udc00-\\udfff]|\\ud856[\\udc00-\\udfff]|\\ud857[\\udc00-\\udfff]|\\ud858[\\udc00-\\udfff]|\\ud859[\\udc00-\\udfff]|\\ud85a[\\udc00-\\udfff]|\\ud85b[\\udc00-\\udfff]|\\ud85c[\\udc00-\\udfff]|\\ud85d[\\udc00-\\udfff]|\\ud85e[\\udc00-\\udfff]|\\ud85f[\\udc00-\\udfff]|\\ud860[\\udc00-\\udfff]|\\ud861[\\udc00-\\udfff]|\\ud862[\\udc00-\\udfff]|\\ud863[\\udc00-\\udfff]|\\ud864[\\udc00-\\udfff]|\\ud865[\\udc00-\\udfff]|\\ud866[\\udc00-\\udfff]|\\ud867[\\udc00-\\udfff]|\\ud868[\\udc00-\\udfff]|\\ud869[\\udc00-\\uded6\\udf00-\\udfff]|\\ud86a[\\udc00-\\udfff]|\\ud86b[\\udc00-\\udfff]|\\ud86c[\\udc00-\\udfff]|\\ud86d[\\udc00-\\udf34\\udf40-\\udfff]|\\ud86e[\\udc00-\\udc1d\\udc20-\\udfff]|\\ud86f[\\udc00-\\udfff]|\\ud870[\\udc00-\\udfff]|\\ud871[\\udc00-\\udfff]|\\ud872[\\udc00-\\udfff]|\\ud873[\\udc00-\\udea1\\udeb0-\\udfff]|\\ud874[\\udc00-\\udfff]|\\ud875[\\udc00-\\udfff]|\\ud876[\\udc00-\\udfff]|\\ud877[\\udc00-\\udfff]|\\ud878[\\udc00-\\udfff]|\\ud879[\\udc00-\\udfff]|\\ud87a[\\udc00-\\udfe0]|\\ud87e[\\udc00-\\ude1d])|[$_]|(\\\\u[0-9a-fA-F]{4}|\\\\u\\{[0-9a-fA-F]{1,}\\}))(([\\u0030-\\u0039\\u0041-\\u005a\\u005f\\u0061-\\u007a\\u00aa\\u00b5\\u00b7\\u00ba\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0300-\\u0374\\u0376-\\u0377\\u037a-\\u037d\\u037f\\u0386-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u0483-\\u0487\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u0591-\\u05bd\\u05bf\\u05c1-\\u05c2\\u05c4-\\u05c5\\u05c7\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0610-\\u061a\\u0620-\\u0669\\u066e-\\u06d3\\u06d5-\\u06dc\\u06df-\\u06e8\\u06ea-\\u06fc\\u06ff\\u0710-\\u074a\\u074d-\\u07b1\\u07c0-\\u07f5\\u07fa\\u07fd\\u0800-\\u082d\\u0840-\\u085b\\u0860-\\u086a\\u08a0-\\u08b4\\u08b6-\\u08bd\\u08d3-\\u08e1\\u08e3-\\u0963\\u0966-\\u096f\\u0971-\\u0983\\u0985-\\u098c\\u098f-\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bc-\\u09c4\\u09c7-\\u09c8\\u09cb-\\u09ce\\u09d7\\u09dc-\\u09dd\\u09df-\\u09e3\\u09e6-\\u09f1\\u09fc\\u09fe\\u0a01-\\u0a03\\u0a05-\\u0a0a\\u0a0f-\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32-\\u0a33\\u0a35-\\u0a36\\u0a38-\\u0a39\\u0a3c\\u0a3e-\\u0a42\\u0a47-\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a59-\\u0a5c\\u0a5e\\u0a66-\\u0a75\\u0a81-\\u0a83\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2-\\u0ab3\\u0ab5-\\u0ab9\\u0abc-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ad0\\u0ae0-\\u0ae3\\u0ae6-\\u0aef\\u0af9-\\u0aff\\u0b01-\\u0b03\\u0b05-\\u0b0c\\u0b0f-\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32-\\u0b33\\u0b35-\\u0b39\\u0b3c-\\u0b44\\u0b47-\\u0b48\\u0b4b-\\u0b4d\\u0b56-\\u0b57\\u0b5c-\\u0b5d\\u0b5f-\\u0b63\\u0b66-\\u0b6f\\u0b71\\u0b82-\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99-\\u0b9a\\u0b9c\\u0b9e-\\u0b9f\\u0ba3-\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd0\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55-\\u0c56\\u0c58-\\u0c5a\\u0c60-\\u0c63\\u0c66-\\u0c6f\\u0c80-\\u0c83\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbc-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5-\\u0cd6\\u0cde\\u0ce0-\\u0ce3\\u0ce6-\\u0cef\\u0cf1-\\u0cf2\\u0d00-\\u0d03\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4e\\u0d54-\\u0d57\\u0d5f-\\u0d63\\u0d66-\\u0d6f\\u0d7a-\\u0d7f\\u0d82-\\u0d83\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2-\\u0df3\\u0e01-\\u0e3a\\u0e40-\\u0e4e\\u0e50-\\u0e59\\u0e81-\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0edc-\\u0edf\\u0f00\\u0f18-\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e-\\u0f47\\u0f49-\\u0f6c\\u0f71-\\u0f84\\u0f86-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u1000-\\u1049\\u1050-\\u109d\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u135d-\\u135f\\u1369-\\u1371\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u170c\\u170e-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176c\\u176e-\\u1770\\u1772-\\u1773\\u1780-\\u17d3\\u17d7\\u17dc-\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u1820-\\u1878\\u1880-\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u19d0-\\u19da\\u1a00-\\u1a1b\\u1a20-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1aa7\\u1ab0-\\u1abd\\u1b00-\\u1b4b\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1bf3\\u1c00-\\u1c37\\u1c40-\\u1c49\\u1c4d-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1cd0-\\u1cd2\\u1cd4-\\u1cfa\\u1d00-\\u1df9\\u1dfb-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u203f-\\u2040\\u2054\\u2071\\u207f\\u2090-\\u209c\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d7f-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2de0-\\u2dff\\u3005-\\u3007\\u3021-\\u302f\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u3099-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fef\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua62b\\ua640-\\ua66f\\ua674-\\ua67d\\ua67f-\\ua6f1\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7bf\\ua7c2-\\ua7c6\\ua7f7-\\ua827\\ua840-\\ua873\\ua880-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f7\\ua8fb\\ua8fd-\\ua92d\\ua930-\\ua953\\ua960-\\ua97c\\ua980-\\ua9c0\\ua9cf-\\ua9d9\\ua9e0-\\ua9fe\\uaa00-\\uaa36\\uaa40-\\uaa4d\\uaa50-\\uaa59\\uaa60-\\uaa76\\uaa7a-\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaef\\uaaf2-\\uaaf6\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab67\\uab70-\\uabea\\uabec-\\uabed\\uabf0-\\uabf9\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33-\\ufe34\\ufe4d-\\ufe4f\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff10-\\uff19\\uff21-\\uff3a\\uff3f\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc]|\\ud800[\\udc00-\\udc0b\\udc0d-\\udc26\\udc28-\\udc3a\\udc3c-\\udc3d\\udc3f-\\udc4d\\udc50-\\udc5d\\udc80-\\udcfa\\udd40-\\udd74\\uddfd\\ude80-\\ude9c\\udea0-\\uded0\\udee0\\udf00-\\udf1f\\udf2d-\\udf4a\\udf50-\\udf7a\\udf80-\\udf9d\\udfa0-\\udfc3\\udfc8-\\udfcf\\udfd1-\\udfd5]|\\ud801[\\udc00-\\udc9d\\udca0-\\udca9\\udcb0-\\udcd3\\udcd8-\\udcfb\\udd00-\\udd27\\udd30-\\udd63\\ude00-\\udf36\\udf40-\\udf55\\udf60-\\udf67]|\\ud802[\\udc00-\\udc05\\udc08\\udc0a-\\udc35\\udc37-\\udc38\\udc3c\\udc3f-\\udc55\\udc60-\\udc76\\udc80-\\udc9e\\udce0-\\udcf2\\udcf4-\\udcf5\\udd00-\\udd15\\udd20-\\udd39\\udd80-\\uddb7\\uddbe-\\uddbf\\ude00-\\ude03\\ude05-\\ude06\\ude0c-\\ude13\\ude15-\\ude17\\ude19-\\ude35\\ude38-\\ude3a\\ude3f\\ude60-\\ude7c\\ude80-\\ude9c\\udec0-\\udec7\\udec9-\\udee6\\udf00-\\udf35\\udf40-\\udf55\\udf60-\\udf72\\udf80-\\udf91]|\\ud803[\\udc00-\\udc48\\udc80-\\udcb2\\udcc0-\\udcf2\\udd00-\\udd27\\udd30-\\udd39\\udf00-\\udf1c\\udf27\\udf30-\\udf50\\udfe0-\\udff6]|\\ud804[\\udc00-\\udc46\\udc66-\\udc6f\\udc7f-\\udcba\\udcd0-\\udce8\\udcf0-\\udcf9\\udd00-\\udd34\\udd36-\\udd3f\\udd44-\\udd46\\udd50-\\udd73\\udd76\\udd80-\\uddc4\\uddc9-\\uddcc\\uddd0-\\uddda\\udddc\\ude00-\\ude11\\ude13-\\ude37\\ude3e\\ude80-\\ude86\\ude88\\ude8a-\\ude8d\\ude8f-\\ude9d\\ude9f-\\udea8\\udeb0-\\udeea\\udef0-\\udef9\\udf00-\\udf03\\udf05-\\udf0c\\udf0f-\\udf10\\udf13-\\udf28\\udf2a-\\udf30\\udf32-\\udf33\\udf35-\\udf39\\udf3b-\\udf44\\udf47-\\udf48\\udf4b-\\udf4d\\udf50\\udf57\\udf5d-\\udf63\\udf66-\\udf6c\\udf70-\\udf74]|\\ud805[\\udc00-\\udc4a\\udc50-\\udc59\\udc5e-\\udc5f\\udc80-\\udcc5\\udcc7\\udcd0-\\udcd9\\udd80-\\uddb5\\uddb8-\\uddc0\\uddd8-\\udddd\\ude00-\\ude40\\ude44\\ude50-\\ude59\\ude80-\\udeb8\\udec0-\\udec9\\udf00-\\udf1a\\udf1d-\\udf2b\\udf30-\\udf39]|\\ud806[\\udc00-\\udc3a\\udca0-\\udce9\\udcff\\udda0-\\udda7\\uddaa-\\uddd7\\uddda-\\udde1\\udde3-\\udde4\\ude00-\\ude3e\\ude47\\ude50-\\ude99\\ude9d\\udec0-\\udef8]|\\ud807[\\udc00-\\udc08\\udc0a-\\udc36\\udc38-\\udc40\\udc50-\\udc59\\udc72-\\udc8f\\udc92-\\udca7\\udca9-\\udcb6\\udd00-\\udd06\\udd08-\\udd09\\udd0b-\\udd36\\udd3a\\udd3c-\\udd3d\\udd3f-\\udd47\\udd50-\\udd59\\udd60-\\udd65\\udd67-\\udd68\\udd6a-\\udd8e\\udd90-\\udd91\\udd93-\\udd98\\udda0-\\udda9\\udee0-\\udef6]|\\ud808[\\udc00-\\udf99]|\\ud809[\\udc00-\\udc6e\\udc80-\\udd43]|\\ud80c[\\udc00-\\udfff]|\\ud80d[\\udc00-\\udc2e]|\\ud811[\\udc00-\\ude46]|\\ud81a[\\udc00-\\ude38\\ude40-\\ude5e\\ude60-\\ude69\\uded0-\\udeed\\udef0-\\udef4\\udf00-\\udf36\\udf40-\\udf43\\udf50-\\udf59\\udf63-\\udf77\\udf7d-\\udf8f]|\\ud81b[\\ude40-\\ude7f\\udf00-\\udf4a\\udf4f-\\udf87\\udf8f-\\udf9f\\udfe0-\\udfe1\\udfe3]|\\ud81c[\\udc00-\\udfff]|\\ud81d[\\udc00-\\udfff]|\\ud81e[\\udc00-\\udfff]|\\ud81f[\\udc00-\\udfff]|\\ud820[\\udc00-\\udfff]|\\ud821[\\udc00-\\udff7]|\\ud822[\\udc00-\\udef2]|\\ud82c[\\udc00-\\udd1e\\udd50-\\udd52\\udd64-\\udd67\\udd70-\\udefb]|\\ud82f[\\udc00-\\udc6a\\udc70-\\udc7c\\udc80-\\udc88\\udc90-\\udc99\\udc9d-\\udc9e]|\\ud834[\\udd65-\\udd69\\udd6d-\\udd72\\udd7b-\\udd82\\udd85-\\udd8b\\uddaa-\\uddad\\ude42-\\ude44]|\\ud835[\\udc00-\\udc54\\udc56-\\udc9c\\udc9e-\\udc9f\\udca2\\udca5-\\udca6\\udca9-\\udcac\\udcae-\\udcb9\\udcbb\\udcbd-\\udcc3\\udcc5-\\udd05\\udd07-\\udd0a\\udd0d-\\udd14\\udd16-\\udd1c\\udd1e-\\udd39\\udd3b-\\udd3e\\udd40-\\udd44\\udd46\\udd4a-\\udd50\\udd52-\\udea5\\udea8-\\udec0\\udec2-\\udeda\\udedc-\\udefa\\udefc-\\udf14\\udf16-\\udf34\\udf36-\\udf4e\\udf50-\\udf6e\\udf70-\\udf88\\udf8a-\\udfa8\\udfaa-\\udfc2\\udfc4-\\udfcb\\udfce-\\udfff]|\\ud836[\\ude00-\\ude36\\ude3b-\\ude6c\\ude75\\ude84\\ude9b-\\ude9f\\udea1-\\udeaf]|\\ud838[\\udc00-\\udc06\\udc08-\\udc18\\udc1b-\\udc21\\udc23-\\udc24\\udc26-\\udc2a\\udd00-\\udd2c\\udd30-\\udd3d\\udd40-\\udd49\\udd4e\\udec0-\\udef9]|\\ud83a[\\udc00-\\udcc4\\udcd0-\\udcd6\\udd00-\\udd4b\\udd50-\\udd59]|\\ud83b[\\ude00-\\ude03\\ude05-\\ude1f\\ude21-\\ude22\\ude24\\ude27\\ude29-\\ude32\\ude34-\\ude37\\ude39\\ude3b\\ude42\\ude47\\ude49\\ude4b\\ude4d-\\ude4f\\ude51-\\ude52\\ude54\\ude57\\ude59\\ude5b\\ude5d\\ude5f\\ude61-\\ude62\\ude64\\ude67-\\ude6a\\ude6c-\\ude72\\ude74-\\ude77\\ude79-\\ude7c\\ude7e\\ude80-\\ude89\\ude8b-\\ude9b\\udea1-\\udea3\\udea5-\\udea9\\udeab-\\udebb]|\\ud840[\\udc00-\\udfff]|\\ud841[\\udc00-\\udfff]|\\ud842[\\udc00-\\udfff]|\\ud843[\\udc00-\\udfff]|\\ud844[\\udc00-\\udfff]|\\ud845[\\udc00-\\udfff]|\\ud846[\\udc00-\\udfff]|\\ud847[\\udc00-\\udfff]|\\ud848[\\udc00-\\udfff]|\\ud849[\\udc00-\\udfff]|\\ud84a[\\udc00-\\udfff]|\\ud84b[\\udc00-\\udfff]|\\ud84c[\\udc00-\\udfff]|\\ud84d[\\udc00-\\udfff]|\\ud84e[\\udc00-\\udfff]|\\ud84f[\\udc00-\\udfff]|\\ud850[\\udc00-\\udfff]|\\ud851[\\udc00-\\udfff]|\\ud852[\\udc00-\\udfff]|\\ud853[\\udc00-\\udfff]|\\ud854[\\udc00-\\udfff]|\\ud855[\\udc00-\\udfff]|\\ud856[\\udc00-\\udfff]|\\ud857[\\udc00-\\udfff]|\\ud858[\\udc00-\\udfff]|\\ud859[\\udc00-\\udfff]|\\ud85a[\\udc00-\\udfff]|\\ud85b[\\udc00-\\udfff]|\\ud85c[\\udc00-\\udfff]|\\ud85d[\\udc00-\\udfff]|\\ud85e[\\udc00-\\udfff]|\\ud85f[\\udc00-\\udfff]|\\ud860[\\udc00-\\udfff]|\\ud861[\\udc00-\\udfff]|\\ud862[\\udc00-\\udfff]|\\ud863[\\udc00-\\udfff]|\\ud864[\\udc00-\\udfff]|\\ud865[\\udc00-\\udfff]|\\ud866[\\udc00-\\udfff]|\\ud867[\\udc00-\\udfff]|\\ud868[\\udc00-\\udfff]|\\ud869[\\udc00-\\uded6\\udf00-\\udfff]|\\ud86a[\\udc00-\\udfff]|\\ud86b[\\udc00-\\udfff]|\\ud86c[\\udc00-\\udfff]|\\ud86d[\\udc00-\\udf34\\udf40-\\udfff]|\\ud86e[\\udc00-\\udc1d\\udc20-\\udfff]|\\ud86f[\\udc00-\\udfff]|\\ud870[\\udc00-\\udfff]|\\ud871[\\udc00-\\udfff]|\\ud872[\\udc00-\\udfff]|\\ud873[\\udc00-\\udea1\\udeb0-\\udfff]|\\ud874[\\udc00-\\udfff]|\\ud875[\\udc00-\\udfff]|\\ud876[\\udc00-\\udfff]|\\ud877[\\udc00-\\udfff]|\\ud878[\\udc00-\\udfff]|\\ud879[\\udc00-\\udfff]|\\ud87a[\\udc00-\\udfe0]|\\ud87e[\\udc00-\\ude1d]|\\udb40[\\udd00-\\uddef])|[$_]|(\\\\u[0-9a-fA-F]{4}|\\\\u\\{[0-9a-fA-F]{1,}\\})|[\\u200c\\u200d])*>/, function () {\n  var groupName = yytext.slice(3, -1);\n  validateUnicodeGroupName(groupName, this.getCurrentState());\n  return 'NAMED_GROUP_REF';\n}], [/^\\\\b/, function () {\n  return 'ESC_b';\n}], [/^\\\\B/, function () {\n  return 'ESC_B';\n}], [/^\\\\c[a-zA-Z]/, function () {\n  return 'CTRL_CH';\n}], [/^\\\\0\\d{1,2}/, function () {\n  return 'OCT_CODE';\n}], [/^\\\\0/, function () {\n  return 'DEC_CODE';\n}], [/^\\\\\\d{1,3}/, function () {\n  return 'DEC_CODE';\n}], [/^\\\\u[dD][89abAB][0-9a-fA-F]{2}\\\\u[dD][c-fC-F][0-9a-fA-F]{2}/, function () {\n  return 'U_CODE_SURROGATE';\n}], [/^\\\\u\\{[0-9a-fA-F]{1,}\\}/, function () {\n  return 'U_CODE';\n}], [/^\\\\u[0-9a-fA-F]{4}/, function () {\n  return 'U_CODE';\n}], [/^\\\\[pP]\\{\\w+(?:=\\w+)?\\}/, function () {\n  return 'U_PROP_VALUE_EXP';\n}], [/^\\\\x[0-9a-fA-F]{2}/, function () {\n  return 'HEX_CODE';\n}], [/^\\\\[tnrdDsSwWvf]/, function () {\n  return 'META_CHAR';\n}], [/^\\\\\\//, function () {\n  return 'ESC_CHAR';\n}], [/^\\\\[ #]/, function () {\n  return 'ESC_CHAR';\n}], [/^\\\\[\\^\\$\\.\\*\\+\\?\\(\\)\\\\\\[\\]\\{\\}\\|\\/]/, function () {\n  return 'ESC_CHAR';\n}], [/^\\\\[^*?+\\[()\\\\|]/, function () {\n  var s = this.getCurrentState();\n  if (s === 'u_class' && yytext === \"\\\\-\") {\n    return 'ESC_CHAR';\n  } else if (s === 'u' || s === 'xu' || s === 'u_class') {\n    throw new SyntaxError('invalid Unicode escape ' + yytext);\n  }\n  return 'ESC_CHAR';\n}], [/^\\(/, function () {\n  return 'CHAR';\n}], [/^\\)/, function () {\n  return 'CHAR';\n}], [/^\\(\\?=/, function () {\n  return 'POS_LA_ASSERT';\n}], [/^\\(\\?!/, function () {\n  return 'NEG_LA_ASSERT';\n}], [/^\\(\\?<=/, function () {\n  return 'POS_LB_ASSERT';\n}], [/^\\(\\?<!/, function () {\n  return 'NEG_LB_ASSERT';\n}], [/^\\(\\?:/, function () {\n  return 'NON_CAPTURE_GROUP';\n}], [/^\\(\\?<(([\\u0041-\\u005a\\u0061-\\u007a\\u00aa\\u00b5\\u00ba\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376-\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e-\\u066f\\u0671-\\u06d3\\u06d5\\u06e5-\\u06e6\\u06ee-\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4-\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u08a0-\\u08b4\\u08b6-\\u08bd\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f-\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc-\\u09dd\\u09df-\\u09e1\\u09f0-\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f-\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32-\\u0a33\\u0a35-\\u0a36\\u0a38-\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2-\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0-\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f-\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32-\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c-\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99-\\u0b9a\\u0b9c\\u0b9e-\\u0b9f\\u0ba3-\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c60-\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0-\\u0ce1\\u0cf1-\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32-\\u0e33\\u0e40-\\u0e46\\u0e81-\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2-\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065-\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae-\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5-\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2-\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fef\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a-\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7bf\\ua7c2-\\ua7c6\\ua7f7-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd-\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5-\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab67\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc]|\\ud800[\\udc00-\\udc0b\\udc0d-\\udc26\\udc28-\\udc3a\\udc3c-\\udc3d\\udc3f-\\udc4d\\udc50-\\udc5d\\udc80-\\udcfa\\udd40-\\udd74\\ude80-\\ude9c\\udea0-\\uded0\\udf00-\\udf1f\\udf2d-\\udf4a\\udf50-\\udf75\\udf80-\\udf9d\\udfa0-\\udfc3\\udfc8-\\udfcf\\udfd1-\\udfd5]|\\ud801[\\udc00-\\udc9d\\udcb0-\\udcd3\\udcd8-\\udcfb\\udd00-\\udd27\\udd30-\\udd63\\ude00-\\udf36\\udf40-\\udf55\\udf60-\\udf67]|\\ud802[\\udc00-\\udc05\\udc08\\udc0a-\\udc35\\udc37-\\udc38\\udc3c\\udc3f-\\udc55\\udc60-\\udc76\\udc80-\\udc9e\\udce0-\\udcf2\\udcf4-\\udcf5\\udd00-\\udd15\\udd20-\\udd39\\udd80-\\uddb7\\uddbe-\\uddbf\\ude00\\ude10-\\ude13\\ude15-\\ude17\\ude19-\\ude35\\ude60-\\ude7c\\ude80-\\ude9c\\udec0-\\udec7\\udec9-\\udee4\\udf00-\\udf35\\udf40-\\udf55\\udf60-\\udf72\\udf80-\\udf91]|\\ud803[\\udc00-\\udc48\\udc80-\\udcb2\\udcc0-\\udcf2\\udd00-\\udd23\\udf00-\\udf1c\\udf27\\udf30-\\udf45\\udfe0-\\udff6]|\\ud804[\\udc03-\\udc37\\udc83-\\udcaf\\udcd0-\\udce8\\udd03-\\udd26\\udd44\\udd50-\\udd72\\udd76\\udd83-\\uddb2\\uddc1-\\uddc4\\uddda\\udddc\\ude00-\\ude11\\ude13-\\ude2b\\ude80-\\ude86\\ude88\\ude8a-\\ude8d\\ude8f-\\ude9d\\ude9f-\\udea8\\udeb0-\\udede\\udf05-\\udf0c\\udf0f-\\udf10\\udf13-\\udf28\\udf2a-\\udf30\\udf32-\\udf33\\udf35-\\udf39\\udf3d\\udf50\\udf5d-\\udf61]|\\ud805[\\udc00-\\udc34\\udc47-\\udc4a\\udc5f\\udc80-\\udcaf\\udcc4-\\udcc5\\udcc7\\udd80-\\uddae\\uddd8-\\udddb\\ude00-\\ude2f\\ude44\\ude80-\\udeaa\\udeb8\\udf00-\\udf1a]|\\ud806[\\udc00-\\udc2b\\udca0-\\udcdf\\udcff\\udda0-\\udda7\\uddaa-\\uddd0\\udde1\\udde3\\ude00\\ude0b-\\ude32\\ude3a\\ude50\\ude5c-\\ude89\\ude9d\\udec0-\\udef8]|\\ud807[\\udc00-\\udc08\\udc0a-\\udc2e\\udc40\\udc72-\\udc8f\\udd00-\\udd06\\udd08-\\udd09\\udd0b-\\udd30\\udd46\\udd60-\\udd65\\udd67-\\udd68\\udd6a-\\udd89\\udd98\\udee0-\\udef2]|\\ud808[\\udc00-\\udf99]|\\ud809[\\udc00-\\udc6e\\udc80-\\udd43]|\\ud80c[\\udc00-\\udfff]|\\ud80d[\\udc00-\\udc2e]|\\ud811[\\udc00-\\ude46]|\\ud81a[\\udc00-\\ude38\\ude40-\\ude5e\\uded0-\\udeed\\udf00-\\udf2f\\udf40-\\udf43\\udf63-\\udf77\\udf7d-\\udf8f]|\\ud81b[\\ude40-\\ude7f\\udf00-\\udf4a\\udf50\\udf93-\\udf9f\\udfe0-\\udfe1\\udfe3]|\\ud81c[\\udc00-\\udfff]|\\ud81d[\\udc00-\\udfff]|\\ud81e[\\udc00-\\udfff]|\\ud81f[\\udc00-\\udfff]|\\ud820[\\udc00-\\udfff]|\\ud821[\\udc00-\\udff7]|\\ud822[\\udc00-\\udef2]|\\ud82c[\\udc00-\\udd1e\\udd50-\\udd52\\udd64-\\udd67\\udd70-\\udefb]|\\ud82f[\\udc00-\\udc6a\\udc70-\\udc7c\\udc80-\\udc88\\udc90-\\udc99]|\\ud835[\\udc00-\\udc54\\udc56-\\udc9c\\udc9e-\\udc9f\\udca2\\udca5-\\udca6\\udca9-\\udcac\\udcae-\\udcb9\\udcbb\\udcbd-\\udcc3\\udcc5-\\udd05\\udd07-\\udd0a\\udd0d-\\udd14\\udd16-\\udd1c\\udd1e-\\udd39\\udd3b-\\udd3e\\udd40-\\udd44\\udd46\\udd4a-\\udd50\\udd52-\\udea5\\udea8-\\udec0\\udec2-\\udeda\\udedc-\\udefa\\udefc-\\udf14\\udf16-\\udf34\\udf36-\\udf4e\\udf50-\\udf6e\\udf70-\\udf88\\udf8a-\\udfa8\\udfaa-\\udfc2\\udfc4-\\udfcb]|\\ud838[\\udd00-\\udd2c\\udd37-\\udd3d\\udd4e\\udec0-\\udeeb]|\\ud83a[\\udc00-\\udcc4\\udd00-\\udd43\\udd4b]|\\ud83b[\\ude00-\\ude03\\ude05-\\ude1f\\ude21-\\ude22\\ude24\\ude27\\ude29-\\ude32\\ude34-\\ude37\\ude39\\ude3b\\ude42\\ude47\\ude49\\ude4b\\ude4d-\\ude4f\\ude51-\\ude52\\ude54\\ude57\\ude59\\ude5b\\ude5d\\ude5f\\ude61-\\ude62\\ude64\\ude67-\\ude6a\\ude6c-\\ude72\\ude74-\\ude77\\ude79-\\ude7c\\ude7e\\ude80-\\ude89\\ude8b-\\ude9b\\udea1-\\udea3\\udea5-\\udea9\\udeab-\\udebb]|\\ud840[\\udc00-\\udfff]|\\ud841[\\udc00-\\udfff]|\\ud842[\\udc00-\\udfff]|\\ud843[\\udc00-\\udfff]|\\ud844[\\udc00-\\udfff]|\\ud845[\\udc00-\\udfff]|\\ud846[\\udc00-\\udfff]|\\ud847[\\udc00-\\udfff]|\\ud848[\\udc00-\\udfff]|\\ud849[\\udc00-\\udfff]|\\ud84a[\\udc00-\\udfff]|\\ud84b[\\udc00-\\udfff]|\\ud84c[\\udc00-\\udfff]|\\ud84d[\\udc00-\\udfff]|\\ud84e[\\udc00-\\udfff]|\\ud84f[\\udc00-\\udfff]|\\ud850[\\udc00-\\udfff]|\\ud851[\\udc00-\\udfff]|\\ud852[\\udc00-\\udfff]|\\ud853[\\udc00-\\udfff]|\\ud854[\\udc00-\\udfff]|\\ud855[\\udc00-\\udfff]|\\ud856[\\udc00-\\udfff]|\\ud857[\\udc00-\\udfff]|\\ud858[\\udc00-\\udfff]|\\ud859[\\udc00-\\udfff]|\\ud85a[\\udc00-\\udfff]|\\ud85b[\\udc00-\\udfff]|\\ud85c[\\udc00-\\udfff]|\\ud85d[\\udc00-\\udfff]|\\ud85e[\\udc00-\\udfff]|\\ud85f[\\udc00-\\udfff]|\\ud860[\\udc00-\\udfff]|\\ud861[\\udc00-\\udfff]|\\ud862[\\udc00-\\udfff]|\\ud863[\\udc00-\\udfff]|\\ud864[\\udc00-\\udfff]|\\ud865[\\udc00-\\udfff]|\\ud866[\\udc00-\\udfff]|\\ud867[\\udc00-\\udfff]|\\ud868[\\udc00-\\udfff]|\\ud869[\\udc00-\\uded6\\udf00-\\udfff]|\\ud86a[\\udc00-\\udfff]|\\ud86b[\\udc00-\\udfff]|\\ud86c[\\udc00-\\udfff]|\\ud86d[\\udc00-\\udf34\\udf40-\\udfff]|\\ud86e[\\udc00-\\udc1d\\udc20-\\udfff]|\\ud86f[\\udc00-\\udfff]|\\ud870[\\udc00-\\udfff]|\\ud871[\\udc00-\\udfff]|\\ud872[\\udc00-\\udfff]|\\ud873[\\udc00-\\udea1\\udeb0-\\udfff]|\\ud874[\\udc00-\\udfff]|\\ud875[\\udc00-\\udfff]|\\ud876[\\udc00-\\udfff]|\\ud877[\\udc00-\\udfff]|\\ud878[\\udc00-\\udfff]|\\ud879[\\udc00-\\udfff]|\\ud87a[\\udc00-\\udfe0]|\\ud87e[\\udc00-\\ude1d])|[$_]|(\\\\u[0-9a-fA-F]{4}|\\\\u\\{[0-9a-fA-F]{1,}\\}))(([\\u0030-\\u0039\\u0041-\\u005a\\u005f\\u0061-\\u007a\\u00aa\\u00b5\\u00b7\\u00ba\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0300-\\u0374\\u0376-\\u0377\\u037a-\\u037d\\u037f\\u0386-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u0483-\\u0487\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u0591-\\u05bd\\u05bf\\u05c1-\\u05c2\\u05c4-\\u05c5\\u05c7\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0610-\\u061a\\u0620-\\u0669\\u066e-\\u06d3\\u06d5-\\u06dc\\u06df-\\u06e8\\u06ea-\\u06fc\\u06ff\\u0710-\\u074a\\u074d-\\u07b1\\u07c0-\\u07f5\\u07fa\\u07fd\\u0800-\\u082d\\u0840-\\u085b\\u0860-\\u086a\\u08a0-\\u08b4\\u08b6-\\u08bd\\u08d3-\\u08e1\\u08e3-\\u0963\\u0966-\\u096f\\u0971-\\u0983\\u0985-\\u098c\\u098f-\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bc-\\u09c4\\u09c7-\\u09c8\\u09cb-\\u09ce\\u09d7\\u09dc-\\u09dd\\u09df-\\u09e3\\u09e6-\\u09f1\\u09fc\\u09fe\\u0a01-\\u0a03\\u0a05-\\u0a0a\\u0a0f-\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32-\\u0a33\\u0a35-\\u0a36\\u0a38-\\u0a39\\u0a3c\\u0a3e-\\u0a42\\u0a47-\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a59-\\u0a5c\\u0a5e\\u0a66-\\u0a75\\u0a81-\\u0a83\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2-\\u0ab3\\u0ab5-\\u0ab9\\u0abc-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ad0\\u0ae0-\\u0ae3\\u0ae6-\\u0aef\\u0af9-\\u0aff\\u0b01-\\u0b03\\u0b05-\\u0b0c\\u0b0f-\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32-\\u0b33\\u0b35-\\u0b39\\u0b3c-\\u0b44\\u0b47-\\u0b48\\u0b4b-\\u0b4d\\u0b56-\\u0b57\\u0b5c-\\u0b5d\\u0b5f-\\u0b63\\u0b66-\\u0b6f\\u0b71\\u0b82-\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99-\\u0b9a\\u0b9c\\u0b9e-\\u0b9f\\u0ba3-\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd0\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55-\\u0c56\\u0c58-\\u0c5a\\u0c60-\\u0c63\\u0c66-\\u0c6f\\u0c80-\\u0c83\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbc-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5-\\u0cd6\\u0cde\\u0ce0-\\u0ce3\\u0ce6-\\u0cef\\u0cf1-\\u0cf2\\u0d00-\\u0d03\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4e\\u0d54-\\u0d57\\u0d5f-\\u0d63\\u0d66-\\u0d6f\\u0d7a-\\u0d7f\\u0d82-\\u0d83\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2-\\u0df3\\u0e01-\\u0e3a\\u0e40-\\u0e4e\\u0e50-\\u0e59\\u0e81-\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0edc-\\u0edf\\u0f00\\u0f18-\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e-\\u0f47\\u0f49-\\u0f6c\\u0f71-\\u0f84\\u0f86-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u1000-\\u1049\\u1050-\\u109d\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u135d-\\u135f\\u1369-\\u1371\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u170c\\u170e-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176c\\u176e-\\u1770\\u1772-\\u1773\\u1780-\\u17d3\\u17d7\\u17dc-\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u1820-\\u1878\\u1880-\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u19d0-\\u19da\\u1a00-\\u1a1b\\u1a20-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1aa7\\u1ab0-\\u1abd\\u1b00-\\u1b4b\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1bf3\\u1c00-\\u1c37\\u1c40-\\u1c49\\u1c4d-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1cd0-\\u1cd2\\u1cd4-\\u1cfa\\u1d00-\\u1df9\\u1dfb-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u203f-\\u2040\\u2054\\u2071\\u207f\\u2090-\\u209c\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d7f-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2de0-\\u2dff\\u3005-\\u3007\\u3021-\\u302f\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u3099-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fef\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua62b\\ua640-\\ua66f\\ua674-\\ua67d\\ua67f-\\ua6f1\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7bf\\ua7c2-\\ua7c6\\ua7f7-\\ua827\\ua840-\\ua873\\ua880-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f7\\ua8fb\\ua8fd-\\ua92d\\ua930-\\ua953\\ua960-\\ua97c\\ua980-\\ua9c0\\ua9cf-\\ua9d9\\ua9e0-\\ua9fe\\uaa00-\\uaa36\\uaa40-\\uaa4d\\uaa50-\\uaa59\\uaa60-\\uaa76\\uaa7a-\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaef\\uaaf2-\\uaaf6\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab67\\uab70-\\uabea\\uabec-\\uabed\\uabf0-\\uabf9\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33-\\ufe34\\ufe4d-\\ufe4f\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff10-\\uff19\\uff21-\\uff3a\\uff3f\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc]|\\ud800[\\udc00-\\udc0b\\udc0d-\\udc26\\udc28-\\udc3a\\udc3c-\\udc3d\\udc3f-\\udc4d\\udc50-\\udc5d\\udc80-\\udcfa\\udd40-\\udd74\\uddfd\\ude80-\\ude9c\\udea0-\\uded0\\udee0\\udf00-\\udf1f\\udf2d-\\udf4a\\udf50-\\udf7a\\udf80-\\udf9d\\udfa0-\\udfc3\\udfc8-\\udfcf\\udfd1-\\udfd5]|\\ud801[\\udc00-\\udc9d\\udca0-\\udca9\\udcb0-\\udcd3\\udcd8-\\udcfb\\udd00-\\udd27\\udd30-\\udd63\\ude00-\\udf36\\udf40-\\udf55\\udf60-\\udf67]|\\ud802[\\udc00-\\udc05\\udc08\\udc0a-\\udc35\\udc37-\\udc38\\udc3c\\udc3f-\\udc55\\udc60-\\udc76\\udc80-\\udc9e\\udce0-\\udcf2\\udcf4-\\udcf5\\udd00-\\udd15\\udd20-\\udd39\\udd80-\\uddb7\\uddbe-\\uddbf\\ude00-\\ude03\\ude05-\\ude06\\ude0c-\\ude13\\ude15-\\ude17\\ude19-\\ude35\\ude38-\\ude3a\\ude3f\\ude60-\\ude7c\\ude80-\\ude9c\\udec0-\\udec7\\udec9-\\udee6\\udf00-\\udf35\\udf40-\\udf55\\udf60-\\udf72\\udf80-\\udf91]|\\ud803[\\udc00-\\udc48\\udc80-\\udcb2\\udcc0-\\udcf2\\udd00-\\udd27\\udd30-\\udd39\\udf00-\\udf1c\\udf27\\udf30-\\udf50\\udfe0-\\udff6]|\\ud804[\\udc00-\\udc46\\udc66-\\udc6f\\udc7f-\\udcba\\udcd0-\\udce8\\udcf0-\\udcf9\\udd00-\\udd34\\udd36-\\udd3f\\udd44-\\udd46\\udd50-\\udd73\\udd76\\udd80-\\uddc4\\uddc9-\\uddcc\\uddd0-\\uddda\\udddc\\ude00-\\ude11\\ude13-\\ude37\\ude3e\\ude80-\\ude86\\ude88\\ude8a-\\ude8d\\ude8f-\\ude9d\\ude9f-\\udea8\\udeb0-\\udeea\\udef0-\\udef9\\udf00-\\udf03\\udf05-\\udf0c\\udf0f-\\udf10\\udf13-\\udf28\\udf2a-\\udf30\\udf32-\\udf33\\udf35-\\udf39\\udf3b-\\udf44\\udf47-\\udf48\\udf4b-\\udf4d\\udf50\\udf57\\udf5d-\\udf63\\udf66-\\udf6c\\udf70-\\udf74]|\\ud805[\\udc00-\\udc4a\\udc50-\\udc59\\udc5e-\\udc5f\\udc80-\\udcc5\\udcc7\\udcd0-\\udcd9\\udd80-\\uddb5\\uddb8-\\uddc0\\uddd8-\\udddd\\ude00-\\ude40\\ude44\\ude50-\\ude59\\ude80-\\udeb8\\udec0-\\udec9\\udf00-\\udf1a\\udf1d-\\udf2b\\udf30-\\udf39]|\\ud806[\\udc00-\\udc3a\\udca0-\\udce9\\udcff\\udda0-\\udda7\\uddaa-\\uddd7\\uddda-\\udde1\\udde3-\\udde4\\ude00-\\ude3e\\ude47\\ude50-\\ude99\\ude9d\\udec0-\\udef8]|\\ud807[\\udc00-\\udc08\\udc0a-\\udc36\\udc38-\\udc40\\udc50-\\udc59\\udc72-\\udc8f\\udc92-\\udca7\\udca9-\\udcb6\\udd00-\\udd06\\udd08-\\udd09\\udd0b-\\udd36\\udd3a\\udd3c-\\udd3d\\udd3f-\\udd47\\udd50-\\udd59\\udd60-\\udd65\\udd67-\\udd68\\udd6a-\\udd8e\\udd90-\\udd91\\udd93-\\udd98\\udda0-\\udda9\\udee0-\\udef6]|\\ud808[\\udc00-\\udf99]|\\ud809[\\udc00-\\udc6e\\udc80-\\udd43]|\\ud80c[\\udc00-\\udfff]|\\ud80d[\\udc00-\\udc2e]|\\ud811[\\udc00-\\ude46]|\\ud81a[\\udc00-\\ude38\\ude40-\\ude5e\\ude60-\\ude69\\uded0-\\udeed\\udef0-\\udef4\\udf00-\\udf36\\udf40-\\udf43\\udf50-\\udf59\\udf63-\\udf77\\udf7d-\\udf8f]|\\ud81b[\\ude40-\\ude7f\\udf00-\\udf4a\\udf4f-\\udf87\\udf8f-\\udf9f\\udfe0-\\udfe1\\udfe3]|\\ud81c[\\udc00-\\udfff]|\\ud81d[\\udc00-\\udfff]|\\ud81e[\\udc00-\\udfff]|\\ud81f[\\udc00-\\udfff]|\\ud820[\\udc00-\\udfff]|\\ud821[\\udc00-\\udff7]|\\ud822[\\udc00-\\udef2]|\\ud82c[\\udc00-\\udd1e\\udd50-\\udd52\\udd64-\\udd67\\udd70-\\udefb]|\\ud82f[\\udc00-\\udc6a\\udc70-\\udc7c\\udc80-\\udc88\\udc90-\\udc99\\udc9d-\\udc9e]|\\ud834[\\udd65-\\udd69\\udd6d-\\udd72\\udd7b-\\udd82\\udd85-\\udd8b\\uddaa-\\uddad\\ude42-\\ude44]|\\ud835[\\udc00-\\udc54\\udc56-\\udc9c\\udc9e-\\udc9f\\udca2\\udca5-\\udca6\\udca9-\\udcac\\udcae-\\udcb9\\udcbb\\udcbd-\\udcc3\\udcc5-\\udd05\\udd07-\\udd0a\\udd0d-\\udd14\\udd16-\\udd1c\\udd1e-\\udd39\\udd3b-\\udd3e\\udd40-\\udd44\\udd46\\udd4a-\\udd50\\udd52-\\udea5\\udea8-\\udec0\\udec2-\\udeda\\udedc-\\udefa\\udefc-\\udf14\\udf16-\\udf34\\udf36-\\udf4e\\udf50-\\udf6e\\udf70-\\udf88\\udf8a-\\udfa8\\udfaa-\\udfc2\\udfc4-\\udfcb\\udfce-\\udfff]|\\ud836[\\ude00-\\ude36\\ude3b-\\ude6c\\ude75\\ude84\\ude9b-\\ude9f\\udea1-\\udeaf]|\\ud838[\\udc00-\\udc06\\udc08-\\udc18\\udc1b-\\udc21\\udc23-\\udc24\\udc26-\\udc2a\\udd00-\\udd2c\\udd30-\\udd3d\\udd40-\\udd49\\udd4e\\udec0-\\udef9]|\\ud83a[\\udc00-\\udcc4\\udcd0-\\udcd6\\udd00-\\udd4b\\udd50-\\udd59]|\\ud83b[\\ude00-\\ude03\\ude05-\\ude1f\\ude21-\\ude22\\ude24\\ude27\\ude29-\\ude32\\ude34-\\ude37\\ude39\\ude3b\\ude42\\ude47\\ude49\\ude4b\\ude4d-\\ude4f\\ude51-\\ude52\\ude54\\ude57\\ude59\\ude5b\\ude5d\\ude5f\\ude61-\\ude62\\ude64\\ude67-\\ude6a\\ude6c-\\ude72\\ude74-\\ude77\\ude79-\\ude7c\\ude7e\\ude80-\\ude89\\ude8b-\\ude9b\\udea1-\\udea3\\udea5-\\udea9\\udeab-\\udebb]|\\ud840[\\udc00-\\udfff]|\\ud841[\\udc00-\\udfff]|\\ud842[\\udc00-\\udfff]|\\ud843[\\udc00-\\udfff]|\\ud844[\\udc00-\\udfff]|\\ud845[\\udc00-\\udfff]|\\ud846[\\udc00-\\udfff]|\\ud847[\\udc00-\\udfff]|\\ud848[\\udc00-\\udfff]|\\ud849[\\udc00-\\udfff]|\\ud84a[\\udc00-\\udfff]|\\ud84b[\\udc00-\\udfff]|\\ud84c[\\udc00-\\udfff]|\\ud84d[\\udc00-\\udfff]|\\ud84e[\\udc00-\\udfff]|\\ud84f[\\udc00-\\udfff]|\\ud850[\\udc00-\\udfff]|\\ud851[\\udc00-\\udfff]|\\ud852[\\udc00-\\udfff]|\\ud853[\\udc00-\\udfff]|\\ud854[\\udc00-\\udfff]|\\ud855[\\udc00-\\udfff]|\\ud856[\\udc00-\\udfff]|\\ud857[\\udc00-\\udfff]|\\ud858[\\udc00-\\udfff]|\\ud859[\\udc00-\\udfff]|\\ud85a[\\udc00-\\udfff]|\\ud85b[\\udc00-\\udfff]|\\ud85c[\\udc00-\\udfff]|\\ud85d[\\udc00-\\udfff]|\\ud85e[\\udc00-\\udfff]|\\ud85f[\\udc00-\\udfff]|\\ud860[\\udc00-\\udfff]|\\ud861[\\udc00-\\udfff]|\\ud862[\\udc00-\\udfff]|\\ud863[\\udc00-\\udfff]|\\ud864[\\udc00-\\udfff]|\\ud865[\\udc00-\\udfff]|\\ud866[\\udc00-\\udfff]|\\ud867[\\udc00-\\udfff]|\\ud868[\\udc00-\\udfff]|\\ud869[\\udc00-\\uded6\\udf00-\\udfff]|\\ud86a[\\udc00-\\udfff]|\\ud86b[\\udc00-\\udfff]|\\ud86c[\\udc00-\\udfff]|\\ud86d[\\udc00-\\udf34\\udf40-\\udfff]|\\ud86e[\\udc00-\\udc1d\\udc20-\\udfff]|\\ud86f[\\udc00-\\udfff]|\\ud870[\\udc00-\\udfff]|\\ud871[\\udc00-\\udfff]|\\ud872[\\udc00-\\udfff]|\\ud873[\\udc00-\\udea1\\udeb0-\\udfff]|\\ud874[\\udc00-\\udfff]|\\ud875[\\udc00-\\udfff]|\\ud876[\\udc00-\\udfff]|\\ud877[\\udc00-\\udfff]|\\ud878[\\udc00-\\udfff]|\\ud879[\\udc00-\\udfff]|\\ud87a[\\udc00-\\udfe0]|\\ud87e[\\udc00-\\ude1d]|\\udb40[\\udd00-\\uddef])|[$_]|(\\\\u[0-9a-fA-F]{4}|\\\\u\\{[0-9a-fA-F]{1,}\\})|[\\u200c\\u200d])*>/, function () {\n  yytext = yytext.slice(3, -1);\n  validateUnicodeGroupName(yytext, this.getCurrentState());\n  return 'NAMED_CAPTURE_GROUP';\n}], [/^\\(/, function () {\n  return 'L_PAREN';\n}], [/^\\)/, function () {\n  return 'R_PAREN';\n}], [/^[*?+[^$]/, function () {\n  return 'CHAR';\n}], [/^\\\\\\]/, function () {\n  return 'ESC_CHAR';\n}], [/^\\]/, function () {\n  this.popState();return 'R_BRACKET';\n}], [/^\\^/, function () {\n  return 'BOS';\n}], [/^\\$/, function () {\n  return 'EOS';\n}], [/^\\*/, function () {\n  return 'STAR';\n}], [/^\\?/, function () {\n  return 'Q_MARK';\n}], [/^\\+/, function () {\n  return 'PLUS';\n}], [/^\\|/, function () {\n  return 'BAR';\n}], [/^\\./, function () {\n  return 'ANY';\n}], [/^\\//, function () {\n  return 'SLASH';\n}], [/^[^*?+\\[()\\\\|]/, function () {\n  return 'CHAR';\n}], [/^\\[\\^/, function () {\n  var s = this.getCurrentState();this.pushState(s === 'u' || s === 'xu' ? 'u_class' : 'class');return 'NEG_CLASS';\n}], [/^\\[/, function () {\n  var s = this.getCurrentState();this.pushState(s === 'u' || s === 'xu' ? 'u_class' : 'class');return 'L_BRACKET';\n}]];\nvar lexRulesByConditions = { \"INITIAL\": [8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20, 22, 23, 24, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], \"u\": [8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], \"xu\": [0, 1, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], \"x\": [0, 1, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20, 22, 23, 24, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], \"u_class\": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], \"class\": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51] };\n\nvar EOF_TOKEN = {\n  type: EOF,\n  value: ''\n};\n\ntokenizer = {\n  initString: function initString(string) {\n    this._string = string;\n    this._cursor = 0;\n\n    this._states = ['INITIAL'];\n    this._tokensQueue = [];\n\n    this._currentLine = 1;\n    this._currentColumn = 0;\n    this._currentLineBeginOffset = 0;\n\n    /**\n     * Matched token location data.\n     */\n    this._tokenStartOffset = 0;\n    this._tokenEndOffset = 0;\n    this._tokenStartLine = 1;\n    this._tokenEndLine = 1;\n    this._tokenStartColumn = 0;\n    this._tokenEndColumn = 0;\n\n    return this;\n  },\n\n\n  /**\n   * Returns tokenizer states.\n   */\n  getStates: function getStates() {\n    return this._states;\n  },\n  getCurrentState: function getCurrentState() {\n    return this._states[this._states.length - 1];\n  },\n  pushState: function pushState(state) {\n    this._states.push(state);\n  },\n  begin: function begin(state) {\n    this.pushState(state);\n  },\n  popState: function popState() {\n    if (this._states.length > 1) {\n      return this._states.pop();\n    }\n    return this._states[0];\n  },\n  getNextToken: function getNextToken() {\n    // Something was queued, return it.\n    if (this._tokensQueue.length > 0) {\n      return this.onToken(this._toToken(this._tokensQueue.shift()));\n    }\n\n    if (!this.hasMoreTokens()) {\n      return this.onToken(EOF_TOKEN);\n    }\n\n    var string = this._string.slice(this._cursor);\n    var lexRulesForState = lexRulesByConditions[this.getCurrentState()];\n\n    for (var i = 0; i < lexRulesForState.length; i++) {\n      var lexRuleIndex = lexRulesForState[i];\n      var lexRule = lexRules[lexRuleIndex];\n\n      var matched = this._match(string, lexRule[0]);\n\n      // Manual handling of EOF token (the end of string). Return it\n      // as `EOF` symbol.\n      if (string === '' && matched === '') {\n        this._cursor++;\n      }\n\n      if (matched !== null) {\n        yytext = matched;\n        yyleng = yytext.length;\n        var token = lexRule[1].call(this);\n\n        if (!token) {\n          return this.getNextToken();\n        }\n\n        // If multiple tokens are returned, save them to return\n        // on next `getNextToken` call.\n\n        if (Array.isArray(token)) {\n          var tokensToQueue = token.slice(1);\n          token = token[0];\n          if (tokensToQueue.length > 0) {\n            var _tokensQueue;\n\n            (_tokensQueue = this._tokensQueue).unshift.apply(_tokensQueue, _toConsumableArray(tokensToQueue));\n          }\n        }\n\n        return this.onToken(this._toToken(token, yytext));\n      }\n    }\n\n    if (this.isEOF()) {\n      this._cursor++;\n      return EOF_TOKEN;\n    }\n\n    this.throwUnexpectedToken(string[0], this._currentLine, this._currentColumn);\n  },\n\n\n  /**\n   * Throws default \"Unexpected token\" exception, showing the actual\n   * line from the source, pointing with the ^ marker to the bad token.\n   * In addition, shows `line:column` location.\n   */\n  throwUnexpectedToken: function throwUnexpectedToken(symbol, line, column) {\n    var lineSource = this._string.split('\\n')[line - 1];\n    var lineData = '';\n\n    if (lineSource) {\n      var pad = ' '.repeat(column);\n      lineData = '\\n\\n' + lineSource + '\\n' + pad + '^\\n';\n    }\n\n    throw new SyntaxError(lineData + 'Unexpected token: \"' + symbol + '\" ' + ('at ' + line + ':' + column + '.'));\n  },\n  getCursor: function getCursor() {\n    return this._cursor;\n  },\n  getCurrentLine: function getCurrentLine() {\n    return this._currentLine;\n  },\n  getCurrentColumn: function getCurrentColumn() {\n    return this._currentColumn;\n  },\n  _captureLocation: function _captureLocation(matched) {\n    var nlRe = /\\n/g;\n\n    // Absolute offsets.\n    this._tokenStartOffset = this._cursor;\n\n    // Line-based locations, start.\n    this._tokenStartLine = this._currentLine;\n    this._tokenStartColumn = this._tokenStartOffset - this._currentLineBeginOffset;\n\n    // Extract `\\n` in the matched token.\n    var nlMatch = void 0;\n    while ((nlMatch = nlRe.exec(matched)) !== null) {\n      this._currentLine++;\n      this._currentLineBeginOffset = this._tokenStartOffset + nlMatch.index + 1;\n    }\n\n    this._tokenEndOffset = this._cursor + matched.length;\n\n    // Line-based locations, end.\n    this._tokenEndLine = this._currentLine;\n    this._tokenEndColumn = this._currentColumn = this._tokenEndOffset - this._currentLineBeginOffset;\n  },\n  _toToken: function _toToken(tokenType) {\n    var yytext = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n    return {\n      // Basic data.\n      type: tokenType,\n      value: yytext,\n\n      // Location data.\n      startOffset: this._tokenStartOffset,\n      endOffset: this._tokenEndOffset,\n      startLine: this._tokenStartLine,\n      endLine: this._tokenEndLine,\n      startColumn: this._tokenStartColumn,\n      endColumn: this._tokenEndColumn\n    };\n  },\n  isEOF: function isEOF() {\n    return this._cursor === this._string.length;\n  },\n  hasMoreTokens: function hasMoreTokens() {\n    return this._cursor <= this._string.length;\n  },\n  _match: function _match(string, regexp) {\n    var matched = string.match(regexp);\n    if (matched) {\n      // Handle `\\n` in the matched token to track line numbers.\n      this._captureLocation(matched[0]);\n      this._cursor += matched[0].length;\n      return matched[0];\n    }\n    return null;\n  },\n\n\n  /**\n   * Allows analyzing, and transforming token. Default implementation\n   * just passes the token through.\n   */\n  onToken: function onToken(token) {\n    return token;\n  }\n};\n\n/**\n * Expose tokenizer so it can be accessed in semantic actions.\n */\nyy.lexer = tokenizer;\nyy.tokenizer = tokenizer;\n\n/**\n * Global parsing options. Some options can be shadowed per\n * each `parse` call, if the optations are passed.\n *\n * Initalized to the `captureLocations` which is passed\n * from the generator. Other options can be added at runtime.\n */\nyy.options = {\n  captureLocations: true\n};\n\n/**\n * Parsing module.\n */\nvar yyparse = {\n  /**\n   * Sets global parsing options.\n   */\n  setOptions: function setOptions(options) {\n    yy.options = options;\n    return this;\n  },\n\n\n  /**\n   * Returns parsing options.\n   */\n  getOptions: function getOptions() {\n    return yy.options;\n  },\n\n\n  /**\n   * Parses a string.\n   */\n  parse: function parse(string, parseOptions) {\n    if (!tokenizer) {\n      throw new Error('Tokenizer instance wasn\\'t specified.');\n    }\n\n    tokenizer.initString(string);\n\n    /**\n     * If parse options are passed, override global parse options for\n     * this call, and later restore global options.\n     */\n    var globalOptions = yy.options;\n    if (parseOptions) {\n      yy.options = Object.assign({}, yy.options, parseOptions);\n    }\n\n    /**\n     * Allow callers to do setup work based on the\n     * parsing string, and passed options.\n     */\n    yyparse.onParseBegin(string, tokenizer, yy.options);\n\n    stack.length = 0;\n    stack.push(0);\n\n    var token = tokenizer.getNextToken();\n    var shiftedToken = null;\n\n    do {\n      if (!token) {\n        // Restore options.\n        yy.options = globalOptions;\n        unexpectedEndOfInput();\n      }\n\n      var state = stack[stack.length - 1];\n      var column = tokens[token.type];\n\n      if (!table[state].hasOwnProperty(column)) {\n        yy.options = globalOptions;\n        unexpectedToken(token);\n      }\n\n      var entry = table[state][column];\n\n      // Shift action.\n      if (entry[0] === 's') {\n        var _loc2 = null;\n\n        if (yy.options.captureLocations) {\n          _loc2 = {\n            startOffset: token.startOffset,\n            endOffset: token.endOffset,\n            startLine: token.startLine,\n            endLine: token.endLine,\n            startColumn: token.startColumn,\n            endColumn: token.endColumn\n          };\n        }\n\n        shiftedToken = this.onShift(token);\n\n        stack.push({ symbol: tokens[shiftedToken.type], semanticValue: shiftedToken.value, loc: _loc2 }, Number(entry.slice(1)));\n\n        token = tokenizer.getNextToken();\n      }\n\n      // Reduce action.\n      else if (entry[0] === 'r') {\n          var productionNumber = entry.slice(1);\n          var production = productions[productionNumber];\n          var hasSemanticAction = typeof production[2] === 'function';\n          var semanticValueArgs = hasSemanticAction ? [] : null;\n\n          var locationArgs = hasSemanticAction && yy.options.captureLocations ? [] : null;\n\n          if (production[1] !== 0) {\n            var rhsLength = production[1];\n            while (rhsLength-- > 0) {\n              stack.pop();\n              var stackEntry = stack.pop();\n\n              if (hasSemanticAction) {\n                semanticValueArgs.unshift(stackEntry.semanticValue);\n\n                if (locationArgs) {\n                  locationArgs.unshift(stackEntry.loc);\n                }\n              }\n            }\n          }\n\n          var reduceStackEntry = { symbol: production[0] };\n\n          if (hasSemanticAction) {\n            yytext = shiftedToken ? shiftedToken.value : null;\n            yyleng = shiftedToken ? shiftedToken.value.length : null;\n\n            var semanticActionArgs = locationArgs !== null ? semanticValueArgs.concat(locationArgs) : semanticValueArgs;\n\n            production[2].apply(production, _toConsumableArray(semanticActionArgs));\n\n            reduceStackEntry.semanticValue = __;\n\n            if (locationArgs) {\n              reduceStackEntry.loc = __loc;\n            }\n          }\n\n          var nextState = stack[stack.length - 1];\n          var symbolToReduceWith = production[0];\n\n          stack.push(reduceStackEntry, table[nextState][symbolToReduceWith]);\n        }\n\n        // Accept.\n        else if (entry === 'acc') {\n            stack.pop();\n            var parsed = stack.pop();\n\n            if (stack.length !== 1 || stack[0] !== 0 || tokenizer.hasMoreTokens()) {\n              // Restore options.\n              yy.options = globalOptions;\n              unexpectedToken(token);\n            }\n\n            if (parsed.hasOwnProperty('semanticValue')) {\n              yy.options = globalOptions;\n              yyparse.onParseEnd(parsed.semanticValue);\n              return parsed.semanticValue;\n            }\n\n            yyparse.onParseEnd();\n\n            // Restore options.\n            yy.options = globalOptions;\n            return true;\n          }\n    } while (tokenizer.hasMoreTokens() || stack.length > 1);\n  },\n  setTokenizer: function setTokenizer(customTokenizer) {\n    tokenizer = customTokenizer;\n    return yyparse;\n  },\n  getTokenizer: function getTokenizer() {\n    return tokenizer;\n  },\n  onParseBegin: function onParseBegin(string, tokenizer, options) {},\n  onParseEnd: function onParseEnd(parsed) {},\n\n\n  /**\n   * Allows analyzing, and transforming shifted token. Default implementation\n   * just passes the token through.\n   */\n  onShift: function onShift(token) {\n    return token;\n  }\n};\n\n/**\n * Tracks capturing groups.\n */\nvar capturingGroupsCount = 0;\n\n/**\n * Tracks named groups.\n */\nvar namedGroups = {};\n\n/**\n * Parsing string.\n */\nvar parsingString = '';\n\nyyparse.onParseBegin = function (string, lexer) {\n  parsingString = string;\n  capturingGroupsCount = 0;\n  namedGroups = {};\n\n  var lastSlash = string.lastIndexOf('/');\n  var flags = string.slice(lastSlash);\n\n  if (flags.includes('x') && flags.includes('u')) {\n    lexer.pushState('xu');\n  } else {\n    if (flags.includes('x')) {\n      lexer.pushState('x');\n    }\n    if (flags.includes('u')) {\n      lexer.pushState('u');\n    }\n  }\n};\n\n/**\n * On shifting `(` remember its number to used on reduce.\n */\nyyparse.onShift = function (token) {\n  if (token.type === 'L_PAREN' || token.type === 'NAMED_CAPTURE_GROUP') {\n    token.value = new String(token.value);\n    token.value.groupNumber = ++capturingGroupsCount;\n  }\n  return token;\n};\n\n/**\n * Extracts ranges from the range string.\n */\nfunction getRange(text) {\n  var range = text.match(/\\d+/g).map(Number);\n\n  if (Number.isFinite(range[1]) && range[1] < range[0]) {\n    throw new SyntaxError('Numbers out of order in ' + text + ' quantifier');\n  }\n\n  return range;\n}\n\n/**\n * Checks class range\n */\nfunction checkClassRange(from, to) {\n  if (from.kind === 'control' || to.kind === 'control' || !isNaN(from.codePoint) && !isNaN(to.codePoint) && from.codePoint > to.codePoint) {\n    throw new SyntaxError('Range ' + from.value + '-' + to.value + ' out of order in character class');\n  }\n}\n\n// ---------------------- Unicode property -------------------------------------------\n\nvar unicodeProperties = require('../unicode/parser-unicode-properties.js');\n\n/**\n * Unicode property.\n */\nfunction UnicodeProperty(matched, loc) {\n  var negative = matched[1] === 'P';\n  var separatorIdx = matched.indexOf('=');\n\n  var name = matched.slice(3, separatorIdx !== -1 ? separatorIdx : -1);\n  var value = void 0;\n\n  // General_Category allows using only value as a shorthand.\n  var isShorthand = separatorIdx === -1 && unicodeProperties.isGeneralCategoryValue(name);\n\n  // Binary propery name.\n  var isBinaryProperty = separatorIdx === -1 && unicodeProperties.isBinaryPropertyName(name);\n\n  if (isShorthand) {\n    value = name;\n    name = 'General_Category';\n  } else if (isBinaryProperty) {\n    value = name;\n  } else {\n    if (!unicodeProperties.isValidName(name)) {\n      throw new SyntaxError('Invalid unicode property name: ' + name + '.');\n    }\n\n    value = matched.slice(separatorIdx + 1, -1);\n\n    if (!unicodeProperties.isValidValue(name, value)) {\n      throw new SyntaxError('Invalid ' + name + ' unicode property value: ' + value + '.');\n    }\n  }\n\n  return Node({\n    type: 'UnicodeProperty',\n    name: name,\n    value: value,\n    negative: negative,\n    shorthand: isShorthand,\n    binary: isBinaryProperty,\n    canonicalName: unicodeProperties.getCanonicalName(name) || name,\n    canonicalValue: unicodeProperties.getCanonicalValue(value) || value\n  }, loc);\n}\n\n// ----------------------------------------------------------------------------------\n\n\n/**\n * Creates a character node.\n */\nfunction Char(value, kind, loc) {\n  var symbol = void 0;\n  var codePoint = void 0;\n\n  switch (kind) {\n    case 'decimal':\n      {\n        codePoint = Number(value.slice(1));\n        symbol = String.fromCodePoint(codePoint);\n        break;\n      }\n    case 'oct':\n      {\n        codePoint = parseInt(value.slice(1), 8);\n        symbol = String.fromCodePoint(codePoint);\n        break;\n      }\n    case 'hex':\n    case 'unicode':\n      {\n        if (value.lastIndexOf('\\\\u') > 0) {\n          var _value$split$slice = value.split('\\\\u').slice(1),\n              _value$split$slice2 = _slicedToArray(_value$split$slice, 2),\n              lead = _value$split$slice2[0],\n              trail = _value$split$slice2[1];\n\n          lead = parseInt(lead, 16);\n          trail = parseInt(trail, 16);\n          codePoint = (lead - 0xd800) * 0x400 + (trail - 0xdc00) + 0x10000;\n\n          symbol = String.fromCodePoint(codePoint);\n        } else {\n          var hex = value.slice(2).replace('{', '');\n          codePoint = parseInt(hex, 16);\n          if (codePoint > 0x10ffff) {\n            throw new SyntaxError('Bad character escape sequence: ' + value);\n          }\n\n          symbol = String.fromCodePoint(codePoint);\n        }\n        break;\n      }\n    case 'meta':\n      {\n        switch (value) {\n          case '\\\\t':\n            symbol = '\\t';\n            codePoint = symbol.codePointAt(0);\n            break;\n          case '\\\\n':\n            symbol = '\\n';\n            codePoint = symbol.codePointAt(0);\n            break;\n          case '\\\\r':\n            symbol = '\\r';\n            codePoint = symbol.codePointAt(0);\n            break;\n          case '\\\\v':\n            symbol = '\\v';\n            codePoint = symbol.codePointAt(0);\n            break;\n          case '\\\\f':\n            symbol = '\\f';\n            codePoint = symbol.codePointAt(0);\n            break;\n          case '\\\\b':\n            symbol = '\\b';\n            codePoint = symbol.codePointAt(0);\n          case '\\\\0':\n            symbol = '\\0';\n            codePoint = 0;\n          case '.':\n            symbol = '.';\n            codePoint = NaN;\n            break;\n          default:\n            codePoint = NaN;\n        }\n        break;\n      }\n    case 'simple':\n      {\n        symbol = value;\n        codePoint = symbol.codePointAt(0);\n        break;\n      }\n  }\n\n  return Node({\n    type: 'Char',\n    value: value,\n    kind: kind,\n    symbol: symbol,\n    codePoint: codePoint\n  }, loc);\n}\n\n/**\n * Valid flags per current ECMAScript spec and\n * stage 3+ proposals.\n */\nvar validFlags = 'gimsuxy';\n\n/**\n * Checks the flags are valid, and that\n * we don't duplicate flags.\n */\nfunction checkFlags(flags) {\n  var seen = new Set();\n\n  var _iteratorNormalCompletion = true;\n  var _didIteratorError = false;\n  var _iteratorError = undefined;\n\n  try {\n    for (var _iterator = flags[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n      var flag = _step.value;\n\n      if (seen.has(flag) || !validFlags.includes(flag)) {\n        throw new SyntaxError('Invalid flags: ' + flags);\n      }\n      seen.add(flag);\n    }\n  } catch (err) {\n    _didIteratorError = true;\n    _iteratorError = err;\n  } finally {\n    try {\n      if (!_iteratorNormalCompletion && _iterator.return) {\n        _iterator.return();\n      }\n    } finally {\n      if (_didIteratorError) {\n        throw _iteratorError;\n      }\n    }\n  }\n\n  return flags.split('').sort().join('');\n}\n\n/**\n * Parses patterns like \\1, \\2, etc. either as a backreference\n * to a group, or a deciaml char code.\n */\nfunction GroupRefOrDecChar(text, textLoc) {\n  var reference = Number(text.slice(1));\n\n  if (reference > 0 && reference <= capturingGroupsCount) {\n    return Node({\n      type: 'Backreference',\n      kind: 'number',\n      number: reference,\n      reference: reference\n    }, textLoc);\n  }\n\n  return Char(text, 'decimal', textLoc);\n}\n\n/**\n * Unicode names.\n */\nvar uReStart = /^\\\\u[0-9a-fA-F]{4}/; // only matches start of string\nvar ucpReStart = /^\\\\u\\{[0-9a-fA-F]{1,}\\}/; // only matches start of string\nvar ucpReAnywhere = /\\\\u\\{[0-9a-fA-F]{1,}\\}/; // matches anywhere in string\n\n/**\n * Validates Unicode group name.\n */\nfunction validateUnicodeGroupName(name, state) {\n  var isUnicodeName = ucpReAnywhere.test(name);\n  var isUnicodeState = state === 'u' || state === 'xu' || state === 'u_class';\n\n  if (isUnicodeName && !isUnicodeState) {\n    throw new SyntaxError('invalid group Unicode name \"' + name + '\", use `u` flag.');\n  }\n\n  return name;\n}\n\n// Matches the following production: https://tc39.es/ecma262/#prod-RegExpUnicodeEscapeSequence\n//\n//  RegExpUnicodeEscapeSequence ::\n//    `u` LeadSurrogate `\\u` TrailSurrogate   # as 'leadSurrogate', 'trailSurrogate'\n//    `u` LeadSurrogate                       # as 'leadSurrogateOnly'\n//    `u` TrailSurrogate                      # as 'trailSurrogateOnly'\n//    `u` NonSurrogate                        # as 'nonSurrogate'\n//    `u` `{` CodePoint `}`                   # as 'codePoint'\n//\n//  LeadSurrogate ::\n//    Hex4Digits but only if the SV of Hex4Digits is in the inclusive range 0xD800 to 0xDBFF        # [dD][89aAbB][0-9a-fA-F]{2}\n//\n//  TrailSurrogate ::\n//    Hex4Digits but only if the SV of Hex4Digits is in the inclusive range 0xDC00 to 0xDFFF        # [dD][c-fC-F][0-9a-fA-F]{2}\n//\n//  NonSurrogate ::\n//    Hex4Digits but only if the SV of Hex4Digits is not in the inclusive range 0xD800 to 0xDFFF    # [0-9a-ce-fA-CE-F][0-9a-fA-F]{3}|[dD][0-7][0-9a-fA-F]{2}\n//\n//  CodePoint ::\n//    HexDigits but only if MV of HexDigits ≤ 0x10FFFF                                              # 0*(?:[0-9a-fA-F]{1,5}|10[0-9a-fA-F]{4})\n//\nvar uidRe = /\\\\u(?:([dD][89aAbB][0-9a-fA-F]{2})\\\\u([dD][c-fC-F][0-9a-fA-F]{2})|([dD][89aAbB][0-9a-fA-F]{2})|([dD][c-fC-F][0-9a-fA-F]{2})|([0-9a-ce-fA-CE-F][0-9a-fA-F]{3}|[dD][0-7][0-9a-fA-F]{2})|\\{(0*(?:[0-9a-fA-F]{1,5}|10[0-9a-fA-F]{4}))\\})/;\n\nfunction decodeUnicodeGroupName(name) {\n  return name.replace(new RegExp(uidRe, 'g'), function (_, leadSurrogate, trailSurrogate, leadSurrogateOnly, trailSurrogateOnly, nonSurrogate, codePoint) {\n    if (leadSurrogate) {\n      return String.fromCodePoint(parseInt(leadSurrogate, 16), parseInt(trailSurrogate, 16));\n    }\n    if (leadSurrogateOnly) {\n      return String.fromCodePoint(parseInt(leadSurrogateOnly, 16));\n    }\n    if (trailSurrogateOnly) {\n      // TODO: Per the spec: https://tc39.es/ecma262/#prod-RegExpUnicodeEscapeSequence\n      // > Each `\\u` TrailSurrogate for which the choice of associated `u` LeadSurrogate is ambiguous shall be associated with the nearest possible `u` LeadSurrogate that would otherwise have no corresponding `\\u` TrailSurrogate.\n      return String.fromCodePoint(parseInt(trailSurrogateOnly, 16));\n    }\n    if (nonSurrogate) {\n      return String.fromCodePoint(parseInt(nonSurrogate, 16));\n    }\n    if (codePoint) {\n      return String.fromCodePoint(parseInt(codePoint, 16));\n    }\n    return _;\n  });\n}\n\n/**\n * Extracts from `\\k<foo>` pattern either a backreference\n * to a named capturing group (if it presents), or parses it\n * as a list of char: `\\k`, `<`, `f`, etc.\n */\nfunction NamedGroupRefOrChars(text, textLoc) {\n  var referenceRaw = text.slice(3, -1);\n  var reference = decodeUnicodeGroupName(referenceRaw);\n\n  if (namedGroups.hasOwnProperty(reference)) {\n    return Node({\n      type: 'Backreference',\n      kind: 'name',\n      number: namedGroups[reference],\n      reference: reference,\n      referenceRaw: referenceRaw\n    }, textLoc);\n  }\n\n  // Else `\\k<foo>` should be parsed as a list of `Char`s.\n  // This is really a 0.01% edge case, but we should handle it.\n\n  var startOffset = null;\n  var startLine = null;\n  var endLine = null;\n  var startColumn = null;\n\n  if (textLoc) {\n    startOffset = textLoc.startOffset;\n    startLine = textLoc.startLine;\n    endLine = textLoc.endLine;\n    startColumn = textLoc.startColumn;\n  }\n\n  var charRe = /^[\\w$<>]/;\n  var loc = void 0;\n\n  var chars = [\n  // Init to first \\k, taking 2 symbols.\n  Char(text.slice(1, 2), 'simple', startOffset ? {\n    startLine: startLine,\n    endLine: endLine,\n    startColumn: startColumn,\n    startOffset: startOffset,\n    endOffset: startOffset += 2,\n    endColumn: startColumn += 2\n  } : null)];\n\n  // For \\k\n  chars[0].escaped = true;\n\n  // Other symbols.\n  text = text.slice(2);\n\n  while (text.length > 0) {\n    var matched = null;\n\n    // Unicode, \\u003B or \\u{003B}\n    if ((matched = text.match(uReStart)) || (matched = text.match(ucpReStart))) {\n      if (startOffset) {\n        loc = {\n          startLine: startLine,\n          endLine: endLine,\n          startColumn: startColumn,\n          startOffset: startOffset,\n          endOffset: startOffset += matched[0].length,\n          endColumn: startColumn += matched[0].length\n        };\n      }\n      chars.push(Char(matched[0], 'unicode', loc));\n      text = text.slice(matched[0].length);\n    }\n\n    // Simple char.\n    else if (matched = text.match(charRe)) {\n        if (startOffset) {\n          loc = {\n            startLine: startLine,\n            endLine: endLine,\n            startColumn: startColumn,\n            startOffset: startOffset,\n            endOffset: ++startOffset,\n            endColumn: ++startColumn\n          };\n        }\n        chars.push(Char(matched[0], 'simple', loc));\n        text = text.slice(1);\n      }\n  }\n\n  return chars;\n}\n\n/**\n * Creates an AST node with a location.\n */\nfunction Node(node, loc) {\n  if (yy.options.captureLocations) {\n    node.loc = {\n      source: parsingString.slice(loc.startOffset, loc.endOffset),\n      start: {\n        line: loc.startLine,\n        column: loc.startColumn,\n        offset: loc.startOffset\n      },\n      end: {\n        line: loc.endLine,\n        column: loc.endColumn,\n        offset: loc.endOffset\n      }\n    };\n  }\n  return node;\n}\n\n/**\n * Creates location node.\n */\nfunction loc(start, end) {\n  if (!yy.options.captureLocations) {\n    return null;\n  }\n\n  return {\n    startOffset: start.startOffset,\n    endOffset: end.endOffset,\n    startLine: start.startLine,\n    endLine: end.endLine,\n    startColumn: start.startColumn,\n    endColumn: end.endColumn\n  };\n}\n\nfunction unexpectedToken(token) {\n  if (token.type === EOF) {\n    unexpectedEndOfInput();\n  }\n\n  tokenizer.throwUnexpectedToken(token.value, token.startLine, token.startColumn);\n}\n\nfunction unexpectedEndOfInput() {\n  parseError('Unexpected end of input.');\n}\n\nfunction parseError(message) {\n  throw new SyntaxError(message);\n}\n\nmodule.exports = yyparse;","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nvar regexpTreeParser = require('./generated/regexp-tree');\n\n/**\n * Original parse function.\n */\nvar generatedParseFn = regexpTreeParser.parse.bind(regexpTreeParser);\n\n/**\n * Parses a regular expression.\n *\n * Override original `regexpTreeParser.parse` to convert a value to a string,\n * since in regexp-tree we may pass strings, and RegExp instance.\n */\nregexpTreeParser.parse = function (regexp, options) {\n  return generatedParseFn('' + regexp, options);\n};\n\n// By default do not capture locations; callers may override.\nregexpTreeParser.setOptions({ captureLocations: false });\n\nmodule.exports = regexpTreeParser;","'use strict';\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\nvar NON_BINARY_PROP_NAMES_TO_ALIASES = {\n  General_Category: 'gc',\n  Script: 'sc',\n  Script_Extensions: 'scx'\n};\n\nvar NON_BINARY_ALIASES_TO_PROP_NAMES = inverseMap(NON_BINARY_PROP_NAMES_TO_ALIASES);\n\nvar BINARY_PROP_NAMES_TO_ALIASES = {\n  ASCII: 'ASCII',\n  ASCII_Hex_Digit: 'AHex',\n  Alphabetic: 'Alpha',\n  Any: 'Any',\n  Assigned: 'Assigned',\n  Bidi_Control: 'Bidi_C',\n  Bidi_Mirrored: 'Bidi_M',\n  Case_Ignorable: 'CI',\n  Cased: 'Cased',\n  Changes_When_Casefolded: 'CWCF',\n  Changes_When_Casemapped: 'CWCM',\n  Changes_When_Lowercased: 'CWL',\n  Changes_When_NFKC_Casefolded: 'CWKCF',\n  Changes_When_Titlecased: 'CWT',\n  Changes_When_Uppercased: 'CWU',\n  Dash: 'Dash',\n  Default_Ignorable_Code_Point: 'DI',\n  Deprecated: 'Dep',\n  Diacritic: 'Dia',\n  Emoji: 'Emoji',\n  Emoji_Component: 'Emoji_Component',\n  Emoji_Modifier: 'Emoji_Modifier',\n  Emoji_Modifier_Base: 'Emoji_Modifier_Base',\n  Emoji_Presentation: 'Emoji_Presentation',\n  Extended_Pictographic: 'Extended_Pictographic',\n  Extender: 'Ext',\n  Grapheme_Base: 'Gr_Base',\n  Grapheme_Extend: 'Gr_Ext',\n  Hex_Digit: 'Hex',\n  IDS_Binary_Operator: 'IDSB',\n  IDS_Trinary_Operator: 'IDST',\n  ID_Continue: 'IDC',\n  ID_Start: 'IDS',\n  Ideographic: 'Ideo',\n  Join_Control: 'Join_C',\n  Logical_Order_Exception: 'LOE',\n  Lowercase: 'Lower',\n  Math: 'Math',\n  Noncharacter_Code_Point: 'NChar',\n  Pattern_Syntax: 'Pat_Syn',\n  Pattern_White_Space: 'Pat_WS',\n  Quotation_Mark: 'QMark',\n  Radical: 'Radical',\n  Regional_Indicator: 'RI',\n  Sentence_Terminal: 'STerm',\n  Soft_Dotted: 'SD',\n  Terminal_Punctuation: 'Term',\n  Unified_Ideograph: 'UIdeo',\n  Uppercase: 'Upper',\n  Variation_Selector: 'VS',\n  White_Space: 'space',\n  XID_Continue: 'XIDC',\n  XID_Start: 'XIDS'\n};\n\nvar BINARY_ALIASES_TO_PROP_NAMES = inverseMap(BINARY_PROP_NAMES_TO_ALIASES);\n\nvar GENERAL_CATEGORY_VALUE_TO_ALIASES = {\n  Cased_Letter: 'LC',\n  Close_Punctuation: 'Pe',\n  Connector_Punctuation: 'Pc',\n  Control: ['Cc', 'cntrl'],\n  Currency_Symbol: 'Sc',\n  Dash_Punctuation: 'Pd',\n  Decimal_Number: ['Nd', 'digit'],\n  Enclosing_Mark: 'Me',\n  Final_Punctuation: 'Pf',\n  Format: 'Cf',\n  Initial_Punctuation: 'Pi',\n  Letter: 'L',\n  Letter_Number: 'Nl',\n  Line_Separator: 'Zl',\n  Lowercase_Letter: 'Ll',\n  Mark: ['M', 'Combining_Mark'],\n  Math_Symbol: 'Sm',\n  Modifier_Letter: 'Lm',\n  Modifier_Symbol: 'Sk',\n  Nonspacing_Mark: 'Mn',\n  Number: 'N',\n  Open_Punctuation: 'Ps',\n  Other: 'C',\n  Other_Letter: 'Lo',\n  Other_Number: 'No',\n  Other_Punctuation: 'Po',\n  Other_Symbol: 'So',\n  Paragraph_Separator: 'Zp',\n  Private_Use: 'Co',\n  Punctuation: ['P', 'punct'],\n  Separator: 'Z',\n  Space_Separator: 'Zs',\n  Spacing_Mark: 'Mc',\n  Surrogate: 'Cs',\n  Symbol: 'S',\n  Titlecase_Letter: 'Lt',\n  Unassigned: 'Cn',\n  Uppercase_Letter: 'Lu'\n};\n\nvar GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES = inverseMap(GENERAL_CATEGORY_VALUE_TO_ALIASES);\n\nvar SCRIPT_VALUE_TO_ALIASES = {\n  Adlam: 'Adlm',\n  Ahom: 'Ahom',\n  Anatolian_Hieroglyphs: 'Hluw',\n  Arabic: 'Arab',\n  Armenian: 'Armn',\n  Avestan: 'Avst',\n  Balinese: 'Bali',\n  Bamum: 'Bamu',\n  Bassa_Vah: 'Bass',\n  Batak: 'Batk',\n  Bengali: 'Beng',\n  Bhaiksuki: 'Bhks',\n  Bopomofo: 'Bopo',\n  Brahmi: 'Brah',\n  Braille: 'Brai',\n  Buginese: 'Bugi',\n  Buhid: 'Buhd',\n  Canadian_Aboriginal: 'Cans',\n  Carian: 'Cari',\n  Caucasian_Albanian: 'Aghb',\n  Chakma: 'Cakm',\n  Cham: 'Cham',\n  Cherokee: 'Cher',\n  Common: 'Zyyy',\n  Coptic: ['Copt', 'Qaac'],\n  Cuneiform: 'Xsux',\n  Cypriot: 'Cprt',\n  Cyrillic: 'Cyrl',\n  Deseret: 'Dsrt',\n  Devanagari: 'Deva',\n  Dogra: 'Dogr',\n  Duployan: 'Dupl',\n  Egyptian_Hieroglyphs: 'Egyp',\n  Elbasan: 'Elba',\n  Ethiopic: 'Ethi',\n  Georgian: 'Geor',\n  Glagolitic: 'Glag',\n  Gothic: 'Goth',\n  Grantha: 'Gran',\n  Greek: 'Grek',\n  Gujarati: 'Gujr',\n  Gunjala_Gondi: 'Gong',\n  Gurmukhi: 'Guru',\n  Han: 'Hani',\n  Hangul: 'Hang',\n  Hanifi_Rohingya: 'Rohg',\n  Hanunoo: 'Hano',\n  Hatran: 'Hatr',\n  Hebrew: 'Hebr',\n  Hiragana: 'Hira',\n  Imperial_Aramaic: 'Armi',\n  Inherited: ['Zinh', 'Qaai'],\n  Inscriptional_Pahlavi: 'Phli',\n  Inscriptional_Parthian: 'Prti',\n  Javanese: 'Java',\n  Kaithi: 'Kthi',\n  Kannada: 'Knda',\n  Katakana: 'Kana',\n  Kayah_Li: 'Kali',\n  Kharoshthi: 'Khar',\n  Khmer: 'Khmr',\n  Khojki: 'Khoj',\n  Khudawadi: 'Sind',\n  Lao: 'Laoo',\n  Latin: 'Latn',\n  Lepcha: 'Lepc',\n  Limbu: 'Limb',\n  Linear_A: 'Lina',\n  Linear_B: 'Linb',\n  Lisu: 'Lisu',\n  Lycian: 'Lyci',\n  Lydian: 'Lydi',\n  Mahajani: 'Mahj',\n  Makasar: 'Maka',\n  Malayalam: 'Mlym',\n  Mandaic: 'Mand',\n  Manichaean: 'Mani',\n  Marchen: 'Marc',\n  Medefaidrin: 'Medf',\n  Masaram_Gondi: 'Gonm',\n  Meetei_Mayek: 'Mtei',\n  Mende_Kikakui: 'Mend',\n  Meroitic_Cursive: 'Merc',\n  Meroitic_Hieroglyphs: 'Mero',\n  Miao: 'Plrd',\n  Modi: 'Modi',\n  Mongolian: 'Mong',\n  Mro: 'Mroo',\n  Multani: 'Mult',\n  Myanmar: 'Mymr',\n  Nabataean: 'Nbat',\n  New_Tai_Lue: 'Talu',\n  Newa: 'Newa',\n  Nko: 'Nkoo',\n  Nushu: 'Nshu',\n  Ogham: 'Ogam',\n  Ol_Chiki: 'Olck',\n  Old_Hungarian: 'Hung',\n  Old_Italic: 'Ital',\n  Old_North_Arabian: 'Narb',\n  Old_Permic: 'Perm',\n  Old_Persian: 'Xpeo',\n  Old_Sogdian: 'Sogo',\n  Old_South_Arabian: 'Sarb',\n  Old_Turkic: 'Orkh',\n  Oriya: 'Orya',\n  Osage: 'Osge',\n  Osmanya: 'Osma',\n  Pahawh_Hmong: 'Hmng',\n  Palmyrene: 'Palm',\n  Pau_Cin_Hau: 'Pauc',\n  Phags_Pa: 'Phag',\n  Phoenician: 'Phnx',\n  Psalter_Pahlavi: 'Phlp',\n  Rejang: 'Rjng',\n  Runic: 'Runr',\n  Samaritan: 'Samr',\n  Saurashtra: 'Saur',\n  Sharada: 'Shrd',\n  Shavian: 'Shaw',\n  Siddham: 'Sidd',\n  SignWriting: 'Sgnw',\n  Sinhala: 'Sinh',\n  Sogdian: 'Sogd',\n  Sora_Sompeng: 'Sora',\n  Soyombo: 'Soyo',\n  Sundanese: 'Sund',\n  Syloti_Nagri: 'Sylo',\n  Syriac: 'Syrc',\n  Tagalog: 'Tglg',\n  Tagbanwa: 'Tagb',\n  Tai_Le: 'Tale',\n  Tai_Tham: 'Lana',\n  Tai_Viet: 'Tavt',\n  Takri: 'Takr',\n  Tamil: 'Taml',\n  Tangut: 'Tang',\n  Telugu: 'Telu',\n  Thaana: 'Thaa',\n  Thai: 'Thai',\n  Tibetan: 'Tibt',\n  Tifinagh: 'Tfng',\n  Tirhuta: 'Tirh',\n  Ugaritic: 'Ugar',\n  Vai: 'Vaii',\n  Warang_Citi: 'Wara',\n  Yi: 'Yiii',\n  Zanabazar_Square: 'Zanb'\n};\n\nvar SCRIPT_VALUE_ALIASES_TO_VALUE = inverseMap(SCRIPT_VALUE_TO_ALIASES);\n\nfunction inverseMap(data) {\n  var inverse = {};\n\n  for (var name in data) {\n    if (!data.hasOwnProperty(name)) {\n      continue;\n    }\n    var value = data[name];\n    if (Array.isArray(value)) {\n      for (var i = 0; i < value.length; i++) {\n        inverse[value[i]] = name;\n      }\n    } else {\n      inverse[value] = name;\n    }\n  }\n\n  return inverse;\n}\n\nfunction isValidName(name) {\n  return NON_BINARY_PROP_NAMES_TO_ALIASES.hasOwnProperty(name) || NON_BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name) || BINARY_PROP_NAMES_TO_ALIASES.hasOwnProperty(name) || BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name);\n}\n\nfunction isValidValue(name, value) {\n  if (isGeneralCategoryName(name)) {\n    return isGeneralCategoryValue(value);\n  }\n\n  if (isScriptCategoryName(name)) {\n    return isScriptCategoryValue(value);\n  }\n\n  return false;\n}\n\nfunction isAlias(name) {\n  return NON_BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name) || BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name);\n}\n\nfunction isGeneralCategoryName(name) {\n  return name === 'General_Category' || name == 'gc';\n}\n\nfunction isScriptCategoryName(name) {\n  return name === 'Script' || name === 'Script_Extensions' || name === 'sc' || name === 'scx';\n}\n\nfunction isGeneralCategoryValue(value) {\n  return GENERAL_CATEGORY_VALUE_TO_ALIASES.hasOwnProperty(value) || GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES.hasOwnProperty(value);\n}\n\nfunction isScriptCategoryValue(value) {\n  return SCRIPT_VALUE_TO_ALIASES.hasOwnProperty(value) || SCRIPT_VALUE_ALIASES_TO_VALUE.hasOwnProperty(value);\n}\n\nfunction isBinaryPropertyName(name) {\n  return BINARY_PROP_NAMES_TO_ALIASES.hasOwnProperty(name) || BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name);\n}\n\nfunction getCanonicalName(name) {\n  if (NON_BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name)) {\n    return NON_BINARY_ALIASES_TO_PROP_NAMES[name];\n  }\n\n  if (BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name)) {\n    return BINARY_ALIASES_TO_PROP_NAMES[name];\n  }\n\n  return null;\n}\n\nfunction getCanonicalValue(value) {\n  if (GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES.hasOwnProperty(value)) {\n    return GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES[value];\n  }\n\n  if (SCRIPT_VALUE_ALIASES_TO_VALUE.hasOwnProperty(value)) {\n    return SCRIPT_VALUE_ALIASES_TO_VALUE[value];\n  }\n\n  if (BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(value)) {\n    return BINARY_ALIASES_TO_PROP_NAMES[value];\n  }\n\n  return null;\n}\n\nmodule.exports = {\n  isAlias: isAlias,\n  isValidName: isValidName,\n  isValidValue: isValidValue,\n  isGeneralCategoryValue: isGeneralCategoryValue,\n  isScriptCategoryValue: isScriptCategoryValue,\n  isBinaryPropertyName: isBinaryPropertyName,\n  getCanonicalName: getCanonicalName,\n  getCanonicalValue: getCanonicalValue,\n\n  NON_BINARY_PROP_NAMES_TO_ALIASES: NON_BINARY_PROP_NAMES_TO_ALIASES,\n  NON_BINARY_ALIASES_TO_PROP_NAMES: NON_BINARY_ALIASES_TO_PROP_NAMES,\n\n  BINARY_PROP_NAMES_TO_ALIASES: BINARY_PROP_NAMES_TO_ALIASES,\n  BINARY_ALIASES_TO_PROP_NAMES: BINARY_ALIASES_TO_PROP_NAMES,\n\n  GENERAL_CATEGORY_VALUE_TO_ALIASES: GENERAL_CATEGORY_VALUE_TO_ALIASES,\n  GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES: GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES,\n\n  SCRIPT_VALUE_TO_ALIASES: SCRIPT_VALUE_TO_ALIASES,\n  SCRIPT_VALUE_ALIASES_TO_VALUE: SCRIPT_VALUE_ALIASES_TO_VALUE\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nvar compatTranspiler = require('./compat-transpiler');\nvar generator = require('./generator');\nvar optimizer = require('./optimizer');\nvar parser = require('./parser');\nvar _transform = require('./transform');\nvar _traverse = require('./traverse');\nvar fa = require('./interpreter/finite-automaton');\n\nvar _require = require('./compat-transpiler/runtime'),\n    RegExpTree = _require.RegExpTree;\n\n/**\n * An API object for RegExp processing (parsing/transform/generation).\n */\n\n\nvar regexpTree = {\n  /**\n   * Parser module exposed.\n   */\n  parser: parser,\n\n  /**\n   * Expose finite-automaton module.\n   */\n  fa: fa,\n\n  /**\n   * `TransformResult` exposed.\n   */\n  TransformResult: _transform.TransformResult,\n\n  /**\n   * Parses a regexp string, producing an AST.\n   *\n   * @param string regexp\n   *\n   *   a regular expression in different formats: string, AST, RegExp.\n   *\n   * @param Object options\n   *\n   *   parsing options for this parse call. Default are:\n   *\n   *     - captureLocations: boolean\n   *     - any other custom options\n   *\n   * @return Object AST\n   */\n  parse: function parse(regexp, options) {\n    return parser.parse('' + regexp, options);\n  },\n\n\n  /**\n   * Traverses a RegExp AST.\n   *\n   * @param Object ast\n   * @param Object | Array<Object> handlers\n   *\n   * Each `handler` is an object containing handler function for needed\n   * node types. Example:\n   *\n   *   regexpTree.traverse(ast, {\n   *     onChar(node) {\n   *       ...\n   *     },\n   *   });\n   *\n   * The value for a node type may also be an object with functions pre and post.\n   * This enables more context-aware analyses, e.g. measuring star height.\n   */\n  traverse: function traverse(ast, handlers, options) {\n    return _traverse.traverse(ast, handlers, options);\n  },\n\n\n  /**\n   * Transforms a regular expression.\n   *\n   * A regexp can be passed in different formats (string, regexp or AST),\n   * applying a set of transformations. It is a convenient wrapper\n   * on top of \"parse-traverse-generate\" tool chain.\n   *\n   * @param string | AST | RegExp regexp - a regular expression;\n   * @param Object | Array<Object> handlers - a list of handlers.\n   *\n   * @return TransformResult - a transformation result.\n   */\n  transform: function transform(regexp, handlers) {\n    return _transform.transform(regexp, handlers);\n  },\n\n\n  /**\n   * Generates a RegExp string from an AST.\n   *\n   * @param Object ast\n   *\n   * Invariant:\n   *\n   *   regexpTree.generate(regexpTree.parse('/[a-z]+/i')); // '/[a-z]+/i'\n   */\n  generate: function generate(ast) {\n    return generator.generate(ast);\n  },\n\n\n  /**\n   * Creates a RegExp object from a regexp string.\n   *\n   * @param string regexp\n   */\n  toRegExp: function toRegExp(regexp) {\n    var compat = this.compatTranspile(regexp);\n    return new RegExp(compat.getSource(), compat.getFlags());\n  },\n\n\n  /**\n   * Optimizes a regular expression by replacing some\n   * sub-expressions with their idiomatic patterns.\n   *\n   * @param string regexp\n   *\n   * @return TransformResult object\n   */\n  optimize: function optimize(regexp, whitelist) {\n    var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n        blacklist = _ref.blacklist;\n\n    return optimizer.optimize(regexp, { whitelist: whitelist, blacklist: blacklist });\n  },\n\n\n  /**\n   * Translates a regular expression in new syntax or in new format\n   * into equivalent expressions in old syntax.\n   *\n   * @param string regexp\n   *\n   * @return TransformResult object\n   */\n  compatTranspile: function compatTranspile(regexp, whitelist) {\n    return compatTranspiler.transform(regexp, whitelist);\n  },\n\n\n  /**\n   * Executes a regular expression on a string.\n   *\n   * @param RegExp|string re - a regular expression.\n   * @param string string - a testing string.\n   */\n  exec: function exec(re, string) {\n    if (typeof re === 'string') {\n      var compat = this.compatTranspile(re);\n      var extra = compat.getExtra();\n\n      if (extra.namedCapturingGroups) {\n        re = new RegExpTree(compat.toRegExp(), {\n          flags: compat.getFlags(),\n          source: compat.getSource(),\n          groups: extra.namedCapturingGroups\n        });\n      } else {\n        re = compat.toRegExp();\n      }\n    }\n\n    return re.exec(string);\n  }\n};\n\nmodule.exports = regexpTree;","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar generator = require('../generator');\nvar parser = require('../parser');\nvar traverse = require('../traverse');\n\n/**\n * Transform result.\n */\n\nvar TransformResult = function () {\n  /**\n   * Initializes a transform result for an AST.\n   *\n   * @param Object ast - an AST node\n   * @param mixed extra - any extra data a transform may return\n   */\n  function TransformResult(ast) {\n    var extra = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n    _classCallCheck(this, TransformResult);\n\n    this._ast = ast;\n    this._source = null;\n    this._string = null;\n    this._regexp = null;\n    this._extra = extra;\n  }\n\n  _createClass(TransformResult, [{\n    key: 'getAST',\n    value: function getAST() {\n      return this._ast;\n    }\n  }, {\n    key: 'setExtra',\n    value: function setExtra(extra) {\n      this._extra = extra;\n    }\n  }, {\n    key: 'getExtra',\n    value: function getExtra() {\n      return this._extra;\n    }\n  }, {\n    key: 'toRegExp',\n    value: function toRegExp() {\n      if (!this._regexp) {\n        this._regexp = new RegExp(this.getSource(), this._ast.flags);\n      }\n      return this._regexp;\n    }\n  }, {\n    key: 'getSource',\n    value: function getSource() {\n      if (!this._source) {\n        this._source = generator.generate(this._ast.body);\n      }\n      return this._source;\n    }\n  }, {\n    key: 'getFlags',\n    value: function getFlags() {\n      return this._ast.flags;\n    }\n  }, {\n    key: 'toString',\n    value: function toString() {\n      if (!this._string) {\n        this._string = generator.generate(this._ast);\n      }\n      return this._string;\n    }\n  }]);\n\n  return TransformResult;\n}();\n\nmodule.exports = {\n  /**\n   * Expose `TransformResult`.\n   */\n  TransformResult: TransformResult,\n\n  /**\n   * Transforms a regular expression applying a set of\n   * transformation handlers.\n   *\n   * @param string | AST | RegExp:\n   *\n   *   a regular expression in different representations: a string,\n   *   a RegExp object, or an AST.\n   *\n   * @param Object | Array<Object>:\n   *\n   *   a handler (or a list of handlers) from `traverse` API.\n   *\n   * @return TransformResult instance.\n   *\n   * Example:\n   *\n   *   transform(/[a-z]/i, {\n   *     onChar(path) {\n   *       const {node} = path;\n   *\n   *       if (...) {\n   *         path.remove();\n   *       }\n   *     }\n   *   });\n   */\n  transform: function transform(regexp, handlers) {\n    var ast = regexp;\n\n    if (regexp instanceof RegExp) {\n      regexp = '' + regexp;\n    }\n\n    if (typeof regexp === 'string') {\n      ast = parser.parse(regexp, {\n        captureLocations: true\n      });\n    }\n\n    traverse.traverse(ast, handlers);\n\n    return new TransformResult(ast);\n  }\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * Flattens a nested disjunction node to a list.\n *\n * /a|b|c|d/\n *\n * {{{a, b}, c}, d} -> [a, b, c, d]\n */\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction disjunctionToList(node) {\n  if (node.type !== 'Disjunction') {\n    throw new TypeError('Expected \"Disjunction\" node, got \"' + node.type + '\"');\n  }\n\n  var list = [];\n\n  if (node.left && node.left.type === 'Disjunction') {\n    list.push.apply(list, _toConsumableArray(disjunctionToList(node.left)).concat([node.right]));\n  } else {\n    list.push(node.left, node.right);\n  }\n\n  return list;\n}\n\n/**\n * Builds a nested disjunction node from a list.\n *\n * /a|b|c|d/\n *\n * [a, b, c, d] -> {{{a, b}, c}, d}\n */\nfunction listToDisjunction(list) {\n  return list.reduce(function (left, right) {\n    return {\n      type: 'Disjunction',\n      left: left,\n      right: right\n    };\n  });\n}\n\n/**\n * Increases a quantifier by one.\n * Does not change greediness.\n * * -> +\n * + -> {2,}\n * ? -> {1,2}\n * {2} -> {3}\n * {2,} -> {3,}\n * {2,3} -> {3,4}\n */\nfunction increaseQuantifierByOne(quantifier) {\n  if (quantifier.kind === '*') {\n\n    quantifier.kind = '+';\n  } else if (quantifier.kind === '+') {\n\n    quantifier.kind = 'Range';\n    quantifier.from = 2;\n    delete quantifier.to;\n  } else if (quantifier.kind === '?') {\n\n    quantifier.kind = 'Range';\n    quantifier.from = 1;\n    quantifier.to = 2;\n  } else if (quantifier.kind === 'Range') {\n\n    quantifier.from += 1;\n    if (quantifier.to) {\n      quantifier.to += 1;\n    }\n  }\n}\n\nmodule.exports = {\n  disjunctionToList: disjunctionToList,\n  listToDisjunction: listToDisjunction,\n  increaseQuantifierByOne: increaseQuantifierByOne\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nvar NodePath = require('./node-path');\n\n/**\n * Does an actual AST traversal, using visitor pattern,\n * and calling set of callbacks.\n *\n * Based on https://github.com/olov/ast-traverse\n *\n * Expects AST in Mozilla Parser API: nodes which are supposed to be\n * handled should have `type` property.\n *\n * @param Object root - a root node to start traversal from.\n *\n * @param Object options - an object with set of callbacks:\n *\n *   - `pre(node, parent, prop, index)` - a hook called on node enter\n *   - `post`(node, parent, prop, index) - a hook called on node exit\n *   - `skipProperty(prop)` - a predicated whether a property should be skipped\n */\nfunction astTraverse(root) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  var pre = options.pre;\n  var post = options.post;\n  var skipProperty = options.skipProperty;\n\n  function visit(node, parent, prop, idx) {\n    if (!node || typeof node.type !== 'string') {\n      return;\n    }\n\n    var res = undefined;\n    if (pre) {\n      res = pre(node, parent, prop, idx);\n    }\n\n    if (res !== false) {\n\n      // A node can be replaced during traversal, so we have to\n      // recalculate it from the parent, to avoid traversing \"dead\" nodes.\n      if (parent && parent[prop]) {\n        if (!isNaN(idx)) {\n          node = parent[prop][idx];\n        } else {\n          node = parent[prop];\n        }\n      }\n\n      for (var _prop in node) {\n        if (node.hasOwnProperty(_prop)) {\n          if (skipProperty ? skipProperty(_prop, node) : _prop[0] === '$') {\n            continue;\n          }\n\n          var child = node[_prop];\n\n          // Collection node.\n          //\n          // NOTE: a node (or several nodes) can be removed or inserted\n          // during traversal.\n          //\n          // Current traversing index is stored on top of the\n          // `NodePath.traversingIndexStack`. The stack is used to support\n          // recursive nature of the traversal.\n          //\n          // In this case `NodePath.traversingIndex` (which we use here) is\n          // updated in the NodePath remove/insert methods.\n          //\n          if (Array.isArray(child)) {\n            var index = 0;\n            NodePath.traversingIndexStack.push(index);\n            while (index < child.length) {\n              visit(child[index], node, _prop, index);\n              index = NodePath.updateTraversingIndex(+1);\n            }\n            NodePath.traversingIndexStack.pop();\n          }\n\n          // Simple node.\n          else {\n              visit(child, node, _prop);\n            }\n        }\n      }\n    }\n\n    if (post) {\n      post(node, parent, prop, idx);\n    }\n  }\n\n  visit(root, null);\n}\n\nmodule.exports = {\n  /**\n   * Traverses an AST.\n   *\n   * @param Object ast - an AST node\n   *\n   * @param Object | Array<Object> handlers:\n   *\n   *   an object (or an array of objects)\n   *\n   *   Each such object contains a handler function per node.\n   *   In case of an array of handlers, they are applied in order.\n   *   A handler may return a transformed node (or a different type).\n   *\n   *   The per-node function may instead be an object with functions pre and post.\n   *   pre is called before visiting the node, post after.\n   *   If a handler is a function, it is treated as the pre function, with an empty post.\n   *\n   * @param Object options:\n   *\n   *   a config object, specifying traversal options:\n   *\n   *   `asNodes`: boolean - whether handlers should receives raw AST nodes\n   *   (false by default), instead of a `NodePath` wrapper. Note, by default\n   *   `NodePath` wrapper provides a set of convenient method to manipulate\n   *   a traversing AST, and also has access to all parents list. A raw\n   *   nodes traversal should be used in rare cases, when no `NodePath`\n   *   features are needed.\n   *\n   * Special hooks:\n   *\n   *   - `shouldRun(ast)` - a predicate determining whether the handler\n   *                        should be applied.\n   *\n   * NOTE: Multiple handlers are used as an optimization of applying all of\n   * them in one AST traversal pass.\n   */\n  traverse: function traverse(ast, handlers) {\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : { asNodes: false };\n\n\n    if (!Array.isArray(handlers)) {\n      handlers = [handlers];\n    }\n\n    // Filter out handlers by result of `shouldRun`, if the method is present.\n    handlers = handlers.filter(function (handler) {\n      if (typeof handler.shouldRun !== 'function') {\n        return true;\n      }\n      return handler.shouldRun(ast);\n    });\n\n    NodePath.initRegistry();\n\n    // Allow handlers to initializer themselves.\n    handlers.forEach(function (handler) {\n      if (typeof handler.init === 'function') {\n        handler.init(ast);\n      }\n    });\n\n    function getPathFor(node, parent, prop, index) {\n      var parentPath = NodePath.getForNode(parent);\n      var nodePath = NodePath.getForNode(node, parentPath, prop, index);\n\n      return nodePath;\n    }\n\n    // Handle actual nodes.\n    astTraverse(ast, {\n      /**\n       * Handler on node enter.\n       */\n      pre: function pre(node, parent, prop, index) {\n        var nodePath = void 0;\n        if (!options.asNodes) {\n          nodePath = getPathFor(node, parent, prop, index);\n        }\n\n        var _iteratorNormalCompletion = true;\n        var _didIteratorError = false;\n        var _iteratorError = undefined;\n\n        try {\n          for (var _iterator = handlers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n            var handler = _step.value;\n\n            // \"Catch-all\" `*` handler.\n            if (typeof handler['*'] === 'function') {\n              if (nodePath) {\n                // A path/node can be removed by some previous handler.\n                if (!nodePath.isRemoved()) {\n                  var handlerResult = handler['*'](nodePath);\n                  // Explicitly stop traversal.\n                  if (handlerResult === false) {\n                    return false;\n                  }\n                }\n              } else {\n                handler['*'](node, parent, prop, index);\n              }\n            }\n\n            // Per-node handler.\n            var handlerFuncPre = void 0;\n            if (typeof handler[node.type] === 'function') {\n              handlerFuncPre = handler[node.type];\n            } else if (typeof handler[node.type] === 'object' && typeof handler[node.type].pre === 'function') {\n              handlerFuncPre = handler[node.type].pre;\n            }\n\n            if (handlerFuncPre) {\n              if (nodePath) {\n                // A path/node can be removed by some previous handler.\n                if (!nodePath.isRemoved()) {\n                  var _handlerResult = handlerFuncPre.call(handler, nodePath);\n                  // Explicitly stop traversal.\n                  if (_handlerResult === false) {\n                    return false;\n                  }\n                }\n              } else {\n                handlerFuncPre.call(handler, node, parent, prop, index);\n              }\n            }\n          } // Loop over handlers\n        } catch (err) {\n          _didIteratorError = true;\n          _iteratorError = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion && _iterator.return) {\n              _iterator.return();\n            }\n          } finally {\n            if (_didIteratorError) {\n              throw _iteratorError;\n            }\n          }\n        }\n      },\n      // pre func\n\n      /**\n       * Handler on node exit.\n       */\n      post: function post(node, parent, prop, index) {\n        if (!node) {\n          return;\n        }\n\n        var nodePath = void 0;\n        if (!options.asNodes) {\n          nodePath = getPathFor(node, parent, prop, index);\n        }\n\n        var _iteratorNormalCompletion2 = true;\n        var _didIteratorError2 = false;\n        var _iteratorError2 = undefined;\n\n        try {\n          for (var _iterator2 = handlers[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n            var handler = _step2.value;\n\n            // Per-node handler.\n            var handlerFuncPost = void 0;\n            if (typeof handler[node.type] === 'object' && typeof handler[node.type].post === 'function') {\n              handlerFuncPost = handler[node.type].post;\n            }\n\n            if (handlerFuncPost) {\n              if (nodePath) {\n                // A path/node can be removed by some previous handler.\n                if (!nodePath.isRemoved()) {\n                  var handlerResult = handlerFuncPost.call(handler, nodePath);\n                  // Explicitly stop traversal.\n                  if (handlerResult === false) {\n                    return false;\n                  }\n                }\n              } else {\n                handlerFuncPost.call(handler, node, parent, prop, index);\n              }\n            }\n          } // Loop over handlers\n        } catch (err) {\n          _didIteratorError2 = true;\n          _iteratorError2 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion2 && _iterator2.return) {\n              _iterator2.return();\n            }\n          } finally {\n            if (_didIteratorError2) {\n              throw _iteratorError2;\n            }\n          }\n        }\n      },\n      // post func\n\n      /**\n       * Skip locations by default.\n       */\n      skipProperty: function skipProperty(prop) {\n        return prop === 'loc';\n      }\n    });\n  }\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar DEFAULT_COLLECTION_PROP = 'expressions';\nvar DEFAULT_SINGLE_PROP = 'expression';\n\n/**\n * NodePath class encapsulates a traversing node,\n * its parent node, property name in the parent node, and\n * an index (in case if a node is part of a collection).\n * It also provides set of methods for AST manipulation.\n */\n\nvar NodePath = function () {\n  /**\n   * NodePath constructor.\n   *\n   * @param Object node - an AST node\n   * @param NodePath parentPath - a nullable parent path\n   * @param string property - property name of the node in the parent\n   * @param number index - index of the node in a collection.\n   */\n  function NodePath(node) {\n    var parentPath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n    var property = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n    var index = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n    _classCallCheck(this, NodePath);\n\n    this.node = node;\n    this.parentPath = parentPath;\n    this.parent = parentPath ? parentPath.node : null;\n    this.property = property;\n    this.index = index;\n  }\n\n  _createClass(NodePath, [{\n    key: '_enforceProp',\n    value: function _enforceProp(property) {\n      if (!this.node.hasOwnProperty(property)) {\n        throw new Error('Node of type ' + this.node.type + ' doesn\\'t have \"' + property + '\" collection.');\n      }\n    }\n\n    /**\n     * Sets a node into a children collection or the single child.\n     * By default child nodes are supposed to be under `expressions` property.\n     * An explicit property can be passed.\n     *\n     * @param Object node - a node to set into a collection or as single child\n     * @param number index - index at which to set\n     * @param string property - name of the collection or single property\n     */\n\n  }, {\n    key: 'setChild',\n    value: function setChild(node) {\n      var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n      var property = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n\n      var childPath = void 0;\n      if (index != null) {\n        if (!property) {\n          property = DEFAULT_COLLECTION_PROP;\n        }\n        this._enforceProp(property);\n        this.node[property][index] = node;\n        childPath = NodePath.getForNode(node, this, property, index);\n      } else {\n        if (!property) {\n          property = DEFAULT_SINGLE_PROP;\n        }\n        this._enforceProp(property);\n        this.node[property] = node;\n        childPath = NodePath.getForNode(node, this, property, null);\n      }\n      return childPath;\n    }\n\n    /**\n     * Appends a node to a children collection.\n     * By default child nodes are supposed to be under `expressions` property.\n     * An explicit property can be passed.\n     *\n     * @param Object node - a node to set into a collection or as single child\n     * @param string property - name of the collection or single property\n     */\n\n  }, {\n    key: 'appendChild',\n    value: function appendChild(node) {\n      var property = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n\n      if (!property) {\n        property = DEFAULT_COLLECTION_PROP;\n      }\n      this._enforceProp(property);\n      var end = this.node[property].length;\n      return this.setChild(node, end, property);\n    }\n\n    /**\n     * Inserts a node into a collection.\n     * By default child nodes are supposed to be under `expressions` property.\n     * An explicit property can be passed.\n     *\n     * @param Object node - a node to insert into a collection\n     * @param number index - index at which to insert\n     * @param string property - name of the collection property\n     */\n\n  }, {\n    key: 'insertChildAt',\n    value: function insertChildAt(node, index) {\n      var property = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : DEFAULT_COLLECTION_PROP;\n\n      this._enforceProp(property);\n\n      this.node[property].splice(index, 0, node);\n\n      // If we inserted a node before the traversing index,\n      // we should increase the later.\n      if (index <= NodePath.getTraversingIndex()) {\n        NodePath.updateTraversingIndex(+1);\n      }\n\n      this._rebuildIndex(this.node, property);\n    }\n\n    /**\n     * Removes a node.\n     */\n\n  }, {\n    key: 'remove',\n    value: function remove() {\n      if (this.isRemoved()) {\n        return;\n      }\n      NodePath.registry.delete(this.node);\n\n      this.node = null;\n\n      if (!this.parent) {\n        return;\n      }\n\n      // A node is in a collection.\n      if (this.index !== null) {\n        this.parent[this.property].splice(this.index, 1);\n\n        // If we remove a node before the traversing index,\n        // we should increase the later.\n        if (this.index <= NodePath.getTraversingIndex()) {\n          NodePath.updateTraversingIndex(-1);\n        }\n\n        // Rebuild index.\n        this._rebuildIndex(this.parent, this.property);\n\n        this.index = null;\n        this.property = null;\n\n        return;\n      }\n\n      // A simple node.\n      delete this.parent[this.property];\n      this.property = null;\n    }\n\n    /**\n     * Rebuilds child nodes index (used on remove/insert).\n     */\n\n  }, {\n    key: '_rebuildIndex',\n    value: function _rebuildIndex(parent, property) {\n      var parentPath = NodePath.getForNode(parent);\n\n      for (var i = 0; i < parent[property].length; i++) {\n        var path = NodePath.getForNode(parent[property][i], parentPath, property, i);\n        path.index = i;\n      }\n    }\n\n    /**\n     * Whether the path was removed.\n     */\n\n  }, {\n    key: 'isRemoved',\n    value: function isRemoved() {\n      return this.node === null;\n    }\n\n    /**\n     * Replaces a node with the passed one.\n     */\n\n  }, {\n    key: 'replace',\n    value: function replace(newNode) {\n      NodePath.registry.delete(this.node);\n\n      this.node = newNode;\n\n      if (!this.parent) {\n        return null;\n      }\n\n      // A node is in a collection.\n      if (this.index !== null) {\n        this.parent[this.property][this.index] = newNode;\n      }\n\n      // A simple node.\n      else {\n          this.parent[this.property] = newNode;\n        }\n\n      // Rebuild the node path for the new node.\n      return NodePath.getForNode(newNode, this.parentPath, this.property, this.index);\n    }\n\n    /**\n     * Updates a node inline.\n     */\n\n  }, {\n    key: 'update',\n    value: function update(nodeProps) {\n      Object.assign(this.node, nodeProps);\n    }\n\n    /**\n     * Returns parent.\n     */\n\n  }, {\n    key: 'getParent',\n    value: function getParent() {\n      return this.parentPath;\n    }\n\n    /**\n     * Returns nth child.\n     */\n\n  }, {\n    key: 'getChild',\n    value: function getChild() {\n      var n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n      if (this.node.expressions) {\n        return NodePath.getForNode(this.node.expressions[n], this, DEFAULT_COLLECTION_PROP, n);\n      } else if (this.node.expression && n == 0) {\n        return NodePath.getForNode(this.node.expression, this, DEFAULT_SINGLE_PROP);\n      }\n      return null;\n    }\n\n    /**\n     * Whether a path node is syntactically equal to the passed one.\n     *\n     * NOTE: we don't rely on `source` property from the `loc` data\n     * (which would be the fastest comparison), since it might be unsync\n     * after several modifications. We use here simple `JSON.stringify`\n     * excluding the `loc` data.\n     *\n     * @param NodePath other - path to compare to.\n     * @return boolean\n     */\n\n  }, {\n    key: 'hasEqualSource',\n    value: function hasEqualSource(path) {\n      return JSON.stringify(this.node, jsonSkipLoc) === JSON.stringify(path.node, jsonSkipLoc);\n    }\n\n    /**\n     * JSON-encodes a node skipping location.\n     */\n\n  }, {\n    key: 'jsonEncode',\n    value: function jsonEncode() {\n      var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n          format = _ref.format,\n          useLoc = _ref.useLoc;\n\n      return JSON.stringify(this.node, useLoc ? null : jsonSkipLoc, format);\n    }\n\n    /**\n     * Returns previous sibling.\n     */\n\n  }, {\n    key: 'getPreviousSibling',\n    value: function getPreviousSibling() {\n      if (!this.parent || this.index == null) {\n        return null;\n      }\n      return NodePath.getForNode(this.parent[this.property][this.index - 1], NodePath.getForNode(this.parent), this.property, this.index - 1);\n    }\n\n    /**\n     * Returns next sibling.\n     */\n\n  }, {\n    key: 'getNextSibling',\n    value: function getNextSibling() {\n      if (!this.parent || this.index == null) {\n        return null;\n      }\n      return NodePath.getForNode(this.parent[this.property][this.index + 1], NodePath.getForNode(this.parent), this.property, this.index + 1);\n    }\n\n    /**\n     * Returns a NodePath instance for a node.\n     *\n     * The same NodePath can be reused in several places, e.g.\n     * a parent node passed for all its children.\n     */\n\n  }], [{\n    key: 'getForNode',\n    value: function getForNode(node) {\n      var parentPath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n      var prop = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n      var index = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : -1;\n\n      if (!node) {\n        return null;\n      }\n\n      if (!NodePath.registry.has(node)) {\n        NodePath.registry.set(node, new NodePath(node, parentPath, prop, index == -1 ? null : index));\n      }\n\n      var path = NodePath.registry.get(node);\n\n      if (parentPath !== null) {\n        path.parentPath = parentPath;\n        path.parent = path.parentPath.node;\n      }\n\n      if (prop !== null) {\n        path.property = prop;\n      }\n\n      if (index >= 0) {\n        path.index = index;\n      }\n\n      return path;\n    }\n\n    /**\n     * Initializes the NodePath registry. The registry is a map from\n     * a node to its NodePath instance.\n     */\n\n  }, {\n    key: 'initRegistry',\n    value: function initRegistry() {\n      if (!NodePath.registry) {\n        NodePath.registry = new Map();\n      }\n      NodePath.registry.clear();\n    }\n\n    /**\n     * Updates index of a currently traversing collection.\n     */\n\n  }, {\n    key: 'updateTraversingIndex',\n    value: function updateTraversingIndex(dx) {\n      return NodePath.traversingIndexStack[NodePath.traversingIndexStack.length - 1] += dx;\n    }\n\n    /**\n     * Returns current traversing index.\n     */\n\n  }, {\n    key: 'getTraversingIndex',\n    value: function getTraversingIndex() {\n      return NodePath.traversingIndexStack[NodePath.traversingIndexStack.length - 1];\n    }\n  }]);\n\n  return NodePath;\n}();\n\nNodePath.initRegistry();\n\n/**\n * Index of a currently traversing collection is stored on top of the\n * `NodePath.traversingIndexStack`. Remove/insert methods can adjust\n * this index.\n */\nNodePath.traversingIndexStack = [];\n\n// Helper function used to skip `loc` in JSON operations.\nfunction jsonSkipLoc(prop, value) {\n  if (prop === 'loc') {\n    return undefined;\n  }\n  return value;\n}\n\nmodule.exports = NodePath;","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * Performs a deep copy of an simple object.\n * Only handles scalar values, arrays and objects.\n *\n * @param obj Object\n */\n\nmodule.exports = function clone(obj) {\n  if (obj === null || typeof obj !== 'object') {\n    return obj;\n  }\n  var res = void 0;\n  if (Array.isArray(obj)) {\n    res = [];\n  } else {\n    res = {};\n  }\n  for (var i in obj) {\n    res[i] = clone(obj[i]);\n  }\n  return res;\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nmodule.exports = require('./dist/regexp-tree');","import browserslist from 'browserslist';\nimport RegexpTree from 'regexp-tree';\nimport { regexes } from 'ua-regexes-lite';\n\n/**\n * Array of numbers to array of first and last elements.\n * @param numbers - Array of numbers.\n * @returns Number or two numbers.\n */ function numbersToRanges(numbers) {\n    if (typeof numbers === \"number\") {\n        return numbers;\n    }\n    if (numbers.length === 1) {\n        return numbers[0];\n    }\n    return [\n        numbers[0],\n        numbers[numbers.length - 1]\n    ];\n}\n\nvar SemverPart;\n(function(SemverPart) {\n    SemverPart[SemverPart[\"Major\"] = 0] = \"Major\";\n    SemverPart[SemverPart[\"Minor\"] = 1] = \"Minor\";\n    SemverPart[SemverPart[\"Patch\"] = 2] = \"Patch\";\n})(SemverPart || (SemverPart = {}));\n\n/**\n * Get semver from string or array.\n * @param version - Target to convert.\n * @returns Array with semver parts.\n */ function semverify(version) {\n    const versionParts = Array.isArray(version) ? version : version.toString().split(\".\");\n    if (versionParts[0] === \"all\") {\n        return [\n            Infinity,\n            0,\n            0\n        ];\n    }\n    let versionPart = null;\n    let semverPart = null;\n    const semver = [\n        0,\n        0,\n        0\n    ];\n    for(let i = 0; i < 3; i++){\n        versionPart = versionParts[i];\n        if (typeof versionPart === \"undefined\") {\n            continue;\n        }\n        semverPart = typeof versionPart === \"number\" ? versionPart : parseInt(versionPart, 10);\n        if (isNaN(semverPart)) {\n            return null;\n        }\n        semver[i] = semverPart;\n    }\n    return semver;\n}\n/**\n * Get semver range.\n * @param from\n * @param to\n * @returns Semver range.\n */ function rangeSemver(from, to) {\n    let partIndex = 0;\n    const range = [];\n    for(let i = 2; i >= 0; i--){\n        if (from[i] !== to[i]) {\n            partIndex = i;\n            break;\n        }\n    }\n    for(let i1 = from[partIndex], max = to[partIndex]; i1 <= max; i1++){\n        range.push(from.map((v, j)=>j === partIndex ? i1 : v));\n    }\n    return range;\n}\n/**\n * Compare semvers.\n * @param a - Semver to compare.\n * @param b - Semver to compare with.\n * @param options - Compare options.\n * @returns Equals or not.\n */ function compareSemvers(a, b, options) {\n    const [major, minor, patch] = a;\n    const [majorBase, minorBase, patchBase] = b;\n    const { ignoreMinor , ignorePatch , allowHigherVersions  } = options;\n    if (majorBase === Infinity) {\n        return true;\n    }\n    const compareMinor = !ignoreMinor;\n    const comparePatch = compareMinor && !ignorePatch;\n    if (allowHigherVersions) {\n        if (comparePatch && patch < patchBase || compareMinor && minor < minorBase) {\n            return false;\n        }\n        return major >= majorBase;\n    }\n    if (comparePatch && patch !== patchBase || compareMinor && minor !== minorBase) {\n        return false;\n    }\n    return major === majorBase;\n}\n/**\n * Get required semver parts count.\n * @param version - Semver parts or ranges.\n * @param options - Semver compare options.\n * @returns Required semver parts count.\n */ function getRequiredSemverPartsCount(version, options) {\n    const { ignoreMinor , ignorePatch , allowZeroSubversions  } = options;\n    let shouldRepeatCount = ignoreMinor ? 1 : ignorePatch ? 2 : 3;\n    if (allowZeroSubversions) {\n        for(let i = shouldRepeatCount - 1; i > 0; i--){\n            if (version[i] !== 0 || shouldRepeatCount === 1) {\n                break;\n            }\n            shouldRepeatCount--;\n        }\n    }\n    return shouldRepeatCount;\n}\n\n/**\n * Browsers strings to info objects.\n * @param browsersList - Browsers strings with family and version.\n * @returns Browser info objects.\n */ function parseBrowsersList(browsersList) {\n    return browsersList.reduce((browsers, browser)=>{\n        const [family, versionString, versionStringTo] = browser.split(/ |-/);\n        const version = semverify(versionString);\n        const versions = !version ? [] : versionStringTo ? rangeSemver(version, semverify(versionStringTo)) : [\n            version\n        ];\n        return versions.reduce((browsers, semver)=>{\n            if (semver) {\n                browsers.push({\n                    family,\n                    version: semver\n                });\n            }\n            return browsers;\n        }, browsers);\n    }, []);\n}\n/**\n * Request browsers list.\n * @param options - Options to get browsers list.\n * @returns Browser info objects.\n */ function getBrowsersList(options = {}) {\n    const { browsers , ...browserslistOptions } = options;\n    const browsersList = browserslist(browsers, browserslistOptions);\n    const parsedBrowsers = parseBrowsersList(browsersList);\n    return parsedBrowsers;\n}\n\n/**\n * Compare two arrays.\n * @param a - Array to compare.\n * @param b - Array to compare.\n * @param from - Index to start compare from.\n * @returns Equals or not.\n */ function compareArrays(a, b, from = 0) {\n    const len = a.length;\n    for(let i = from; i < len; i++){\n        if (a[i] !== b[i]) {\n            return false;\n        }\n    }\n    return true;\n}\n/**\n * Clone simple object.\n * @param value\n * @returns Object clone.\n */ function clone(value) {\n    if (value === null || typeof value !== \"object\") {\n        return value;\n    }\n    /* eslint-disable */ const copy = Array.isArray(value) ? [] : {};\n    let i;\n    for(i in value){\n        copy[i] = clone(value[i]);\n    }\n    /* eslint-enable */ return copy;\n}\n/**\n * Concat arrays.\n * @param items\n * @returns Concatinated arrays.\n */ function concat(items) {\n    return [].concat(...items);\n}\n\n/**\n * Merge browser info object to map with versions.\n * @param browsers - Browser info object to merge.\n * @returns Merged browsers map.\n */ function mergeBrowserVersions(browsers) {\n    const merge = new Map();\n    browsers.forEach(({ family , version  })=>{\n        const versions = merge.get(family);\n        if (versions) {\n            const strVersion = version.join(\".\");\n            if (versions.every((_)=>_.join(\".\") !== strVersion)) {\n                versions.push(version);\n            }\n            return;\n        }\n        merge.set(family, [\n            version\n        ]);\n    });\n    merge.forEach((versions)=>{\n        versions.sort((a, b)=>{\n            for(const i in a){\n                if (a[i] !== b[i]) {\n                    return a[i] - b[i];\n                }\n            }\n            return 0;\n        });\n    });\n    return merge;\n}\n/**\n * Versions to ranged versions.\n * @param versions - Semver versions list.\n * @returns Ranged versions list.\n */ function versionsListToRanges(versions) {\n    if (versions.length < 2) {\n        return versions;\n    }\n    const max = versions.length + 1;\n    const ranges = [];\n    let prev = null;\n    let current = versions[0];\n    let major = [\n        current[SemverPart.Major]\n    ];\n    let minor = [\n        current[SemverPart.Minor]\n    ];\n    let patch = [\n        current[SemverPart.Patch]\n    ];\n    let part = null;\n    for(let i = 1; i < max; i++){\n        prev = versions[i - 1];\n        current = versions[i] || [];\n        for(let p = SemverPart.Major; p <= SemverPart.Patch; p++){\n            if ((p === part || part === null) && prev[p] + 1 === current[p] && compareArrays(prev, current, p + 1)) {\n                part = p;\n                if (p === SemverPart.Major) {\n                    major.push(current[SemverPart.Major]);\n                } else {\n                    major = current[SemverPart.Major];\n                }\n                if (p === SemverPart.Minor) {\n                    minor.push(current[SemverPart.Minor]);\n                } else {\n                    minor = current[SemverPart.Minor];\n                }\n                if (p === SemverPart.Patch) {\n                    patch.push(current[SemverPart.Patch]);\n                } else {\n                    patch = current[SemverPart.Patch];\n                }\n                break;\n            }\n            if (part === p || prev[p] !== current[p]) {\n                ranges.push([\n                    numbersToRanges(major),\n                    numbersToRanges(minor),\n                    numbersToRanges(patch)\n                ]);\n                major = [\n                    current[SemverPart.Major]\n                ];\n                minor = [\n                    current[SemverPart.Minor]\n                ];\n                patch = [\n                    current[SemverPart.Patch]\n                ];\n                part = null;\n                break;\n            }\n        }\n    }\n    return ranges;\n}\n\nfunction AstRegExpNode(body) {\n    return {\n        type: \"RegExp\",\n        body,\n        flags: \"\"\n    };\n}\nfunction AlternativeNode(...expressions) {\n    const exps = concat(expressions).filter(Boolean);\n    if (exps.length === 1) {\n        return exps[0];\n    }\n    return {\n        type: \"Alternative\",\n        expressions: exps\n    };\n}\nfunction SimpleCharNode(value) {\n    return {\n        type: \"Char\",\n        kind: \"simple\",\n        value: String(value),\n        codePoint: NaN\n    };\n}\nfunction MetaCharNode(value) {\n    return {\n        type: \"Char\",\n        kind: \"meta\",\n        value,\n        codePoint: NaN\n    };\n}\nfunction ClassRangeNode(from, to) {\n    return {\n        type: \"ClassRange\",\n        from,\n        to\n    };\n}\nfunction CharacterClassNode(...expressions) {\n    return {\n        type: \"CharacterClass\",\n        expressions: concat(expressions).filter(Boolean)\n    };\n}\nfunction SimpleQuantifierNode(kind) {\n    return {\n        type: \"Quantifier\",\n        kind,\n        greedy: true\n    };\n}\nfunction RangeQuantifierNode(from, to) {\n    return {\n        type: \"Quantifier\",\n        kind: \"Range\",\n        from,\n        to,\n        greedy: true\n    };\n}\nfunction CapturingGroupNode(expression) {\n    return {\n        type: \"Group\",\n        capturing: true,\n        expression,\n        number: null\n    };\n}\nfunction RepetitionNode(expression, quantifier) {\n    return {\n        type: \"Repetition\",\n        expression,\n        quantifier\n    };\n}\nfunction DisjunctionNode(...expressions) {\n    const exprs = concat(expressions).filter(Boolean);\n    if (exprs.length === 1) {\n        return exprs[0];\n    }\n    const disjunction = {\n        type: \"Disjunction\",\n        left: null,\n        right: exprs.pop()\n    };\n    exprs.reduceRight((disjunction, expr, i)=>{\n        if (i === 0) {\n            disjunction.left = expr;\n            return disjunction;\n        }\n        disjunction.left = {\n            type: \"Disjunction\",\n            left: null,\n            right: expr\n        };\n        return disjunction.left;\n    }, disjunction);\n    return disjunction;\n}\nfunction DisjunctionCapturingGroupNode(...expressions) {\n    const expr = DisjunctionNode(...expressions);\n    if (expr.type === \"Disjunction\") {\n        return CapturingGroupNode(expr);\n    }\n    return expr;\n}\nfunction DigitPatternNode() {\n    return MetaCharNode(\"\\\\d\");\n}\nfunction NumberPatternNode(quantifier = SimpleQuantifierNode(\"+\")) {\n    const numberPattern = RepetitionNode(DigitPatternNode(), quantifier);\n    return numberPattern;\n}\nfunction NumberCharsNode(value) {\n    return AlternativeNode(Array.from(String(value), SimpleCharNode));\n}\n\n/**\n * Check node whether is number pattern.\n * @param node - AST node to check.\n * @returns Is number pattern or not.\n */ function isNumberPatternNode(node) {\n    if (node.type === \"Group\" && node.expression.type === \"Repetition\") {\n        const { expression , quantifier  } = node.expression;\n        return expression.type === \"Char\" && expression.value === \"\\\\d\" && quantifier.kind === \"+\" && quantifier.greedy;\n    }\n    return false;\n}\n/**\n * Check node whether is char node.\n * @param node - AST node to check.\n * @param value - Value to compare.\n * @returns Is char node or not.\n */ function isCharNode(node, value) {\n    if (node && node.type === \"Char\") {\n        return typeof value === \"undefined\" || value instanceof RegExp && value.test(node.value) || String(value) === node.value;\n    }\n    return false;\n}\n/**\n * Check node whether is digit range.\n * @param node - AST node to check.\n * @returns Is digit range or not.\n */ function isDigitRangeNode(node) {\n    if (node.type === \"CharacterClass\" && node.expressions.length === 1) {\n        const [expression] = node.expressions;\n        return expression.type === \"ClassRange\" && isCharNode(expression.from, /\\d/) && isCharNode(expression.to, /\\d/);\n    }\n    return false;\n}\n/**\n * Check node whether is expression.\n * @param node - AST node to check.\n * @returns Is expression node or not.\n */ function isExpressionNode(node) {\n    return node.type !== \"RegExp\" && node.type !== \"ClassRange\" && node.type !== \"Quantifier\";\n}\nfunction parseRegex(regex) {\n    return typeof regex === \"string\" ? RegexpTree.parse(regex.replace(/^([^/])/, \"/$1\").replace(/([^/])$/, \"$1/\")) : regex instanceof RegExp ? RegexpTree.parse(regex) : regex;\n}\n/**\n * Get regex from string or AST.\n * @param src - String or AST.\n * @returns RegExp.\n */ function toRegex(src) {\n    return typeof src === \"string\" ? new RegExp(src) : new RegExp(RegexpTree.generate(src.body), src.flags);\n}\n/**\n * Get string from regex or AST.\n * @param src - RegExp or AST.\n * @returns String.\n */ function toString(src) {\n    return typeof src === \"string\" ? src : src instanceof RegExp ? src.toString() : RegexpTree.generate(src);\n}\n\nconst classes = [\n    \"RegExp\",\n    \"Disjunction\",\n    \"Alternative\",\n    \"Assertion\",\n    \"Char\",\n    \"CharacterClass\",\n    \"ClassRange\",\n    \"Backreference\",\n    \"Group\",\n    \"Repetition\",\n    \"Quantifier\"\n];\n/**\n * Create traversal visitors.\n * @param visitors\n * @returns Traversal handlers.\n */ function visitors(visitors) {\n    const { every  } = visitors;\n    if (!every) {\n        return visitors;\n    }\n    if (typeof every === \"function\") {\n        return {\n            // eslint-disable-next-line @typescript-eslint/naming-convention\n            \"*\": every,\n            ...visitors\n        };\n    }\n    return classes.reduce((newVisitors, className)=>{\n        const visitor = visitors[className];\n        const visitorPre = visitor ? \"pre\" in visitor ? visitor.pre : visitor : null;\n        const visitorPost = visitor ? \"post\" in visitor ? visitor.post : null : null;\n        newVisitors[className] = {\n            pre (nodePath) {\n                if (every.pre(nodePath) !== false && visitorPre) {\n                    return visitorPre(nodePath);\n                }\n                return true;\n            },\n            post (nodePath) {\n                if (every.post(nodePath) !== false && visitorPost) {\n                    return visitorPost(nodePath);\n                }\n                return true;\n            }\n        };\n        return newVisitors;\n    }, {});\n}\n\nfunction optimizeRegex(regex) {\n    // Optimization requires filled codePoints\n    const regexAst = RegexpTree.optimize(parseRegex(toString(regex))).getAST();\n    RegexpTree.traverse(regexAst, {\n        Group (nodePath) {\n            const { parent , node  } = nodePath;\n            const { expression  } = node;\n            node.capturing = true;\n            if (parent.type === \"RegExp\" || expression.type !== \"Disjunction\" && parent.type !== \"Repetition\" || expression.type === \"Disjunction\" && parent.type === \"Disjunction\") {\n                nodePath.replace(nodePath.node.expression);\n            }\n        }\n    });\n    return regexAst;\n}\n/**\n * Merge digits patterns if possible.\n * @param a\n * @param b\n * @returns Merged node.\n */ function mergeDigits(a, b) {\n    if (isCharNode(a) && isCharNode(b) && a.value === b.value) {\n        return b;\n    }\n    if (isCharNode(a, /\\d/) && isDigitRangeNode(b) && Number(b.expressions[0].from.value) - Number(a.value) === 1) {\n        return {\n            ...b,\n            expressions: [\n                {\n                    ...b.expressions[0],\n                    from: a\n                }\n            ]\n        };\n    }\n    if (isDigitRangeNode(a) && isCharNode(b, /\\d/) && Number(b.value) - Number(a.expressions[0].to.value) === 1) {\n        return {\n            ...a,\n            expressions: [\n                {\n                    ...a.expressions[0],\n                    to: b\n                }\n            ]\n        };\n    }\n    return null;\n}\n/**\n * Optimize segment number patterns.\n * @param patterns\n * @returns Optimized segment number patterns.\n */ function optimizeSegmentNumberPatterns(patterns) {\n    return patterns.reduce((patterns, node)=>{\n        const prevNode = patterns[patterns.length - 1];\n        if (prevNode && node.type === \"Alternative\" && prevNode.type === \"Alternative\" && node.expressions.length === prevNode.expressions.length) {\n            const merged = prevNode.expressions.reduceRight((exps, exp, i)=>{\n                if (!exps) {\n                    return exps;\n                }\n                const merged = mergeDigits(exp, node.expressions[i]);\n                if (merged) {\n                    exps.unshift(merged);\n                } else {\n                    return null;\n                }\n                return exps;\n            }, []);\n            if (merged) {\n                node.expressions = merged;\n                patterns.pop();\n            }\n        }\n        patterns.push(node);\n        return patterns;\n    }, []);\n}\n\n/**\n * Transform number to digits array.\n * @param num - Target number.\n * @returns Digits array.\n */ function numberToDigits(num) {\n    return Array.from(num.toString(), Number);\n}\n\n/**\n * Get digit pattern.\n * @param digit - Ray start.\n * @param includes - Include start digit or use next.\n * @returns Digit pattern.\n */ function rayRangeDigitPattern(digit, includes) {\n    const rangeStart = digit + Number(!includes);\n    if (rangeStart === 0) {\n        return DigitPatternNode();\n    }\n    if (rangeStart === 9) {\n        return SimpleCharNode(\"9\");\n    }\n    if (rangeStart > 9) {\n        return null;\n    }\n    return CharacterClassNode(ClassRangeNode(SimpleCharNode(rangeStart), SimpleCharNode(\"9\")));\n}\n/**\n * Create numeric ray pattern.\n * @param from - Start from this number.\n * @returns Numeric ray pattern parts.\n */ function rayToNumberPatterns(from) {\n    if (from === 0) {\n        return [\n            NumberPatternNode()\n        ];\n    }\n    const digits = numberToDigits(from);\n    const digitsCount = digits.length;\n    const other = NumberPatternNode(RangeQuantifierNode(digitsCount + 1));\n    const zeros = digitsCount - 1;\n    if (from / Math.pow(10, zeros) === digits[0]) {\n        return [\n            AlternativeNode(rayRangeDigitPattern(digits[0], true), Array.from({\n                length: zeros\n            }, DigitPatternNode)),\n            other\n        ];\n    }\n    const raysNumberPatterns = digits.reduce((topNodes, _, i)=>{\n        const ri = digitsCount - i - 1;\n        const d = i === 0;\n        let prev = SimpleCharNode(\"\");\n        const nodes = digits.reduce((nodes, digit, j)=>{\n            if (j < ri) {\n                nodes.push(SimpleCharNode(digit));\n            } else if (prev) {\n                if (j > ri) {\n                    nodes.push(DigitPatternNode());\n                } else {\n                    prev = rayRangeDigitPattern(digit, d);\n                    if (prev) {\n                        nodes.push(prev);\n                    } else {\n                        return [];\n                    }\n                }\n            }\n            return nodes;\n        }, []);\n        if (nodes.length) {\n            topNodes.push(nodes);\n        }\n        return topNodes;\n    }, []);\n    const numberPatterns = raysNumberPatterns.map((_)=>AlternativeNode(_));\n    numberPatterns.push(other);\n    return numberPatterns;\n}\n\n/**\n * Get digit pattern.\n * @param from - Segment start.\n * @param to - Segment end.\n * @param zeros - Zeros to add as prefix.\n * @returns Digit pattern.\n */ function segmentRangeNumberPattern(from, to, zeros) {\n    if (to < from) {\n        return null;\n    }\n    const fromNode = SimpleCharNode(from);\n    const toNode = SimpleCharNode(to);\n    const zerosPrefix = typeof zeros === \"number\" && zeros > 0 ? Array.from({\n        length: zeros\n    }, ()=>SimpleCharNode(0)) : [];\n    const addPrefix = zerosPrefix.length ? (node)=>AlternativeNode(zerosPrefix, node) : (node)=>node;\n    if (from === to) {\n        return addPrefix(fromNode);\n    }\n    if (from === 0 && to === 9) {\n        return addPrefix(DigitPatternNode());\n    }\n    if (to - from === 1) {\n        return addPrefix(CharacterClassNode(fromNode, toNode));\n    }\n    return addPrefix(CharacterClassNode(ClassRangeNode(fromNode, toNode)));\n}\n/**\n * Split segment range to decade ranges.\n * @param from - Segment start.\n * @param to - Segment end.\n * @returns Ranges.\n */ function splitToDecadeRanges(from, to) {\n    const ranges = [];\n    let num = from;\n    let decade = 1;\n    do {\n        decade *= 10;\n        if (num < decade) {\n            ranges.push([\n                num,\n                Math.min(decade - 1, to)\n            ]);\n            num = decade;\n        }\n    }while (decade <= to);\n    return ranges;\n}\n/**\n * Get common and diffs of two numbers (arrays of digits).\n * @param a - Digits.\n * @param b - Other digits.\n * @returns Common part and diffs.\n */ function splitCommonDiff(a, b) {\n    const len = a.length;\n    if (len !== b.length || a[0] !== b[0]) {\n        return null;\n    }\n    let common = a[0].toString();\n    let currA = 0;\n    let currB = 0;\n    let diffA = \"\";\n    let diffB = \"\";\n    for(let i = 1; i < len; i++){\n        currA = a[i];\n        currB = b[i];\n        if (currA === currB) {\n            common += currA;\n        } else {\n            diffA += currA;\n            diffB += currB;\n        }\n    }\n    return [\n        common,\n        parseInt(diffA, 10),\n        parseInt(diffB, 10)\n    ];\n}\n/**\n * Get segment patterns.\n * @param from - Segment start.\n * @param to - Segment end.\n * @param digitsInNumber - How many digits should be en number. Will be filled by zeros.\n * @returns Segment patterns.\n */ function segmentToNumberPatterns(from, to, digitsInNumber = 0) {\n    const fromDigits = numberToDigits(from);\n    const digitsCount = fromDigits.length;\n    if (from < 10 && to < 10 || from === to) {\n        const zeros = digitsInNumber - digitsCount;\n        return [\n            segmentRangeNumberPattern(from, to, zeros)\n        ];\n    }\n    const toDigits = numberToDigits(to);\n    if (digitsCount !== toDigits.length) {\n        const decadeRanges = splitToDecadeRanges(from, to);\n        const parts = concat(decadeRanges.map(([from, to])=>segmentToNumberPatterns(from, to, digitsInNumber)));\n        return parts;\n    }\n    const commonStart = splitCommonDiff(fromDigits, toDigits);\n    if (Array.isArray(commonStart)) {\n        const [common, from1, to1] = commonStart;\n        const digitsInNumber1 = digitsCount - common.length;\n        const diffParts = segmentToNumberPatterns(from1, to1, digitsInNumber1);\n        return [\n            AlternativeNode(Array.from(common, SimpleCharNode), DisjunctionCapturingGroupNode(diffParts))\n        ];\n    }\n    const range = Array.from({\n        length: digitsCount - 1\n    });\n    const middleSegment = segmentRangeNumberPattern(fromDigits[0] + 1, toDigits[0] - 1);\n    const parts1 = [\n        ...range.map((_, i)=>{\n            const ri = digitsCount - i - 1;\n            const d = Number(i > 0);\n            return AlternativeNode(fromDigits.map((digit, j)=>{\n                if (j < ri) {\n                    return SimpleCharNode(digit);\n                }\n                if (j > ri) {\n                    return segmentRangeNumberPattern(0, 9);\n                }\n                return segmentRangeNumberPattern(digit + d, 9);\n            }));\n        }),\n        // but output more readable\n        ...middleSegment ? [\n            AlternativeNode(middleSegment, Array.from({\n                length: digitsCount - 1\n            }, ()=>DigitPatternNode()))\n        ] : [],\n        ...range.map((_, i)=>{\n            const ri = digitsCount - i - 1;\n            const d = Number(i > 0);\n            return AlternativeNode(toDigits.map((digit, j)=>{\n                if (j < ri) {\n                    return SimpleCharNode(digit);\n                }\n                if (j > ri) {\n                    return segmentRangeNumberPattern(0, 9);\n                }\n                return segmentRangeNumberPattern(0, digit - d);\n            }));\n        })\n    ];\n    return optimizeSegmentNumberPatterns(parts1);\n}\n\n/**\n * Get regex for given numeric range.\n * @param from - Range start.\n * @param to - Range end.\n * @returns Range pattern.\n */ function rangeToRegex(from, to = Infinity) {\n    if (from === Infinity) {\n        return NumberPatternNode();\n    }\n    const numberPatterns = to === Infinity ? rayToNumberPatterns(from) : segmentToNumberPatterns(from, to);\n    const regex = DisjunctionCapturingGroupNode(numberPatterns);\n    return regex;\n}\n\n/**\n * Find matched versions.\n * @param minVersion - Semver version.\n * @param maxVersion - Semver version.\n * @param bases - Base semver versions.\n * @param options - Semver compare options.\n * @returns Matched versions.\n */ function findMatchedVersions(minVersion, maxVersion, bases, options) {\n    const compareOptions = {\n        ...options,\n        allowHigherVersions: true\n    };\n    const minComparator = (ver)=>compareSemvers(ver, minVersion, compareOptions);\n    const maxComparator = (ver)=>compareSemvers(maxVersion, ver, compareOptions);\n    const comparator = minVersion && maxVersion ? (ver)=>minComparator(ver) && maxComparator(ver) : minVersion ? minComparator : maxVersion ? maxComparator : ()=>true;\n    return bases.filter(comparator);\n}\n\n/**\n * Get useragent regexes for given browsers.\n * @param browsers - Browsers.\n * @param options - Semver compare options.\n * @param targetRegexes - Override default regexes.\n * @returns User agent regexes.\n */ function getRegexesForBrowsers(browsers, options, targetRegexes = regexes) {\n    const result = [];\n    let prevFamily = \"\";\n    let prevRegexIsGlobal = false;\n    targetRegexes.forEach((regex)=>{\n        const requestVersions = browsers.get(regex.family);\n        if (!requestVersions) {\n            return;\n        }\n        let { version , minVersion , maxVersion  } = regex;\n        if (version) {\n            minVersion = version;\n            maxVersion = version;\n        }\n        let matchedVersions = findMatchedVersions(minVersion, maxVersion, requestVersions, options);\n        if (matchedVersions.length) {\n            // regex contains global patch\n            if (prevFamily === regex.family && prevRegexIsGlobal) {\n                version = undefined;\n                minVersion = undefined;\n                maxVersion = undefined;\n                matchedVersions = requestVersions;\n                result.pop();\n            }\n            result.push({\n                ...regex,\n                version,\n                minVersion,\n                maxVersion,\n                requestVersions,\n                matchedVersions\n            });\n        }\n        prevRegexIsGlobal = !version && !minVersion && !maxVersion;\n        prevFamily = regex.family;\n    });\n    return result;\n}\n\n/**\n * Compile regexes.\n * @param regexes - Objects with info about compiled regexes.\n * @returns Objects with info about compiled regexes.\n */ function compileRegexes(regexes) {\n    return regexes.map(({ regexAst , ...regex })=>{\n        const optimizedRegexAst = optimizeRegex(regexAst);\n        return {\n            ...regex,\n            regexAst: optimizedRegexAst,\n            regex: toRegex(optimizedRegexAst)\n        };\n    });\n}\n/**\n * Compile regex.\n * @param regexes - Objects with info about compiled regexes.\n * @returns Compiled common regex.\n */ function compileRegex(regexes) {\n    const partsRegexes = regexes.map(({ regexAst  })=>CapturingGroupNode(regexAst.body));\n    const regexAst = optimizeRegex(AstRegExpNode(DisjunctionCapturingGroupNode(partsRegexes)));\n    return toRegex(regexAst);\n}\n\n/**\n * Get number patterns count from the regex.\n * @param regex - Target regex.\n * @returns Number patterns count.\n */ function getNumberPatternsCount(regex) {\n    const regexAst = parseRegex(regex);\n    let count = 0;\n    RegexpTree.traverse(regexAst, {\n        Group (nodePath) {\n            if (isNumberPatternNode(nodePath.node)) {\n                count++;\n            }\n        }\n    });\n    return count;\n}\nfunction replaceNumberPatterns(regex, numbers, numberPatternsCount) {\n    let regexAst = parseRegex(regex);\n    const numbersToReplace = typeof numberPatternsCount === \"number\" && numberPatternsCount < numbers.length ? numbers.slice(0, numberPatternsCount) : numbers.slice();\n    RegexpTree.traverse(regexAst, visitors({\n        every () {\n            return Boolean(numbersToReplace.length);\n        },\n        Group (nodePath) {\n            if (isNumberPatternNode(nodePath.node) && numbersToReplace.length) {\n                if (regexAst === nodePath.node) {\n                    regexAst = numbersToReplace.shift();\n                } else {\n                    nodePath.replace(numbersToReplace.shift());\n                }\n                return false;\n            }\n            return true;\n        }\n    }));\n    return regexAst;\n}\n/**\n * Get from regex part with number patterns.\n * @param regex - Target regex.\n * @param numberPatternsCount - Number patterns to extract.\n * @returns Regex part with number patterns.\n */ function getNumberPatternsPart(regex, numberPatternsCount) {\n    const regexAst = parseRegex(regex);\n    const maxNumbersCount = Math.min(getNumberPatternsCount(regexAst), numberPatternsCount || Infinity);\n    const expressions = [];\n    let numbersCounter = 0;\n    let containsNumberPattern = false;\n    RegexpTree.traverse(regexAst, visitors({\n        every: {\n            pre ({ node , parent  }) {\n                if (node === regexAst) {\n                    return true;\n                }\n                if (!isExpressionNode(node)) {\n                    return false;\n                }\n                if (parent === regexAst) {\n                    containsNumberPattern = false;\n                }\n                return numbersCounter < maxNumbersCount;\n            },\n            post ({ node , parent  }) {\n                if (node !== regexAst && parent === regexAst && isExpressionNode(node) && (containsNumberPattern || numbersCounter > 0 && numbersCounter < maxNumbersCount)) {\n                    expressions.push(node);\n                }\n            }\n        },\n        Group (nodePath) {\n            if (isNumberPatternNode(nodePath.node) && numbersCounter < maxNumbersCount) {\n                containsNumberPattern = true;\n                numbersCounter++;\n                return false;\n            }\n            return true;\n        }\n    }));\n    if (expressions.length === 1 && !isNumberPatternNode(expressions[0])) {\n        return getNumberPatternsPart(expressions[0], maxNumbersCount);\n    }\n    return expressions;\n}\n/**\n * Ranged semver to regex patterns.\n * @param rangedVersion - Ranged semver.\n * @param options - Semver compare options.\n * @returns Array of regex pattern.\n */ function rangedSemverToRegex(rangedVersion, options) {\n    const { ignoreMinor , ignorePatch , allowHigherVersions  } = options;\n    const ignoreIndex = rangedVersion[0] === Infinity ? 0 : ignoreMinor ? 1 : ignorePatch ? 2 : 3;\n    if (allowHigherVersions) {\n        const numberPatterns = [];\n        let prevWasZero = true;\n        let d = 0;\n        let start = 0;\n        const createMapper = (i)=>(range, j)=>{\n                if (j >= ignoreIndex) {\n                    return NumberPatternNode();\n                }\n                start = Array.isArray(range) ? range[0] : range;\n                if (j < i) {\n                    return NumberCharsNode(start);\n                }\n                if (j > i) {\n                    return NumberPatternNode();\n                }\n                return rangeToRegex(start + d);\n            };\n        for(let i = ignoreIndex - 1; i >= 0; i--){\n            if (prevWasZero && !rangedVersion[i]) {\n                continue;\n            }\n            prevWasZero = false;\n            numberPatterns.push(rangedVersion.map(createMapper(i)));\n            d = 1;\n        }\n        return numberPatterns;\n    }\n    const numberPatterns1 = rangedVersion.map((range, i)=>{\n        if (i >= ignoreIndex) {\n            return NumberPatternNode();\n        }\n        if (Array.isArray(range)) {\n            return rangeToRegex(range[0], range[1]);\n        }\n        return NumberCharsNode(range);\n    });\n    return [\n        numberPatterns1\n    ];\n}\n\nfunction applyVersionsToRegex(regex, versions, options) {\n    const { allowHigherVersions  } = options;\n    const regexAst = parseRegex(regex);\n    const finalVersions = allowHigherVersions && versions.length ? [\n        versions[0]\n    ] : versions;\n    const maxRequiredPartsCount = finalVersions.reduce((maxRequiredPartsCount, version)=>Math.max(maxRequiredPartsCount, getRequiredSemverPartsCount(version, options)), 1);\n    const numberPatternsPart = getNumberPatternsPart(regexAst, maxRequiredPartsCount);\n    const versionsPart = DisjunctionCapturingGroupNode(...finalVersions.map((version)=>rangedSemverToRegex(version, options).map((parts)=>replaceNumberPatterns(AlternativeNode(clone(numberPatternsPart)), parts, maxRequiredPartsCount))));\n    RegexpTree.traverse(regexAst, visitors({\n        every (nodePath) {\n            if (!numberPatternsPart.length) {\n                return false;\n            }\n            if (nodePath.node === numberPatternsPart[0]) {\n                if (numberPatternsPart.length === 1) {\n                    nodePath.replace(versionsPart);\n                } else {\n                    nodePath.remove();\n                }\n                numberPatternsPart.shift();\n            }\n            return true;\n        }\n    }));\n    return regexAst;\n}\n/**\n * Apply browser versions to info objects.\n * @param browserRegexes - Objects with requested browser version and regex.\n * @param options - Semver compare options.\n * @returns Objects with requested browser version and regex special for this version.\n */ function applyVersionsToRegexes(browserRegexes, options) {\n    return browserRegexes.map(({ regex: sourceRegex , version , maxVersion , matchedVersions , ...other })=>{\n        let regexAst = parseRegex(sourceRegex);\n        if (!version) {\n            regexAst = applyVersionsToRegex(regexAst, versionsListToRanges(matchedVersions), {\n                ...options,\n                allowHigherVersions: !maxVersion && options.allowHigherVersions\n            });\n        }\n        return {\n            regex: null,\n            sourceRegex,\n            regexAst,\n            version,\n            maxVersion,\n            matchedVersions,\n            ...other\n        };\n    });\n}\n\nconst defaultOptions = {\n    ignoreMinor: false,\n    ignorePatch: true,\n    allowZeroSubversions: false,\n    allowHigherVersions: false\n};\n/**\n * Get source regexes objects from browserslist query.\n * @param options - Browserslist and semver compare options.\n * @returns Source regexes objects.\n */ function getPreUserAgentRegexes(options = {}) {\n    const finalOptions = {\n        ...defaultOptions,\n        ...options\n    };\n    const browsersList = getBrowsersList(finalOptions);\n    const mergedBrowsers = mergeBrowserVersions(browsersList);\n    const sourceRegexes = getRegexesForBrowsers(mergedBrowsers, finalOptions);\n    const versionedRegexes = applyVersionsToRegexes(sourceRegexes, finalOptions);\n    return versionedRegexes;\n}\n/**\n * Compile browserslist query to regexes.\n * @param options - Browserslist and semver compare options.\n * @returns Objects with info about compiled regexes.\n */ function getUserAgentRegexes(options = {}) {\n    return compileRegexes(getPreUserAgentRegexes(options));\n}\n/**\n * Compile browserslist query to regex.\n * @param options - Browserslist and semver compare options.\n * @returns Compiled regex.\n */ function getUserAgentRegex(options = {}) {\n    return compileRegex(getPreUserAgentRegexes(options));\n}\n\nexport { AlternativeNode, AstRegExpNode, CapturingGroupNode, CharacterClassNode, ClassRangeNode, DigitPatternNode, DisjunctionCapturingGroupNode, DisjunctionNode, MetaCharNode, NumberCharsNode, NumberPatternNode, RangeQuantifierNode, RepetitionNode, SemverPart, SimpleCharNode, SimpleQuantifierNode, applyVersionsToRegex, applyVersionsToRegexes, clone, compareArrays, compareSemvers, compileRegex, compileRegexes, concat, defaultOptions, findMatchedVersions, getBrowsersList, getNumberPatternsCount, getNumberPatternsPart, getPreUserAgentRegexes, getRegexesForBrowsers, getRequiredSemverPartsCount, getUserAgentRegex, getUserAgentRegexes, isCharNode, isDigitRangeNode, isExpressionNode, isNumberPatternNode, mergeBrowserVersions, mergeDigits, numberToDigits, numbersToRanges, optimizeRegex, optimizeSegmentNumberPatterns, parseBrowsersList, parseRegex, rangeSemver, rangeToRegex, rangedSemverToRegex, rayRangeDigitPattern, rayToNumberPatterns, replaceNumberPatterns, segmentRangeNumberPattern, segmentToNumberPatterns, semverify, splitCommonDiff, splitToDecadeRanges, toRegex, toString, versionsListToRanges, visitors };\n//# sourceMappingURL=index.js.map\n","/**\n * @typedef {import('./index.d').UserAgentRegex} UserAgentRegex\n */\n\n/** @type {UserAgentRegex[]} */\nexport const regexes = [\n  {\n    regex: /IE (\\d+)\\.(\\d+)/,\n    family: 'ie',\n    maxVersion: [\n      7,\n      Infinity,\n      Infinity\n    ]\n  },\n  /**\n   * IE can be in Compatability Mode (IE 7.0)\n   * so we need to check Trident version\n   */\n  {\n    regex: /Trident\\/4\\.0/,\n    family: 'ie',\n    version: [\n      8,\n      0,\n      0\n    ]\n  },\n  {\n    regex: /Trident\\/5\\.0/,\n    family: 'ie',\n    version: [\n      9,\n      0,\n      0\n    ]\n  },\n  {\n    regex: /Trident\\/6\\.0/,\n    family: 'ie',\n    version: [\n      10,\n      0,\n      0\n    ]\n  },\n  {\n    regex: /Trident\\/[78]\\.0/,\n    family: 'ie',\n    version: [\n      11,\n      0,\n      0\n    ]\n  },\n  {\n    regex: /Edge?\\/(\\d+)\\.(\\d+)(\\.(\\d+)|)/,\n    family: 'edge'\n  },\n  {\n    regex: /Firefox\\/(\\d+)\\.(\\d+)(\\.(\\d+)|)/,\n    family: 'firefox'\n  },\n  {\n    regex: /Chrom(ium|e)\\/(\\d+)\\.(\\d+)(\\.(\\d+)|)/,\n    family: 'chrome'\n  },\n  /**\n   * Ignore Edge with EdgeHTML engine.\n   */\n  {\n    regex: /Chrom(ium|e)\\/(\\d+)\\.(\\d+)(\\.(\\d+)|)([\\d.]+$|.*Safari\\/(?![\\d.]+ Edge\\/[\\d.]+$))/,\n    family: 'chrome',\n    maxVersion: [\n      70,\n      Infinity,\n      Infinity\n    ]\n  },\n  /**\n   * Safari on iPad have desktop-like useragent\n   * Some versions contains letter subversions\n   * GNOME Web (X11) is based on WebKit and should be detected as Safari\n   */\n  {\n    regex: /(Maci|X11).+ Version\\/(\\d+)\\.(\\d+)([.,](\\d+)|)( \\(\\w+\\)|)( Mobile\\/\\w+|) Safari\\//,\n    family: 'safari'\n  },\n  /**\n   * Presto Opera\n   */\n  {\n    regex: /Opera\\/9\\.80.+Version\\/(\\d+)\\.(\\d+)(\\.(\\d+)|)/,\n    family: 'opera',\n    maxVersion: [\n      12,\n      15,\n      0\n    ]\n  },\n  /**\n   * Chromium based Opera\n   */\n  {\n    regex: /Chrome.+OPR\\/(\\d+)\\.(\\d+)\\.(\\d+)/,\n    family: 'opera',\n    minVersion: [\n      15,\n      0,\n      0\n    ]\n  },\n  {\n    regex: /(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(\\d+)[_.](\\d+)([_.](\\d+)|)/,\n    family: 'ios_saf'\n  },\n  /**\n   * Ignore IE Mobile 11\n   */\n  {\n    regex: /[^e] (CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(\\d+)[_.](\\d+)([_.](\\d+)|)/,\n    family: 'ios_saf',\n    version: [\n      7,\n      0,\n      3\n    ]\n  },\n  {\n    regex: /Opera Mini/,\n    family: 'op_mini'\n  },\n  {\n    regex: /Android Donut/,\n    family: 'android',\n    version: [\n      1,\n      2,\n      0\n    ]\n  },\n  {\n    regex: /Android Eclair/,\n    family: 'android',\n    version: [\n      2,\n      1,\n      0\n    ]\n  },\n  {\n    regex: /Android Froyo/,\n    family: 'android',\n    version: [\n      2,\n      2,\n      0\n    ]\n  },\n  {\n    regex: /Android Gingerbread/,\n    family: 'android',\n    version: [\n      2,\n      3,\n      0\n    ]\n  },\n  {\n    regex: /Android Honeycomb/,\n    family: 'android',\n    version: [\n      3,\n      0,\n      0\n    ]\n  },\n  {\n    regex: /Android:?[ /-](\\d+)(\\.(\\d+)|)(\\.(\\d+)|)/,\n    family: 'android'\n  },\n  /**\n   * Ignore IE Mobile 11\n   */\n  {\n    regex: /Android:?[ /-](\\d+)(\\.(\\d+)|)(\\.(\\d+)|);(?! ARM; Trident)/,\n    family: 'android',\n    version: [\n      4,\n      0,\n      0\n    ]\n  },\n  {\n    regex: /PlayBook.+RIM Tablet OS (\\d+)\\.(\\d+)\\.(\\d+)/,\n    family: 'bb'\n  },\n  {\n    regex: /(Black[bB]erry|BB10).+Version\\/(\\d+)\\.(\\d+)\\.(\\d+)/,\n    family: 'bb'\n  },\n  /**\n   * Presto Opera Mobile\n   */\n  {\n    regex: /Opera\\/.+Opera Mobi.+Version\\/(\\d+)\\.(\\d+)/,\n    family: 'op_mob',\n    maxVersion: [\n      12,\n      16,\n      0\n    ]\n  },\n  /**\n   * Chromium based Opera Mobile\n   */\n  {\n    regex: /Mobile Safari.+OPR\\/(\\d+)\\.(\\d+)\\.(\\d+)/,\n    family: 'op_mob',\n    minVersion: [\n      14,\n      0,\n      0\n    ]\n  },\n  {\n    regex: /Android.+Firefox\\/(\\d+)\\.(\\d+)(\\.(\\d+)|)/,\n    family: 'and_ff'\n  },\n  {\n    regex: /Android.+Chrom(ium|e)\\/(\\d+)\\.(\\d+)(\\.(\\d+)|)/,\n    family: 'and_chr'\n  },\n  {\n    regex: /IEMobile[ /](\\d+)\\.(\\d+)/,\n    family: 'ie_mob'\n  },\n  {\n    regex: /Android.+(UC? ?Browser|UCWEB|U3)[ /]?(\\d+)\\.(\\d+)\\.(\\d+)/,\n    family: 'and_uc'\n  },\n  {\n    regex: /SamsungBrowser\\/(\\d+)\\.(\\d+)/,\n    family: 'samsung'\n  },\n  {\n    regex: /Android.+MQQBrowser\\/(\\d+)(\\.(\\d+)|)(\\.(\\d+)|)/,\n    family: 'and_qq'\n  },\n  {\n    regex: /baidubrowser[/\\s](\\d+)(\\.(\\d+)|)(\\.(\\d+)|)/,\n    family: 'baidu'\n  },\n  {\n    regex: /K[Aa][Ii]OS\\/(\\d+)\\.(\\d+)(\\.(\\d+)|)/,\n    family: 'kaios'\n  }\n]\n"],"names":["module","exports","user","getCurrentUser","getLoggerBuilder","setApp","build","setUid","uid","getBuilder","clearOnLogout","persist","supportedBrowsersRegExp","getUserAgentRegex","allowHigherVersions","browsers","browserslistConfig","browserslist","redirectPath","generateUrl","isBrowserOverridden","browserStorage","getItem","testSupportedBrowser","test","navigator","userAgent","logger","debug","window","location","pathname","indexOf","redirectUrl","href","replace","origin","base64Param","Buffer","from","toString","history","pushState","concat","reload","BrowserslistError","noop","loadQueries","getStat","opts","stats","loadConfig","config","loadCountry","loadFeature","currentNode","resolve","context","parseConfig","readConfig","findConfig","clearCaches","oldDataWarning","env","message","this","name","Error","captureStackTrace","prototype","jsReleases","agents","jsEOL","path","e2c","parse","ANDROID_EVERGREEN_FIRST","isVersionsMatch","versionA","versionB","normalize","versions","filter","version","normalizeElectron","versionToUse","split","length","slice","join","nameMapper","getMajor","parseInt","getMajorVersions","released","number","majorVersions","uniq","map","minimum","selected","i","unshift","array","filtered","push","fillUsage","result","data","generateFilter","sign","parseFloat","v","parseSimpleInt","x","compare","a","b","compareSemver","semverFilterLoose","operator","range","compareSemverLoose","normalizeVersion","resolved","versionAliases","resolveVersion","filterByYear","since","Object","keys","reduce","byName","releaseDate","date","cloneData","toLowerCase","aliases","mobileToDesktop","desktopNames","desktop","android","chrome","normalizeAndroidVersions","obj","copy","key","copyObject","forEach","undefined","cloned","androidVersions","chromeVersions","iFirstEvergreen","checkName","filterJumps","list","nVersions","jump","op_mob","isSupported","flags","withPartial","queries","QUERIES","node","index","not","query","type","select","call","j","parts","compose","prepareOpts","prepareQueries","defaults","checkQueries","Array","isArray","cache","ignoreUnknownVersions","dangerousExtend","browser","customUsage","cacheKey","JSON","stringify","sort","name1","name2","version1","BROWSERSLIST_DISABLE_CACHE","nodeQuery","matched","nodeVersions","sinceQuery","year","month","day","Date","UTC","coverQuery","coverage","usage","global","place","match","toUpperCase","coveraged","custom","fx","ff","ios","explorer","blackberry","explorermobile","operamini","operamobile","chromeandroid","firefoxandroid","ucandroid","qqandroid","and_chr","and_ff","ie_mob","customStats","dataByBrowser","all","last_major_versions","matches","regexp","last_versions","last_electron_major_versions","last_node_major_versions","last_browser_major_versions","last_electron_versions","last_node_versions","last_browser_versions","unreleased_versions","unreleased_electron_versions","unreleased_browser_versions","last_years","now","years","since_y","since_y_m","since_y_m_d","popularity","popularity_in_my_stats","percentage","popularity_in_config_stats","loadStat","popularity_in_place","cover","cover_in","supports","feature","supportType","features","checkDesktop","electron_range","fromToUse","toToUse","to","parsed","node_range","browser_range","electron_ray","node_ray","browser_ray","alias","firefox_esr","opera_mini_all","electron_version","node_major_version","node_minor_version","node_patch_version","current_node","maintained_node","end","start","some","phantomjs_1_9","phantomjs_2_1","browser_version","browserslist_config","extends","dead","unknown","release_date","usage_global","full","interval","release","AND_REGEXP","OR_REGEXP","flatten","matchQuery","matchBlock","string","qs","predicate","n","max","substr","find","trim","block","A","J","D","E","F","B","TC","C","K","L","G","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","c","d","e","f","g","h","k","l","m","o","p","w","y","z","H","UC","I","AB","q","r","s","t","BB","CB","DB","EB","FB","GB","HB","IB","JB","KB","LB","MB","NB","OB","PB","QB","RB","SB","TB","UB","VB","WB","XB","YB","ZB","aB","bB","cB","dB","eB","fB","gB","hB","iB","jB","kB","lB","mB","nB","oB","pB","qB","rB","sB","tB","uB","vB","u","wB","xB","yB","zB","AC","BC","CC","DC","VC","WC","XC","YC","EC","ZC","aC","bC","cC","FC","GC","dC","eC","HC","IC","fC","JC","KC","LC","MC","NC","gC","OC","PC","QC","hC","iC","jC","kC","lC","mC","RC","nC","oC","SC","pC","qC","rC","sC","tC","uC","vC","wC","xC","yC","zC","AD","BD","CD","DD","ED","FD","GD","HD","ID","JD","KD","LD","MD","ND","OD","PD","QD","RD","SD","TD","UD","VD","agentsData","unpackBrowserVersions","versionsData","entry","prefix_exceptions","map2","key2","prefix","browserVersions","compatTransforms","_transform","transform","transformsWhitelist","arguments","transformToApply","extra","transformName","hasOwnProperty","handler","getAST","getExtra","setExtra","_createClass","defineProperties","target","props","descriptor","enumerable","configurable","writable","defineProperty","Constructor","protoProps","staticProps","RegExpTree","re","_ref","groups","source","instance","TypeError","_classCallCheck","_re","_groups","dotAll","includes","ignoreCase","multiline","sticky","unicode","value","compile","_toStringResult","exec","group","groupNumber","_hasUFlag","shouldRun","ast","Char","kind","toValue","toSymbol","expressions","symbol","_groupNames","init","Group","nameRaw","Backreference","reference","referenceRaw","RegExp","namedCapturingGroups","xFlag","gen","generator","body","Alternative","Disjunction","left","right","expression","capturing","Assertion","assertion","negative","_assertion","CharacterClass","ClassRange","Repetition","quantifier","Quantifier","greedy","escaped","UnicodeProperty","shorthand","binary","generate","_slicedToArray","arr","Symbol","iterator","_arr","_n","_d","_e","_s","_i","next","done","err","sliceIterator","_toConsumableArray","arr2","currentTransitionMap","sameRow","r1","r2","s1","s2","size","areEquivalent","table","alphabet","_iteratorNormalCompletion8","_didIteratorError8","_iteratorError8","_step8","_iterator8","goToSameSet","return","originalTransitionS1","originalTransitionS2","has","minimize","dfa","getTransitionTable","allStates","getAlphabet","accepting","getAcceptingStateNumbers","nonAccepting","Set","state","Number","add","set","current","previous","_loop","newTransitionMap","_iteratorNormalCompletion3","_didIteratorError3","_iteratorError3","_step3","_iterator3","_set","handledStates","_set2","first","rest","_iteratorNormalCompletion4","_didIteratorError4","_iteratorError4","restSets","_step4","_iterator4","_iteratorNormalCompletion5","_didIteratorError5","_iteratorError5","_step5","_iterator5","handledState","assign","newSets","remaped","Map","idx","minimizedTable","minimizedAcceptingStates","updateAcceptingStates","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","entries","_ref2","_idx","_iteratorNormalCompletion6","_didIteratorError6","_iteratorError6","_step6","_iterator6","originalTransition","_iteratorNormalCompletion7","_didIteratorError7","_iteratorError7","_step7","_iterator7","originalState","get","setTransitionTable","setAcceptingStateNumbers","DFAMinimizer","EPSILON_CLOSURE","DFA","nfa","_nfa","_originalAcceptingStateNumbers","_acceptingStateNumbers","_originalTransitionTable","_transitionTable","stateNumbers","_this","nfaTable","nfaStates","worklist","nfaAcceptingStates","dfaTable","states","nfaAcceptingState","shift","dfaStateLabel","onSymbol","nfaStatesOnSymbol","nfaStateOnSymbol","apply","dfaStatesOnSymbolSet","dfaStatesOnSymbol","dfaOnSymbolStr","_remapStateNumbers","calculatedDFATable","newStatesMap","transitionTable","originalNumber","newNumber","originalRow","row","_originalNumber","NFA","nfaFromRegExp","builders","toNFA","toDFA","NFAState","EPSILON","char","inState","outState","addTransition","altPair","second","out","in","orPair","alt","_len","fragments","_key","or","_len2","_key2","rep","fragment","repExplicit","plusRep","questionRep","parser","_require","captureLocations","State","_State","self","ReferenceError","_possibleConstructorReturn","__proto__","getPrototypeOf","subClass","superClass","create","constructor","setPrototypeOf","_inherits","visited","getTransitionsOnSymbol","symbolTransitions","_this2","_epsilonClosure","epsilonTransitions","closure","nextState","getEpsilonClosure","_alphabet","transitions","_acceptingStates","getAcceptingStates","acceptingState","symbols","visitState","getTransitions","combinedState","_ref$accepting","_transitions","toState","clone","optimizationTransforms","optimize","_ref$whitelist","whitelist","_ref$blacklist","blacklist","TransformResult","prevResultString","transformer","newResult","UPPER_A_CP","codePointAt","UPPER_Z_CP","_AZClassRanges","parent","isNaN","codePoint","classRange","lower","isSurrogatePair","_getSurrogatePairFrom","trail","lead","Math","floor","getSurrogatePairFromCodePoint","repeat","code","displaySymbolAsValue","sortCharClass","aValue","getSortValue","bValue","isMeta","isControl","Infinity","fitsInMetas","metas","hasIUFlags","fitsInMeta","meta","fitsInMetaS","fitsInMetaD","fitsInMetaW","combinesWithPrecedingClassRange","fitsInClassRange","isMetaWCharOrCode","combinesWithFollowingClassRange","charCombinesWithPrecedingChars","nbMergedChars","currentExpression","precedingExpresion","_hasIUFlags","splice","getParent","insertChildAt","sources","childPath","getChild","jsonEncode","remove","_hasIFlag","isFullNumberRange","rewriteNumberRanges","hasIFlag","hasUFlag","numberPath","lowerCasePath","upperCasePath","underscorePath","u017fPath","u212aPath","isMetaChar","isLowerCaseRange","isUpperCaseRange","isUnderscore","isCodePoint","rewriteWordRanges","whitespaceRangeTests","every","nNode","NaN","Boolean","rewriteWhitespaceRanges","isChar","shouldEscape","previousNode","hasAppropriateSiblings","isAppropriateChar","_node$expressions$","getInverseMeta","LOWER_A_CP","LOWER_Z_CP","DIGIT_0_CP","DIGIT_9_CP","String","fromCodePoint","newChar","parentType","needsEscape","consumeNumbers","startIndex","rtl","siblingNode","abs","isSimpleChar","_hasXFlag","hasXFlag","nbFollowingNumbers","nextSiblingNode","preservesOpeningCurlyBraceEscape","nbPrecedingNumbers","previousSiblingNode","preservesClosingCurlyBraceEscape","preservesEscape","preservesInCharClass","shouldUnescape","NodePath","increaseQuantifierByOne","combineRepeatingPatternLeft","alternative","child","nbPossibleLengths","ceil","getForNode","hasEqualSource","combineWithPreviousRepetition","previousChild","combineRepetitionWithPrevious","rightLength","disjunctionToList","listToDisjunction","uniqueNodesMap","part","encoded","handlers","charset","shouldProcess","characterClass","rewriteOpenZero","rewriteOpenOne","parentPath","rewriteExactOne","isGreedyOpenRange","extractFromTo","previousSibling","getPreviousSibling","_extractFromTo","previousSiblingFrom","previousSiblingTo","_extractFromTo2","nodeFrom","nodeTo","yytext","yy","__","__loc","yyloc","options","startOffset","endOffset","startLine","endLine","startColumn","endColumn","productions","_1","_1loc","_2","_3","_4","_2loc","_3loc","_4loc","Node","checkFlags","loc","_loc","separatorIdx","isShorthand","unicodeProperties","isGeneralCategoryValue","isBinaryProperty","isBinaryPropertyName","isValidName","SyntaxError","isValidValue","canonicalName","getCanonicalName","canonicalValue","getCanonicalValue","text","textLoc","capturingGroupsCount","decodeUnicodeGroupName","namedGroups","charRe","chars","uReStart","ucpReStart","NamedGroupRefOrChars","getRange","allowGroupNameDuplicates","checkClassRange","tokens","stack","tokenizer","lexRules","validateUnicodeGroupName","getCurrentState","popState","lexRulesByConditions","EOF_TOKEN","initString","_string","_cursor","_states","_tokensQueue","_currentLine","_currentColumn","_currentLineBeginOffset","_tokenStartOffset","_tokenEndOffset","_tokenStartLine","_tokenEndLine","_tokenStartColumn","_tokenEndColumn","getStates","begin","pop","getNextToken","onToken","_toToken","hasMoreTokens","lexRulesForState","lexRuleIndex","lexRule","_match","token","tokensToQueue","isEOF","throwUnexpectedToken","line","column","lineSource","lineData","getCursor","getCurrentLine","getCurrentColumn","_captureLocation","nlRe","nlMatch","tokenType","lexer","yyparse","setOptions","getOptions","parseOptions","globalOptions","onParseBegin","shiftedToken","unexpectedEndOfInput","unexpectedToken","_loc2","onShift","semanticValue","productionNumber","production","hasSemanticAction","semanticValueArgs","locationArgs","rhsLength","stackEntry","reduceStackEntry","semanticActionArgs","symbolToReduceWith","onParseEnd","setTokenizer","customTokenizer","getTokenizer","parsingString","isFinite","lastSlash","lastIndexOf","_value$split$slice2","hex","validFlags","seen","flag","ucpReAnywhere","uidRe","_","leadSurrogate","trailSurrogate","leadSurrogateOnly","trailSurrogateOnly","nonSurrogate","offset","parseError","regexpTreeParser","generatedParseFn","bind","NON_BINARY_PROP_NAMES_TO_ALIASES","General_Category","Script","Script_Extensions","NON_BINARY_ALIASES_TO_PROP_NAMES","inverseMap","BINARY_PROP_NAMES_TO_ALIASES","ASCII","ASCII_Hex_Digit","Alphabetic","Any","Assigned","Bidi_Control","Bidi_Mirrored","Case_Ignorable","Cased","Changes_When_Casefolded","Changes_When_Casemapped","Changes_When_Lowercased","Changes_When_NFKC_Casefolded","Changes_When_Titlecased","Changes_When_Uppercased","Dash","Default_Ignorable_Code_Point","Deprecated","Diacritic","Emoji","Emoji_Component","Emoji_Modifier","Emoji_Modifier_Base","Emoji_Presentation","Extended_Pictographic","Extender","Grapheme_Base","Grapheme_Extend","Hex_Digit","IDS_Binary_Operator","IDS_Trinary_Operator","ID_Continue","ID_Start","Ideographic","Join_Control","Logical_Order_Exception","Lowercase","Noncharacter_Code_Point","Pattern_Syntax","Pattern_White_Space","Quotation_Mark","Radical","Regional_Indicator","Sentence_Terminal","Soft_Dotted","Terminal_Punctuation","Unified_Ideograph","Uppercase","Variation_Selector","White_Space","XID_Continue","XID_Start","BINARY_ALIASES_TO_PROP_NAMES","GENERAL_CATEGORY_VALUE_TO_ALIASES","Cased_Letter","Close_Punctuation","Connector_Punctuation","Control","Currency_Symbol","Dash_Punctuation","Decimal_Number","Enclosing_Mark","Final_Punctuation","Format","Initial_Punctuation","Letter","Letter_Number","Line_Separator","Lowercase_Letter","Mark","Math_Symbol","Modifier_Letter","Modifier_Symbol","Nonspacing_Mark","Open_Punctuation","Other","Other_Letter","Other_Number","Other_Punctuation","Other_Symbol","Paragraph_Separator","Private_Use","Punctuation","Separator","Space_Separator","Spacing_Mark","Surrogate","Titlecase_Letter","Unassigned","Uppercase_Letter","GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES","SCRIPT_VALUE_TO_ALIASES","Adlam","Ahom","Anatolian_Hieroglyphs","Arabic","Armenian","Avestan","Balinese","Bamum","Bassa_Vah","Batak","Bengali","Bhaiksuki","Bopomofo","Brahmi","Braille","Buginese","Buhid","Canadian_Aboriginal","Carian","Caucasian_Albanian","Chakma","Cham","Cherokee","Common","Coptic","Cuneiform","Cypriot","Cyrillic","Deseret","Devanagari","Dogra","Duployan","Egyptian_Hieroglyphs","Elbasan","Ethiopic","Georgian","Glagolitic","Gothic","Grantha","Greek","Gujarati","Gunjala_Gondi","Gurmukhi","Han","Hangul","Hanifi_Rohingya","Hanunoo","Hatran","Hebrew","Hiragana","Imperial_Aramaic","Inherited","Inscriptional_Pahlavi","Inscriptional_Parthian","Javanese","Kaithi","Kannada","Katakana","Kayah_Li","Kharoshthi","Khmer","Khojki","Khudawadi","Lao","Latin","Lepcha","Limbu","Linear_A","Linear_B","Lisu","Lycian","Lydian","Mahajani","Makasar","Malayalam","Mandaic","Manichaean","Marchen","Medefaidrin","Masaram_Gondi","Meetei_Mayek","Mende_Kikakui","Meroitic_Cursive","Meroitic_Hieroglyphs","Miao","Modi","Mongolian","Mro","Multani","Myanmar","Nabataean","New_Tai_Lue","Newa","Nko","Nushu","Ogham","Ol_Chiki","Old_Hungarian","Old_Italic","Old_North_Arabian","Old_Permic","Old_Persian","Old_Sogdian","Old_South_Arabian","Old_Turkic","Oriya","Osage","Osmanya","Pahawh_Hmong","Palmyrene","Pau_Cin_Hau","Phags_Pa","Phoenician","Psalter_Pahlavi","Rejang","Runic","Samaritan","Saurashtra","Sharada","Shavian","Siddham","SignWriting","Sinhala","Sogdian","Sora_Sompeng","Soyombo","Sundanese","Syloti_Nagri","Syriac","Tagalog","Tagbanwa","Tai_Le","Tai_Tham","Tai_Viet","Takri","Tamil","Tangut","Telugu","Thaana","Thai","Tibetan","Tifinagh","Tirhuta","Ugaritic","Vai","Warang_Citi","Yi","Zanabazar_Square","SCRIPT_VALUE_ALIASES_TO_VALUE","inverse","isScriptCategoryValue","isAlias","isGeneralCategoryName","isScriptCategoryName","compatTranspiler","optimizer","_traverse","fa","regexpTree","traverse","toRegExp","compat","compatTranspile","getSource","getFlags","_ast","_source","_regexp","_extra","asNodes","getPathFor","prop","initRegistry","root","pre","post","skipProperty","visit","res","_prop","traversingIndexStack","updateTraversingIndex","astTraverse","nodePath","isRemoved","handlerFuncPre","handlerFuncPost","DEFAULT_COLLECTION_PROP","DEFAULT_SINGLE_PROP","property","_enforceProp","setChild","getTraversingIndex","_rebuildIndex","registry","delete","newNode","nodeProps","jsonSkipLoc","format","useLoc","clear","dx","SemverPart","numbersToRanges","numbers","semverify","versionParts","versionPart","semverPart","semver","compareSemvers","major","minor","patch","majorBase","minorBase","patchBase","ignoreMinor","ignorePatch","compareMinor","comparePatch","compareArrays","len","items","AlternativeNode","exps","SimpleCharNode","ClassRangeNode","CharacterClassNode","CapturingGroupNode","DisjunctionCapturingGroupNode","expr","exprs","disjunction","reduceRight","DisjunctionNode","DigitPatternNode","NumberPatternNode","numberPattern","RepetitionNode","NumberCharsNode","isNumberPatternNode","isCharNode","isDigitRangeNode","isExpressionNode","parseRegex","regex","classes","visitors","newVisitors","className","visitor","visitorPre","visitorPost","numberToDigits","num","rayRangeDigitPattern","digit","rangeStart","segmentRangeNumberPattern","zeros","fromNode","toNode","zerosPrefix","segmentToNumberPatterns","digitsInNumber","fromDigits","digitsCount","toDigits","decadeRanges","ranges","decade","min","splitToDecadeRanges","commonStart","common","currA","currB","diffA","diffB","splitCommonDiff","from1","to1","diffParts","middleSegment","ri","patterns","prevNode","merged","exp","rangeToRegex","digits","other","RangeQuantifierNode","pow","numberPatterns","topNodes","prev","nodes","rayToNumberPatterns","getNumberPatternsPart","numberPatternsCount","regexAst","maxNumbersCount","count","getNumberPatternsCount","numbersCounter","containsNumberPattern","applyVersionsToRegex","finalVersions","maxRequiredPartsCount","allowZeroSubversions","shouldRepeatCount","getRequiredSemverPartsCount","numberPatternsPart","versionsPart","rangedVersion","ignoreIndex","prevWasZero","createMapper","rangedSemverToRegex","numbersToReplace","replaceNumberPatterns","defaultOptions","getPreUserAgentRegexes","finalOptions","browserRegexes","sourceRegex","maxVersion","matchedVersions","Major","Minor","Patch","versionsListToRanges","applyVersionsToRegexes","targetRegexes","prevFamily","prevRegexIsGlobal","requestVersions","family","minVersion","bases","compareOptions","minComparator","ver","maxComparator","comparator","findMatchedVersions","getRegexesForBrowsers","merge","strVersion","mergeBrowserVersions","browserslistOptions","versionString","versionStringTo","partIndex","i1","rangeSemver","getBrowsersList","src","optimizeRegex","regexes"],"sourceRoot":""}